warpo 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/debug_server/debugPath.d.ts +1 -0
  2. package/dist/debug_server/debugPath.js +10 -0
  3. package/dist/debug_server/debugPath.js.map +1 -0
  4. package/dist/debug_server/debugSession.d.ts +60 -2
  5. package/dist/debug_server/debugSession.js +883 -40
  6. package/dist/debug_server/debugSession.js.map +1 -1
  7. package/dist/debug_server/debugger.d.ts +30 -2
  8. package/dist/debug_server/debuggerWasmModule.d.ts +58 -3
  9. package/dist/debug_server/debuggerWasmModule.js +222 -14
  10. package/dist/debug_server/debuggerWasmModule.js.map +1 -1
  11. package/dist/debug_server/nodeDebugger.d.ts +37 -3
  12. package/dist/debug_server/nodeDebugger.js +590 -59
  13. package/dist/debug_server/nodeDebugger.js.map +1 -1
  14. package/dist/debug_server/tests/debugSession.test.js +1015 -26
  15. package/dist/debug_server/tests/debugSession.test.js.map +1 -1
  16. package/dist/debug_server/tests/launcher.js +1 -0
  17. package/dist/debug_server/tests/launcher.js.map +1 -1
  18. package/dist/debug_server/tests/testModule/debugger_array.d.ts +1 -0
  19. package/dist/debug_server/tests/testModule/debugger_array.js +9 -0
  20. package/dist/debug_server/tests/testModule/debugger_array.js.map +1 -0
  21. package/dist/debug_server/tests/testModule/debugger_array_buffer.d.ts +1 -0
  22. package/dist/debug_server/tests/testModule/debugger_array_buffer.js +12 -0
  23. package/dist/debug_server/tests/testModule/debugger_array_buffer.js.map +1 -0
  24. package/dist/debug_server/tests/testModule/debugger_basic.d.ts +1 -0
  25. package/dist/debug_server/tests/testModule/debugger_basic.js +9 -1
  26. package/dist/debug_server/tests/testModule/debugger_basic.js.map +1 -1
  27. package/dist/debug_server/tests/testModule/debugger_callee.d.ts +10 -0
  28. package/dist/debug_server/tests/testModule/debugger_callee.js +106 -0
  29. package/dist/debug_server/tests/testModule/debugger_callee.js.map +1 -0
  30. package/dist/debug_server/tests/testModule/debugger_caller.d.ts +1 -0
  31. package/dist/debug_server/tests/testModule/debugger_caller.js +7 -0
  32. package/dist/debug_server/tests/testModule/debugger_caller.js.map +1 -0
  33. package/dist/debug_server/tests/testModule/debugger_class.d.ts +1 -0
  34. package/dist/debug_server/tests/testModule/debugger_class.js +39 -0
  35. package/dist/debug_server/tests/testModule/debugger_class.js.map +1 -0
  36. package/dist/debug_server/tests/testModule/debugger_class_array.d.ts +1 -0
  37. package/dist/debug_server/tests/testModule/debugger_class_array.js +15 -0
  38. package/dist/debug_server/tests/testModule/debugger_class_array.js.map +1 -0
  39. package/dist/debug_server/tests/testModule/debugger_closure.d.ts +1 -0
  40. package/dist/debug_server/tests/testModule/debugger_closure.js +48 -0
  41. package/dist/debug_server/tests/testModule/debugger_closure.js.map +1 -0
  42. package/dist/debug_server/tests/testModule/debugger_closure_if.d.ts +1 -0
  43. package/dist/debug_server/tests/testModule/debugger_closure_if.js +16 -0
  44. package/dist/debug_server/tests/testModule/debugger_closure_if.js.map +1 -0
  45. package/dist/debug_server/tests/testModule/debugger_global.d.ts +1 -0
  46. package/dist/debug_server/tests/testModule/debugger_global.js +11 -0
  47. package/dist/debug_server/tests/testModule/debugger_global.js.map +1 -0
  48. package/dist/debug_server/tests/testModule/debugger_map.d.ts +1 -0
  49. package/dist/debug_server/tests/testModule/debugger_map.js +22 -0
  50. package/dist/debug_server/tests/testModule/debugger_map.js.map +1 -0
  51. package/dist/debug_server/tests/testModule/debugger_scopes.d.ts +1 -0
  52. package/dist/debug_server/tests/testModule/debugger_scopes.js +22 -0
  53. package/dist/debug_server/tests/testModule/debugger_scopes.js.map +1 -0
  54. package/dist/debug_server/tests/testModule/debugger_set.d.ts +1 -0
  55. package/dist/debug_server/tests/testModule/debugger_set.js +23 -0
  56. package/dist/debug_server/tests/testModule/debugger_set.js.map +1 -0
  57. package/dist/debug_server/tests/testModule/debugger_static_array.d.ts +1 -0
  58. package/dist/debug_server/tests/testModule/debugger_static_array.js +21 -0
  59. package/dist/debug_server/tests/testModule/debugger_static_array.js.map +1 -0
  60. package/dist/debug_server/tests/testModule/debugger_string.d.ts +1 -0
  61. package/dist/debug_server/tests/testModule/debugger_string.js +16 -0
  62. package/dist/debug_server/tests/testModule/debugger_string.js.map +1 -0
  63. package/dist/debug_server/tests/testModule/debugger_trap.d.ts +1 -0
  64. package/dist/debug_server/tests/testModule/debugger_trap.js +9 -0
  65. package/dist/debug_server/tests/testModule/debugger_trap.js.map +1 -0
  66. package/dist/debug_server/tests/testModule/debugger_tuple.d.ts +1 -0
  67. package/dist/debug_server/tests/testModule/debugger_tuple.js +15 -0
  68. package/dist/debug_server/tests/testModule/debugger_tuple.js.map +1 -0
  69. package/dist/debug_server/tests/testModule/import_failure.d.ts +1 -0
  70. package/dist/debug_server/tests/testModule/import_failure.js +4 -0
  71. package/dist/debug_server/tests/testModule/import_failure.js.map +1 -0
  72. package/dist/debug_server/tests/testModule/unittest_debug.case.js +10 -0
  73. package/dist/debug_server/tests/testModule/unittest_debug.case.js.map +1 -0
  74. package/dist/debug_server/tests/testModule/unittest_debug.d.ts +1 -0
  75. package/dist/debug_server/tests/testModule/unittest_debug.js +6 -0
  76. package/dist/debug_server/tests/testModule/unittest_debug.js.map +1 -0
  77. package/dist/debug_server/wasmEntry.js +32 -12
  78. package/dist/debug_server/wasmEntry.js.map +1 -1
  79. package/dist/dwarf/classDebugInfo.d.ts +45 -0
  80. package/dist/dwarf/classDebugInfo.js +292 -0
  81. package/dist/dwarf/classDebugInfo.js.map +1 -0
  82. package/dist/{heap_analyzer/src → dwarf}/dwarfParser.js +2 -0
  83. package/dist/dwarf/dwarfParser.js.map +1 -0
  84. package/dist/dwarf/functionDebugInfo.d.ts +63 -0
  85. package/dist/dwarf/functionDebugInfo.js +377 -0
  86. package/dist/dwarf/functionDebugInfo.js.map +1 -0
  87. package/dist/dwarf/tests/fixtures/functionDebugInfo.d.ts +3 -0
  88. package/dist/dwarf/tests/fixtures/functionDebugInfo.js +24 -0
  89. package/dist/dwarf/tests/fixtures/functionDebugInfo.js.map +1 -0
  90. package/dist/dwarf/tests/functionDebugInfo.test.d.ts +1 -0
  91. package/dist/dwarf/tests/functionDebugInfo.test.js +102 -0
  92. package/dist/dwarf/tests/functionDebugInfo.test.js.map +1 -0
  93. package/dist/heap_analyzer/cli.d.ts +1 -0
  94. package/dist/heap_analyzer/cli.js +172 -0
  95. package/dist/heap_analyzer/cli.js.map +1 -0
  96. package/dist/heap_analyzer/src/constants.js +2 -1
  97. package/dist/heap_analyzer/src/constants.js.map +1 -1
  98. package/dist/heap_analyzer/src/debugInfoResolver.d.ts +4 -15
  99. package/dist/heap_analyzer/src/debugInfoResolver.js +20 -231
  100. package/dist/heap_analyzer/src/debugInfoResolver.js.map +1 -1
  101. package/dist/heap_analyzer/src/dominator.js +4 -1
  102. package/dist/heap_analyzer/src/dominator.js.map +1 -1
  103. package/dist/heap_analyzer/src/referenceScanner.js +7 -7
  104. package/dist/heap_analyzer/src/referenceScanner.js.map +1 -1
  105. package/dist/heap_analyzer/src/retainedSize.js +2 -0
  106. package/dist/heap_analyzer/src/retainedSize.js.map +1 -1
  107. package/dist/heap_analyzer/src/snapshot.js +1 -1
  108. package/dist/heap_analyzer/src/snapshot.js.map +1 -1
  109. package/dist/heap_analyzer/src/{tlsf.js → tlsfBlockWalker.js} +4 -3
  110. package/dist/heap_analyzer/src/tlsfBlockWalker.js.map +1 -0
  111. package/dist/heap_analyzer/src/types.d.ts +3 -32
  112. package/dist/heap_analyzer/src/types.js +1 -8
  113. package/dist/heap_analyzer/src/types.js.map +1 -1
  114. package/dist/heap_analyzer/tests/debugInfoResolver.test.js +1 -1
  115. package/dist/heap_analyzer/tests/debugInfoResolver.test.js.map +1 -1
  116. package/dist/heap_analyzer/tests/dwarfParser.test.js +57 -40
  117. package/dist/heap_analyzer/tests/dwarfParser.test.js.map +1 -1
  118. package/dist/heap_analyzer/tests/roots.test.js +1 -1
  119. package/dist/heap_analyzer/tests/roots.test.js.map +1 -1
  120. package/dist/heap_analyzer/tests/snapshot.test.js +4 -4
  121. package/dist/heap_analyzer/tests/testHelper.js +4 -7
  122. package/dist/heap_analyzer/tests/testHelper.js.map +1 -1
  123. package/dist/heap_analyzer/tests/tlsfBlockWalker.test.d.ts +1 -0
  124. package/dist/heap_analyzer/tests/{tlsf.test.js → tlsfBlockWalker.test.js} +2 -2
  125. package/dist/heap_analyzer/tests/tlsfBlockWalker.test.js.map +1 -0
  126. package/dist/heap_analyzer/tests/wasmExecutor.d.ts +2 -2
  127. package/dist/heap_analyzer/tests/wasmExecutor.js +5 -5
  128. package/dist/heap_analyzer/tests/wasmExecutor.js.map +1 -1
  129. package/dist/runtime/objectLayout.d.ts +10 -0
  130. package/dist/runtime/objectLayout.js +13 -0
  131. package/dist/runtime/objectLayout.js.map +1 -0
  132. package/dist/scripts/lib.d.ts +1 -0
  133. package/dist/scripts/lib.js +86 -22
  134. package/dist/scripts/lib.js.map +1 -1
  135. package/dist/test_runner/cli.d.ts +0 -1
  136. package/dist/test_runner/cli.js +37 -19
  137. package/dist/test_runner/cli.js.map +1 -1
  138. package/dist/test_runner/config.d.ts +3 -0
  139. package/dist/test_runner/config.js +8 -0
  140. package/dist/test_runner/config.js.map +1 -0
  141. package/dist/test_runner/core/analyze.js +12 -3
  142. package/dist/test_runner/core/analyze.js.map +1 -1
  143. package/dist/test_runner/core/compile.js +1 -4
  144. package/dist/test_runner/core/compile.js.map +1 -1
  145. package/dist/test_runner/core/execute.js +20 -3
  146. package/dist/test_runner/core/execute.js.map +1 -1
  147. package/dist/test_runner/executionResult.js +10 -8
  148. package/dist/test_runner/executionResult.js.map +1 -1
  149. package/dist/test_runner/generator/table-generator/index.js +4 -2
  150. package/dist/test_runner/generator/table-generator/index.js.map +1 -1
  151. package/dist/test_runner/parser/index.js +6 -5
  152. package/dist/test_runner/parser/index.js.map +1 -1
  153. package/dist/test_runner/parser/singleFileAnalysis.js +7 -4
  154. package/dist/test_runner/parser/singleFileAnalysis.js.map +1 -1
  155. package/dist/test_runner/parser/singleFunctionAnalysis.js +1 -1
  156. package/dist/test_runner/parser/singleFunctionAnalysis.js.map +1 -1
  157. package/dist/test_runner/utils/errorTraceHandler.js +2 -1
  158. package/dist/test_runner/utils/errorTraceHandler.js.map +1 -1
  159. package/dist/test_runner/utils/index.js +9 -2
  160. package/dist/test_runner/utils/index.js.map +1 -1
  161. package/dist/test_runner/utils/interface.js +2 -1
  162. package/dist/test_runner/utils/interface.js.map +1 -1
  163. package/dist/test_runner/utils/pathResolver.js +9 -7
  164. package/dist/test_runner/utils/pathResolver.js.map +1 -1
  165. package/dist/test_runner/utils/wasm.js +16 -8
  166. package/dist/test_runner/utils/wasm.js.map +1 -1
  167. package/dist/trace_visualizer.d.ts +2 -0
  168. package/dist/trace_visualizer.js +18 -0
  169. package/dist/trace_visualizer.js.map +1 -0
  170. package/dist/warpo.js +2 -1
  171. package/dist/warpo.js.map +1 -1
  172. package/package.json +10 -5
  173. package/dist/heap_analyzer/src/dwarfParser.js.map +0 -1
  174. package/dist/heap_analyzer/src/tlsf.js.map +0 -1
  175. package/dist/heap_analyzer/tests/tlsf.test.js.map +0 -1
  176. /package/dist/{heap_analyzer/tests/tlsf.test.d.ts → debug_server/tests/testModule/unittest_debug.case.d.ts} +0 -0
  177. /package/dist/{heap_analyzer/src → dwarf}/dwarfParser.d.ts +0 -0
  178. /package/dist/heap_analyzer/src/{tlsf.d.ts → tlsfBlockWalker.d.ts} +0 -0
