From f47b9b0034ac8ce14ea85be83c02abbb2568822b Mon Sep 17 00:00:00 2001 From: Jan Mas Rovira Date: Mon, 9 Sep 2024 14:02:47 +0200 Subject: [PATCH] Do not duplicate nockma stdlib in the nockma backend (#3005) --- src/Juvix/Compiler/Nockma/Language.hs | 1 + src/Juvix/Compiler/Nockma/Pretty/Base.hs | 1 + .../Compiler/Nockma/Translation/FromTree.hs | 17 +++++++++++++++-- src/Juvix/Extra/Strings.hs | 3 +++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Juvix/Compiler/Nockma/Language.hs b/src/Juvix/Compiler/Nockma/Language.hs index 9aef3f6b83..2fadde74b7 100644 --- a/src/Juvix/Compiler/Nockma/Language.hs +++ b/src/Juvix/Compiler/Nockma/Language.hs @@ -122,6 +122,7 @@ data AtomHint | AtomHintNil | AtomHintVoid | AtomHintFunctionsPlaceholder + | AtomHintStdlibPlaceholder | AtomHintString deriving stock (Show, Eq, Lift, Generic) diff --git a/src/Juvix/Compiler/Nockma/Pretty/Base.hs b/src/Juvix/Compiler/Nockma/Pretty/Base.hs index be58c50aae..b164fa81b3 100644 --- a/src/Juvix/Compiler/Nockma/Pretty/Base.hs +++ b/src/Juvix/Compiler/Nockma/Pretty/Base.hs @@ -44,6 +44,7 @@ instance forall a. (PrettyCode a, NockNatural a) => PrettyCode (Atom a) where AtomHintNil -> return (annotate (AnnKind KNameConstructor) Str.nil) AtomHintVoid -> return (annotate (AnnKind KNameAxiom) Str.void) AtomHintFunctionsPlaceholder -> return (annotate (AnnKind KNameAxiom) Str.functionsPlaceholder) + AtomHintStdlibPlaceholder -> return (annotate (AnnKind KNameAxiom) Str.stdlibPlaceholder) AtomHintString -> atomToText atm >>= ppCode instance PrettyCode Text where diff --git a/src/Juvix/Compiler/Nockma/Translation/FromTree.hs b/src/Juvix/Compiler/Nockma/Translation/FromTree.hs index 56db41b343..08613b1619 100644 --- a/src/Juvix/Compiler/Nockma/Translation/FromTree.hs +++ b/src/Juvix/Compiler/Nockma/Translation/FromTree.hs @@ -690,7 +690,7 @@ compile = \case FunctionsLibrary -> OpQuote # functionsLibraryPlaceHolder RawCode -> opAddress "allocClosureFunPath" (fpath <> closurePath RawCode) TempStack -> remakeList [] - StandardLibrary -> OpQuote # stdlib + StandardLibrary -> OpQuote # stdlibPlaceHolder ClosureTotalArgsNum -> nockNatLiteral farity ClosureArgsNum -> nockIntegralLiteral (length args) ClosureArgs -> remakeList args @@ -958,7 +958,7 @@ runCompilerWith opts constrs moduleFuns mainFun = makeAnomaFun FunctionsLibrary -> ("functionsLibrary-" <> funName) @ functionsLibraryPlaceHolder RawCode -> ("rawCode-" <> funName) @ c TempStack -> ("tempStack-" <> funName) @ nockNilHere - StandardLibrary -> ("stdlib-" <> funName) @ stdlib + StandardLibrary -> ("stdlib-" <> funName) @ stdlibPlaceHolder ClosureTotalArgsNum -> ("closureTotalArgsNum-" <> funName) @ nockNilHere ClosureArgsNum -> ("closureArgsNum-" <> funName) @ nockNilHere ClosureArgs -> ("closureArgs-" <> funName) @ nockNilHere @@ -1001,6 +1001,19 @@ runCompilerWith opts constrs moduleFuns mainFun = makeAnomaFun { _anomaClosure = mainClosure } +stdlibPlaceHolder :: Term Natural +stdlibPlaceHolder = + TermAtom + Atom + { _atomInfo = + AtomInfo + { _atomInfoLoc = Irrelevant Nothing, + _atomInfoTag = Nothing, + _atomInfoHint = Just AtomHintStdlibPlaceholder + }, + _atom = 0 :: Natural + } + functionsLibraryPlaceHolder :: Term Natural functionsLibraryPlaceHolder = TermAtom diff --git a/src/Juvix/Extra/Strings.hs b/src/Juvix/Extra/Strings.hs index b9a3698a68..f3607b646b 100644 --- a/src/Juvix/Extra/Strings.hs +++ b/src/Juvix/Extra/Strings.hs @@ -1022,6 +1022,9 @@ version = "version" functionsPlaceholder :: (IsString s) => s functionsPlaceholder = "functionsLibrary_placeholder" +stdlibPlaceholder :: (IsString s) => s +stdlibPlaceholder = "stdlib_placeholder" + theFunctionsLibrary :: (IsString s) => s theFunctionsLibrary = "the_functionsLibrary"