events: move slow path to separate function too
authorBrian White <mscdex@mscdex.net>
Tue, 10 Feb 2015 18:12:09 +0000 (13:12 -0500)
committerBen Noordhuis <info@bnoordhuis.nl>
Wed, 11 Feb 2015 22:05:39 +0000 (23:05 +0100)
This keeps in line with how things are done for the fast path
and *might* even provide a *slight* performance increase.

PR-URL: https://github.com/iojs/io.js/pull/785
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Evan Lucas <evanlucas@me.com>
lib/events.js

index 3e6f1af..33bcc18 100644 (file)
@@ -101,8 +101,19 @@ function emitThree(handler, isFn, self, arg1, arg2, arg3) {
   }
 }
 
+function emitMany(handler, isFn, self, args) {
+  if (isFn)
+    handler.apply(self, args);
+  else {
+    var len = handler.length;
+    var listeners = arrayClone(handler, len);
+    for (var i = 0; i < len; ++i)
+      listeners[i].apply(self, args);
+  }
+}
+
 EventEmitter.prototype.emit = function emit(type) {
-  var er, handler, len, args, i, listeners, events, domain;
+  var er, handler, len, args, i, events, domain;
   var needDomainExit = false;
 
   events = this._events;
@@ -160,14 +171,7 @@ EventEmitter.prototype.emit = function emit(type) {
       args = new Array(len - 1);
       for (i = 1; i < len; i++)
         args[i - 1] = arguments[i];
-      if (isFn)
-        handler.apply(this, args);
-      else {
-        len = handler.length;
-        listeners = arrayClone(handler, len);
-        for (i = 0; i < len; ++i)
-          listeners[i].apply(this, args);
-      }
+      emitMany(handler, isFn, this, args);
   }
 
   if (needDomainExit)