diff --git a/lib/timers.js b/lib/timers.js index 1f801c734d5..247a5e93f7f 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -22,7 +22,6 @@ 'use strict'; const { - ArrayPrototypePush, MathTrunc, ObjectDefineProperties, ObjectDefineProperty, @@ -131,38 +130,13 @@ function enroll(item, msecs) { * after `after` milliseconds. * @param {Function} callback * @param {number} [after] - * @param {any} [arg1] - * @param {any} [arg2] - * @param {any} [arg3] + * @param {...any} [args] * @returns {Timeout} */ -function setTimeout(callback, after, arg1, arg2, arg3) { +function setTimeout(callback, after, ...args) { validateFunction(callback, 'callback'); - - let i, args; - switch (arguments.length) { - // fast cases - case 1: - case 2: - break; - case 3: - args = [arg1]; - break; - case 4: - args = [arg1, arg2]; - break; - default: - args = [arg1, arg2, arg3]; - for (i = 5; i < arguments.length; i++) { - // Extend array dynamically, makes .apply run much faster in v6.0.0 - ArrayPrototypePush(args, arguments[i]); - } - break; - } - - const timeout = new Timeout(callback, after, args, false, true); + const timeout = new Timeout(callback, after, args.length ? args : undefined, false, true); insert(timeout, timeout._idleTimeout); - return timeout; } @@ -200,38 +174,13 @@ function clearTimeout(timer) { * every `repeat` milliseconds. * @param {Function} callback * @param {number} [repeat] - * @param {any} [arg1] - * @param {any} [arg2] - * @param {any} [arg3] + * @param {...any} [args] * @returns {Timeout} */ -function setInterval(callback, repeat, arg1, arg2, arg3) { +function setInterval(callback, repeat, ...args) { validateFunction(callback, 'callback'); - - let i, args; - switch (arguments.length) { - // fast cases - case 1: - case 2: - break; - case 3: - args = [arg1]; - break; - case 4: - args = [arg1, arg2]; - break; - default: - args = [arg1, arg2, arg3]; - for (i = 5; i < arguments.length; i++) { - // Extend array dynamically, makes .apply run much faster in v6.0.0 - ArrayPrototypePush(args, arguments[i]); - } - break; - } - - const timeout = new Timeout(callback, repeat, args, true, true); + const timeout = new Timeout(callback, repeat, args.length ? args : undefined, true, true); insert(timeout, timeout._idleTimeout); - return timeout; } @@ -273,35 +222,12 @@ Timeout.prototype[SymbolToPrimitive] = function() { * Schedules the immediate execution of `callback` * after I/O events' callbacks. * @param {Function} callback - * @param {any} [arg1] - * @param {any} [arg2] - * @param {any} [arg3] + * @param {...any} [args] * @returns {Immediate} */ -function setImmediate(callback, arg1, arg2, arg3) { +function setImmediate(callback, ...args) { validateFunction(callback, 'callback'); - - let i, args; - switch (arguments.length) { - // fast cases - case 1: - break; - case 2: - args = [arg1]; - break; - case 3: - args = [arg1, arg2]; - break; - default: - args = [arg1, arg2, arg3]; - for (i = 4; i < arguments.length; i++) { - // Extend array dynamically, makes .apply run much faster in v6.0.0 - ArrayPrototypePush(args, arguments[i]); - } - break; - } - - return new Immediate(callback, args); + return new Immediate(callback, args.length ? args : undefined); } ObjectDefineProperty(setImmediate, customPromisify, {