Skip to content

Commit dc9268b

Browse files
committed
timers: Optimize timer functions with improved argument handling
1 parent cc7018e commit dc9268b

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

lib/timers.js

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
'use strict';
2323

2424
const {
25+
Array,
2526
ArrayPrototypePush,
2627
MathTrunc,
2728
ObjectDefineProperties,
@@ -121,7 +122,7 @@ function unenroll(item) {
121122
function setTimeout(callback, after, arg1, arg2, arg3) {
122123
validateFunction(callback, 'callback');
123124

124-
let i, args;
125+
let args;
125126
switch (arguments.length) {
126127
// fast cases
127128
case 1:
@@ -134,10 +135,9 @@ function setTimeout(callback, after, arg1, arg2, arg3) {
134135
args = [arg1, arg2];
135136
break;
136137
default:
137-
args = [arg1, arg2, arg3];
138-
for (i = 5; i < arguments.length; i++) {
139-
// Extend array dynamically, makes .apply run much faster in v6.0.0
140-
ArrayPrototypePush(args, arguments[i]);
138+
args = new Array(arguments.length - 2);
139+
for (let i = 2; i < arguments.length; i++) {
140+
args[i - 2] = arguments[i];
141141
}
142142
break;
143143
}
@@ -190,7 +190,7 @@ function clearTimeout(timer) {
190190
function setInterval(callback, repeat, arg1, arg2, arg3) {
191191
validateFunction(callback, 'callback');
192192

193-
let i, args;
193+
let args;
194194
switch (arguments.length) {
195195
// fast cases
196196
case 1:
@@ -203,10 +203,9 @@ function setInterval(callback, repeat, arg1, arg2, arg3) {
203203
args = [arg1, arg2];
204204
break;
205205
default:
206-
args = [arg1, arg2, arg3];
207-
for (i = 5; i < arguments.length; i++) {
208-
// Extend array dynamically, makes .apply run much faster in v6.0.0
209-
ArrayPrototypePush(args, arguments[i]);
206+
args = new Array(arguments.length - 2);
207+
for (let i = 2; i < arguments.length; i++) {
208+
args[i - 2] = arguments[i];
210209
}
211210
break;
212211
}
@@ -263,7 +262,7 @@ Timeout.prototype[SymbolToPrimitive] = function() {
263262
function setImmediate(callback, arg1, arg2, arg3) {
264263
validateFunction(callback, 'callback');
265264

266-
let i, args;
265+
let args;
267266
switch (arguments.length) {
268267
// fast cases
269268
case 1:
@@ -275,10 +274,9 @@ function setImmediate(callback, arg1, arg2, arg3) {
275274
args = [arg1, arg2];
276275
break;
277276
default:
278-
args = [arg1, arg2, arg3];
279-
for (i = 4; i < arguments.length; i++) {
280-
// Extend array dynamically, makes .apply run much faster in v6.0.0
281-
ArrayPrototypePush(args, arguments[i]);
277+
args = new Array(arguments.length - 1);
278+
for (let i = 1; i < arguments.length; i++) {
279+
args[i - 1] = arguments[i];
282280
}
283281
break;
284282
}

0 commit comments

Comments
 (0)