on master help sign in
javascript: factor out translation of decls
3109b51raichoo
src/IRTS/CodegenJavaScript.hs+37−23
@@ -319,31 +319,45 @@ translateConstant c =
319 JSError $ "Unimplemented Constant: " ++ show c
319 JSError $ "Unimplemented Constant: " ++ show c
320
320
321translateDeclaration :: (String, SDecl) -> JS
321translateDeclaration :: (String, SDecl) -> JS
322−translateDeclaration (path, SFun name params stackSize body) =
322+translateDeclaration (path, SFun name params stackSize body)
323+ | (MN _ "APPLY") <- name =
324+ JSSeq [ JSRaw $ "/* " ++ translateName name ++ " */"
323− JSAlloc (path ++ translateName name) $ Just $ JSFunction p (
325+ , translate (path ++ translateName name) params stackSize body
324− JSSeq $
326+ ]
325− zipWith assignVar [0..] p ++
327+ | (MN _ "EVAL") <- name
326− map allocVar [numP .. (numP + stackSize - 1)] ++
328+ , (SChkCase var cases) <- body =
327− [JSReturn $ translateExpression body]
329+ JSSeq [ JSRaw $ "/* " ++ translateName name ++ " */"
328− )
330+ , translate (path ++ translateName name) params stackSize body
331+ ]
332+ | otherwise =
333+ translate (path ++ translateName name) params stackSize body
329 where
334 where
330− numP :: Int
335+ translate :: String -> [Name] -> Int -> SExp -> JS
331− numP = length params
336+ translate name params stackSize body =
332−
337+ JSAlloc name $ Just $ JSFunction p (
333− allocVar :: Int -> JS
338+ JSSeq $
334− allocVar n = JSAlloc (jsVar n) Nothing
339+ zipWith assignVar [0..] p ++
335−
340+ map allocVar [numP .. (numP + stackSize - 1)] ++
336− assignVar :: Int -> String -> JS
341+ [JSReturn $ translateExpression body]
337− assignVar n s = JSAlloc (jsVar n) (Just $ JSRaw s)
342+ )
338−
339− p :: [String]
340− p = map translateParameter params
341 where
343 where
344+ numP :: Int
345+ numP = length params
346+
347+ allocVar :: Int -> JS
348+ allocVar n = JSAlloc (jsVar n) Nothing
349+
350+ assignVar :: Int -> String -> JS
351+ assignVar n s = JSAlloc (jsVar n) (Just $ JSRaw s)
352+
353+ p :: [String]
354+ p = map translateParameter params
355+ where
342− translateParameter :: Name -> String
356+ translateParameter :: Name -> String
343− translateParameter (MN i name) =
357+ translateParameter (MN i name) =
344− translateIdentifier name ++ show i
358+ translateIdentifier name ++ show i
345− translateParameter (UN name) =
359+ translateParameter (UN name) =
346− translateIdentifier name
360+ translateIdentifier name
347
361
348translateVariableName :: LVar -> String
362translateVariableName :: LVar -> String
349translateVariableName (Loc i) =
363translateVariableName (Loc i) =