@@ -13,13 +13,17 @@
1313--
1414-----------------------------------------------------------------------------
1515
16−module Language.PureScript.Optimizer.Unused (
17− removeCodeAfterReturnStatements
18−) where
16+module Language.PureScript.Optimizer.Unused
17+ ( removeCodeAfterReturnStatements
18+ , removeUnusedArg
19+ , removeUndefinedApp
20+ ) where
1921
2022import Language.PureScript.CodeGen.JS.AST
2123import Language.PureScript.Optimizer.Common
2224
25+import qualified Language.PureScript.Constants as C
26+
2327removeCodeAfterReturnStatements :: JS -> JS
2428removeCodeAfterReturnStatements = everywhereOnJS (removeFromBlock go)
2529 where
@@ -28,3 +32,15 @@ removeCodeAfterReturnStatements = everywhereOnJS (removeFromBlock go)
2832 | otherwise = let (body, ret : _) = span (not . isJSReturn) jss in body ++ [ret]
2933 isJSReturn (JSReturn _) = True
3034 isJSReturn _ = False
35+
36+removeUnusedArg :: JS -> JS
37+removeUnusedArg = everywhereOnJS convert
38+ where
39+ convert (JSFunction name [arg] body) | arg == C.__unused = JSFunction name [] body
40+ convert js = js
41+
42+removeUndefinedApp :: JS -> JS
43+removeUndefinedApp = everywhereOnJS convert
44+ where
45+ convert (JSApp fn [JSVar arg]) | arg == C.undefined = JSApp fn []
46+ convert js = js