File: aa011799cb63.patch

package info (click to toggle)
hedgewars 1.0.0-14
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 235,540 kB
  • sloc: cpp: 151,114; pascal: 54,829; ansic: 22,602; java: 8,210; haskell: 6,786; xml: 3,076; sh: 591; objc: 113; python: 105; makefile: 32
file content (83 lines) | stat: -rw-r--r-- 3,851 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# HG changeset patch
# User unC0Rr
# Date 1603366069 -7200
# Node ID aa011799cb637ee735c4097296720d558a8f7212
# Parent  72f735c03feca4783a3f6b1802a64e4b497f4ec7
Reduce the amount of parens in pas2c output for prettier result, hopefully not breaking anything

diff -r 72f735c03fec -r aa011799cb63 tools/pas2c/Pas2C.hs
--- a/tools/pas2c/Pas2C.hs	Thu Oct 22 12:50:24 2020 +0200
+++ b/tools/pas2c/Pas2C.hs	Thu Oct 22 13:27:49 2020 +0200
@@ -962,12 +962,17 @@
 wrapPhrase p@(Phrases _) = p
 wrapPhrase p = Phrases [p]
 
+parensExpr2C :: Expression -> State RenderState Doc
+parensExpr2C bop@(BinOp _ _ _) = liftM parens $ expr2C bop
+parensExpr2C set@(SetExpression _ ) = liftM parens $ expr2C set
+parensExpr2C e = expr2C e
+
 expr2C :: Expression -> State RenderState Doc
 expr2C (Expression s) = return $ text s
 expr2C bop@(BinOp op expr1 expr2) = do
-    e1 <- expr2C expr1
+    e1 <- parensExpr2C expr1
     t1 <- gets lastType
-    e2 <- expr2C expr2
+    e2 <- parensExpr2C expr2
     t2 <- gets lastType
     case (op2C op, t1, t2) of
         ("+", BTAString, BTAString) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strconcatA" (fff t1 t2 BTString))
@@ -991,8 +996,8 @@
 
         ("==", BTString, BTString) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strcompare" (fff t1 t2  BTBool))
         ("!=", BTString, _) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strncompare" (fff t1 t2  BTBool))
-        ("&", BTBool, _) -> return $ parens e1 <+> text "&&" <+> parens e2
-        ("|", BTBool, _) -> return $ parens e1 <+> text "||" <+> parens e2
+        ("&", BTBool, _) -> return $ e1 <+> text "&&" <+> e2
+        ("|", BTBool, _) -> return $ e1 <+> text "||" <+> e2
         (_, BTRecord t1 _, BTRecord t2 _) -> do
             i <- op2CTyped op [SimpleType (Identifier t1 undefined), SimpleType (Identifier t2 undefined)]
             ref2C $ FunCall [expr1, expr2] (SimpleReference i)
@@ -1009,17 +1014,17 @@
                  _ -> error "'in' against not set expression"
         (o, _, _) | o `elem` boolOps -> do
                         modify(\s -> s{lastType = BTBool})
-                        return $ parens e1 <+> text o <+> parens e2
+                        return $ e1 <+> text o <+> e2
                   | otherwise -> do
                         o' <- return $ case o of
                             "/(float)" -> text "/(float)" -- pascal returns real value
                             _ -> text o
                         e1' <- return $ case (o, t1, t2) of
                                 ("-", BTInt False, BTInt False) -> parens $ text "(int64_t)" <+> parens e1
-                                _ -> parens e1
+                                _ -> e1
                         e2' <- return $ case (o, t1, t2) of
                                 ("-", BTInt False, BTInt False) -> parens $ text "(int64_t)" <+> parens e2
-                                _ -> parens e2
+                                _ -> e2
                         return $ e1' <+> o' <+> e2'
     where
         fff t1 t2 = BTFunction False False [(False, t1), (False, t2)]
@@ -1050,7 +1055,7 @@
    modify(\s -> s{isFunctionType = False}) -- reset
    if isfunc then ref2CF ref False else ref2CF ref True
 expr2C (PrefixOp op expr) = do
-    e <- expr2C expr
+    e <- parensExpr2C expr
     lt <- gets lastType
     case lt of
         BTRecord t _ -> do
@@ -1060,8 +1065,8 @@
             o <- return $ case op of
                      "not" -> text "!"
                      _ -> text (op2C op)
-            return $ o <> parens e
-        _ -> return $ text (op2C op) <> parens e
+            return $ o <> e
+        _ -> return $ text (op2C op) <> e
 expr2C Null = return $ text "NULL"
 expr2C (CharCode a) = do
     modify(\s -> s{lastType = BTChar})