@@ -258,20 +258,8 @@ jsSubst var new (JSIdent old)
258jsSubst var new (JSArray fields) =
258jsSubst var new (JSArray fields) =
259 JSArray (map (jsSubst var new) fields)
259 JSArray (map (jsSubst var new) fields)
261−jsSubst var new (JSNew con [tag, vals]) =
261+jsSubst var new (JSNew con vals) =
262− JSNew con [tag, jsSubst var new vals]
264−jsSubst var new (JSNew con [JSFunction [] (JSReturn (JSApp fun vars))]) =
265− JSNew con [JSFunction [] (
266− JSReturn $ JSApp (jsSubst var new fun) (map (jsSubst var new) vars)
262+ JSNew con $ map (jsSubst var new) vals
269−jsSubst var new (JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
270− JSReturn (JSApp fun args)
272− JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
273− JSReturn $ JSApp (jsSubst var new fun) (map (jsSubst var new) args)
276jsSubst var new (JSApp (JSProj (JSFunction args body) "apply") vals)
264jsSubst var new (JSApp (JSProj (JSFunction args body) "apply") vals)
277 | var `notElem` args =
265 | var `notElem` args =
@@ -283,9 +271,6 @@ jsSubst var new (JSApp (JSProj (JSFunction args body) "apply") vals)
283 map (jsSubst var new) vals
271 map (jsSubst var new) vals
286−jsSubst var new (JSApp (JSProj obj field) args) =
287− JSApp (JSProj (jsSubst var new obj) field) $ map (jsSubst var new) args
289jsSubst var new (JSApp (JSFunction [arg] body) vals)
274jsSubst var new (JSApp (JSFunction [arg] body) vals)
290 | var /= arg =
275 | var /= arg =
291 JSApp (JSFunction [arg] (
276 JSApp (JSFunction [arg] (
@@ -296,6 +281,12 @@ jsSubst var new (JSApp (JSFunction [arg] body) vals)
297 )) $ map (jsSubst var new) vals
282 )) $ map (jsSubst var new) vals
284+jsSubst var new (JSApp lhs rhs) =
285+ JSApp (jsSubst var new lhs) (map (jsSubst var new) rhs)
287+jsSubst var new (JSFunction [] body) =
288+ JSFunction [] (jsSubst var new body)
299jsSubst var new (JSReturn ret) =
290jsSubst var new (JSReturn ret) =
300 JSReturn $ jsSubst var new ret
291 JSReturn $ jsSubst var new ret
@@ -438,13 +429,9 @@ inlineJS (JSApp (JSFunction [arg] (JSReturn ret)) [val])
438 JSOp op (jsSubst arg opt lhs) $
429 JSOp op (jsSubst arg opt lhs) $
439 (jsSubst arg opt rhs)
430 (jsSubst arg opt rhs)
441− | JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
432+ | JSApp (JSIdent fun) args <- ret
442− JSReturn (JSApp fun args)
444 , opt <- inlineJS val =
433 , opt <- inlineJS val =
445− JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
446− JSReturn $ JSApp (jsSubst arg opt fun) (map (jsSubst arg opt) args)
434+ JSApp (JSIdent fun) $ map (jsSubst arg opt) args
449inlineJS (JSApp fun args) =
436inlineJS (JSApp fun args) =
450 JSApp (inlineJS fun) (map inlineJS args)
437 JSApp (inlineJS fun) (map inlineJS args)