on master help sign in
javascript: added lookuptable namespace
commite5d412ece9b04e3617312031f3d3f8302d252d5d authorraichoo <raichoo@googlemail.com> dateFri 23 Aug 2013, 18:55 (13 years ago) parenta8abc5a
1 file changed+14−6
src/IRTS/CodegenJavaScript.hs+14−6
src/IRTS/CodegenJavaScript.hs+14−6
@@ -21,6 +21,7 @@ import System.Directory
2121idrNamespace :: String
2222idrNamespace = "__IDR__"
2323idrRTNamespace = "__IDRRT__"
24+idrLTNamespace = "__IDRLT__"
2425
2526data JSTarget = Node | JavaScript deriving Eq
2627
@@ -330,8 +331,8 @@ translateDeclaration (path, SFun name params stackSize body)
330331 JSSeq [ lookupTable var cases
331332 , jsDecl $ JSRaw $ concat [ "function(arg0){"
332333 , "if (arg0 instanceof __IDRRT__Con "
333− , " && LOOKUPTABLE.hasOwnProperty(arg0.tag))"
334− , "return LOOKUPTABLE[arg0.tag](arg0);"
334+ , " && " ++ lookupTableName ++ ".hasOwnProperty(arg0.tag))"
335+ , "return " ++ lookupTableName ++ "[arg0.tag](arg0);"
335336 , "else "
336337 , "return arg0; }"
337338 ]
@@ -349,12 +350,19 @@ translateDeclaration (path, SFun name params stackSize body)
349350 getTag (SConCase _ tag _ _ _) = Just $ show tag
350351 getTag _ = Nothing
351352
353+ lookupTableName :: String
354+ lookupTableName = idrLTNamespace ++ translateName name
355+
352356 lookupTable :: LVar -> [SAlt] -> JS
353357 lookupTable var cases =
354− JSAlloc "LOOKUPTABLE" $ Just $ JSObject $ catMaybes $ map (lookupEntry var) cases
355−
356− lookupEntry :: LVar -> SAlt -> Maybe (String, JS)
357− lookupEntry var alt = getTag alt >>= \tag -> Just (tag, caseFun var alt)
358+ JSAlloc lookupTableName $ Just (
359+ JSObject $ catMaybes $ map (lookupEntry var) cases
360+ )
361+ where
362+ lookupEntry :: LVar -> SAlt -> Maybe (String, JS)
363+ lookupEntry var alt = do
364+ tag <- getTag alt
365+ return (tag, caseFun var alt)
358366
359367 jsDecl :: JS -> JS
360368 jsDecl = JSAlloc (path ++ translateName name) . Just