@@ -389,6 +389,13 @@ function weakListeners() {
389
389
return { registry : weakListenersState , map : objectToWeakListenerMap } ;
390
390
}
391
391
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
+
392
399
// The listeners for an EventTarget are maintained as a linked list.
393
400
// Unfortunately, the way EventTarget is defined, listeners are accounted
394
401
// using the tuple [handler,capture], and even if we don't actually make
@@ -404,13 +411,21 @@ class Listener {
404
411
previous . next = this ;
405
412
this . previous = previous ;
406
413
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
+
412
428
this . removed = false ;
413
- this . weak = Boolean ( weak ) ; // Don't retain the object
414
429
415
430
if ( this . weak ) {
416
431
this . callback = new SafeWeakRef ( listener ) ;
@@ -430,6 +445,31 @@ class Listener {
430
445
}
431
446
}
432
447
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
+
433
473
same ( listener , capture ) {
434
474
const myListener = this . weak ? this . listener . deref ( ) : this . listener ;
435
475
return myListener === listener && this . capture === capture ;
0 commit comments