on master help sign in
javascript: smarter inliner
8dd968fraichoo
src/IRTS/CodegenJavaScript.hs+10−23
@@ -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)
260
260
261−jsSubst var new (JSNew con [tag, vals]) =
261+jsSubst var new (JSNew con 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)
262+ JSNew con $ map (jsSubst var new) vals
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− )]
275
263
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
284 )
272 )
285
273
286−jsSubst var new (JSApp (JSProj obj field) args) =
287− JSApp (JSProj (jsSubst var new obj) field) $ map (jsSubst var new) args
288−
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)
296 body
281 body
297 )) $ map (jsSubst var new) vals
282 )) $ map (jsSubst var new) vals
298
283
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+
299jsSubst var new (JSReturn ret) =
290jsSubst var new (JSReturn ret) =
300 JSReturn $ jsSubst var new ret
291 JSReturn $ jsSubst var new ret
301
292
@@ -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)
440
431
441− | JSApp (JSIdent "__IDRRT__tailcall") [JSFunction [] (
432+ | JSApp (JSIdent fun) args <- ret
442− JSReturn (JSApp fun args)
443− )] <- ret
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
447− )]
448
435
449inlineJS (JSApp fun args) =
436inlineJS (JSApp fun args) =
450 JSApp (inlineJS fun) (map inlineJS args)
437 JSApp (inlineJS fun) (map inlineJS args)