@@ -0,0 +1,172 @@
1
+ // Copyright (C) 2026 wasm-ecosystem
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { readFileSync } from "node:fs";
4
+ import { argv as processArgv, exit as processExit } from "node:process";
5
+ import { fileURLToPath } from "node:url";
6
+ import { Command } from "commander";
7
+ import { analyzeDump, compareDumps } from "./src/index.js";
8
+ const CONSTRUCTOR_SORTS = new Set(["retained", "shallow", "count"]);
9
+ const COMPARISON_SORTS = new Set(["delta", "alloc", "freed", "count"]);
10
+ function readVersion() {
11
+ const packageJson = readFileSync(new URL("../../package.json", import.meta.url), "utf8");
12
+ const parsed = JSON.parse(packageJson);
13
+ const version = parsed.version;
14
+ if (typeof version !== "string") {
15
+ throw new TypeError("Invalid package.json: missing string version");
16
+ }
17
+ return version;
18
+ }
19
+ function parsePositiveInteger(value, optionName) {
20
+ const parsed = Number.parseInt(value, 10);
21
+ if (!Number.isInteger(parsed) || parsed < 1) {
22
+ throw new Error(`${optionName} must be a positive integer`);
23
+ }
24
+ return parsed;
25
+ }
26
+ function parseSortField(value) {
27
+ return value;
28
+ }
29
+ function formatErrorMessage(error) {
30
+ if (error instanceof Error) {
31
+ return error.message;
32
+ }
33
+ if (typeof error === "string") {
34
+ return error;
35
+ }
36
+ return JSON.stringify(error);
37
+ }
38
+ function readArrayBuffer(filePath, label) {
39
+ try {
40
+ const buffer = readFileSync(filePath);
41
+ return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
42
+ }
43
+ catch (error) {
44
+ const message = error instanceof Error ? error.message : String(error);
45
+ throw new Error(`Error reading ${label}: ${message}`);
46
+ }
47
+ }
48
+ function readUint8Array(filePath, label) {
49
+ try {
50
+ return new Uint8Array(readFileSync(filePath));
51
+ }
52
+ catch (error) {
53
+ const message = error instanceof Error ? error.message : String(error);
54
+ throw new Error(`Error reading ${label}: ${message}`);
55
+ }
56
+ }
57
+ function sortConstructors(constructors, sortField) {
58
+ if (!CONSTRUCTOR_SORTS.has(sortField)) {
59
+ throw new Error(`Invalid constructor sort field: ${sortField}. Must be retained, shallow, or count.`);
60
+ }
61
+ switch (sortField) {
62
+ case "retained": {
63
+ return constructors;
64
+ }
65
+ case "shallow": {
66
+ return constructors.toSorted((lhs, rhs) => rhs.totalShallowSize - lhs.totalShallowSize);
67
+ }
68
+ case "count": {
69
+ return constructors.toSorted((lhs, rhs) => rhs.count - lhs.count);
70
+ }
71
+ default: {
72
+ throw new Error(`Invalid constructor sort field: ${sortField}. Must be retained, shallow, or count.`);
73
+ }
74
+ }
75
+ }
76
+ function sortConstructorComparisons(constructors, sortField) {
77
+ if (!COMPARISON_SORTS.has(sortField)) {
78
+ throw new Error(`Invalid comparison sort field: ${sortField}. Must be delta, alloc, freed, or count.`);
79
+ }
80
+ switch (sortField) {
81
+ case "delta": {
82
+ return constructors;
83
+ }
84
+ case "alloc": {
85
+ return constructors.toSorted((lhs, rhs) => rhs.allocatedSize - lhs.allocatedSize ||
86
+ rhs.sizeDelta - lhs.sizeDelta ||
87
+ rhs.countDelta - lhs.countDelta ||
88
+ lhs.className.localeCompare(rhs.className));
89
+ }
90
+ case "freed": {
91
+ return constructors.toSorted((lhs, rhs) => rhs.freedSize - lhs.freedSize || lhs.sizeDelta - rhs.sizeDelta || lhs.className.localeCompare(rhs.className));
92
+ }
93
+ case "count": {
94
+ return constructors.toSorted((lhs, rhs) => rhs.countDelta - lhs.countDelta || rhs.sizeDelta - lhs.sizeDelta || lhs.className.localeCompare(rhs.className));
95
+ }
96
+ default: {
97
+ throw new Error(`Invalid comparison sort field: ${sortField}. Must be delta, alloc, freed, or count.`);
98
+ }
99
+ }
100
+ }
101
+ function analyzeDumpWithCli(dumpFile, options) {
102
+ const dumpBuffer = readArrayBuffer(dumpFile, "dump file");
103
+ const wasmBytes = readUint8Array(options.wasm, "wasm file");
104
+ const snapshot = analyzeDump(dumpBuffer, wasmBytes);
105
+ const sortField = options.sort ?? "retained";
106
+ let constructors = sortConstructors(snapshot.constructors, sortField);
107
+ if (options.top !== undefined) {
108
+ constructors = constructors.slice(0, options.top);
109
+ }
110
+ console.log(JSON.stringify({
111
+ totalHeapSize: snapshot.totalHeapSize,
112
+ totalLiveSize: snapshot.totalLiveSize,
113
+ constructors,
114
+ }, null, 2));
115
+ }
116
+ function diffDumpsWithCli(beforeDumpFile, afterDumpFile, options) {
117
+ const beforeDumpBuffer = readArrayBuffer(beforeDumpFile, "baseline dump file");
118
+ const afterDumpBuffer = readArrayBuffer(afterDumpFile, "current dump file");
119
+ const wasmBytes = readUint8Array(options.wasm, "wasm file");
120
+ const comparison = compareDumps(beforeDumpBuffer, afterDumpBuffer, wasmBytes);
121
+ const sortField = options.sort ?? "delta";
122
+ let constructors = sortConstructorComparisons(comparison.constructors, sortField);
123
+ if (options.top !== undefined) {
124
+ constructors = constructors.slice(0, options.top);
125
+ }
126
+ console.log(JSON.stringify({
127
+ beforeTotalHeapSize: comparison.beforeTotalHeapSize,
128
+ afterTotalHeapSize: comparison.afterTotalHeapSize,
129
+ totalHeapSizeDelta: comparison.totalHeapSizeDelta,
130
+ beforeTotalLiveSize: comparison.beforeTotalLiveSize,
131
+ afterTotalLiveSize: comparison.afterTotalLiveSize,
132
+ totalLiveSizeDelta: comparison.totalLiveSizeDelta,
133
+ constructors,
134
+ }, null, 2));
135
+ }
136
+ export async function main(args = processArgv.slice(2)) {
137
+ const program = new Command();
138
+ program
139
+ .name("as-heap-analyzer")
140
+ .description("Analyze or diff AssemblyScript heap dumps and output heap analysis as JSON.")
141
+ .version(readVersion(), "-v, --version")
142
+ .showHelpAfterError();
143
+ program
144
+ .command("analyze <dump-file>")
145
+ .description("Show the constructor view for a single heap dump")
146
+ .requiredOption("--wasm <file>", "Path to the wasm binary with DWARF custom sections")
147
+ .option("--sort <field>", "Sort constructors by retained|shallow|count", parseSortField)
148
+ .option("--top <n>", "Show top N classes in constructor view", (value) => parsePositiveInteger(value, "--top"))
149
+ .action((dumpFile, options) => {
150
+ analyzeDumpWithCli(dumpFile, options);
151
+ });
152
+ program
153
+ .command("diff <before-dump-file> <after-dump-file>")
154
+ .description("Show the comparison view between two heap dumps")
155
+ .requiredOption("--wasm <file>", "Path to the wasm binary with DWARF custom sections")
156
+ .option("--sort <field>", "Sort comparison rows by delta|alloc|freed|count", parseSortField)
157
+ .option("--top <n>", "Show top N classes in comparison view", (value) => parsePositiveInteger(value, "--top"))
158
+ .action((beforeDumpFile, afterDumpFile, options) => {
159
+ diffDumpsWithCli(beforeDumpFile, afterDumpFile, options);
160
+ });
161
+ await program.parseAsync(args, { from: "user" });
162
+ }
163
+ if (fileURLToPath(import.meta.url) === processArgv[1]) {
164
+ try {
165
+ await main();
166
+ }
167
+ catch (error) {
168
+ console.error(formatErrorMessage(error));
169
+ processExit(1);
170
+ }
171
+ }
172
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../tools/heap_analyzer/cli.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  // Copyright (C) 2026 wasm-ecosystem
2
2
  // SPDX-License-Identifier: Apache-2.0
