git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
C++: Equiv of 'Fix inlining for negateInt #2560'
922d50cAndy Arvanitis
src/Language/PureScript/CodeGen/Cpp/Optimizer/Inliner.hs+3−2
@@ -111,6 +111,8 @@ inlineCommonValues = everywhereOnCpp convert
111 | isDict' [semiringNumber, semiringInt] dict && isFn fnOne fn = CppNumericLiteral (Left 1)
111 | isDict' [semiringNumber, semiringInt] dict && isFn fnOne fn = CppNumericLiteral (Left 1)
112 | isDict boundedBoolean dict && isFn fnBottom fn = CppBooleanLiteral False
112 | isDict boundedBoolean dict && isFn fnBottom fn = CppBooleanLiteral False
113 | isDict boundedBoolean dict && isFn fnTop fn = CppBooleanLiteral True
113 | isDict boundedBoolean dict && isFn fnTop fn = CppBooleanLiteral True
114+ convert (CppApp (CppApp fn [dict]) [x])
115+ | isDict ringInt dict && isFn fnNegate fn = CppUnary Negate x
114 convert (CppApp fn [dict, x, y])
116 convert (CppApp fn [dict, x, y])
115 | isDict semiringInt dict && isFn fnAdd fn = CppBinary Add x y
117 | isDict semiringInt dict && isFn fnAdd fn = CppBinary Add x y
116 | isDict semiringInt dict && isFn fnMultiply fn = CppBinary Multiply x y
118 | isDict semiringInt dict && isFn fnMultiply fn = CppBinary Multiply x y
@@ -130,6 +132,7 @@ inlineCommonValues = everywhereOnCpp convert
130 fnDivide = (C.dataEuclideanRing, C.div)
132 fnDivide = (C.dataEuclideanRing, C.div)
131 fnMultiply = (C.dataSemiring, C.mul)
133 fnMultiply = (C.dataSemiring, C.mul)
132 fnSubtract = (C.dataRing, C.sub)
134 fnSubtract = (C.dataRing, C.sub)
135+ fnNegate = (C.dataRing, C.negate)
133
136
134inlineOperator :: (Text, Text) -> (Cpp -> Cpp -> Cpp) -> Cpp -> Cpp
137inlineOperator :: (Text, Text) -> (Cpp -> Cpp -> Cpp) -> Cpp -> Cpp
135inlineOperator (m, op) f = everywhereOnCpp convert
138inlineOperator (m, op) f = everywhereOnCpp convert
@@ -148,8 +151,6 @@ inlineCommonOperators = applyAll $
148
151
149 , binary ringNumber opSub Subtract
152 , binary ringNumber opSub Subtract
150 , unary ringNumber opNegate Negate
153 , unary ringNumber opNegate Negate
151− , binary ringInt opSub Subtract
152− , unary ringInt opNegate Negate
153
154
154 , binary euclideanRingNumber opDiv Divide
155 , binary euclideanRingNumber opDiv Divide
155 , binary euclideanRingInt opMod Modulus
156 , binary euclideanRingInt opMod Modulus