@@ -1705,13 +1705,18 @@ class simpl =
1705
1705
match e with
1706
1706
| EBin (Plus, e1 , e2 ) -> (
1707
1707
match e1, e2 with
1708
- | _ , ENum n when Num. is_neg n -> EBin (Minus , e1, ENum (Num. neg n))
1709
- | ENum n , _ when Num. is_neg n -> EBin (Minus , e2, ENum (Num. neg n))
1710
- | ENum zero , (ENum _ as x ) when Num. is_zero zero -> x
1711
- | (ENum _ as x ), ENum zero when Num. is_zero zero -> x
1708
+ | ENum n1 , ENum n2 when Num. is_int n1 && Num. is_int n2 -> ENum (Num. add n1 n2)
1709
+ | _ , ENum n when Num. is_neg n ->
1710
+ m#expression (EBin (Minus , e1, ENum (Num. neg n)))
1711
+ | ENum n , _ when Num. is_neg n ->
1712
+ m#expression (EBin (Minus , e2, ENum (Num. neg n)))
1713
+ | ENum zero , x when Num. is_zero zero -> x
1714
+ | x , ENum zero when Num. is_zero zero -> x
1712
1715
| _ -> e)
1713
1716
| EBin (Minus, e1 , e2 ) -> (
1714
1717
match e1, e2 with
1718
+ | EBin (Minus, e0 , ENum n1 ), ENum n2 when Num. is_int n1 && Num. is_int n2 ->
1719
+ EBin (Minus , e0, ENum (Num. add n1 n2))
1715
1720
| _ , ENum n when Num. is_neg n -> EBin (Plus , e1, ENum (Num. neg n))
1716
1721
| (ENum _ as x ), ENum zero when Num. is_zero zero -> x
1717
1722
| _ -> e)
0 commit comments