git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix inlining for apply operators
commitc6174d5797e717e0b15283fbaf10ef2267652ca5 authorGary Burgess <gary.burgess@gmail.com> dateWed 7 Sep 2016, 14:13 (10 years ago) parentab5f139
2 files changed+7−10
src/Language/PureScript/CodeGen/JS/Optimizer.hs−6 src/Language/PureScript/CodeGen/JS/Optimizer/Inliner.hs+7−4
src/Language/PureScript/CodeGen/JS/Optimizer.hs−6
@@ -34,7 +34,6 @@ import Language.PureScript.CodeGen.JS.Optimizer.MagicDo
3434import Language.PureScript.CodeGen.JS.Optimizer.TCO
3535import Language.PureScript.CodeGen.JS.Optimizer.Unused
3636import Language.PureScript.Options
37−import qualified Language.PureScript.Constants as C
3837
3938-- |
4039-- Apply a series of optimizer passes to simplified Javascript code
@@ -49,11 +48,6 @@ optimize' js = do
4948 opts <- ask
5049 js' <- untilFixedPoint (inlineFnComposition . tidyUp . applyAll
5150 [ inlineCommonValues
52− , inlineOperator (C.prelude, (C.$)) $ \f x -> JSApp Nothing f [x]
53− , inlineOperator (C.dataFunction, C.apply) $ \f x -> JSApp Nothing f [x]
54− , inlineOperator (C.prelude, (C.#)) $ \x f -> JSApp Nothing f [x]
55− , inlineOperator (C.dataFunction, C.applyFlipped) $ \x f -> JSApp Nothing f [x]
56− , inlineOperator (C.dataArrayUnsafe, C.unsafeIndex) $ flip (JSIndexer Nothing)
5751 , inlineCommonOperators
5852 ]) js
5953 untilFixedPoint (return . tidyUp) . tco opts . magicDo opts $ js'
src/Language/PureScript/CodeGen/JS/Optimizer/Inliner.hs+7−4
@@ -4,7 +4,6 @@
44module Language.PureScript.CodeGen.JS.Optimizer.Inliner
55 ( inlineVariables
66 , inlineCommonValues
7− , inlineOperator
87 , inlineCommonOperators
98 , inlineFnComposition
109 , etaConvert
@@ -100,13 +99,13 @@ inlineCommonValues = everywhereOnJS convert
10099 fnSubtract = (C.dataRing, C.sub)
101100 intOp ss op x y = JSBinary ss BitwiseOr (JSBinary ss op x y) (JSNumericLiteral ss (Left 0))
102101
103−inlineOperator :: (String, String) -> (JS -> JS -> JS) -> JS -> JS
104−inlineOperator (m, op) f = everywhereOnJS convert
102+inlineNonClassFunction :: (String, String) -> (JS -> JS -> JS) -> JS -> JS
103+inlineNonClassFunction (m, op) f = everywhereOnJS convert
105104 where
106105 convert :: JS -> JS
107106 convert (JSApp _ (JSApp _ op' [x]) [y]) | isOp op' = f x y
108107 convert other = other
109− isOp (JSIndexer _ (JSStringLiteral _ op') (JSVar _ m')) = m == m' && op == op'
108+ isOp (JSAccessor _ op' (JSVar _ m')) = m == m' && op == op'
110109 isOp _ = False
111110
112111inlineCommonOperators :: JS -> JS
@@ -167,6 +166,10 @@ inlineCommonOperators = applyAll $
167166 , binary' C.dataIntBits C.shr ShiftRight
168167 , binary' C.dataIntBits C.zshr ZeroFillShiftRight
169168 , unary' C.dataIntBits C.complement BitwiseNot
169+
170+ , inlineNonClassFunction (C.dataFunction, C.apply) $ \f x -> JSApp Nothing f [x]
171+ , inlineNonClassFunction (C.dataFunction, C.applyFlipped) $ \x f -> JSApp Nothing f [x]
172+ , inlineNonClassFunction (C.dataArrayUnsafe, C.unsafeIndex) $ flip (JSIndexer Nothing)
170173 ] ++
171174 [ fn | i <- [0..10], fn <- [ mkFn i, runFn i ] ]
172175 where