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