@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
package/dist/ir/ir.js CHANGED
@@ -959,7 +959,7 @@ export function canMarshalTypedFuncIntoIsland(t, getRecord, getUnion) {
959
959
  * through a dyn value), properties ON function values, and params/results
960
960
  * outside the conversion domains (Maps, class instances, ...). Promises
961
961
  * CONVERT in (canConvertToDyn's promise arm — an async dyn-boxed closure's
962
- * return) but do not check OUT (`u as Promise<T>` stays fenced).
962
+ * return); checking OUT preserves the boxed Promise<unknown> payload ABI.
963
963
  */
964
964
  /** The runtime HANDLE kinds that cross the checked-dynamic boundary as
965
965
  * the checked-dynamic tree's HANDLE kind (SCR_DYN_HANDLE): boxed by REFERENCE (identity —
@@ -1016,7 +1016,7 @@ export function classDynViewSupported(fields, getRecord, getUnion) {
1016
1016
  * JSON-safe data, numeric typed arrays (retained views), identity-preserving class
1017
1017
  * references, undefined-armed unions of those arms, boxable function types,
1018
1018
  * and the runtime HANDLE kinds (boxed by reference — DYN_HANDLE_KINDS). */
1019
- export function canConvertToDyn(t, getRecord, getUnion) {
1019
+ export function canConvertToDyn(t, getRecord, getUnion, visiting = new Set()) {
1020
1020
  if (isJsonSafeType(t, getRecord, getUnion))
1021
1021
  return true;
1022
1022
  // numeric typed arrays and boxable functions are dyn kinds the walker boxes
@@ -1024,14 +1024,14 @@ export function canConvertToDyn(t, getRecord, getUnion) {
1024
1024
  // in records/arrays/unions. isJsonSafeType rejects them, but dynFrom
1025
1025
  // needs only that the walker can build the dyn value, so this composite
1026
1026
  // fold extends the JSON-safe core.
1027
- if (canBoxDynComposite(t, getRecord, getUnion))
1027
+ if (canBoxDynComposite(t, getRecord, getUnion, visiting))
1028
1028
  return true;
1029
1029
  if (t.kind === "bytes")
1030
1030
  return true;
1031
- // %Error converts as the checked-dynamic tree's error encoding ({%error, name, message,
1031
+ // Built-in errors convert as the checked-dynamic tree's error encoding ({%error, name, message,
1032
1032
  // code?} — the caughtToDyn shape, scr_dyn_from_error): the dyn 'error'
1033
1033
  // listener boundary (a mustCall-wrapped handler receiving the payload).
1034
- if (t.kind === "object" && t.className === "%Error")
1034
+ if (t.kind === "object" && RUNTIME_ERROR_CLASSES.has(t.className))
1035
1035
  return true;
1036
1036
  if (isDynTypedRefType(t))
1037
1037
  return true;
@@ -1040,7 +1040,7 @@ export function canConvertToDyn(t, getRecord, getUnion) {
1040
1040
  if (t.kind === "classval")
1041
1041
  return true;
1042
1042
  if (t.kind === "func")
1043
- return canBoxFuncIntoDyn(t, getRecord, getUnion);
1043
+ return canBoxFuncIntoDyn(t, getRecord, getUnion, visiting);
1044
1044
  if (DYN_HANDLE_KINDS.has(t.kind))
1045
1045
  return true;
1046
1046
  // Promises box by REFERENCE (SCR_DYN_PROMISE): promise<dyn> carries its
@@ -1052,7 +1052,7 @@ export function canConvertToDyn(t, getRecord, getUnion) {
1052
1052
  if (t.kind === "promise") {
1053
1053
  return (t.inner.kind === "dyn" ||
1054
1054
  t.inner.kind === "void" ||
1055
- canConvertToDyn(t.inner, getRecord, getUnion));
1055
+ canConvertToDyn(t.inner, getRecord, getUnion, visiting));
1056
1056
  }
1057
1057
  if (t.kind === "union") {
1058
1058
  const def = getUnion(t.unionId);
@@ -1062,18 +1062,29 @@ export function canConvertToDyn(t, getRecord, getUnion) {
1062
1062
  // boundary exactly like a bare func dynFrom).
1063
1063
  return !!def && def.arms.every((a) => a.kind === "undefinedT" || isJsonSafeType(a, getRecord, getUnion) ||
1064
1064
  isDynTypedRefType(a) || a.kind === "classval" || DYN_HANDLE_KINDS.has(a.kind) ||
1065
- (a.kind === "func" && canBoxFuncIntoDyn(a, getRecord, getUnion)) ||
1066
- (a.kind === "promise" && canConvertToDyn(a, getRecord, getUnion)));
1065
+ (a.kind === "func" && canBoxFuncIntoDyn(a, getRecord, getUnion, visiting)) ||
1066
+ (a.kind === "promise" && canConvertToDyn(a, getRecord, getUnion, visiting)));
1067
1067
  }
1068
1068
  return false;
1069
1069
  }
1070
1070
  /** The composite extension of the dynFrom domain: JSON-safe scalars plus
1071
1071
  * numeric typed arrays and boxable functions anywhere, recursing through records
1072
1072
  * (fields + index value), arrays, and unit-armed unions — exactly the
1073
- * sc_td_* walker's capability. Returns false for a composite carrying a
1074
- * kind the walker cannot box (Maps or handles nested in a record); those
1075
- * still fence. */
1073
+ * sc_td_* walker's capability. Map and Set payloads must also support
1074
+ * checked extraction back into native storage. Other unsupported nested
1075
+ * kinds retain their conversion fence. */
1076
1076
  function canBoxDynComposite(t, getRecord, getUnion, visiting = new Set()) {
1077
+ const key = `boxed:${typeKey(t)}`;
1078
+ if (visiting.has(key))
1079
+ return true;
1080
+ const result = canBoxDynCompositeAt(t, getRecord, getUnion, visiting);
1081
+ if (result)
1082
+ visiting.add(key);
1083
+ else
1084
+ clearDynConversionResults(visiting);
1085
+ return result;
1086
+ }
1087
+ function canBoxDynCompositeAt(t, getRecord, getUnion, visiting) {
1077
1088
  switch (t.kind) {
1078
1089
  case "f64":
1079
1090
  case "bigint":
@@ -1088,15 +1099,17 @@ function canBoxDynComposite(t, getRecord, getUnion, visiting = new Set()) {
1088
1099
  case "bytes":
1089
1100
  case "regex":
1090
1101
  case "url":
1102
+ case "searchParams":
1091
1103
  return true;
1092
1104
  case "func":
1093
- return canBoxFuncIntoDyn(t, getRecord, getUnion);
1105
+ return canBoxFuncIntoDyn(t, getRecord, getUnion, visiting);
1094
1106
  case "set":
1095
- return t.elem.kind === "dyn";
1107
+ return canConvertToDyn(t.elem, getRecord, getUnion, visiting) && canDynCheckTo(t.elem, getRecord, getUnion, visiting);
1096
1108
  case "map":
1097
- return t.key.kind === "dyn" && t.value.kind === "dyn";
1109
+ return canConvertToDyn(t.key, getRecord, getUnion, visiting) && canDynCheckTo(t.key, getRecord, getUnion, visiting) &&
1110
+ canConvertToDyn(t.value, getRecord, getUnion, visiting) && canDynCheckTo(t.value, getRecord, getUnion, visiting);
1098
1111
  case "object":
1099
- return t.className === "%Error" || isDynTypedRefType(t);
1112
+ return RUNTIME_ERROR_CLASSES.has(t.className) || isDynTypedRefType(t);
1100
1113
  case "array":
1101
1114
  return canBoxDynComposite(t.elem, getRecord, getUnion, visiting);
1102
1115
  case "record": {
@@ -1109,11 +1122,16 @@ function canBoxDynComposite(t, getRecord, getUnion, visiting = new Set()) {
1109
1122
  if (visiting.has(t.shapeId))
1110
1123
  return true;
1111
1124
  visiting.add(t.shapeId);
1112
- for (const field of shape.fields) {
1113
- if (!canBoxDynComposite(field.type, getRecord, getUnion, visiting))
1114
- return false;
1125
+ try {
1126
+ for (const field of shape.fields) {
1127
+ if (!canBoxDynComposite(field.type, getRecord, getUnion, visiting))
1128
+ return false;
1129
+ }
1130
+ return !shape.indexValue || canBoxDynComposite(shape.indexValue, getRecord, getUnion, visiting);
1131
+ }
1132
+ finally {
1133
+ visiting.delete(t.shapeId);
1115
1134
  }
1116
- return !shape.indexValue || canBoxDynComposite(shape.indexValue, getRecord, getUnion, visiting);
1117
1135
  }
1118
1136
  case "union": {
1119
1137
  const def = getUnion(t.unionId);
@@ -1122,11 +1140,16 @@ function canBoxDynComposite(t, getRecord, getUnion, visiting = new Set()) {
1122
1140
  if (visiting.has(t.unionId))
1123
1141
  return true;
1124
1142
  visiting.add(t.unionId);
1125
- for (const arm of def.arms) {
1126
- if (!canBoxDynComposite(arm, getRecord, getUnion, visiting))
1127
- return false;
1143
+ try {
1144
+ for (const arm of def.arms) {
1145
+ if (!canBoxDynComposite(arm, getRecord, getUnion, visiting))
1146
+ return false;
1147
+ }
1148
+ return true;
1149
+ }
1150
+ finally {
1151
+ visiting.delete(t.unionId);
1128
1152
  }
1129
- return true;
1130
1153
  }
1131
1154
  default:
1132
1155
  return false;
@@ -1137,7 +1160,27 @@ function canBoxDynComposite(t, getRecord, getUnion, visiting = new Set()) {
1137
1160
  * undefined-armed unions of JSON-safe arms, adaptable function types,
1138
1161
  * and the runtime HANDLE kinds (a tag-checked reference unwrap —
1139
1162
  * DYN_HANDLE_KINDS). */
1140
- export function canDynCheckTo(t, getRecord, getUnion) {
1163
+ export function canDynCheckTo(t, getRecord, getUnion, visiting = new Set()) {
1164
+ const key = `checked:${typeKey(t)}`;
1165
+ if (visiting.has(key))
1166
+ return true;
1167
+ const result = canDynCheckToAt(t, getRecord, getUnion, visiting);
1168
+ if (result)
1169
+ visiting.add(key);
1170
+ else
1171
+ clearDynConversionResults(visiting);
1172
+ return result;
1173
+ }
1174
+ /** Reuse completed subgraphs within one conversion query. A failed branch
1175
+ * invalidates successes that may depend on a coinductive back-edge to it;
1176
+ * active recursion keys remain until their owning calls unwind. */
1177
+ function clearDynConversionResults(visiting) {
1178
+ for (const key of visiting) {
1179
+ if (key.startsWith("boxed:") || key.startsWith("checked:"))
1180
+ visiting.delete(key);
1181
+ }
1182
+ }
1183
+ function canDynCheckToAt(t, getRecord, getUnion, visiting) {
1141
1184
  // Unknown fields keep an owned dyn subtree; checking the surrounding
1142
1185
  // record/array still validates its layout. This is broader than the
1143
1186
  // stringify/island JSON domain, which cannot assume opaque slots are
@@ -1145,26 +1188,48 @@ export function canDynCheckTo(t, getRecord, getUnion) {
1145
1188
  // unknown record fields with the undefined value.
1146
1189
  if (isJsonSafeAt(t, getRecord, getUnion, false, false, new Set(), true))
1147
1190
  return true;
1148
- if (t.kind === "bigint" || t.kind === "symbol" || t.kind === "set" && t.elem.kind === "dyn")
1149
- return true;
1150
- if (t.kind === "map" && t.key.kind === "dyn" && t.value.kind === "dyn")
1191
+ if (t.kind === "bigint" || t.kind === "symbol" || t.kind === "date" || t.kind === "searchParams")
1151
1192
  return true;
1193
+ if (t.kind === "map" || t.kind === "set")
1194
+ return canBoxDynComposite(t, getRecord, getUnion, visiting);
1152
1195
  if (t.kind === "bytes")
1153
1196
  return true;
1154
1197
  if (t.kind === "classval")
1155
1198
  return true;
1156
1199
  if (t.kind === "generator")
1157
1200
  return true;
1201
+ if (t.kind === "promise")
1202
+ return t.inner.kind === "dyn" || t.inner.kind === "void" || canDynCheckToAt(t.inner, getRecord, getUnion, visiting);
1158
1203
  if (t.kind === "object" && t.className === "%Error")
1159
1204
  return true;
1160
1205
  // Native class capsules already support checked extraction at ordinary
1161
1206
  // boundaries. Callable adapters use the same identity/brand check.
1162
1207
  if (isDynTypedRefType(t))
1163
1208
  return true;
1164
- if (t.kind === "array" && isDynTypedRefType(t.elem))
1165
- return true;
1209
+ if (t.kind === "array") {
1210
+ const key = typeKey(t);
1211
+ if (visiting.has(key))
1212
+ return false;
1213
+ visiting.add(key);
1214
+ const result = canDynCheckTo(t.elem, getRecord, getUnion, visiting);
1215
+ visiting.delete(key);
1216
+ return result;
1217
+ }
1218
+ if (t.kind === "record") {
1219
+ const key = typeKey(t);
1220
+ if (visiting.has(key))
1221
+ return false;
1222
+ const shape = getRecord(t.shapeId);
1223
+ if (!shape || shapeHasAccessorSlots(shape))
1224
+ return false;
1225
+ visiting.add(key);
1226
+ const result = shape.fields.every((field) => canDynCheckTo(field.type, getRecord, getUnion, visiting)) &&
1227
+ (!shape.indexValue || canDynCheckTo(shape.indexValue, getRecord, getUnion, visiting));
1228
+ visiting.delete(key);
1229
+ return result;
1230
+ }
1166
1231
  if (t.kind === "func")
1167
- return canAdaptDynFuncTo(t, getRecord, getUnion);
1232
+ return canAdaptDynFuncTo(t, getRecord, getUnion, visiting);
1168
1233
  if (DYN_HANDLE_KINDS.has(t.kind))
1169
1234
  return true;
1170
1235
  if (t.kind === "union") {
@@ -1172,7 +1237,7 @@ export function canDynCheckTo(t, getRecord, getUnion) {
1172
1237
  // Optional native callbacks and handles retain the same checked
1173
1238
  // conversion as their bare value. The union matcher selects the arm
1174
1239
  // before its adapter/extractor runs.
1175
- return !!def && def.arms.every((a) => isUnitType(a) || (a.kind !== "union" && canDynCheckTo(a, getRecord, getUnion)));
1240
+ return !!def && def.arms.every((a) => isUnitType(a) || (a.kind !== "union" && canDynCheckTo(a, getRecord, getUnion, visiting)));
1176
1241
  }
1177
1242
  return false;
1178
1243
  }
@@ -1180,7 +1245,7 @@ export function canDynCheckTo(t, getRecord, getUnion) {
1180
1245
  * every param dyn or dynCheckable (the thunk validates dyn arguments into
1181
1246
  * them), return void, dyn, or dyn-convertible (the thunk converts it
1182
1247
  * back). */
1183
- export function canBoxFuncIntoDyn(t, getRecord, getUnion) {
1248
+ export function canBoxFuncIntoDyn(t, getRecord, getUnion, visiting = new Set()) {
1184
1249
  return (t.kind === "func" &&
1185
1250
  // Typed rest occupies the final native array parameter; its thunk
1186
1251
  // checks a fresh array containing all remaining call arguments.
@@ -1191,23 +1256,23 @@ export function canBoxFuncIntoDyn(t, getRecord, getUnion) {
1191
1256
  // thunk (wrapped cells unwrap by reference, dyn data deep-copies) —
1192
1257
  // the checker-'any' callback params of the routed-dispatch lane
1193
1258
  // (`bag.list.map((x) => ...)` with x typed any).
1194
- t.params.every((p) => p.kind === "dyn" || p.kind === "jsval" || canDynCheckTo(p, getRecord, getUnion)) &&
1259
+ t.params.every((p) => p.kind === "dyn" || p.kind === "jsval" || canDynCheckTo(p, getRecord, getUnion, visiting)) &&
1195
1260
  // A jsval return converts through the by-reference wrap
1196
1261
  // (dynFromJsval — the thunk's result conversion), so engine-returning
1197
1262
  // callbacks box too: the routed-dispatch lane's flatMap shape.
1198
- (t.ret.kind === "void" || t.ret.kind === "dyn" || t.ret.kind === "jsval" || canConvertToDyn(t.ret, getRecord, getUnion)));
1263
+ (t.ret.kind === "void" || t.ret.kind === "dyn" || t.ret.kind === "jsval" || canConvertToDyn(t.ret, getRecord, getUnion, visiting)));
1199
1264
  }
1200
1265
  /** A closure type a dyn function value can ADAPT to (dynCheck): every
1201
1266
  * param dyn or dyn-convertible (the adapter converts typed arguments into
1202
1267
  * dyn), return void, dyn, or dynCheckable (the adapter validates the dyn
1203
1268
  * result). */
1204
- export function canAdaptDynFuncTo(t, getRecord, getUnion) {
1269
+ export function canAdaptDynFuncTo(t, getRecord, getUnion, visiting = new Set()) {
1205
1270
  return (t.kind === "func" &&
1206
1271
  // Checked rest and arguments packs retain all actual arguments. Typed
1207
1272
  // and island rest ABIs still require their own conversion plan.
1208
1273
  (t.rest !== true || t.restAbi === undefined) &&
1209
- t.params.every((p) => p.kind === "dyn" || canConvertToDyn(p, getRecord, getUnion)) &&
1210
- (t.ret.kind === "void" || t.ret.kind === "dyn" || canDynCheckTo(t.ret, getRecord, getUnion)));
1274
+ t.params.every((p) => p.kind === "dyn" || canConvertToDyn(p, getRecord, getUnion, visiting)) &&
1275
+ (t.ret.kind === "void" || t.ret.kind === "dyn" || canDynCheckTo(t.ret, getRecord, getUnion, visiting)));
1211
1276
  }
1212
1277
  /** The MARSHAL-direction boundary (jsMarshal): everything that can cross
1213
1278
  * out and back (canCrossIslandBoundary) plus qualifying closures — those
@@ -1267,7 +1332,9 @@ export function canExitIslandToType(t, getRecord, getUnion) {
1267
1332
  return false;
1268
1333
  }
1269
1334
  const DYN_ASYNC_LIB_FNS = new Set([
1270
- "async.awaitDyn", "timers.immediatePromise",
1335
+ "fs.callbackValue", "fs.callbackCall",
1336
+ "async.awaitDyn", "timers.immediatePromise", "crypto.native",
1337
+ "dyn.promiseAll",
1271
1338
  "process.onUncaughtException", "process.offUncaughtException",
1272
1339
  "process.onUnhandledRejection", "process.offUnhandledRejection",
1273
1340
  "process.onRejectionHandled", "process.offRejectionHandled",
@@ -1287,7 +1354,9 @@ function scanRuntimeFeatures(mod, stopAt) {
1287
1354
  processEvents: false, emitter: (mod.classes ?? []).some((c) => c.name === RUNTIME_EMITTER_CLASS),
1288
1355
  stream: (mod.classes ?? []).some((c) => RUNTIME_STREAM_CLASSES.has(c.name)),
1289
1356
  zlib: mod.embedded?.edges.some((e) => e.to === "node:zlib") ?? false,
1290
- dc: false, assert: false, dynInvoke: false, dynAsync: false, inspect: false,
1357
+ dc: false, assert: false, dynInvoke: false,
1358
+ dynAsync: mod.functions.some((fn) => fn.async === true && fn.generator === undefined && fn.returnType.kind === "dyn"),
1359
+ inspect: false,
1291
1360
  childProcess: false, net: false, symbol: false, bigint: false, searchParams: false,
1292
1361
  qs: false, parseArgs: false, fsWatch: false, nodeTest: false, dgram: false,
1293
1362
  http: false, http2: false, tls: false, tlsCa: false,
@@ -1298,7 +1367,7 @@ function scanRuntimeFeatures(mod, stopAt) {
1298
1367
  const fn = node.fn;
1299
1368
  if (fn === "regexp.escape" || fn === "dyn.nativeRegexIs")
1300
1369
  features.regex = true;
1301
- if (fn === "text.decodeLegacy")
1370
+ if (fn === "text.decodeLegacy" || fn === "text.decodeLegacyOptions" || fn === "text.decodeStream")
1302
1371
  features.legacyTextDecoder = true;
1303
1372
  if (fn.startsWith("fetch."))
1304
1373
  features.fetch = true;
@@ -1317,7 +1386,7 @@ function scanRuntimeFeatures(mod, stopAt) {
1317
1386
  features.dc = true;
1318
1387
  if (fn.startsWith("assert."))
1319
1388
  features.assert = true;
1320
- if (fn === "dyn.defineProps" || fn === "dyn.defineProperty" || fn === "dyn.objCreateWithProperties" || fn === "dyn.arrayProtoCall" || fn === "dyn.arrayPrototype")
1389
+ if (fn === "dyn.defineProps" || fn === "dyn.definePrototypeProps" || fn === "dyn.defineProperty" || fn === "dyn.objCreateWithProperties" || fn === "dyn.arrayProtoCall" || fn === "dyn.arrayPrototype" || fn === "dyn.functionApply" || fn === "dyn.builtinMethod")
1321
1390
  features.dynInvoke = true;
1322
1391
  if (DYN_ASYNC_LIB_FNS.has(fn))
1323
1392
  features.dynAsync = true;
@@ -1368,7 +1437,7 @@ function scanRuntimeFeatures(mod, stopAt) {
1368
1437
  features.regex = true;
1369
1438
  break;
1370
1439
  case "strIntrinsic":
1371
- if (node.method === "toLowerCase" || node.method === "toUpperCase")
1440
+ if (node.method === "toLowerCase" || node.method === "toUpperCase" || node.method === "normalize")
1372
1441
  features.regex = true;
1373
1442
  break;
1374
1443
  case "arrIntrinsic":
@@ -1749,6 +1818,7 @@ const LIB_MODE_REFUSED_PREFIXES = [
1749
1818
  // exclude — refuse the surface like the rest of the event-loop family.
1750
1819
  ["fs.existsChk", "the async fs callback surface (fs.exists)"],
1751
1820
  ["fs.renameCb", "the async fs callback surface (fs.rename)"],
1821
+ ["fs.callback", "the async filesystem callback surface"],
1752
1822
  ["zlib.deflateCb", "the async node:zlib callback surface"],
1753
1823
  ["zlib.inflateCb", "the async node:zlib callback surface"],
1754
1824
  ["zlib.deflateRawCb", "the async node:zlib callback surface"],
@@ -1968,6 +2038,22 @@ export function moduleLibNondeterministicSurface(mod) {
1968
2038
  * seed on `dynCheck` and `awaitExpr` nodes, which throw on validation
1969
2039
  * failure / promise rejection). */
1970
2040
  export const MAY_THROW_LIB_FNS = new Set([
2041
+ "text.encodeInto",
2042
+ "buffer.isAscii",
2043
+ "buffer.isUtf8",
2044
+ "buffer.transcode",
2045
+ "cp.spawnDynamic",
2046
+ "child.onDyn",
2047
+ "text.decoderEncoding",
2048
+ "dyn.construct",
2049
+ "dyn.reflectApply",
2050
+ "dyn.reflectGet",
2051
+ "dyn.reflectSet",
2052
+ "dyn.reflectDefine",
2053
+ "dyn.abstractEq",
2054
+ "text.decodeOptions",
2055
+ "text.decodeStream",
2056
+ "text.decodeLegacyOptions",
1971
2057
  "dyn.nativeSetNew",
1972
2058
  "ffi.argument",
1973
2059
  "ffi.memoryModule",
@@ -1979,6 +2065,10 @@ export const MAY_THROW_LIB_FNS = new Set([
1979
2065
  "weakMap.new",
1980
2066
  "weakSet.new",
1981
2067
  "dyn.fromEntries",
2068
+ "bytes.constructor",
2069
+ "bytes.instanceOf",
2070
+ "buffer.byteLenDyn",
2071
+ "bytes.construct",
1982
2072
  "arrayBuffer.new",
1983
2073
  "arrayBuffer.byteLengthGetter",
1984
2074
  "arrayBuffer.viewU8C",
@@ -1991,6 +2081,8 @@ export const MAY_THROW_LIB_FNS = new Set([
1991
2081
  "arrayBuffer.viewF32",
1992
2082
  "arrayBuffer.viewF64",
1993
2083
  "arrayBuffer.viewDV",
2084
+ "bytes.bufferSource",
2085
+ "text.decodeBufferSource",
1994
2086
  "bigint.parse",
1995
2087
  "bigint.fromF64",
1996
2088
  "bigint.div",
@@ -2005,12 +2097,17 @@ export const MAY_THROW_LIB_FNS = new Set([
2005
2097
  "bigint.bufferWrite",
2006
2098
  "bigint.dataViewGet",
2007
2099
  "bigint.dataViewSet",
2100
+ "fetch.requestNew",
2101
+ "fetch.headersNew",
2008
2102
  "fetch.responseNew",
2009
2103
  "fetch.abortTimeout",
2010
2104
  "fetch.abortAny",
2105
+ "abort.timeout",
2106
+ "abort.any",
2011
2107
  "fetch.streamNew",
2012
2108
  "fetch.streamFrom",
2013
2109
  "num.toFixed",
2110
+ "num.toStringRadix",
2014
2111
  "insp.jsonDyn",
2015
2112
  // diagnostics_channel: publish runs subscribers synchronously (a throw
2016
2113
  // propagates — the documented divergence from triggerUncaughtException);
@@ -2170,6 +2267,8 @@ export const MAY_THROW_LIB_FNS = new Set([
2170
2267
  "readable.unshift",
2171
2268
  "readable.unshiftStr",
2172
2269
  "readable.read",
2270
+ "readable.readDyn",
2271
+ "stream.onDyn",
2173
2272
  "readable.resume",
2174
2273
  "readable.pipe",
2175
2274
  "readable.unpipe",
@@ -2217,18 +2316,23 @@ export const MAY_THROW_LIB_FNS = new Set([
2217
2316
  // Error messages use the same coercion protocol before installing cause.
2218
2317
  "error.newOptions",
2219
2318
  "error.ctorOptions",
2319
+ "error.toString",
2320
+ "error.stack",
2220
2321
  "error.cause",
2221
2322
  "error.setCause",
2222
2323
  "error.deleteCause",
2223
2324
  "dyn.objectTag",
2224
2325
  // Numeric coercion runs user valueOf/toString — throws propagate.
2225
2326
  "dyn.numberConstructor",
2327
+ "dyn.bigintConstructor",
2226
2328
  "dyn.toNumberCoerce",
2227
2329
  "dyn.add",
2228
2330
  "dyn.arithmetic",
2331
+ "dyn.compare",
2229
2332
  "dyn.bitwise",
2230
2333
  "dyn.proxyNew",
2231
2334
  "dyn.classBasePrototype",
2335
+ "dyn.classInherit",
2232
2336
  "dyn.classSuper",
2233
2337
  "dyn.hasKey",
2234
2338
  "child.kill",
@@ -2271,9 +2375,11 @@ export const MAY_THROW_LIB_FNS = new Set([
2271
2375
  "date.nativeNew",
2272
2376
  "date.checkedValue",
2273
2377
  "util.parseArgs",
2378
+ "util.parseEnv",
2274
2379
  // decodeURIComponent throws the spec's URIError on bad hex/invalid
2275
2380
  // UTF-8 octets (encodeURIComponent never throws — see the IrLibFn doc).
2276
2381
  "str.decodeUriComponent",
2382
+ "str.decodeUri",
2277
2383
  // The base64 globals: atob/btoa throw the catchable DOMException
2278
2384
  // InvalidCharacterError on malformed input; the zero-argument form
2279
2385
  // always throws Node's TypeError [ERR_MISSING_ARGS].
@@ -2298,6 +2404,7 @@ export const MAY_THROW_LIB_FNS = new Set([
2298
2404
  "dyn.propertyIsEnumerable",
2299
2405
  "dyn.assign",
2300
2406
  "dyn.copyDataProperties",
2407
+ "dyn.objectRest",
2301
2408
  // variadic Object.assign: spread flattening throws V8's spread-call
2302
2409
  // TypeErrors; the final copy throws ToObject on a nullish target
2303
2410
  "dyn.packPushSpread",
@@ -2308,6 +2415,7 @@ export const MAY_THROW_LIB_FNS = new Set([
2308
2415
  "dyn.getPrototype",
2309
2416
  "dyn.setPrototype",
2310
2417
  "dyn.getOwnPropertyNames",
2418
+ "dyn.ownKeys",
2311
2419
  "dyn.getOwnPropertySymbols",
2312
2420
  "dyn.getOwnPropertyDescriptors",
2313
2421
  "dyn.preventExtensions",
@@ -2320,12 +2428,15 @@ export const MAY_THROW_LIB_FNS = new Set([
2320
2428
  // new RegExp compiles the pattern eagerly: an invalid pattern or flag
2321
2429
  // throws Node's catchable SyntaxError at construction.
2322
2430
  "regex.new",
2431
+ "regex.resetLastIndex",
2323
2432
  "regex.newChecked",
2324
2433
  "dyn.keySet",
2325
2434
  "dyn.keySetComputed",
2326
2435
  "process.builtinId",
2327
2436
  "process.builtinModule",
2328
2437
  "process.builtinUnsupported",
2438
+ "fs.callbackValue",
2439
+ "fs.callbackCall",
2329
2440
  "dyn.keyDelete",
2330
2441
  "dyn.keyDeleteComputed",
2331
2442
  "dyn.hasKeyComputed",
@@ -2343,10 +2454,14 @@ export const MAY_THROW_LIB_FNS = new Set([
2343
2454
  "dyn.toString",
2344
2455
  "string.fromCodePoint",
2345
2456
  "dyn.defineProps",
2457
+ "dyn.definePrototypeProps",
2458
+ "dyn.bagGet",
2459
+ "dyn.bagSet",
2346
2460
  "dyn.defineProperty",
2347
2461
  "dyn.getOwnPropertyDescriptor",
2348
2462
  "dyn.arrayProtoCall",
2349
2463
  "process.chdir",
2464
+ "process.loadEnvFile",
2350
2465
  "fs.realpathSync",
2351
2466
  "fs.realpathNativeSync",
2352
2467
  "fs.readFileSync",
@@ -2372,6 +2487,7 @@ export const MAY_THROW_LIB_FNS = new Set([
2372
2487
  // on a row that is not a [name, value] pair. The rest of the sp family
2373
2488
  // never throws.
2374
2489
  "sp.fromPairs",
2490
+ "sp.newChecked",
2375
2491
  "fs.statSync",
2376
2492
  "crypto.randomBytesToString",
2377
2493
  "crypto.randomBytes",
@@ -2396,6 +2512,10 @@ export const MAY_THROW_LIB_FNS = new Set([
2396
2512
  "crypto.pbkdf2",
2397
2513
  "crypto.randomBytesCb",
2398
2514
  "crypto.pbkdf2Cb",
2515
+ "crypto.hkdf",
2516
+ "crypto.hkdfCb",
2517
+ "crypto.scrypt",
2518
+ "crypto.scryptCb",
2399
2519
  "buffer.concat",
2400
2520
  "buffer.concatLen",
2401
2521
  "buffer.fromDyn",
@@ -2493,6 +2613,10 @@ export const MAY_THROW_LIB_FNS = new Set([
2493
2613
  "fs.fstatSync",
2494
2614
  "fs.fchmodSync",
2495
2615
  "fs.fsyncSync",
2616
+ "fs.fdatasyncSync",
2617
+ "fs.ftruncateSync",
2618
+ "fs.readvSync",
2619
+ "fs.writevSync",
2496
2620
  "fs.linkSync",
2497
2621
  "fs.writeFileModeSync",
2498
2622
  "fs.mkdirModeSync",