Skip to content

Commit 33c3af8

Browse files
committed
caml_call_gen: special cases for when 1 or 2 parameters are missing
1 parent 143757f commit 33c3af8

File tree

2 files changed

+125
-33
lines changed

2 files changed

+125
-33
lines changed

runtime/stdlib.js

Lines changed: 62 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,35 @@ function caml_call_gen(f, args) {
3535
return caml_call_gen(f.apply(null,args.slice(0,n)),args.slice(n));
3636
}
3737
else {
38-
var g = function (){
39-
var extra_args = (arguments.length == 0)?1:arguments.length;
40-
var nargs = new Array(args.length+extra_args);
41-
for(var i = 0; i < args.length; i++ ) nargs[i] = args[i];
42-
for(var i = 0; i < arguments.length; i++ ) nargs[args.length+i] = arguments[i];
43-
return caml_call_gen(f, nargs)
44-
};
38+
switch (d) {
39+
case 1: {
40+
var g = function (x){
41+
var nargs = new Array(argsLen + 1);
42+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
43+
nargs[argsLen] = x;
44+
return f.apply(null, nargs)
45+
};
46+
break;
47+
}
48+
case 2: {
49+
var g = function (x, y){
50+
var nargs = new Array(argsLen + 2);
51+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
52+
nargs[argsLen] = x;
53+
nargs[argsLen + 1] = y;
54+
return f.apply(null, nargs)
55+
};
56+
break;
57+
}
58+
default: {
59+
var g = function (){
60+
var extra_args = (arguments.length == 0)?1:arguments.length;
61+
var nargs = new Array(args.length+extra_args);
62+
for(var i = 0; i < args.length; i++ ) nargs[i] = args[i];
63+
for(var i = 0; i < arguments.length; i++ ) nargs[args.length+i] = arguments[i];
64+
return caml_call_gen(f, nargs)
65+
};
66+
}}
4567
g.l = d;
4668
return g;
4769
}
@@ -72,15 +94,39 @@ function caml_call_gen(f, args) {
7294
} else {
7395
argsLen--;
7496
var k = args [argsLen];
75-
var g = function (){
76-
var extra_args = (arguments.length == 0)?1:arguments.length;
77-
var nargs = new Array(argsLen + extra_args);
78-
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
79-
for(var i = 0; i < arguments.length; i++ )
80-
nargs[argsLen + i] = arguments[i];
81-
return caml_call_gen(f, nargs)
82-
};
83-
g.l = d;
97+
switch (d) {
98+
case 1: {
99+
var g = function (x, y){
100+
var nargs = new Array(argsLen + 2);
101+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
102+
nargs[argsLen] = x;
103+
nargs[argsLen + 1] = y;
104+
return f.apply(null, nargs)
105+
};
106+
break;
107+
}
108+
case 2: {
109+
var g = function (x, y, z){
110+
var nargs = new Array(argsLen + 3);
111+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
112+
nargs[argsLen] = x;
113+
nargs[argsLen + 1] = y;
114+
nargs[argsLen + 2] = z;
115+
return f.apply(null, nargs)
116+
};
117+
break;
118+
}
119+
default: {
120+
var g = function (){
121+
var extra_args = (arguments.length == 0)?1:arguments.length;
122+
var nargs = new Array(argsLen + extra_args);
123+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
124+
for(var i = 0; i < arguments.length; i++ )
125+
nargs[argsLen + i] = arguments[i];
126+
return caml_call_gen(f, nargs)
127+
};
128+
}}
129+
g.l = d + 1;
84130
return k(g);
85131
}
86132
}

runtime/stdlib_modern.js

Lines changed: 63 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,36 @@ function caml_call_gen(f, args) {
3333
return caml_call_gen(f(...args.slice(0,n)),args.slice(n));
3434
}
3535
else {
36-
var g = function (){
37-
var extra_args = (arguments.length == 0)?1:arguments.length;
38-
var nargs = new Array(args.length+extra_args);
39-
for(var i = 0; i < args.length; i++ ) nargs[i] = args[i];
40-
for(var i = 0; i < arguments.length; i++ ) nargs[args.length+i] = arguments[i];
41-
return caml_call_gen(f, nargs)
42-
};
43-
g.l = d;
36+
switch (d) {
37+
case 1: {
38+
var g = function (x){
39+
var nargs = new Array(argsLen + 1);
40+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
41+
nargs[argsLen] = x;
42+
return f.apply(null, nargs)
43+
};
44+
break;
45+
}
46+
case 2: {
47+
var g = function (x, y){
48+
var nargs = new Array(argsLen + 2);
49+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
50+
nargs[argsLen] = x;
51+
nargs[argsLen + 1] = y;
52+
return f.apply(null, nargs)
53+
};
54+
break;
55+
}
56+
default: {
57+
var g = function (){
58+
var extra_args = (arguments.length == 0)?1:arguments.length;
59+
var nargs = new Array(args.length+extra_args);
60+
for(var i = 0; i < args.length; i++ ) nargs[i] = args[i];
61+
for(var i = 0; i < arguments.length; i++ ) nargs[args.length+i] = arguments[i];
62+
return caml_call_gen(f, nargs)
63+
};
64+
}}
65+
g.l = d + 1;
4466
return g;
4567
}
4668
}
@@ -70,15 +92,39 @@ function caml_call_gen(f, args) {
7092
} else {
7193
argsLen--;
7294
var k = args [argsLen];
73-
var g = function (){
74-
var extra_args = (arguments.length == 0)?1:arguments.length;
75-
var nargs = new Array(argsLen + extra_args);
76-
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
77-
for(var i = 0; i < arguments.length; i++ )
78-
nargs[argsLen + i] = arguments[i];
79-
return caml_call_gen(f, nargs)
80-
};
81-
g.l = d;
95+
switch (d) {
96+
case 1: {
97+
var g = function (x, y){
98+
var nargs = new Array(argsLen + 2);
99+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
100+
nargs[argsLen] = x;
101+
nargs[argsLen + 1] = y;
102+
return f.apply(null, nargs)
103+
};
104+
break;
105+
}
106+
case 2: {
107+
var g = function (x, y, z){
108+
var nargs = new Array(argsLen + 3);
109+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
110+
nargs[argsLen] = x;
111+
nargs[argsLen + 1] = y;
112+
nargs[argsLen + 2] = z;
113+
return f.apply(null, nargs)
114+
};
115+
break;
116+
}
117+
default: {
118+
var g = function (){
119+
var extra_args = (arguments.length == 0)?1:arguments.length;
120+
var nargs = new Array(argsLen + extra_args);
121+
for(var i = 0; i < argsLen; i++ ) nargs[i] = args[i];
122+
for(var i = 0; i < arguments.length; i++ )
123+
nargs[argsLen + i] = arguments[i];
124+
return caml_call_gen(f, nargs)
125+
};
126+
}}
127+
g.l = d + 1;
82128
return k(g);
83129
}
84130
}

0 commit comments

Comments
 (0)