@@ -694,13 +694,13 @@ inlineFunctions :: [JS] -> [JS]
694inlineFunctions js =
694inlineFunctions js =
695 let funs = collectFunctions js
695 let funs = collectFunctions js
696 occurences = map ((id . fst) &&& countAll js) funs in
696 occurences = map ((id . fst) &&& countAll js) funs in
697− removeDeadFunctions occurences js
697+ inlineSingleOccur occurences $ removeDeadFunctions occurences js
699 removeDeadFunctions :: [(String, (Int, JS))] -> [JS] -> [JS]
699 removeDeadFunctions :: [(String, (Int, JS))] -> [JS] -> [JS]
700 removeDeadFunctions _ [] = []
700 removeDeadFunctions _ [] = []
701 removeDeadFunctions funOccur ((JSAlloc fun (Just (JSFunction _ _))):js)
701 removeDeadFunctions funOccur ((JSAlloc fun (Just (JSFunction _ _))):js)
702 | Just (o, _) <- lookup fun funOccur
702 | Just (o, _) <- lookup fun funOccur
703− , o == 0 = removeDeadFunctions funOccur js
703+ , o == 0 || o == 1 = removeDeadFunctions funOccur js
705 removeDeadFunctions funOccur (j:js) = j : removeDeadFunctions funOccur js
705 removeDeadFunctions funOccur (j:js) = j : removeDeadFunctions funOccur js
@@ -719,8 +719,21 @@ inlineFunctions js =
719 inlineHelper nfuns njs
719 inlineHelper nfuns njs
722− inlineArgs [] _ js = js
722+ inlineArgs args vals js =
723+ let (njs, vars) = putPlaceHolders args 0 js in
724+ inlineArgsHelper (map (("__repvar_" ++) . show) [0 .. vars - 1]) vals njs
727+ inlineArgsHelper :: [String] -> [JS] -> JS -> JS
728+ inlineArgsHelper [] _ js = js
723− inlineArgs (a:as) (v:vs) js = jsSubst a v (inlineArgs as vs js)
729+ inlineArgsHelper (a:as) (v:vs) js = jsSubst a v (inlineArgsHelper as vs js)
732+ putPlaceHolders :: [String] -> Int -> JS -> (JS, Int)
733+ putPlaceHolders [] n js = (js, n)
734+ putPlaceHolders (a:as) n js
735+ | (njs, nn) <- putPlaceHolders as (n + 1) js =
736+ (jsSubst a (JSIdent ("__repvar_" ++ show n)) njs, nn)
726 inlineFun :: String -> JS -> JS -> JS
739 inlineFun :: String -> JS -> JS -> JS