@@ -268,6 +268,16 @@ jsSubst var new (JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
268268 JSReturn $ JSApp (jsSubst var new fun) (map (jsSubst var new) args)
269269 )]
270270
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
275+ )
276+ | otherwise =
277+ JSApp (JSProj (JSFunction args body) "apply") (
278+ map (jsSubst var new) vals
279+ )
280+
271281jsSubst var new (JSApp (JSProj obj field) args) =
272282 JSApp (JSProj (jsSubst var new obj) field) $ map (jsSubst var new) args
273283
@@ -313,6 +323,18 @@ isJSConstant js
313323 | otherwise = False
314324
315325inlineJS :: JS -> JS
326+inlineJS (JSApp (JSProj (JSFunction args (JSReturn body)) "apply") [
327+ JSThis,JSProj (JSIdent var) "vars"
328+ ])
329+ | var /= "cse" =
330+ inlineApply args body 0
331+ where
332+ inlineApply [] body _ = body
333+ inlineApply (a:as) body n =
334+ inlineApply as (
335+ jsSubst a (JSIndex (JSProj (JSIdent var) "vars") (JSNum (JSInt n))) body
336+ ) (n + 1)
337+
316338inlineJS (JSApp (JSIdent "__IDR__mEVAL0") [val])
317339 | isJSConstant val = val
318340