@@ -19,11 +19,11 @@ import qualified Language.PureScript.Constants as C
1919
2020
2121-- | Apply a series of optimizer passes to simplified Objective-C code
22−optimize :: MonadSupply m => AST -> m AST
22+optimize :: MonadSupply m => AST -> AST -> m AST
2323-- optimize = untilFixedPoint $ return . inlineUnsafeCoerce . inlineUnsafePartial . tidyUp . tco
24−optimize cpp = do
25− cpp' <- untilFixedPoint (return . inlineUnsafeCoerce . inlineUnsafePartial . tidyUp) cpp
26− untilFixedPoint (return . tidyUp) . tco
24+optimize mn cpp = do
25+ cpp' <- untilFixedPoint (return . inlineApply . inlineUnsafeCoerce . inlineUnsafePartial . tidyUp) cpp
26+ untilFixedPoint (return . tidyUp) . tco mn
2727 =<< untilFixedPoint (return . magicDo')
2828 =<< untilFixedPoint (return . magicDo) cpp'
2929
@@ -66,6 +66,16 @@ inlineUnsafeCoerce = everywhereTopDown convert where
6666 = comp
6767 convert other = other
6868
69+inlineApply :: AST -> AST
70+inlineApply = everywhereTopDown convert where
71+ convert (App ss (App _ (Indexer _ (Var _ apply) (Var _ dataFunction)) [ f ]) [ arg ])
72+ | apply == C.apply && dataFunction == C.dataFunction
73+ = App ss f [ arg ]
74+ convert (App ss (App _ (Indexer _ (Var _ applyFlipped) (Var _ dataFunction)) [ arg ]) [ f ])
75+ | applyFlipped == C.applyFlipped && dataFunction == C.dataFunction
76+ = App ss f [ arg ]
77+ convert other = other
78+
6979collapseIfChecks :: AST -> AST
7080collapseIfChecks = everywhere collapse where
7181 collapse :: AST -> AST