diff options
author | Trevor Norris <trev.norris@gmail.com> | 2013-02-26 23:20:19 +0400 |
---|---|---|
committer | isaacs <i@izs.me> | 2013-03-02 05:36:48 +0400 |
commit | e1ac2ef7cffac256d794472f02c1160a075379fb (patch) | |
tree | 797e1d1d6013c81f85ad42c70b880826589e72c2 /lib/events.js | |
parent | 1ccc6fbe05653053bce015e24dd9aaa78b4ecc5b (diff) |
events: emit cleanup
Cleanup check logic. Place vars at top. Remove PROCESS.
Diffstat (limited to 'lib/events.js')
-rw-r--r-- | lib/events.js | 76 |
1 files changed, 30 insertions, 46 deletions
diff --git a/lib/events.js b/lib/events.js index eedd10aa9eb..d9e09bbc928 100644 --- a/lib/events.js +++ b/lib/events.js @@ -50,43 +50,38 @@ EventEmitter.prototype.setMaxListeners = function(n) { this._maxListeners = n; }; -// non-global reference, for speed. -var PROCESS; - EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + // If there is no 'error' event listener then throw. if (type === 'error') { if (!this._events.error || (typeof this._events.error === 'object' && !this._events.error.length)) { + er = arguments[1]; if (this.domain) { - var er = arguments[1]; er.domainEmitter = this; er.domain = this.domain; er.domainThrown = false; this.domain.emit('error', er); - return false; - } - - if (arguments[1] instanceof Error) { - throw arguments[1]; // Unhandled 'error' event + } else if (er instanceof Error) { + throw er; // Unhandled 'error' event } else { - throw TypeError("Uncaught, unspecified 'error' event."); + throw TypeError('Uncaught, unspecified "error" event.'); } return false; } } - var handler = this._events[type]; - if (!handler) return false; + handler = this._events[type]; + + if (typeof handler === 'undefined') + return false; + + if (this.domain && this !== process) + this.domain.enter(); if (typeof handler == 'function') { - if (this.domain) { - PROCESS = PROCESS || process; - if (this !== PROCESS) { - this.domain.enter(); - } - } switch (arguments.length) { // fast cases case 1: @@ -100,39 +95,28 @@ EventEmitter.prototype.emit = function(type) { break; // slower default: - var l = arguments.length; - var args = new Array(l - 1); - for (var i = 1; i < l; i++) args[i - 1] = arguments[i]; + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; handler.apply(this, args); } - if (this.domain && this !== PROCESS) { - this.domain.exit(); - } - return true; - } else if (typeof handler === 'object') { - if (this.domain) { - PROCESS = PROCESS || process; - if (this !== PROCESS) { - this.domain.enter(); - } - } - var l = arguments.length; - var args = new Array(l - 1); - for (var i = 1; i < l; i++) args[i - 1] = arguments[i]; - - var listeners = handler.slice(); - for (var i = 0, l = listeners.length; i < l; i++) { + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) listeners[i].apply(this, args); - } - if (this.domain && this !== PROCESS) { - this.domain.exit(); - } - return true; - - } else { - return false; } + + if (this.domain && this !== process) + this.domain.exit(); + + return true; }; EventEmitter.prototype.addListener = function(type, listener) { |