3
+ import { OBJECT_HEADER_SIZE } from "../../runtime/objectLayout.js";
3
4
  // TLSF Allocator Constants (32-bit)
4
5
  export const AL_BITS = 4;
5
6
  export const AL_SIZE = 1 << AL_BITS; // 16
6
7
  export const AL_MASK = AL_SIZE - 1; // 15
7
8
  export const BLOCK_OVERHEAD = 4; // mmInfo only
8
- export const OBJECT_OVERHEAD = 16; // nextWithColor + prev + rtId + rtSize
9
+ export const OBJECT_OVERHEAD = OBJECT_HEADER_SIZE; // nextWithColor + prev + rtId + rtSize
9
10
  export const TOTAL_OVERHEAD = BLOCK_OVERHEAD + OBJECT_OVERHEAD; // 20
10
11
  export const SL_BITS = 4;
11
12
  export const SB_BITS = 8;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../tools/heap_analyzer/src/constants.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,oCAAoC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK;AAC1C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK;AAEzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,cAAc;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,uCAAuC;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,GAAG,eAAe,CAAC,CAAC,KAAK;AAErE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAC1B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,2BAA2B;AAE1D,0BAA0B;AAC1B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;AACtB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAE3B,kCAAkC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,6EAA6E;AAC7E,uDAAuD;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAC,2BAA2B;AAElE,YAAY;AACZ,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,kBAAkB;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa;AACvF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../tools/heap_analyzer/src/constants.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sCAAsC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,oCAAoC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK;AAC1C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK;AAEzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,cAAc;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC,CAAC,uCAAuC;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,GAAG,eAAe,CAAC,CAAC,KAAK;AAErE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAC1B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,2BAA2B;AAE1D,0BAA0B;AAC1B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;AACtB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAE3B,kCAAkC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,6EAA6E;AAC7E,uDAAuD;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAC,2BAA2B;AAElE,YAAY;AACZ,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,kBAAkB;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa;AACvF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC"}
