@scriptc/compiler 0.2.0 → 0.2.1

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 (194) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +25 -15
  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 +5 -0
  7. package/dist/backend/llvm/dyn.js +166 -99
  8. package/dist/backend/llvm/dyn.js.map +1 -1
  9. package/dist/backend/llvm/emitter.d.ts +2 -2
  10. package/dist/backend/llvm/emitter.js +79 -20
  11. package/dist/backend/llvm/emitter.js.map +1 -1
  12. package/dist/backend/llvm/expr-bytes.d.ts +1 -1
  13. package/dist/backend/llvm/expr-bytes.js +28 -17
  14. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  15. package/dist/backend/llvm/expr-control.js +1 -1
  16. package/dist/backend/llvm/expr-control.js.map +1 -1
  17. package/dist/backend/llvm/expr-dynamic.js +18 -9
  18. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  19. package/dist/backend/llvm/expr-primitives.js +11 -1
  20. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  21. package/dist/backend/llvm/expr-records.js +11 -3
  22. package/dist/backend/llvm/expr-records.js.map +1 -1
  23. package/dist/backend/llvm/expr-stream-bridges.js +125 -17
  24. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  25. package/dist/backend/llvm/lib-process.js +23 -3
  26. package/dist/backend/llvm/lib-process.js.map +1 -1
  27. package/dist/backend/llvm/lib-shared.js +45 -2
  28. package/dist/backend/llvm/lib-shared.js.map +1 -1
  29. package/dist/backend/llvm/shapes.js +8 -2
  30. package/dist/backend/llvm/shapes.js.map +1 -1
  31. package/dist/backend/native-toolchain.d.ts +3 -6
  32. package/dist/backend/native-toolchain.js +53 -23
  33. package/dist/backend/native-toolchain.js.map +1 -1
  34. package/dist/backend/native-toolchain.test.js +72 -0
  35. package/dist/backend/native-toolchain.test.js.map +1 -1
  36. package/dist/backend/runtime-abi.d.ts +2 -2
  37. package/dist/backend/runtime-abi.js +2 -2
  38. package/dist/backend/runtime-pack-native.js +4 -1
  39. package/dist/backend/runtime-pack-native.js.map +1 -1
  40. package/dist/backend/runtime-pack-targets.test.js +1 -1
  41. package/dist/backend/runtime-pack.test.js +1 -1
  42. package/dist/backend/targets.js +10 -6
  43. package/dist/backend/targets.js.map +1 -1
  44. package/dist/backend/targets.test.js +7 -0
  45. package/dist/backend/targets.test.js.map +1 -1
  46. package/dist/compat/fetch-profile.js +34 -4
  47. package/dist/compat/fetch-profile.js.map +1 -1
  48. package/dist/diagnostics/diagnostic.js +2 -7
  49. package/dist/diagnostics/diagnostic.js.map +1 -1
  50. package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
  51. package/dist/frontend/lowering/class-callbacks.js +26 -15
  52. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  53. package/dist/frontend/lowering/class-construction.d.ts +12 -0
  54. package/dist/frontend/lowering/class-construction.js +156 -0
  55. package/dist/frontend/lowering/class-construction.js.map +1 -0
  56. package/dist/frontend/lowering/class-descriptors.d.ts +1 -0
  57. package/dist/frontend/lowering/class-descriptors.js +46 -5
  58. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  59. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +11 -1
  60. package/dist/frontend/lowering/class-dynamic-dispatch.js +403 -48
  61. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  62. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +2 -1
  63. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  64. package/dist/frontend/lowering/class-instance-constructor.js +4 -1
  65. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  66. package/dist/frontend/lowering/class-method-values.d.ts +4 -1
  67. package/dist/frontend/lowering/class-method-values.js +72 -7
  68. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  69. package/dist/frontend/lowering/class-prototypes.d.ts +5 -2
  70. package/dist/frontend/lowering/class-prototypes.js +121 -13
  71. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  72. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  73. package/dist/frontend/lowering/class-runtime-statics.js +66 -0
  74. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -0
  75. package/dist/frontend/lowering/class-static-data.js +2 -2
  76. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  77. package/dist/frontend/lowering/containers/bytes.js +49 -13
  78. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  79. package/dist/frontend/lowering/containers/string-and-regexp.js +19 -47
  80. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  81. package/dist/frontend/lowering/error-methods.d.ts +4 -1
  82. package/dist/frontend/lowering/error-methods.js +100 -1
  83. package/dist/frontend/lowering/error-methods.js.map +1 -1
  84. package/dist/frontend/lowering/expressions/native-proxy.js +3 -1
  85. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  86. package/dist/frontend/lowering/expressions/nullish-assignment.js +19 -11
  87. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  88. package/dist/frontend/lowering/expressions/object-literals.js +38 -7
  89. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  90. package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -4
  91. package/dist/frontend/lowering/expressions/optional-chains.js +69 -17
  92. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  93. package/dist/frontend/lowering/function-context.d.ts +11 -3
  94. package/dist/frontend/lowering/function-context.js +11 -5
  95. package/dist/frontend/lowering/function-context.js.map +1 -1
  96. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -0
  97. package/dist/frontend/lowering/generator-dynamic-dispatch.js +39 -1
  98. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  99. package/dist/frontend/lowering/lib-boundary.d.ts +2 -0
  100. package/dist/frontend/lowering/lib-boundary.js +54 -1
  101. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  102. package/dist/frontend/lowering/lower-builtin-values.d.ts +7 -1
  103. package/dist/frontend/lowering/lower-builtin-values.js +113 -3
  104. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  105. package/dist/frontend/lowering/lower-builtins.d.ts +6 -5
  106. package/dist/frontend/lowering/lower-builtins.js +156 -41
  107. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  108. package/dist/frontend/lowering/lower-calls.d.ts +8 -5
  109. package/dist/frontend/lowering/lower-calls.js +448 -83
  110. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  111. package/dist/frontend/lowering/lower-classes.d.ts +13 -13
  112. package/dist/frontend/lowering/lower-classes.js +650 -176
  113. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  114. package/dist/frontend/lowering/lower-containers.d.ts +9 -0
  115. package/dist/frontend/lowering/lower-containers.js +135 -36
  116. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  117. package/dist/frontend/lowering/lower-dgram.js +3 -2
  118. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  119. package/dist/frontend/lowering/lower-exprs.d.ts +2 -2
  120. package/dist/frontend/lowering/lower-exprs.js +531 -126
  121. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  122. package/dist/frontend/lowering/lower-generators.js +12 -1
  123. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  124. package/dist/frontend/lowering/lower-island.d.ts +2 -0
  125. package/dist/frontend/lowering/lower-island.js +32 -10
  126. package/dist/frontend/lowering/lower-island.js.map +1 -1
  127. package/dist/frontend/lowering/lower-modules.js +220 -17
  128. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  129. package/dist/frontend/lowering/lower-modules.test.d.ts +1 -0
  130. package/dist/frontend/lowering/lower-modules.test.js +39 -0
  131. package/dist/frontend/lowering/lower-modules.test.js.map +1 -0
  132. package/dist/frontend/lowering/lower-stmts.d.ts +7 -3
  133. package/dist/frontend/lowering/lower-stmts.js +135 -26
  134. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  135. package/dist/frontend/lowering/lower-stream.js +1 -1
  136. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  137. package/dist/frontend/lowering/lowerer.d.ts +27 -1
  138. package/dist/frontend/lowering/lowerer.js +172 -50
  139. package/dist/frontend/lowering/lowerer.js.map +1 -1
  140. package/dist/frontend/lowering/lowerer.test.js +149 -3
  141. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  142. package/dist/frontend/lowering/surfaces.d.ts +2 -0
  143. package/dist/frontend/lowering/surfaces.js +25 -8
  144. package/dist/frontend/lowering/surfaces.js.map +1 -1
  145. package/dist/frontend/lowering/text-decoder-encoding.d.ts +2 -0
  146. package/dist/frontend/lowering/text-decoder-encoding.js +5 -0
  147. package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
  148. package/dist/frontend/lowering/unregistered-class-types.test.js +3 -3
  149. package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
  150. package/dist/frontend/npm-static-prune.js +116 -34
  151. package/dist/frontend/npm-static-prune.js.map +1 -1
  152. package/dist/frontend/npm-static-prune.test.js +8 -0
  153. package/dist/frontend/npm-static-prune.test.js.map +1 -1
  154. package/dist/frontend/program.d.ts +1 -1
  155. package/dist/frontend/program.js +53 -24
  156. package/dist/frontend/program.js.map +1 -1
  157. package/dist/frontend/program.test.js +18 -0
  158. package/dist/frontend/program.test.js.map +1 -1
  159. package/dist/frontend/ts7/ast.js +4 -3
  160. package/dist/frontend/ts7/ast.js.map +1 -1
  161. package/dist/frontend/ts7/semantic-json.js +5 -10
  162. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  163. package/dist/frontend/type-mapper.d.ts +9 -1
  164. package/dist/frontend/type-mapper.js +90 -13
  165. package/dist/frontend/type-mapper.js.map +1 -1
  166. package/dist/frontend/type-mapper.test.js +23 -0
  167. package/dist/frontend/type-mapper.test.js.map +1 -1
  168. package/dist/frontend/union-discriminants.d.ts +1 -1
  169. package/dist/frontend/union-discriminants.js +2 -2
  170. package/dist/frontend/union-discriminants.js.map +1 -1
  171. package/dist/ir/analysis.js +2 -0
  172. package/dist/ir/analysis.js.map +1 -1
  173. package/dist/ir/ir.d.ts +52 -33
  174. package/dist/ir/ir.js +142 -42
  175. package/dist/ir/ir.js.map +1 -1
  176. package/dist/ir/ir.test.js +35 -0
  177. package/dist/ir/ir.test.js.map +1 -1
  178. package/dist/ir/serialize.js +15 -3
  179. package/dist/ir/serialize.js.map +1 -1
  180. package/dist/ir/serialize.test.js +5 -1
  181. package/dist/ir/serialize.test.js.map +1 -1
  182. package/dist/ir/validate.js +80 -11
  183. package/dist/ir/validate.js.map +1 -1
  184. package/dist/ir/validate.test.js +61 -1
  185. package/dist/ir/validate.test.js.map +1 -1
  186. package/dist/native/sanitizer.js +3 -1
  187. package/dist/native/sanitizer.js.map +1 -1
  188. package/dist/native/toolchain.d.ts +1 -1
  189. package/dist/native/toolchain.js +26 -6
  190. package/dist/native/toolchain.js.map +1 -1
  191. package/dist/native/toolchain.test.js +53 -1
  192. package/dist/native/toolchain.test.js.map +1 -1
  193. package/package.json +20 -20
  194. package/surface-manifest.json +56 -81
