git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Combine nested `if` blocks in JS
2add561Gary Burgess
src/Language/PureScript/Optimizer.hs+1
@@ -53,6 +53,7 @@ optimize :: Options -> JS -> JS
53optimize opts | optionsNoOptimizations opts = id
53optimize opts | optionsNoOptimizations opts = id
54 | otherwise = untilFixedPoint (applyAll
54 | otherwise = untilFixedPoint (applyAll
55 [ collapseNestedBlocks
55 [ collapseNestedBlocks
56+ , collapseNestedIfs
56 , tco opts
57 , tco opts
57 , magicDo opts
58 , magicDo opts
58 , removeCodeAfterReturnStatements
59 , removeCodeAfterReturnStatements
src/Language/PureScript/Optimizer/Blocks.hs+12−3
@@ -13,9 +13,10 @@
13--
13--
14-----------------------------------------------------------------------------
14-----------------------------------------------------------------------------
15
15
16−module Language.PureScript.Optimizer.Blocks (
16+module Language.PureScript.Optimizer.Blocks
17− collapseNestedBlocks
17+ ( collapseNestedBlocks
18+ , collapseNestedIfs
18−) where
19+ ) where
19
20
20import Language.PureScript.CodeGen.JS.AST
21import Language.PureScript.CodeGen.JS.AST
21
22
@@ -31,3 +32,11 @@ collapseNestedBlocks = everywhereOnJS collapse
31 go :: JS -> [JS]
32 go :: JS -> [JS]
32 go (JSBlock sts) = sts
33 go (JSBlock sts) = sts
33 go s = [s]
34 go s = [s]
35+
36+collapseNestedIfs :: JS -> JS
37+collapseNestedIfs = everywhereOnJS collapse
38+ where
39+ collapse :: JS -> JS
40+ collapse (JSIfElse cond1 (JSBlock [JSIfElse cond2 body Nothing]) Nothing) =
41+ JSIfElse (JSBinary And cond1 cond2) body Nothing
42+ collapse js = js