@@ -34,9 +34,15 @@ module O = struct
3434 external isArray : 'a -> bool = " Array.isArray" [@@ bs.val]
3535 type key = string
3636 let for_in : (Caml_obj_extern.t -> (key -> unit) -> unit) =
37- [% raw{| function(o,foo){
38- for (var x in o) { foo(x) }}
39- | }]
37+ [% raw{| function (o, foo) {
38+ if (Array. isArray(o)) {
39+ for (var x = 0 ; x < o.length; x++ ) {
40+ foo(x)
41+ }
42+ } else {
43+ for (var x in o) { foo(x) }
44+ }
45+ }| }]
4046 external hasOwnProperty :
4147 t -> key -> bool = " hasOwnProperty" [@@ bs.send]
4248 external get_value : Caml_obj_extern .t -> key -> Caml_obj_extern .t = " " [@@ bs.get_index]
@@ -133,12 +139,15 @@ let caml_lazy_make (fn : _ -> _) =
133139 In most cases, rec value comes from record/modules,
134140 whose tag is 0, we optimize that case
135141*)
136- let caml_update_dummy : _ -> _ -> unit = [% raw{| function(x,y){
137- for (var k in y){
138- x[k] = y[k]
142+ let caml_update_dummy : _ -> _ -> unit = [% raw{| function (x, y) {
143+ if (Array. isArray(y)) {
144+ for (var k = 0 ; k < y.length; k++ ) {
145+ x[k] = y[k]
146+ }
147+ } else {
148+ for (var k in y) { x[k] = y[k] }
139149 }
140- }
141- | }]
150+ }| }]
142151
143152(* Caml_obj_extern.set_length x (Caml_obj_extern.length y) *)
144153(* [set_length] seems redundant here given that it is initialized as an array
0 commit comments