@@ -322,20 +322,23 @@ translateConstant c =
323translateDeclaration :: (String, SDecl) -> JS
323translateDeclaration :: (String, SDecl) -> JS
324translateDeclaration (path, SFun name params stackSize body)
324translateDeclaration (path, SFun name params stackSize body)
325− | (MN _ "APPLY") <- name =
325+ | (MN _ "APPLY") <- name
326+ , (SLet var val next) <- body
327+ , (SChkCase cvar cases) <- next =
326 let fun = translateExpression body in
328 let fun = translateExpression body in
327 jsDecl $ jsFun fun
329 jsDecl $ jsFun fun
328 | (MN _ "EVAL") <- name
330 | (MN _ "EVAL") <- name
329 , (SChkCase var cases) <- body =
331 , (SChkCase var cases) <- body =
330 let fun = translateExpression body in
332 let fun = translateExpression body in
331 JSSeq [ lookupTable var cases
333 JSSeq [ lookupTable var cases
332− , jsDecl $ JSRaw $ concat [ "function(arg0){"
334+ , jsDecl $ JSFunction ["arg0"] (JSRaw $
333− , "if (arg0 instanceof __IDRRT__Con "
335+ concat [ "if (arg0 instanceof __IDRRT__Con "
334− , " && " ++ lookupTableName ++ ".hasOwnProperty(arg0.tag))"
336+ , " && " ++ lookupTableName ++ ".hasOwnProperty(arg0.tag))"
335− , "return " ++ lookupTableName ++ "[arg0.tag](arg0);"
337+ , "return " ++ lookupTableName ++ "[arg0.tag](arg0);"
336− , "else "
338+ , "else "
337− , "return arg0; }"
339+ , "return arg0;"
340 | otherwise =
343 | otherwise =
341 let fun = translateExpression body in
344 let fun = translateExpression body in