@@ -1705,13 +1705,18 @@ class simpl =
17051705 match e with
17061706 | EBin (Plus, e1 , e2 ) -> (
17071707 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
17121715 | _ -> e)
17131716 | EBin (Minus, e1 , e2 ) -> (
17141717 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))
17151720 | _ , ENum n when Num. is_neg n -> EBin (Plus , e1, ENum (Num. neg n))
17161721 | (ENum _ as x ), ENum zero when Num. is_zero zero -> x
17171722 | _ -> e)
0 commit comments