Skip to content

Commit dfdf52f

Browse files
author
Cristiano Calcagno
committed
Use isArray instead of is_object.
1 parent 660ca5a commit dfdf52f

File tree

2 files changed

+58
-59
lines changed

2 files changed

+58
-59
lines changed

jscomp/runtime/caml_obj.ml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ let caml_update_dummy x y =
132132
type 'a selector = 'a -> 'a -> 'a
133133

134134
module O = struct
135-
external object_ : Obj.t = "Object" [@@bs.val]
136-
let is_object : Obj.t -> bool = fun x -> (Obj.magic x)##constructor == object_
135+
external isArray : 'a -> bool = "Array.isArray" [@@bs.val]
137136
type key = string
138137
let for_in : (Obj.t -> (key -> unit) -> unit) [@bs] = [%bs.raw
139138
{|function (o, foo) {
@@ -212,9 +211,9 @@ let rec caml_compare (a : Obj.t) (b : Obj.t) : int =
212211
let len_a = Bs_obj.length a in
213212
let len_b = Bs_obj.length b in
214213
if len_a = len_b then
215-
if O.is_object a && O.is_object b
216-
then aux_obj_compare a b
217-
else aux_same_length a b 0 len_a
214+
if O.isArray(a)
215+
then aux_same_length a b 0 len_a
216+
else aux_obj_compare a b
218217
else if len_a < len_b then
219218
aux_length_a_short a b 0 len_a
220219
else
@@ -304,9 +303,9 @@ let rec caml_equal (a : Obj.t) (b : Obj.t) : bool =
304303
let len_a = Bs_obj.length a in
305304
let len_b = Bs_obj.length b in
306305
if len_a = len_b then
307-
if O.is_object a && O.is_object b
308-
then aux_obj_equal a b
309-
else aux_equal_length a b 0 len_a
306+
if O.isArray(a)
307+
then aux_equal_length a b 0 len_a
308+
else aux_obj_equal a b
310309
else false
311310
and aux_equal_length (a : Obj.t) (b : Obj.t) i same_length =
312311
if i = same_length then

lib/js/caml_obj.js

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,28 @@ function caml_compare(_a, _b) {
124124
var len_a = a.length | 0;
125125
var len_b = b.length | 0;
126126
if (len_a === len_b) {
127-
if (a.constructor === Object && b.constructor === Object) {
127+
if (Array.isArray(a)) {
128128
var a$1 = a;
129129
var b$1 = b;
130+
var _i = 0;
131+
var same_length = len_a;
132+
while(true) {
133+
var i = _i;
134+
if (i === same_length) {
135+
return 0;
136+
} else {
137+
var res = caml_compare(a$1[i], b$1[i]);
138+
if (res !== 0) {
139+
return res;
140+
} else {
141+
_i = i + 1 | 0;
142+
continue ;
143+
}
144+
}
145+
};
146+
} else {
147+
var a$2 = a;
148+
var b$2 = b;
130149
var min_key_lhs = [/* None */0];
131150
var min_key_rhs = [/* None */0];
132151
var do_key = function (param, key) {
@@ -150,8 +169,8 @@ function caml_compare(_a, _b) {
150169
}
151170
};
152171
var partial_arg = /* tuple */[
153-
a$1,
154-
b$1,
172+
a$2,
173+
b$2,
155174
min_key_rhs
156175
];
157176
var do_key_a = (function(partial_arg){
@@ -160,17 +179,17 @@ function caml_compare(_a, _b) {
160179
}
161180
}(partial_arg));
162181
var partial_arg$1 = /* tuple */[
163-
b$1,
164-
a$1,
182+
b$2,
183+
a$2,
165184
min_key_lhs
166185
];
167186
var do_key_b = (function(partial_arg$1){
168187
return function do_key_b(param) {
169188
return do_key(partial_arg$1, param);
170189
}
171190
}(partial_arg$1));
172-
for_in(a$1, do_key_a);
173-
for_in(b$1, do_key_b);
191+
for_in(a$2, do_key_a);
192+
for_in(b$2, do_key_b);
174193
var match = min_key_lhs[0];
175194
var match$1 = min_key_rhs[0];
176195
if (match) {
@@ -184,25 +203,6 @@ function caml_compare(_a, _b) {
184203
} else {
185204
return 0;
186205
}
187-
} else {
188-
var a$2 = a;
189-
var b$2 = b;
190-
var _i = 0;
191-
var same_length = len_a;
192-
while(true) {
193-
var i = _i;
194-
if (i === same_length) {
195-
return 0;
196-
} else {
197-
var res = caml_compare(a$2[i], b$2[i]);
198-
if (res !== 0) {
199-
return res;
200-
} else {
201-
_i = i + 1 | 0;
202-
continue ;
203-
}
204-
}
205-
};
206206
}
207207
} else if (len_a < len_b) {
208208
var a$3 = a;
@@ -291,51 +291,51 @@ function caml_equal(_a, _b) {
291291
var len_a = a.length | 0;
292292
var len_b = b.length | 0;
293293
if (len_a === len_b) {
294-
if (a.constructor === Object && b.constructor === Object) {
294+
if (Array.isArray(a)) {
295295
var a$1 = a;
296296
var b$1 = b;
297+
var _i = 0;
298+
var same_length = len_a;
299+
while(true) {
300+
var i = _i;
301+
if (i === same_length) {
302+
return /* true */1;
303+
} else if (caml_equal(a$1[i], b$1[i])) {
304+
_i = i + 1 | 0;
305+
continue ;
306+
} else {
307+
return /* false */0;
308+
}
309+
};
310+
} else {
311+
var a$2 = a;
312+
var b$2 = b;
297313
var result = [/* true */1];
298-
var do_key_a = (function(b$1,result){
314+
var do_key_a = (function(b$2,result){
299315
return function do_key_a(key) {
300-
if (b$1.hasOwnProperty(key)) {
316+
if (b$2.hasOwnProperty(key)) {
301317
return 0;
302318
} else {
303319
result[0] = /* false */0;
304320
return /* () */0;
305321
}
306322
}
307-
}(b$1,result));
308-
var do_key_b = (function(a$1,b$1,result){
323+
}(b$2,result));
324+
var do_key_b = (function(a$2,b$2,result){
309325
return function do_key_b(key) {
310-
if (!a$1.hasOwnProperty(key) || !caml_equal(b$1[key], a$1[key])) {
326+
if (!a$2.hasOwnProperty(key) || !caml_equal(b$2[key], a$2[key])) {
311327
result[0] = /* false */0;
312328
return /* () */0;
313329
} else {
314330
return 0;
315331
}
316332
}
317-
}(a$1,b$1,result));
318-
for_in(a$1, do_key_a);
333+
}(a$2,b$2,result));
334+
for_in(a$2, do_key_a);
319335
if (result[0]) {
320-
for_in(b$1, do_key_b);
336+
for_in(b$2, do_key_b);
321337
}
322338
return result[0];
323-
} else {
324-
var a$2 = a;
325-
var b$2 = b;
326-
var _i = 0;
327-
var same_length = len_a;
328-
while(true) {
329-
var i = _i;
330-
if (i === same_length) {
331-
return /* true */1;
332-
} else if (caml_equal(a$2[i], b$2[i])) {
333-
_i = i + 1 | 0;
334-
continue ;
335-
} else {
336-
return /* false */0;
337-
}
338-
};
339339
}
340340
} else {
341341
return /* false */0;

0 commit comments

Comments
 (0)