@@ -389,6 +389,13 @@ function weakListeners() {
389389 return { registry : weakListenersState , map : objectToWeakListenerMap } ;
390390}
391391
392+ const kFlagOnce = 1 << 0 ;
393+ const kFlagCapture = 1 << 1 ;
394+ const kFlagPassive = 1 << 2 ;
395+ const kFlagNodeStyle = 1 << 3 ;
396+ const kFlagWeak = 1 << 4 ;
397+ const kFlagRemoved = 1 << 5 ;
398+
392399// The listeners for an EventTarget are maintained as a linked list.
393400// Unfortunately, the way EventTarget is defined, listeners are accounted
394401// using the tuple [handler,capture], and even if we don't actually make
@@ -404,13 +411,21 @@ class Listener {
404411 previous . next = this ;
405412 this . previous = previous ;
406413 this . listener = listener ;
407- // TODO(benjamingr) these 4 can be 'flags' to save 3 slots
408- this . once = once ;
409- this . capture = capture ;
410- this . passive = passive ;
411- this . isNodeStyleListener = isNodeStyleListener ;
414+
415+ let flags = 0b0 ;
416+ if ( once )
417+ flags |= kFlagOnce ;
418+ if ( capture )
419+ flags |= kFlagCapture ;
420+ if ( passive )
421+ flags |= kFlagPassive ;
422+ if ( isNodeStyleListener )
423+ flags |= kFlagNodeStyle ;
424+ if ( weak )
425+ flags |= kFlagWeak ;
426+ this . flags = flags ;
427+
412428 this . removed = false ;
413- this . weak = Boolean ( weak ) ; // Don't retain the object
414429
415430 if ( this . weak ) {
416431 this . callback = new SafeWeakRef ( listener ) ;
@@ -430,6 +445,31 @@ class Listener {
430445 }
431446 }
432447
448+ get once ( ) {
449+ return Boolean ( this . flags & kFlagOnce ) ;
450+ }
451+ get capture ( ) {
452+ return Boolean ( this . flags & kFlagCapture ) ;
453+ }
454+ get passive ( ) {
455+ return Boolean ( this . flags & kFlagPassive ) ;
456+ }
457+ get isNodeStyleListener ( ) {
458+ return Boolean ( this . flags & kFlagNodeStyle ) ;
459+ }
460+ get weak ( ) {
461+ return Boolean ( this . flags & kFlagWeak ) ;
462+ }
463+ get removed ( ) {
464+ return Boolean ( this . flags & kFlagRemoved ) ;
465+ }
466+ set removed ( value ) {
467+ if ( value )
468+ this . flags |= kFlagRemoved ;
469+ else
470+ this . flags &= ~ kFlagRemoved ;
471+ }
472+
433473 same ( listener , capture ) {
434474 const myListener = this . weak ? this . listener . deref ( ) : this . listener ;
435475 return myListener === listener && this . capture === capture ;
0 commit comments