Skip to content

Commit 145e4d2

Browse files
authored
Runtime: no longer use arguments (#1740)
* Runtime: no longer use arguments * no spread to build array * adapt for wasmoo
1 parent c0f9035 commit 145e4d2

File tree

5 files changed

+47
-106
lines changed

5 files changed

+47
-106
lines changed

biome.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
"noSubstr": "error"
2727
},
2828
"style": {
29-
"noArguments": "off",
3029
"noCommaOperator": "off",
3130
"noParameterAssign": "off",
3231
"noUselessElse": "off",

runtime/js/jslib.js

Lines changed: 17 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -379,12 +379,8 @@ function caml_ojs_new_arr(c, a) {
379379
//Provides: caml_js_wrap_callback const (const)
380380
//Requires: caml_callback
381381
function caml_js_wrap_callback(f) {
382-
return function () {
383-
var len = arguments.length;
384-
if (len > 0) {
385-
var args = new Array(len);
386-
for (var i = 0; i < len; i++) args[i] = arguments[i];
387-
} else {
382+
return function (...args) {
383+
if (args.length === 0) {
388384
args = [undefined];
389385
}
390386
var res = caml_callback(f, args);
@@ -395,75 +391,59 @@ function caml_js_wrap_callback(f) {
395391
//Provides: caml_js_wrap_callback_arguments
396392
//Requires: caml_callback
397393
function caml_js_wrap_callback_arguments(f) {
398-
return function () {
399-
var len = arguments.length;
400-
var args = new Array(len);
401-
for (var i = 0; i < len; i++) args[i] = arguments[i];
394+
return function (...args) {
402395
return caml_callback(f, [args]);
403396
};
404397
}
405398
//Provides: caml_js_wrap_callback_strict const
406399
//Requires: caml_callback
407400
function caml_js_wrap_callback_strict(arity, f) {
408-
return function () {
409-
var n = arguments.length;
410-
var args = new Array(arity);
411-
var len = Math.min(arguments.length, arity);
412-
for (var i = 0; i < len; i++) args[i] = arguments[i];
401+
return function (...args) {
402+
args.length = arity;
413403
return caml_callback(f, args);
414404
};
415405
}
416406
//Provides: caml_js_wrap_callback_unsafe const (const)
417407
//Requires: caml_callback, caml_js_function_arity
418408
function caml_js_wrap_callback_unsafe(f) {
419-
return function () {
409+
return function (...args) {
420410
var len = caml_js_function_arity(f);
421-
var args = new Array(len);
422-
for (var i = 0; i < len; i++) args[i] = arguments[i];
411+
args.length = len;
423412
return caml_callback(f, args);
424413
};
425414
}
426415
//Provides: caml_js_wrap_meth_callback const (const)
427416
//Requires: caml_callback, caml_js_wrap_callback
428417
function caml_js_wrap_meth_callback(f) {
429-
return function () {
430-
var len = arguments.length;
431-
var args = new Array(len + 1);
432-
args[0] = this;
433-
for (var i = 0; i < len; i++) args[i + 1] = arguments[i];
418+
return function (...args) {
419+
args.unshift(this);
434420
var res = caml_callback(f, args);
435421
return res instanceof Function ? caml_js_wrap_callback(res) : res;
436422
};
437423
}
438424
//Provides: caml_js_wrap_meth_callback_arguments const (const)
439425
//Requires: caml_callback
440426
function caml_js_wrap_meth_callback_arguments(f) {
441-
return function () {
442-
var len = arguments.length;
443-
var args = new Array(len);
444-
for (var i = 0; i < len; i++) args[i] = arguments[i];
427+
return function (...args) {
445428
return caml_callback(f, [this, args]);
446429
};
447430
}
448431
//Provides: caml_js_wrap_meth_callback_strict const
449432
//Requires: caml_callback
450433
function caml_js_wrap_meth_callback_strict(arity, f) {
451-
return function () {
452-
var args = new Array(arity + 1);
453-
var len = Math.min(arguments.length, arity);
454-
args[0] = this;
455-
for (var i = 0; i < len; i++) args[i + 1] = arguments[i];
434+
return function (...args) {
435+
args.length = arity;
436+
args.unshift(this);
456437
return caml_callback(f, args);
457438
};
458439
}
459440
//Provides: caml_js_wrap_meth_callback_unsafe const (const)
460441
//Requires: caml_callback, caml_js_function_arity
461442
function caml_js_wrap_meth_callback_unsafe(f) {
462-
return function () {
463-
var len = caml_js_function_arity(f) - 1;
464-
var args = new Array(len + 1);
465-
args[0] = this;
466-
for (var i = 0; i < len; i++) args[i + 1] = arguments[i];
443+
return function (...args) {
444+
var len = caml_js_function_arity(f);
445+
args.unshift(this);
446+
args.length = len;
467447
return caml_callback(f, args);
468448
};
469449
}

runtime/js/stdlib.js

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,9 @@ function caml_call_gen(f, args) {
5151
break;
5252
}
5353
default: {
54-
var g = function () {
55-
var extra_args = arguments.length === 0 ? 1 : arguments.length;
56-
var nargs = new Array(args.length + extra_args);
57-
for (var i = 0; i < args.length; i++) nargs[i] = args[i];
58-
for (var i = 0; i < arguments.length; i++)
59-
nargs[args.length + i] = arguments[i];
60-
return caml_call_gen(f, nargs);
54+
var g = function (...extra_args) {
55+
if (extra_args.length === 0) extra_args = [undefined];
56+
return caml_call_gen(f, args.concat(extra_args));
6157
};
6258
}
6359
}
@@ -112,13 +108,10 @@ function caml_call_gen(f, args) {
112108
break;
113109
}
114110
default: {
115-
var g = function () {
116-
var extra_args = arguments.length === 0 ? 1 : arguments.length;
117-
var nargs = new Array(argsLen + extra_args);
118-
for (var i = 0; i < argsLen; i++) nargs[i] = args[i];
119-
for (var i = 0; i < arguments.length; i++)
120-
nargs[argsLen + i] = arguments[i];
121-
return caml_call_gen(f, nargs);
111+
args.length = argsLen;
112+
var g = function (...extra_args) {
113+
if (extra_args.length === 0) extra_args = [undefined];
114+
return caml_call_gen(f, args.concat(extra_args));
122115
};
123116
}
124117
}

runtime/js/stdlib_modern.js

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,9 @@ function caml_call_gen(f, args) {
4949
break;
5050
}
5151
default: {
52-
var g = function () {
53-
var extra_args = arguments.length === 0 ? 1 : arguments.length;
54-
var nargs = new Array(args.length + extra_args);
55-
for (var i = 0; i < args.length; i++) nargs[i] = args[i];
56-
for (var i = 0; i < arguments.length; i++)
57-
nargs[args.length + i] = arguments[i];
58-
return caml_call_gen(f, nargs);
52+
var g = function (...extra_args) {
53+
if (extra_args.length === 0) extra_args = [undefined];
54+
return caml_call_gen(f, args.concat(extra_args));
5955
};
6056
}
6157
}
@@ -108,13 +104,10 @@ function caml_call_gen(f, args) {
108104
break;
109105
}
110106
default: {
111-
var g = function () {
112-
var extra_args = arguments.length === 0 ? 1 : arguments.length;
113-
var nargs = new Array(argsLen + extra_args);
114-
for (var i = 0; i < argsLen; i++) nargs[i] = args[i];
115-
for (var i = 0; i < arguments.length; i++)
116-
nargs[argsLen + i] = arguments[i];
117-
return caml_call_gen(f, nargs);
107+
args.length = argsLen;
108+
var g = function (...extra_args) {
109+
if (extra_args.length === 0) extra_args = [undefined];
110+
return caml_call_gen(f, args.concat(extra_args));
118111
};
119112
}
120113
}

runtime/wasm/runtime.js

Lines changed: 16 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -228,72 +228,48 @@
228228
for (let i = 0; i < l; i++) string_set(s, p2 + i, a[p1 + i]);
229229
},
230230
wrap_callback: (f) =>
231-
function () {
232-
var n = arguments.length;
233-
if (n > 0) {
234-
var args = new Array(n);
235-
for (var i = 0; i < n; i++) args[i] = arguments[i];
236-
} else {
231+
function (...args) {
232+
if (args.length === 0) {
237233
args = [undefined];
238234
}
239235
return caml_callback(f, args.length, args, 1);
240236
},
241237
wrap_callback_args: (f) =>
242-
function () {
243-
var n = arguments.length;
244-
var args = new Array(n);
245-
for (var i = 0; i < n; i++) args[i] = arguments[i];
238+
function (...args) {
246239
return caml_callback(f, 1, [args], 0);
247240
},
248241
wrap_callback_strict: (arity, f) =>
249-
function () {
250-
var n = arguments.length;
251-
var args = new Array(arity);
252-
var len = Math.min(arguments.length, arity);
253-
for (var i = 0; i < len; i++) args[i] = arguments[i];
242+
function (...args) {
243+
args.length = arity;
254244
return caml_callback(f, arity, args, 0);
255245
},
256246
wrap_callback_unsafe: (f) =>
257-
function () {
258-
var n = arguments.length;
259-
var args = new Array(n);
260-
for (var i = 0; i < n; i++) args[i] = arguments[i];
247+
function (...args) {
261248
return caml_callback(f, args.length, args, 2);
262249
},
263250
wrap_meth_callback: (f) =>
264-
function () {
265-
var n = arguments.length;
266-
var args = new Array(n + 1);
267-
args[0] = this;
268-
for (var i = 0; i < n; i++) args[i + 1] = arguments[i];
251+
function (...args) {
252+
args.unshift(this);
269253
return caml_callback(f, args.length, args, 1);
270254
},
271255
wrap_meth_callback_args: (f) =>
272-
function () {
273-
var n = arguments.length;
274-
var args = new Array(n);
275-
for (var i = 0; i < n; i++) args[i] = arguments[i];
256+
function (...args) {
276257
return caml_callback(f, 2, [this, args], 0);
277258
},
278259
wrap_meth_callback_strict: (arity, f) =>
279-
function () {
280-
var args = new Array(arity + 1);
281-
var len = Math.min(arguments.length, arity);
282-
args[0] = this;
283-
for (var i = 0; i < len; i++) args[i + 1] = arguments[i];
260+
function (...args) {
261+
args.length = arity;
262+
args.unshift(this);
284263
return caml_callback(f, args.length, args, 0);
285264
},
286265
wrap_meth_callback_unsafe: (f) =>
287-
function () {
288-
var n = arguments.length;
289-
var args = new Array(n + 1);
290-
args[0] = this;
291-
for (var i = 0; i < n; i++) args[i + 1] = arguments[i];
266+
function (...args) {
267+
args.unshift(this);
292268
return caml_callback(f, args.length, args, 2);
293269
},
294270
wrap_fun_arguments: (f) =>
295-
function () {
296-
return f(arguments);
271+
function (...args) {
272+
return f(args);
297273
},
298274
format_float: (prec, conversion, pad, x) => {
299275
function toFixed(x, dp) {

0 commit comments

Comments
 (0)