module Language.PureScript.CoreImp.Optimizer.Blocks
( collapseNestedBlocks
, collapseNestedIfs
) where
import Prelude
import Language.PureScript.CoreImp.AST (AST(..), BinaryOperator(..), everywhere)
collapseNestedBlocks :: AST -> AST
collapseNestedBlocks :: AST -> AST
collapseNestedBlocks = (AST -> AST) -> AST -> AST
everywhere AST -> AST
collapse where
collapse :: AST -> AST
collapse :: AST -> AST
collapse (Block Maybe SourceSpan
ss [AST]
sts) = Maybe SourceSpan -> [AST] -> AST
Block Maybe SourceSpan
ss (forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap AST -> [AST]
go [AST]
sts)
collapse AST
js = AST
js
go :: AST -> [AST]
go :: AST -> [AST]
go (Block Maybe SourceSpan
_ [AST]
sts) = [AST]
sts
go AST
s = [AST
s]
collapseNestedIfs :: AST -> AST
collapseNestedIfs :: AST -> AST
collapseNestedIfs = (AST -> AST) -> AST -> AST
everywhere AST -> AST
collapse where
collapse :: AST -> AST
collapse :: AST -> AST
collapse (IfElse Maybe SourceSpan
_ (BooleanLiteral Maybe SourceSpan
_ Bool
True) (Block Maybe SourceSpan
_ [AST
js]) Maybe AST
_) = AST
js
collapse (IfElse Maybe SourceSpan
s1 AST
cond1 (Block Maybe SourceSpan
_ [IfElse Maybe SourceSpan
s2 AST
cond2 AST
body Maybe AST
Nothing]) Maybe AST
Nothing) =
Maybe SourceSpan -> AST -> AST -> Maybe AST -> AST
IfElse Maybe SourceSpan
s1 (Maybe SourceSpan -> BinaryOperator -> AST -> AST -> AST
Binary Maybe SourceSpan
s2 BinaryOperator
And AST
cond1 AST
cond2) AST
body forall a. Maybe a
Nothing
collapse AST
js = AST
js