Skip to content

Commit 66ea53c

Browse files
committed
Compiler: use Object.is for phys_equal
1 parent dc36c33 commit 66ea53c

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
@@ -1292,11 +1292,25 @@ let rec translate_expr ctx queue loc x e level : _ * J.statement_list =
12921292
| Eq, [ x; y ] ->
12931293
let (px, cx), queue = access_queue' ~ctx queue x in
12941294
let (py, cy), queue = access_queue' ~ctx queue y in
1295-
bool (J.EBin (J.EqEqEq, cx, cy)), or_p px py, queue
1295+
( bool
1296+
(J.call
1297+
(J.dot (s_var "Object") (Utf8_string.of_string_exn "is"))
1298+
[ cx; cy ]
1299+
loc)
1300+
, or_p px py
1301+
, queue )
12961302
| Neq, [ x; y ] ->
12971303
let (px, cx), queue = access_queue' ~ctx queue x in
12981304
let (py, cy), queue = access_queue' ~ctx queue y in
1299-
bool (J.EBin (J.NotEqEq, cx, cy)), or_p px py, queue
1305+
( J.EBin
1306+
( J.Minus
1307+
, one
1308+
, J.call
1309+
(J.dot (s_var "Object") (Utf8_string.of_string_exn "is"))
1310+
[ cx; cy ]
1311+
loc )
1312+
, or_p px py
1313+
, queue )
13001314
| IsInt, [ x ] ->
13011315
let (px, cx), queue = access_queue' ~ctx queue x in
13021316
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)