events: emit cleanup

Cleanup check logic. Place vars at top. Remove PROCESS.
This commit is contained in:
Trevor Norris 2013-02-26 11:20:19 -08:00 committed by isaacs
parent 1ccc6fbe05
commit e1ac2ef7cf

View File

@ -50,43 +50,38 @@ EventEmitter.prototype.setMaxListeners = function(n) {
this._maxListeners = n; this._maxListeners = n;
}; };
// non-global reference, for speed.
var PROCESS;
EventEmitter.prototype.emit = function(type) { EventEmitter.prototype.emit = function(type) {
var er, handler, len, args, i, listeners;
// If there is no 'error' event listener then throw. // If there is no 'error' event listener then throw.
if (type === 'error') { if (type === 'error') {
if (!this._events.error || if (!this._events.error ||
(typeof this._events.error === 'object' && (typeof this._events.error === 'object' &&
!this._events.error.length)) { !this._events.error.length)) {
er = arguments[1];
if (this.domain) { if (this.domain) {
var er = arguments[1];
er.domainEmitter = this; er.domainEmitter = this;
er.domain = this.domain; er.domain = this.domain;
er.domainThrown = false; er.domainThrown = false;
this.domain.emit('error', er); this.domain.emit('error', er);
return false; } else if (er instanceof Error) {
} throw er; // Unhandled 'error' event
if (arguments[1] instanceof Error) {
throw arguments[1]; // Unhandled 'error' event
} else { } else {
throw TypeError("Uncaught, unspecified 'error' event."); throw TypeError('Uncaught, unspecified "error" event.');
} }
return false; return false;
} }
} }
var handler = this._events[type]; handler = this._events[type];
if (!handler) return false;
if (typeof handler === 'undefined')
return false;
if (this.domain && this !== process)
this.domain.enter();
if (typeof handler == 'function') { if (typeof handler == 'function') {
if (this.domain) {
PROCESS = PROCESS || process;
if (this !== PROCESS) {
this.domain.enter();
}
}
switch (arguments.length) { switch (arguments.length) {
// fast cases // fast cases
case 1: case 1:
@ -100,39 +95,28 @@ EventEmitter.prototype.emit = function(type) {
break; break;
// slower // slower
default: default:
var l = arguments.length; len = arguments.length;
var args = new Array(l - 1); args = new Array(len - 1);
for (var i = 1; i < l; i++) args[i - 1] = arguments[i]; for (i = 1; i < len; i++)
args[i - 1] = arguments[i];
handler.apply(this, args); handler.apply(this, args);
} }
if (this.domain && this !== PROCESS) {
this.domain.exit();
}
return true;
} else if (typeof handler === 'object') { } else if (typeof handler === 'object') {
if (this.domain) { len = arguments.length;
PROCESS = PROCESS || process; args = new Array(len - 1);
if (this !== PROCESS) { for (i = 1; i < len; i++)
this.domain.enter(); args[i - 1] = arguments[i];
}
}
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(); listeners = handler.slice();
for (var i = 0, l = listeners.length; i < l; i++) { len = listeners.length;
for (i = 0; i < len; i++)
listeners[i].apply(this, args); 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) { EventEmitter.prototype.addListener = function(type, listener) {