summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/web/03_abort_signal.js29
1 files changed, 17 insertions, 12 deletions
diff --git a/ext/web/03_abort_signal.js b/ext/web/03_abort_signal.js
index d67bfef26..511ad216f 100644
--- a/ext/web/03_abort_signal.js
+++ b/ext/web/03_abort_signal.js
@@ -11,7 +11,6 @@
Boolean,
Set,
SetPrototypeAdd,
- SetPrototypeClear,
SetPrototypeDelete,
Symbol,
SymbolToStringTag,
@@ -21,13 +20,12 @@
const add = Symbol("add");
const signalAbort = Symbol("signalAbort");
const remove = Symbol("remove");
+ const aborted = Symbol("aborted");
+ const abortAlgos = Symbol("abortAlgos");
const illegalConstructorKey = Symbol("illegalConstructorKey");
class AbortSignal extends EventTarget {
- #aborted = false;
- #abortAlgorithms = new Set();
-
static abort() {
const signal = new AbortSignal(illegalConstructorKey);
signal[signalAbort]();
@@ -35,25 +33,30 @@
}
[add](algorithm) {
- SetPrototypeAdd(this.#abortAlgorithms, algorithm);
+ if (this[abortAlgos] === null) {
+ this[abortAlgos] = new Set();
+ }
+ SetPrototypeAdd(this[abortAlgos], algorithm);
}
[signalAbort]() {
- if (this.#aborted) {
+ if (this[aborted]) {
return;
}
- this.#aborted = true;
- for (const algorithm of this.#abortAlgorithms) {
- algorithm();
+ this[aborted] = true;
+ if (this[abortAlgos] !== null) {
+ for (const algorithm of this[abortAlgos]) {
+ algorithm();
+ }
+ this[abortAlgos] = null;
}
- SetPrototypeClear(this.#abortAlgorithms);
const event = new Event("abort");
setIsTrusted(event, true);
this.dispatchEvent(event);
}
[remove](algorithm) {
- SetPrototypeDelete(this.#abortAlgorithms, algorithm);
+ this[abortAlgos] && SetPrototypeDelete(this[abortAlgos], algorithm);
}
constructor(key = null) {
@@ -61,11 +64,13 @@
throw new TypeError("Illegal constructor.");
}
super();
+ this[aborted] = false;
+ this[abortAlgos] = null;
this[webidl.brand] = webidl.brand;
}
get aborted() {
- return Boolean(this.#aborted);
+ return Boolean(this[aborted]);
}
get [SymbolToStringTag]() {