@@ -394,6 +394,13 @@ function weakListeners() {
394
394
return { registry : weakListenersState , map : objectToWeakListenerMap } ;
395
395
}
396
396
397
+ const kFlagOnce = 1 << 0 ;
398
+ const kFlagCapture = 1 << 1 ;
399
+ const kFlagPassive = 1 << 2 ;
400
+ const kFlagNodeStyle = 1 << 3 ;
401
+ const kFlagWeak = 1 << 4 ;
402
+ const kFlagRemoved = 1 << 5 ;
403
+
397
404
// The listeners for an EventTarget are maintained as a linked list.
398
405
// Unfortunately, the way EventTarget is defined, listeners are accounted
399
406
// using the tuple [handler,capture], and even if we don't actually make
@@ -409,13 +416,21 @@ class Listener {
409
416
previous . next = this ;
410
417
this . previous = previous ;
411
418
this . listener = listener ;
412
- // TODO(benjamingr) these 4 can be 'flags' to save 3 slots
413
- this . once = once ;
414
- this . capture = capture ;
415
- this . passive = passive ;
416
- this . isNodeStyleListener = isNodeStyleListener ;
419
+
420
+ let flags = 0b0 ;
421
+ if ( once )
422
+ flags |= kFlagOnce ;
423
+ if ( capture )
424
+ flags |= kFlagCapture ;
425
+ if ( passive )
426
+ flags |= kFlagPassive ;
427
+ if ( isNodeStyleListener )
428
+ flags |= kFlagNodeStyle ;
429
+ if ( weak )
430
+ flags |= kFlagWeak ;
431
+ this . flags = flags ;
432
+
417
433
this . removed = false ;
418
- this . weak = Boolean ( weak ) ; // Don't retain the object
419
434
420
435
if ( this . weak ) {
421
436
this . callback = new SafeWeakRef ( listener ) ;
@@ -435,6 +450,31 @@ class Listener {
435
450
}
436
451
}
437
452
453
+ get once ( ) {
454
+ return Boolean ( this . flags & kFlagOnce ) ;
455
+ }
456
+ get capture ( ) {
457
+ return Boolean ( this . flags & kFlagCapture ) ;
458
+ }
459
+ get passive ( ) {
460
+ return Boolean ( this . flags & kFlagPassive ) ;
461
+ }
462
+ get isNodeStyleListener ( ) {
463
+ return Boolean ( this . flags & kFlagNodeStyle ) ;
464
+ }
465
+ get weak ( ) {
466
+ return Boolean ( this . flags & kFlagWeak ) ;
467
+ }
468
+ get removed ( ) {
469
+ return Boolean ( this . flags & kFlagRemoved ) ;
470
+ }
471
+ set removed ( value ) {
472
+ if ( value )
473
+ this . flags |= kFlagRemoved ;
474
+ else
475
+ this . flags &= ~ kFlagRemoved ;
476
+ }
477
+
438
478
same ( listener , capture ) {
439
479
const myListener = this . weak ? this . listener . deref ( ) : this . listener ;
440
480
return myListener === listener && this . capture === capture ;
0 commit comments