module Language.PureScript.CoreImp.Optimizer.Unused
( removeCodeAfterReturnStatements
, removeUndefinedApp
) where
import Prelude.Compat
import Language.PureScript.CoreImp.AST
import Language.PureScript.CoreImp.Optimizer.Common
import qualified Language.PureScript.Constants as C
removeCodeAfterReturnStatements :: AST -> AST
removeCodeAfterReturnStatements = everywhere (removeFromBlock go)
where
go :: [AST] -> [AST]
go jss | not (any isReturn jss) = jss
| otherwise = let (body, ret : _) = break isReturn jss in body ++ [ret]
isReturn (Return _ _) = True
isReturn (ReturnNoResult _) = True
isReturn _ = False
removeUndefinedApp :: AST -> AST
removeUndefinedApp = everywhere convert
where
convert (App ss fn [Var _ arg]) | arg == C.undefined = App ss fn []
convert js = js