diff --git a/exe/Main.hs b/exe/Main.hs index 7e2e25e..7e99bad 100644 --- a/exe/Main.hs +++ b/exe/Main.hs @@ -4,10 +4,10 @@ import Cli (Args (luaOutputFile)) import Cli qualified import Control.Monad.Oops qualified as Oops import Data.Tagged (Tagged (..)) +import Language.Lua.Printer qualified as Printer import Language.PureScript.Backend qualified as Backend import Language.PureScript.Backend.IR qualified as IR import Language.PureScript.Backend.Lua qualified as Lua -import Language.PureScript.Backend.Lua.Printer qualified as Printer import Language.PureScript.CoreFn.Reader qualified as CoreFn import Language.PureScript.Names (runIdent, runModuleName) import Main.Utf8 qualified as Utf8 diff --git a/lib/Language/Lua/Name.hs b/lib/Language/Lua/Name.hs new file mode 100644 index 0000000..ed8b728 --- /dev/null +++ b/lib/Language/Lua/Name.hs @@ -0,0 +1,94 @@ +{-# LANGUAGE TemplateHaskellQuotes #-} + +module Language.Lua.Name + ( Name + , toText + , name + , unsafeName + , unsafeFromText + , makeSafe + , fromText + ) where + +import Data.Char qualified as Char +import Data.Set qualified as Set +import Data.Text qualified as Text +import Language.Haskell.TH.Quote (QuasiQuoter (..)) +import Prettyprinter (Pretty) +import Prelude hiding (toText) + +newtype Name = Name {toText ∷ Text} + deriving newtype (Eq, Ord, Show, Pretty) + +name ∷ QuasiQuoter +name = + QuasiQuoter + { quoteExp = \(s ∷ String) → + case fromText (fromString s) of + Nothing → error "Language.Lua.Name: invalid name" + Just (Name n) → ⟦Name n⟧ + , quotePat = const $ error "Language.Lua.Name.quotePat: unsupported" + , quoteType = const $ error "Language.Lua.Name.quoteType: unsupported" + , quoteDec = const $ error "Language.Lua.Name.quoteDec: unsupported" + } + +fromText ∷ Text → Maybe Name +fromText t = + case Text.strip t of + n + | Text.length n > 0 + , checkFirst (Text.head n) + , Text.all checkRest (Text.tail n) + , Set.notMember n reservedNames → + Just (Name n) + _ → Nothing + where + checkFirst c = Char.isAlpha c || c == '_' + checkRest c = Char.isDigit c || checkFirst c + +makeSafe ∷ HasCallStack ⇒ Text → Name +makeSafe unsafe = unsafeName safest + where + safest = + if safer `Set.member` reservedNames + then '_' `Text.cons` safer `Text.snoc` '_' + else safer + safer = + Text.replace "$" "_S_" . Text.replace "." "_" $ + Text.replace "'" "Prime" unsafe + +unsafeName ∷ HasCallStack ⇒ Text → Name +unsafeName n = + fromMaybe + (error $ unwords ["Language.Lua.Name.unsafeName:", "invalid name", show n]) + (fromText n) + +unsafeFromText ∷ Text → Name +unsafeFromText = Name + +reservedNames ∷ Set Text +reservedNames = + Set.fromList + [ "and" + , "break" + , "do" + , "else" + , "elseif" + , "end" + , "false" + , "for" + , "function" + , "goto" + , "if" + , "in" + , "local" + , "nil" + , "not" + , "or" + , "repeat" + , "return" + , "then" + , "true" + , "until" + , "while" + ] diff --git a/lib/Language/PureScript/Backend/Lua/Printer.hs b/lib/Language/Lua/Printer.hs similarity index 96% rename from lib/Language/PureScript/Backend/Lua/Printer.hs rename to lib/Language/Lua/Printer.hs index ce9b7cc..08116c5 100644 --- a/lib/Language/PureScript/Backend/Lua/Printer.hs +++ b/lib/Language/Lua/Printer.hs @@ -1,9 +1,9 @@ -module Language.PureScript.Backend.Lua.Printer where +module Language.Lua.Printer where import Data.List.NonEmpty qualified as NE +import Language.Lua.Types +import Language.Lua.Types qualified as Lua import Language.PureScript.Backend.Lua.Name qualified as Lua -import Language.PureScript.Backend.Lua.Types -import Language.PureScript.Backend.Lua.Types qualified as Lua import Prettyprinter ( Doc , Pretty (pretty) diff --git a/lib/Language/PureScript/Backend/Lua/Traversal.hs b/lib/Language/Lua/Traversal.hs similarity index 98% rename from lib/Language/PureScript/Backend/Lua/Traversal.hs rename to lib/Language/Lua/Traversal.hs index 38dbf64..8546041 100644 --- a/lib/Language/PureScript/Backend/Lua/Traversal.hs +++ b/lib/Language/Lua/Traversal.hs @@ -1,8 +1,8 @@ {-# LANGUAGE AllowAmbiguousTypes #-} -module Language.PureScript.Backend.Lua.Traversal where +module Language.Lua.Traversal where -import Language.PureScript.Backend.Lua.Types +import Language.Lua.Types import Prelude hiding (local) everywhereExp diff --git a/lib/Language/PureScript/Backend/Lua/Types.hs b/lib/Language/Lua/Types.hs similarity index 98% rename from lib/Language/PureScript/Backend/Lua/Types.hs rename to lib/Language/Lua/Types.hs index 0e357aa..34354d0 100644 --- a/lib/Language/PureScript/Backend/Lua/Types.hs +++ b/lib/Language/Lua/Types.hs @@ -1,9 +1,9 @@ {-# LANGUAGE QuasiQuotes #-} -module Language.PureScript.Backend.Lua.Types where +module Language.Lua.Types where -import Language.PureScript.Backend.Lua.Name (Name) -import Language.PureScript.Backend.Lua.Name qualified as Lua +import Language.Lua.Name (Name) +import Language.Lua.Name qualified as Lua import Prettyprinter (Pretty) import Prelude hiding ( and diff --git a/lib/Language/PureScript/Backend.hs b/lib/Language/PureScript/Backend.hs index 83deb30..38d6d73 100644 --- a/lib/Language/PureScript/Backend.hs +++ b/lib/Language/PureScript/Backend.hs @@ -4,12 +4,12 @@ import Control.Monad.Oops (CouldBeAnyOf, Variant) import Control.Monad.Oops qualified as Oops import Data.Map qualified as Map import Data.Tagged (Tagged (..), untag) +import Language.Lua.Types qualified as Lua import Language.PureScript.Backend.IR qualified as IR import Language.PureScript.Backend.IR.Linker qualified as Linker import Language.PureScript.Backend.IR.Optimizer (optimizedUberModule) import Language.PureScript.Backend.Lua qualified as Lua import Language.PureScript.Backend.Lua.Optimizer (optimizeChunk) -import Language.PureScript.Backend.Lua.Types qualified as Lua import Language.PureScript.Backend.Types (AppOrModule (..), entryPointModule) import Language.PureScript.CoreFn.Reader qualified as CoreFn import Path (Abs, Dir, Path, SomeBase) diff --git a/lib/Language/PureScript/Backend/Lua.hs b/lib/Language/PureScript/Backend/Lua.hs index 7c5df5b..3c9d2e9 100644 --- a/lib/Language/PureScript/Backend/Lua.hs +++ b/lib/Language/PureScript/Backend/Lua.hs @@ -17,6 +17,8 @@ import Data.Set qualified as Set import Data.Tagged (Tagged (..), untag) import Data.Text qualified as Text import Data.Traversable (for) +import Language.Lua.Types (ParamF (..)) +import Language.Lua.Types qualified as Lua import Language.PureScript.Backend.IR qualified as IR import Language.PureScript.Backend.IR.Linker (UberModule (..)) import Language.PureScript.Backend.IR.Linker qualified as Linker @@ -25,8 +27,6 @@ import Language.PureScript.Backend.Lua.Fixture qualified as Fixture import Language.PureScript.Backend.Lua.Linker.Foreign qualified as Foreign import Language.PureScript.Backend.Lua.Name qualified as Lua import Language.PureScript.Backend.Lua.Name qualified as Name -import Language.PureScript.Backend.Lua.Types (ParamF (..)) -import Language.PureScript.Backend.Lua.Types qualified as Lua import Language.PureScript.Backend.Types (AppOrModule (..)) import Language.PureScript.Names (ModuleName, runModuleName) import Language.PureScript.Names qualified as PS diff --git a/lib/Language/PureScript/Backend/Lua/DeadCodeEliminator.hs b/lib/Language/PureScript/Backend/Lua/DeadCodeEliminator.hs index 7234bab..a834874 100644 --- a/lib/Language/PureScript/Backend/Lua/DeadCodeEliminator.hs +++ b/lib/Language/PureScript/Backend/Lua/DeadCodeEliminator.hs @@ -7,9 +7,7 @@ import Data.Graph (Graph, Vertex, graphFromEdges, reachable) import Data.Map.Lazy qualified as Map import Data.Map.Merge.Lazy qualified as Map import Data.Set qualified as Set -import Language.PureScript.Backend.Lua.Name (Name) -import Language.PureScript.Backend.Lua.Name qualified as Name -import Language.PureScript.Backend.Lua.Traversal +import Language.Lua.Traversal ( Annotator (..) , Visitor (..) , annotateStatementInsideOutM @@ -17,7 +15,9 @@ import Language.PureScript.Backend.Lua.Traversal , unAnnotateStatement , visitStatementM ) -import Language.PureScript.Backend.Lua.Types qualified as Lua +import Language.Lua.Types qualified as Lua +import Language.PureScript.Backend.Lua.Name (Name) +import Language.PureScript.Backend.Lua.Name qualified as Name import Prelude hiding (exp) data DceMode = PreserveTopLevel | PreserveReturned diff --git a/lib/Language/PureScript/Backend/Lua/Fixture.hs b/lib/Language/PureScript/Backend/Lua/Fixture.hs index b9946e1..da3b69d 100644 --- a/lib/Language/PureScript/Backend/Lua/Fixture.hs +++ b/lib/Language/PureScript/Backend/Lua/Fixture.hs @@ -3,9 +3,14 @@ module Language.PureScript.Backend.Lua.Fixture where import Data.String.Interpolate (__i) -import Language.PureScript.Backend.Lua.Name (Name, name) +import Language.Lua.Name (Name, name) +import Language.Lua.Types + ( ExpF (Nil) + , Statement + , StatementF (ForeignSourceCode) + , local1 + ) import Language.PureScript.Backend.Lua.Name qualified as Name -import Language.PureScript.Backend.Lua.Types hiding (var) -------------------------------------------------------------------------------- -- Hard-coded Lua pieces ------------------------------------------------------- diff --git a/lib/Language/PureScript/Backend/Lua/Name.hs b/lib/Language/PureScript/Backend/Lua/Name.hs index 905aaa0..0f4135c 100644 --- a/lib/Language/PureScript/Backend/Lua/Name.hs +++ b/lib/Language/PureScript/Backend/Lua/Name.hs @@ -1,115 +1,18 @@ -{-# LANGUAGE TemplateHaskellQuotes #-} - module Language.PureScript.Backend.Lua.Name - ( Name - , fromText - , toText - , name - , unsafeName - , makeSafe + ( module Reexport , specialNameType , specialNameCtor , join2 ) where -import Data.Char qualified as Char -import Data.Set qualified as Set -import Data.Text qualified as Text -import Language.Haskell.TH.Quote (QuasiQuoter (..)) -import Prettyprinter (Pretty) -import Prelude hiding (toText) - -newtype Name = Name {toText ∷ Text} - deriving newtype (Eq, Ord, Show, Pretty) - -name ∷ QuasiQuoter -name = - QuasiQuoter - { quoteExp = \(s ∷ String) → - case fromText (fromString s) of - Nothing → - error "Language.PureScript.Backend.Lua.Name: invalid name" - Just (Name n) → ⟦Name n⟧ - , quotePat = - const $ - error "Language.PureScript.Backend.Lua.Name.quotePat: unsupported" - , quoteType = - const $ - error "Language.PureScript.Backend.Lua.Name.quoteType: unsupported" - , quoteDec = - const $ - error "Language.PureScript.Backend.Lua.Name.quoteDec: unsupported" - } - -fromText ∷ Text → Maybe Name -fromText t = - case Text.strip t of - n - | Text.length n > 0 - , checkFirst (Text.head n) - , Text.all checkRest (Text.tail n) - , Set.notMember n reservedNames → - Just (Name n) - _ → Nothing - where - checkFirst c = Char.isAlpha c || c == '_' - checkRest c = Char.isDigit c || checkFirst c - -makeSafe ∷ HasCallStack ⇒ Text → Name -makeSafe unsafe = unsafeName safest - where - safest = - if safer `Set.member` reservedNames - then '_' `Text.cons` safer `Text.snoc` '_' - else safer - safer = - Text.replace "$" "_S_" - . Text.replace "." "_" - $ Text.replace "'" "Prime" unsafe - -unsafeName ∷ HasCallStack ⇒ Text → Name -unsafeName n = - fromMaybe - ( error . unwords $ - [ "Language.PureScript.Backend.Lua.Name.unsafeName:" - , "invalid name" - , show n - ] - ) - (fromText n) +import Language.Lua.Name as Reexport +import Language.Lua.Name qualified as Name specialNameType ∷ Name -specialNameType = Name "$type" +specialNameType = Name.unsafeFromText "$type" specialNameCtor ∷ Name -specialNameCtor = Name "$ctor" - -reservedNames ∷ Set Text -reservedNames = - Set.fromList - [ "and" - , "break" - , "do" - , "else" - , "elseif" - , "end" - , "false" - , "for" - , "function" - , "goto" - , "if" - , "in" - , "local" - , "nil" - , "not" - , "or" - , "repeat" - , "return" - , "then" - , "true" - , "until" - , "while" - ] +specialNameCtor = Name.unsafeFromText "$ctor" join2 ∷ Name → Name → Name -join2 (Name a) (Name b) = Name (a <> "_I_" <> b) +join2 a b = Name.unsafeFromText (Name.toText a <> "_I_" <> Name.toText b) diff --git a/lib/Language/PureScript/Backend/Lua/Optimizer.hs b/lib/Language/PureScript/Backend/Lua/Optimizer.hs index 7362984..1ce0b78 100644 --- a/lib/Language/PureScript/Backend/Lua/Optimizer.hs +++ b/lib/Language/PureScript/Backend/Lua/Optimizer.hs @@ -3,14 +3,13 @@ module Language.PureScript.Backend.Lua.Optimizer where import Control.Monad.Trans.Accum (Accum, add, execAccum) import Data.List qualified as List import Data.Map qualified as Map -import Language.PureScript.Backend.Lua.Name qualified as Lua -import Language.PureScript.Backend.Lua.Traversal +import Language.Lua.Traversal ( everywhereExp , everywhereInChunkM , everywhereStat , everywhereStatM ) -import Language.PureScript.Backend.Lua.Types +import Language.Lua.Types ( Chunk , Exp , ExpF (..) @@ -21,7 +20,8 @@ import Language.PureScript.Backend.Lua.Types , unAnn , pattern Ann ) -import Language.PureScript.Backend.Lua.Types qualified as Lua +import Language.Lua.Types qualified as Lua +import Language.PureScript.Backend.Lua.Name qualified as Lua import Prelude hiding (return) optimizeChunk ∷ Chunk → Chunk diff --git a/pslua.cabal b/pslua.cabal index c918fd4..3c06971 100644 --- a/pslua.cabal +++ b/pslua.cabal @@ -121,6 +121,10 @@ library import: shared hs-source-dirs: lib exposed-modules: + Language.Lua.Name + Language.Lua.Printer + Language.Lua.Traversal + Language.Lua.Types Language.PureScript.Backend Language.PureScript.Backend.IR Language.PureScript.Backend.IR.DCE @@ -134,9 +138,6 @@ library Language.PureScript.Backend.Lua.Linker.Foreign Language.PureScript.Backend.Lua.Name Language.PureScript.Backend.Lua.Optimizer - Language.PureScript.Backend.Lua.Printer - Language.PureScript.Backend.Lua.Traversal - Language.PureScript.Backend.Lua.Types Language.PureScript.Backend.Types Language.PureScript.CoreFn Language.PureScript.CoreFn.Expr diff --git a/test/Language/PureScript/Backend/Lua/DeadCodeEliminatorSpec.hs b/test/Language/PureScript/Backend/Lua/DeadCodeEliminatorSpec.hs index 8a7e9e4..713be42 100644 --- a/test/Language/PureScript/Backend/Lua/DeadCodeEliminatorSpec.hs +++ b/test/Language/PureScript/Backend/Lua/DeadCodeEliminatorSpec.hs @@ -7,6 +7,8 @@ import Control.Monad.Trans.Accum (Accum, execAccum) import Hedgehog (annotateShow, forAll, (===)) import Hedgehog.Gen qualified as Gen import Hedgehog.Range qualified as Range +import Language.Lua.Types (ParamF (..)) +import Language.Lua.Types qualified as Lua import Language.PureScript.Backend.Lua.DeadCodeEliminator ( DceMode (PreserveReturned) , MonadScopes (..) @@ -15,8 +17,6 @@ import Language.PureScript.Backend.Lua.DeadCodeEliminator qualified as DCE import Language.PureScript.Backend.Lua.Fixture qualified as Fixture import Language.PureScript.Backend.Lua.Gen qualified as Gen import Language.PureScript.Backend.Lua.Name qualified as Lua -import Language.PureScript.Backend.Lua.Types (ParamF (..)) -import Language.PureScript.Backend.Lua.Types qualified as Lua import Test.Hspec (Spec, describe) import Test.Hspec.Hedgehog.Extended (test) diff --git a/test/Language/PureScript/Backend/Lua/Gen.hs b/test/Language/PureScript/Backend/Lua/Gen.hs index f581025..5237f3b 100644 --- a/test/Language/PureScript/Backend/Lua/Gen.hs +++ b/test/Language/PureScript/Backend/Lua/Gen.hs @@ -4,10 +4,10 @@ import Data.Text qualified as Text import Hedgehog (Gen, Range) import Hedgehog.Gen.Extended qualified as Gen import Hedgehog.Range qualified as Range +import Language.Lua.Printer (printStatement) +import Language.Lua.Types (ParamF (..)) +import Language.Lua.Types qualified as Lua import Language.PureScript.Backend.Lua.Name (Name, unsafeName) -import Language.PureScript.Backend.Lua.Printer (printStatement) -import Language.PureScript.Backend.Lua.Types (ParamF (..)) -import Language.PureScript.Backend.Lua.Types qualified as Lua import Prettyprinter (defaultLayoutOptions, layoutPretty) import Prettyprinter.Render.Text (renderStrict) import Prelude hiding (local, return) diff --git a/test/Language/PureScript/Backend/Lua/GoldenSpec.hs b/test/Language/PureScript/Backend/Lua/GoldenSpec.hs index 2a1742c..54aa9a5 100644 --- a/test/Language/PureScript/Backend/Lua/GoldenSpec.hs +++ b/test/Language/PureScript/Backend/Lua/GoldenSpec.hs @@ -9,6 +9,7 @@ import Data.List qualified as List import Data.String qualified as String import Data.Tagged (Tagged (..)) import Data.Text qualified as Text +import Language.Lua.Printer qualified as Printer import Language.PureScript.Backend.IR qualified as IR import Language.PureScript.Backend.IR.Linker (LinkMode (..)) import Language.PureScript.Backend.IR.Linker qualified as IR @@ -16,7 +17,6 @@ import Language.PureScript.Backend.IR.Linker qualified as Linker import Language.PureScript.Backend.IR.Optimizer (optimizedUberModule) import Language.PureScript.Backend.Lua qualified as Lua import Language.PureScript.Backend.Lua.Optimizer (optimizeChunk) -import Language.PureScript.Backend.Lua.Printer qualified as Printer import Language.PureScript.Backend.Types (AppOrModule (..)) import Language.PureScript.CoreFn.Reader qualified as CoreFn import Language.PureScript.Names (ModuleName) diff --git a/test/Language/PureScript/Backend/Lua/OptimizerSpec.hs b/test/Language/PureScript/Backend/Lua/OptimizerSpec.hs index e97eeec..8c5af31 100644 --- a/test/Language/PureScript/Backend/Lua/OptimizerSpec.hs +++ b/test/Language/PureScript/Backend/Lua/OptimizerSpec.hs @@ -2,14 +2,14 @@ module Language.PureScript.Backend.Lua.OptimizerSpec where +import Language.Lua.Types (ParamF (..)) +import Language.Lua.Types qualified as Lua import Language.PureScript.Backend.Lua.Name (name) import Language.PureScript.Backend.Lua.Optimizer ( pushDeclarationsDownTheInnerScope , removeScopeWhenInsideEmptyFunction , rewriteExpWithRule ) -import Language.PureScript.Backend.Lua.Types (ParamF (..)) -import Language.PureScript.Backend.Lua.Types qualified as Lua import Shower (shower) import Test.Hspec (Spec, describe, it) import Test.Hspec.Expectations.Pretty (assertEqual) diff --git a/test/Language/PureScript/Backend/Lua/PrinterSpec.hs b/test/Language/PureScript/Backend/Lua/PrinterSpec.hs index 9c65c97..0ddb0fc 100644 --- a/test/Language/PureScript/Backend/Lua/PrinterSpec.hs +++ b/test/Language/PureScript/Backend/Lua/PrinterSpec.hs @@ -4,10 +4,10 @@ module Language.PureScript.Backend.Lua.PrinterSpec where import Data.Text qualified as Text +import Language.Lua.Printer qualified as Printer +import Language.Lua.Types (ParamF (..)) +import Language.Lua.Types qualified as Lua import Language.PureScript.Backend.Lua.Name qualified as Lua -import Language.PureScript.Backend.Lua.Printer qualified as Printer -import Language.PureScript.Backend.Lua.Types (ParamF (..)) -import Language.PureScript.Backend.Lua.Types qualified as Lua import Prettyprinter (Doc, defaultLayoutOptions, layoutPretty) import Prettyprinter.Render.Text (renderStrict) import Test.Hspec (Spec, describe, it, shouldBe) diff --git a/test/ps/foreign/golden/Golden/TestForeign.lua b/test/ps/foreign/golden/Golden/TestForeign.lua index a5005dc..1c500f9 100644 --- a/test/ps/foreign/golden/Golden/TestForeign.lua +++ b/test/ps/foreign/golden/Golden/TestForeign.lua @@ -1,2 +1,7 @@ local fooBar = 42 -return { foo = fooBar } + +return { + foo = fooBar, + bar = function() return fooBar end, + baz = function() return true end +} diff --git a/test/ps/golden/Golden/TestForeign.purs b/test/ps/golden/Golden/TestForeign.purs index c8de9ca..97a9ff6 100644 --- a/test/ps/golden/Golden/TestForeign.purs +++ b/test/ps/golden/Golden/TestForeign.purs @@ -1,3 +1,7 @@ -module Golden.TestForeign where +module Golden.TestForeign (bar) where + +data FBool foreign import foo :: Int +foreign import bar :: Int -> Int +foreign import baz :: FBool diff --git a/test/ps/output/Golden.TestForeign/corefn.json b/test/ps/output/Golden.TestForeign/corefn.json index 9e71148..a145a8c 100644 --- a/test/ps/output/Golden.TestForeign/corefn.json +++ b/test/ps/output/Golden.TestForeign/corefn.json @@ -1 +1 @@ -{"builtWith":"0.15.9","comments":[],"decls":[],"exports":["foo"],"foreign":["foo"],"imports":[{"annotation":{"meta":null,"sourceSpan":{"end":[3,26],"start":[1,1]}},"moduleName":["Prim"]}],"moduleName":["Golden","TestForeign"],"modulePath":"golden/Golden/TestForeign.purs","reExports":{},"sourceSpan":{"end":[3,26],"start":[1,1]}} \ No newline at end of file +{"builtWith":"0.15.9","comments":[],"decls":[],"exports":["bar"],"foreign":["foo","bar","baz"],"imports":[{"annotation":{"meta":null,"sourceSpan":{"end":[7,28],"start":[1,1]}},"moduleName":["Prim"]}],"moduleName":["Golden","TestForeign"],"modulePath":"golden/Golden/TestForeign.purs","reExports":{},"sourceSpan":{"end":[7,28],"start":[1,1]}} \ No newline at end of file diff --git a/test/ps/output/Golden.TestForeign/golden.ir b/test/ps/output/Golden.TestForeign/golden.ir index d50dde0..0ef83c0 100644 --- a/test/ps/output/Golden.TestForeign/golden.ir +++ b/test/ps/output/Golden.TestForeign/golden.ir @@ -1,11 +1,11 @@ UberModule { uberModuleBindings = [], uberModuleExports = [ - ( Name "foo", ObjectProp + ( Name "bar", ObjectProp ( Identity ( ForeignImport ( ModuleName "Golden.TestForeign" ) "golden/Golden/TestForeign.purs" ) ) - ( PropName "foo" ) + ( PropName "bar" ) ) ] } \ No newline at end of file diff --git a/test/ps/output/Golden.TestForeign/golden.lua b/test/ps/output/Golden.TestForeign/golden.lua index f9580f7..bb9abbc 100644 --- a/test/ps/output/Golden.TestForeign/golden.lua +++ b/test/ps/output/Golden.TestForeign/golden.lua @@ -1,3 +1,11 @@ return { - foo = ((function() local fooBar = 42 return { foo = fooBar } end)()).foo + bar = ((function() + local fooBar = 42 + + return { + foo = fooBar, + bar = function() return fooBar end, + baz = function() return true end + } + end)()).bar }