Skip to content

Commit 628a5f3

Browse files
committed
Compiler: use Object.is for phys_equal
1 parent d4ae28f commit 628a5f3

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

compiler/lib/generate.ml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,11 +1468,25 @@ let rec translate_expr ctx queue loc x e level : _ * J.statement_list =
14681468
| Eq, [ x; y ] ->
14691469
let (px, cx), queue = access_queue' ~ctx queue x in
14701470
let (py, cy), queue = access_queue' ~ctx queue y in
1471-
bool (J.EBin (J.EqEqEq, cx, cy)), or_p px py, queue
1471+
( bool
1472+
(J.call
1473+
(J.dot (s_var "Object") (Utf8_string.of_string_exn "is"))
1474+
[ cx; cy ]
1475+
loc)
1476+
, or_p px py
1477+
, queue )
14721478
| Neq, [ x; y ] ->
14731479
let (px, cx), queue = access_queue' ~ctx queue x in
14741480
let (py, cy), queue = access_queue' ~ctx queue y in
1475-
bool (J.EBin (J.NotEqEq, cx, cy)), or_p px py, queue
1481+
( J.EBin
1482+
( J.Minus
1483+
, one
1484+
, J.call
1485+
(J.dot (s_var "Object") (Utf8_string.of_string_exn "is"))
1486+
[ cx; cy ]
1487+
loc )
1488+
, or_p px py
1489+
, queue )
14761490
| IsInt, [ x ] ->
14771491
let (px, cx), queue = access_queue' ~ctx queue x in
14781492
bool (Mlvalue.is_immediate cx), px, queue

compiler/tests-jsoo/test_obj.ml

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,7 @@ let%expect_test "dup" =
7272
|}]
7373

7474
let%expect_test "sameness" =
75-
(* FIXME: Jsoo returns the wrong opposite result for cases below.
76-
Would be fixed by GH#1410 *)
77-
let f x =
78-
match Sys.backend_type with
79-
| Other "js_of_ocaml" -> not x
80-
| Other _ | Native | Bytecode -> x
81-
in
82-
print_bool (f (nan == nan));
75+
print_bool (nan == nan);
8376
[%expect {| true |}];
84-
print_bool (f (-0. == 0.));
77+
print_bool (-0. == 0.);
8578
[%expect {| false |}]

0 commit comments

Comments
 (0)