@@ -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":"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"}
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`
@@ -18,10 +18,26 @@ export function jsOpenObjectType(decl, type, shapes, unions) {
18
18
  return type;
19
19
  const arms = type.kind === "union" ? unions.get(type.unionId)?.arms : [type];
20
20
  const present = arms?.filter((arm) => arm.kind !== "undefinedT");
21
+ const parameter = ts.isParameter(decl) ? decl : decl.parent && ts.isParameter(decl.parent) ? decl.parent : null;
22
+ // Numeric array parameters in JavaScript also accept typed arrays. Keep
23
+ // their runtime storage at the boundary, including default [] parameters.
24
+ if (parameter && !parameter.dotDotDotToken && present?.length === 1 &&
25
+ present[0].kind === "array" && present[0].elem.kind === "f64")
26
+ return DYN;
27
+ // An unannotated JavaScript parameter's object default is a fallback,
28
+ // not a closed class contract. Published code routinely passes another
29
+ // implementation of the same protocol through a boxed callable.
30
+ if (parameter?.initializer && !parameter.type &&
31
+ present?.some((arm) => arm.kind === "object") &&
32
+ arms?.every((arm) => canConvertToDyn(arm, (id) => shapes.get(id), (id) => unions.get(id))))
33
+ return DYN;
21
34
  if (present?.length !== 1 || present[0].kind !== "record")
22
35
  return type;
23
36
  const shape = shapes.get(present[0].shapeId);
24
- return shape && shape.fields.length === 0 && !shape.indexValue && !shape.tuple ? DYN : type;
37
+ const unitOnly = (field) => isUnitType(field) || field.kind === "void" ||
38
+ field.kind === "union" && unions.get(field.unionId)?.arms.every(isUnitType) === true;
39
+ return shape && !shape.tuple && !shape.indexValue &&
40
+ (shape.fields.length === 0 || shape.fields.some((field) => unitOnly(field.type))) ? DYN : type;
25
41
  }
26
42
  /** The ambient TYPE names of the fetch slice. Under --dynamic their
27
43
  * values live in the embedded engine and map to island handles (jsval).
@@ -33,6 +49,7 @@ export function jsOpenObjectType(decl, type, shapes, unions) {
33
49
  * same names keep their ordinary structural representation. */
34
50
  export const ISLAND_AMBIENT_TYPES = [
35
51
  "Response",
52
+ "Request",
36
53
  "ResponseInit",
37
54
  "RequestInit",
38
55
  "Event",
@@ -100,6 +117,8 @@ function comparePriority(left, right) {
100
117
  * struct). Owned by the Lowerer; `mapType` needs it to intern the object
101
118
  * types it encounters, which is why it is threaded through as a parameter. */
102
119
  export class ShapeRegistry {
120
+ /** Existing layouts change only when a recursive placeholder closes. */
121
+ revision = 0;
103
122
  byKey = new Map();
104
123
  byId = new Map();
105
124
  /** Historical emit-order rank of the declaration-order metadata each
@@ -259,6 +278,7 @@ export class ShapeRegistry {
259
278
  shape.indexValue = indexValue;
260
279
  this.adoptDeclaredOrder(shape, declaredOrder);
261
280
  this.pendingRec.delete(id);
281
+ this.revision++;
262
282
  const key = this.keyOf(fields, false, indexValue);
263
283
  if (!this.byKey.has(key))
264
284
  this.byKey.set(key, id);
@@ -312,8 +332,11 @@ export class ShapeRegistry {
312
332
  * discriminator contract. An arm's index in that list IS its runtime tag.
313
333
  * Owned by the Lowerer; threaded through mapType like ShapeRegistry. */
314
334
  export class UnionRegistry {
335
+ /** Existing arm/discriminator contracts change when a placeholder closes. */
336
+ revision = 0;
315
337
  byKey = new Map();
316
338
  byId = new Map();
339
+ armTags = new Map();
317
340
  /** All interned unions in first-seen (`u0`, `u1`, ...) order. */
318
341
  unions = [];
319
342
  /** ts.Types currently being mapped — a back-reference to one is the
@@ -366,6 +389,8 @@ export class UnionRegistry {
366
389
  if (discriminant)
367
390
  def.discriminant = discriminant;
368
391
  this.pendingRec.delete(id);
392
+ this.armTags.delete(id);
393
+ this.revision++;
369
394
  const key = JSON.stringify([arms.map(typeKey), discriminant]);
370
395
  if (!this.byKey.has(key))
371
396
  this.byKey.set(key, id);
@@ -392,6 +417,29 @@ export class UnionRegistry {
392
417
  get(unionId) {
393
418
  return this.byId.get(unionId);
394
419
  }
420
+ /** Index large arm lists once. Exact equality still resolves type-key
421
+ * collisions, including optional function ABI flags. */
422
+ armTag(unionId, arm) {
423
+ const def = this.byId.get(unionId);
424
+ if (!def)
425
+ return -1;
426
+ if (def.arms.length < 8)
427
+ return def.arms.findIndex((candidate) => typeEquals(candidate, arm));
428
+ let tags = this.armTags.get(unionId);
429
+ if (!tags) {
430
+ tags = new Map();
431
+ def.arms.forEach((candidate, tag) => {
432
+ const key = typeKey(candidate);
433
+ const previous = tags.get(key);
434
+ if (previous)
435
+ previous.push(tag);
436
+ else
437
+ tags.set(key, [tag]);
438
+ });
439
+ this.armTags.set(unionId, tags);
440
+ }
441
+ return tags.get(typeKey(arm))?.find((tag) => typeEquals(def.arms[tag], arm)) ?? -1;
442
+ }
395
443
  }
396
444
  /** Human-readable rendering of an IrType for diagnostics (records expand to
397
445
  * their canonical field list, unions to their arms; `checker.typeToString`
@@ -717,11 +765,8 @@ export function containsUnion(t) {
717
765
  * sentinel; any/unknown ride dyn; undefined-only yields have no C value
718
766
  * form (null); else the mapped type.
719
767
  * - 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).
768
+ * the undefined arm); any/unknown carry checked values. A defaulted or
769
+ * inferred return channel can still return a value and must preserve it.
725
770
  * - next: void/undefined/never mean valueless resumes (the undefined
726
771
  * unit); any/unknown ride dyn; else the mapped type (`.next(v)` then
727
772
  * requires its argument — fenced at the call site).
@@ -744,9 +789,9 @@ function genChannels(yieldTs, retTs, nextTs, ctx) {
744
789
  }
745
790
  if (!yieldT)
746
791
  return null;
747
- const retT = retTs === undefined || retTs.flags & (UNITISH | ANYISH)
792
+ const retT = retTs === undefined || retTs.flags & UNITISH
748
793
  ? VOID
749
- : mapType(retTs, ctx);
794
+ : retTs.flags & ANYISH ? DYN : mapType(retTs, ctx);
750
795
  if (!retT || (retT.kind !== "void" && isUnitType(retT)))
751
796
  return null;
752
797
  const nextT = nextTs === undefined || nextTs.flags & UNITISH
@@ -1201,7 +1246,7 @@ function mapTypeInner(type, ctx) {
1201
1246
  }
1202
1247
  const fields = [];
1203
1248
  for (let i = 0; i < args.length; i++) {
1204
- let et = mapType(args[i], ctx);
1249
+ let et = !ctx.dynamic && (args[i].flags & ts.TypeFlags.Any) !== 0 ? DYN : mapType(args[i], ctx);
1205
1250
  // A unit-only element (`[number, undefined]`) rides the unit-only
1206
1251
  // union, the record-field rule.
1207
1252
  if (et?.kind === "void" && isUnitOnlyTsType(args[i], ctx.resolveTypeParam))
@@ -1495,7 +1540,7 @@ function mapTypeInner(type, ctx) {
1495
1540
  checker.declarationsOf(psym).some((d) => (ts.isInterfaceDeclaration(d) || ts.isClassDeclaration(d)) && ctx.isStdlibFile(d.getSourceFile()))) {
1496
1541
  return {
1497
1542
  kind: "record",
1498
- shapeId: ctx.shapes.intern([{ name: `%${psym.name}`, type: F64 }], false, undefined, []),
1543
+ 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
1544
  };
1500
1545
  }
1501
1546
  // string_decoder.StringDecoder: the decoder value is a two-field record
@@ -1562,6 +1607,10 @@ function mapTypeInner(type, ctx) {
1562
1607
  // read has its own lowering (errno/syscall/path stay per-member fences).
1563
1608
  if (isStdlibInterface("ErrnoException"))
1564
1609
  return { kind: "object", className: "%Error" };
1610
+ // spawn consumes a presence-sensitive option bag, including optional
1611
+ // stdio and env values. Keep it checked-dynamic for native normalization.
1612
+ if (isStdlibInterface("SpawnOptions"))
1613
+ return DYN;
1565
1614
  // The fetch ambient slice: under --dynamic these are island handles
1566
1615
  // exactly like npm-declared types. Static fetch has one deliberately
1567
1616
  // narrower native representation: Response is an opaque checked-
@@ -1705,6 +1754,8 @@ function mapTypeInner(type, ctx) {
1705
1754
  return F64;
1706
1755
  if (isStdlibInterface("ArrayBuffer") || isStdlibInterface("PropertyDescriptor") || isStdlibInterface("ProcessVersions"))
1707
1756
  return DYN;
1757
+ if (Object.values(BYTES_ELEMENT_NAME).some((name) => isStdlibInterface(`${name}Constructor`)))
1758
+ return DYN;
1708
1759
  if (isStdlibInterface("Uint8Array"))
1709
1760
  return bytesOf("u8");
1710
1761
  if (isStdlibInterface("Uint32Array"))
@@ -2053,6 +2104,9 @@ function mapTypeInner(type, ctx) {
2053
2104
  return null;
2054
2105
  return { kind: "promise", inner };
2055
2106
  }
2107
+ // Native collection iterators use checked runtime iterator objects.
2108
+ if (isStdlibInterface("MapIterator") || isStdlibInterface("SetIterator"))
2109
+ return DYN;
2056
2110
  // Generator<T, TReturn, TNext>, AsyncGenerator<T, TReturn, TNext> (and
2057
2111
  // the lib's IterableIterator<T, ...>, the older sync annotation spelling):
2058
2112
  // the generator kind. Channel normalization keeps the runtime honest:
@@ -2370,6 +2424,11 @@ function mapTypeInner(type, ctx) {
2370
2424
  const hybrid = mapHybridCallableIntersection(widened, ctx);
2371
2425
  if (hybrid)
2372
2426
  return hybrid;
2427
+ // Recursive and Symbol-keyed callable objects need their complete live
2428
+ // property table; dropping those members into a plain closure loses data.
2429
+ if (!ctx.dynamic && checker.getCallSignatures(widened).length > 0 &&
2430
+ checker.getPropertiesOfType(widened).length > 0)
2431
+ return DYN;
2373
2432
  }
2374
2433
  const callSigs = checker.getCallSignatures(widened);
2375
2434
  if (callSigs.length === 1) {
@@ -2410,6 +2469,12 @@ function mapTypeInner(type, ctx) {
2410
2469
  ts.isParameter(decl) &&
2411
2470
  (decl.questionToken !== undefined || decl.initializer !== undefined);
2412
2471
  let pt = mapType(checker.getTypeOfSymbol(p), ctx);
2472
+ // An inferred JavaScript binding pattern consumes an iterable; it
2473
+ // does not require the caller's array to have exactly this length.
2474
+ if (decl && ts.isParameter(decl) && ts.isArrayBindingPattern(decl.name) &&
2475
+ isJsSourceFile(decl.getSourceFile()) && !decl.type &&
2476
+ !/@(?:param|type)\b/.test(decl.getSourceFile().text.slice(decl.parent?.pos ?? decl.pos, decl.getStart())))
2477
+ pt = DYN;
2413
2478
  if (pt)
2414
2479
  pt = jsOpenObjectType(decl, pt, ctx.shapes, ctx.unions);
2415
2480
  // Belt and braces for non-strict type worlds: an optional param's
@@ -2443,7 +2508,10 @@ function mapTypeInner(type, ctx) {
2443
2508
  const sigDecl = checker.signatureDeclaration(sig);
2444
2509
  const jsUnitReturn = sigDecl !== undefined && isJsSourceFile(sigDecl.getSourceFile()) &&
2445
2510
  (retT.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)) !== 0;
2446
- const ret = jsUnitReturn ? DYN : retT.flags & ts.TypeFlags.Never ? VOID : mapType(retT, ctx);
2511
+ let ret = jsUnitReturn || (!ctx.dynamic && (retT.flags & ts.TypeFlags.Any) !== 0)
2512
+ ? DYN : retT.flags & ts.TypeFlags.Never ? VOID : mapType(retT, ctx);
2513
+ if (sigDecl && isJsSourceFile(sigDecl.getSourceFile()) && ret?.kind === "array" && ret.elem.kind === "f64")
2514
+ ret = DYN;
2447
2515
  if (!ret)
2448
2516
  return null;
2449
2517
  return typedRest
@@ -3465,8 +3533,11 @@ function recordProvenanceOk(t, ctx) {
3465
3533
  return true;
3466
3534
  const tSym = t.getSymbol();
3467
3535
  const decls = tSym ? checker.declarationsOf(tSym) : undefined;
3468
- if (!decls || decls.length === 0)
3469
- return false;
3536
+ if (!decls || decls.length === 0) {
3537
+ // Inferred destructuring parameters can have a synthesized anonymous
3538
+ // shape with no declaration or member symbols to trace to a source.
3539
+ return checker.getPropertiesOfType(t).every((property) => checker.declarationsOf(property).every((decl) => !decl.getSourceFile().isDeclarationFile || ctx.isExternalTypeFile(decl.getSourceFile())));
3540
+ }
3470
3541
  return !decls.some((d) => {
3471
3542
  const sf = d.getSourceFile();
3472
3543
  return sf.isDeclarationFile && !ctx.isExternalTypeFile(sf);
@@ -3687,6 +3758,10 @@ function mapRecordTypeInner(widened, ctx) {
3687
3758
  const computed = widened.isIntersectionType() || isMappedShape(widened);
3688
3759
  {
3689
3760
  const props = checker.getPropertiesOfType(widened);
3761
+ // Symbol-keyed records use the checked object's descriptor table. A
3762
+ // checker-internal __@ name is not a string field in a native struct.
3763
+ if (props.some((property) => property.name.startsWith("__@")))
3764
+ return DYN;
3690
3765
  // A computed shape with NO members is not a real empty record: inside a
3691
3766
  // generic body `Partial<T>` resolves to no members at all (keyof T is
3692
3767
  // still unknown there) — interning `{}` would be silently wrong. The
@@ -3807,6 +3882,8 @@ function mapRecordTypeInner(widened, ctx) {
3807
3882
  if ((pt === null || pt.kind === "jsval") && (fieldTs.flags & ts.TypeFlags.Any) !== 0 && constAssertedEmptyArrayProp(p, ctx)) {
3808
3883
  pt = arrayOf(unitOnlyUnion(ctx.unions));
3809
3884
  }
3885
+ if (pt === null && !ctx.dynamic && (fieldTs.flags & ts.TypeFlags.Any) !== 0)
3886
+ pt = DYN;
3810
3887
  // Unit-only FIELDS (`{ msg?: undefined }` — the discriminated-union
3811
3888
  // absent-field idiom — and `{ p: undefined }` spellings): the
3812
3889
  // unit-only union. The runtime value is the interned unit, JSON