@@ -1056,10 +1056,13 @@ let remove_unused_tail_args ctx exact trampolined args =
1056
1056
else args
1057
1057
else args
1058
1058
1059
- let is_int = function
1060
- | J. ENum n -> J.Num. is_int n && not (J.Num. is_zero n)
1061
- | J. EBin ((J. Bor | J. Lsr ), _ , _ ) -> true
1062
- | _ -> false
1059
+ let maybe_zero_or_nan = function
1060
+ | J. ENum n -> (
1061
+ match J.Num. to_string n with
1062
+ | "NaN" -> true
1063
+ | "-0." | "0." | "0" | "0." -> true
1064
+ | J. EBin ((J. Bor | J. Lsr ), _ , _ ) -> false
1065
+ | _ -> true )
1063
1066
1064
1067
let rec translate_expr ctx queue loc x e level : _ * J.statement_list =
1065
1068
match e with
@@ -1359,7 +1362,7 @@ let rec translate_expr ctx queue loc x e level : _ * J.statement_list =
1359
1362
let (px, cx), queue = access_queue' ~ctx queue x in
1360
1363
let (py, cy), queue = access_queue' ~ctx queue y in
1361
1364
let e =
1362
- if is_int cx || is_int cy
1365
+ if not (maybe_zero_or_nan cx && maybe_zero_or_nan cy)
1363
1366
then bool (J. EBin (J. EqEqEq , cx, cy))
1364
1367
else
1365
1368
bool
@@ -1373,7 +1376,7 @@ let rec translate_expr ctx queue loc x e level : _ * J.statement_list =
1373
1376
let (px, cx), queue = access_queue' ~ctx queue x in
1374
1377
let (py, cy), queue = access_queue' ~ctx queue y in
1375
1378
let e =
1376
- if is_int cx || is_int cy
1379
+ if not (maybe_zero_or_nan cx && maybe_zero_or_nan cy)
1377
1380
then bool (J. EBin (J. NotEqEq , cx, cy))
1378
1381
else
1379
1382
bool_not
0 commit comments