@@ -788,7 +788,7 @@ codegenJavaScript target definitions filename outputType = do
789 functions :: [String]
789 functions :: [String]
790 functions =
790 functions =
791− let translated = map translateDeclaration def
791+ let translated = concatMap translateDeclaration def
792 optimized = map optimizeJS translated
792 optimized = map optimizeJS translated
793 idsRemoved = removeIDs optimized
793 idsRemoved = removeIDs optimized
794 reduced = reduceJS idsRemoved
794 reduced = reduceJS idsRemoved
@@ -922,7 +922,7 @@ translateConstant (BI i) = jsBigInt $ JSString (show i)
922translateConstant c =
922translateConstant c =
923 JSError $ "Unimplemented Constant: " ++ show c
923 JSError $ "Unimplemented Constant: " ++ show c
925−translateDeclaration :: (String, SDecl) -> JS
925+translateDeclaration :: (String, SDecl) -> [JS]
926translateDeclaration (path, SFun name params stackSize body)
926translateDeclaration (path, SFun name params stackSize body)
927 | (MN _ ap) <- name
927 | (MN _ ap) <- name
928 , (SLet var val next) <- body
928 , (SLet var val next) <- body
@@ -930,37 +930,37 @@ translateDeclaration (path, SFun name params stackSize body)
930 , ap == txt "APPLY" =
930 , ap == txt "APPLY" =
931 let lvar = translateVariableName var
931 let lvar = translateVariableName var
932 lookup = "[" ++ lvar ++ ".tag](fn0,arg0," ++ lvar ++ ")" in
932 lookup = "[" ++ lvar ++ ".tag](fn0,arg0," ++ lvar ++ ")" in
933− JSSeq [ lookupTable [(var, "chk")] var cases
933+ [ lookupTable [(var, "chk")] var cases
934− , jsDecl $ JSFunction ["fn0", "arg0"] (
934+ , jsDecl $ JSFunction ["fn0", "arg0"] (
935− JSSeq [ JSAlloc "__var_0" (Just $ JSIdent "fn0")
935+ JSSeq [ JSAlloc "__var_0" (Just $ JSIdent "fn0")
936− , JSAlloc (translateVariableName var) (
936+ , JSAlloc (translateVariableName var) (
937− Just $ translateExpression val
937+ Just $ translateExpression val
939− , JSReturn $ (JSTernary (
939+ , JSReturn $ (JSTernary (
940− (JSVar var `jsInstanceOf` jsCon) `jsAnd`
940+ (JSVar var `jsInstanceOf` jsCon) `jsAnd`
941− (hasProp lookupTableName (translateVariableName var))
941+ (hasProp lookupTableName (translateVariableName var))
942− ) (JSIdent $
942+ ) (JSIdent $
943− lookupTableName ++ lookup
943+ lookupTableName ++ lookup
944− ) JSNull
944+ ) JSNull
950 | (MN _ ev) <- name
950 | (MN _ ev) <- name
951 , (SChkCase var cases) <- body
951 , (SChkCase var cases) <- body
952 , ev == txt "EVAL" =
952 , ev == txt "EVAL" =
953− JSSeq [ lookupTable [] var cases
953+ [ lookupTable [] var cases
954− , jsDecl $ JSFunction ["arg0"] (JSReturn $
954+ , jsDecl $ JSFunction ["arg0"] (JSReturn $
955− JSTernary (
955+ JSTernary (
956− (JSIdent "arg0" `jsInstanceOf` jsCon) `jsAnd`
956+ (JSIdent "arg0" `jsInstanceOf` jsCon) `jsAnd`
957− (hasProp lookupTableName "arg0")
957+ (hasProp lookupTableName "arg0")
958− ) (JSRaw $ lookupTableName ++ "[arg0.tag](arg0)") (JSIdent "arg0")
958+ ) (JSRaw $ lookupTableName ++ "[arg0.tag](arg0)") (JSIdent "arg0")
961 | otherwise =
961 | otherwise =
962 let fun = translateExpression body in
962 let fun = translateExpression body in
963− jsDecl $ jsFun fun
963+ [jsDecl $ jsFun fun]
966 hasProp :: String -> String -> JS
966 hasProp :: String -> String -> JS