@scriptc/compiler 0.2.0 → 0.2.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 (284) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +84 -19
  2. package/dist/backend/cycle-analysis.js +1 -0
  3. package/dist/backend/cycle-analysis.js.map +1 -1
  4. package/dist/backend/llvm/classes.js +21 -5
  5. package/dist/backend/llvm/classes.js.map +1 -1
  6. package/dist/backend/llvm/dyn.d.ts +8 -0
  7. package/dist/backend/llvm/dyn.js +247 -108
  8. package/dist/backend/llvm/dyn.js.map +1 -1
  9. package/dist/backend/llvm/emitter.d.ts +6 -3
  10. package/dist/backend/llvm/emitter.js +99 -25
  11. package/dist/backend/llvm/emitter.js.map +1 -1
  12. package/dist/backend/llvm/emitter.test.js +9 -1
  13. package/dist/backend/llvm/emitter.test.js.map +1 -1
  14. package/dist/backend/llvm/expr-bytes.d.ts +1 -1
  15. package/dist/backend/llvm/expr-bytes.js +28 -17
  16. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  17. package/dist/backend/llvm/expr-containers.js +5 -0
  18. package/dist/backend/llvm/expr-containers.js.map +1 -1
  19. package/dist/backend/llvm/expr-control.js +1 -1
  20. package/dist/backend/llvm/expr-control.js.map +1 -1
  21. package/dist/backend/llvm/expr-dynamic.js +47 -13
  22. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  23. package/dist/backend/llvm/expr-primitives.js +11 -1
  24. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  25. package/dist/backend/llvm/expr-records.js +11 -3
  26. package/dist/backend/llvm/expr-records.js.map +1 -1
  27. package/dist/backend/llvm/expr-stream-bridges.js +187 -18
  28. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  29. package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
  30. package/dist/backend/llvm/expr-stream-callbacks.js +7 -57
  31. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  32. package/dist/backend/llvm/lib-dispatch.js +41 -3
  33. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  34. package/dist/backend/llvm/lib-filesystem.js +12 -9
  35. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  36. package/dist/backend/llvm/lib-process.js +23 -3
  37. package/dist/backend/llvm/lib-process.js.map +1 -1
  38. package/dist/backend/llvm/lib-shared.js +80 -3
  39. package/dist/backend/llvm/lib-shared.js.map +1 -1
  40. package/dist/backend/llvm/shapes.js +8 -2
  41. package/dist/backend/llvm/shapes.js.map +1 -1
  42. package/dist/backend/may-throw.js +4 -0
  43. package/dist/backend/may-throw.js.map +1 -1
  44. package/dist/backend/native-codegen.d.ts +1 -1
  45. package/dist/backend/native-codegen.js +4 -3
  46. package/dist/backend/native-codegen.js.map +1 -1
  47. package/dist/backend/native-codegen.test.js +11 -0
  48. package/dist/backend/native-codegen.test.js.map +1 -1
  49. package/dist/backend/native-toolchain.d.ts +3 -6
  50. package/dist/backend/native-toolchain.js +53 -23
  51. package/dist/backend/native-toolchain.js.map +1 -1
  52. package/dist/backend/native-toolchain.test.js +72 -0
  53. package/dist/backend/native-toolchain.test.js.map +1 -1
  54. package/dist/backend/runtime-abi.d.ts +2 -2
  55. package/dist/backend/runtime-abi.js +2 -2
  56. package/dist/backend/runtime-pack-native.js +4 -1
  57. package/dist/backend/runtime-pack-native.js.map +1 -1
  58. package/dist/backend/runtime-pack-targets.test.js +1 -1
  59. package/dist/backend/runtime-pack.test.js +1 -1
  60. package/dist/backend/target-diagnostics.d.ts +5 -0
  61. package/dist/backend/target-diagnostics.js +72 -1
  62. package/dist/backend/target-diagnostics.js.map +1 -1
  63. package/dist/backend/target-diagnostics.test.d.ts +1 -0
  64. package/dist/backend/target-diagnostics.test.js +68 -0
  65. package/dist/backend/target-diagnostics.test.js.map +1 -0
  66. package/dist/backend/targets.js +10 -6
  67. package/dist/backend/targets.js.map +1 -1
  68. package/dist/backend/targets.test.js +7 -0
  69. package/dist/backend/targets.test.js.map +1 -1
  70. package/dist/compat/fetch-profile.js +34 -4
  71. package/dist/compat/fetch-profile.js.map +1 -1
  72. package/dist/coverage/surface-manifest.js +5 -3
  73. package/dist/coverage/surface-manifest.js.map +1 -1
  74. package/dist/diagnostics/diagnostic.js +2 -7
  75. package/dist/diagnostics/diagnostic.js.map +1 -1
  76. package/dist/executable/executable-cache.d.ts +7 -3
  77. package/dist/executable/executable-cache.js +47 -11
  78. package/dist/executable/executable-cache.js.map +1 -1
  79. package/dist/executable/executable-cache.test.js +109 -2
  80. package/dist/executable/executable-cache.test.js.map +1 -1
  81. package/dist/executable/prepare.js +2 -1
  82. package/dist/executable/prepare.js.map +1 -1
  83. package/dist/frontend/builtin-modules.d.ts +1 -1
  84. package/dist/frontend/builtin-modules.js +1 -1
  85. package/dist/frontend/builtin-modules.js.map +1 -1
  86. package/dist/frontend/function-completion.d.ts +6 -0
  87. package/dist/frontend/function-completion.js +50 -0
  88. package/dist/frontend/function-completion.js.map +1 -0
  89. package/dist/frontend/lowering/abstract-equality.js +5 -1
  90. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  91. package/dist/frontend/lowering/checked-iterable-spread.d.ts +4 -0
  92. package/dist/frontend/lowering/checked-iterable-spread.js +30 -0
  93. package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -0
  94. package/dist/frontend/lowering/checked-promise-all.d.ts +5 -0
  95. package/dist/frontend/lowering/checked-promise-all.js +31 -0
  96. package/dist/frontend/lowering/checked-promise-all.js.map +1 -0
  97. package/dist/frontend/lowering/class-callbacks.d.ts +4 -4
  98. package/dist/frontend/lowering/class-callbacks.js +29 -17
  99. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  100. package/dist/frontend/lowering/class-construction.d.ts +14 -0
  101. package/dist/frontend/lowering/class-construction.js +185 -0
  102. package/dist/frontend/lowering/class-construction.js.map +1 -0
  103. package/dist/frontend/lowering/class-descriptors.d.ts +2 -1
  104. package/dist/frontend/lowering/class-descriptors.js +58 -10
  105. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  106. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +36 -1
  107. package/dist/frontend/lowering/class-dynamic-dispatch.js +965 -91
  108. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  109. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +66 -3
  110. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  111. package/dist/frontend/lowering/class-instance-constructor.d.ts +1 -1
  112. package/dist/frontend/lowering/class-instance-constructor.js +15 -42
  113. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  114. package/dist/frontend/lowering/class-method-values.d.ts +20 -1
  115. package/dist/frontend/lowering/class-method-values.js +120 -24
  116. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  117. package/dist/frontend/lowering/class-prototypes.d.ts +10 -3
  118. package/dist/frontend/lowering/class-prototypes.js +188 -21
  119. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  120. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  121. package/dist/frontend/lowering/class-runtime-statics.js +84 -0
  122. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -0
  123. package/dist/frontend/lowering/class-static-data.d.ts +1 -0
  124. package/dist/frontend/lowering/class-static-data.js +6 -4
  125. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  126. package/dist/frontend/lowering/containers/bytes.js +66 -17
  127. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  128. package/dist/frontend/lowering/containers/string-and-regexp.js +24 -47
  129. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  130. package/dist/frontend/lowering/deferred-module-initializers.d.ts +13 -0
  131. package/dist/frontend/lowering/deferred-module-initializers.js +410 -0
  132. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -0
  133. package/dist/frontend/lowering/deferred-module-initializers.test.d.ts +1 -0
  134. package/dist/frontend/lowering/deferred-module-initializers.test.js +92 -0
  135. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -0
  136. package/dist/frontend/lowering/error-methods.d.ts +4 -1
  137. package/dist/frontend/lowering/error-methods.js +100 -1
  138. package/dist/frontend/lowering/error-methods.js.map +1 -1
  139. package/dist/frontend/lowering/expressions/native-proxy.js +3 -1
  140. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  141. package/dist/frontend/lowering/expressions/nullish-assignment.js +19 -11
  142. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  143. package/dist/frontend/lowering/expressions/object-literals.js +68 -7
  144. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  145. package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -4
  146. package/dist/frontend/lowering/expressions/optional-chains.js +72 -20
  147. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  148. package/dist/frontend/lowering/function-context.d.ts +11 -3
  149. package/dist/frontend/lowering/function-context.js +11 -5
  150. package/dist/frontend/lowering/function-context.js.map +1 -1
  151. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -0
  152. package/dist/frontend/lowering/generator-dynamic-dispatch.js +39 -1
  153. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  154. package/dist/frontend/lowering/lib-boundary.d.ts +2 -0
  155. package/dist/frontend/lowering/lib-boundary.js +54 -1
  156. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  157. package/dist/frontend/lowering/lower-builtin-values.d.ts +7 -1
  158. package/dist/frontend/lowering/lower-builtin-values.js +113 -3
  159. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  160. package/dist/frontend/lowering/lower-builtins.d.ts +10 -14
  161. package/dist/frontend/lowering/lower-builtins.js +443 -88
  162. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  163. package/dist/frontend/lowering/lower-calls.d.ts +8 -5
  164. package/dist/frontend/lowering/lower-calls.js +717 -142
  165. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  166. package/dist/frontend/lowering/lower-classes.d.ts +18 -13
  167. package/dist/frontend/lowering/lower-classes.js +1076 -188
  168. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  169. package/dist/frontend/lowering/lower-containers.d.ts +9 -0
  170. package/dist/frontend/lowering/lower-containers.js +172 -51
  171. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  172. package/dist/frontend/lowering/lower-dgram.js +3 -2
  173. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  174. package/dist/frontend/lowering/lower-exprs.d.ts +12 -8
  175. package/dist/frontend/lowering/lower-exprs.js +802 -232
  176. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  177. package/dist/frontend/lowering/lower-generators.js +17 -2
  178. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  179. package/dist/frontend/lowering/lower-inspect.js +15 -1
  180. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  181. package/dist/frontend/lowering/lower-island.d.ts +2 -0
  182. package/dist/frontend/lowering/lower-island.js +36 -10
  183. package/dist/frontend/lowering/lower-island.js.map +1 -1
  184. package/dist/frontend/lowering/lower-island.test.d.ts +1 -0
  185. package/dist/frontend/lowering/lower-island.test.js +51 -0
  186. package/dist/frontend/lowering/lower-island.test.js.map +1 -0
  187. package/dist/frontend/lowering/lower-modules.d.ts +1 -3
  188. package/dist/frontend/lowering/lower-modules.js +380 -73
  189. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  190. package/dist/frontend/lowering/lower-modules.test.d.ts +1 -0
  191. package/dist/frontend/lowering/lower-modules.test.js +107 -0
  192. package/dist/frontend/lowering/lower-modules.test.js.map +1 -0
  193. package/dist/frontend/lowering/lower-stmts.d.ts +7 -3
  194. package/dist/frontend/lowering/lower-stmts.js +221 -47
  195. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  196. package/dist/frontend/lowering/lower-stmts.test.d.ts +1 -0
  197. package/dist/frontend/lowering/lower-stmts.test.js +77 -0
  198. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -0
  199. package/dist/frontend/lowering/lower-stream.js +3 -1
  200. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  201. package/dist/frontend/lowering/lower-url.d.ts +2 -1
  202. package/dist/frontend/lowering/lower-url.js +32 -9
  203. package/dist/frontend/lowering/lower-url.js.map +1 -1
  204. package/dist/frontend/lowering/lowerer.d.ts +53 -10
  205. package/dist/frontend/lowering/lowerer.js +390 -77
  206. package/dist/frontend/lowering/lowerer.js.map +1 -1
  207. package/dist/frontend/lowering/lowerer.test.js +187 -3
  208. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  209. package/dist/frontend/lowering/module-namespace-elements.d.ts +7 -0
  210. package/dist/frontend/lowering/module-namespace-elements.js +54 -0
  211. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -0
  212. package/dist/frontend/lowering/object-factory-new.d.ts +4 -3
  213. package/dist/frontend/lowering/object-factory-new.js +27 -14
  214. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  215. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  216. package/dist/frontend/lowering/surfaces.js +48 -19
  217. package/dist/frontend/lowering/surfaces.js.map +1 -1
  218. package/dist/frontend/lowering/text-decoder-encoding.d.ts +2 -0
  219. package/dist/frontend/lowering/text-decoder-encoding.js +8 -0
  220. package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
  221. package/dist/frontend/lowering/text-decoder-encoding.test.js +2 -1
  222. package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
  223. package/dist/frontend/lowering/unregistered-class-types.test.js +3 -3
  224. package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
  225. package/dist/frontend/npm-static-prune.js +116 -34
  226. package/dist/frontend/npm-static-prune.js.map +1 -1
  227. package/dist/frontend/npm-static-prune.test.js +8 -0
  228. package/dist/frontend/npm-static-prune.test.js.map +1 -1
  229. package/dist/frontend/program.d.ts +1 -1
  230. package/dist/frontend/program.js +57 -26
  231. package/dist/frontend/program.js.map +1 -1
  232. package/dist/frontend/program.test.js +18 -0
  233. package/dist/frontend/program.test.js.map +1 -1
  234. package/dist/frontend/ts7/ast.js +4 -3
  235. package/dist/frontend/ts7/ast.js.map +1 -1
  236. package/dist/frontend/ts7/semantic-json.js +5 -10
  237. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  238. package/dist/frontend/type-mapper.d.ts +9 -1
  239. package/dist/frontend/type-mapper.js +169 -23
  240. package/dist/frontend/type-mapper.js.map +1 -1
  241. package/dist/frontend/type-mapper.test.js +23 -0
  242. package/dist/frontend/type-mapper.test.js.map +1 -1
  243. package/dist/frontend/union-discriminants.d.ts +1 -1
  244. package/dist/frontend/union-discriminants.js +24 -9
  245. package/dist/frontend/union-discriminants.js.map +1 -1
  246. package/dist/index.js +16 -10
  247. package/dist/index.js.map +1 -1
  248. package/dist/ir/analysis.js +2 -0
  249. package/dist/ir/analysis.js.map +1 -1
  250. package/dist/ir/ir.d.ts +74 -41
  251. package/dist/ir/ir.js +167 -43
  252. package/dist/ir/ir.js.map +1 -1
  253. package/dist/ir/ir.test.js +35 -0
  254. package/dist/ir/ir.test.js.map +1 -1
  255. package/dist/ir/serialize.js +35 -3
  256. package/dist/ir/serialize.js.map +1 -1
  257. package/dist/ir/serialize.test.js +26 -1
  258. package/dist/ir/serialize.test.js.map +1 -1
  259. package/dist/ir/traverse.d.ts +0 -3
  260. package/dist/ir/traverse.js +33 -20
  261. package/dist/ir/traverse.js.map +1 -1
  262. package/dist/ir/validate.js +136 -16
  263. package/dist/ir/validate.js.map +1 -1
  264. package/dist/ir/validate.test.js +77 -1
  265. package/dist/ir/validate.test.js.map +1 -1
  266. package/dist/library/compiler-self-identity.js +1 -1
  267. package/dist/library/compiler-self-identity.test.js +2 -2
  268. package/dist/library/compiler-self-identity.test.js.map +1 -1
  269. package/dist/library/int-infer.d.ts +2 -2
  270. package/dist/library/int-infer.js +10 -7
  271. package/dist/library/int-infer.js.map +1 -1
  272. package/dist/library/int-infer.test.js +44 -0
  273. package/dist/library/int-infer.test.js.map +1 -1
  274. package/dist/library/prepare.js +2 -1
  275. package/dist/library/prepare.js.map +1 -1
  276. package/dist/native/sanitizer.js +3 -1
  277. package/dist/native/sanitizer.js.map +1 -1
  278. package/dist/native/toolchain.d.ts +1 -1
  279. package/dist/native/toolchain.js +26 -6
  280. package/dist/native/toolchain.js.map +1 -1
  281. package/dist/native/toolchain.test.js +53 -1
  282. package/dist/native/toolchain.test.js.map +1 -1
  283. package/package.json +20 -20
  284. package/surface-manifest.json +170 -93
