@@ -86,6 +86,7 @@ const {
8686
8787const kCapture = Symbol ( 'kCapture' ) ;
8888const kErrorMonitor = Symbol ( 'events.errorMonitor' ) ;
89+ const kShapeMode = Symbol ( 'shapeMode' ) ;
8990const kMaxEventTargetListeners = Symbol ( 'events.maxEventTargetListeners' ) ;
9091const kMaxEventTargetListenersWarned =
9192 Symbol ( 'events.maxEventTargetListenersWarned' ) ;
@@ -343,6 +344,9 @@ EventEmitter.init = function(opts) {
343344 this . _events === ObjectGetPrototypeOf ( this ) . _events ) {
344345 this . _events = { __proto__ : null } ;
345346 this . _eventsCount = 0 ;
347+ this [ kShapeMode ] = false ;
348+ } else {
349+ this [ kShapeMode ] = true ;
346350 }
347351
348352 this . _maxListeners = this . _maxListeners || undefined ;
@@ -685,9 +689,13 @@ EventEmitter.prototype.removeListener =
685689 return this ;
686690
687691 if ( list === listener || list . listener === listener ) {
688- if ( -- this . _eventsCount === 0 )
692+ this . _eventsCount -= 1 ;
693+
694+ if ( this [ kShapeMode ] ) {
695+ events [ type ] = undefined ;
696+ } else if ( this . _eventsCount === 0 ) {
689697 this . _events = { __proto__ : null } ;
690- else {
698+ } else {
691699 delete events [ type ] ;
692700 if ( events . removeListener )
693701 this . emit ( 'removeListener' , type , list . listener || listener ) ;
@@ -749,6 +757,7 @@ EventEmitter.prototype.removeAllListeners =
749757 else
750758 delete events [ type ] ;
751759 }
760+ this [ kShapeMode ] = false ;
752761 return this ;
753762 }
754763
@@ -761,6 +770,7 @@ EventEmitter.prototype.removeAllListeners =
761770 this . removeAllListeners ( 'removeListener' ) ;
762771 this . _events = { __proto__ : null } ;
763772 this . _eventsCount = 0 ;
773+ this [ kShapeMode ] = false ;
764774 return this ;
765775 }
766776
0 commit comments