git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
insert space of negate only when apply to negative value
commit763d0c32a14c529b243dffaacfbc37b2389cec9b authorphilopon <philopon.dependence@gmail.com> dateWed 14 Jan 2015, 00:43 (12 years ago) parent5e805ac
1 file changed+13−4
src/Language/PureScript/Pretty/JS.hs+13−4
src/Language/PureScript/Pretty/JS.hs+13−4
@@ -209,15 +209,24 @@ instanceOf = mkPattern match
209209 match (JSInstanceOf val ty) = Just (val, ty)
210210 match _ = Nothing
211211
212−unary :: UnaryOperator -> String -> Operator PrinterState JS String
213−unary op str = Wrap match (++)
212+unary' :: UnaryOperator -> (JS -> String) -> Operator PrinterState JS String
213+unary' op mkStr = Wrap match (++)
214214 where
215215 match :: Pattern PrinterState JS (String, JS)
216216 match = mkPattern match'
217217 where
218− match' (JSUnary op' val) | op' == op = Just (str, val)
218+ match' (JSUnary op' val) | op' == op = Just (mkStr val, val)
219219 match' _ = Nothing
220220
221+unary :: UnaryOperator -> String -> Operator PrinterState JS String
222+unary op str = unary' op (const str)
223+
224+negateOperator :: Operator PrinterState JS String
225+negateOperator = unary' Negate (\v -> if isNegative v then "- " else "-")
226+ where
227+ isNegative (JSNumericLiteral num) | either (<0) (<0) num = True
228+ isNegative _ = False
229+
221230binary :: BinaryOperator -> String -> Operator PrinterState JS String
222231binary op str = AssocL match (\v1 v2 -> v1 ++ " " ++ str ++ " " ++ v2)
223232 where
@@ -271,7 +280,7 @@ prettyPrintJS' = A.runKleisli $ runPattern matchValue
271280 , [ AssocR instanceOf $ \v1 v2 -> v1 ++ " instanceof " ++ v2 ]
272281 , [ unary Not "!" ]
273282 , [ unary BitwiseNot "~" ]
274− , [ unary Negate "- " ]
283+ , [ negateOperator ]
275284 , [ unary Positive "+" ]
276285 , [ binary Multiply "*"
277286 , binary Divide "/"