Skip to content

Commit 4c50601

Browse files
Grubba27Eyal-Shaleva-tarasyukjablkosandersn
authored
Fix(49198): Added missing definition for Atomics.waitAsync and es2022 sharedmemory file (#49204)
* feat(sharedmemory): Added file waitAsync function * fix: Adjusted promise return type * Fix(sharedmemory): Addressed PR comments * Fix: Removed unused @see at sharedmemory * Feat: Added tests to shared memory * Fix: fixed ordering in libs.json * Feat: Added shared memory to line parser * Update tests es2022SharedMemory.ts as sugested Co-authored-by: Eyal Halpern Shalev <[email protected]> * Update es2022SharedMemory.ts * feat: Accepted baselines * fix: Adjusted grammar changes in jsdoc * fix(47821): skip nodes with export modifiers (#47829) * Use symbolic GitHub Actions Node.js versions (#49403) * update baselines Co-authored-by: Eyal Halpern Shalev <[email protected]> Co-authored-by: Oleksandr T <[email protected]> Co-authored-by: Jack Bates <[email protected]> Co-authored-by: Nathan Shively-Sanders <[email protected]>
1 parent f72b1ba commit 4c50601

12 files changed

+131
-3
lines changed

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ namespace ts {
8383
["es2022.error", "lib.es2022.error.d.ts"],
8484
["es2022.intl", "lib.es2022.intl.d.ts"],
8585
["es2022.object", "lib.es2022.object.d.ts"],
86+
["es2022.sharedmemory", "lib.es2022.sharedmemory.d.ts"],
8687
["es2022.string", "lib.es2022.string.d.ts"],
8788
["esnext.array", "lib.es2022.array.d.ts"],
8889
["esnext.symbol", "lib.es2019.symbol.d.ts"],

src/lib/es2022.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
/// <reference lib="es2022.error" />
44
/// <reference lib="es2022.intl" />
55
/// <reference lib="es2022.object" />
6+
/// <reference lib="es2022.sharedmemory" />
67
/// <reference lib="es2022.string" />

src/lib/es2022.sharedmemory.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
interface Atomics {
2+
/**
3+
* A non-blocking, asynchronous version of wait which is usable on the main thread.
4+
* Waits asynchronously on a shared memory location and returns a Promise
5+
*/
6+
waitAsync(typedArray: BigInt64Array | Int32Array, index: number, value: bigint, timeout?: number): { async: false, value: "ok" | "not-equal" | "timed-out" } | { async: true, value: Promise<"ok" | "not-equal" | "timed-out"> };
7+
}

src/lib/libs.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"es2022.error",
6060
"es2022.intl",
6161
"es2022.object",
62+
"es2022.sharedmemory",
6263
"es2022.string",
6364
"esnext.intl",
6465
// Default libraries
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
=== tests/cases/conformance/es2022/es2022SharedMemory.ts ===
2+
const sab = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 1024);
3+
>sab : Symbol(sab, Decl(es2022SharedMemory.ts, 0, 5))
4+
>SharedArrayBuffer : Symbol(SharedArrayBuffer, Decl(lib.es2017.sharedmemory.d.ts, --, --), Decl(lib.es2017.sharedmemory.d.ts, --, --))
5+
>Int32Array.BYTES_PER_ELEMENT : Symbol(Int32ArrayConstructor.BYTES_PER_ELEMENT, Decl(lib.es5.d.ts, --, --))
6+
>Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 1 more)
7+
>BYTES_PER_ELEMENT : Symbol(Int32ArrayConstructor.BYTES_PER_ELEMENT, Decl(lib.es5.d.ts, --, --))
8+
9+
const int32 = new Int32Array(sab);
10+
>int32 : Symbol(int32, Decl(es2022SharedMemory.ts, 1, 5))
11+
>Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 1 more)
12+
>sab : Symbol(sab, Decl(es2022SharedMemory.ts, 0, 5))
13+
14+
const waitValue = Atomics.wait(int32, 0, 0);
15+
>waitValue : Symbol(waitValue, Decl(es2022SharedMemory.ts, 2, 5))
16+
>Atomics.wait : Symbol(Atomics.wait, Decl(lib.es2017.sharedmemory.d.ts, --, --), Decl(lib.es2020.sharedmemory.d.ts, --, --))
17+
>Atomics : Symbol(Atomics, Decl(lib.es2017.sharedmemory.d.ts, --, --), Decl(lib.es2017.sharedmemory.d.ts, --, --), Decl(lib.es2020.sharedmemory.d.ts, --, --), Decl(lib.es2022.sharedmemory.d.ts, --, --))
18+
>wait : Symbol(Atomics.wait, Decl(lib.es2017.sharedmemory.d.ts, --, --), Decl(lib.es2020.sharedmemory.d.ts, --, --))
19+
>int32 : Symbol(int32, Decl(es2022SharedMemory.ts, 1, 5))
20+
21+
const { async, value } = Atomics.waitAsync(int32, 0, BigInt(0));
22+
>async : Symbol(async, Decl(es2022SharedMemory.ts, 3, 7))
23+
>value : Symbol(value, Decl(es2022SharedMemory.ts, 3, 14))
24+
>Atomics.waitAsync : Symbol(Atomics.waitAsync, Decl(lib.es2022.sharedmemory.d.ts, --, --))
25+
>Atomics : Symbol(Atomics, Decl(lib.es2017.sharedmemory.d.ts, --, --), Decl(lib.es2017.sharedmemory.d.ts, --, --), Decl(lib.es2020.sharedmemory.d.ts, --, --), Decl(lib.es2022.sharedmemory.d.ts, --, --))
26+
>waitAsync : Symbol(Atomics.waitAsync, Decl(lib.es2022.sharedmemory.d.ts, --, --))
27+
>int32 : Symbol(int32, Decl(es2022SharedMemory.ts, 1, 5))
28+
>BigInt : Symbol(BigInt, Decl(lib.es2020.bigint.d.ts, --, --), Decl(lib.es2020.bigint.d.ts, --, --))
29+
30+
const main = async () => {
31+
>main : Symbol(main, Decl(es2022SharedMemory.ts, 5, 5))
32+
33+
if (async) {
34+
>async : Symbol(async, Decl(es2022SharedMemory.ts, 3, 7))
35+
36+
await value;
37+
>value : Symbol(value, Decl(es2022SharedMemory.ts, 3, 14))
38+
}
39+
}
40+
main();
41+
>main : Symbol(main, Decl(es2022SharedMemory.ts, 5, 5))
42+
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
=== tests/cases/conformance/es2022/es2022SharedMemory.ts ===
2+
const sab = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 1024);
3+
>sab : SharedArrayBuffer
4+
>new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 1024) : SharedArrayBuffer
5+
>SharedArrayBuffer : SharedArrayBufferConstructor
6+
>Int32Array.BYTES_PER_ELEMENT * 1024 : number
7+
>Int32Array.BYTES_PER_ELEMENT : number
8+
>Int32Array : Int32ArrayConstructor
9+
>BYTES_PER_ELEMENT : number
10+
>1024 : 1024
11+
12+
const int32 = new Int32Array(sab);
13+
>int32 : Int32Array
14+
>new Int32Array(sab) : Int32Array
15+
>Int32Array : Int32ArrayConstructor
16+
>sab : SharedArrayBuffer
17+
18+
const waitValue = Atomics.wait(int32, 0, 0);
19+
>waitValue : "ok" | "not-equal" | "timed-out"
20+
>Atomics.wait(int32, 0, 0) : "ok" | "not-equal" | "timed-out"
21+
>Atomics.wait : { (typedArray: Int32Array, index: number, value: number, timeout?: number | undefined): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array, index: number, value: bigint, timeout?: number | undefined): "ok" | "not-equal" | "timed-out"; }
22+
>Atomics : Atomics
23+
>wait : { (typedArray: Int32Array, index: number, value: number, timeout?: number | undefined): "ok" | "not-equal" | "timed-out"; (typedArray: BigInt64Array, index: number, value: bigint, timeout?: number | undefined): "ok" | "not-equal" | "timed-out"; }
24+
>int32 : Int32Array
25+
>0 : 0
26+
>0 : 0
27+
28+
const { async, value } = Atomics.waitAsync(int32, 0, BigInt(0));
29+
>async : boolean
30+
>value : "ok" | "not-equal" | "timed-out" | Promise<"ok" | "not-equal" | "timed-out">
31+
>Atomics.waitAsync(int32, 0, BigInt(0)) : { async: false; value: "ok" | "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "not-equal" | "timed-out">; }
32+
>Atomics.waitAsync : (typedArray: Int32Array | BigInt64Array, index: number, value: bigint, timeout?: number | undefined) => { async: false; value: "ok" | "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "not-equal" | "timed-out">; }
33+
>Atomics : Atomics
34+
>waitAsync : (typedArray: Int32Array | BigInt64Array, index: number, value: bigint, timeout?: number | undefined) => { async: false; value: "ok" | "not-equal" | "timed-out"; } | { async: true; value: Promise<"ok" | "not-equal" | "timed-out">; }
35+
>int32 : Int32Array
36+
>0 : 0
37+
>BigInt(0) : bigint
38+
>BigInt : BigIntConstructor
39+
>0 : 0
40+
41+
const main = async () => {
42+
>main : () => Promise<void>
43+
>async () => { if (async) { await value; }} : () => Promise<void>
44+
45+
if (async) {
46+
>async : boolean
47+
48+
await value;
49+
>await value : "ok" | "not-equal" | "timed-out"
50+
>value : Promise<"ok" | "not-equal" | "timed-out">
51+
}
52+
}
53+
main();
54+
>main() : Promise<void>
55+
>main : () => Promise<void>
56+

tests/baselines/reference/reactJsxReactResolvedNodeNext.trace.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,5 +147,7 @@
147147
"File 'package.json' does not exist according to earlier cached lookups.",
148148
"File '/package.json' does not exist according to earlier cached lookups.",
149149
"File 'package.json' does not exist according to earlier cached lookups.",
150+
"File '/package.json' does not exist according to earlier cached lookups.",
151+
"File 'package.json' does not exist according to earlier cached lookups.",
150152
"File '/package.json' does not exist according to earlier cached lookups."
151153
]

tests/baselines/reference/reactJsxReactResolvedNodeNextEsm.trace.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,5 +141,7 @@
141141
"File 'package.json' does not exist according to earlier cached lookups.",
142142
"File '/package.json' does not exist according to earlier cached lookups.",
143143
"File 'package.json' does not exist according to earlier cached lookups.",
144+
"File '/package.json' does not exist according to earlier cached lookups.",
145+
"File 'package.json' does not exist according to earlier cached lookups.",
144146
"File '/package.json' does not exist according to earlier cached lookups."
145147
]

