@@ -4,7 +4,6 @@ module Language.PureScript.Backend.Lua
44 ( fromUberModule
55 , fromIR
66 , fromName
7- -- , qualifyName
87 , qualifyName
98 , Error (.. )
109 ) where
@@ -23,7 +22,7 @@ import Data.Traversable (for)
2322import Language.PureScript.Backend.IR qualified as IR
2423import Language.PureScript.Backend.IR.Linker (UberModule (.. ))
2524import Language.PureScript.Backend.IR.Linker qualified as Linker
26- import Language.PureScript.Backend.IR.Query (usesPrimModule , usesRuntimeLazy )
25+ import Language.PureScript.Backend.IR.Query (usesRuntimeLazy )
2726import Language.PureScript.Backend.Lua.Fixture qualified as Fixture
2827import Language.PureScript.Backend.Lua.Key qualified as Key
2928import Language.PureScript.Backend.Lua.Linker.Foreign qualified as Foreign
@@ -32,7 +31,7 @@ import Language.PureScript.Backend.Lua.Name qualified as Name
3231import Language.PureScript.Backend.Lua.Types (ParamF (.. ))
3332import Language.PureScript.Backend.Lua.Types qualified as Lua
3433import Language.PureScript.Backend.Types (AppOrModule (.. ))
35- import Language.PureScript.Names (ModuleName , runModuleName )
34+ import Language.PureScript.Names (ModuleName ( .. ) , runModuleName )
3635import Language.PureScript.Names qualified as PS
3736import Path (Abs , Dir , Path )
3837import Prelude hiding (exp , local )
@@ -82,13 +81,9 @@ fromUberModule foreigns needsRuntimeLazy appOrModule uber = (`evalStateT` 0) do
8281 recBinds ← forM (toList recGroup) \ (IR. QName modname name, irExp) →
8382 (modname,name,) . asExpression
8483 <$> fromIR foreigns Set. empty modname irExp
85- let declarations = DList. fromList do
86- (modname, name, _exp) ← recBinds
87- pure $ mkBinding modname (fromName name) Lua. Nil
88- assignments = DList. fromList do
89- (modname, name, exp ) ← recBinds
90- pure $ mkBinding modname (fromName name) exp
91- pure $ declarations <> assignments
84+ pure $ DList. fromList do
85+ (modname, name, exp ) ← recBinds
86+ pure $ mkBinding modname (fromName name) exp
9287
9388 returnExp ←
9489 case appOrModule of
@@ -111,25 +106,19 @@ fromUberModule foreigns needsRuntimeLazy appOrModule uber = (`evalStateT` 0) do
111106 )
112107
113108 pure . mconcat $
114- [ [Lua. assign moduleVar (Lua. table [] ) | not (null bindings)]
115- , [ mkBinding Fixture. primModule Fixture. undefined Lua. Nil
116- | usesPrimModule uber
117- ]
118- , [Fixture. runtimeLazy | untag needsRuntimeLazy && usesRuntimeLazy uber]
109+ [ [Fixture. runtimeLazy | untag needsRuntimeLazy && usesRuntimeLazy uber]
119110 , [Fixture. objectUpdate | UsesObjectUpdate ← [usesObjectUpdate]]
111+ , [Lua. local1 Fixture. moduleName (Lua. table [] ) | not (null bindings)]
120112 , toList (DList. snoc bindings returnStat)
121113 ]
122114
123115mkBinding ∷ ModuleName → Lua. Name → Lua. Exp → Lua. Statement
124116mkBinding modname name =
125117 Lua. assign $
126118 Lua. VarField
127- (Lua. ann (Lua. var moduleVar ))
119+ (Lua. ann (Lua. varName Fixture. moduleName ))
128120 (qualifyName modname name)
129121
130- moduleVar ∷ Lua. Var
131- moduleVar = Lua. VarName [Lua. name |M|]
132-
133122asExpression ∷ Either Lua. Chunk Lua. Exp → Lua. Exp
134123asExpression = \ case
135124 Left chunk → Lua. chunkToExpression chunk
@@ -206,26 +195,29 @@ fromIR foreigns topLevelNames modname ir = case ir of
206195 Lua. functionCall (Lua. varName Fixture. objectUpdateName) [obj, vals]
207196 IR. Abs _ann param expr → do
208197 e ← goExp expr
209- luaParam ←
210- Lua. ParamNamed
211- <$> case param of
212- IR. ParamUnused _ann → uniqueName " unused"
213- IR. ParamNamed _ann name → pure (fromName name)
214- pure . Right $ Lua. functionDef [luaParam] [Lua. return e]
215- IR. App _ann expr param → do
198+ let luaParams = case param of
199+ IR. ParamUnused _ann → []
200+ IR. ParamNamed _ann name → [ParamNamed (fromName name)]
201+ pure . Right $ Lua. functionDef luaParams [Lua. return e]
202+ IR. App _ann expr arg → do
216203 e ← goExp expr
217- a ← goExp param
218- pure . Right $ Lua. functionCall e [a]
204+ Right . Lua. functionCall e <$> case arg of
205+ -- PS sometimes inserts syntetic unused argument "Prim.undefined"
206+ IR. Ref _ann (IR. Imported (IR. ModuleName " Prim" ) (IR. Name " undefined" )) _ →
207+ pure []
208+ _ → goExp arg <&> \ a → [a]
219209 IR. Ref _ann qualifiedName index →
220210 pure . Right $ case qualifiedName of
221211 IR. Local name
222212 | topLevelName ← qualifyName modname (fromName name)
223213 , Set. member topLevelName topLevelNames →
224- Lua. varField (Lua. var moduleVar ) topLevelName
214+ Lua. varField (Lua. varName Fixture. moduleName ) topLevelName
225215 IR. Local name →
226216 Lua. varName (fromNameWithIndex name index)
227217 IR. Imported modname' name →
228- Lua. varField (Lua. var moduleVar) (qualifyName modname' (fromName name))
218+ Lua. varField
219+ (Lua. varName Fixture. moduleName)
220+ (qualifyName modname' (fromName name))
229221 IR. Let _ann bindings bodyExp → do
230222 body ← go bodyExp
231223 recs ←
@@ -294,11 +286,5 @@ keyCtor = Lua.String "$ctor"
294286--------------------------------------------------------------------------------
295287-- Helpers ---------------------------------------------------------------------
296288
297- uniqueName ∷ MonadState Natural m ⇒ Text → m Lua. Name
298- uniqueName prefix = do
299- index ← get
300- modify' (+ 1 )
301- pure $ Lua. unsafeName (prefix <> show index)
302-
303289qualifyName ∷ ModuleName → Lua. Name → Lua. Name
304- qualifyName modname = Fixture. psluaName . Name. join2 (fromModuleName modname)
290+ qualifyName modname = Name. join2 (fromModuleName modname)
0 commit comments