process.EventEmitter.prototype.emit = function (type) {
- if (type == 'error') {
+ // If there is no 'error' event listener then throw.
+ if (type === 'error') {
if (!this._events || !this._events.error ||
- (this._events.error instanceof Array && !this._events.error.length))
+ (this._events.error instanceof Array && !this._events.error.length))
{
if (arguments[1] instanceof Error) {
throw arguments[1];
if (!this._events[type]) return false;
if (typeof this._events[type] == 'function') {
- var args = Array.prototype.slice.call(arguments, 1);
-
- this._events[type].apply(this, args);
+ if (arguments.length < 3) {
+ // fast case
+ this._events[type].call( this
+ , arguments[1]
+ , arguments[2]
+ );
+ } else {
+ // slower
+ var args = Array.prototype.slice.call(arguments, 1);
+ this._events[type].apply(this, args);
+ }
return true;
} else if (this._events[type] instanceof Array) {
var args = Array.prototype.slice.call(arguments, 1);
-
+
var listeners = this._events[type].slice(0);
for (var i = 0, l = listeners.length; i < l; i++) {
listeners[i].apply(this, args);