tests/baselines/reference/tsc/runWithoutArgs/does-not-add-color-when-NO_COLOR-is-set.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ default: undefined
9090

9191
--lib
9292
Specify a set of bundled library declaration files that describe the target runtime environment.
93-
one or more: es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, esnext, dom, dom.iterable, webworker, webworker.importscripts, webworker.iterable, scripthost, es2015.core, es2015.collection, es2015.generator, es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.array.include, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncgenerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array, es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2020.bigint/esnext.bigint, es2020.date, es2020.promise, es2020.sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2020.number, es2021.promise/esnext.promise, es2021.string, es2021.weakref/esnext.weakref, es2021.intl, es2022.array/esnext.array, es2022.error, es2022.intl, es2022.object, es2022.string/esnext.string, esnext.intl
93+
one or more: es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, esnext, dom, dom.iterable, webworker, webworker.importscripts, webworker.iterable, scripthost, es2015.core, es2015.collection, es2015.generator, es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.array.include, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncgenerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array, es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2020.bigint/esnext.bigint, es2020.date, es2020.promise, es2020.sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2020.number, es2021.promise/esnext.promise, es2021.string, es2021.weakref/esnext.weakref, es2021.intl, es2022.array/esnext.array, es2022.error, es2022.intl, es2022.object, es2022.sharedmemory, es2022.string/esnext.string, esnext.intl
9494
default: undefined
9595

