@@ -258,20 +258,8 @@ jsSubst var new (JSIdent old)
258258jsSubst var new (JSArray fields) =
259259 JSArray (map (jsSubst var new) fields)
260260
261−jsSubst var new (JSNew con [tag, vals]) =
262− JSNew con [tag, jsSubst var new vals]
263−
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)
267− )]
268−
269−jsSubst var new (JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
270− JSReturn (JSApp fun args)
271− )]) =
272− JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
273− JSReturn $ JSApp (jsSubst var new fun) (map (jsSubst var new) args)
274− )]
261+jsSubst var new (JSNew con vals) =
262+ JSNew con $ map (jsSubst var new) vals
275263
276264jsSubst var new (JSApp (JSProj (JSFunction args body) "apply") vals)
277265 | var `notElem` args =
@@ -283,9 +271,6 @@ jsSubst var new (JSApp (JSProj (JSFunction args body) "apply") vals)
283271 map (jsSubst var new) vals
284272 )
285273
286−jsSubst var new (JSApp (JSProj obj field) args) =
287− JSApp (JSProj (jsSubst var new obj) field) $ map (jsSubst var new) args
288−
289274jsSubst var new (JSApp (JSFunction [arg] body) vals)
290275 | var /= arg =
291276 JSApp (JSFunction [arg] (
@@ -296,6 +281,12 @@ jsSubst var new (JSApp (JSFunction [arg] body) vals)
296281 body
297282 )) $ map (jsSubst var new) vals
298283
284+jsSubst var new (JSApp lhs rhs) =
285+ JSApp (jsSubst var new lhs) (map (jsSubst var new) rhs)
286+
287+jsSubst var new (JSFunction [] body) =
288+ JSFunction [] (jsSubst var new body)
289+
299290jsSubst var new (JSReturn ret) =
300291 JSReturn $ jsSubst var new ret
301292
@@ -438,13 +429,9 @@ inlineJS (JSApp (JSFunction [arg] (JSReturn ret)) [val])
438429 JSOp op (jsSubst arg opt lhs) $
439430 (jsSubst arg opt rhs)
440431
441− | JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
442− JSReturn (JSApp fun args)
443− )] <- ret
432+ | JSApp (JSIdent fun) args <- ret
444433 , opt <- inlineJS val =
445− JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
446− JSReturn $ JSApp (jsSubst arg opt fun) (map (jsSubst arg opt) args)
447− )]
434+ JSApp (JSIdent fun) $ map (jsSubst arg opt) args
448435
449436inlineJS (JSApp fun args) =
450437 JSApp (inlineJS fun) (map inlineJS args)