aboutsummaryrefslogtreecommitdiff
path: root/lib/events.js
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2013-01-17 13:20:22 -0800
committerisaacs <i@izs.me>2013-01-17 13:20:22 -0800
commitb7d76a1a7ba441ffb5dd0da05a226295f7a3a17c (patch)
tree5283c777764714649147b0a62293a08fcd47b9ea /lib/events.js
parent1528de23735d752f397371db9cc668aec0e67d36 (diff)
downloadandroid-node-v8-b7d76a1a7ba441ffb5dd0da05a226295f7a3a17c.tar.gz
android-node-v8-b7d76a1a7ba441ffb5dd0da05a226295f7a3a17c.tar.bz2
android-node-v8-b7d76a1a7ba441ffb5dd0da05a226295f7a3a17c.zip
Revert "events: Don't crash on events named __proto__"
Unfortunately, it's just too slow to do this in events.js. Users will just have to live with not having events named __proto__ or toString. This reverts commit b48e303af023dc60b6f6590694ba94d9b8108702.
Diffstat (limited to 'lib/events.js')
-rw-r--r--lib/events.js67
1 files changed, 31 insertions, 36 deletions
diff --git a/lib/events.js b/lib/events.js
index 5093f4ef1f..223015ec60 100644
--- a/lib/events.js
+++ b/lib/events.js
@@ -53,8 +53,8 @@ var PROCESS;
EventEmitter.prototype.emit = function(type) {
// If there is no 'error' event listener then throw.
if (type === 'error') {
- if (!this._events || !this._events.everror ||
- (isArray(this._events.everror) && !this._events.everror.length))
+ if (!this._events || !this._events.error ||
+ (isArray(this._events.error) && !this._events.error.length))
{
if (this.domain) {
var er = arguments[1];
@@ -75,8 +75,7 @@ EventEmitter.prototype.emit = function(type) {
}
if (!this._events) return false;
- var evtype = 'ev' + type;
- var handler = this._events[evtype];
+ var handler = this._events[type];
if (!handler) return false;
if (typeof handler == 'function') {
@@ -143,37 +142,36 @@ EventEmitter.prototype.addListener = function(type, listener) {
// To avoid recursion in the case that type == "newListener"! Before
// adding it to the listeners, first emit "newListener".
- if (this._events.evnewListener) {
+ if (this._events.newListener) {
this.emit('newListener', type, typeof listener.listener === 'function' ?
listener.listener : listener);
}
- var evtype = 'ev' + type;
- if (!this._events[evtype]) {
+ if (!this._events[type]) {
// Optimize the case of one listener. Don't need the extra array object.
- this._events[evtype] = listener;
- } else if (isArray(this._events[evtype])) {
+ this._events[type] = listener;
+ } else if (isArray(this._events[type])) {
// If we've already got an array, just append.
- this._events[evtype].push(listener);
+ this._events[type].push(listener);
} else {
// Adding the second element, need to change to array.
- this._events[evtype] = [this._events[evtype], listener];
+ this._events[type] = [this._events[type], listener];
}
// Check for listener leak
- if (isArray(this._events[evtype]) && !this._events[evtype].warned) {
+ if (isArray(this._events[type]) && !this._events[type].warned) {
var m;
m = this._maxListeners;
- if (m && m > 0 && this._events[evtype].length > m) {
- this._events[evtype].warned = true;
+ if (m && m > 0 && this._events[type].length > m) {
+ this._events[type].warned = true;
console.error('(node) warning: possible EventEmitter memory ' +
'leak detected. %d listeners added. ' +
'Use emitter.setMaxListeners() to increase limit.',
- this._events[evtype].length);
+ this._events[type].length);
console.trace();
}
}
@@ -206,11 +204,10 @@ EventEmitter.prototype.removeListener = function(type, listener) {
throw new Error('removeListener only takes instances of Function');
}
- var evtype = 'ev' + type;
- // does not use listeners(), so no side effect of creating _events[evtype]
- if (!this._events || !this._events[evtype]) return this;
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (!this._events || !this._events[type]) return this;
- var list = this._events[evtype];
+ var list = this._events[type];
if (isArray(list)) {
var position = -1;
@@ -226,17 +223,17 @@ EventEmitter.prototype.removeListener = function(type, listener) {
if (position < 0) return this;
list.splice(position, 1);
if (list.length == 0)
- this._events[evtype] = null;
+ this._events[type] = null;
- if (this._events.evremoveListener) {
+ if (this._events.removeListener) {
this.emit('removeListener', type, listener);
}
} else if (list === listener ||
(list.listener && list.listener === listener))
{
- this._events[evtype] = null;
+ this._events[type] = null;
- if (this._events.evremoveListener) {
+ if (this._events.removeListener) {
this.emit('removeListener', type, listener);
}
}
@@ -248,11 +245,11 @@ EventEmitter.prototype.removeAllListeners = function(type) {
if (!this._events) return this;
// fast path
- if (!this._events.evremoveListener) {
+ if (!this._events.removeListener) {
if (arguments.length === 0) {
this._events = {};
- } else if (type && this._events && this._events['ev' + type]) {
- this._events['ev' + type] = null;
+ } else if (type && this._events && this._events[type]) {
+ this._events[type] = null;
}
return this;
}
@@ -260,16 +257,15 @@ EventEmitter.prototype.removeAllListeners = function(type) {
// slow(ish) path, emit 'removeListener' events for all removals
if (arguments.length === 0) {
for (var key in this._events) {
- if (key === 'evremoveListener') continue;
- this.removeAllListeners(key.slice(2));
+ if (key === 'removeListener') continue;
+ this.removeAllListeners(key);
}
this.removeAllListeners('removeListener');
this._events = {};
return this;
}
- var evtype = 'ev' + type;
- var listeners = this._events[evtype];
+ var listeners = this._events[type];
if (isArray(listeners)) {
while (listeners.length) {
// LIFO order
@@ -278,16 +274,15 @@ EventEmitter.prototype.removeAllListeners = function(type) {
} else if (listeners) {
this.removeListener(type, listeners);
}
- this._events[evtype] = null;
+ this._events[type] = null;
return this;
};
EventEmitter.prototype.listeners = function(type) {
- var evtype = 'ev' + type;
- if (!this._events || !this._events[evtype]) return [];
- if (!isArray(this._events[evtype])) {
- return [this._events[evtype]];
+ if (!this._events || !this._events[type]) return [];
+ if (!isArray(this._events[type])) {
+ return [this._events[type]];
}
- return this._events[evtype].slice(0);
+ return this._events[type].slice(0);
};