9696
--allowJs

tests/baselines/reference/tsc/runWithoutArgs/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped-when-host-can't-provide-terminal-width.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ default: undefined
9090

9191
--lib
9292
Specify a set of bundled library declaration files that describe the target runtime environment.
93-
one or more: es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, esnext, dom, dom.iterable, webworker, webworker.importscripts, webworker.iterable, scripthost, es2015.core, es2015.collection, es2015.generator, es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.array.include, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncgenerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array, es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2020.bigint/esnext.bigint, es2020.date, es2020.promise, es2020.sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2020.number, es2021.promise/esnext.promise, es2021.string, es2021.weakref/esnext.weakref, es2021.intl, es2022.array/esnext.array, es2022.error, es2022.intl, es2022.object, es2022.string/esnext.string, esnext.intl
93+
one or more: es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, esnext, dom, dom.iterable, webworker, webworker.importscripts, webworker.iterable, scripthost, es2015.core, es2015.collection, es2015.generator, es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.array.include, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncgenerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array, es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2020.bigint/esnext.bigint, es2020.date, es2020.promise, es2020.sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2020.number, es2021.promise/esnext.promise, es2021.string, es2021.weakref/esnext.weakref, es2021.intl, es2022.array/esnext.array, es2022.error, es2022.intl, es2022.object, es2022.sharedmemory, es2022.string/esnext.string, esnext.intl
9494
default: undefined
9595

