@@ -96,65 +96,8 @@ EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
9696  return  $getMaxListeners ( this ) ; 
9797} ; 
9898
99- // These standalone emit* functions are used to optimize calling of event 
100- // handlers for fast cases because emit() itself often has a variable number of 
101- // arguments and can be deoptimized because of that. These functions always have 
102- // the same number of arguments and thus do not get deoptimized, so the code 
103- // inside them can execute faster. 
104- function  emitNone ( handler ,  isFn ,  self )  { 
105-   if  ( isFn ) 
106-     handler . call ( self ) ; 
107-   else  { 
108-     var  len  =  handler . length ; 
109-     var  listeners  =  arrayClone ( handler ,  len ) ; 
110-     for  ( var  i  =  0 ;  i  <  len ;  ++ i ) 
111-       listeners [ i ] . call ( self ) ; 
112-   } 
113- } 
114- function  emitOne ( handler ,  isFn ,  self ,  arg1 )  { 
115-   if  ( isFn ) 
116-     handler . call ( self ,  arg1 ) ; 
117-   else  { 
118-     var  len  =  handler . length ; 
119-     var  listeners  =  arrayClone ( handler ,  len ) ; 
120-     for  ( var  i  =  0 ;  i  <  len ;  ++ i ) 
121-       listeners [ i ] . call ( self ,  arg1 ) ; 
122-   } 
123- } 
124- function  emitTwo ( handler ,  isFn ,  self ,  arg1 ,  arg2 )  { 
125-   if  ( isFn ) 
126-     handler . call ( self ,  arg1 ,  arg2 ) ; 
127-   else  { 
128-     var  len  =  handler . length ; 
129-     var  listeners  =  arrayClone ( handler ,  len ) ; 
130-     for  ( var  i  =  0 ;  i  <  len ;  ++ i ) 
131-       listeners [ i ] . call ( self ,  arg1 ,  arg2 ) ; 
132-   } 
133- } 
134- function  emitThree ( handler ,  isFn ,  self ,  arg1 ,  arg2 ,  arg3 )  { 
135-   if  ( isFn ) 
136-     handler . call ( self ,  arg1 ,  arg2 ,  arg3 ) ; 
137-   else  { 
138-     var  len  =  handler . length ; 
139-     var  listeners  =  arrayClone ( handler ,  len ) ; 
140-     for  ( var  i  =  0 ;  i  <  len ;  ++ i ) 
141-       listeners [ i ] . call ( self ,  arg1 ,  arg2 ,  arg3 ) ; 
142-   } 
143- } 
144- 
145- function  emitMany ( handler ,  isFn ,  self ,  args )  { 
146-   if  ( isFn ) 
147-     handler . apply ( self ,  args ) ; 
148-   else  { 
149-     var  len  =  handler . length ; 
150-     var  listeners  =  arrayClone ( handler ,  len ) ; 
151-     for  ( var  i  =  0 ;  i  <  len ;  ++ i ) 
152-       listeners [ i ] . apply ( self ,  args ) ; 
153-   } 
154- } 
155- 
15699EventEmitter . prototype . emit  =  function  emit ( type )  { 
157-   var  er ,  handler ,   len ,   args ,  i ,  events ,  domain ; 
100+   var  er ,  fn ,  i ,  events ,  domain ; 
158101  var  needDomainExit  =  false ; 
159102  var  doError  =  ( type  ===  'error' ) ; 
160103
@@ -190,38 +133,103 @@ EventEmitter.prototype.emit = function emit(type) {
190133    return  false ; 
191134  } 
192135
193-   handler  =  events [ type ] ; 
136+   fn  =  events [ type ] ; 
194137
195-   if  ( ! handler ) 
138+   if  ( ! fn ) 
196139    return  false ; 
197140
198141  if  ( domain  &&  this  !==  process )  { 
199142    domain . enter ( ) ; 
200143    needDomainExit  =  true ; 
201144  } 
202145
203-   var  isFn  =  typeof  handler  ===  'function' ; 
204-   len  =  arguments . length ; 
205-   switch  ( len )  { 
206-     // fast cases 
207-     case  1 :
208-       emitNone ( handler ,  isFn ,  this ) ; 
209-       break ; 
210-     case  2 :
211-       emitOne ( handler ,  isFn ,  this ,  arguments [ 1 ] ) ; 
212-       break ; 
213-     case  3 :
214-       emitTwo ( handler ,  isFn ,  this ,  arguments [ 1 ] ,  arguments [ 2 ] ) ; 
215-       break ; 
216-     case  4 :
217-       emitThree ( handler ,  isFn ,  this ,  arguments [ 1 ] ,  arguments [ 2 ] ,  arguments [ 3 ] ) ; 
218-       break ; 
219-     // slower 
220-     default :
221-       args  =  new  Array ( len  -  1 ) ; 
222-       for  ( i  =  1 ;  i  <  len ;  i ++ ) 
223-         args [ i  -  1 ]  =  arguments [ i ] ; 
224-       emitMany ( handler ,  isFn ,  this ,  args ) ; 
146+   var  len  =  arguments . length ; 
147+   var  args ; 
148+   if  ( typeof  fn  ===  'function' )  { 
149+     switch  ( len )  { 
150+       case  1 : fn . call ( this ) ;  break ; 
151+       case  2 : fn . call ( this ,  arguments [ 1 ] ) ;  break ; 
152+       case  3 : fn . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ) ;  break ; 
153+       case  4 : fn . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ,  arguments [ 3 ] ) ; 
154+         break ; 
155+       default :
156+         args  =  new  Array ( len  -  1 ) ; 
157+         for  ( i  =  1 ;  i  <  len ;  i ++ ) 
158+           args [ i  -  1 ]  =  arguments [ i ] ; 
159+         fn . apply ( this ,  args ) ; 
160+     } 
161+   }  else  { 
162+     var  fnlen  =  fn . length ; 
163+     fn  =  arrayClone ( fn ,  fnlen ) ; 
164+     switch  ( len )  { 
165+       case  1 :
166+         fn [ 0 ] . call ( this ) ; 
167+         fn [ 1 ] . call ( this ) ; 
168+         if  ( fnlen  ===  2 )  break ; 
169+         fn [ 2 ] . call ( this ) ; 
170+         if  ( fnlen  ===  3 )  break ; 
171+         fn [ 3 ] . call ( this ) ; 
172+         if  ( fnlen  ===  4 )  break ; 
173+         fn [ 4 ] . call ( this ) ; 
174+         if  ( fnlen  ===  5 )  break ; 
175+         for  ( i  =  5 ;  i  <  fnlen ;  ++ i ) 
176+           fn [ i ] . call ( this ) ; 
177+         break ; 
178+       case  2 :
179+         fn [ 0 ] . call ( this ,  arguments [ 1 ] ) ; 
180+         fn [ 1 ] . call ( this ,  arguments [ 1 ] ) ; 
181+         if  ( fnlen  ===  2 )  break ; 
182+         fn [ 2 ] . call ( this ,  arguments [ 1 ] ) ; 
183+         if  ( fnlen  ===  3 )  break ; 
184+         fn [ 3 ] . call ( this ,  arguments [ 1 ] ) ; 
185+         if  ( fnlen  ===  4 )  break ; 
186+         fn [ 4 ] . call ( this ,  arguments [ 1 ] ) ; 
187+         if  ( fnlen  ===  5 )  break ; 
188+         for  ( i  =  5 ;  i  <  fnlen ;  ++ i ) 
189+           fn [ i ] . call ( this ,  arguments [ 1 ] ) ; 
190+         break ; 
191+       case  3 :
192+         fn [ 0 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ) ; 
193+         fn [ 1 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ) ; 
194+         if  ( fnlen  ===  2 )  break ; 
195+         fn [ 2 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ) ; 
196+         if  ( fnlen  ===  3 )  break ; 
197+         fn [ 3 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ) ; 
198+         if  ( fnlen  ===  4 )  break ; 
199+         fn [ 4 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ) ; 
200+         if  ( fnlen  ===  5 )  break ; 
201+         for  ( i  =  5 ;  i  <  fnlen ;  ++ i ) 
202+           fn [ i ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ) ; 
203+         break ; 
204+       case  4 :
205+         fn [ 0 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ,  arguments [ 3 ] ) ; 
206+         fn [ 1 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ,  arguments [ 3 ] ) ; 
207+         if  ( fnlen  ===  2 )  break ; 
208+         fn [ 2 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ,  arguments [ 3 ] ) ; 
209+         if  ( fnlen  ===  3 )  break ; 
210+         fn [ 3 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ,  arguments [ 3 ] ) ; 
211+         if  ( fnlen  ===  4 )  break ; 
212+         fn [ 4 ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ,  arguments [ 3 ] ) ; 
213+         if  ( fnlen  ===  5 )  break ; 
214+         for  ( i  =  5 ;  i  <  fnlen ;  ++ i ) 
215+           fn [ i ] . call ( this ,  arguments [ 1 ] ,  arguments [ 2 ] ,  arguments [ 3 ] ) ; 
216+         break ; 
217+       default :
218+         args  =  new  Array ( len  -  1 ) ; 
219+         for  ( i  =  1 ;  i  <  len ;  i ++ ) 
220+           args [ i  -  1 ]  =  arguments [ i ] ; 
221+         fn [ 0 ] . apply ( this ,  args ) ; 
222+         fn [ 1 ] . apply ( this ,  args ) ; 
223+         if  ( fnlen  ===  2 )  break ; 
224+         fn [ 2 ] . apply ( this ,  args ) ; 
225+         if  ( fnlen  ===  3 )  break ; 
226+         fn [ 3 ] . apply ( this ,  args ) ; 
227+         if  ( fnlen  ===  4 )  break ; 
228+         fn [ 4 ] . apply ( this ,  args ) ; 
229+         if  ( fnlen  ===  5 )  break ; 
230+         for  ( i  =  5 ;  i  <  fnlen ;  ++ i ) 
231+           fn [ i ] . apply ( this ,  args ) ; 
232+     } 
225233  } 
226234
227235  if  ( needDomainExit ) 
@@ -497,7 +505,13 @@ function spliceOne(list, index) {
497505} 
498506
499507function  arrayClone ( arr ,  n )  { 
500-   var  copy  =  new  Array ( n ) ; 
508+   switch  ( n )  { 
509+     case  2 : return  [ arr [ 0 ] ,  arr [ 1 ] ] ; 
510+     case  3 : return  [ arr [ 0 ] ,  arr [ 1 ] ,  arr [ 2 ] ] ; 
511+     case  4 : return  [ arr [ 0 ] ,  arr [ 1 ] ,  arr [ 2 ] ,  arr [ 3 ] ] ; 
512+     case  5 : return  [ arr [ 0 ] ,  arr [ 1 ] ,  arr [ 2 ] ,  arr [ 3 ] ,  arr [ 4 ] ] ; 
513+   } 
514+   const  copy  =  new  Array ( n ) ; 
501515  for  ( var  i  =  0 ;  i  <  n ;  ++ i ) 
502516    copy [ i ]  =  arr [ i ] ; 
503517  return  copy ; 
0 commit comments