git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
C++: fix broken unsafeIndexer inliner
75abe31Andy Arvanitis
src/Language/PureScript/CodeGen/Cpp/Optimizer/Inliner.hs+11−1
@@ -147,6 +147,16 @@ inlineNonClassFunction (m, op) f = everywhereOnCpp convert
147 m == m' && (longForm == safeName op || longForm == (curriedName $ safeName op))
147 m == m' && (longForm == safeName op || longForm == (curriedName $ safeName op))
148 isOp _ = False
148 isOp _ = False
149
149
150+inlineFunctionWithDict :: (Text, Text) -> (Cpp -> Cpp -> Cpp) -> Cpp -> Cpp
151+inlineFunctionWithDict (m, op) f = everywhereOnCpp convert
152+ where
153+ convert :: Cpp -> Cpp
154+ convert (CppApp (CppApp (CppApp op' [_]) [x]) [y]) | isOp op' = f x y
155+ convert other = other
156+ isOp (CppAccessor (CppVar longForm) (CppVar m')) =
157+ m == m' && (longForm == safeName op || longForm == (curriedName $ safeName op))
158+ isOp _ = False
159+
150inlineCommonOperators :: Cpp -> Cpp
160inlineCommonOperators :: Cpp -> Cpp
151inlineCommonOperators = applyAll $
161inlineCommonOperators = applyAll $
152 [ binary semiringNumber opAdd Add
162 [ binary semiringNumber opAdd Add
@@ -206,7 +216,7 @@ inlineCommonOperators = applyAll $
206
216
207 , inlineNonClassFunction (C.dataFunction, C.apply) $ \f x -> CppApp f [x]
217 , inlineNonClassFunction (C.dataFunction, C.apply) $ \f x -> CppApp f [x]
208 , inlineNonClassFunction (C.dataFunction, C.applyFlipped) $ \x f -> CppApp f [x]
218 , inlineNonClassFunction (C.dataFunction, C.applyFlipped) $ \x f -> CppApp f [x]
209− , inlineNonClassFunction (C.dataArray, C.unsafeIndex) $ flip CppIndexer
219+ , inlineFunctionWithDict (C.dataArray, C.unsafeIndex) $ flip CppIndexer
210 ] ++
220 ] ++
211 []
221 []
212 -- [ fn | i <- [0..10], fn <- [ mkFn i, runFn i ] ]
222 -- [ fn | i <- [0..10], fn <- [ mkFn i, runFn i ] ]