1-- | Removes unused variables 2module Language.PureScript.CoreImp.Optimizer.Unused 3 ( removeCodeAfterReturnStatements 4 , removeUndefinedApp 5 ) where 6 7import Prelude.Compat 8 9import Language.PureScript.CoreImp.AST 10import Language.PureScript.CoreImp.Optimizer.Common 11import qualified Language.PureScript.Constants.Prim as C 12 13removeCodeAfterReturnStatements :: AST -> AST 14removeCodeAfterReturnStatements = everywhere (removeFromBlock go) 15 where 16 go :: [AST] -> [AST] 17 go jss | not (any isReturn jss) = jss 18 | otherwise = let (body, ret : _) = break isReturn jss in body ++ [ret] 19 isReturn (Return _ _) = True 20 isReturn (ReturnNoResult _) = True 21 isReturn _ = False 22 23removeUndefinedApp :: AST -> AST 24removeUndefinedApp = everywhere convert 25 where 26 convert (App ss fn [Var _ arg]) | arg == C.undefined = App ss fn [] 27 convert js = js 28