Skip to content

Commit ec63adc

Browse files
committed
Compiler: use Object.is for phys_equal
1 parent 659945d commit ec63adc

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
@@ -1320,11 +1320,25 @@ let rec translate_expr ctx queue loc x e level : _ * J.statement_list =
13201320
| Eq, [ x; y ] ->
13211321
let (px, cx), queue = access_queue' ~ctx queue x in
13221322
let (py, cy), queue = access_queue' ~ctx queue y in
1323-
bool (J.EBin (J.EqEqEq, cx, cy)), or_p px py, queue
1323+
( bool
1324+
(J.call
1325+
(J.dot (s_var "Object") (Utf8_string.of_string_exn "is"))
1326+
[ cx; cy ]
1327+
loc)
1328+
, or_p px py
1329+
, queue )
13241330
| Neq, [ x; y ] ->
13251331
let (px, cx), queue = access_queue' ~ctx queue x in
13261332
let (py, cy), queue = access_queue' ~ctx queue y in
1327-
bool (J.EBin (J.NotEqEq, cx, cy)), or_p px py, queue
1333+
( J.EBin
1334+
( J.Minus
1335+
, one
1336+
, J.call
1337+
(J.dot (s_var "Object") (Utf8_string.of_string_exn "is"))
1338+
[ cx; cy ]
1339+
loc )
1340+
, or_p px py
1341+
, queue )
13281342
| IsInt, [ x ] ->
13291343
let (px, cx), queue = access_queue' ~ctx queue x in
13301344
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)