@@ -1,30 +1,19 @@
1
- import { type ClassLayout, type GlobalRoot } from "./types.js";
2
- export declare function attachBuiltinKind(classLayout: Pick<ClassLayout, "name" | "builtinKind">): void;
1
+ import { type ClassLayout } from "../../dwarf/classDebugInfo.js";
2
+ import type { GlobalRoot } from "./types.js";
3
+ export { attachBuiltinKind, resolveClassLayouts } from "../../dwarf/classDebugInfo.js";
3
4
  /**
4
5
  * Resolves class layouts and global-root metadata from WebAssembly debug
5
6
  * information and provides helper queries for reference scanning.
6
- *
7
- * Only classes with a runtime ID (`DW_AT_signature`) are included.
8
7
  */
9
8
  export declare class DebugInfoResolver {
10
- private readonly layoutMap;
9
+ private readonly classInfoResolver;
11
10
  private readonly globalVariableDebugInfos;
12
11
  private readonly wasmGlobalEntries;
13
12
  private constructor();
14
13
  static fromWasm(wasmBinary: Uint8Array | ArrayBuffer): DebugInfoResolver;
15
14
  getLayouts(): ClassLayout[];
16
- /** Returns class name, or "Class#<id>" if not found in debug info */
17
15
  getClassName(classId: number): string;
18
- /** Returns ClassDef or undefined */
19
16
  getClassDef(classId: number): ClassLayout | undefined;
20
17
  getGlobalRoots(mutableI32GlobalValues: number[]): GlobalRoot[];
21
- /** Maps i32 wasm global indices to runtime mutable values or immutable initial values. */
22
18
  private buildI32GlobalValueMap;
23
19
  }
