@@ -56,38 +56,14 @@ EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
56
56
return $getMaxListeners ( this ) ;
57
57
} ;
58
58
59
- EventEmitter . prototype . emit = function emit ( type ) {
60
- var er , handler , len , args , i , listeners ;
61
-
62
- if ( ! this . _events )
63
- this . _events = { } ;
64
-
65
- // If there is no 'error' event listener then throw.
66
- if ( type === 'error' && ! this . _events . error ) {
67
- er = arguments [ 1 ] ;
68
- if ( this . domain ) {
69
- if ( ! er )
70
- er = new Error ( 'Uncaught, unspecified "error" event.' ) ;
71
- er . domainEmitter = this ;
72
- er . domain = this . domain ;
73
- er . domainThrown = false ;
74
- this . domain . emit ( 'error' , er ) ;
75
- } else if ( er instanceof Error ) {
76
- throw er ; // Unhandled 'error' event
77
- } else {
78
- throw Error ( 'Uncaught, unspecified "error" event.' ) ;
79
- }
80
- return false ;
81
- }
59
+ function $emitGeneric ( type ) {
60
+ var handler , len , args , i , listeners ;
82
61
83
62
handler = this . _events [ type ] ;
84
63
85
64
if ( util . isUndefined ( handler ) )
86
65
return false ;
87
66
88
- if ( this . domain && this !== process )
89
- this . domain . enter ( ) ;
90
-
91
67
if ( util . isFunction ( handler ) ) {
92
68
switch ( arguments . length ) {
93
69
// fast cases
@@ -120,10 +96,61 @@ EventEmitter.prototype.emit = function emit(type) {
120
96
listeners [ i ] . apply ( this , args ) ;
121
97
}
122
98
99
+ return true ;
100
+ }
101
+
102
+ function $emitUncaughtError ( type , er ) {
103
+ // If there is no 'error' event listener then throw.
104
+ if ( this . domain ) {
105
+ if ( ! er )
106
+ er = new Error ( 'Uncaught, unspecified "error" event.' ) ;
107
+ er . domainEmitter = this ;
108
+ er . domain = this . domain ;
109
+ er . domainThrown = false ;
110
+ this . domain . emit ( 'error' , er ) ;
111
+ } else if ( er instanceof Error ) {
112
+ throw er ; // Unhandled 'error' event
113
+ } else {
114
+ throw new Error ( 'Uncaught, unspecified "error" event.' ) ;
115
+ }
116
+ return false ;
117
+ }
118
+
119
+ function $emitNoArguments ( type ) {
120
+ var handler = this . _events [ type ] ;
121
+
122
+ if ( typeof handler === 'function' )
123
+ handler . call ( this ) ;
124
+ if ( typeof handler !== 'object' )
125
+ return ;
126
+
127
+ var listeners = handler . slice ( ) ;
128
+ for ( var i = 0 ; i < listeners . length ; i ++ )
129
+ listeners [ i ] . call ( this ) ;
130
+
131
+ return true ;
132
+ }
133
+
134
+ EventEmitter . prototype . emit = function emit ( type ) {
135
+ var ret ;
136
+
137
+ if ( ! this . _events )
138
+ this . _events = { } ;
139
+
140
+ if ( this . domain && this !== process )
141
+ this . domain . enter ( ) ;
142
+
143
+ if ( type === 'error' && ! this . _events . error )
144
+ ret = $emitUncaughtError . apply ( this , arguments ) ;
145
+ else if ( arguments . length === 1 )
146
+ ret = $emitNoArguments . call ( this , type ) ;
147
+ else
148
+ ret = $emitGeneric . apply ( this , arguments ) ;
149
+
123
150
if ( this . domain && this !== process )
124
151
this . domain . exit ( ) ;
125
152
126
- return true ;
153
+ return ret ;
127
154
} ;
128
155
129
156
EventEmitter . prototype . addListener = function addListener ( type , listener ) {
0 commit comments