Skip to content

Commit 493e8bf

Browse files
authored
[tsgen] Fix exporting HEAP variables as any in TSD (#26462)
Exporting HEAP elements like HEAP8 inside TypeScript definitions were previously generating as `any` types because TSD emitter fallbacks assumed unknown signatures for runtime methods without docs. To solve this, move high-level HEAP array definitions into libcore.js with explicit JSDoc type tags, treating them as library symbols. This allows the TSD generation to gather correct typed signatures. Also includes casts for Closure Compiler warnings encountered. Fixes #24941
1 parent fb18236 commit 493e8bf

38 files changed

+183
-140
lines changed

src/lib/libbootstrap.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,19 @@ assert(Object.keys(LibraryManager.library).length === 0);
1515
addToLibrary({
1616
$callRuntimeCallbacks: () => {},
1717

18+
$HEAP8: undefined,
19+
$HEAPU8: undefined,
20+
$HEAP16: undefined,
21+
$HEAPU16: undefined,
22+
$HEAP32: undefined,
23+
$HEAPU32: undefined,
24+
$HEAPF32: undefined,
25+
$HEAPF64: undefined,
26+
#if WASM_BIGINT
27+
$HEAP64: undefined,
28+
$HEAPU64: undefined,
29+
#endif
30+
1831
$wasmMemory: 'memory',
1932

2033
$ExitStatus: class {

src/lib/libcore.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,31 @@
2121
// new function with an '_', it will not be found.
2222

2323
addToLibrary({
24+
// HEAP definitions are here to help with TypeScript type generation.
25+
$HEAP8__docs: '/** @type {!Int8Array} */',
26+
$HEAP8: undefined,
27+
$HEAPU8__docs: '/** @type {!Uint8Array} */',
28+
$HEAPU8: undefined,
29+
$HEAP16__docs: '/** @type {!Int16Array} */',
30+
$HEAP16: undefined,
31+
$HEAPU16__docs: '/** @type {!Uint16Array} */',
32+
$HEAPU16: undefined,
33+
$HEAP32__docs: '/** @type {!Int32Array} */',
34+
$HEAP32: undefined,
35+
$HEAPU32__docs: '/** @type {!Uint32Array} */',
36+
$HEAPU32: undefined,
37+
$HEAPF32__docs: '/** @type {!Float32Array} */',
38+
$HEAPF32: undefined,
39+
$HEAPF64__docs: '/** @type {!Float64Array} */',
40+
$HEAPF64: undefined,
41+
#if WASM_BIGINT
42+
// BigInt64Array type is not correctly defined in closure
43+
$HEAP64__docs: '/** not-@type {!BigInt64Array} */',
44+
$HEAP64: undefined,
45+
$HEAPU64__docs: '/** not-@type {!BigUint64Array} */',
46+
$HEAPU64: undefined,
47+
#endif
48+
2449
// JS aliases for native stack manipulation functions and tempret handling
2550
$stackSave__deps: ['emscripten_stack_get_current'],
2651
$stackSave: () => _emscripten_stack_get_current(),

src/modules.mjs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -495,16 +495,6 @@ function exportRuntimeSymbols() {
495495
'callMain',
496496
'abort',
497497
'wasmExports',
498-
'HEAPF32',
499-
'HEAPF64',
500-
'HEAP8',
501-
'HEAPU8',
502-
'HEAP16',
503-
'HEAPU16',
504-
'HEAP32',
505-
'HEAPU32',
506-
'HEAP64',
507-
'HEAPU64',
508498
];
509499

510500
if (SUPPORT_BIG_ENDIAN) {

src/runtime_common.js

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -78,33 +78,6 @@ if (ENVIRONMENT_IS_NODE && {{{ ENVIRONMENT_IS_WORKER_THREAD() }}}) {
7878
#endif
7979

8080
// Memory management
81-
var
82-
/** @type {!Int8Array} */
83-
HEAP8,
84-
/** @type {!Uint8Array} */
85-
HEAPU8,
86-
/** @type {!Int16Array} */
87-
HEAP16,
88-
/** @type {!Uint16Array} */
89-
HEAPU16,
90-
/** @type {!Int32Array} */
91-
HEAP32,
92-
/** @type {!Uint32Array} */
93-
HEAPU32,
94-
/** @type {!Float32Array} */
95-
HEAPF32,
96-
/** @type {!Float64Array} */
97-
HEAPF64;
98-
99-
#if WASM_BIGINT
100-
// BigInt64Array type is not correctly defined in closure
101-
var
102-
/** not-@type {!BigInt64Array} */
103-
HEAP64,
104-
/* BigUint64Array type is not correctly defined in closure
105-
/** not-@type {!BigUint64Array} */
106-
HEAPU64;
107-
#endif
10881

10982
#if SUPPORT_BIG_ENDIAN
11083
/** @type {!DataView} */

test/codesize/audio_worklet_wasm.expected.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var m = globalThis.Module || "undefined" != typeof Module ? Module : {}, p = !!globalThis.AudioWorkletGlobalScope, t = "em-ww" == globalThis.name || p, u, z, I, J, G, E, w, X, F, D, C, Y, A, Z;
1+
var m = globalThis.Module || "undefined" != typeof Module ? Module : {}, p = !!globalThis.AudioWorkletGlobalScope, t = "em-ww" == globalThis.name || p, u, z, J, E, G, I, w, X, F, D, C, Y, A, Z;
22

33
function v(a) {
44
u = a;

test/codesize/test_codesize_cxx_ctors1.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.out.js": 19214,
3-
"a.out.js.gz": 7982,
3+
"a.out.js.gz": 7981,
44
"a.out.nodebug.wasm": 132866,
55
"a.out.nodebug.wasm.gz": 49893,
66
"total": 152080,
7-
"total_gz": 57875,
7+
"total_gz": 57874,
88
"sent": [
99
"__cxa_throw",
1010
"_abort_js",

test/codesize/test_codesize_cxx_ctors2.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.out.js": 19191,
3-
"a.out.js.gz": 7968,
3+
"a.out.js.gz": 7966,
44
"a.out.nodebug.wasm": 132286,
55
"a.out.nodebug.wasm.gz": 49547,
66
"total": 151477,
7-
"total_gz": 57515,
7+
"total_gz": 57513,
88
"sent": [
99
"__cxa_throw",
1010
"_abort_js",

test/codesize/test_codesize_cxx_except.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.out.js": 22875,
3-
"a.out.js.gz": 8959,
3+
"a.out.js.gz": 8956,
44
"a.out.nodebug.wasm": 172744,
55
"a.out.nodebug.wasm.gz": 57379,
66
"total": 195619,
7-
"total_gz": 66338,
7+
"total_gz": 66335,
88
"sent": [
99
"__cxa_begin_catch",
1010
"__cxa_end_catch",

test/codesize/test_codesize_cxx_except_wasm.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.out.js": 19025,
3-
"a.out.js.gz": 7906,
3+
"a.out.js.gz": 7908,
44
"a.out.nodebug.wasm": 148139,
55
"a.out.nodebug.wasm.gz": 55264,
66
"total": 167164,
7-
"total_gz": 63170,
7+
"total_gz": 63172,
88
"sent": [
99
"_abort_js",
1010
"_tzset_js",

test/codesize/test_codesize_cxx_except_wasm_legacy.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"a.out.js": 19099,
3-
"a.out.js.gz": 7926,
3+
"a.out.js.gz": 7930,
44
"a.out.nodebug.wasm": 145945,
55
"a.out.nodebug.wasm.gz": 54892,
66
"total": 165044,
7-
"total_gz": 62818,
7+
"total_gz": 62822,
88
"sent": [
99
"_abort_js",
1010
"_tzset_js",

0 commit comments

Comments
 (0)