24
- /**
25
- * Resolve all class layouts from DWARF debug information embedded in a
26
- * WebAssembly binary.
27
- *
28
- * Only classes with a runtime ID (`DW_AT_signature`) are included.
29
- */
30
- export declare function resolveClassLayouts(wasmBinary: Uint8Array | ArrayBuffer): ClassLayout[];
@@ -1,127 +1,42 @@
1
1
  // Copyright (C) 2026 wasm-ecosystem
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { DW_AT, DW_TAG, buildOffsetMap, findDIEsByTag, getAttr, parseWasmDebugInfo, } from "./dwarfParser.js";
4
- import { BuiltinContainerKind } from "./types.js";
5
- function shouldKeepClassLayout(classLayout) {
6
- return classLayout.rtid !== 0 || classLayout.name === "~lib/object/Object";
7
- }
8
- function computeFieldExtent(fields) {
9
- let size = 0;
10
- for (const field of fields) {
11
- size = Math.max(size, field.offset + field.size);
12
- }
13
- return size;
14
- }
15
- function resolveEntryClassName(className) {
16
- if (className.startsWith("~lib/set/Set<")) {
17
- return className.replace("~lib/set/Set<", "~lib/set/SetEntry<");
18
- }
19
- if (className.startsWith("~lib/map/Map<")) {
20
- return className.replace("~lib/map/Map<", "~lib/map/MapEntry<");
21
- }
22
- return undefined;
23
- }
24
- // Map/Set only expose their backing `entries: ArrayBuffer` as an object field.
25
- // The actual key/value references live inside unmanaged MapEntry/SetEntry
26
- // records stored in that buffer, so we cache each entry's stride plus the
27
- // offsets of reference-bearing fields for the reference scanner.
28
- function attachEntryLayouts(classes) {
29
- const classByName = new Map(classes.map((classLayout) => [classLayout.name, classLayout]));
30
- for (const classLayout of classes) {
31
- if (classLayout.builtinKind !== BuiltinContainerKind.MapOrSet) {
32
- continue;
33
- }
34
- const entryClassName = resolveEntryClassName(classLayout.name);
35
- if (!entryClassName) {
36
- continue;
37
- }
38
- const entryClass = classByName.get(entryClassName);
39
- if (!entryClass) {
40
- continue;
41
- }
42
- const referenceOffsets = entryClass.fields
43
- .filter((field) => field.name !== "taggedNext" && field.isReference)
44
- .map((field) => field.offset);
45
- const size = entryClass.byteSize || computeFieldExtent(entryClass.fields);
46
- if (size === 0) {
47
- continue;
48
- }
49
- const entryLayout = {
50
- size,
51
- referenceOffsets,
52
- };
53
- classLayout.entryLayout = entryLayout;
54
- }
55
- }
56
- export function attachBuiltinKind(classLayout) {
57
- const { name: className } = classLayout;
58
- if (className.startsWith("~lib/array/Array<")) {
59
- classLayout.builtinKind = BuiltinContainerKind.Array;
60
- }
61
- else if (className.startsWith("~lib/staticarray/StaticArray<")) {
62
- classLayout.builtinKind = BuiltinContainerKind.StaticArray;
63
- }
64
- else if (className.startsWith("~lib/map/Map<") || className.startsWith("~lib/set/Set<")) {
65
- classLayout.builtinKind = BuiltinContainerKind.MapOrSet;
66
- }
67
- else if (className.startsWith("~lib/function/Function<")) {
68
- classLayout.builtinKind = BuiltinContainerKind.Function;
69
- }
70
- else if (className === "~lib/tuple/SmallTuple") {
71
- classLayout.builtinKind = BuiltinContainerKind.SmallTuple;
72
- }
73
- }
3
+ import { DwarfClassInfoResolver } from "../../dwarf/classDebugInfo.js";
4
+ import { DW_AT, DW_TAG, buildOffsetMap, getAttr, parseWasmDebugInfo, } from "../../dwarf/dwarfParser.js";
5
+ export { attachBuiltinKind, resolveClassLayouts } from "../../dwarf/classDebugInfo.js";
74
6
  /**
75
7
  * Resolves class layouts and global-root metadata from WebAssembly debug
76
8
  * information and provides helper queries for reference scanning.
77
- *
78
- * Only classes with a runtime ID (`DW_AT_signature`) are included.
79
9
  */
