on master help sign in
javascript: refactor apply generation
commit7a14698e594ce4b87d5b2a39d1ef473cf4455adf authorraichoo <raichoo@googlemail.com> dateFri 23 Aug 2013, 23:54 (13 years ago) parentfa70338
1 file changed+8−6
src/IRTS/CodegenJavaScript.hs+8−6
src/IRTS/CodegenJavaScript.hs+8−6
@@ -340,17 +340,19 @@ translateDeclaration (path, SFun name params stackSize body)
340340 | (MN _ "APPLY") <- name
341341 , (SLet var val next) <- body
342342 , (SChkCase cvar cases) <- next =
343− let fun = translateExpression body in
343+ let lvar = translateVariableName var
344+ lookup = "[" ++ lvar ++ ".tag](fn0,arg0," ++ lvar ++ ")" in
344345 JSSeq [ lookupTable [(var, "chk")] var cases
345346 , jsDecl $ JSFunction ["fn0", "arg0"] (
346347 JSSeq [ JSAlloc "__var_0" (Just $ JSRaw "fn0")
347348 , JSReturn $ jsLet (translateVariableName var) (
348349 translateExpression val
349− ) (JSRaw $
350− concat [ "(" ++ translateVariableName var ++ " instanceof __IDRRT__Con "
351− , " && " ++ lookupTableName ++ ".hasOwnProperty(" ++ translateVariableName var ++ ".tag)) ? "
352− , lookupTableName ++ "[" ++ translateVariableName var ++ ".tag](fn0,arg0," ++ translateVariableName var ++ ") : null;"
353− ]
350+ ) (JSTernary (
351+ (JSVar var `jsInstanceOf` jsCon) `jsAnd`
352+ (hasProp lookupTableName (translateVariableName var))
353+ ) (JSRaw $
354+ lookupTableName ++ lookup
355+ ) JSNull
354356 )
355357 ]
356358 )