Browse Source

events: emit cleanup

Cleanup check logic. Place vars at top. Remove PROCESS.
v0.9.12-release
Trevor Norris 12 years ago
committed by isaacs
parent
commit
e1ac2ef7cf
  1. 76
      lib/events.js

76
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) {

Loading…
Cancel
Save