on master help sign in
javascript: refactor apply generation
7a14698raichoo
src/IRTS/CodegenJavaScript.hs+8−6
@@ -340,17 +340,19 @@ translateDeclaration (path, SFun name params stackSize body)
340 | (MN _ "APPLY") <- name
340 | (MN _ "APPLY") <- name
341 , (SLet var val next) <- body
341 , (SLet var val next) <- body
342 , (SChkCase cvar cases) <- next =
342 , (SChkCase cvar cases) <- next =
343− let fun = translateExpression body in
343+ let lvar = translateVariableName var
344+ lookup = "[" ++ lvar ++ ".tag](fn0,arg0," ++ lvar ++ ")" in
344 JSSeq [ lookupTable [(var, "chk")] var cases
345 JSSeq [ lookupTable [(var, "chk")] var cases
345 , jsDecl $ JSFunction ["fn0", "arg0"] (
346 , jsDecl $ JSFunction ["fn0", "arg0"] (
346 JSSeq [ JSAlloc "__var_0" (Just $ JSRaw "fn0")
347 JSSeq [ JSAlloc "__var_0" (Just $ JSRaw "fn0")
347 , JSReturn $ jsLet (translateVariableName var) (
348 , JSReturn $ jsLet (translateVariableName var) (
348 translateExpression val
349 translateExpression val
350+ ) (JSTernary (
351+ (JSVar var `jsInstanceOf` jsCon) `jsAnd`
352+ (hasProp lookupTableName (translateVariableName var))
349− ) (JSRaw $
353+ ) (JSRaw $
350− concat [ "(" ++ translateVariableName var ++ " instanceof __IDRRT__Con "
354+ lookupTableName ++ lookup
351− , " && " ++ lookupTableName ++ ".hasOwnProperty(" ++ translateVariableName var ++ ".tag)) ? "
355+ ) JSNull
352− , lookupTableName ++ "[" ++ translateVariableName var ++ ".tag](fn0,arg0," ++ translateVariableName var ++ ") : null;"
353− ]
354 )
356 )
355 ]
357 ]
356 )
358 )