git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
C++: fix inlining of operators, incl '$'
81ea1e2Andy Arvanitis
src/Language/PureScript/CodeGen/Cpp/Optimizer.hs+2
@@ -83,7 +83,9 @@ optimize' cpp = do
83 , inlineVariables
83 , inlineVariables
84 , inlineCommonValues
84 , inlineCommonValues
85 , inlineOperator (C.prelude, (C.$)) $ \f x -> CppApp f [x]
85 , inlineOperator (C.prelude, (C.$)) $ \f x -> CppApp f [x]
86+ , inlineOperator (C.dataFunction, C.apply) $ \f x -> CppApp f [x]
86 , inlineOperator (C.prelude, (C.#)) $ \x f -> CppApp f [x]
87 , inlineOperator (C.prelude, (C.#)) $ \x f -> CppApp f [x]
88+ , inlineOperator (C.dataFunction, C.applyFlipped) $ \x f -> CppApp f [x]
87 , inlineOperator (C.dataArrayUnsafe, C.unsafeIndex) $ flip CppIndexer
89 , inlineOperator (C.dataArrayUnsafe, C.unsafeIndex) $ flip CppIndexer
88 , inlineCommonOperators ]) cpp
90 , inlineCommonOperators ]) cpp
89
91
src/Language/PureScript/CodeGen/Cpp/Optimizer/Common.hs+1−1
@@ -78,7 +78,7 @@ removeFromBlock _ cpp = cpp
78
78
79isFn :: (String, String) -> Cpp -> Bool
79isFn :: (String, String) -> Cpp -> Bool
80isFn (moduleName, fnName) (CppAccessor (CppVar x) (CppVar y)) =
80isFn (moduleName, fnName) (CppAccessor (CppVar x) (CppVar y)) =
81− x == fnName && y == moduleName
81+ (x == fnName || x == ('$':fnName)) && y == moduleName
82isFn (moduleName, fnName) (CppIndexer (CppStringLiteral x) (CppVar y)) =
82isFn (moduleName, fnName) (CppIndexer (CppStringLiteral x) (CppVar y)) =
83 x == fnName && y == moduleName
83 x == fnName && y == moduleName
84isFn _ _ = False
84isFn _ _ = False