@@ -5,6 +5,24 @@ import { expect, test, vi } from "vitest";
5
5
  import { checkPreflight, isNodeEsmFile, loadProgram, makeCycleAdmission } from "./program-node.js";
6
6
  import * as ts from "./ts7/ast.js";
7
7
  import { AstNode } from "./ts7/ast-node.js";
8
+ import { SemanticChecker } from "./ts7/semantic-checker.js";
9
+ test("program-root discovery does not fetch types for unrelated string calls", () => {
10
+ const dir = mkdtempSync(join(tmpdir(), "scriptc-root-queries-"));
11
+ const entry = join(dir, "main.ts");
12
+ writeFileSync(join(dir, "package.json"), '{"type":"module"}');
13
+ writeFileSync(entry, 'function label(text: string) { return text; } console.log(label("ready"));\n');
14
+ const types = vi.spyOn(SemanticChecker.prototype, "getTypeOfSymbol");
15
+ const load = loadProgram(entry);
16
+ try {
17
+ expect(types).not.toHaveBeenCalled();
18
+ expect(checkPreflight(load)).toEqual([]);
19
+ }
20
+ finally {
21
+ types.mockRestore();
22
+ load.dispose();
23
+ rmSync(dir, { recursive: true, force: true });
24
+ }
25
+ });
8
26
  test("ambiguous module classification bounds ancestor work on deep expressions", () => {
9
27
  const directory = mkdtempSync(join(process.platform === "win32" ? tmpdir() : "/tmp", "scriptc-module-depth-"));
10
28
  const entry = join(directory, "main.js");
@@ -1 +1 @@
1
- {"version":3,"file":"program.test.js","sourceRoot":"","sources":["../../src/frontend/program.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAkB,MAAM,mBAAmB,CAAC;AACnH,OAAO,KAAK,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,IAAI,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACpF,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAC/G,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC;IACpB,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAAC,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,MAAc,EAAE,UAAU,GAAG,4BAA4B;IACxF,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7B,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,IAAI,CAAC,GAAG,CAAC;IACP,sBAAsB;IACtB,gCAAgC;IAChC,wBAAwB;CACzB,CAAC,CAAC,sDAAsD,EAAE,CAAC,OAAO,EAAE,EAAE;IACrE,MAAM,CAAC,uBAAuB,CAAC;;;EAG/B,OAAO;;;;CAIR,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,GAAG,CAAC;IACP,iCAAiC;IACjC,8DAA8D;IAC9D,wCAAwC;CACzC,CAAC,CAAC,kEAAkE,EAAE,CAAC,MAAM,EAAE,EAAE;IAChF,MAAM,CAAC,uBAAuB,CAAC;;EAE/B,MAAM;;;;CAIP,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,GAAG,CAAC;IACP,CAAC,aAAa,EAAE,SAAS,CAAC;IAC1B,CAAC,iBAAiB,EAAE,gDAAgD,CAAC;IACrE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IACrC,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAClC,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;IAC7D,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;IACnD,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;IACtD,CAAC,0BAA0B,EAAE,wCAAwC,CAAC;IACtE,CAAC,yBAAyB,EAAE,oFAAoF,CAAC;IACjH,CAAC,uBAAuB,EAAE,8BAA8B,CAAC;IACzD,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;IACnD,CAAC,kBAAkB,EAAE,2FAA2F,CAAC;IACjH,CAAC,6BAA6B,EAAE,oDAAoD,CAAC;IACrF,CAAC,6BAA6B,EAAE,kDAAkD,CAAC;CACpF,CAAC,CAAC,gDAAgD,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE;IACjE,MAAM,WAAW,GAAG,uBAAuB,CAAC;;EAE5C,KAAK;;;CAGN,CAAC,CAAC;IACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;SACjG,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACpF,MAAM,WAAW,GAAG,uBAAuB,CAAC;;;CAG7C,CAAC,CAAC;IACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;SAClG,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,GAAG,CAAC;IACP,wGAAwG;IACxG,0CAA0C;IAC1C,2CAA2C;CAC5C,CAAC,CAAC,8DAA8D,EAAE,CAAC,MAAM,EAAE,EAAE;IAC5E,MAAM,WAAW,GAAG,uBAAuB,CAAC;EAC5C,MAAM;;;CAGP,CAAC,CAAC;IACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;SACjG,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACnF,MAAM,WAAW,GAAG,uBAAuB,CAAC;;;;CAI7C,CAAC,CAAC;IACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;SACjG,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAC/E,MAAM,CAAC,uBAAuB,CAAC;;;;CAIhC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,MAAM,WAAW,GAAG,uBAAuB,CAAC;;;;CAI7C,EAAE,oEAAoE,CAAC,CAAC;IACvE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,GAAG,CAAC;IACP,CAAC,kDAAkD,EAAE,IAAI,CAAC;IAC1D,CAAC,+DAA+D,EAAE,IAAI,CAAC;IACvE,CAAC,sFAAsF,EAAE,IAAI,CAAC;IAC9F,CAAC,oFAAoF,EAAE,IAAI,CAAC;IAC5F,CAAC,+DAA+D,EAAE,OAAO,CAAC;IAC1E,CAAC,0EAA0E,EAAE,OAAO,CAAC;IACrF,CAAC,iEAAiE,EAAE,OAAO,CAAC;CAC7E,CAAC,CAAC,0DAA0D,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;IACjF,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC;IACjH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACzC,aAAa,CAAC,KAAK,EAAE,6HAA6H,CAAC,CAAC;IACpJ,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,uDAAuD,GAAG,IAAI,CAAC,CAAC;IAC1G,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACzF,IAAI,OAAO,KAAK,IAAI;YAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aAC5C,CAAC;YACJ,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,OAAO,WAAW,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAC9G,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACzC,aAAa,CAAC,KAAK,EAAE,6HAA6H,CAAC,CAAC;IACpJ,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,0HAA0H,CAAC,CAAC;IACtK,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAE,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,IAAI,GAAG,CAA6B;YAChD,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SACzD,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrD,sEAAsE;QACtE,iEAAiE;QACjE,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtC,CAAC;gBAAS,CAAC;YAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAAC,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"program.test.js","sourceRoot":"","sources":["../../src/frontend/program.test.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,9 @@ export function walkPreorder(root, cb) {
62
62
  const stack = [root];
63
63
  const depths = [0];
64
64
  const children = [];
65
+ // The buffer belongs to this walk. Reuse its visitor too: constructing a
66
+ // closure per node adds allocation and cycle-collection work natively.
67
+ const appendChild = (child) => { children.push(child); };
65
68
  while (stack.length > 0) {
66
69
  const n = stack.pop();
67
70
  const depth = depths.pop();
@@ -71,9 +74,7 @@ export function walkPreorder(root, cb) {
71
74
  if (verdict === "skip")
72
75
  continue;
73
76
  children.length = 0;
74
- n.forEachChild((c) => {
75
- children.push(c);
76
- });
77
+ n.forEachChild(appendChild);
77
78
  for (let i = children.length - 1; i >= 0; i--) {
78
79
  stack.push(children[i]);
79
80
  depths.push(depth + 1);
@@ -1 +1 @@
1
- {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../src/frontend/ts7/ast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../src/frontend/ts7/ast.ts"],"names":[],"mappings":"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"}
@@ -2,17 +2,12 @@
2
2
  * JSON.parse itself validates grammar. A valid surrogate pair is preserved;
3
3
  * a lone escape must not silently change a type literal or symbol name. */
4
4
  export function checkSemanticJsonStrings(json, preservesSurrogates) {
5
- if (preservesSurrogates)
5
+ // Most checker responses contain no Unicode escapes. Inspect only escape
6
+ // sequences instead of mapping every native string index to UTF-16. Valid
7
+ // JSON has no backslashes outside strings; JSON.parse checks the grammar.
8
+ if (preservesSurrogates || !json.includes("\\u"))
6
9
  return;
7
- let inString = false;
8
- for (let index = 0; index < json.length; index++) {
9
- const code = json.charCodeAt(index);
10
- if (code === 34) {
11
- inString = !inString;
12
- continue;
13
- }
14
- if (!inString || code !== 92)
15
- continue;
10
+ for (let index = json.indexOf("\\"); index >= 0; index = json.indexOf("\\", index + 1)) {
16
11
  if (json.charCodeAt(++index) !== 117)
17
12
  continue;
18
13
  const unit = jsonHexUnit(json, index + 1);
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-json.js","sourceRoot":"","sources":["../../../src/frontend/ts7/semantic-json.ts"],"names":[],"mappings":"AAAA;;2EAE2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,mBAA4B;IACjF,IAAI,mBAAmB;QAAE,OAAO;IAChC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC;YAAC,SAAS;QAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,EAAE;YAAE,SAAS;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG;YAAE,SAAS;QAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,CAAC;QACX,IAAI,IAAI,GAAG,MAAM,IAAI,IAAI,GAAG,MAAM;YAAE,SAAS;QAC7C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9F,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,MAAc;IAC/C,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvI,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACzB,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,4EAA4E;AAC5E,MAAM,uBAAuB,GAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AAE7F,MAAM,UAAU,iBAAiB,CAAI,IAAY;IAC/C,wBAAwB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"semantic-json.js","sourceRoot":"","sources":["../../../src/frontend/ts7/semantic-json.ts"],"names":[],"mappings":"AAAA;;2EAE2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,mBAA4B;IACjF,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,IAAI,mBAAmB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO;IACzD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACvF,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG;YAAE,SAAS;QAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,CAAC;QACX,IAAI,IAAI,GAAG,MAAM,IAAI,IAAI,GAAG,MAAM;YAAE,SAAS;QAC7C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9F,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,MAAc;IAC/C,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvI,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACzB,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,4EAA4E;AAC5E,MAAM,uBAAuB,GAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAY,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AAE7F,MAAM,UAAU,iBAAiB,CAAI,IAAY;IAC/C,wBAAwB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;AAC/B,CAAC"}
@@ -13,7 +13,7 @@ export declare function jsOpenObjectType(decl: ts.Node | undefined, type: IrType
13
13
  * dynamic-only even though response.headers is native.
14
14
  * Declaration provenance is checked in mapType so user types with the
15
15
  * same names keep their ordinary structural representation. */
16
- export declare const ISLAND_AMBIENT_TYPES: readonly ["Response", "ResponseInit", "RequestInit", "Event", "EventTarget", "AbortController", "AbortSignal", "Headers", "ReadableStream", "ReadableStreamDefaultReader", "ReadableStreamDefaultController", "ReadableStreamReadResult", "ReadableStreamReadValueResult", "ReadableStreamReadDoneResult"];
16
+ export declare const ISLAND_AMBIENT_TYPES: readonly ["Response", "Request", "ResponseInit", "RequestInit", "Event", "EventTarget", "AbortController", "AbortSignal", "Headers", "ReadableStream", "ReadableStreamDefaultReader", "ReadableStreamDefaultController", "ReadableStreamReadResult", "ReadableStreamReadValueResult", "ReadableStreamReadDoneResult"];
17
17
  /** True for the parseArgs type family that deliberately rides dyn. Exported
18
18
  * for the property-read bridge after TypeScript narrows a token union arm. */
19
19
  export declare function isParseArgsDynTypeName(name: string): boolean;
@@ -27,6 +27,8 @@ export type DeclaredOrderPriority = readonly number[] | DeclaredOrderPriorityRef
27
27
  * struct). Owned by the Lowerer; `mapType` needs it to intern the object
28
28
  * types it encounters, which is why it is threaded through as a parameter. */
29
29
  export declare class ShapeRegistry {
30
+ /** Existing layouts change only when a recursive placeholder closes. */
31
+ revision: number;
30
32
  private readonly byKey;
31
33
  private readonly byId;
32
34
  /** Historical emit-order rank of the declaration-order metadata each
@@ -122,8 +124,11 @@ export declare class ShapeRegistry {
122
124
  * discriminator contract. An arm's index in that list IS its runtime tag.
123
125
  * Owned by the Lowerer; threaded through mapType like ShapeRegistry. */
124
126
  export declare class UnionRegistry {
127
+ /** Existing arm/discriminator contracts change when a placeholder closes. */
128
+ revision: number;
125
129
  private readonly byKey;
126
130
  private readonly byId;
131
+ private readonly armTags;
127
132
  /** All interned unions in first-seen (`u0`, `u1`, ...) order. */
128
133
  readonly unions: IrUnionDef[];
129
134
  /** ts.Types currently being mapped — a back-reference to one is the
@@ -155,6 +160,9 @@ export declare class UnionRegistry {
155
160
  /** An exact arm transformation keeps the source's semantic variants. */
156
161
  transform(source: IrUnionDef, arms: IrType[]): string;
157
162
  get(unionId: string): IrUnionDef | undefined;
163
+ /** Index large arm lists once. Exact equality still resolves type-key
164
+ * collisions, including optional function ABI flags. */
165
+ armTag(unionId: string, arm: IrType): number;
158
166
  }
159
167
  /** Human-readable rendering of an IrType for diagnostics (records expand to
160
168
  * their canonical field list, unions to their arms; `checker.typeToString`
@@ -6,6 +6,7 @@ import { BIGINT_T } from "../ir/ir.js";
6
6
  import { literalValues } from "./literal-values.js";
7
7
  import { remapUnionDiscriminant } from "./union-discriminants.js";
8
8
  import { isJsSourceFile, isNodeTypesPath } from "./program.js";
9
+ import { functionCanReturnUndefined } from "./function-completion.js";
9
10
  import { accessorSlotProp, recordTextCodecClass } from "../ir/ir.js";
10
11
  // typeKey moved to ir/ir.ts (the backend needs it too, for per-type
11
12
  // helper interning); re-exported here so frontend call sites keep their
@@ -18,10 +19,32 @@ export function jsOpenObjectType(decl, type, shapes, unions) {
18
19
  return type;
19
20
  const arms = type.kind === "union" ? unions.get(type.unionId)?.arms : [type];
20
21
  const present = arms?.filter((arm) => arm.kind !== "undefinedT");
22
+ const parameter = ts.isParameter(decl) ? decl : decl.parent && ts.isParameter(decl.parent) ? decl.parent : null;
23
+ // Array parameters in JavaScript also accept typed arrays. Keep
24
+ // their runtime storage at the boundary, including default [] parameters.
25
+ if (parameter && !parameter.dotDotDotToken && present?.length === 1 &&
26
+ present[0].kind === "array")
27
+ return DYN;
28
+ if (parameter && !parameter.dotDotDotToken && present?.length === 1 && present[0].kind === "bytes")
29
+ return DYN;
30
+ // An unannotated JavaScript parameter's object default is a fallback,
31
+ // not a closed class contract. Published code routinely passes another
32
+ // implementation of the same protocol through a boxed callable.
33
+ if (parameter?.initializer && !parameter.type &&
34
+ present?.some((arm) => arm.kind === "object") &&
35
+ arms?.every((arm) => canConvertToDyn(arm, (id) => shapes.get(id), (id) => unions.get(id))))
36
+ return DYN;
21
37
  if (present?.length !== 1 || present[0].kind !== "record")
22
38
  return type;
23
39
  const shape = shapes.get(present[0].shapeId);
24
- return shape && shape.fields.length === 0 && !shape.indexValue && !shape.tuple ? DYN : type;
40
+ // JavaScript dictionaries allow missing keys and inherited properties.
41
+ // A typed index slot cannot represent either of those reads faithfully.
42
+ if (shape?.indexValue && !shape.tuple)
43
+ return DYN;
44
+ const unitOnly = (field) => isUnitType(field) || field.kind === "void" ||
45
+ field.kind === "union" && unions.get(field.unionId)?.arms.every(isUnitType) === true;
46
+ return shape && !shape.tuple && !shape.indexValue &&
47
+ (shape.fields.length === 0 || shape.fields.some((field) => unitOnly(field.type))) ? DYN : type;
25
48
  }
26
49
  /** The ambient TYPE names of the fetch slice. Under --dynamic their
27
50
  * values live in the embedded engine and map to island handles (jsval).
@@ -33,6 +56,7 @@ export function jsOpenObjectType(decl, type, shapes, unions) {
33
56
  * same names keep their ordinary structural representation. */
34
57
  export const ISLAND_AMBIENT_TYPES = [
35
58
  "Response",
59
+ "Request",
36
60
  "ResponseInit",
37
61
  "RequestInit",
38
62
  "Event",
@@ -100,6 +124,8 @@ function comparePriority(left, right) {
100
124
  * struct). Owned by the Lowerer; `mapType` needs it to intern the object
101
125
  * types it encounters, which is why it is threaded through as a parameter. */
102
126
  export class ShapeRegistry {
127
+ /** Existing layouts change only when a recursive placeholder closes. */
128
+ revision = 0;
103
129
  byKey = new Map();
104
130
  byId = new Map();
105
131
  /** Historical emit-order rank of the declaration-order metadata each
@@ -259,6 +285,7 @@ export class ShapeRegistry {
259
285
  shape.indexValue = indexValue;
260
286
  this.adoptDeclaredOrder(shape, declaredOrder);
261
287
  this.pendingRec.delete(id);
288
+ this.revision++;
262
289
  const key = this.keyOf(fields, false, indexValue);
263
290
  if (!this.byKey.has(key))
264
291
  this.byKey.set(key, id);
@@ -312,8 +339,11 @@ export class ShapeRegistry {
312
339
  * discriminator contract. An arm's index in that list IS its runtime tag.
313
340
  * Owned by the Lowerer; threaded through mapType like ShapeRegistry. */
314
341
  export class UnionRegistry {
342
+ /** Existing arm/discriminator contracts change when a placeholder closes. */
343
+ revision = 0;
315
344
  byKey = new Map();
316
345
  byId = new Map();
346
+ armTags = new Map();
317
347
  /** All interned unions in first-seen (`u0`, `u1`, ...) order. */
318
348
  unions = [];
319
349
  /** ts.Types currently being mapped — a back-reference to one is the
@@ -366,6 +396,8 @@ export class UnionRegistry {
366
396
  if (discriminant)
367
397
  def.discriminant = discriminant;
368
398
  this.pendingRec.delete(id);
399
+ this.armTags.delete(id);
400
+ this.revision++;
369
401
  const key = JSON.stringify([arms.map(typeKey), discriminant]);
370
402
  if (!this.byKey.has(key))
371
403
  this.byKey.set(key, id);
@@ -392,6 +424,29 @@ export class UnionRegistry {
392
424
  get(unionId) {
393
425
  return this.byId.get(unionId);
394
426
  }
427
+ /** Index large arm lists once. Exact equality still resolves type-key
428
+ * collisions, including optional function ABI flags. */
429
+ armTag(unionId, arm) {
430
+ const def = this.byId.get(unionId);
431
+ if (!def)
432
+ return -1;
433
+ if (def.arms.length < 8)
434
+ return def.arms.findIndex((candidate) => typeEquals(candidate, arm));
435
+ let tags = this.armTags.get(unionId);
436
+ if (!tags) {
437
+ tags = new Map();
438
+ def.arms.forEach((candidate, tag) => {
439
+ const key = typeKey(candidate);
440
+ const previous = tags.get(key);
441
+ if (previous)
442
+ previous.push(tag);
443
+ else
444
+ tags.set(key, [tag]);
445
+ });
446
+ this.armTags.set(unionId, tags);
447
+ }
448
+ return tags.get(typeKey(arm))?.find((tag) => typeEquals(def.arms[tag], arm)) ?? -1;
449
+ }
395
450
  }
396
451
  /** Human-readable rendering of an IrType for diagnostics (records expand to
397
452
  * their canonical field list, unions to their arms; `checker.typeToString`
@@ -717,11 +772,8 @@ export function containsUnion(t) {
717
772
  * sentinel; any/unknown ride dyn; undefined-only yields have no C value
718
773
  * form (null); else the mapped type.
719
774
  * - return: void/undefined/never carry no value (VOID — the done-value is
720
- * the undefined arm); any/unknown are DEFAULTS (`Generator<number>` is
721
- * Generator<number, any, any>), and a defaulted return channel means
722
- * "no modeled return value" — VOID, not dyn (a dyn return channel would
723
- * force the yield channel dyn too; bodies that `return v` under a
724
- * defaulted TReturn keep their fence at the return site).
775
+ * the undefined arm); any/unknown carry checked values. A defaulted or
776
+ * inferred return channel can still return a value and must preserve it.
725
777
  * - next: void/undefined/never mean valueless resumes (the undefined
726
778
  * unit); any/unknown ride dyn; else the mapped type (`.next(v)` then
727
779
  * requires its argument — fenced at the call site).
@@ -744,9 +796,9 @@ function genChannels(yieldTs, retTs, nextTs, ctx) {
744
796
  }
745
797
  if (!yieldT)
746
798
  return null;
747
- const retT = retTs === undefined || retTs.flags & (UNITISH | ANYISH)
799
+ const retT = retTs === undefined || retTs.flags & UNITISH
748
800
  ? VOID
749
- : mapType(retTs, ctx);
801
+ : retTs.flags & ANYISH ? DYN : mapType(retTs, ctx);
750
802
  if (!retT || (retT.kind !== "void" && isUnitType(retT)))
751
803
  return null;
752
804
  const nextT = nextTs === undefined || nextTs.flags & UNITISH
@@ -1201,7 +1253,7 @@ function mapTypeInner(type, ctx) {
1201
1253
  }
1202
1254
  const fields = [];
1203
1255
  for (let i = 0; i < args.length; i++) {
1204
- let et = mapType(args[i], ctx);
1256
+ let et = !ctx.dynamic && (args[i].flags & ts.TypeFlags.Any) !== 0 ? DYN : mapType(args[i], ctx);
1205
1257
  // A unit-only element (`[number, undefined]`) rides the unit-only
1206
1258
  // union, the record-field rule.
1207
1259
  if (et?.kind === "void" && isUnitOnlyTsType(args[i], ctx.resolveTypeParam))
@@ -1489,13 +1541,26 @@ function mapTypeInner(type, ctx) {
1489
1541
  isDeclaredInAmbientModule(d, "diagnostics_channel"))) {
1490
1542
  return F64;
1491
1543
  }
1544
+ // Node names this result; the ambient WHATWG declaration uses a type literal.
1545
+ const encodeResult = psym && checker.declarationsOf(psym).some((decl) => {
1546
+ if (!ctx.isStdlibFile(decl.getSourceFile()))
1547
+ return false;
1548
+ if (ts.isInterfaceDeclaration(decl) && decl.name.text === "EncodeIntoResult")
1549
+ return true;
1550
+ const parent = decl.parent;
1551
+ return ts.isTypeLiteralNode(decl) && parent?.kind === ts.SyntaxKind.MethodSignature &&
1552
+ parent.name && ts.isIdentifier(parent.name) && parent.name.text === "encodeInto" &&
1553
+ parent.parent && ts.isInterfaceDeclaration(parent.parent) && parent.parent.name.text === "TextEncoder";
1554
+ });
1555
+ if (encodeResult)
1556
+ return { kind: "record", shapeId: ctx.shapes.intern([{ name: "read", type: F64 }, { name: "written", type: F64 }]) };
1492
1557
  // WHATWG codec instances have ordinary reference identity and ownership.
1493
1558
  // Their private encoding slot is omitted from enumeration and JSON.
1494
1559
  if ((psym?.name === "TextEncoder" || psym?.name === "TextDecoder") &&
1495
1560
  checker.declarationsOf(psym).some((d) => (ts.isInterfaceDeclaration(d) || ts.isClassDeclaration(d)) && ctx.isStdlibFile(d.getSourceFile()))) {
1496
1561
  return {
1497
1562
  kind: "record",
1498
- shapeId: ctx.shapes.intern([{ name: `%${psym.name}`, type: F64 }], false, undefined, []),
1563
+ shapeId: ctx.shapes.intern([{ name: `%${psym.name}`, type: F64 }, ...(psym.name === "TextDecoder" ? [{ name: "%fatal", type: BOOL }, { name: "%ignoreBOM", type: BOOL }, { name: "%state", type: DYN }] : [])], false, undefined, []),
1499
1564
  };
1500
1565
  }
1501
1566
  // string_decoder.StringDecoder: the decoder value is a two-field record
@@ -1562,6 +1627,10 @@ function mapTypeInner(type, ctx) {
1562
1627
  // read has its own lowering (errno/syscall/path stay per-member fences).
1563
1628
  if (isStdlibInterface("ErrnoException"))
1564
1629
  return { kind: "object", className: "%Error" };
1630
+ // spawn consumes a presence-sensitive option bag, including optional
1631
+ // stdio and env values. Keep it checked-dynamic for native normalization.
1632
+ if (isStdlibInterface("SpawnOptions"))
1633
+ return DYN;
1565
1634
  // The fetch ambient slice: under --dynamic these are island handles
1566
1635
  // exactly like npm-declared types. Static fetch has one deliberately
1567
1636
  // narrower native representation: Response is an opaque checked-
@@ -1671,9 +1740,8 @@ function mapTypeInner(type, ctx) {
1671
1740
  // ArrayBuffer value exists. The other TypedArray flavors stay
1672
1741
  // unmapped (the record path's index-signature check rejects them).
1673
1742
  // RegExpMatchArray (s.match's result) IS a string[] here — the honest
1674
- // slice: [whole match, ...captures] (a nonparticipating capture reads
1675
- // "" — SEMANTICS.md). The `.index`/`.input`/`.groups` extras fence per
1676
- // member like any other unlowered array property.
1743
+ // slice: [whole match, ...captures]. Nonparticipating captures use the
1744
+ // array's undefined element state; numeric access preserves that state.
1677
1745
  if (isStdlibInterface("RegExpMatchArray"))
1678
1746
  return arrayOf(STRING);
1679
1747
  // TemplateStringsArray (a tag function's first parameter): a string[] —
@@ -1705,6 +1773,8 @@ function mapTypeInner(type, ctx) {
1705
1773
  return F64;
1706
1774
  if (isStdlibInterface("ArrayBuffer") || isStdlibInterface("PropertyDescriptor") || isStdlibInterface("ProcessVersions"))
1707
1775
  return DYN;
1776
+ if (Object.values(BYTES_ELEMENT_NAME).some((name) => isStdlibInterface(`${name}Constructor`)))
1777
+ return DYN;
1708
1778
  if (isStdlibInterface("Uint8Array"))
1709
1779
  return bytesOf("u8");
1710
1780
  if (isStdlibInterface("Uint32Array"))
@@ -1831,6 +1901,10 @@ function mapTypeInner(type, ctx) {
1831
1901
  isDeclaredInAmbientModule(d, "tls"))) {
1832
1902
  return { kind: "secureCtx" };
1833
1903
  }
1904
+ // Scrypt's runtime options retain property accessors and aliases. Use
1905
+ // checked values so presence probes and repeated getter reads match Node.
1906
+ if (psym?.name === "ScryptOptions" && checker.declarationsOf(psym).some((d) => ts.isInterfaceDeclaration(d) && ctx.isStdlibFile(d.getSourceFile()) && isDeclaredInAmbientModule(d, "crypto")))
1907
+ return DYN;
1834
1908
  // crypto.Hash / crypto.Hmac: native incremental digest handles. Keep
1835
1909
  // provenance module-qualified so user classes with these common names
1836
1910
  // retain their ordinary structural/class representation.
@@ -2053,6 +2127,9 @@ function mapTypeInner(type, ctx) {
2053
2127
  return null;
2054
2128
  return { kind: "promise", inner };
2055
2129
  }
2130
+ // Native collection iterators use checked runtime iterator objects.
2131
+ if (isStdlibInterface("MapIterator") || isStdlibInterface("SetIterator"))
2132
+ return DYN;
2056
2133
  // Generator<T, TReturn, TNext>, AsyncGenerator<T, TReturn, TNext> (and
2057
2134
  // the lib's IterableIterator<T, ...>, the older sync annotation spelling):
2058
2135
  // the generator kind. Channel normalization keeps the runtime honest:
@@ -2160,28 +2237,53 @@ function mapTypeInner(type, ctx) {
2160
2237
  ], false, undefined, ["address", "family", "port"]),
2161
2238
  };
2162
2239
  }
2240
+ // Filesystem options are data records. Keep their declared optional fields
2241
+ // instead of allowing arbitrary standard-library interfaces into records.
2242
+ if ((psym?.name === "FileReadOptions" || psym?.name === "ReadOptions" || psym?.name === "ReadOptionsWithBuffer" || psym?.name === "WriteOptions") &&
2243
+ checker.declarationsOf(psym).some((d) => ts.isInterfaceDeclaration(d) && ctx.isStdlibFile(d.getSourceFile()) &&
2244
+ (isDeclaredInAmbientModule(d, "fs/promises") || isDeclaredInAmbientModule(d, "fs")))) {
2245
+ const fields = [];
2246
+ for (const property of checker.getPropertiesOfType(widened)) {
2247
+ if (!["buffer", "offset", "length", "position"].includes(property.name))
2248
+ return null;
2249
+ const type = mapType(checker.getTypeOfSymbol(property), ctx);
2250
+ if (!type)
2251
+ return null;
2252
+ fields.push({ name: property.name, type });
2253
+ }
2254
+ const order = fields.map((field) => field.name);
2255
+ fields.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
2256
+ return { kind: "record", shapeId: ctx.shapes.intern(fields, false, undefined, order) };
2257
+ }
2163
2258
  // fs/promises FileReadResult<T> / FileWriteResult<T>: the two-field
2164
2259
  // null-prototype objects returned by FileHandle.read/write. The native
2165
2260
  // record does not model the prototype (unobservable through the lowered
2166
2261
  // surface); it preserves the caller buffer/string by reference.
2167
- if ((psym?.name === "FileReadResult" || psym?.name === "FileWriteResult") &&
2262
+ if ((psym?.name === "FileReadResult" || psym?.name === "FileWriteResult" || psym?.name === "FileReadvResult" || psym?.name === "FileWritevResult" || psym?.name === "ReadVResult" || psym?.name === "WriteVResult") &&
2168
2263
  checker.declarationsOf(psym).some((d) => ts.isInterfaceDeclaration(d) &&
2169
2264
  ctx.isStdlibFile(d.getSourceFile()) &&
2170
- isDeclaredInAmbientModule(d, "fs/promises"))) {
2265
+ (isDeclaredInAmbientModule(d, "fs/promises") ||
2266
+ ((psym.name === "ReadVResult" || psym.name === "WriteVResult") && isDeclaredInAmbientModule(d, "fs"))))) {
2171
2267
  const args = checker.getTypeArguments(widened);
2172
2268
  if (args.length !== 1)
2173
2269
  return null;
2174
- const payload = mapType(args[0], ctx);
2175
- if (!payload || !(payload.kind === "string" || (payload.kind === "bytes" && payload.elem === "u8"))) {
2270
+ const vector = psym.name === "FileReadvResult" || psym.name === "FileWritevResult" || psym.name === "ReadVResult" || psym.name === "WriteVResult";
2271
+ const emptyVector = vector && checker.isArrayType(args[0]) &&
2272
+ (checker.getTypeArguments(args[0])[0].flags & ts.TypeFlags.Never) !== 0;
2273
+ const payload = emptyVector ? arrayOf(bytesOf("u8")) : mapType(args[0], ctx);
2274
+ if (!payload || (vector
2275
+ ? !(payload.kind === "array" && payload.elem.kind === "bytes" && payload.elem.elem === "u8")
2276
+ : !(payload.kind === "string" || (payload.kind === "bytes" && payload.elem === "u8")))) {
2176
2277
  return null;
2177
2278
  }
2178
- const count = psym.name === "FileReadResult" ? "bytesRead" : "bytesWritten";
2279
+ const count = psym.name === "FileReadResult" || psym.name === "FileReadvResult" || psym.name === "ReadVResult" ? "bytesRead" : "bytesWritten";
2280
+ const payloadName = vector ? "buffers" : "buffer";
2179
2281
  return {
2180
2282
  kind: "record",
2181
2283
  shapeId: ctx.shapes.intern([
2182
- { name: "buffer", type: payload },
2284
+ { name: payloadName, type: payload },
2183
2285
  { name: count, type: F64 },
2184
- ], false, undefined, [count, "buffer"]),
2286
+ ], false, undefined, [count, payloadName]),
2185
2287
  };
2186
2288
  }
2187
2289
  // fs.Dirent (readdirSync's withFileTypes rows): interned explicitly on
@@ -2370,6 +2472,11 @@ function mapTypeInner(type, ctx) {
2370
2472
  const hybrid = mapHybridCallableIntersection(widened, ctx);
2371
2473
  if (hybrid)
2372
2474
  return hybrid;
2475
+ // Recursive and Symbol-keyed callable objects need their complete live
2476
+ // property table; dropping those members into a plain closure loses data.
2477
+ if (!ctx.dynamic && checker.getCallSignatures(widened).length > 0 &&
2478
+ checker.getPropertiesOfType(widened).length > 0)
2479
+ return DYN;
2373
2480
  }
2374
2481
  const callSigs = checker.getCallSignatures(widened);
2375
2482
  if (callSigs.length === 1) {
@@ -2410,6 +2517,22 @@ function mapTypeInner(type, ctx) {
2410
2517
  ts.isParameter(decl) &&
2411
2518
  (decl.questionToken !== undefined || decl.initializer !== undefined);
2412
2519
  let pt = mapType(checker.getTypeOfSymbol(p), ctx);
2520
+ if (decl && ts.isParameter(decl) && ts.isSetAccessorDeclaration(decl.parent) && isJsSourceFile(decl.getSourceFile()))
2521
+ pt = DYN;
2522
+ // An inferred JavaScript binding pattern consumes an iterable; it
2523
+ // does not require the caller's array to have exactly this length.
2524
+ const executor = decl && ts.isParameter(decl) ? decl.parent : null;
2525
+ const construction = executor?.parent;
2526
+ const constructorSymbol = construction && ts.isNewExpression(construction)
2527
+ ? checker.getSymbolAtLocation(construction.expression) : undefined;
2528
+ const nativeExecutor = executor && (ts.isArrowFunction(executor) || ts.isFunctionExpression(executor)) &&
2529
+ construction && ts.isNewExpression(construction) && construction.arguments?.[0] === executor &&
2530
+ ts.isIdentifier(construction.expression) && construction.expression.text === "Promise" &&
2531
+ constructorSymbol && checker.declarationsOf(constructorSymbol).some((site) => ctx.isStdlibFile(site.getSourceFile()));
2532
+ if (!nativeExecutor && decl && ts.isParameter(decl) && !decl.dotDotDotToken && !ts.isSetAccessorDeclaration(decl.parent) &&
2533
+ isJsSourceFile(decl.getSourceFile()) && !decl.type &&
2534
+ !/@(?:param|type)\b/.test(decl.getSourceFile().text.slice(decl.parent?.pos ?? decl.pos, decl.getStart())))
2535
+ pt = DYN;
2413
2536
  if (pt)
2414
2537
  pt = jsOpenObjectType(decl, pt, ctx.shapes, ctx.unions);
2415
2538
  // Belt and braces for non-strict type worlds: an optional param's
@@ -2443,7 +2566,21 @@ function mapTypeInner(type, ctx) {
2443
2566
  const sigDecl = checker.signatureDeclaration(sig);
2444
2567
  const jsUnitReturn = sigDecl !== undefined && isJsSourceFile(sigDecl.getSourceFile()) &&
2445
2568
  (retT.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)) !== 0;
2446
- const ret = jsUnitReturn ? DYN : retT.flags & ts.TypeFlags.Never ? VOID : mapType(retT, ctx);
2569
+ let ret = jsUnitReturn || (!ctx.dynamic && (retT.flags & ts.TypeFlags.Any) !== 0)
2570
+ ? DYN : retT.flags & ts.TypeFlags.Never ? VOID : mapType(retT, ctx);
2571
+ if (sigDecl && ts.isGetAccessorDeclaration(sigDecl) && isJsSourceFile(sigDecl.getSourceFile()))
2572
+ ret = DYN;
2573
+ if (sigDecl && isJsSourceFile(sigDecl.getSourceFile()) && ret?.kind === "array")
2574
+ ret = DYN;
2575
+ if (sigDecl && ts.isFunctionLike(sigDecl) && isJsSourceFile(sigDecl.getSourceFile()) && !sigDecl.type &&
2576
+ !/@returns?\b/.test(sigDecl.getSourceFile().text.slice(sigDecl.pos, sigDecl.getStart())) && ret?.kind === "record")
2577
+ ret = DYN;
2578
+ if (sigDecl && ts.isFunctionLike(sigDecl) && isJsSourceFile(sigDecl.getSourceFile()) && !sigDecl.type &&
2579
+ !/@returns?\b/.test(sigDecl.getSourceFile().text.slice(sigDecl.pos, sigDecl.getStart())) &&
2580
+ (ret?.kind === "date" || ret?.kind === "union" && ctx.unions.get(ret.unionId)?.arms.some((arm) => arm.kind === "func")))
2581
+ ret = DYN;
2582
+ if (ret && sigDecl && isJsSourceFile(sigDecl.getSourceFile()) && functionCanReturnUndefined(sigDecl))
2583
+ ret = withUndefinedArm(ret, ctx.unions) ?? ret;
2447
2584
  if (!ret)
2448
2585
  return null;
2449
2586
  return typedRest
@@ -3465,8 +3602,11 @@ function recordProvenanceOk(t, ctx) {
3465
3602
  return true;
3466
3603
  const tSym = t.getSymbol();
3467
3604
  const decls = tSym ? checker.declarationsOf(tSym) : undefined;
3468
- if (!decls || decls.length === 0)
3469
- return false;
3605
+ if (!decls || decls.length === 0) {
3606
+ // Inferred destructuring parameters can have a synthesized anonymous
3607
+ // shape with no declaration or member symbols to trace to a source.
3608
+ return checker.getPropertiesOfType(t).every((property) => checker.declarationsOf(property).every((decl) => !decl.getSourceFile().isDeclarationFile || ctx.isExternalTypeFile(decl.getSourceFile())));
3609
+ }
3470
3610
  return !decls.some((d) => {
3471
3611
  const sf = d.getSourceFile();
3472
3612
  return sf.isDeclarationFile && !ctx.isExternalTypeFile(sf);
@@ -3687,6 +3827,10 @@ function mapRecordTypeInner(widened, ctx) {
3687
3827
  const computed = widened.isIntersectionType() || isMappedShape(widened);
3688
3828
  {
3689
3829
  const props = checker.getPropertiesOfType(widened);
3830
+ // Symbol-keyed records use the checked object's descriptor table. A
3831
+ // checker-internal __@ name is not a string field in a native struct.
3832
+ if (props.some((property) => property.name.startsWith("__@")))
3833
+ return DYN;
3690
3834
  // A computed shape with NO members is not a real empty record: inside a
3691
3835
  // generic body `Partial<T>` resolves to no members at all (keyof T is
3692
3836
  // still unknown there) — interning `{}` would be silently wrong. The
@@ -3807,6 +3951,8 @@ function mapRecordTypeInner(widened, ctx) {
3807
3951
  if ((pt === null || pt.kind === "jsval") && (fieldTs.flags & ts.TypeFlags.Any) !== 0 && constAssertedEmptyArrayProp(p, ctx)) {
3808
3952
  pt = arrayOf(unitOnlyUnion(ctx.unions));
3809
3953
  }
3954
+ if (pt === null && !ctx.dynamic && (fieldTs.flags & ts.TypeFlags.Any) !== 0)
3955
+ pt = DYN;
3810
3956
  // Unit-only FIELDS (`{ msg?: undefined }` — the discriminated-union
3811
3957
  // absent-field idiom — and `{ p: undefined }` spellings): the
3812
3958
  // unit-only union. The runtime value is the interned unit, JSON