@@ -268,6 +268,16 @@ jsSubst var new (JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
268 JSReturn $ JSApp (jsSubst var new fun) (map (jsSubst var new) args)
268 JSReturn $ JSApp (jsSubst var new fun) (map (jsSubst var new) args)
271+jsSubst var new (JSApp (JSProj (JSFunction args body) "apply") vals)
272+ | var `notElem` args =
273+ JSApp (JSProj (JSFunction args (jsSubst var new body)) "apply") (
274+ map (jsSubst var new) vals
277+ JSApp (JSProj (JSFunction args body) "apply") (
278+ map (jsSubst var new) vals
271jsSubst var new (JSApp (JSProj obj field) args) =
281jsSubst var new (JSApp (JSProj obj field) args) =
272 JSApp (JSProj (jsSubst var new obj) field) $ map (jsSubst var new) args
282 JSApp (JSProj (jsSubst var new obj) field) $ map (jsSubst var new) args
@@ -313,6 +323,18 @@ isJSConstant js
313 | otherwise = False
323 | otherwise = False
315inlineJS :: JS -> JS
325inlineJS :: JS -> JS
326+inlineJS (JSApp (JSProj (JSFunction args (JSReturn body)) "apply") [
327+ JSThis,JSProj (JSIdent var) "vars"
330+ inlineApply args body 0
332+ inlineApply [] body _ = body
333+ inlineApply (a:as) body n =
335+ jsSubst a (JSIndex (JSProj (JSIdent var) "vars") (JSNum (JSInt n))) body
316inlineJS (JSApp (JSIdent "__IDR__mEVAL0") [val])
338inlineJS (JSApp (JSIdent "__IDR__mEVAL0") [val])
317 | isJSConstant val = val
339 | isJSConstant val = val