From e1ac2ef7cffac256d794472f02c1160a075379fb Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Tue, 26 Feb 2013 11:20:19 -0800 Subject: [PATCH] events: emit cleanup Cleanup check logic. Place vars at top. Remove PROCESS. --- lib/events.js | 76 ++++++++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 46 deletions(-) diff --git a/lib/events.js b/lib/events.js index eedd10aa9e..d9e09bbc92 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) {