@scriptc/compiler 0.4.6 → 0.4.7

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 (652) hide show
  1. package/ambient/node-fallback/events.d.ts +6 -1
  2. package/ambient/node-fallback/fs-promises.d.ts +1 -1
  3. package/ambient/node-fallback/fs.d.ts +54 -10
  4. package/ambient/node-fallback/http.d.ts +3 -1
  5. package/ambient/node-fallback/net.d.ts +19 -0
  6. package/ambient/node-fallback/querystring.d.ts +3 -3
  7. package/ambient/scriptc-node-fallback.d.ts +58 -13
  8. package/dist/backend/executable-features.js +13 -0
  9. package/dist/backend/executable-features.js.map +1 -1
  10. package/dist/backend/immutability.d.ts +12 -1
  11. package/dist/backend/immutability.js +50 -4
  12. package/dist/backend/immutability.js.map +1 -1
  13. package/dist/backend/immutability.test.js +95 -1
  14. package/dist/backend/immutability.test.js.map +1 -1
  15. package/dist/backend/library-pack.js +2 -0
  16. package/dist/backend/library-pack.js.map +1 -1
  17. package/dist/backend/linker.d.ts +11 -0
  18. package/dist/backend/linker.js +31 -3
  19. package/dist/backend/linker.js.map +1 -1
  20. package/dist/backend/lld.d.ts +7 -2
  21. package/dist/backend/lld.js +5 -3
  22. package/dist/backend/lld.js.map +1 -1
  23. package/dist/backend/lld.test.js +10 -4
  24. package/dist/backend/lld.test.js.map +1 -1
  25. package/dist/backend/llvm/constant-callbacks.test.js +50 -1
  26. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  27. package/dist/backend/llvm/cpu-dispatch.js +6 -5
  28. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  29. package/dist/backend/llvm/dyn.d.ts +53 -1
  30. package/dist/backend/llvm/dyn.js +221 -9
  31. package/dist/backend/llvm/dyn.js.map +1 -1
  32. package/dist/backend/llvm/emit-function.js +1 -1
  33. package/dist/backend/llvm/emit-function.js.map +1 -1
  34. package/dist/backend/llvm/emit-module.js +148 -50
  35. package/dist/backend/llvm/emit-module.js.map +1 -1
  36. package/dist/backend/llvm/emit-statements.js +39 -19
  37. package/dist/backend/llvm/emit-statements.js.map +1 -1
  38. package/dist/backend/llvm/emitter.d.ts +29 -2
  39. package/dist/backend/llvm/emitter.js +86 -7
  40. package/dist/backend/llvm/emitter.js.map +1 -1
  41. package/dist/backend/llvm/expr-calls.d.ts +4 -1
  42. package/dist/backend/llvm/expr-calls.js +20 -4
  43. package/dist/backend/llvm/expr-calls.js.map +1 -1
  44. package/dist/backend/llvm/expr-dynamic.js +209 -16
  45. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  46. package/dist/backend/llvm/expr-primitives.js +94 -11
  47. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  48. package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
  49. package/dist/backend/llvm/expr-stream-bridges.js +42 -2
  50. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  51. package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
  52. package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
  53. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  54. package/dist/backend/llvm/integer-values.d.ts +2 -0
  55. package/dist/backend/llvm/integer-values.js +6 -0
  56. package/dist/backend/llvm/integer-values.js.map +1 -1
  57. package/dist/backend/llvm/js-ic.d.ts +38 -0
  58. package/dist/backend/llvm/js-ic.js +295 -1
  59. package/dist/backend/llvm/js-ic.js.map +1 -1
  60. package/dist/backend/llvm/lib-dispatch.js +20 -0
  61. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  62. package/dist/backend/llvm/lib-filesystem.js +116 -11
  63. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  64. package/dist/backend/llvm/lib-process.js +136 -24
  65. package/dist/backend/llvm/lib-process.js.map +1 -1
  66. package/dist/backend/llvm/lib-shared.js +70 -0
  67. package/dist/backend/llvm/lib-shared.js.map +1 -1
  68. package/dist/backend/llvm/lib-stream.js +67 -0
  69. package/dist/backend/llvm/lib-stream.js.map +1 -1
  70. package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
  71. package/dist/backend/llvm/loop-entry-versions.js +43 -21
  72. package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
  73. package/dist/backend/llvm/loop-state.d.ts +7 -1
  74. package/dist/backend/llvm/loop-state.js +20 -2
  75. package/dist/backend/llvm/loop-state.js.map +1 -1
  76. package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
  77. package/dist/backend/llvm/map-number-lookup.js +7 -3
  78. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  79. package/dist/backend/llvm/map-number-lookup.test.js +52 -11
  80. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  81. package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
  82. package/dist/backend/llvm/receiver-brackets.test.js +68 -0
  83. package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
  84. package/dist/backend/llvm/record-views.d.ts +22 -2
  85. package/dist/backend/llvm/record-views.js +139 -10
  86. package/dist/backend/llvm/record-views.js.map +1 -1
  87. package/dist/backend/llvm/record-views.test.js +76 -0
  88. package/dist/backend/llvm/record-views.test.js.map +1 -1
  89. package/dist/backend/llvm/reference-writes.js +1 -0
  90. package/dist/backend/llvm/reference-writes.js.map +1 -1
  91. package/dist/backend/llvm/shapes.d.ts +3 -0
  92. package/dist/backend/llvm/shapes.js +18 -3
  93. package/dist/backend/llvm/shapes.js.map +1 -1
  94. package/dist/backend/llvm/shapes.test.js +4 -0
  95. package/dist/backend/llvm/shapes.test.js.map +1 -1
  96. package/dist/backend/llvm/speculative-integers.d.ts +10 -1
  97. package/dist/backend/llvm/speculative-integers.js +59 -8
  98. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  99. package/dist/backend/llvm/unwind-abi.d.ts +3 -3
  100. package/dist/backend/llvm/unwind-abi.js +8 -3
  101. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  102. package/dist/backend/llvm/walkers.js +1 -1
  103. package/dist/backend/llvm/walkers.js.map +1 -1
  104. package/dist/backend/native/contracts.d.ts +54 -0
  105. package/dist/backend/native/executable.js +87 -5
  106. package/dist/backend/native/executable.js.map +1 -1
  107. package/dist/backend/native/library.js +1 -1
  108. package/dist/backend/native/library.js.map +1 -1
  109. package/dist/backend/native/runtime-inputs.js +5 -1
  110. package/dist/backend/native/runtime-inputs.js.map +1 -1
  111. package/dist/backend/native/vendor.d.ts +1 -1
  112. package/dist/backend/native/vendor.js +1 -1
  113. package/dist/backend/native/vendor.js.map +1 -1
  114. package/dist/backend/native-codegen.js +3 -0
  115. package/dist/backend/native-codegen.js.map +1 -1
  116. package/dist/backend/native-link-info-core.d.ts +43 -0
  117. package/dist/backend/native-link-info-core.js.map +1 -1
  118. package/dist/backend/native-link-info.js +1 -0
  119. package/dist/backend/native-link-info.js.map +1 -1
  120. package/dist/backend/native-profile.d.ts +4 -1
  121. package/dist/backend/native-profile.js +12 -1
  122. package/dist/backend/native-profile.js.map +1 -1
  123. package/dist/backend/native-profile.test.js +10 -0
  124. package/dist/backend/native-profile.test.js.map +1 -1
  125. package/dist/backend/publication.d.ts +4 -1
  126. package/dist/backend/publication.js +4 -2
  127. package/dist/backend/publication.js.map +1 -1
  128. package/dist/backend/runtime-abi.d.ts +2 -2
  129. package/dist/backend/runtime-abi.js +2 -2
  130. package/dist/backend/runtime-pack-core.d.ts +31 -7
  131. package/dist/backend/runtime-pack-core.js +21 -1
  132. package/dist/backend/runtime-pack-core.js.map +1 -1
  133. package/dist/backend/runtime-pack-native.d.ts +18 -1
  134. package/dist/backend/runtime-pack-native.js +138 -29
  135. package/dist/backend/runtime-pack-native.js.map +1 -1
  136. package/dist/backend/runtime-pack-native.test.js +166 -4
  137. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  138. package/dist/backend/runtime-pack-targets.test.js +3 -1
  139. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  140. package/dist/backend/runtime-pack.d.ts +7 -0
  141. package/dist/backend/runtime-pack.js +25 -3
  142. package/dist/backend/runtime-pack.js.map +1 -1
  143. package/dist/backend/runtime-pack.test.js +3 -11
  144. package/dist/backend/runtime-pack.test.js.map +1 -1
  145. package/dist/backend/vendor-archives.d.ts +4 -1
  146. package/dist/backend/vendor-archives.js +264 -3
  147. package/dist/backend/vendor-archives.js.map +1 -1
  148. package/dist/backend/vendor-inputs.d.ts +36 -0
  149. package/dist/backend/vendor-inputs.js +42 -0
  150. package/dist/backend/vendor-inputs.js.map +1 -1
  151. package/dist/backend/vendor-inputs.test.js +28 -1
  152. package/dist/backend/vendor-inputs.test.js.map +1 -1
  153. package/dist/backend/warm-cache.js +2 -0
  154. package/dist/backend/warm-cache.js.map +1 -1
  155. package/dist/compat/fetch-profile.d.ts +7 -1
  156. package/dist/compat/fetch-profile.js +23 -10
  157. package/dist/compat/fetch-profile.js.map +1 -1
  158. package/dist/compile-types.d.ts +7 -0
  159. package/dist/contracts/check.d.ts +3 -0
  160. package/dist/contracts/check.js +18 -5
  161. package/dist/contracts/check.js.map +1 -1
  162. package/dist/coverage/surface-manifest.js +1 -1
  163. package/dist/coverage/surface-manifest.js.map +1 -1
  164. package/dist/diagnostics/codes.d.ts +6 -0
  165. package/dist/diagnostics/codes.js +6 -0
  166. package/dist/diagnostics/codes.js.map +1 -1
  167. package/dist/diagnostics/diagnostic.d.ts +50 -0
  168. package/dist/diagnostics/diagnostic.js +142 -3
  169. package/dist/diagnostics/diagnostic.js.map +1 -1
  170. package/dist/diagnostics/dynamic-tier.js +3 -1
  171. package/dist/diagnostics/dynamic-tier.js.map +1 -1
  172. package/dist/executable/executable-cache.d.ts +29 -0
  173. package/dist/executable/executable-cache.js +18 -0
  174. package/dist/executable/executable-cache.js.map +1 -1
  175. package/dist/executable/executable-cache.test.js +5 -1
  176. package/dist/executable/executable-cache.test.js.map +1 -1
  177. package/dist/executable/prepare.d.ts +13 -3
  178. package/dist/executable/prepare.js +271 -18
  179. package/dist/executable/prepare.js.map +1 -1
  180. package/dist/frontend/early-errors.d.ts +14 -0
  181. package/dist/frontend/early-errors.js +305 -0
  182. package/dist/frontend/early-errors.js.map +1 -0
  183. package/dist/frontend/early-errors.test.d.ts +1 -0
  184. package/dist/frontend/early-errors.test.js +42 -0
  185. package/dist/frontend/early-errors.test.js.map +1 -0
  186. package/dist/frontend/inferred-js-diagnostics.test.js +23 -0
  187. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  188. package/dist/frontend/input-tracker.d.ts +47 -0
  189. package/dist/frontend/input-tracker.js +173 -36
  190. package/dist/frontend/input-tracker.js.map +1 -1
  191. package/dist/frontend/input-tracker.test.js +86 -2
  192. package/dist/frontend/input-tracker.test.js.map +1 -1
  193. package/dist/frontend/js-inference.d.ts +2 -0
  194. package/dist/frontend/js-inference.js +18 -0
  195. package/dist/frontend/js-inference.js.map +1 -0
  196. package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
  197. package/dist/frontend/lowering/binding-analysis.js +65 -1
  198. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  199. package/dist/frontend/lowering/builtin-calls.js +9 -0
  200. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  201. package/dist/frontend/lowering/builtin-namespaces.d.ts +1 -1
  202. package/dist/frontend/lowering/builtin-namespaces.js +19 -2
  203. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  204. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
  205. package/dist/frontend/lowering/builtins/child-process-methods.js +50 -10
  206. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  207. package/dist/frontend/lowering/builtins/child-process.js +5 -1
  208. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  209. package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
  210. package/dist/frontend/lowering/builtins/dates.js +23 -1
  211. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  212. package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
  213. package/dist/frontend/lowering/builtins/environment.js +213 -2
  214. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  215. package/dist/frontend/lowering/builtins/filesystem-calls.js +47 -16
  216. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  217. package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
  218. package/dist/frontend/lowering/builtins/filesystem.js +185 -16
  219. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  220. package/dist/frontend/lowering/builtins/module-calls.js +39 -2
  221. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  222. package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
  223. package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
  224. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  225. package/dist/frontend/lowering/builtins/operating-system.d.ts +3 -2
  226. package/dist/frontend/lowering/builtins/operating-system.js +5 -4
  227. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/process.d.ts +17 -1
  229. package/dist/frontend/lowering/builtins/process.js +285 -19
  230. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
  232. package/dist/frontend/lowering/builtins/querystring.js +202 -18
  233. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/readline.js +21 -3
  235. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  236. package/dist/frontend/lowering/builtins/reflection.js +60 -1
  237. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  238. package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
  239. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  240. package/dist/frontend/lowering/builtins/url.js +20 -1
  241. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  242. package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
  243. package/dist/frontend/lowering/builtins/v8.js +7 -5
  244. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  245. package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
  246. package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
  247. package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
  248. package/dist/frontend/lowering/call-signatures.js +77 -0
  249. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  250. package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
  251. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  252. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  253. package/dist/frontend/lowering/cjs-inline-require.js +5 -0
  254. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  255. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +5 -0
  256. package/dist/frontend/lowering/class-dynamic-dispatch.js +114 -0
  257. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  258. package/dist/frontend/lowering/class-protocols.js +59 -10
  259. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  260. package/dist/frontend/lowering/class-runtime-statics.js +15 -0
  261. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  262. package/dist/frontend/lowering/class-views.d.ts +13 -0
  263. package/dist/frontend/lowering/class-views.js +51 -0
  264. package/dist/frontend/lowering/class-views.js.map +1 -0
  265. package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
  266. package/dist/frontend/lowering/coercions/function-adapters.js +54 -10
  267. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  268. package/dist/frontend/lowering/coercions/state.d.ts +7 -0
  269. package/dist/frontend/lowering/coercions/state.js +7 -0
  270. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  271. package/dist/frontend/lowering/coercions/structural-plans.js +60 -3
  272. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  273. package/dist/frontend/lowering/coercions/structural.js +29 -1
  274. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  275. package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
  276. package/dist/frontend/lowering/containers/array-callbacks.js +132 -28
  277. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  278. package/dist/frontend/lowering/containers/array-construction.js +16 -5
  279. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  280. package/dist/frontend/lowering/containers/array-methods.js +16 -0
  281. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  282. package/dist/frontend/lowering/containers/bytes.js +4 -0
  283. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  284. package/dist/frontend/lowering/containers/callback-arguments.d.ts +11 -0
  285. package/dist/frontend/lowering/containers/callback-arguments.js +53 -0
  286. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  287. package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
  288. package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
  289. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  290. package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
  291. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  292. package/dist/frontend/lowering/expressions/array-literals.d.ts +14 -0
  293. package/dist/frontend/lowering/expressions/array-literals.js +26 -10
  294. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  295. package/dist/frontend/lowering/expressions/binary.js +104 -12
  296. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  297. package/dist/frontend/lowering/expressions/element-access.js +121 -4
  298. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  299. package/dist/frontend/lowering/expressions/identifiers.js +143 -3
  300. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  301. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
  302. package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
  303. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  304. package/dist/frontend/lowering/expressions/narrowing.js +25 -1
  305. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  306. package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
  307. package/dist/frontend/lowering/expressions/object-literals.js +778 -229
  308. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  309. package/dist/frontend/lowering/expressions/optional-chains.js +66 -20
  310. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  311. package/dist/frontend/lowering/expressions/property-access.d.ts +31 -0
  312. package/dist/frontend/lowering/expressions/property-access.js +796 -12
  313. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  314. package/dist/frontend/lowering/expressions/relational.js +29 -1
  315. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  316. package/dist/frontend/lowering/expressions/typeof.js +17 -0
  317. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  318. package/dist/frontend/lowering/expressions/updates.js +132 -17
  319. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  320. package/dist/frontend/lowering/frozen-records.d.ts +6 -0
  321. package/dist/frontend/lowering/frozen-records.js +10 -4
  322. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  323. package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
  324. package/dist/frontend/lowering/frozen-records.test.js +44 -0
  325. package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
  326. package/dist/frontend/lowering/function-names.d.ts +9 -0
  327. package/dist/frontend/lowering/function-names.js +95 -0
  328. package/dist/frontend/lowering/function-names.js.map +1 -0
  329. package/dist/frontend/lowering/function-returns.js +5 -3
  330. package/dist/frontend/lowering/function-returns.js.map +1 -1
  331. package/dist/frontend/lowering/generic-functions.d.ts +49 -0
  332. package/dist/frontend/lowering/generic-functions.js +365 -7
  333. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  334. package/dist/frontend/lowering/global-values.d.ts +9 -0
  335. package/dist/frontend/lowering/global-values.js +44 -0
  336. package/dist/frontend/lowering/global-values.js.map +1 -1
  337. package/dist/frontend/lowering/handle-properties.js +34 -1
  338. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  339. package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
  340. package/dist/frontend/lowering/key-order-witness.js +546 -5
  341. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  342. package/dist/frontend/lowering/lib-boundary.js +14 -0
  343. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  344. package/dist/frontend/lowering/lower-assert.js +110 -1
  345. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  346. package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
  347. package/dist/frontend/lowering/lower-builtin-values.js +332 -58
  348. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  349. package/dist/frontend/lowering/lower-calls.d.ts +22 -1
  350. package/dist/frontend/lowering/lower-calls.js +427 -48
  351. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  352. package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
  353. package/dist/frontend/lowering/lower-calls.test.js +78 -0
  354. package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
  355. package/dist/frontend/lowering/lower-classes.d.ts +16 -5
  356. package/dist/frontend/lowering/lower-classes.js +168 -51
  357. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  358. package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -0
  359. package/dist/frontend/lowering/lower-event-emitter.js +383 -41
  360. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  361. package/dist/frontend/lowering/lower-exprs.d.ts +14 -0
  362. package/dist/frontend/lowering/lower-exprs.js +25 -0
  363. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  364. package/dist/frontend/lowering/lower-functions.js +2 -0
  365. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  366. package/dist/frontend/lowering/lower-inspect.js +80 -33
  367. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  368. package/dist/frontend/lowering/lower-modules.js +87 -25
  369. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  370. package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
  371. package/dist/frontend/lowering/lower-node-island.js +456 -61
  372. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  373. package/dist/frontend/lowering/lower-server.js +160 -9
  374. package/dist/frontend/lowering/lower-server.js.map +1 -1
  375. package/dist/frontend/lowering/lower-shared-modules.js +13 -1
  376. package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
  377. package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
  378. package/dist/frontend/lowering/lower-stdlib.js +32 -18
  379. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  380. package/dist/frontend/lowering/lower-stmts.d.ts +21 -4
  381. package/dist/frontend/lowering/lower-stmts.js +580 -103
  382. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  383. package/dist/frontend/lowering/lower-stream.js +126 -8
  384. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  385. package/dist/frontend/lowering/lower-timers.js +133 -21
  386. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  387. package/dist/frontend/lowering/lowerer.d.ts +139 -3
  388. package/dist/frontend/lowering/lowerer.js +579 -43
  389. package/dist/frontend/lowering/lowerer.js.map +1 -1
  390. package/dist/frontend/lowering/lowerer.test.js +1 -1
  391. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  392. package/dist/frontend/lowering/module-namespace-elements.js +15 -0
  393. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  394. package/dist/frontend/lowering/new-target.js +2 -2
  395. package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
  396. package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
  397. package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
  398. package/dist/frontend/lowering/partial-assertions.d.ts +39 -0
  399. package/dist/frontend/lowering/partial-assertions.js +195 -0
  400. package/dist/frontend/lowering/partial-assertions.js.map +1 -0
  401. package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
  402. package/dist/frontend/lowering/primitive-wrappers.js +220 -0
  403. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
  404. package/dist/frontend/lowering/private-statics.d.ts +46 -0
  405. package/dist/frontend/lowering/private-statics.js +322 -0
  406. package/dist/frontend/lowering/private-statics.js.map +1 -0
  407. package/dist/frontend/lowering/record-sources.d.ts +12 -1
  408. package/dist/frontend/lowering/record-sources.js +60 -0
  409. package/dist/frontend/lowering/record-sources.js.map +1 -1
  410. package/dist/frontend/lowering/strict-equality.d.ts +4 -0
  411. package/dist/frontend/lowering/strict-equality.js +14 -0
  412. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  413. package/dist/frontend/lowering/surfaces.d.ts +27 -0
  414. package/dist/frontend/lowering/surfaces.js +135 -62
  415. package/dist/frontend/lowering/surfaces.js.map +1 -1
  416. package/dist/frontend/lowering/unit-journal.d.ts +128 -17
  417. package/dist/frontend/lowering/unit-journal.js +310 -53
  418. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  419. package/dist/frontend/lowering/unit-journal.test.js +91 -3
  420. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  421. package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
  422. package/dist/frontend/lowering/unit-reuse.js +1008 -0
  423. package/dist/frontend/lowering/unit-reuse.js.map +1 -0
  424. package/dist/frontend/lowering/width-lift.d.ts +12 -0
  425. package/dist/frontend/npm-file-import.test.d.ts +1 -0
  426. package/dist/frontend/npm-file-import.test.js +76 -0
  427. package/dist/frontend/npm-file-import.test.js.map +1 -0
  428. package/dist/frontend/npm-static.js +17 -2
  429. package/dist/frontend/npm-static.js.map +1 -1
  430. package/dist/frontend/npm.d.ts +9 -0
  431. package/dist/frontend/npm.js +82 -0
  432. package/dist/frontend/npm.js.map +1 -1
  433. package/dist/frontend/pipeline-native.js +2 -1
  434. package/dist/frontend/pipeline-native.js.map +1 -1
  435. package/dist/frontend/pipeline.d.ts +4 -0
  436. package/dist/frontend/pipeline.js +68 -7
  437. package/dist/frontend/pipeline.js.map +1 -1
  438. package/dist/frontend/program-node.d.ts +3 -0
  439. package/dist/frontend/program-node.js +13 -6
  440. package/dist/frontend/program-node.js.map +1 -1
  441. package/dist/frontend/program.d.ts +9 -0
  442. package/dist/frontend/program.js +159 -7
  443. package/dist/frontend/program.js.map +1 -1
  444. package/dist/frontend/provenance-core.js +4 -0
  445. package/dist/frontend/provenance-core.js.map +1 -1
  446. package/dist/frontend/services.d.ts +14 -0
  447. package/dist/frontend/services.js +52 -2
  448. package/dist/frontend/services.js.map +1 -1
  449. package/dist/frontend/services.test.js +61 -1
  450. package/dist/frontend/services.test.js.map +1 -1
  451. package/dist/frontend/shape-inference/analyze.d.ts +5 -0
  452. package/dist/frontend/shape-inference/analyze.js +104 -4
  453. package/dist/frontend/shape-inference/analyze.js.map +1 -1
  454. package/dist/frontend/shape-inference/domain.js +0 -1
  455. package/dist/frontend/shape-inference/domain.js.map +1 -1
  456. package/dist/frontend/shape-inference/index.js +5 -1
  457. package/dist/frontend/shape-inference/index.js.map +1 -1
  458. package/dist/frontend/shape-inference/memo.d.ts +2 -1
  459. package/dist/frontend/shape-inference/memo.js +6 -2
  460. package/dist/frontend/shape-inference/memo.js.map +1 -1
  461. package/dist/frontend/shape-inference/overlay.d.ts +1 -1
  462. package/dist/frontend/shape-inference/overlay.js +116 -2
  463. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  464. package/dist/frontend/shape-inference/static-objects.js +11 -6
  465. package/dist/frontend/shape-inference/static-objects.js.map +1 -1
  466. package/dist/frontend/source-phase-imports.test.d.ts +1 -0
  467. package/dist/frontend/source-phase-imports.test.js +37 -0
  468. package/dist/frontend/source-phase-imports.test.js.map +1 -0
  469. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  470. package/dist/frontend/ts7/ast-node.js +12 -0
  471. package/dist/frontend/ts7/ast-node.js.map +1 -1
  472. package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
  473. package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
  474. package/dist/frontend/ts7/ast-wire.js +3 -5
  475. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  476. package/dist/frontend/ts7/checker-backend.d.ts +13 -0
  477. package/dist/frontend/ts7/checker-backend.js +84 -2
  478. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  479. package/dist/frontend/ts7/checker-backend.test.js +126 -2
  480. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  481. package/dist/frontend/ts7/program-host.d.ts +22 -1
  482. package/dist/frontend/ts7/program-host.js +49 -4
  483. package/dist/frontend/ts7/program-host.js.map +1 -1
  484. package/dist/frontend/ts7/program-host.test.js +83 -0
  485. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  486. package/dist/frontend/ts7/rpc-process.d.ts +16 -1
  487. package/dist/frontend/ts7/rpc-process.js +170 -92
  488. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  489. package/dist/frontend/ts7/rpc-process.test.js +49 -21
  490. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  491. package/dist/frontend/tsc-codes.js +70 -0
  492. package/dist/frontend/tsc-codes.js.map +1 -1
  493. package/dist/frontend/type-mapper.d.ts +7 -2
  494. package/dist/frontend/type-mapper.js +148 -1
  495. package/dist/frontend/type-mapper.js.map +1 -1
  496. package/dist/index.d.ts +1 -1
  497. package/dist/index.js +152 -8
  498. package/dist/index.js.map +1 -1
  499. package/dist/ir/api.d.ts +1 -1
  500. package/dist/ir/api.js +1 -1
  501. package/dist/ir/api.js.map +1 -1
  502. package/dist/ir/build.d.ts +3 -2
  503. package/dist/ir/build.js +4 -2
  504. package/dist/ir/build.js.map +1 -1
  505. package/dist/ir/builtin-effects.js +53 -0
  506. package/dist/ir/builtin-effects.js.map +1 -1
  507. package/dist/ir/builtin-signatures.d.ts +1 -1
  508. package/dist/ir/builtin-signatures.js +211 -10
  509. package/dist/ir/builtin-signatures.js.map +1 -1
  510. package/dist/ir/codec.d.ts +82 -0
  511. package/dist/ir/codec.generated.d.ts +13 -0
  512. package/dist/ir/codec.generated.js +5274 -0
  513. package/dist/ir/codec.generated.js.map +1 -0
  514. package/dist/ir/codec.js +325 -0
  515. package/dist/ir/codec.js.map +1 -0
  516. package/dist/ir/codec.test.d.ts +1 -0
  517. package/dist/ir/codec.test.js +225 -0
  518. package/dist/ir/codec.test.js.map +1 -0
  519. package/dist/ir/fields.generated.d.ts +20 -10
  520. package/dist/ir/fields.generated.js +1031 -11
  521. package/dist/ir/fields.generated.js.map +1 -1
  522. package/dist/ir/fields.test.js +46 -2
  523. package/dist/ir/fields.test.js.map +1 -1
  524. package/dist/ir/function-references.d.ts +5 -4
  525. package/dist/ir/function-references.js +8 -4
  526. package/dist/ir/function-references.js.map +1 -1
  527. package/dist/ir/function-references.test.js +7 -0
  528. package/dist/ir/function-references.test.js.map +1 -1
  529. package/dist/ir/inline-array-sources.js +4 -1
  530. package/dist/ir/inline-array-sources.js.map +1 -1
  531. package/dist/ir/inline-array-views.d.ts +13 -0
  532. package/dist/ir/inline-array-views.js +944 -0
  533. package/dist/ir/inline-array-views.js.map +1 -0
  534. package/dist/ir/inline-arrays.d.ts +7 -0
  535. package/dist/ir/inline-arrays.js +190 -55
  536. package/dist/ir/inline-arrays.js.map +1 -1
  537. package/dist/ir/inline-arrays.test.js +140 -2
  538. package/dist/ir/inline-arrays.test.js.map +1 -1
  539. package/dist/ir/integer-ranges.js +16 -6
  540. package/dist/ir/integer-ranges.js.map +1 -1
  541. package/dist/ir/ir.d.ts +75 -44
  542. package/dist/ir/ir.js.map +1 -1
  543. package/dist/ir/js-ic.d.ts +10 -9
  544. package/dist/ir/js-ic.js +28 -20
  545. package/dist/ir/js-ic.js.map +1 -1
  546. package/dist/ir/js-ic.test.js +10 -2
  547. package/dist/ir/js-ic.test.js.map +1 -1
  548. package/dist/ir/jsval.js +374 -63
  549. package/dist/ir/jsval.js.map +1 -1
  550. package/dist/ir/jsval.test.js +96 -2
  551. package/dist/ir/jsval.test.js.map +1 -1
  552. package/dist/ir/loop-entry-ranges.js +112 -9
  553. package/dist/ir/loop-entry-ranges.js.map +1 -1
  554. package/dist/ir/loop-entry-ranges.test.js +40 -0
  555. package/dist/ir/loop-entry-ranges.test.js.map +1 -1
  556. package/dist/ir/parameter-versions.d.ts +2 -1
  557. package/dist/ir/parameter-versions.js +3 -1
  558. package/dist/ir/parameter-versions.js.map +1 -1
  559. package/dist/ir/receiver-readers.js +58 -2
  560. package/dist/ir/receiver-readers.js.map +1 -1
  561. package/dist/ir/runtime-features.d.ts +60 -1
  562. package/dist/ir/runtime-features.js +277 -2
  563. package/dist/ir/runtime-features.js.map +1 -1
  564. package/dist/ir/runtime-features.test.js +165 -1
  565. package/dist/ir/runtime-features.test.js.map +1 -1
  566. package/dist/ir/saturating-loop-jams.d.ts +8 -1
  567. package/dist/ir/saturating-loop-jams.js +46 -7
  568. package/dist/ir/saturating-loop-jams.js.map +1 -1
  569. package/dist/ir/saturating-loop-jams.test.js +39 -1
  570. package/dist/ir/saturating-loop-jams.test.js.map +1 -1
  571. package/dist/ir/self-captures.js +8 -1
  572. package/dist/ir/self-captures.js.map +1 -1
  573. package/dist/ir/self-captures.test.js +15 -0
  574. package/dist/ir/self-captures.test.js.map +1 -1
  575. package/dist/ir/serialize.d.ts +3 -2
  576. package/dist/ir/serialize.js +6 -2
  577. package/dist/ir/serialize.js.map +1 -1
  578. package/dist/ir/validate.js +82 -4
  579. package/dist/ir/validate.js.map +1 -1
  580. package/dist/ir/validate.test.js +46 -0
  581. package/dist/ir/validate.test.js.map +1 -1
  582. package/dist/library/ir-policy.js +3 -0
  583. package/dist/library/ir-policy.js.map +1 -1
  584. package/dist/native/cache.js +2 -0
  585. package/dist/native/cache.js.map +1 -1
  586. package/dist/native/cli.js +2 -0
  587. package/dist/native/cli.js.map +1 -1
  588. package/dist/native/compiler.js +8 -2
  589. package/dist/native/compiler.js.map +1 -1
  590. package/dist/native/prepare.js +32 -3
  591. package/dist/native/prepare.js.map +1 -1
  592. package/dist/native/sanitizer.js +53 -3
  593. package/dist/native/sanitizer.js.map +1 -1
  594. package/dist/native/sanitizer.test.js +88 -2
  595. package/dist/native/sanitizer.test.js.map +1 -1
  596. package/dist/native/toolchain.js +9 -2
  597. package/dist/native/toolchain.js.map +1 -1
  598. package/dist/node-islands/boundary.d.ts +25 -1
  599. package/dist/node-islands/boundary.js +28 -2
  600. package/dist/node-islands/boundary.js.map +1 -1
  601. package/dist/node-islands/detect.d.ts +18 -1
  602. package/dist/node-islands/detect.js +365 -40
  603. package/dist/node-islands/detect.js.map +1 -1
  604. package/dist/node-islands/detect.test.js +151 -4
  605. package/dist/node-islands/detect.test.js.map +1 -1
  606. package/dist/node-islands/effect-gate.js +30 -20
  607. package/dist/node-islands/effect-gate.js.map +1 -1
  608. package/dist/node-islands/effect-gate.test.js +4 -1
  609. package/dist/node-islands/effect-gate.test.js.map +1 -1
  610. package/dist/node-islands/libnode.d.ts +1 -1
  611. package/dist/node-islands/libnode.js +1 -1
  612. package/dist/node-islands/libnode.js.map +1 -1
  613. package/dist/node-islands/modules.d.ts +28 -0
  614. package/dist/node-islands/modules.js +156 -0
  615. package/dist/node-islands/modules.js.map +1 -1
  616. package/dist/node-islands/modules.test.js +105 -1
  617. package/dist/node-islands/modules.test.js.map +1 -1
  618. package/dist/node-islands/policy.js +2 -3
  619. package/dist/node-islands/policy.js.map +1 -1
  620. package/dist/node-islands/probe-recorder.d.ts +1 -0
  621. package/dist/node-islands/probe-recorder.js +596 -0
  622. package/dist/node-islands/probe-recorder.js.map +1 -0
  623. package/dist/node-islands/probe-recorder.test.d.ts +1 -0
  624. package/dist/node-islands/probe-recorder.test.js +80 -0
  625. package/dist/node-islands/probe-recorder.test.js.map +1 -0
  626. package/dist/node-islands/report.test.js +2 -0
  627. package/dist/node-islands/report.test.js.map +1 -1
  628. package/dist/node-islands/rules.js +4 -0
  629. package/dist/node-islands/rules.js.map +1 -1
  630. package/dist/node-islands/scan.d.ts +7 -1
  631. package/dist/node-islands/scan.js +51 -2
  632. package/dist/node-islands/scan.js.map +1 -1
  633. package/dist/node-islands/snapshot.d.ts +38 -1
  634. package/dist/node-islands/snapshot.js +165 -161
  635. package/dist/node-islands/snapshot.js.map +1 -1
  636. package/dist/node-islands/snapshot.test.js +63 -2
  637. package/dist/node-islands/snapshot.test.js.map +1 -1
  638. package/dist/node-islands/summary.js +8 -0
  639. package/dist/node-islands/summary.js.map +1 -1
  640. package/dist/node-islands/type-strip.d.ts +11 -0
  641. package/dist/node-islands/type-strip.js +157 -0
  642. package/dist/node-islands/type-strip.js.map +1 -0
  643. package/dist/node-islands/type-strip.test.d.ts +1 -0
  644. package/dist/node-islands/type-strip.test.js +31 -0
  645. package/dist/node-islands/type-strip.test.js.map +1 -0
  646. package/dist/project-config.d.ts +4 -0
  647. package/dist/project-config.js +19 -0
  648. package/dist/project-config.js.map +1 -1
  649. package/dist/project-config.test.js +10 -0
  650. package/dist/project-config.test.js.map +1 -1
  651. package/package.json +20 -20
  652. package/surface-manifest.json +43 -11
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,78 @@
1
+ import { expect, test } from "vitest";
2
+ import { DYN } from "../../ir/ir.js";
3
+ import { isPlainDescriptorMap, isPlainObjectLiteral } from "./lower-calls.js";
4
+ const loc = { file: "descriptors.ts", start: 0, end: 1 };
5
+ function dynObjLit() {
6
+ return { kind: "dynObjLit", fields: [], type: DYN, loc };
7
+ }
8
+ function recordLit() {
9
+ return { kind: "recordLit", fields: [], type: { kind: "record", shapeId: "r1" }, loc };
10
+ }
11
+ function recordClone() {
12
+ return {
13
+ kind: "recordClone",
14
+ source: recordLit(),
15
+ overrides: [],
16
+ type: { kind: "record", shapeId: "r1" },
17
+ loc,
18
+ };
19
+ }
20
+ function dynFrom(value) {
21
+ return { kind: "dynFrom", value, type: DYN, loc };
22
+ }
23
+ test("a plain object keeps the default descriptor reader", () => {
24
+ expect(isPlainObjectLiteral(dynObjLit())).toBe(true);
25
+ // A typed object literal boxes into dyn through dynFrom, and so does any
26
+ // expression already of a record type (a variable, a clone).
27
+ expect(isPlainObjectLiteral(dynFrom(recordLit()))).toBe(true);
28
+ expect(isPlainObjectLiteral(dynFrom(recordClone()))).toBe(true);
29
+ const recordVariable = {
30
+ kind: "varRef",
31
+ localId: "p1",
32
+ type: { kind: "record", shapeId: "r1" },
33
+ loc,
34
+ };
35
+ expect(isPlainObjectLiteral(dynFrom(recordVariable))).toBe(true);
36
+ });
37
+ test("any other descriptor may be an object of any kind and takes the any-object entry points", () => {
38
+ const variable = { kind: "varRef", localId: "p0", type: DYN, loc };
39
+ const array = { kind: "dynArrLit", elems: [], type: DYN, loc };
40
+ const call = {
41
+ kind: "libCall",
42
+ fn: "dyn.objCreate",
43
+ args: [dynObjLit()],
44
+ type: DYN,
45
+ loc,
46
+ };
47
+ for (const expr of [variable, dynFrom(variable), array, call])
48
+ expect(isPlainObjectLiteral(expr)).toBe(false);
49
+ });
50
+ test("a descriptor map is plain only when every descriptor in it is plain", () => {
51
+ const key = { kind: "strLit", value: "a", type: { kind: "string" }, loc };
52
+ const variable = { kind: "varRef", localId: "p0", type: DYN, loc };
53
+ const map = (value) => ({
54
+ kind: "dynObjLit",
55
+ fields: [{ key, value }],
56
+ type: DYN,
57
+ loc,
58
+ });
59
+ const shapes = new Map([
60
+ ["r1", { id: "r1", fields: [] }],
61
+ ["plain", { id: "plain", fields: [{ name: "a", type: { kind: "record", shapeId: "r1" } }] }],
62
+ ["dyn", { id: "dyn", fields: [{ name: "a", type: DYN }] }],
63
+ ]);
64
+ const record = (shapeId) => ({
65
+ kind: "varRef",
66
+ localId: "p1",
67
+ type: { kind: "record", shapeId },
68
+ loc,
69
+ });
70
+ const getRecord = (id) => shapes.get(id);
71
+ expect(isPlainDescriptorMap(map(dynObjLit()), getRecord)).toBe(true);
72
+ expect(isPlainDescriptorMap(dynFrom(record("plain")), getRecord)).toBe(true);
73
+ // `{ a: view }` with `view` a DataView, an array or any other dyn value.
74
+ expect(isPlainDescriptorMap(map(variable), getRecord)).toBe(false);
75
+ expect(isPlainDescriptorMap(dynFrom(record("dyn")), getRecord)).toBe(false);
76
+ expect(isPlainDescriptorMap(variable, getRecord)).toBe(false);
77
+ });
78
+ //# sourceMappingURL=lower-calls.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower-calls.test.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-calls.test.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,15 @@ export declare function returnsOnlyThis(member: ts.MethodDeclaration): boolean;
13
13
  * claim setters). Used only to narrow a call's result back to the
