@@ -788,7 +788,7 @@ codegenJavaScript target definitions filename outputType = do
788788
789789 functions :: [String]
790790 functions =
791− let translated = map translateDeclaration def
791+ let translated = concatMap translateDeclaration def
792792 optimized = map optimizeJS translated
793793 idsRemoved = removeIDs optimized
794794 reduced = reduceJS idsRemoved
@@ -922,7 +922,7 @@ translateConstant (BI i) = jsBigInt $ JSString (show i)
922922translateConstant c =
923923 JSError $ "Unimplemented Constant: " ++ show c
924924
925−translateDeclaration :: (String, SDecl) -> JS
925+translateDeclaration :: (String, SDecl) -> [JS]
926926translateDeclaration (path, SFun name params stackSize body)
927927 | (MN _ ap) <- name
928928 , (SLet var val next) <- body
@@ -930,37 +930,37 @@ translateDeclaration (path, SFun name params stackSize body)
930930 , ap == txt "APPLY" =
931931 let lvar = translateVariableName var
932932 lookup = "[" ++ lvar ++ ".tag](fn0,arg0," ++ lvar ++ ")" in
933− JSSeq [ lookupTable [(var, "chk")] var cases
934− , jsDecl $ JSFunction ["fn0", "arg0"] (
935− JSSeq [ JSAlloc "__var_0" (Just $ JSIdent "fn0")
936− , JSAlloc (translateVariableName var) (
937− Just $ translateExpression val
938− )
939− , JSReturn $ (JSTernary (
940− (JSVar var `jsInstanceOf` jsCon) `jsAnd`
941− (hasProp lookupTableName (translateVariableName var))
942− ) (JSIdent $
943− lookupTableName ++ lookup
944− ) JSNull
945− )
946− ]
947− )
948− ]
933+ [ lookupTable [(var, "chk")] var cases
934+ , jsDecl $ JSFunction ["fn0", "arg0"] (
935+ JSSeq [ JSAlloc "__var_0" (Just $ JSIdent "fn0")
936+ , JSAlloc (translateVariableName var) (
937+ Just $ translateExpression val
938+ )
939+ , JSReturn $ (JSTernary (
940+ (JSVar var `jsInstanceOf` jsCon) `jsAnd`
941+ (hasProp lookupTableName (translateVariableName var))
942+ ) (JSIdent $
943+ lookupTableName ++ lookup
944+ ) JSNull
945+ )
946+ ]
947+ )
948+ ]
949949
950950 | (MN _ ev) <- name
951951 , (SChkCase var cases) <- body
952952 , ev == txt "EVAL" =
953− JSSeq [ lookupTable [] var cases
954− , jsDecl $ JSFunction ["arg0"] (JSReturn $
955− JSTernary (
956− (JSIdent "arg0" `jsInstanceOf` jsCon) `jsAnd`
957− (hasProp lookupTableName "arg0")
958− ) (JSRaw $ lookupTableName ++ "[arg0.tag](arg0)") (JSIdent "arg0")
959− )
960− ]
953+ [ lookupTable [] var cases
954+ , jsDecl $ JSFunction ["arg0"] (JSReturn $
955+ JSTernary (
956+ (JSIdent "arg0" `jsInstanceOf` jsCon) `jsAnd`
957+ (hasProp lookupTableName "arg0")
958+ ) (JSRaw $ lookupTableName ++ "[arg0.tag](arg0)") (JSIdent "arg0")
959+ )
960+ ]
961961 | otherwise =
962962 let fun = translateExpression body in
963− jsDecl $ jsFun fun
963+ [jsDecl $ jsFun fun]
964964
965965 where
966966 hasProp :: String -> String -> JS