9696
--allowJs

tests/baselines/reference/tsc/runWithoutArgs/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ default: undefined
9090

9191
--lib
9292
Specify a set of bundled library declaration files that describe the target runtime environment.
93-
one or more: es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, esnext, dom, dom.iterable, webworker, webworker.importscripts, webworker.iterable, scripthost, es2015.core, es2015.collection, es2015.generator, es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.array.include, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncgenerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array, es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2020.bigint/esnext.bigint, es2020.date, es2020.promise, es2020.sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2020.number, es2021.promise/esnext.promise, es2021.string, es2021.weakref/esnext.weakref, es2021.intl, es2022.array/esnext.array, es2022.error, es2022.intl, es2022.object, es2022.string/esnext.string, esnext.intl
93+
one or more: es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, esnext, dom, dom.iterable, webworker, webworker.importscripts, webworker.iterable, scripthost, es2015.core, es2015.collection, es2015.generator, es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.array.include, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncgenerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array, es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2020.bigint/esnext.bigint, es2020.date, es2020.promise, es2020.sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2020.number, es2021.promise/esnext.promise, es2021.string, es2021.weakref/esnext.weakref, es2021.intl, es2022.array/esnext.array, es2022.error, es2022.intl, es2022.object, es2022.sharedmemory, es2022.string/esnext.string, esnext.intl
9494
default: undefined
9595

9696
--allowJs
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// @target: esnext
2+
// @lib: es2022
3+
// @noemit: true
4+
// @strict: true
5+
6+
const sab = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 1024);
7+
const int32 = new Int32Array(sab);
8+
const waitValue = Atomics.wait(int32, 0, 0);
9+
const { async, value } = Atomics.waitAsync(int32, 0, BigInt(0));
10+
11+
const main = async () => {
12+
if (async) {
13+
await value;
14+
}
15+
}
16+
main();

0 commit comments

Comments
 (0)