From e374e44a8a1bed599379fdcf4b5fe142c5e5187d Mon Sep 17 00:00:00 2001 From: Brian White Date: Fri, 2 Jun 2017 02:09:19 -0400 Subject: [PATCH] events: fix potential permanent deopt PR-URL: https://github.com/nodejs/node/pull/13384 Reviewed-By: Luigi Pinca Reviewed-By: Refael Ackermann --- lib/events.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/events.js b/lib/events.js index 1609d66192e..c49df9fab84 100644 --- a/lib/events.js +++ b/lib/events.js @@ -306,10 +306,25 @@ EventEmitter.prototype.prependListener = }; function onceWrapper() { - this.target.removeListener(this.type, this.wrapFn); if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); this.fired = true; - this.listener.apply(this.target, arguments); + switch (arguments.length) { + case 0: + return this.listener.call(this.target); + case 1: + return this.listener.call(this.target, arguments[0]); + case 2: + return this.listener.call(this.target, arguments[0], arguments[1]); + case 3: + return this.listener.call(this.target, arguments[0], arguments[1], + arguments[2]); + default: + const args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) + args[i] = arguments[i]; + this.listener.apply(this.target, args); + } } }