Skip to content

Commit 015dfc5

Browse files
committed
lib: narrow Atomics.wait* target to SharedArrayBuffer views
1 parent 2b88aeb commit 015dfc5

File tree

5 files changed

+36
-28
lines changed

5 files changed

+36
-28
lines changed

src/lib/es2017.sharedmemory.d.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,17 @@ interface Atomics {
9292
* agent is put to sleep causing execution to suspend until the timeout expires (returning
9393
* `"timed-out"`) or until the agent is awoken (returning `"ok"`); otherwise, returns
9494
* `"not-equal"`.
95+
* @param typedArray An Int32Array that views a SharedArrayBuffer.
96+
* @param index The position in the typedArray on which to wait.
97+
* @param value The expected value to test.
98+
* @param timeout Time to wait in milliseconds. Defaults to +Infinity.
9599
*/
96-
wait(typedArray: Int32Array<ArrayBufferLike>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out";
100+
wait(typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out";
97101

98102
/**
99103
* Wakes up sleeping agents that are waiting on the given index of the array, returning the
100104
* number of agents that were awoken.
101-
* @param typedArray A shared Int32Array<ArrayBufferLike>.
105+
* @param typedArray An Int32Array that views a SharedArrayBuffer.
102106
* @param index The position in the typedArray to wake up on.
103107
* @param count The number of sleeping agents to notify. Defaults to +Infinity.
104108
*/

src/lib/es2020.sharedmemory.d.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/// <reference lib="es2017.sharedmemory" />
12
/// <reference lib="es2020.bigint" />
23

34
interface Atomics {
@@ -60,13 +61,17 @@ interface Atomics {
6061
* agent is put to sleep causing execution to suspend until the timeout expires (returning
6162
* `"timed-out"`) or until the agent is awoken (returning `"ok"`); otherwise, returns
6263
* `"not-equal"`.
64+
* @param typedArray A BigInt64Array that views a SharedArrayBuffer.
65+
* @param index The position in the typedArray on which to wait.
66+
* @param value The expected value to test.
67+
* @param timeout Time to wait in milliseconds. Defaults to +Infinity.
6368
*/
64-
wait(typedArray: BigInt64Array<ArrayBufferLike>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out";
69+
wait(typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out";
6570

6671
/**
6772
* Wakes up sleeping agents that are waiting on the given index of the array, returning the
6873
* number of agents that were awoken.
69-
* @param typedArray A shared BigInt64Array.
74+
* @param typedArray A BigInt64Array that views a SharedArrayBuffer.
7075
* @param index The position in the typedArray to wake up on.
7176
* @param count The number of sleeping agents to notify. Defaults to +Infinity.
7277
*/

src/lib/es2024.sharedmemory.d.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1+
/// <reference lib="es2017.sharedmemory" />
12
/// <reference lib="es2020.bigint" />
23

34
interface Atomics {
45
/**
56
* A non-blocking, asynchronous version of wait which is usable on the main thread.
6-
* Waits asynchronously on a shared memory location and returns a Promise
7-
* @param typedArray A shared Int32Array or BigInt64Array.
7+
* @param typedArray An Int32Array that views a SharedArrayBuffer.
88
* @param index The position in the typedArray to wait on.
99
* @param value The expected value to test.
10-
* @param [timeout] The expected value to test.
10+
* @param timeout Time to wait in milliseconds. Defaults to +Infinity.
1111
*/
12-
waitAsync(typedArray: Int32Array, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; };
12+
waitAsync(typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; };
1313

1414
/**
1515
* A non-blocking, asynchronous version of wait which is usable on the main thread.
16-
* Waits asynchronously on a shared memory location and returns a Promise
17-
* @param typedArray A shared Int32Array or BigInt64Array.
16+
* @param typedArray A BigInt64Array that views a SharedArrayBuffer.
1817
* @param index The position in the typedArray to wait on.
1918
* @param value The expected value to test.
20-
* @param [timeout] The expected value to test.
19+
* @param timeout Time to wait in milliseconds. Defaults to +Infinity.
2120
*/
22-
waitAsync(typedArray: BigInt64Array, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; };
21+
waitAsync(typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; };
2322
}
2423

2524
interface SharedArrayBuffer {

tests/baselines/reference/es2024SharedMemory.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ const waitValue = Atomics.wait(int32, 0, 0);
6666
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6767
>Atomics.wait(int32, 0, 0) : "ok" | "not-equal" | "timed-out"
6868
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
69-
>Atomics.wait : { (typedArray: Int32Array<ArrayBufferLike>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array<ArrayBufferLike>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; }
70-
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
69+
>Atomics.wait : { (typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; }
70+
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
7171
>Atomics : Atomics
7272
> : ^^^^^^^
73-
>wait : { (typedArray: Int32Array<ArrayBufferLike>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array<ArrayBufferLike>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; }
74-
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
73+
>wait : { (typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; }
74+
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
7575
>int32 : Int32Array<SharedArrayBuffer>
7676
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7777
>0 : 0

tests/baselines/reference/sharedMemory.types

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ const waitValue = Atomics.wait(int32, 0, 0);
6262
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6363
>Atomics.wait(int32, 0, 0) : "ok" | "not-equal" | "timed-out"
6464
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
65-
>Atomics.wait : { (typedArray: Int32Array<ArrayBufferLike>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array<ArrayBufferLike>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; }
66-
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
65+
>Atomics.wait : { (typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; }
66+
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
6767
>Atomics : Atomics
6868
> : ^^^^^^^
69-
>wait : { (typedArray: Int32Array<ArrayBufferLike>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array<ArrayBufferLike>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; }
70-
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
69+
>wait : { (typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; }
70+
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
7171
>int32 : Int32Array<SharedArrayBuffer>
7272
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7373
>0 : 0
@@ -82,12 +82,12 @@ const { async, value } = Atomics.waitAsync(int32, 0, 0);
8282
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8383
>Atomics.waitAsync(int32, 0, 0) : { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }
8484
> : ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^
85-
>Atomics.waitAsync : { (typedArray: Int32Array, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; (typedArray: BigInt64Array, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; }
86-
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
85+
>Atomics.waitAsync : { (typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; (typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; }
86+
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
8787
>Atomics : Atomics
8888
> : ^^^^^^^
89-
>waitAsync : { (typedArray: Int32Array, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; (typedArray: BigInt64Array, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; }
90-
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
89+
>waitAsync : { (typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; (typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; }
90+
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
9191
>int32 : Int32Array<SharedArrayBuffer>
9292
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9393
>0 : 0
@@ -106,12 +106,12 @@ const { async: async64, value: value64 } = Atomics.waitAsync(int64, 0, BigInt(0)
106106
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
107107
>Atomics.waitAsync(int64, 0, BigInt(0)) : { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }
108108
> : ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^
109-
>Atomics.waitAsync : { (typedArray: Int32Array, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; (typedArray: BigInt64Array, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; }
110-
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
109+
>Atomics.waitAsync : { (typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; (typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; }
110+
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
111111
>Atomics : Atomics
112112
> : ^^^^^^^
113-
>waitAsync : { (typedArray: Int32Array, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; (typedArray: BigInt64Array, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; }
114-
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
113+
>waitAsync : { (typedArray: Int32Array<SharedArrayBuffer>, index: number, value: number, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; (typedArray: BigInt64Array<SharedArrayBuffer>, index: number, value: bigint, timeout?: number): { async: false; value: "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "timed-out">; }; }
114+
> : ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
115115
>int64 : BigInt64Array<SharedArrayBuffer>
116116
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
117117
>0 : 0

0 commit comments

Comments
 (0)