Skip to content

Commit 7c95cfc

Browse files
benjamingrtargos
authored andcommitted
events: define abort on prototype
PR-URL: #35931 Backport-PR-URL: #38386 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Daijiro Wachi <[email protected]> Reviewed-By: Rich Trott <[email protected]>
1 parent bdad1bc commit 7c95cfc

File tree

3 files changed

+10
-14
lines changed

3 files changed

+10
-14
lines changed

lib/internal/abort_controller.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ Object.defineProperties(AbortSignal.prototype, {
4747
aborted: { enumerable: true }
4848
});
4949

50+
defineEventHandler(AbortSignal.prototype, 'abort');
51+
5052
function abortSignal(signal) {
5153
if (signal[kAborted]) return;
5254
signal[kAborted] = true;
@@ -64,7 +66,6 @@ class AbortController {
6466
constructor() {
6567
this[kSignal] = new AbortSignal();
6668
emitExperimentalWarning('AbortController');
67-
defineEventHandler(this[kSignal], 'abort');
6869
}
6970

7071
get signal() { return this[kSignal]; }

lib/internal/event_target.js

+8-11
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@ const {
44
ArrayFrom,
55
Boolean,
66
Error,
7-
Map,
87
NumberIsInteger,
98
Object,
109
ObjectDefineProperty,
1110
ObjectGetOwnPropertyDescriptor,
11+
SafeMap,
1212
String,
1313
Symbol,
1414
SymbolFor,
1515
SymbolToStringTag,
16-
SafeWeakMap,
1716
SafeWeakSet,
1817
} = primordials;
1918

@@ -35,6 +34,7 @@ const kIsEventTarget = SymbolFor('nodejs.event_target');
3534
const kEvents = Symbol('kEvents');
3635
const kStop = Symbol('kStop');
3736
const kTarget = Symbol('kTarget');
37+
const kHandlers = Symbol('khandlers');
3838

3939
const kHybridDispatch = Symbol.for('nodejs.internal.kHybridDispatch');
4040
const kCreateEvent = Symbol('kCreateEvent');
@@ -218,7 +218,7 @@ class Listener {
218218
}
219219

220220
function initEventTarget(self) {
221-
self[kEvents] = new Map();
221+
self[kEvents] = new SafeMap();
222222
}
223223

224224
class EventTarget {
@@ -577,27 +577,24 @@ function emitUnhandledRejectionOrErr(that, err, event) {
577577
process.emit('error', err, event);
578578
}
579579

580-
// A map of emitter -> map of name -> handler
581-
const eventHandlerValueMap = new SafeWeakMap();
582-
583580
function defineEventHandler(emitter, name) {
584581
// 8.1.5.1 Event handlers - basically `on[eventName]` attributes
585582
ObjectDefineProperty(emitter, `on${name}`, {
586583
get() {
587-
return eventHandlerValueMap.get(this)?.get(name);
584+
return this[kHandlers]?.get(name);
588585
},
589586
set(value) {
590-
const oldValue = eventHandlerValueMap.get(this)?.get(name);
587+
const oldValue = this[kHandlers]?.get(name);
591588
if (oldValue) {
592589
this.removeEventListener(name, oldValue);
593590
}
594591
if (typeof value === 'function') {
595592
this.addEventListener(name, value);
596593
}
597-
if (!eventHandlerValueMap.has(this)) {
598-
eventHandlerValueMap.set(this, new Map());
594+
if (!this[kHandlers]) {
595+
this[kHandlers] = new SafeMap();
599596
}
600-
eventHandlerValueMap.get(this).set(name, value);
597+
this[kHandlers].set(name, value);
601598
},
602599
configurable: true,
603600
enumerable: true

lib/internal/worker/io.js

-2
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,6 @@ ObjectDefineProperty(
9999
// This is called from inside the `MessagePort` constructor.
100100
function oninit() {
101101
initNodeEventTarget(this);
102-
defineEventHandler(this, 'message');
103-
defineEventHandler(this, 'messageerror');
104102
setupPortReferencing(this, this, 'message');
105103
}
106104

0 commit comments

Comments
 (0)