14
14
  * receiver's class. */
15
15
  export declare function returnsOnlyThisValue(member: ts.MethodDeclaration): boolean;
16
- export declare function functionLocalClass(decl: ts.ClassLikeDeclaration): boolean;
16
+ /** True when evaluating this class definition creates a class VALUE more
17
+ * than once, so each evaluation must mint its own constructor object,
18
+ * prototype and statics. A function body runs per call, a loop body per
19
+ * iteration, and an instance field initializer (or constructor parameter
20
+ * default) per construction. A class expression nested in a STATIC member
21
+ * initializer, a computed key or the heritage follows its enclosing
22
+ * class's own evaluation, so the walk continues through those.
23
+ * Top-level definitions evaluated once keep the immortal template. */
24
+ export declare function perEvaluationClass(decl: ts.ClassLikeDeclaration): boolean;
17
25
  export declare function storedClassValueType(lowerer: Lowerer, expression: ts.Expression, visiting?: Set<import("../ts7/ast-node.js").AstNode>): IrType | null;
18
26
  export interface ClassMethodSignature {
19
27
  params: ParamShape[];
@@ -594,10 +602,13 @@ export declare function staticReceiverClass(lowerer: Lowerer, receiver: ts.Expre
594
602
  * property access `site`, or a destructuring element over `C` whose
595
603
  * initializer is `site`. Null when the class has no such member. */
596
604
  export declare function lowerClassStaticRead(lowerer: Lowerer, info: ClassInfo, name: string, receiver: ts.Expression, site: ts.Expression): IrExpr | null;
597
- /** Collect a class expression once per enclosing specialization. Function-local
598
- * evaluations allocate fresh constructor objects; top-level expressions use
599
- * immortal templates. Static initialization remains limited to whole top-level
600
- * initializers, where pendingClassExprInits preserves its evaluation point. */
605
+ /** Collect a class expression once per enclosing specialization. A class
606
+ * definition the program can EVALUATE more than once (perEvaluationClass:
607
+ * a function body, a loop body, an instance initializer) allocates fresh
608
+ * constructor objects, so identity, statics and prototype belong to that
609
+ * evaluation; definitions evaluated once use immortal templates. Static
610
+ * initialization remains limited to whole top-level initializers, where
611
+ * pendingClassExprInits preserves its evaluation point. */
601
612
  export declare function lowerClassExpressionInfo(lowerer: Lowerer, expr: ts.ClassLikeDeclaration): ClassInfo;
602
613
  /** `class {…}` in expression position: a class definition bound to no
603
614
  * statement — once the static side is a value, the expression IS the
@@ -1,3 +1,4 @@
1
+ import { lowerWrapperNew } from "./primitive-wrappers.js";
1
2
  import { lowerAsyncLocalStorageOptions } from "./builtins/async-context.js";
2
3
  import { shapeOverlayAnnotated } from "../shape-inference/index.js";
3
4
  import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
@@ -131,13 +132,41 @@ export function returnsOnlyThisValue(member) {
131
132
  ts.forEachChild(body, visit);
132
133
  return valid;
133
134
  }
134
- export function functionLocalClass(decl) {
135
- for (let parent = decl.parent; parent && !ts.isSourceFile(parent); parent = parent.parent) {
136
- if (ts.isFunctionLike(parent))
135
+ /** True when evaluating this class definition creates a class VALUE more
136
+ * than once, so each evaluation must mint its own constructor object,
137
+ * prototype and statics. A function body runs per call, a loop body per
138
+ * iteration, and an instance field initializer (or constructor parameter
139
+ * default) per construction. A class expression nested in a STATIC member
140
+ * initializer, a computed key or the heritage follows its enclosing
141
+ * class's own evaluation, so the walk continues through those.
142
+ * Top-level definitions evaluated once keep the immortal template. */
143
+ export function perEvaluationClass(decl) {
144
+ let child = decl;
145
+ for (let parent = decl.parent; parent && !ts.isSourceFile(parent); child = parent, parent = parent.parent) {
146
+ if (ts.isFunctionLike(parent) || ts.isClassStaticBlockDeclaration(parent))
147
+ return true;
148
+ if (ts.isForStatement(parent) ||
149
+ ts.isForInStatement(parent) ||
150
+ ts.isForOfStatement(parent) ||
151
+ ts.isWhileStatement(parent) ||
152
+ ts.isDoStatement(parent))
153
+ return true;
154
+ if ((ts.isClassDeclaration(parent) || ts.isClassExpression(parent)) && perInstanceMember(child))
137
155
  return true;
138
156
  }
139
157
  return false;
140
158
  }
159
+ /** True when `node` — the direct child of the enclosing class on the path
160
+ * to a nested class definition — is evaluated once per INSTANCE: an
161
+ * instance field with an initializer, or a constructor whose parameters
162
+ * have defaults (parameter properties included). */
163
+ function perInstanceMember(node) {
164
+ if (ts.isConstructorDeclaration(node))
165
+ return node.parameters.nodes.some((param) => param.initializer !== undefined);
166
+ if (!ts.isPropertyDeclaration(node) || node.initializer === undefined)
167
+ return false;
168
+ return !ts.getModifiers(node)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword);
169
+ }
141
170
  export function storedClassValueType(lowerer, expression, visiting = new Set()) {
142
171
  if (visiting.has(expression))
143
172
  return null;
@@ -145,7 +174,7 @@ export function storedClassValueType(lowerer, expression, visiting = new Set())
145
174
  if (ts.isParenthesizedExpression(expression))
146
175
  return storedClassValueType(lowerer, expression.expression, visiting);
147
176
  if (ts.isClassExpression(expression) &&
148
- !functionLocalClass(expression) &&
177
+ !perEvaluationClass(expression) &&
149
178
  !lowerer.collectingExprClasses.has(expression)) {
150
179
  const info = lowerer.lowerClassExpressionInfo(expression);
151
180
  return { kind: "classval", className: info.def.name };
@@ -189,7 +218,7 @@ export function storedClassValueType(lowerer, expression, visiting = new Set())
189
218
  const declaration = constructor && ts.isConstructorDeclaration(constructor) ? constructor.parent : undefined;
190
219
  if (declaration &&
191
220
  ts.isClassExpression(declaration) &&
192
- !functionLocalClass(declaration) &&
221
+ !perEvaluationClass(declaration) &&
193
222
  !lowerer.collectingExprClasses.has(declaration)) {
194
223
  const info = lowerer.lowerClassExpressionInfo(declaration);
195
224
  return { kind: "classval", className: info.def.name };
@@ -1461,7 +1490,13 @@ mixin) {
1461
1490
  const emitterBase = lowerer.builtinEmitterInfoOf(resolved);
1462
1491
  const streamBaseNs = builtinStreamInfoOf(lowerer, resolved);
1463
1492
  if (emitterBase || streamBaseNs) {
1464
- if (t.typeArguments?.nodes)
1493
+ // An EventEmitter's type argument is the listener MAP, a pure
1494
+ // typing aid: the emitter base is one runtime class whatever the
1495
+ // map says, and the map's keys never reach the layout (Node's
1496
+ // own generic erases at runtime), so `extends
1497
+ // EventEmitter<MyEvents>` adopts the same base. A stream base's
1498
+ // argument IS the element layout, which still has to be concrete.
1499
+ if (!emitterBase && t.typeArguments?.nodes)
1465
1500
  lowerer.unsupported("SC1090", t, "extending generic classes");
1466
1501
  base = (emitterBase ?? streamBaseNs);
1467
1502
  continue;
@@ -1652,7 +1687,12 @@ mixin) {
1652
1687
  base = instBase;
1653
1688
  continue;
1654
1689
  }
1655
- if (t.typeArguments?.nodes)
1690
+ // An EventEmitter base's type argument is the listener MAP — a pure
1691
+ // typing aid (the runtime base is one emitter class whatever the map
1692
+ // says, and Node erases it too), so `extends EventEmitter<Events>`
1693
+ // adopts the same base. Every other generic base still refuses:
1694
+ // its argument can carry a layout.
1695
+ if (t.typeArguments?.nodes && lowerer.builtinEmitterInfoOf(symbol) === null)
1656
1696
  lowerer.unsupported("SC1090", t, "extending generic classes");
1657
1697
  if (named?.extendsArray)
1658
1698
  lowerer.unsupported("SC1090", t, `extending '${t.expression.text}', a class that extends Array (one level of Array subclass compiles)`);
@@ -1674,7 +1714,7 @@ mixin) {
1674
1714
  throw new PoisonError();
1675
1715
  }
1676
1716
  }
1677
- if (base?.localClass && !functionLocalClass(decl) && !computedBase && !factoryBaseExpression) {
1717
+ if (base?.localClass && !perEvaluationClass(decl) && !computedBase && !factoryBaseExpression) {
1678
1718
  const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0];
1679
1719
  if (heritage)
1680
1720
  factoryBaseExpression = heritage.expression;
@@ -1741,7 +1781,13 @@ mixin) {
1741
1781
  decl.members.nodes.some((member) => ts.isAccessor(member) &&
1742
1782
  !ts.isPrivateIdentifier(member.name) &&
1743
1783
  member.modifiers?.nodes.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) &&
1744
- !decl.members.nodes.some((member) => member.name &&
1784
+ // A private static ACCESSOR has no native storage yet, and a private
1785
+ // static method that reads `arguments` would lose the arguments past
1786
+ // its parameters when called through its value (`this.#m` returned by
1787
+ // a getter): keep such a class on the static path, whose public
1788
+ // static accessors refuse.
1789
+ !decl.members.nodes.some((member) => (ts.isAccessor(member) ||
1790
+ (ts.isMethodDeclaration(member) && bodyReadsArguments(member))) &&
1745
1791
  ts.isPrivateIdentifier(member.name) &&
1746
1792
  ts
1747
1793
  .getModifiers(member)
@@ -1796,17 +1842,31 @@ mixin) {
1796
1842
  });
1797
1843
  };
1798
1844
  for (const member of decl.members.nodes) {
1799
- if ((functionLocalClass(decl) || checkedStatics) &&
1845
+ if ((perEvaluationClass(decl) || checkedStatics) &&
1800
1846
  (isJsSourceFile(ts.getSourceFileOfNode(decl)) ||
1801
- (functionLocalClass(decl) && ts.isMethodDeclaration(member))) &&
1847
+ (perEvaluationClass(decl) && ts.isMethodDeclaration(member))) &&
1802
1848
  (ts.isClassStaticBlockDeclaration(member) ||
1803
1849
  ts
1804
1850
  .getModifiers(member)
1805
1851
  ?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) {
1806
- runtimeStatics.push(member);
1807
- continue;
1852
+ // A private static of a declaration-level class keeps its native
1853
+ // storage (the %C.static:#m function, the %g.s.C.#x global): the
1854
+ // constructor object never carries a property for it, and every
1855
+ // access brand-checks its receiver (private-statics.ts). A field
1856
+ // also stays in runtimeStatics, so its initializer runs in source
1857
+ // order with the constructor's other initializers.
1858
+ const privateStatic = checkedStatics &&
1859
+ !perEvaluationClass(decl) &&
1860
+ member.name !== undefined &&
1861
+ ts.isPrivateIdentifier(member.name);
1862
+ if (!privateStatic) {
1863
+ runtimeStatics.push(member);
1864
+ continue;
1865
+ }
1866
+ if (ts.isPropertyDeclaration(member))
1867
+ runtimeStatics.push(member);
1808
1868
  }
1809
- if (functionLocalClass(decl) &&
1869
+ if (perEvaluationClass(decl) &&
1810
1870
  isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
1811
1871
  (ts.isMethodDeclaration(member) || ts.isAccessor(member)) &&
1812
1872
  member.body &&
@@ -1900,7 +1960,7 @@ mixin) {
1900
1960
  }
1901
1961
  staticMethods.set(member.name.text, { params: shapes, ret: ft.ret, member });
1902
1962
  if (implicitMonoFile(ts.getSourceFileOfNode(decl)) &&
1903
- !functionLocalClass(decl) &&
1963
+ !perEvaluationClass(decl) &&
1904
1964
  inst === undefined &&
1905
1965
  decl.typeParameters === undefined) {
1906
1966
  const implicit = implicitAnyParamSymbolsOf(lowerer, member, true);
@@ -2530,7 +2590,7 @@ mixin) {
2530
2590
  // name (the override stays on the vtable), a shadowed field, or
2531
2591
  // a generic-class instantiation's member.
2532
2592
  if (implicitMonoFile(ts.getSourceFileOfNode(decl)) &&
2533
- !functionLocalClass(decl) &&
2593
+ !perEvaluationClass(decl) &&
2534
2594
  ts.isIdentifier(member.name) &&
2535
2595
  !lowerer.virtualJsMethods.has(member) &&
2536
2596
  !lowerer.checkedJsOverrideMethods.has(member) &&
@@ -2741,7 +2801,7 @@ mixin) {
2741
2801
  // boundary (lowerClassMethodMemberInner).
2742
2802
  const ownAsync = member.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true;
2743
2803
  if (!fencedJsOverride &&
2744
- !functionLocalClass(decl) &&
2804
+ !perEvaluationClass(decl) &&
2745
2805
  overridden.sig.gen === undefined &&
2746
2806
  // An async base's slot answers its promise: a Promise type, or
2747
2807
  // the checked-dynamic value of an untyped async method.
@@ -2830,7 +2890,7 @@ mixin) {
2830
2890
  !returnAdapters.has(mName) &&
2831
2891
  (asyncMember || overridden.sig.async === true) &&
2832
2892
  !isJsSourceFile(ts.getSourceFileOfNode(member)) &&
2833
- !functionLocalClass(decl) &&
2893
+ !perEvaluationClass(decl) &&
2834
2894
  member.asteriskToken === undefined &&
2835
2895
  overridden.sig.gen === undefined &&
2836
2896
  !overridden.sig.abstract &&
@@ -3622,7 +3682,7 @@ mixin) {
3622
3682
  lowerer.subclassLinks++;
3623
3683
  }
3624
3684
  lowerer.classes.set(className, info);
3625
- if (computedBase && !functionLocalClass(decl)) {
3685
+ if (computedBase && !perEvaluationClass(decl)) {
3626
3686
  info.def.baseValueGlobal = `%g.${className}.computedBase`;
3627
3687
  lowerer.globalsList.push({
3628
3688
  id: info.def.baseValueGlobal,
@@ -3631,7 +3691,7 @@ mixin) {
3631
3691
  mutable: false,
3632
3692
  });
3633
3693
  }
3634
- if (factoryBaseExpression && !functionLocalClass(decl)) {
3694
+ if (factoryBaseExpression && !perEvaluationClass(decl)) {
3635
3695
  info.def.baseValueGlobal = `%g.${className}.computedBase`;
3636
3696
  lowerer.globalsList.push({
3637
3697
  id: info.def.baseValueGlobal,
@@ -3640,7 +3700,7 @@ mixin) {
3640
3700
  mutable: false,
3641
3701
  });
3642
3702
  }
3643
- if (callableBase && !functionLocalClass(decl)) {
3703
+ if (callableBase && !perEvaluationClass(decl)) {
3644
3704
  lowerer.globalsList.push({ id: callableBase.constructorId, name: `${className} base`, type: DYN, mutable: false }, {
3645
3705
  id: callableBase.prototypeId,
3646
3706
  name: `${className} base prototype`,
@@ -4109,7 +4169,11 @@ function lowerStaticFieldInitsInner(lowerer, info) {
4109
4169
  });
4110
4170
  }
4111
4171
  const items = [
4112
- ...info.staticFields.map((f) => ({
4172
+ // A runtime-statics class initializes its private static fields with
4173
+ // its other initializers (initializeRuntimeStatics).
4174
+ ...info.staticFields
4175
+ .filter((f) => !(info.runtimeStatics && f.name.startsWith("#")))
4176
+ .map((f) => ({
4113
4177
  pos: ts.tokenStartOfNode(f.initializer),
4114
4178
  kind: "field",
4115
4179
  f,
@@ -4721,7 +4785,7 @@ export function lowerClassStaticRead(lowerer, info, name, receiver, site) {
4721
4785
  ["now", "parse", "UTC"].includes(name) &&
4722
4786
  !(ts.isCallExpression(site.parent) && site.parent.expression === site))
4723
4787
  lowerer.noLowering(`Date.${name} read through a class that extends Date`, site);
4724
- if (hasRuntimeStatics(info) && !found?.field)
4788
+ if (hasRuntimeStatics(info) && !found?.field && !name.startsWith("#"))
4725
4789
  return {
4726
4790
  kind: "dynKeyGet",
4727
4791
  value: lowerer.coerceToExpected(classValueRef(lowerer, info, receiver), DYN),
@@ -4889,10 +4953,13 @@ function privateNamesOnlyOnThis(expr) {
4889
4953
  }
4890
4954
  return true;
4891
4955
  }
4892
- /** Collect a class expression once per enclosing specialization. Function-local
4893
- * evaluations allocate fresh constructor objects; top-level expressions use
4894
- * immortal templates. Static initialization remains limited to whole top-level
4895
- * initializers, where pendingClassExprInits preserves its evaluation point. */
4956
+ /** Collect a class expression once per enclosing specialization. A class
4957
+ * definition the program can EVALUATE more than once (perEvaluationClass:
4958
+ * a function body, a loop body, an instance initializer) allocates fresh
4959
+ * constructor objects, so identity, statics and prototype belong to that
4960
+ * evaluation; definitions evaluated once use immortal templates. Static
4961
+ * initialization remains limited to whole top-level initializers, where
4962
+ * pendingClassExprInits preserves its evaluation point. */
4896
4963
  export function lowerClassExpressionInfo(lowerer, expr) {
4897
4964
  const cached = lowerer.exprClassInfoByName.get(lowerer.classNamer(expr));
4898
4965
  if (cached)
@@ -4907,14 +4974,12 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4907
4974
  if (lowerer.collectingExprClasses.has(expr)) {
4908
4975
  lowerer.unsupported("SC1090", expr, "class expressions whose extends chain re-enters their own collection (a cyclic base through property assignments)");
4909
4976
  }
4910
- let local = false;
4911
4977
  for (let p = expr.parent; p !== undefined && !ts.isSourceFile(p); p = p.parent) {
4912
4978
  if (ts.isClassStaticBlockDeclaration(p)) {
4913
4979
  lowerer.unsupported("SC1090", expr, "class expressions inside static blocks");
4914
4980
  }
4915
- if (ts.isFunctionLike(p))
4916
- local = true;
4917
4981
  }
4982
+ const local = perEvaluationClass(expr);
4918
4983
  if (local &&
4919
4984
  expr.members.nodes.some((member) => member.name && ts.isPrivateIdentifier(member.name)) &&
4920
4985
  !localPrivateFieldsAgree(expr)) {
@@ -5539,7 +5604,9 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
5539
5604
  if (date)
5540
5605
  return date;
5541
5606
  }
5542
- if ((hasRuntimeStatics(info) && !findStaticOn(lowerer, info, access.name.text)?.field) ||
5607
+ if ((hasRuntimeStatics(info) &&
5608
+ !access.name.text.startsWith("#") &&
5609
+ !findStaticOn(lowerer, info, access.name.text)?.field) ||
5543
5610
  (info.callableBase &&
5544
5611
  !findStaticOn(lowerer, info, access.name.text) &&
5545
5612
  !findGenericStaticOn(lowerer, info, access.name.text)))
@@ -5925,7 +5992,9 @@ export function lowerClassValueProperty(lowerer, expr) {
5925
5992
  if (info?.def.runtime && member !== "name")
5926
5993
  return null;
5927
5994
  if (info &&
5928
- ((hasRuntimeStatics(info) && !findStaticOn(lowerer, info, member)?.field) ||
5995
+ ((hasRuntimeStatics(info) &&
5996
+ !member.startsWith("#") &&
5997
+ !findStaticOn(lowerer, info, member)?.field) ||
5929
5998
  (info.callableBase && !findStaticOn(lowerer, info, member))))
5930
5999
  return {
5931
6000
  kind: "dynKeyGet",
@@ -6142,7 +6211,7 @@ function localSubclassesOf(lowerer, base) {
6142
6211
  ts.walkPreorder(sf, (node) => {
6143
6212
  if ((ts.isClassDeclaration(node) || ts.isClassExpression(node)) &&
6144
6213
  node.heritageClauses !== undefined &&
6145
- functionLocalClass(node)) {
6214
+ perEvaluationClass(node)) {
6146
6215
  const extended = extendedClassNode(lowerer, node);
6147
6216
  if (extended) {
6148
6217
  const list = index.get(extended);
@@ -8473,6 +8542,20 @@ function lowerProgramClassNew(lowerer, expr, declaredInfo, loc) {
8473
8542
  loc,
8474
8543
  });
8475
8544
  }
8545
+ /** The supported map layout a contextual type pins for `new Map()`: the type
8546
+ * itself, or the single map arm of a union — a nullable annotation such as
8547
+ * `Map<K, V> | undefined`, or `ReadonlyMap<K, V> | undefined`, where a Map
8548
+ * value can only inhabit the map arm and the no-argument constructor gives
8549
+ * the checker nothing to infer the type arguments from. */
8550
+ function contextualMapLayout(lowerer, ctx) {
8551
+ const mapped = lowerer.mapTypeOf(ctx);
8552
+ if (mapped?.kind === "map")
8553
+ return mapped;
8554
+ if (mapped?.kind !== "union")
8555
+ return null;
8556
+ const arms = (lowerer.unions.get(mapped.unionId)?.arms ?? []).filter((arm) => arm.kind === "map");
8557
+ return arms.length === 1 ? arms[0] : null;
8558
+ }
8476
8559
  function assignedThisFieldType(lowerer, expr) {
8477
8560
  const parent = expr.parent;
8478
8561
  if (!ts.isBinaryExpression(parent) ||
@@ -8571,6 +8654,9 @@ export function lowerNew(lowerer, expr) {
8571
8654
  return lowerWithInlineRequireInit(lowerer, req, () => lowerNew(lowerer, expr));
8572
8655
  }
8573
8656
  }
8657
+ const wrapper = lowerWrapperNew(lowerer, expr);
8658
+ if (wrapper)
8659
+ return wrapper;
8574
8660
  const worker = lowerWorkerNew(lowerer, expr);
8575
8661
  if (worker)
8576
8662
  return worker;
@@ -8644,7 +8730,15 @@ export function lowerNew(lowerer, expr) {
8644
8730
  expr.expression.name.text === "Segmenter" &&
8645
8731
  lowerer.isStdlibGlobal(expr.expression.expression, "Intl")) {
8646
8732
  const args = expr.arguments?.nodes ?? [];
8647
- const undefinedArg = (arg) => (lowerer.typeOf(arg).flags & ts.TypeFlags.Undefined) !== 0;
8733
+ // An argument whose value IS undefined: exactly undefined, or void. A
8734
+ // union that merely includes undefined may hold a locale or an options
8735
+ // object at run time, and the constructor cannot inspect either — such
8736
+ // an argument is refused below rather than silently read as the default
8737
+ // locale or the default options.
8738
+ const undefinedArg = (arg) => {
8739
+ const flags = lowerer.typeOf(arg).flags;
8740
+ return flags === ts.TypeFlags.Undefined || flags === ts.TypeFlags.Void;
8741
+ };
8648
8742
  // A literal language tag: Unicode grapheme clusters have no locale
8649
8743
  // tailoring. Only tags of the form language[-script][-region] are
8650
8744
  // accepted; each is well-formed, so Node constructs the segmenter
@@ -8654,27 +8748,28 @@ export function lowerNew(lowerer, expr) {
8654
8748
  if (args.length > 2 || (args[0] && !undefinedArg(args[0]) && !literalLocale(args[0]))) {
8655
8749
  lowerer.noLowering("Intl.Segmenter locale negotiation", expr, "omit the locale, pass undefined, or pass one language tag as a string literal");
8656
8750
  }
8657
- // JavaScript dependencies may construct word and sentence segmenters
8658
- // that they use only on some paths (pi-tui's shared word segmenter):
8659
- // the construction compiles and their segment() throws SC2020.
8660
- // TypeScript sources keep the build-time refusal.
8751
+ // Word segmentation lowers through ICU (scr_intl.c). Sentence
8752
+ // segmentation does not: JavaScript dependencies may construct sentence
8753
+ // segmenters they use only on some paths, so the construction compiles
8754
+ // and their segment() throws SC2020; TypeScript sources keep the
8755
+ // build-time refusal.
8661
8756
  const granularities = isJsSourceFile(ts.getSourceFileOfNode(expr))
8662
8757
  ? ["grapheme", "word", "sentence"]
8663
- : ["grapheme"];
8758
+ : ["grapheme", "word"];
8664
8759
  const options = args[1];
8665
8760
  let granularity = "grapheme";
8666
8761
  if (options && !undefinedArg(options)) {
8667
8762
  // An object literal of `granularity` entries (none: the default; a
8668
8763
  // repeated key: the last one, as in JavaScript).
8669
8764
  if (!ts.isObjectLiteralExpression(options))
8670
- lowerer.noLowering("Intl.Segmenter options", options, 'the native segmenter supports default options and { granularity: "grapheme" }; word and sentence segmentation remain unsupported');
8765
+ lowerer.noLowering("Intl.Segmenter options", options, 'the native segmenter supports default options, { granularity: "grapheme" } and { granularity: "word" }; sentence segmentation remains unsupported');
8671
8766
  for (const property of options.properties.nodes) {
8672
8767
  if (!ts.isPropertyAssignment(property) ||
8673
8768
  !(ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)) ||
8674
8769
  property.name.text !== "granularity" ||
8675
8770
  !ts.isStringLiteral(property.initializer) ||
8676
8771
  !granularities.includes(property.initializer.text)) {
8677
- lowerer.noLowering("Intl.Segmenter options", options, 'the native segmenter supports default options and { granularity: "grapheme" }; word and sentence segmentation remain unsupported');
8772
+ lowerer.noLowering("Intl.Segmenter options", options, 'the native segmenter supports default options, { granularity: "grapheme" } and { granularity: "word" }; sentence segmentation remains unsupported');
8678
8773
  }
8679
8774
  granularity = property.initializer.text;
8680
8775
  }
@@ -8688,12 +8783,28 @@ export function lowerNew(lowerer, expr) {
8688
8783
  loc: locOf(arg),
8689
8784
  };
8690
8785
  });
8786
+ // Grapheme segmentation is the engine-free table-driven segmenter
8787
+ // (scr_grapheme.c). NOTE: once ICU is established everywhere, this fast
8788
+ // path is deleted in favor of ICU's character iterator (design I4).
8691
8789
  let result = { kind: "libCall", fn: "intl.segmenterNew", args: [], type: DYN, loc };
8692
- // A word or sentence segmenter carries its segment() refusal, which
8693
- // coverage lists as deferred to runtime.
8694
- if (granularity !== "grapheme") {
8790
+ if (granularity === "word") {
8791
+ // ICU's word iterator at the requested locale; a literal language tag
8792
+ // is the locale, and the empty string means the default locale (what
8793
+ // Node negotiates when the argument is absent or undefined).
8794
+ const tag = args[0] !== undefined && ts.isStringLiteralLike(args[0]) ? args[0].text : "";
8795
+ result = {
8796
+ kind: "libCall",
8797
+ fn: "icu.segmenterWord",
8798
+ args: [strLit(tag, loc)],
8799
+ type: DYN,
8800
+ loc,
8801
+ };
8802
+ }
8803
+ // A sentence segmenter carries its segment() refusal, which coverage
8804
+ // lists as deferred to runtime.
8805
+ if (granularity === "sentence") {
8695
8806
  const surface = `Intl.Segmenter segmentation with granularity '${granularity}'`;
8696
- lowerer.runtimeFences.push(noLoweringDiag(surface, loc, "only grapheme segmenters segment; word and sentence segmenters construct"));
8807
+ lowerer.runtimeFences.push(noLoweringDiag(surface, loc, "only grapheme and word segmenters segment; sentence segmenters construct"));
8697
8808
  const line = ts.getLineAndCharacterOfPosition(ts.getSourceFileOfNode(expr), loc.start).line;
8698
8809
  const refusal = `${surface} is not supported yet [SC2020 at ${loc.file}:${line + 1}]`;
8699
8810
  result = {
@@ -9234,8 +9345,9 @@ export function lowerNew(lowerer, expr) {
9234
9345
  // starting at 0 (nothing buffered). A literal Buffer encoding folds
9235
9346
  // its alias at compile time; any other encoding argument is
9236
9347
  // normalized at run time (Node's normalizeEncoding, which throws
9237
- // ERR_UNKNOWN_ENCODING for an unknown name). Omitted means utf8,
9238
- // Node's default.
9348
+ // ERR_UNKNOWN_ENCODING for an unknown name). An encoding that may not
9349
+ // be a string takes strdec.encodingValue, which formats the error
9350
+ // with %s. Omitted means utf8, Node's default.
9239
9351
  if (symbol && ts.symbolName(symbol) === "StringDecoder" && lowerer.isStdlibSymbol(symbol)) {
9240
9352
  const args = expr.arguments?.nodes ?? [];
9241
9353
  if (args.length > 1) {
@@ -9248,11 +9360,16 @@ export function lowerNew(lowerer, expr) {
9248
9360
  : encT.isStringLiteralType()
9249
9361
  ? knownBufEncoding(encT.value)
9250
9362
  : undefined;
9363
+ const textual = (type) => type.isUnionType()
9364
+ ? ts.constituentTypes(type).every(textual)
9365
+ : (type.flags &
9366
+ (ts.TypeFlags.StringLike | ts.TypeFlags.Undefined | ts.TypeFlags.Null)) !==
9367
+ 0;
9251
9368
  const encoding = encName !== undefined
9252
9369
  ? { kind: "strLit", value: encName, type: STRING, loc }
9253
9370
  : {
9254
9371
  kind: "libCall",
9255
- fn: "strdec.encoding",
9372
+ fn: textual(encT) ? "strdec.encoding" : "strdec.encodingValue",
9256
9373
  args: [lowerer.lowerExprExpecting(encNode, DYN)],
9257
9374
  type: STRING,
9258
9375
  loc,
@@ -9357,10 +9474,10 @@ export function lowerNew(lowerer, expr) {
9357
9474
  }
9358
9475
  else if (mapped?.kind !== "map" || contextualSeed) {
9359
9476
  const ctx = lowerer.checker.getContextualType(expr);
9360
- const ctxMapped = ctx ? lowerer.mapTypeOf(ctx) : null;
9361
- if (ctx && ctxMapped?.kind === "map") {
9477
+ const ctxMap = ctx ? contextualMapLayout(lowerer, ctx) : null;
9478
+ if (ctx && ctxMap !== null) {
9362
9479
  tsType = ctx;
9363
- mapped = ctxMapped;
9480
+ mapped = ctxMap;
9364
9481
  }
9365
9482
  }
9366
9483
  // `new Map(source)` the checker types `Map<any, any>` because the