| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 7104210 commit eac875e
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -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; | |
| Back | FazBrowse Home | New Git URL |
0 commit comments