80
10
  export class DebugInfoResolver {
81
- // Resolved runtime class layouts keyed by runtime type id.
82
- layoutMap;
83
- // Resolved global variable debug info.
11
+ classInfoResolver;
84
12
  globalVariableDebugInfos;
85
- // Raw wasm global entries in module order, including mutability, type, and initial value.
86
13
  wasmGlobalEntries;
87
- constructor(layouts, globalVariableDebugInfos, wasmGlobalEntries) {
88
- this.layoutMap = new Map(layouts.map((l) => [l.rtid, l]));
14
+ constructor(classInfoResolver, globalVariableDebugInfos, wasmGlobalEntries) {
15
+ this.classInfoResolver = classInfoResolver;
89
16
  this.globalVariableDebugInfos = globalVariableDebugInfos;
90
17
  this.wasmGlobalEntries = wasmGlobalEntries;
91
18
  }
92
19
  static fromWasm(wasmBinary) {
93
20
  const debugInfo = parseWasmDebugInfo(wasmBinary);
94
- const classes = [];
95
21
  const globalVariableDebugInfos = [];
96
22
  for (const unit of debugInfo.compilationUnits) {
97
- const resolver = new CompilationUnitResolver(unit.rootDIE);
98
- for (const layout of resolver.resolve(unit.rootDIE)) {
99
- classes.push(layout);
100
- }
23
+ const resolver = new CompilationUnitGlobalResolver(unit.rootDIE);
101
24
  for (const globalVariableDebugInfo of resolver.resolveGlobalVariableDebugInfos(unit.rootDIE)) {
102
25
  globalVariableDebugInfos.push(globalVariableDebugInfo);
103
26
  }
104
27
  }
105
- flattenInheritedFields(classes);
106
- // Derive Map/Set entry-buffer metadata before dropping rtid==0 helper
107
- // classes, because MapEntry/SetEntry may be filtered out afterwards but
108
- // their field layout is still needed to scan the `entries` ArrayBuffer.
109
- attachEntryLayouts(classes);
110
- const filteredClasses = classes.filter(shouldKeepClassLayout);
111
- const classNames = new Set(filteredClasses.map((layout) => layout.name));
112
- return new DebugInfoResolver(filteredClasses, globalVariableDebugInfos.filter((globalVariableDebugInfo) => classNames.has(globalVariableDebugInfo.typeName)), debugInfo.globals);
28
+ const classInfoResolver = DwarfClassInfoResolver.fromWasm(wasmBinary);
29
+ const classNames = new Set(classInfoResolver.getLayouts().map((layout) => layout.name));
30
+ return new DebugInfoResolver(classInfoResolver, globalVariableDebugInfos.filter((globalVariableDebugInfo) => classNames.has(globalVariableDebugInfo.typeName)), debugInfo.globals);
113
31
  }
114
32
  getLayouts() {
115
- return Array.from(this.layoutMap.values());
33
+ return this.classInfoResolver.getLayouts();
116
34
  }
117
- /** Returns class name, or "Class#<id>" if not found in debug info */
118
35
  getClassName(classId) {
119
- const layout = this.layoutMap.get(classId);
120
- return layout ? layout.name : `Class#${classId}`;
36
+ return this.classInfoResolver.getClassName(classId);
121
37
  }
122
- /** Returns ClassDef or undefined */
123
38
  getClassDef(classId) {
124
- return this.layoutMap.get(classId);
39
+ return this.classInfoResolver.getClassDef(classId);
125
40
  }
126
41
  getGlobalRoots(mutableI32GlobalValues) {
127
42
  const i32ValuesByGlobalIndex = this.buildI32GlobalValueMap(mutableI32GlobalValues);
@@ -140,7 +55,6 @@ export class DebugInfoResolver {
140
55
  }
141
56
  return globalRoots;
142
57
  }
143
- /** Maps i32 wasm global indices to runtime mutable values or immutable initial values. */
144
58
  buildI32GlobalValueMap(mutableI32GlobalValues) {
145
59
  const values = new Map();
146
60
  let mutableI32Slot = 0;
@@ -149,11 +63,12 @@ export class DebugInfoResolver {
149
63
  continue;
150
64
  }
151
65
  if (wasmGlobalEntry.mutable) {
152
- const value = mutableI32GlobalValues[mutableI32Slot];
153
- mutableI32Slot++;
154
- if (value === undefined) {
66
+ if (mutableI32Slot >= mutableI32GlobalValues.length) {
67
+ mutableI32Slot++;
155
68
  continue;
156
69
  }
70
+ const value = mutableI32GlobalValues[mutableI32Slot];
71
+ mutableI32Slot++;
157
72
  values.set(wasmGlobalEntry.index, value);
158
73
  continue;
159
74
  }
@@ -162,28 +77,10 @@ export class DebugInfoResolver {
162
77
  return values;
163
78
  }
164
79
  }
165
- class CompilationUnitResolver {
80
+ class CompilationUnitGlobalResolver {
166
81
  offsetMap;
167
- baseTypeNames;
168
82
  constructor(root) {
169
83
  this.offsetMap = buildOffsetMap(root);
170
- this.baseTypeNames = new Set();
171
- for (const die of findDIEsByTag(root, DW_TAG.base_type)) {
172
- const name = getAttr(die, DW_AT.name)?.value;
173
- if (name) {
174
- this.baseTypeNames.add(name);
175
- }
176
- }
177
- }
178
- resolve(root) {
179
- const layouts = [];
180
- for (const classDie of findDIEsByTag(root, DW_TAG.class_type)) {
181
- const layout = this.resolveClassLayout(classDie);
182
- if (layout) {
183
- layouts.push(layout);
184
- }
185
- }
186
- return layouts;
187
84
  }
188
85
  resolveGlobalVariableDebugInfos(root) {
189
86
  const globalVariableDebugInfos = [];
@@ -201,54 +98,9 @@ class CompilationUnitResolver {
201
98
  resolveTypeInfo(typeRef) {
202
99
  const typeDie = this.offsetMap.get(typeRef);
203
100
  if (!typeDie) {
204
- return { size: 4, isReference: false };
205
- }
206
- const name = getAttr(typeDie, DW_AT.name)?.value;
207
- const isReference = name === undefined ? false : !this.baseTypeNames.has(name);
208
- const byteSize = getAttr(typeDie, DW_AT.byte_size);
209
- const size = byteSize === undefined ? 4 : byteSize.value;
210
- return { name, size, isReference };
211
- }
212
- resolveField(memberDie) {
213
- const nameAttr = getAttr(memberDie, DW_AT.name);
214
- const offsetAttr = getAttr(memberDie, DW_AT.data_member_location);
215
- const typeAttr = getAttr(memberDie, DW_AT.type);
216
- if (!nameAttr || offsetAttr === undefined || !typeAttr) {
217
- return null;
218
- }
219
- const { size, isReference } = this.resolveTypeInfo(typeAttr.value);
220
- return {
221
- name: nameAttr.value,
222
- offset: offsetAttr.value,
223
- size,
224
- isReference,
225
- };
226
- }
227
- resolveTemplateType(classDie) {
228
- const templateParam = classDie.children.find((c) => c.tag === DW_TAG.template_type_parameter);
229
- if (!templateParam) {
230
- return undefined;
231
- }
232
- const typeAttr = getAttr(templateParam, DW_AT.type);
233
- if (!typeAttr) {
234
- return undefined;
235
- }
236
- return this.resolveTypeInfo(typeAttr.value);
237
- }
238
- resolveBaseName(classDie) {
239
- const inheritanceDie = classDie.children.find((c) => c.tag === DW_TAG.inheritance);
240
- if (!inheritanceDie) {
241
- return null;
242
- }
243
- const typeAttr = getAttr(inheritanceDie, DW_AT.type);
244
- if (!typeAttr) {
245
- return null;
101
+ return {};
246
102
  }
247
- const parentDie = this.offsetMap.get(typeAttr.value);
248
- if (!parentDie) {
249
- return null;
250
- }
251
- return getAttr(parentDie, DW_AT.name)?.value ?? null;
103
+ return { name: getAttr(typeDie, DW_AT.name)?.value };
252
104
  }
253
105
  resolveGlobalVariableDebugInfo(variableDie) {
254
106
  const nameAttr = getAttr(variableDie, DW_AT.name);
@@ -267,68 +119,5 @@ class CompilationUnitResolver {
267
119
  index: locationAttr.value,
268
120
  };
269
121
  }
270
- resolveClassLayout(classDie) {
271
- const nameAttr = getAttr(classDie, DW_AT.name);
272
- if (nameAttr === undefined) {
273
- return null;
274
- }
275
- const sigAttr = getAttr(classDie, DW_AT.signature);
276
- if (sigAttr === undefined) {
277
- return null;
278
- }
279
- const members = classDie.children.filter((c) => c.tag === DW_TAG.member);
280
- const fields = [];
281
- for (const member of members) {
282
- const field = this.resolveField(member);
283
- if (field) {
284
- fields.push(field);
285
- }
286
- }
287
- const templateType = this.resolveTemplateType(classDie);
288
- const className = nameAttr.value;
289
- const byteSizeAttr = getAttr(classDie, DW_AT.byte_size);
290
- const layout = {
291
- rtid: sigAttr.value,
292
- name: className,
293
- base: this.resolveBaseName(classDie),
294
- byteSize: byteSizeAttr === undefined ? computeFieldExtent(fields) : byteSizeAttr.value,
295
- fields,
296
- templateType: templateType?.name,
297
- templateTypeIsReference: templateType?.isReference,
298
- };
299
- attachBuiltinKind(layout);
300
- return layout;
301
- }
302
- }
303
- /**
304
- * Resolve all class layouts from DWARF debug information embedded in a
305
- * WebAssembly binary.
306
- *
307
- * Only classes with a runtime ID (`DW_AT_signature`) are included.
308
- */
309
- export function resolveClassLayouts(wasmBinary) {
310
- return DebugInfoResolver.fromWasm(wasmBinary).getLayouts();
311
- }
312
- function flattenInheritedFields(classes) {
313
- const byName = new Map(classes.map((c) => [c.name, c]));
314
- const flattened = new Set();
315
- function flatten(cls) {
316
- if (flattened.has(cls.name)) {
317
- return;
318
- }
319
- flattened.add(cls.name);
320
- if (!cls.base) {
321
- return;
322
- }
323
- const parent = byName.get(cls.base);
324
- if (!parent) {
325
- return;
326
- }
327
- flatten(parent);
328
- cls.fields = [...parent.fields, ...cls.fields];
329
- }
330
- for (const cls of classes) {
331
- flatten(cls);
332
- }
333
122
  }
334
123
  //# sourceMappingURL=debugInfoResolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"debugInfoResolver.js","sourceRoot":"","sources":["../../../tools/heap_analyzer/src/debugInfoResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debugInfoResolver.js","sourceRoot":"","sources":["../../../tools/heap_analyzer/src/debugInfoResolver.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  // Copyright (C) 2026 wasm-ecosystem
2
2
  // SPDX-License-Identifier: Apache-2.0
3
+ import assert from "node:assert/strict";
3
4
  /**
4
5
  * Dominator tree computation using the Lengauer-Tarjan algorithm.
5
6
  * Computes immediate dominators for all nodes reachable from GC roots.
@@ -43,7 +44,9 @@ export function buildDominatorTree(graph, rootNodes) {
43
44
  // Iterative DFS to avoid stack overflow on large graphs
44
45
  const dfsStack = [{ node: VIRTUAL_ROOT, parentNum: -1 }];
45
46
  while (dfsStack.length > 0) {
46
- const { node, parentNum } = dfsStack.pop();
47
+ const stackEntry = dfsStack.pop();
48
+ assert(stackEntry !== undefined);
49
+ const { node, parentNum } = stackEntry;
47
50
  if (nodeToNum.has(node)) {
48
51
  continue;
49
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dominator.js","sourceRoot":"","sources":["../../../tools/heap_analyzer/src/dominator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dominator.js","sourceRoot":"","sources":["../../../tools/heap_analyzer/src/dominator.ts"],"names":[],"mappings":"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"}