File tree Expand file tree Collapse file tree 3 files changed +39
-17
lines changed Expand file tree Collapse file tree 3 files changed +39
-17
lines changed Original file line number Diff line number Diff line change @@ -34,9 +34,15 @@ module O = struct
34
34
external isArray : 'a -> bool = " Array.isArray" [@@ bs.val]
35
35
type key = string
36
36
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
+ }| }]
40
46
external hasOwnProperty :
41
47
t -> key -> bool = " hasOwnProperty" [@@ bs.send]
42
48
external get_value : Caml_obj_extern .t -> key -> Caml_obj_extern .t = " " [@@ bs.get_index]
@@ -133,12 +139,12 @@ let caml_lazy_make (fn : _ -> _) =
133
139
In most cases, rec value comes from record/modules,
134
140
whose tag is 0, we optimize that case
135
141
*)
136
- let caml_update_dummy : _ -> _ -> unit = [% raw{| function(x,y) {
137
- for ( var k in y) {
142
+ let caml_update_dummy : _ -> _ -> unit = [% raw{| function (x, y) {
143
+ var set = function (k) {
138
144
x[k] = y[k]
139
145
}
140
- }
141
- | }]
146
+ for_in(y, set)
147
+ } | }]
142
148
143
149
(* Caml_obj_extern.set_length x (Caml_obj_extern.length y) *)
144
150
(* [set_length] seems redundant here given that it is initialized as an array
Original file line number Diff line number Diff line change @@ -4,8 +4,15 @@ import * as Block from "./block.js";
4
4
import * as Caml_primitive from "./caml_primitive.js" ;
5
5
import * as Caml_builtin_exceptions from "./caml_builtin_exceptions.js" ;
6
6
7
- var for_in = ( function ( o , foo ) {
8
- for ( var x in o ) { foo ( x ) } } ) ;
7
+ var for_in = ( function ( o , foo ) {
8
+ if ( Array . isArray ( o ) ) {
9
+ for ( var x = 0 ; x < o . length ; x ++ ) {
10
+ foo ( x )
11
+ }
12
+ } else {
13
+ for ( var x in o ) { foo ( x ) }
14
+ }
15
+ } ) ;
9
16
10
17
function caml_obj_block ( tag , size ) {
11
18
var v = new Array ( size ) ;
@@ -54,11 +61,12 @@ function caml_lazy_make(fn) {
54
61
return block ;
55
62
}
56
63
57
- var caml_update_dummy = ( function ( x , y ) {
58
- for ( var k in y ) {
64
+ var caml_update_dummy = ( function ( x , y ) {
65
+ var set = function ( k ) {
59
66
x [ k ] = y [ k ]
60
67
}
61
- } ) ;
68
+ for_in ( y , set )
69
+ } ) ;
62
70
63
71
function caml_compare ( _a , _b ) {
64
72
while ( true ) {
Original file line number Diff line number Diff line change @@ -4,8 +4,15 @@ var Block = require("./block.js");
4
4
var Caml_primitive = require ( "./caml_primitive.js" ) ;
5
5
var Caml_builtin_exceptions = require ( "./caml_builtin_exceptions.js" ) ;
6
6
7
- var for_in = ( function ( o , foo ) {
8
- for ( var x in o ) { foo ( x ) } } ) ;
7
+ var for_in = ( function ( o , foo ) {
8
+ if ( Array . isArray ( o ) ) {
9
+ for ( var x = 0 ; x < o . length ; x ++ ) {
10
+ foo ( x )
11
+ }
12
+ } else {
13
+ for ( var x in o ) { foo ( x ) }
14
+ }
15
+ } ) ;
9
16
10
17
function caml_obj_block ( tag , size ) {
11
18
var v = new Array ( size ) ;
@@ -54,11 +61,12 @@ function caml_lazy_make(fn) {
54
61
return block ;
55
62
}
56
63
57
- var caml_update_dummy = ( function ( x , y ) {
58
- for ( var k in y ) {
64
+ var caml_update_dummy = ( function ( x , y ) {
65
+ var set = function ( k ) {
59
66
x [ k ] = y [ k ]
60
67
}
61
- } ) ;
68
+ for_in ( y , set )
69
+ } ) ;
62
70
63
71
function caml_compare ( _a , _b ) {
64
72
while ( true ) {
You can’t perform that action at this time.
0 commit comments