@scriptc/compiler 0.3.6 → 0.4.0

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 (1218) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +682 -50
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +13 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +6 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +41 -4
  16. package/dist/backend/llvm/alloc.js +138 -7
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/alloc.test.js +30 -1
  19. package/dist/backend/llvm/alloc.test.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  21. package/dist/backend/llvm/array-search.test.js +1 -1
  22. package/dist/backend/llvm/blocks.d.ts +8 -0
  23. package/dist/backend/llvm/blocks.js +43 -1
  24. package/dist/backend/llvm/blocks.js.map +1 -1
  25. package/dist/backend/llvm/blocks.test.js +22 -1
  26. package/dist/backend/llvm/blocks.test.js.map +1 -1
  27. package/dist/backend/llvm/byte-numbers.js +15 -5
  28. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  29. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  30. package/dist/backend/llvm/bytes-alias.js +20 -0
  31. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  32. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  33. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  34. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  35. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  36. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  37. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  38. package/dist/backend/llvm/call-lifetimes.js +50 -1
  39. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  40. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  41. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  42. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  43. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  44. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  45. package/dist/backend/llvm/classes.d.ts +11 -0
  46. package/dist/backend/llvm/classes.js +71 -14
  47. package/dist/backend/llvm/classes.js.map +1 -1
  48. package/dist/backend/llvm/classes.test.js +58 -8
  49. package/dist/backend/llvm/classes.test.js.map +1 -1
  50. package/dist/backend/llvm/common.js +1 -0
  51. package/dist/backend/llvm/common.js.map +1 -1
  52. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  53. package/dist/backend/llvm/constant-callbacks.js +55 -12
  54. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  56. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  57. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  58. package/dist/backend/llvm/counted-loops.js +37 -0
  59. package/dist/backend/llvm/counted-loops.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.d.ts +12 -3
  61. package/dist/backend/llvm/dense-array-access.js +72 -14
  62. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  63. package/dist/backend/llvm/dense-array-access.test.js +59 -3
  64. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  66. package/dist/backend/llvm/dense-array-loops.js +162 -0
  67. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  68. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  69. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  70. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  71. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  72. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  73. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  74. package/dist/backend/llvm/dyn.d.ts +28 -4
  75. package/dist/backend/llvm/dyn.js +293 -178
  76. package/dist/backend/llvm/dyn.js.map +1 -1
  77. package/dist/backend/llvm/emit-function.d.ts +64 -0
  78. package/dist/backend/llvm/emit-function.js +1190 -0
  79. package/dist/backend/llvm/emit-function.js.map +1 -0
  80. package/dist/backend/llvm/emit-module.d.ts +24 -0
  81. package/dist/backend/llvm/emit-module.js +1535 -0
  82. package/dist/backend/llvm/emit-module.js.map +1 -0
  83. package/dist/backend/llvm/emit-statements.d.ts +58 -0
  84. package/dist/backend/llvm/emit-statements.js +1964 -0
  85. package/dist/backend/llvm/emit-statements.js.map +1 -0
  86. package/dist/backend/llvm/emitter.d.ts +547 -283
  87. package/dist/backend/llvm/emitter.js +689 -4643
  88. package/dist/backend/llvm/emitter.js.map +1 -1
  89. package/dist/backend/llvm/emitter.test.js +57 -3
  90. package/dist/backend/llvm/emitter.test.js.map +1 -1
  91. package/dist/backend/llvm/expr-async.js +73 -46
  92. package/dist/backend/llvm/expr-async.js.map +1 -1
  93. package/dist/backend/llvm/expr-async.test.js +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  95. package/dist/backend/llvm/expr-bytes.js +76 -29
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  98. package/dist/backend/llvm/expr-callbacks.js +48 -11
  99. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  101. package/dist/backend/llvm/expr-calls.js +71 -53
  102. package/dist/backend/llvm/expr-calls.js.map +1 -1
  103. package/dist/backend/llvm/expr-calls.test.js +1 -1
  104. package/dist/backend/llvm/expr-containers.js +39 -15
  105. package/dist/backend/llvm/expr-containers.js.map +1 -1
  106. package/dist/backend/llvm/expr-control.js +16 -16
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  109. package/dist/backend/llvm/expr-dynamic.js +67 -62
  110. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  111. package/dist/backend/llvm/expr-primitives.js +121 -25
  112. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  113. package/dist/backend/llvm/expr-primitives.test.js +2 -2
  114. package/dist/backend/llvm/expr-records.d.ts +1 -1
  115. package/dist/backend/llvm/expr-records.js +32 -11
  116. package/dist/backend/llvm/expr-records.js.map +1 -1
  117. package/dist/backend/llvm/expr-stream-bridges.js +54 -12
  118. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  119. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  120. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  121. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  122. package/dist/backend/llvm/int32-abi.test.js +2 -2
  123. package/dist/backend/llvm/integer-clones.test.js +3 -3
  124. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  125. package/dist/backend/llvm/integer-remainder.js +156 -22
  126. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  127. package/dist/backend/llvm/intern-tables.test.js +1 -1
  128. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  129. package/dist/backend/llvm/jsval-encoding.js +20 -0
  130. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  131. package/dist/backend/llvm/jsval.d.ts +12 -0
  132. package/dist/backend/llvm/jsval.js +488 -0
  133. package/dist/backend/llvm/jsval.js.map +1 -0
  134. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  135. package/dist/backend/llvm/lazy-captures.js +39 -17
  136. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  137. package/dist/backend/llvm/lib-abi.js +1 -1
  138. package/dist/backend/llvm/lib-abi.js.map +1 -1
  139. package/dist/backend/llvm/lib-connect.js +1 -1
  140. package/dist/backend/llvm/lib-connect.js.map +1 -1
  141. package/dist/backend/llvm/lib-datagram.js +14 -8
  142. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  143. package/dist/backend/llvm/lib-dispatch.js +189 -23
  144. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  145. package/dist/backend/llvm/lib-filesystem.js +42 -13
  146. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  147. package/dist/backend/llvm/lib-http2.js +3 -3
  148. package/dist/backend/llvm/lib-http2.js.map +1 -1
  149. package/dist/backend/llvm/lib-lookup.js +2 -2
  150. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  151. package/dist/backend/llvm/lib-network.js +56 -22
  152. package/dist/backend/llvm/lib-network.js.map +1 -1
  153. package/dist/backend/llvm/lib-process.js +90 -50
  154. package/dist/backend/llvm/lib-process.js.map +1 -1
  155. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  156. package/dist/backend/llvm/lib-shared.js +187 -6
  157. package/dist/backend/llvm/lib-shared.js.map +1 -1
  158. package/dist/backend/llvm/lib-stream.js +46 -16
  159. package/dist/backend/llvm/lib-stream.js.map +1 -1
  160. package/dist/backend/llvm/lib-test.js +43 -7
  161. package/dist/backend/llvm/lib-test.js.map +1 -1
  162. package/dist/backend/llvm/lib-tls.js +4 -9
  163. package/dist/backend/llvm/lib-tls.js.map +1 -1
  164. package/dist/backend/llvm/local-array-reads.js +2 -2
  165. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  166. package/dist/backend/llvm/local-extents.d.ts +19 -0
  167. package/dist/backend/llvm/local-extents.js +169 -0
  168. package/dist/backend/llvm/local-extents.js.map +1 -0
  169. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  170. package/dist/backend/llvm/local-extents.test.js +92 -0
  171. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  172. package/dist/backend/llvm/local-union-storage.js +7 -7
  173. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  174. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  175. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  176. package/dist/backend/llvm/map-number-lookup.js +2 -2
  177. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  178. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  179. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  180. package/dist/backend/llvm/narrow-guards.js +151 -0
  181. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  182. package/dist/backend/llvm/nullable-unions.d.ts +64 -6
  183. package/dist/backend/llvm/nullable-unions.js +103 -6
  184. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  185. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  186. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  187. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  188. package/dist/backend/llvm/publish.d.ts +4 -0
  189. package/dist/backend/llvm/publish.js +14 -2
  190. package/dist/backend/llvm/publish.js.map +1 -1
  191. package/dist/backend/llvm/publish.test.js +1 -1
  192. package/dist/backend/llvm/receivers.d.ts +31 -0
  193. package/dist/backend/llvm/receivers.js +395 -0
  194. package/dist/backend/llvm/receivers.js.map +1 -0
  195. package/dist/backend/llvm/record-results.d.ts +12 -1
  196. package/dist/backend/llvm/record-results.js +64 -4
  197. package/dist/backend/llvm/record-results.js.map +1 -1
  198. package/dist/backend/llvm/reference-effects.js +9 -0
  199. package/dist/backend/llvm/reference-effects.js.map +1 -1
  200. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  201. package/dist/backend/llvm/reference-writes.js +142 -6
  202. package/dist/backend/llvm/reference-writes.js.map +1 -1
  203. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  204. package/dist/backend/llvm/reference-writes.test.js +88 -0
  205. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  206. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  207. package/dist/backend/llvm/regex-matchers.js +33 -0
  208. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  209. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  210. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  211. package/dist/backend/llvm/regions.d.ts +1 -1
  212. package/dist/backend/llvm/regions.js +9 -6
  213. package/dist/backend/llvm/regions.js.map +1 -1
  214. package/dist/backend/llvm/regions.test.js +1 -1
  215. package/dist/backend/llvm/shapes.d.ts +66 -43
  216. package/dist/backend/llvm/shapes.js +280 -21
  217. package/dist/backend/llvm/shapes.js.map +1 -1
  218. package/dist/backend/llvm/shapes.test.js +37 -3
  219. package/dist/backend/llvm/shapes.test.js.map +1 -1
  220. package/dist/backend/llvm/split-loops.js +2 -2
  221. package/dist/backend/llvm/split-loops.js.map +1 -1
  222. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  223. package/dist/backend/llvm/stack-objects.js +133 -10
  224. package/dist/backend/llvm/stack-objects.js.map +1 -1
  225. package/dist/backend/llvm/stack-objects.test.js +55 -1
  226. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  227. package/dist/backend/llvm/stack-unions.test.js +1 -1
  228. package/dist/backend/llvm/string-construction.test.js +1 -1
  229. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  230. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  231. package/dist/backend/llvm/string-slices.d.ts +25 -0
  232. package/dist/backend/llvm/string-slices.js +207 -1
  233. package/dist/backend/llvm/string-slices.js.map +1 -1
  234. package/dist/backend/llvm/string-slices.test.js +139 -2
  235. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  236. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  237. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  238. package/dist/backend/llvm/thread-slots.js +142 -0
  239. package/dist/backend/llvm/thread-slots.js.map +1 -0
  240. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  241. package/dist/backend/llvm/thread-slots.test.js +110 -0
  242. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  243. package/dist/backend/llvm/union-repr.d.ts +7 -7
  244. package/dist/backend/llvm/union-repr.js +18 -2
  245. package/dist/backend/llvm/union-repr.js.map +1 -1
  246. package/dist/backend/llvm/union-retype.test.js +17 -3
  247. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  248. package/dist/backend/llvm/walkers.d.ts +2 -2
  249. package/dist/backend/llvm/walkers.js +51 -26
  250. package/dist/backend/llvm/walkers.js.map +1 -1
  251. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  252. package/dist/backend/llvm/wasm-modules.js +66 -0
  253. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  254. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  255. package/dist/backend/llvm/wrapping-sums.js +11 -3
  256. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  257. package/dist/backend/mangle.d.ts +7 -0
  258. package/dist/backend/mangle.js +11 -0
  259. package/dist/backend/mangle.js.map +1 -1
  260. package/dist/backend/may-throw.d.ts +3 -0
  261. package/dist/backend/may-throw.js +4 -2
  262. package/dist/backend/may-throw.js.map +1 -1
  263. package/dist/backend/may-throw.test.js +1 -1
  264. package/dist/backend/native/contracts.d.ts +37 -0
  265. package/dist/backend/native/executable.js +192 -137
  266. package/dist/backend/native/executable.js.map +1 -1
  267. package/dist/backend/native/library.js +1 -0
  268. package/dist/backend/native/library.js.map +1 -1
  269. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  270. package/dist/backend/native/runtime-inputs.js +1 -0
  271. package/dist/backend/native/runtime-inputs.js.map +1 -1
  272. package/dist/backend/native-link-info-core.d.ts +30 -0
  273. package/dist/backend/native-link-info-core.js.map +1 -1
  274. package/dist/backend/publication.test.js +1 -1
  275. package/dist/backend/runtime-pack-core.d.ts +9 -1
  276. package/dist/backend/runtime-pack-core.js +10 -1
  277. package/dist/backend/runtime-pack-core.js.map +1 -1
  278. package/dist/backend/runtime-pack-native.js +1 -1
  279. package/dist/backend/runtime-pack-native.js.map +1 -1
  280. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  281. package/dist/backend/runtime-pack-native.test.js +31 -0
  282. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  283. package/dist/backend/runtime-pack-targets.test.js +5 -0
  284. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  285. package/dist/backend/runtime-pack.test.js +5 -0
  286. package/dist/backend/runtime-pack.test.js.map +1 -1
  287. package/dist/backend/stack-observations.d.ts +22 -0
  288. package/dist/backend/stack-observations.js +382 -0
  289. package/dist/backend/stack-observations.js.map +1 -0
  290. package/dist/backend/stack-observations.test.d.ts +1 -0
  291. package/dist/backend/stack-observations.test.js +233 -0
  292. package/dist/backend/stack-observations.test.js.map +1 -0
  293. package/dist/backend/target-diagnostics.js +8 -0
  294. package/dist/backend/target-diagnostics.js.map +1 -1
  295. package/dist/backend/target-diagnostics.test.js +1 -1
  296. package/dist/backend/warm-cache.js +5 -0
  297. package/dist/backend/warm-cache.js.map +1 -1
  298. package/dist/backend/young-nursery.d.ts +7 -0
  299. package/dist/backend/young-nursery.js +10 -0
  300. package/dist/backend/young-nursery.js.map +1 -0
  301. package/dist/cli/command.js +44 -4
  302. package/dist/cli/command.js.map +1 -1
  303. package/dist/cli/usage.d.ts +11 -1
  304. package/dist/cli/usage.js +20 -1
  305. package/dist/cli/usage.js.map +1 -1
  306. package/dist/compat/fetch-profile.js +10 -1
  307. package/dist/compat/fetch-profile.js.map +1 -1
  308. package/dist/compile-types.d.ts +13 -0
  309. package/dist/contracts/check.js +24 -6
  310. package/dist/contracts/check.js.map +1 -1
  311. package/dist/contracts/int32-elements.d.ts +115 -0
  312. package/dist/contracts/int32-elements.js +1179 -0
  313. package/dist/contracts/int32-elements.js.map +1 -0
  314. package/dist/coverage/report.d.ts +16 -0
  315. package/dist/coverage/report.js +182 -1
  316. package/dist/coverage/report.js.map +1 -1
  317. package/dist/coverage/surface-manifest.js +16 -3
  318. package/dist/coverage/surface-manifest.js.map +1 -1
  319. package/dist/coverage/verdict-cache.d.ts +2 -0
  320. package/dist/coverage/verdict-cache.js +12 -0
  321. package/dist/coverage/verdict-cache.js.map +1 -1
  322. package/dist/coverage/verdict-cache.test.js +2 -1
  323. package/dist/coverage/verdict-cache.test.js.map +1 -1
  324. package/dist/diagnostics/diagnostic.d.ts +10 -6
  325. package/dist/diagnostics/diagnostic.js +29 -21
  326. package/dist/diagnostics/diagnostic.js.map +1 -1
  327. package/dist/diagnostics/envelope.d.ts +39 -2
  328. package/dist/diagnostics/envelope.js.map +1 -1
  329. package/dist/diagnostics/render.d.ts +7 -0
  330. package/dist/diagnostics/render.js +50 -13
  331. package/dist/diagnostics/render.js.map +1 -1
  332. package/dist/diagnostics/render.test.d.ts +1 -0
  333. package/dist/diagnostics/render.test.js +49 -0
  334. package/dist/diagnostics/render.test.js.map +1 -0
  335. package/dist/executable/executable-cache.d.ts +17 -0
  336. package/dist/executable/executable-cache.js +13 -1
  337. package/dist/executable/executable-cache.js.map +1 -1
  338. package/dist/executable/executable-cache.test.js +7 -1
  339. package/dist/executable/executable-cache.test.js.map +1 -1
  340. package/dist/executable/prepare.js +2 -1
  341. package/dist/executable/prepare.js.map +1 -1
  342. package/dist/frontend/analysis.js +6 -1
  343. package/dist/frontend/analysis.js.map +1 -1
  344. package/dist/frontend/builtin-modules.d.ts +16 -2
  345. package/dist/frontend/builtin-modules.js +40 -7
  346. package/dist/frontend/builtin-modules.js.map +1 -1
  347. package/dist/frontend/cjs-syntax.js +52 -51
  348. package/dist/frontend/cjs-syntax.js.map +1 -1
  349. package/dist/frontend/contract-types.d.ts +3 -0
  350. package/dist/frontend/contract-types.js +36 -7
  351. package/dist/frontend/contract-types.js.map +1 -1
  352. package/dist/frontend/experimental-import.d.ts +5 -1
  353. package/dist/frontend/experimental-import.js +26 -7
  354. package/dist/frontend/experimental-import.js.map +1 -1
  355. package/dist/frontend/fork-target.js +20 -22
  356. package/dist/frontend/fork-target.js.map +1 -1
  357. package/dist/frontend/fork-target.test.js +2 -1
  358. package/dist/frontend/fork-target.test.js.map +1 -1
  359. package/dist/frontend/function-completion.js +6 -6
  360. package/dist/frontend/function-completion.js.map +1 -1
  361. package/dist/frontend/helper-tokens.js +15 -3
  362. package/dist/frontend/helper-tokens.js.map +1 -1
  363. package/dist/frontend/helper-tokens.test.js +7 -1
  364. package/dist/frontend/helper-tokens.test.js.map +1 -1
  365. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  366. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  367. package/dist/frontend/input-tracker.d.ts +3 -0
  368. package/dist/frontend/input-tracker.js +32 -3
  369. package/dist/frontend/input-tracker.js.map +1 -1
  370. package/dist/frontend/lib-contract.js +36 -32
  371. package/dist/frontend/lib-contract.js.map +1 -1
  372. package/dist/frontend/lib-exports.js +3 -3
  373. package/dist/frontend/lib-exports.js.map +1 -1
  374. package/dist/frontend/lowering/array-values.d.ts +8 -3
  375. package/dist/frontend/lowering/array-values.js +60 -11
  376. package/dist/frontend/lowering/array-values.js.map +1 -1
  377. package/dist/frontend/lowering/assert-instances.js +4 -4
  378. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  379. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  380. package/dist/frontend/lowering/assertion-identity.js +70 -0
  381. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  382. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  383. package/dist/frontend/lowering/assertion-members.js +185 -0
  384. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  385. package/dist/frontend/lowering/binding-analysis.js +27 -20
  386. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  387. package/dist/frontend/lowering/builtin-calls.js +63 -5
  388. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  389. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  390. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  391. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  392. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  393. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  394. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  395. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  396. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  397. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  398. package/dist/frontend/lowering/builtins/blob.js +8 -6
  399. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  400. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
  401. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
  402. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  403. package/dist/frontend/lowering/builtins/callable-aliases.js +16 -5
  404. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  405. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  406. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  407. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  408. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  409. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  410. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  411. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  412. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  413. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  414. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  415. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  416. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  417. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  418. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  419. package/dist/frontend/lowering/builtins/compression.js +107 -44
  420. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  421. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  422. package/dist/frontend/lowering/builtins/constants.js +28 -7
  423. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  424. package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
  425. package/dist/frontend/lowering/builtins/crypto.js +211 -37
  426. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  428. package/dist/frontend/lowering/builtins/dates.js +92 -16
  429. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  430. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  431. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  432. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  433. package/dist/frontend/lowering/builtins/environment.js +3 -3
  434. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  435. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  436. package/dist/frontend/lowering/builtins/errors.js +169 -3
  437. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  438. package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
  439. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  440. package/dist/frontend/lowering/builtins/filesystem.js +77 -77
  441. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  442. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  443. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  444. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  445. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  446. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  447. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  448. package/dist/frontend/lowering/builtins/json.js +232 -24
  449. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  450. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  451. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  452. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  453. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  454. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  455. package/dist/frontend/lowering/builtins/module-calls.js +55 -44
  456. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  457. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  458. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  459. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  461. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  462. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  464. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  465. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  466. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  467. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  468. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  469. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  470. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  471. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  472. package/dist/frontend/lowering/builtins/performance.js +259 -8
  473. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/process.d.ts +32 -1
  475. package/dist/frontend/lowering/builtins/process.js +461 -99
  476. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  478. package/dist/frontend/lowering/builtins/promises.js +326 -43
  479. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  480. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
  481. package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
  482. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/properties.js +37 -1
  484. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  485. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  486. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  487. package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
  488. package/dist/frontend/lowering/builtins/readline.js +136 -39
  489. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  490. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  491. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  492. package/dist/frontend/lowering/builtins/reflection.js +16 -14
  493. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  494. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  495. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  496. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  497. package/dist/frontend/lowering/builtins/strings.js +101 -12
  498. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  499. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  500. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  501. package/dist/frontend/lowering/builtins/timers.js +75 -30
  502. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  503. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  504. package/dist/frontend/lowering/builtins/url.js +120 -17
  505. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  506. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  507. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  508. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  509. package/dist/frontend/lowering/builtins/v8.js +105 -0
  510. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  511. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  512. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  513. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  514. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  515. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  516. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  517. package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
  518. package/dist/frontend/lowering/builtins/workers.js +193 -8
  519. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  520. package/dist/frontend/lowering/call-arguments.js +69 -14
  521. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  522. package/dist/frontend/lowering/call-signatures.d.ts +19 -1
  523. package/dist/frontend/lowering/call-signatures.js +254 -47
  524. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  525. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  526. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  527. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  528. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  529. package/dist/frontend/lowering/cjs-exports-object.js +528 -0
  530. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  531. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  532. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  533. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  534. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  535. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  536. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  537. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  538. package/dist/frontend/lowering/class-attributes.js +378 -0
  539. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  540. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  541. package/dist/frontend/lowering/class-callbacks.js +21 -10
  542. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  543. package/dist/frontend/lowering/class-construction.js +49 -4
  544. package/dist/frontend/lowering/class-construction.js.map +1 -1
  545. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  546. package/dist/frontend/lowering/class-descriptors.js +8 -8
  547. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  548. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  549. package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
  550. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  551. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  552. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  553. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  554. package/dist/frontend/lowering/class-iterables.js +31 -0
  555. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  556. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  557. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  558. package/dist/frontend/lowering/class-method-values.js +56 -10
  559. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  560. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  561. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  562. package/dist/frontend/lowering/class-protocols.js +25 -44
  563. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  564. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  565. package/dist/frontend/lowering/class-prototypes.js +80 -18
  566. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  567. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  568. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  569. package/dist/frontend/lowering/class-static-data.js +2 -2
  570. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  571. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  572. package/dist/frontend/lowering/class-to-primitive.js +261 -0
  573. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  574. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  575. package/dist/frontend/lowering/class-unions.js +102 -1
  576. package/dist/frontend/lowering/class-unions.js.map +1 -1
  577. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  578. package/dist/frontend/lowering/code-generation.js +127 -0
  579. package/dist/frontend/lowering/code-generation.js.map +1 -0
  580. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  581. package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
  582. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  583. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  584. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  585. package/dist/frontend/lowering/coercions/structural.js +35 -3
  586. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  587. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  588. package/dist/frontend/lowering/coercions/unions.js +57 -1
  589. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  590. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  591. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  592. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  593. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  594. package/dist/frontend/lowering/construction-escapes.js +8 -8
  595. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  596. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  597. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  598. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  599. package/dist/frontend/lowering/constructor-returns.js +477 -0
  600. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  601. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  602. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  603. package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
  604. package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
  605. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  606. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  607. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  608. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  609. package/dist/frontend/lowering/containers/array-construction.js +51 -13
  610. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  611. package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
  612. package/dist/frontend/lowering/containers/array-from-async.js +159 -14
  613. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  614. package/dist/frontend/lowering/containers/array-methods.js +89 -77
  615. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  616. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  617. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  618. package/dist/frontend/lowering/containers/bytes.js +161 -101
  619. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  620. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  621. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  622. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  623. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  624. package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
  625. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  626. package/dist/frontend/lowering/containers/collection-methods.js +54 -25
  627. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  628. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  629. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  630. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  631. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  632. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  633. package/dist/frontend/lowering/containers/for-of.js +19 -19
  634. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  635. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  636. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  637. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  638. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  639. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  640. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  641. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  642. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  643. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  644. package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
  645. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  646. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  647. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  648. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
  649. package/dist/frontend/lowering/cycle-initialization.js +39 -0
  650. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  651. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  652. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  653. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  654. package/dist/frontend/lowering/devirtualize.js +27 -7
  655. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  656. package/dist/frontend/lowering/divergences.d.ts +0 -5
  657. package/dist/frontend/lowering/divergences.js +62 -125
  658. package/dist/frontend/lowering/divergences.js.map +1 -1
  659. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  660. package/dist/frontend/lowering/dyn-streams.js +257 -0
  661. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  662. package/dist/frontend/lowering/error-methods.js +4 -1
  663. package/dist/frontend/lowering/error-methods.js.map +1 -1
  664. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  665. package/dist/frontend/lowering/error-name-order.js +93 -0
  666. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  667. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  668. package/dist/frontend/lowering/expressions/array-literals.js +703 -0
  669. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  670. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  671. package/dist/frontend/lowering/expressions/binary.js +2483 -0
  672. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  673. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  674. package/dist/frontend/lowering/expressions/element-access.js +1797 -0
  675. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  676. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  677. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  678. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  679. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  680. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  681. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  682. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  683. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  684. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
  685. package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
  686. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  687. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  688. package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
  689. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  690. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  691. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  692. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  693. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  694. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  695. package/dist/frontend/lowering/expressions/object-literals.js +253 -85
  696. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  697. package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
  698. package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
  699. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  700. package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
  701. package/dist/frontend/lowering/expressions/property-access.js +3544 -0
  702. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  703. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  704. package/dist/frontend/lowering/expressions/relational.js +1679 -0
  705. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  706. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  707. package/dist/frontend/lowering/expressions/typeof.js +538 -0
  708. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  709. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  710. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  711. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  712. package/dist/frontend/lowering/expressions/updates.js +780 -0
  713. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  714. package/dist/frontend/lowering/function-context.d.ts +10 -0
  715. package/dist/frontend/lowering/function-context.js +11 -1
  716. package/dist/frontend/lowering/function-context.js.map +1 -1
  717. package/dist/frontend/lowering/function-returns.js +52 -28
  718. package/dist/frontend/lowering/function-returns.js.map +1 -1
  719. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  720. package/dist/frontend/lowering/general-streams.js +108 -0
  721. package/dist/frontend/lowering/general-streams.js.map +1 -0
  722. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  723. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  724. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  725. package/dist/frontend/lowering/generic-functions.d.ts +39 -0
  726. package/dist/frontend/lowering/generic-functions.js +393 -75
  727. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  728. package/dist/frontend/lowering/import-meta.js +2 -2
  729. package/dist/frontend/lowering/import-meta.js.map +1 -1
  730. package/dist/frontend/lowering/intern-tables.js +10 -9
  731. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  732. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  733. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  734. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  735. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  736. package/dist/frontend/lowering/js-class-fields.js +170 -0
  737. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  738. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  739. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  740. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  741. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  742. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  743. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  744. package/dist/frontend/lowering/json-require.d.ts +22 -0
  745. package/dist/frontend/lowering/json-require.js +131 -0
  746. package/dist/frontend/lowering/json-require.js.map +1 -0
  747. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  748. package/dist/frontend/lowering/key-order-witness.js +641 -0
  749. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  750. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  751. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  752. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  753. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  754. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  755. package/dist/frontend/lowering/lower-assert.js +61 -60
  756. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  757. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  758. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  759. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  760. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  761. package/dist/frontend/lowering/lower-builtin-values.js +32 -3
  762. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  763. package/dist/frontend/lowering/lower-calls.js +1239 -442
  764. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  765. package/dist/frontend/lowering/lower-classes.d.ts +50 -3
  766. package/dist/frontend/lowering/lower-classes.js +1473 -468
  767. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  768. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  769. package/dist/frontend/lowering/lower-comptime.js +111 -13
  770. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  771. package/dist/frontend/lowering/lower-console.js +13 -11
  772. package/dist/frontend/lowering/lower-console.js.map +1 -1
  773. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  774. package/dist/frontend/lowering/lower-dgram.js +179 -8
  775. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  776. package/dist/frontend/lowering/lower-enums.js +113 -14
  777. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  778. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  779. package/dist/frontend/lowering/lower-event-emitter.js +258 -70
  780. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  781. package/dist/frontend/lowering/lower-event-target.js +2 -2
  782. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  783. package/dist/frontend/lowering/lower-expando.js +17 -13
  784. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  785. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  786. package/dist/frontend/lowering/lower-exprs.js +1481 -12489
  787. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  788. package/dist/frontend/lowering/lower-functions.js +68 -22
  789. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  790. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  791. package/dist/frontend/lowering/lower-generators.js +29 -16
  792. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  793. package/dist/frontend/lowering/lower-global-value.js +5 -1
  794. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  795. package/dist/frontend/lowering/lower-inspect.js +331 -96
  796. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  797. package/dist/frontend/lowering/lower-mixins.js +23 -20
  798. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  799. package/dist/frontend/lowering/lower-mock.d.ts +8 -1
  800. package/dist/frontend/lowering/lower-mock.js +185 -18
  801. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  802. package/dist/frontend/lowering/lower-modules.js +267 -61
  803. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  804. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  805. package/dist/frontend/lowering/lower-namespaces.js +45 -33
  806. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  807. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  808. package/dist/frontend/lowering/lower-node-module.js +147 -14
  809. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  810. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  811. package/dist/frontend/lowering/lower-server.js +488 -100
  812. package/dist/frontend/lowering/lower-server.js.map +1 -1
  813. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  814. package/dist/frontend/lowering/lower-stdlib.js +151 -109
  815. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  816. package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
  817. package/dist/frontend/lowering/lower-stmts.js +1541 -391
  818. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  819. package/dist/frontend/lowering/lower-stream.d.ts +3 -0
  820. package/dist/frontend/lowering/lower-stream.js +398 -56
  821. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  822. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  823. package/dist/frontend/lowering/lower-test.js +437 -62
  824. package/dist/frontend/lowering/lower-test.js.map +1 -1
  825. package/dist/frontend/lowering/lower-timers.js +80 -32
  826. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  827. package/dist/frontend/lowering/lower-url.js +1 -1
  828. package/dist/frontend/lowering/lower-url.js.map +1 -1
  829. package/dist/frontend/lowering/lowerer.d.ts +399 -26
  830. package/dist/frontend/lowering/lowerer.js +1910 -305
  831. package/dist/frontend/lowering/lowerer.js.map +1 -1
  832. package/dist/frontend/lowering/lowerer.test.js +10 -4
  833. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  834. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  835. package/dist/frontend/lowering/maybe-promise.js +249 -0
  836. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  837. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  838. package/dist/frontend/lowering/module-member-this.js +262 -0
  839. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  840. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  841. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  842. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  843. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  844. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  845. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  846. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  847. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  848. package/dist/frontend/lowering/native-ffi.js +11 -11
  849. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  850. package/dist/frontend/lowering/object-factory-new.js +6 -8
  851. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  852. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  853. package/dist/frontend/lowering/private-brands.js +265 -0
  854. package/dist/frontend/lowering/private-brands.js.map +1 -0
  855. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  856. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  857. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  858. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  859. package/dist/frontend/lowering/require-initialization.js +246 -0
  860. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  861. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  862. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  863. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  864. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  865. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  866. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  867. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  868. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  869. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  870. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  871. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  872. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  873. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  874. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  875. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  876. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  877. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  878. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  879. package/dist/frontend/lowering/split-consumers.js +4 -4
  880. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  881. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  882. package/dist/frontend/lowering/static-function-names.js +212 -0
  883. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  884. package/dist/frontend/lowering/static-this.js +6 -6
  885. package/dist/frontend/lowering/static-this.js.map +1 -1
  886. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  887. package/dist/frontend/lowering/strict-mode.js +31 -0
  888. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  889. package/dist/frontend/lowering/string-index-bounds.js +10 -10
  890. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  891. package/dist/frontend/lowering/string-index.d.ts +12 -0
  892. package/dist/frontend/lowering/string-index.js +72 -1
  893. package/dist/frontend/lowering/string-index.js.map +1 -1
  894. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  895. package/dist/frontend/lowering/surfaces.js +252 -41
  896. package/dist/frontend/lowering/surfaces.js.map +1 -1
  897. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  898. package/dist/frontend/lowering/symbol-fields.js +204 -36
  899. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  900. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  901. package/dist/frontend/lowering/symbol-methods.js +24 -6
  902. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  903. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  904. package/dist/frontend/lowering/thread-slots.js +208 -0
  905. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  906. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  907. package/dist/frontend/lowering/typed-arguments.js +472 -0
  908. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  909. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  910. package/dist/frontend/lowering/union-retag.js +27 -0
  911. package/dist/frontend/lowering/union-retag.js.map +1 -1
  912. package/dist/frontend/lowering/union-retag.test.js +24 -1
  913. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  914. package/dist/frontend/lowering/var-hoisting.js +6 -6
  915. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  916. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  917. package/dist/frontend/mock-shapes.js +13 -6
  918. package/dist/frontend/mock-shapes.js.map +1 -1
  919. package/dist/frontend/module-source-candidates.js +1 -1
  920. package/dist/frontend/module-source-candidates.js.map +1 -1
  921. package/dist/frontend/module-source-candidates.test.js +2 -1
  922. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  923. package/dist/frontend/module-syntax.js +8 -8
  924. package/dist/frontend/module-syntax.js.map +1 -1
  925. package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
  926. package/dist/frontend/npm-static-bundled-chunks.js +810 -0
  927. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  928. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  929. package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
  930. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  931. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  932. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  933. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  934. package/dist/frontend/npm-static-bundled-esm.js +768 -0
  935. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  936. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  937. package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
  938. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  939. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  940. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  941. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  942. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  943. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  944. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  945. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  946. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  947. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  948. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  949. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  950. package/dist/frontend/npm-static-prune.js +36 -24
  951. package/dist/frontend/npm-static-prune.js.map +1 -1
  952. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  953. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  954. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  955. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  956. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  957. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  958. package/dist/frontend/npm-static-subtyping.js +7 -9
  959. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  960. package/dist/frontend/npm-static.d.ts +17 -1
  961. package/dist/frontend/npm-static.js +167 -16
  962. package/dist/frontend/npm-static.js.map +1 -1
  963. package/dist/frontend/npm-static.test.js +22 -1
  964. package/dist/frontend/npm-static.test.js.map +1 -1
  965. package/dist/frontend/pipeline.js +164 -26
  966. package/dist/frontend/pipeline.js.map +1 -1
  967. package/dist/frontend/pipeline.test.js +22 -1
  968. package/dist/frontend/pipeline.test.js.map +1 -1
  969. package/dist/frontend/program-analysis.d.ts +6 -1
  970. package/dist/frontend/program-analysis.js +7 -0
  971. package/dist/frontend/program-analysis.js.map +1 -1
  972. package/dist/frontend/program.d.ts +92 -2
  973. package/dist/frontend/program.js +1557 -255
  974. package/dist/frontend/program.js.map +1 -1
  975. package/dist/frontend/program.test.js +76 -6
  976. package/dist/frontend/program.test.js.map +1 -1
  977. package/dist/frontend/resolve.js +36 -2
  978. package/dist/frontend/resolve.js.map +1 -1
  979. package/dist/frontend/resolve.test.js +49 -0
  980. package/dist/frontend/resolve.test.js.map +1 -1
  981. package/dist/frontend/services.d.ts +20 -1
  982. package/dist/frontend/services.js +40 -3
  983. package/dist/frontend/services.js.map +1 -1
  984. package/dist/frontend/services.test.js +2 -1
  985. package/dist/frontend/services.test.js.map +1 -1
  986. package/dist/frontend/threads-import.js +1 -1
  987. package/dist/frontend/threads-import.js.map +1 -1
  988. package/dist/frontend/tier-analysis.d.ts +71 -0
  989. package/dist/frontend/tier-analysis.js +522 -0
  990. package/dist/frontend/tier-analysis.js.map +1 -0
  991. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  992. package/dist/frontend/ts7/api-conformance.js +7 -0
  993. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  994. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  995. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  996. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  997. package/dist/frontend/ts7/ast-node.js +64 -18
  998. package/dist/frontend/ts7/ast-node.js.map +1 -1
  999. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1000. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1001. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1002. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1003. package/dist/frontend/ts7/ast.d.ts +1 -0
  1004. package/dist/frontend/ts7/ast.js +3 -2
  1005. package/dist/frontend/ts7/ast.js.map +1 -1
  1006. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1007. package/dist/frontend/ts7/checker-backend.js +88 -0
  1008. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1009. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1010. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1011. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1012. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1013. package/dist/frontend/ts7/checker-cache.js +0 -6
  1014. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1015. package/dist/frontend/ts7/checker.d.ts +18 -11
  1016. package/dist/frontend/ts7/checker.js +42 -55
  1017. package/dist/frontend/ts7/checker.js.map +1 -1
  1018. package/dist/frontend/ts7/checker.test.js +10 -7
  1019. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1020. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1021. package/dist/frontend/ts7/diagnostic.js +22 -0
  1022. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1023. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1024. package/dist/frontend/ts7/node-functions.js +18 -0
  1025. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1026. package/dist/frontend/ts7/program-host.d.ts +5 -1
  1027. package/dist/frontend/ts7/program-host.js +12 -0
  1028. package/dist/frontend/ts7/program-host.js.map +1 -1
  1029. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1030. package/dist/frontend/ts7/rpc-api.js +8 -1
  1031. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1032. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1033. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1034. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1035. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1036. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1037. package/dist/frontend/ts7/semantic-model.d.ts +54 -24
  1038. package/dist/frontend/ts7/semantic-model.js +88 -16
  1039. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1040. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1041. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1042. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1043. package/dist/frontend/ts7/semantic-types.js +1 -1
  1044. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1045. package/dist/frontend/ts7/session.d.ts +11 -11
  1046. package/dist/frontend/ts7/session.js +8 -5
  1047. package/dist/frontend/ts7/session.js.map +1 -1
  1048. package/dist/frontend/ts7/session.test.js +9 -5
  1049. package/dist/frontend/ts7/session.test.js.map +1 -1
  1050. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1051. package/dist/frontend/ts7/source-parser.js +24 -3
  1052. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1053. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1054. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1055. package/dist/frontend/type-mapper.d.ts +122 -2
  1056. package/dist/frontend/type-mapper.js +2545 -719
  1057. package/dist/frontend/type-mapper.js.map +1 -1
  1058. package/dist/frontend/type-only-imports.d.ts +28 -0
  1059. package/dist/frontend/type-only-imports.js +122 -0
  1060. package/dist/frontend/type-only-imports.js.map +1 -0
  1061. package/dist/frontend/worker-target.js +8 -8
  1062. package/dist/frontend/worker-target.js.map +1 -1
  1063. package/dist/index.d.ts +3 -1
  1064. package/dist/index.js +29 -2
  1065. package/dist/index.js.map +1 -1
  1066. package/dist/ir/analysis.js +4 -2
  1067. package/dist/ir/analysis.js.map +1 -1
  1068. package/dist/ir/api.d.ts +1 -1
  1069. package/dist/ir/api.js +1 -1
  1070. package/dist/ir/api.js.map +1 -1
  1071. package/dist/ir/array-length-stability.d.ts +30 -0
  1072. package/dist/ir/array-length-stability.js +236 -0
  1073. package/dist/ir/array-length-stability.js.map +1 -0
  1074. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1075. package/dist/ir/array-length-stability.test.js +113 -0
  1076. package/dist/ir/array-length-stability.test.js.map +1 -0
  1077. package/dist/ir/build.d.ts +2 -2
  1078. package/dist/ir/build.js +1 -1
  1079. package/dist/ir/build.js.map +1 -1
  1080. package/dist/ir/builtin-effects.js +103 -0
  1081. package/dist/ir/builtin-effects.js.map +1 -1
  1082. package/dist/ir/builtin-signatures.d.ts +1 -1
  1083. package/dist/ir/builtin-signatures.js +494 -25
  1084. package/dist/ir/builtin-signatures.js.map +1 -1
  1085. package/dist/ir/byte-numbers.js +3 -0
  1086. package/dist/ir/byte-numbers.js.map +1 -1
  1087. package/dist/ir/callback-specialization.d.ts +37 -0
  1088. package/dist/ir/callback-specialization.js +459 -0
  1089. package/dist/ir/callback-specialization.js.map +1 -0
  1090. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1091. package/dist/ir/callback-specialization.test.js +208 -0
  1092. package/dist/ir/callback-specialization.test.js.map +1 -0
  1093. package/dist/ir/capture-values.d.ts +0 -1
  1094. package/dist/ir/capture-values.js +51 -40
  1095. package/dist/ir/capture-values.js.map +1 -1
  1096. package/dist/ir/constant-globals.test.js +1 -1
  1097. package/dist/ir/constant-tables.test.js +1 -1
  1098. package/dist/ir/field-values.test.js +1 -1
  1099. package/dist/ir/final-fields.test.js +1 -1
  1100. package/dist/ir/function-references.test.js +9 -1
  1101. package/dist/ir/function-references.test.js.map +1 -1
  1102. package/dist/ir/init-only-globals.test.js +1 -1
  1103. package/dist/ir/initializer-bindings.test.js +1 -1
  1104. package/dist/ir/int32-slots.d.ts +14 -0
  1105. package/dist/ir/int32-slots.js +97 -14
  1106. package/dist/ir/int32-slots.js.map +1 -1
  1107. package/dist/ir/int32-slots.test.js +1 -1
  1108. package/dist/ir/integer-loop-facts.d.ts +2 -0
  1109. package/dist/ir/integer-loop-facts.js +24 -3
  1110. package/dist/ir/integer-loop-facts.js.map +1 -1
  1111. package/dist/ir/integer-loops.d.ts +1 -1
  1112. package/dist/ir/integer-loops.js +39 -9
  1113. package/dist/ir/integer-loops.js.map +1 -1
  1114. package/dist/ir/integer-loops.test.js +104 -0
  1115. package/dist/ir/integer-loops.test.js.map +1 -1
  1116. package/dist/ir/integer-ranges.d.ts +3 -0
  1117. package/dist/ir/integer-ranges.js +3 -1
  1118. package/dist/ir/integer-ranges.js.map +1 -1
  1119. package/dist/ir/integer-ranges.test.js +82 -1
  1120. package/dist/ir/integer-ranges.test.js.map +1 -1
  1121. package/dist/ir/intrinsic-signatures.js +6 -0
  1122. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1123. package/dist/ir/ir.d.ts +221 -58
  1124. package/dist/ir/ir.js +119 -12
  1125. package/dist/ir/ir.js.map +1 -1
  1126. package/dist/ir/ir.test.js +10 -0
  1127. package/dist/ir/ir.test.js.map +1 -1
  1128. package/dist/ir/jsval.d.ts +8 -0
  1129. package/dist/ir/jsval.js +365 -0
  1130. package/dist/ir/jsval.js.map +1 -0
  1131. package/dist/ir/jsval.test.d.ts +1 -0
  1132. package/dist/ir/jsval.test.js +239 -0
  1133. package/dist/ir/jsval.test.js.map +1 -0
  1134. package/dist/ir/runtime-features.d.ts +148 -33
  1135. package/dist/ir/runtime-features.js +629 -386
  1136. package/dist/ir/runtime-features.js.map +1 -1
  1137. package/dist/ir/scalar-records.test.js +1 -1
  1138. package/dist/ir/self-captures.d.ts +33 -0
  1139. package/dist/ir/self-captures.js +245 -0
  1140. package/dist/ir/self-captures.js.map +1 -0
  1141. package/dist/ir/self-captures.test.d.ts +1 -0
  1142. package/dist/ir/self-captures.test.js +135 -0
  1143. package/dist/ir/self-captures.test.js.map +1 -0
  1144. package/dist/ir/serialize.d.ts +1 -1
  1145. package/dist/ir/serialize.js +7 -4
  1146. package/dist/ir/serialize.js.map +1 -1
  1147. package/dist/ir/tiers.d.ts +26 -0
  1148. package/dist/ir/tiers.js +101 -0
  1149. package/dist/ir/tiers.js.map +1 -0
  1150. package/dist/ir/tiers.test.d.ts +1 -0
  1151. package/dist/ir/tiers.test.js +140 -0
  1152. package/dist/ir/tiers.test.js.map +1 -0
  1153. package/dist/ir/traverse.js +103 -94
  1154. package/dist/ir/traverse.js.map +1 -1
  1155. package/dist/ir/traverse.test.js +33 -30
  1156. package/dist/ir/traverse.test.js.map +1 -1
  1157. package/dist/ir/unshare.js +65 -3
  1158. package/dist/ir/unshare.js.map +1 -1
  1159. package/dist/ir/unshare.test.js +1 -1
  1160. package/dist/ir/validate.js +175 -68
  1161. package/dist/ir/validate.js.map +1 -1
  1162. package/dist/ir/validate.test.js +26 -9
  1163. package/dist/ir/validate.test.js.map +1 -1
  1164. package/dist/library/fence-eval.test.js +1 -1
  1165. package/dist/library/int-infer.test.js +4 -4
  1166. package/dist/library/ir-policy.js +13 -0
  1167. package/dist/library/ir-policy.js.map +1 -1
  1168. package/dist/library/library-cache.d.ts +1 -0
  1169. package/dist/library/library-cache.js.map +1 -1
  1170. package/dist/library/library-cache.test.js +5 -5
  1171. package/dist/library/library-profile.d.ts +4 -4
  1172. package/dist/library/library-profile.js +35 -7
  1173. package/dist/library/library-profile.js.map +1 -1
  1174. package/dist/library/prepare.js +13 -1
  1175. package/dist/library/prepare.js.map +1 -1
  1176. package/dist/native/cli.js +5 -0
  1177. package/dist/native/cli.js.map +1 -1
  1178. package/dist/native/compiler.js +2 -2
  1179. package/dist/native/compiler.js.map +1 -1
  1180. package/dist/native/compiler.test.js +2 -2
  1181. package/dist/native/prepare.js +7 -0
  1182. package/dist/native/prepare.js.map +1 -1
  1183. package/dist/native/sanitizer.test.js +12 -0
  1184. package/dist/native/sanitizer.test.js.map +1 -1
  1185. package/dist/native/toolchain.d.ts +2 -0
  1186. package/dist/native/toolchain.js +10 -1
  1187. package/dist/native/toolchain.js.map +1 -1
  1188. package/dist/native/toolchain.test.js +39 -1
  1189. package/dist/native/toolchain.test.js.map +1 -1
  1190. package/dist/startup-cache.d.ts +1 -0
  1191. package/dist/startup-cache.js +1 -0
  1192. package/dist/startup-cache.js.map +1 -1
  1193. package/dist/wasm/base64.d.ts +5 -0
  1194. package/dist/wasm/base64.js +62 -0
  1195. package/dist/wasm/base64.js.map +1 -0
  1196. package/dist/wasm/binary.d.ts +36 -0
  1197. package/dist/wasm/binary.js +1976 -0
  1198. package/dist/wasm/binary.js.map +1 -0
  1199. package/dist/wasm/binary.test.d.ts +1 -0
  1200. package/dist/wasm/binary.test.js +190 -0
  1201. package/dist/wasm/binary.test.js.map +1 -0
  1202. package/dist/wasm/discover.d.ts +38 -0
  1203. package/dist/wasm/discover.js +377 -0
  1204. package/dist/wasm/discover.js.map +1 -0
  1205. package/dist/wasm/discover.test.d.ts +1 -0
  1206. package/dist/wasm/discover.test.js +24 -0
  1207. package/dist/wasm/discover.test.js.map +1 -0
  1208. package/dist/wasm/module.d.ts +151 -0
  1209. package/dist/wasm/module.js +575 -0
  1210. package/dist/wasm/module.js.map +1 -0
  1211. package/dist/wasm/translate.d.ts +48 -0
  1212. package/dist/wasm/translate.js +2129 -0
  1213. package/dist/wasm/translate.js.map +1 -0
  1214. package/dist/wasm/translate.test.d.ts +1 -0
  1215. package/dist/wasm/translate.test.js +207 -0
  1216. package/dist/wasm/translate.test.js.map +1 -0
  1217. package/package.json +21 -20
  1218. package/surface-manifest.json +303 -19
@@ -0,0 +1,1976 @@
1
+ /* The WebAssembly binary decoder and validator.
2
+ *
3
+ * Decodes a module completely and validates it against the feature level
4
+ * scriptc means to translate to native code: the MVP plus the finished
5
+ * post-MVP proposals that real npm modules use (sign-extension operators,
6
+ * non-trapping float-to-int conversions, bulk memory, multi-value, mutable
7
+ * globals, reference types and extended constant expressions). Where the
8
+ * WebAssembly 3.0 specification and V8 relax a 2.0 rule inside that set (a
9
+ * global initializer may read any earlier immutable global), the decoder
10
+ * follows them, because Node is the behavior oracle.
11
+ *
12
+ * Modules that use a proposal outside that set (SIMD, threads, exception
13
+ * handling, tail calls, function references and GC, memory64, multiple
14
+ * memories) still decode: the instructions that need the proposal are read
15
+ * for their immediates but not type-checked, and the summary names the
16
+ * proposal so that the module can be reported as not translatable rather
17
+ * than as invalid. Only GC type definitions stop the decode, since their
18
+ * layout would need the full GC type system.
19
+ *
20
+ * The decoder never evaluates anything and keeps no module contents beyond
21
+ * the counts and the feature set it reports. It is plain TypeScript that
22
+ * the native compiler also compiles. */
23
+ import { readMemargFlags } from "./module.js";
24
+ /** Proposals the summary can name, in report order. The first group is the
25
+ * translatable set; the rest are reported as unsupported. */
26
+ export const WASM_FEATURES = [
27
+ "mutable-globals",
28
+ "sign-extension",
29
+ "nontrapping-fptoint",
30
+ "bulk-memory",
31
+ "multi-value",
32
+ "reference-types",
33
+ "extended-const",
34
+ "simd",
35
+ "threads",
36
+ "exceptions",
37
+ "tail-call",
38
+ "function-references",
39
+ "gc",
40
+ "memory64",
41
+ "multi-memory",
42
+ ];
43
+ const TRANSLATABLE = new Set([
44
+ "mutable-globals",
45
+ "sign-extension",
46
+ "nontrapping-fptoint",
47
+ "bulk-memory",
48
+ "multi-value",
49
+ "reference-types",
50
+ "extended-const",
51
+ ]);
52
+ /** True for proposals inside the translatable feature level. */
53
+ export function isTranslatableFeature(feature) {
54
+ return TRANSLATABLE.has(feature);
55
+ }
56
+ /** A decode failure: malformed bytes or an invalid module. */
57
+ export class WasmError extends Error {
58
+ kind;
59
+ offset;
60
+ constructor(kind, message, offset) {
61
+ super(message);
62
+ this.kind = kind;
63
+ this.offset = offset;
64
+ }
65
+ }
66
+ // Value types. Zero is the "unknown" type of unreachable code.
67
+ const UNKNOWN = 0;
68
+ const I32 = 0x7f;
69
+ const I64 = 0x7e;
70
+ const F32 = 0x7d;
71
+ const F64 = 0x7c;
72
+ const V128 = 0x7b;
73
+ const FUNCREF = 0x70;
74
+ const EXTERNREF = 0x6f;
75
+ // V8's implementation limits that are part of validation (wasm-limits.h).
76
+ const MAX_TYPES = 1000000;
77
+ const MAX_FUNCTIONS = 1000000;
78
+ const MAX_IMPORTS = 100000;
79
+ const MAX_EXPORTS = 100000;
80
+ const MAX_GLOBALS = 1000000;
81
+ const MAX_DATA_SEGMENTS = 100000;
82
+ const MAX_LOCALS = 50000;
83
+ const MAX_PARAMS = 1000;
84
+ const MAX_RESULTS = 1000;
85
+ const MAX_FUNCTION_SIZE = 7654321;
86
+ const MAX_MEMORY_PAGES = 65536;
87
+ const MAX_TABLE_INIT = 10000000;
88
+ class Reader {
89
+ bytes;
90
+ pos;
91
+ end;
92
+ constructor(bytes, pos, end) {
93
+ this.bytes = bytes;
94
+ this.pos = pos;
95
+ this.end = end;
96
+ }
97
+ malformed(message) {
98
+ throw new WasmError("malformed", message, this.pos);
99
+ }
100
+ eof() {
101
+ return this.pos >= this.end;
102
+ }
103
+ u8() {
104
+ if (this.pos >= this.end)
105
+ this.malformed("unexpected end");
106
+ const b = this.bytes[this.pos];
107
+ this.pos++;
108
+ return b;
109
+ }
110
+ peek() {
111
+ if (this.pos >= this.end)
112
+ this.malformed("unexpected end");
113
+ return this.bytes[this.pos];
114
+ }
115
+ skip(n) {
116
+ if (n > this.end - this.pos)
117
+ this.malformed("unexpected end");
118
+ this.pos += n;
119
+ }
120
+ u32() {
121
+ let result = 0;
122
+ let scale = 1;
123
+ for (let i = 0; i < 5; i++) {
124
+ const b = this.u8();
125
+ if (i === 4 && (b & 0xf0) !== 0) {
126
+ this.malformed(b & 0x80 ? "integer representation too long" : "integer too large");
127
+ }
128
+ result += (b & 0x7f) * scale;
129
+ if ((b & 0x80) === 0)
130
+ return result;
131
+ scale *= 128;
132
+ }
133
+ return this.malformed("integer representation too long");
134
+ }
135
+ /** A signed LEB128 of `bits` bits (32, 33 or 64); answers the value for
136
+ * 32 and 33 bits and 0 for 64 (no caller needs it). */
137
+ sleb(bits) {
138
+ const maxBytes = Math.ceil(bits / 7);
139
+ let result = 0;
140
+ let scale = 1;
141
+ for (let i = 0; i < maxBytes; i++) {
142
+ const b = this.u8();
143
+ if (i === maxBytes - 1) {
144
+ // The final byte's bits above the value's width must repeat its
145
+ // sign bit, and it may not continue.
146
+ if (b & 0x80)
147
+ this.malformed("integer representation too long");
148
+ const used = bits - 7 * i;
149
+ const unused = (b >> (used - 1)) & ((1 << (8 - used)) - 1) & 0x7f;
150
+ const all = (1 << (7 - used + 1)) - 1;
151
+ if (unused !== 0 && unused !== all)
152
+ this.malformed("integer too large");
153
+ }
154
+ if (bits < 64)
155
+ result += (b & 0x7f) * scale;
156
+ scale *= 128;
157
+ if ((b & 0x80) === 0) {
158
+ if (bits < 64 && b & 0x40)
159
+ result -= scale;
160
+ return bits < 64 ? result : 0;
161
+ }
162
+ }
163
+ return this.malformed("integer representation too long");
164
+ }
165
+ u64() {
166
+ this.sleb(64);
167
+ }
168
+ name() {
169
+ const length = this.u32();
170
+ if (length > this.end - this.pos)
171
+ this.malformed("length out of bounds");
172
+ const start = this.pos;
173
+ this.pos += length;
174
+ return utf8(this.bytes, start, this.pos, this);
175
+ }
176
+ }
177
+ function utf8(bytes, start, end, reader) {
178
+ let out = "";
179
+ let i = start;
180
+ while (i < end) {
181
+ const b = bytes[i];
182
+ let cp = 0;
183
+ let need = 0;
184
+ if (b < 0x80) {
185
+ cp = b;
186
+ }
187
+ else if (b >= 0xc2 && b <= 0xdf) {
188
+ cp = b & 0x1f;
189
+ need = 1;
190
+ }
191
+ else if (b >= 0xe0 && b <= 0xef) {
192
+ cp = b & 0x0f;
193
+ need = 2;
194
+ }
195
+ else if (b >= 0xf0 && b <= 0xf4) {
196
+ cp = b & 0x07;
197
+ need = 3;
198
+ }
199
+ else {
200
+ reader.malformed("malformed UTF-8 encoding");
201
+ }
202
+ if (i + need >= end)
203
+ reader.malformed("malformed UTF-8 encoding");
204
+ for (let k = 1; k <= need; k++) {
205
+ const c = bytes[i + k];
206
+ if ((c & 0xc0) !== 0x80)
207
+ reader.malformed("malformed UTF-8 encoding");
208
+ cp = cp * 64 + (c & 0x3f);
209
+ }
210
+ if ((need === 2 && (cp < 0x800 || (cp >= 0xd800 && cp <= 0xdfff))) ||
211
+ (need === 3 && (cp < 0x10000 || cp > 0x10ffff))) {
212
+ reader.malformed("malformed UTF-8 encoding");
213
+ }
214
+ out += String.fromCodePoint(cp);
215
+ i += need + 1;
216
+ }
217
+ return out;
218
+ }
219
+ /** Load and store natural alignments (log2) by opcode, 0x28..0x3e. */
220
+ const MEMORY_ALIGN = [2, 3, 2, 3, 0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 2, 3, 2, 3, 0, 1, 0, 1, 2];
221
+ /** Load result / store operand types by opcode, 0x28..0x3e. */
222
+ const MEMORY_TYPE = [
223
+ I32,
224
+ I64,
225
+ F32,
226
+ F64,
227
+ I32,
228
+ I32,
229
+ I32,
230
+ I32,
231
+ I64,
232
+ I64,
233
+ I64,
234
+ I64,
235
+ I64,
236
+ I64,
237
+ I32,
238
+ I64,
239
+ F32,
240
+ F64,
241
+ I32,
242
+ I32,
243
+ I64,
244
+ I64,
245
+ I64,
246
+ ];
247
+ /** Numeric instruction signatures, 0x45..0xc4: operand type, operand
248
+ * count, result type. */
249
+ function numericSignature(op) {
250
+ if (op === 0x45)
251
+ return [I32, 1, I32];
252
+ if (op <= 0x4f)
253
+ return [I32, 2, I32];
254
+ if (op === 0x50)
255
+ return [I64, 1, I32];
256
+ if (op <= 0x5a)
257
+ return [I64, 2, I32];
258
+ if (op <= 0x60)
259
+ return [F32, 2, I32];
260
+ if (op <= 0x66)
261
+ return [F64, 2, I32];
262
+ if (op <= 0x69)
263
+ return [I32, 1, I32];
264
+ if (op <= 0x78)
265
+ return [I32, 2, I32];
266
+ if (op <= 0x7b)
267
+ return [I64, 1, I64];
268
+ if (op <= 0x8a)
269
+ return [I64, 2, I64];
270
+ if (op <= 0x91)
271
+ return [F32, 1, F32];
272
+ if (op <= 0x98)
273
+ return [F32, 2, F32];
274
+ if (op <= 0x9f)
275
+ return [F64, 1, F64];
276
+ if (op <= 0xa6)
277
+ return [F64, 2, F64];
278
+ switch (op) {
279
+ case 0xa7:
280
+ return [I64, 1, I32];
281
+ case 0xa8:
282
+ case 0xa9:
283
+ return [F32, 1, I32];
284
+ case 0xaa:
285
+ case 0xab:
286
+ return [F64, 1, I32];
287
+ case 0xac:
288
+ case 0xad:
289
+ return [I32, 1, I64];
290
+ case 0xae:
291
+ case 0xaf:
292
+ return [F32, 1, I64];
293
+ case 0xb0:
294
+ case 0xb1:
295
+ return [F64, 1, I64];
296
+ case 0xb2:
297
+ case 0xb3:
298
+ return [I32, 1, F32];
299
+ case 0xb4:
300
+ case 0xb5:
301
+ return [I64, 1, F32];
302
+ case 0xb6:
303
+ return [F64, 1, F32];
304
+ case 0xb7:
305
+ case 0xb8:
306
+ return [I32, 1, F64];
307
+ case 0xb9:
308
+ case 0xba:
309
+ return [I64, 1, F64];
310
+ case 0xbb:
311
+ return [F32, 1, F64];
312
+ case 0xbc:
313
+ return [F32, 1, I32];
314
+ case 0xbd:
315
+ return [F64, 1, I64];
316
+ case 0xbe:
317
+ return [I32, 1, F32];
318
+ case 0xbf:
319
+ return [I64, 1, F64];
320
+ case 0xc0:
321
+ case 0xc1:
322
+ return [I32, 1, I32];
323
+ default:
324
+ return [I64, 1, I64];
325
+ }
326
+ }
327
+ const SECTION_ORDER = {
328
+ 1: 1,
329
+ 2: 2,
330
+ 3: 3,
331
+ 4: 4,
332
+ 5: 5,
333
+ 13: 6,
334
+ 6: 7,
335
+ 7: 8,
336
+ 8: 9,
337
+ 9: 10,
338
+ 12: 11,
339
+ 10: 12,
340
+ 11: 13,
341
+ };
342
+ class ModuleDecoder {
343
+ bytes;
344
+ features = new Set();
345
+ types = [];
346
+ funcs = [];
347
+ importedFuncs = 0;
348
+ tables = [];
349
+ memories = 0;
350
+ memory64 = false;
351
+ globals = [];
352
+ importedGlobals = 0;
353
+ tags = 0;
354
+ elemTypes = [];
355
+ dataCount = null;
356
+ dataSegments = 0;
357
+ declaredRefs = new Set();
358
+ exportNames = new Set();
359
+ importModules = [];
360
+ customSections = [];
361
+ imports = 0;
362
+ exports = 0;
363
+ codeCount = 0;
364
+ sawCode = false;
365
+ /** A type definition outside the function-type subset stopped typing. */
366
+ gcTypes = false;
367
+ constructor(bytes) {
368
+ this.bytes = bytes;
369
+ }
370
+ invalid(message, offset) {
371
+ throw new WasmError("invalid", message, offset);
372
+ }
373
+ feature(name) {
374
+ this.features.add(name);
375
+ }
376
+ // ── types ────────────────────────────────────────────────────────────
377
+ /** A value type; GC and exception-handling reference types are named as
378
+ * features and answer UNKNOWN (the code that uses them is not typed). */
379
+ valType(r) {
380
+ const b = r.u8();
381
+ switch (b) {
382
+ case I32:
383
+ case I64:
384
+ case F32:
385
+ case F64:
386
+ return b;
387
+ case V128:
388
+ this.feature("simd");
389
+ return V128;
390
+ case FUNCREF:
391
+ case EXTERNREF:
392
+ return b;
393
+ default:
394
+ return this.otherRefType(r, b);
395
+ }
396
+ }
397
+ otherRefType(r, b) {
398
+ if (b === 0x63 || b === 0x64) {
399
+ // (ref null ht) / (ref ht): a heap type follows.
400
+ this.feature("function-references");
401
+ this.heapType(r);
402
+ return UNKNOWN;
403
+ }
404
+ if (b === 0x69 || b === 0x68 || b === 0x74 || b === 0x75) {
405
+ this.feature("exceptions");
406
+ return UNKNOWN;
407
+ }
408
+ if (b >= 0x6a && b <= 0x73) {
409
+ // anyref, eqref, i31ref, structref, arrayref, nullref, ...
410
+ this.feature("gc");
411
+ return UNKNOWN;
412
+ }
413
+ return r.malformed("malformed value type");
414
+ }
415
+ heapType(r) {
416
+ const b = r.peek();
417
+ if (b >= 0x60 && b <= 0x7f) {
418
+ r.u8();
419
+ if (b === 0x69 || b === 0x74)
420
+ this.feature("exceptions");
421
+ else if (b !== FUNCREF && b !== EXTERNREF)
422
+ this.feature("gc");
423
+ return;
424
+ }
425
+ // A concrete heap type: a typed function reference.
426
+ const offset = r.pos;
427
+ const index = r.sleb(33);
428
+ if (index < 0)
429
+ r.malformed("malformed heap type");
430
+ this.feature("function-references");
431
+ if (index >= this.types.length && !this.gcTypes)
432
+ this.invalid(`unknown type ${index}`, offset);
433
+ }
434
+ refType(r) {
435
+ const b = r.u8();
436
+ if (b === FUNCREF || b === EXTERNREF)
437
+ return b;
438
+ if (b >= 0x63 && b <= 0x75 && b !== 0x67 && b !== 0x66 && b !== 0x65) {
439
+ this.otherRefType(r, b);
440
+ return UNKNOWN;
441
+ }
442
+ return r.malformed("malformed reference type");
443
+ }
444
+ typeSection(r) {
445
+ const count = r.u32();
446
+ if (count > MAX_TYPES)
447
+ r.malformed("too many types");
448
+ for (let i = 0; i < count; i++) {
449
+ const form = r.u8();
450
+ if (form === 0x60) {
451
+ this.types.push(this.funcType(r));
452
+ continue;
453
+ }
454
+ if (form === 0x4e || form === 0x50 || form === 0x4f || form === 0x5f || form === 0x5e) {
455
+ // Recursive groups, subtypes, structs and arrays: the GC type
456
+ // system. Stop decoding types; nothing after them can be typed.
457
+ this.feature("gc");
458
+ this.gcTypes = true;
459
+ r.pos = r.end;
460
+ return;
461
+ }
462
+ r.malformed("malformed function type");
463
+ }
464
+ }
465
+ funcType(r) {
466
+ const params = [];
467
+ const nParams = r.u32();
468
+ if (nParams > MAX_PARAMS)
469
+ r.malformed("too many parameters");
470
+ for (let i = 0; i < nParams; i++)
471
+ params.push(this.valType(r));
472
+ const results = [];
473
+ const nResults = r.u32();
474
+ if (nResults > MAX_RESULTS)
475
+ r.malformed("too many results");
476
+ for (let i = 0; i < nResults; i++)
477
+ results.push(this.valType(r));
478
+ if (results.length > 1)
479
+ this.feature("multi-value");
480
+ return { params, results };
481
+ }
482
+ funcTypeAt(index, offset) {
483
+ if (index >= this.types.length) {
484
+ if (this.gcTypes)
485
+ return { params: [], results: [] };
486
+ this.invalid(`unknown type ${index}`, offset);
487
+ }
488
+ return this.types[index];
489
+ }
490
+ limits(r, kind) {
491
+ const flags = r.u8();
492
+ if (kind === "memory") {
493
+ if (flags > 0x07)
494
+ r.malformed("malformed limits flags");
495
+ if (flags & 0x02)
496
+ this.feature("threads");
497
+ if (flags & 0x04) {
498
+ this.feature("memory64");
499
+ this.memory64 = true;
500
+ }
501
+ }
502
+ else {
503
+ // Tables: a maximum flag and the table64 flag; no shared tables.
504
+ if ((flags & ~0x05) !== 0)
505
+ r.malformed("malformed limits flags");
506
+ if (flags & 0x04)
507
+ this.feature("memory64");
508
+ }
509
+ const wide = (flags & 0x04) !== 0;
510
+ const min = wide ? (r.u64(), 0) : r.u32();
511
+ let max = null;
512
+ if (flags & 0x01)
513
+ max = wide ? (r.u64(), 0) : r.u32();
514
+ if (kind === "memory" && flags & 0x02 && max === null && !wide) {
515
+ this.invalid("shared memory must have maximum", r.pos);
516
+ }
517
+ return { min, max };
518
+ }
519
+ memoryType(r) {
520
+ const offset = r.pos;
521
+ const { min, max } = this.limits(r, "memory");
522
+ if (this.memory64)
523
+ return;
524
+ if (min > MAX_MEMORY_PAGES)
525
+ this.invalid("memory size must be at most 65536 pages (4GiB)", offset);
526
+ if (max !== null && max > MAX_MEMORY_PAGES) {
527
+ this.invalid("memory size must be at most 65536 pages (4GiB)", offset);
528
+ }
529
+ if (max !== null && min > max)
530
+ this.invalid("size minimum must not be greater than maximum", offset);
531
+ }
532
+ addMemory() {
533
+ this.memories++;
534
+ if (this.memories > 1)
535
+ this.feature("multi-memory");
536
+ }
537
+ tableType(r) {
538
+ const offset = r.pos;
539
+ if (r.peek() === 0x40) {
540
+ // A table with an explicit initializer (function references).
541
+ r.u8();
542
+ if (r.u8() !== 0x00)
543
+ r.malformed("malformed table type");
544
+ this.feature("function-references");
545
+ }
546
+ const type = this.refType(r);
547
+ const { min, max } = this.limits(r, "table");
548
+ if (min > MAX_TABLE_INIT)
549
+ this.invalid("table size must be at most 10000000", offset);
550
+ if (max !== null && min > max)
551
+ this.invalid("size minimum must not be greater than maximum", offset);
552
+ return { type };
553
+ }
554
+ addTable(table) {
555
+ this.tables.push(table);
556
+ if (this.tables.length > 1)
557
+ this.feature("reference-types");
558
+ if (table.type === EXTERNREF)
559
+ this.feature("reference-types");
560
+ }
561
+ globalType(r) {
562
+ const type = this.valType(r);
563
+ if (type === FUNCREF || type === EXTERNREF)
564
+ this.feature("reference-types");
565
+ const mut = r.u8();
566
+ if (mut > 1)
567
+ r.malformed("malformed mutability");
568
+ return { type, mutable: mut === 1, imported: false };
569
+ }
570
+ // ── sections ─────────────────────────────────────────────────────────
571
+ importSection(r) {
572
+ const count = r.u32();
573
+ if (count > MAX_IMPORTS)
574
+ r.malformed("too many imports");
575
+ for (let i = 0; i < count; i++) {
576
+ const module = r.name();
577
+ r.name();
578
+ if (!this.importModules.includes(module))
579
+ this.importModules.push(module);
580
+ this.imports++;
581
+ const offset = r.pos;
582
+ const kind = r.u8();
583
+ switch (kind) {
584
+ case 0x00: {
585
+ const index = r.u32();
586
+ this.funcTypeAt(index, offset);
587
+ this.funcs.push(index);
588
+ this.importedFuncs++;
589
+ break;
590
+ }
591
+ case 0x01:
592
+ this.addTable(this.tableType(r));
593
+ break;
594
+ case 0x02:
595
+ this.memoryType(r);
596
+ this.addMemory();
597
+ break;
598
+ case 0x03: {
599
+ const global = this.globalType(r);
600
+ if (global.mutable)
601
+ this.feature("mutable-globals");
602
+ global.imported = true;
603
+ this.globals.push(global);
604
+ this.importedGlobals++;
605
+ break;
606
+ }
607
+ case 0x04:
608
+ this.tagType(r);
609
+ break;
610
+ default:
611
+ r.malformed("malformed import kind");
612
+ }
613
+ }
614
+ }
615
+ tagType(r) {
616
+ const offset = r.pos;
617
+ this.feature("exceptions");
618
+ if (r.u8() !== 0x00)
619
+ r.malformed("malformed tag attribute");
620
+ const type = this.funcTypeAt(r.u32(), offset);
621
+ if (type.results.length !== 0 && !this.gcTypes)
622
+ this.invalid("non-empty tag result type", offset);
623
+ this.tags++;
624
+ }
625
+ functionSection(r) {
626
+ const count = r.u32();
627
+ if (count > MAX_FUNCTIONS)
628
+ r.malformed("too many functions");
629
+ for (let i = 0; i < count; i++) {
630
+ const offset = r.pos;
631
+ const index = r.u32();
632
+ this.funcTypeAt(index, offset);
633
+ this.funcs.push(index);
634
+ }
635
+ }
636
+ tableSection(r) {
637
+ const count = r.u32();
638
+ for (let i = 0; i < count; i++) {
639
+ const hasInit = r.peek() === 0x40;
640
+ const table = this.tableType(r);
641
+ if (hasInit)
642
+ this.constExpr(r, table.type);
643
+ this.addTable(table);
644
+ }
645
+ }
646
+ memorySection(r) {
647
+ const count = r.u32();
648
+ for (let i = 0; i < count; i++) {
649
+ this.memoryType(r);
650
+ this.addMemory();
651
+ }
652
+ }
653
+ tagSection(r) {
654
+ const count = r.u32();
655
+ for (let i = 0; i < count; i++)
656
+ this.tagType(r);
657
+ }
658
+ globalSection(r) {
659
+ const count = r.u32();
660
+ if (count + this.globals.length > MAX_GLOBALS)
661
+ r.malformed("too many globals");
662
+ for (let i = 0; i < count; i++) {
663
+ const global = this.globalType(r);
664
+ this.constExpr(r, global.type);
665
+ this.globals.push(global);
666
+ }
667
+ }
668
+ exportSection(r) {
669
+ const count = r.u32();
670
+ if (count > MAX_EXPORTS)
671
+ r.malformed("too many exports");
672
+ for (let i = 0; i < count; i++) {
673
+ const offset = r.pos;
674
+ const name = r.name();
675
+ if (this.exportNames.has(name))
676
+ this.invalid("duplicate export name", offset);
677
+ this.exportNames.add(name);
678
+ this.exports++;
679
+ const kind = r.u8();
680
+ const indexOffset = r.pos;
681
+ const index = r.u32();
682
+ switch (kind) {
683
+ case 0x00:
684
+ if (index >= this.funcs.length)
685
+ this.invalid(`unknown function ${index}`, indexOffset);
686
+ this.declaredRefs.add(index);
687
+ break;
688
+ case 0x01:
689
+ if (index >= this.tables.length)
690
+ this.invalid(`unknown table ${index}`, indexOffset);
691
+ break;
692
+ case 0x02:
693
+ if (index >= this.memories)
694
+ this.invalid(`unknown memory ${index}`, indexOffset);
695
+ break;
696
+ case 0x03:
697
+ if (index >= this.globals.length)
698
+ this.invalid(`unknown global ${index}`, indexOffset);
699
+ if (this.globals[index].mutable)
700
+ this.feature("mutable-globals");
701
+ break;
702
+ case 0x04:
703
+ if (index >= this.tags)
704
+ this.invalid(`unknown tag ${index}`, indexOffset);
705
+ break;
706
+ default:
707
+ r.malformed("malformed export kind");
708
+ }
709
+ }
710
+ }
711
+ startSection(r) {
712
+ const offset = r.pos;
713
+ const index = r.u32();
714
+ if (index >= this.funcs.length)
715
+ this.invalid(`unknown function ${index}`, offset);
716
+ const type = this.funcTypeAt(this.funcs[index], offset);
717
+ if (type.params.length !== 0 || type.results.length !== 0) {
718
+ this.invalid("start function must have type [] -> []", offset);
719
+ }
720
+ }
721
+ elementSection(r) {
722
+ const count = r.u32();
723
+ if (count > MAX_TABLE_INIT)
724
+ r.malformed("too many element segments");
725
+ for (let i = 0; i < count; i++) {
726
+ const offset = r.pos;
727
+ const flags = r.u32();
728
+ if (flags > 7)
729
+ r.malformed("malformed elements segment kind");
730
+ const passiveOrDeclarative = (flags & 0x01) !== 0;
731
+ const explicitTable = (flags & 0x02) !== 0;
732
+ const usesExprs = (flags & 0x04) !== 0;
733
+ if (flags !== 0)
734
+ this.feature(usesExprs || explicitTable ? "reference-types" : "bulk-memory");
735
+ let tableIndex = 0;
736
+ if (!passiveOrDeclarative) {
737
+ if (explicitTable)
738
+ tableIndex = r.u32();
739
+ if (tableIndex >= this.tables.length)
740
+ this.invalid(`unknown table ${tableIndex}`, offset);
741
+ this.constExpr(r, this.memory64 ? UNKNOWN : I32);
742
+ }
743
+ let elemType = FUNCREF;
744
+ if (passiveOrDeclarative || explicitTable) {
745
+ if (usesExprs) {
746
+ elemType = this.refType(r);
747
+ }
748
+ else if (r.u8() !== 0x00) {
749
+ r.malformed("malformed element kind");
750
+ }
751
+ }
752
+ if (!passiveOrDeclarative) {
753
+ const tableType = this.tables[tableIndex].type;
754
+ if (elemType !== UNKNOWN && tableType !== UNKNOWN && elemType !== tableType) {
755
+ this.invalid("type mismatch", offset);
756
+ }
757
+ }
758
+ const n = r.u32();
759
+ for (let k = 0; k < n; k++) {
760
+ if (usesExprs) {
761
+ this.constExpr(r, elemType);
762
+ }
763
+ else {
764
+ const at = r.pos;
765
+ const index = r.u32();
766
+ if (index >= this.funcs.length)
767
+ this.invalid(`unknown function ${index}`, at);
768
+ this.declaredRefs.add(index);
769
+ }
770
+ }
771
+ this.elemTypes.push(elemType);
772
+ }
773
+ }
774
+ dataCountSection(r) {
775
+ this.dataCount = r.u32();
776
+ this.feature("bulk-memory");
777
+ }
778
+ dataSection(r) {
779
+ const count = r.u32();
780
+ if (count > MAX_DATA_SEGMENTS)
781
+ r.malformed("too many data segments");
782
+ if (this.dataCount !== null && count !== this.dataCount) {
783
+ r.malformed("data count and data section have inconsistent lengths");
784
+ }
785
+ for (let i = 0; i < count; i++) {
786
+ const offset = r.pos;
787
+ const flags = r.u32();
788
+ if (flags > 2)
789
+ r.malformed("malformed data segment kind");
790
+ if (flags !== 1) {
791
+ let memory = 0;
792
+ if (flags === 2)
793
+ memory = r.u32();
794
+ if (memory !== 0)
795
+ this.feature("multi-memory");
796
+ if (memory >= this.memories)
797
+ this.invalid(`unknown memory ${memory}`, offset);
798
+ this.constExpr(r, this.memory64 ? UNKNOWN : I32);
799
+ }
800
+ else {
801
+ this.feature("bulk-memory");
802
+ }
803
+ const length = r.u32();
804
+ r.skip(length);
805
+ }
806
+ this.dataSegments = count;
807
+ }
808
+ customSection(r) {
809
+ this.customSections.push(r.name());
810
+ r.pos = r.end;
811
+ }
812
+ // ── constant expressions ────────────────────────────────────────────
813
+ /** A constant expression producing `expected` (UNKNOWN: not checked).
814
+ * global.get may read any earlier immutable global, as in 3.0 and V8
815
+ * (2.0 allowed only imported ones in global initializers). */
816
+ constExpr(r, expected) {
817
+ const stack = [];
818
+ const start = r.pos;
819
+ for (;;) {
820
+ const offset = r.pos;
821
+ const op = r.u8();
822
+ switch (op) {
823
+ case 0x0b: {
824
+ if (expected !== UNKNOWN) {
825
+ if (stack.length !== 1 || !matches(stack[0], expected)) {
826
+ this.invalid("type mismatch", start);
827
+ }
828
+ }
829
+ return;
830
+ }
831
+ case 0x41:
832
+ r.sleb(32);
833
+ stack.push(I32);
834
+ break;
835
+ case 0x42:
836
+ r.sleb(64);
837
+ stack.push(I64);
838
+ break;
839
+ case 0x43:
840
+ r.skip(4);
841
+ stack.push(F32);
842
+ break;
843
+ case 0x44:
844
+ r.skip(8);
845
+ stack.push(F64);
846
+ break;
847
+ case 0x23: {
848
+ // A global initializer sees the globals before it (they are all
849
+ // that exist yet); offsets see every global.
850
+ const index = r.u32();
851
+ if (index >= this.globals.length)
852
+ this.invalid(`unknown global ${index}`, offset);
853
+ const global = this.globals[index];
854
+ if (global.mutable)
855
+ this.invalid("constant expression required", offset);
856
+ stack.push(global.type);
857
+ break;
858
+ }
859
+ case 0xd0: {
860
+ this.feature("reference-types");
861
+ const t = this.refHeapNull(r);
862
+ stack.push(t);
863
+ break;
864
+ }
865
+ case 0xd2: {
866
+ this.feature("reference-types");
867
+ const index = r.u32();
868
+ if (index >= this.funcs.length)
869
+ this.invalid(`unknown function ${index}`, offset);
870
+ this.declaredRefs.add(index);
871
+ stack.push(FUNCREF);
872
+ break;
873
+ }
874
+ case 0x6a:
875
+ case 0x6b:
876
+ case 0x6c:
877
+ case 0x7c:
878
+ case 0x7d:
879
+ case 0x7e: {
880
+ this.feature("extended-const");
881
+ const t = op <= 0x6c ? I32 : I64;
882
+ const b = stack.pop();
883
+ const a = stack.pop();
884
+ if (a === undefined || b === undefined || !matches(a, t) || !matches(b, t)) {
885
+ this.invalid("type mismatch", offset);
886
+ }
887
+ stack.push(t);
888
+ break;
889
+ }
890
+ case 0xfd: {
891
+ this.feature("simd");
892
+ const sub = r.u32();
893
+ if (sub !== 12)
894
+ this.invalid("constant expression required", offset);
895
+ r.skip(16);
896
+ stack.push(V128);
897
+ break;
898
+ }
899
+ case 0xfb:
900
+ // GC's struct.new and friends: not typed here.
901
+ this.feature("gc");
902
+ return this.skipToEnd(r);
903
+ default:
904
+ this.invalid("constant expression required", offset);
905
+ }
906
+ }
907
+ }
908
+ skipToEnd(r) {
909
+ // Only reachable for GC constant expressions, whose immediates this
910
+ // decoder does not model: skip to the next end byte.
911
+ while (r.u8() !== 0x0b) {
912
+ /* scan */
913
+ }
914
+ }
915
+ /** ref.null's heap type, as a value type (UNKNOWN for GC heap types). */
916
+ refHeapNull(r) {
917
+ const b = r.peek();
918
+ if (b === FUNCREF || b === EXTERNREF) {
919
+ r.u8();
920
+ return b;
921
+ }
922
+ this.heapType(r);
923
+ return UNKNOWN;
924
+ }
925
+ // ── code ─────────────────────────────────────────────────────────────
926
+ codeSection(r) {
927
+ const count = r.u32();
928
+ this.sawCode = true;
929
+ const defined = this.funcs.length - this.importedFuncs;
930
+ if (count !== defined)
931
+ r.malformed("function and code section have inconsistent lengths");
932
+ this.codeCount = count;
933
+ for (let i = 0; i < count; i++) {
934
+ const size = r.u32();
935
+ if (size > r.end - r.pos)
936
+ r.malformed("length out of bounds");
937
+ if (size > MAX_FUNCTION_SIZE)
938
+ r.malformed("function body too large");
939
+ const body = new Reader(this.bytes, r.pos, r.pos + size);
940
+ const type = this.funcTypeAt(this.funcs[this.importedFuncs + i], r.pos);
941
+ new FunctionValidator(this, body, type).run();
942
+ r.pos += size;
943
+ }
944
+ }
945
+ decode() {
946
+ const bytes = this.bytes;
947
+ const r = new Reader(bytes, 0, bytes.length);
948
+ if (bytes.length < 4 ||
949
+ bytes[0] !== 0 ||
950
+ bytes[1] !== 0x61 ||
951
+ bytes[2] !== 0x73 ||
952
+ bytes[3] !== 0x6d) {
953
+ r.malformed("magic header not detected");
954
+ }
955
+ r.pos = 4;
956
+ if (bytes.length < 8)
957
+ r.malformed("unexpected end");
958
+ if (bytes[4] !== 1 || bytes[5] !== 0 || bytes[6] !== 0 || bytes[7] !== 0) {
959
+ r.malformed("unknown binary version");
960
+ }
961
+ r.pos = 8;
962
+ let last = 0;
963
+ while (!r.eof()) {
964
+ const id = r.u8();
965
+ const size = r.u32();
966
+ if (size > r.end - r.pos)
967
+ r.malformed("section size out of bounds");
968
+ const section = new Reader(bytes, r.pos, r.pos + size);
969
+ if (id !== 0) {
970
+ const order = SECTION_ORDER[id];
971
+ if (order === undefined)
972
+ return r.malformed("malformed section id");
973
+ if (order <= last)
974
+ r.malformed("unexpected section (out of order or duplicate)");
975
+ last = order;
976
+ }
977
+ if (!(this.gcTypes && id !== 0)) {
978
+ switch (id) {
979
+ case 0:
980
+ this.customSection(section);
981
+ break;
982
+ case 1:
983
+ this.typeSection(section);
984
+ break;
985
+ case 2:
986
+ this.importSection(section);
987
+ break;
988
+ case 3:
989
+ this.functionSection(section);
990
+ break;
991
+ case 4:
992
+ this.tableSection(section);
993
+ break;
994
+ case 5:
995
+ this.memorySection(section);
996
+ break;
997
+ case 6:
998
+ this.globalSection(section);
999
+ break;
1000
+ case 7:
1001
+ this.exportSection(section);
1002
+ break;
1003
+ case 8:
1004
+ this.startSection(section);
1005
+ break;
1006
+ case 9:
1007
+ this.elementSection(section);
1008
+ break;
1009
+ case 10:
1010
+ this.codeSection(section);
1011
+ break;
1012
+ case 11:
1013
+ this.dataSection(section);
1014
+ break;
1015
+ case 12:
1016
+ this.dataCountSection(section);
1017
+ break;
1018
+ case 13:
1019
+ this.tagSection(section);
1020
+ break;
1021
+ }
1022
+ }
1023
+ else {
1024
+ section.pos = section.end;
1025
+ }
1026
+ if (section.pos !== section.end) {
1027
+ r.pos = section.pos;
1028
+ r.malformed("section size mismatch");
1029
+ }
1030
+ r.pos = section.end;
1031
+ }
1032
+ if (!this.gcTypes) {
1033
+ if (!this.sawCode && this.funcs.length > this.importedFuncs) {
1034
+ r.malformed("function and code section have inconsistent lengths");
1035
+ }
1036
+ if (this.dataCount !== null && this.dataSegments !== this.dataCount && this.dataCount !== 0) {
1037
+ r.malformed("data count and data section have inconsistent lengths");
1038
+ }
1039
+ }
1040
+ }
1041
+ }
1042
+ function isRef(t) {
1043
+ return t === FUNCREF || t === EXTERNREF;
1044
+ }
1045
+ function isNum(t) {
1046
+ return t === I32 || t === I64 || t === F32 || t === F64 || t === V128;
1047
+ }
1048
+ function matches(actual, expected) {
1049
+ return actual === expected || actual === UNKNOWN || expected === UNKNOWN;
1050
+ }
1051
+ /** Validates one function body (the algorithm of the specification's
1052
+ * validation appendix). Once an instruction needs a proposal outside the
1053
+ * translatable set, the rest of the body is only decoded. */
1054
+ class FunctionValidator {
1055
+ m;
1056
+ r;
1057
+ type;
1058
+ locals = [];
1059
+ vals = [];
1060
+ ctrls = [];
1061
+ typed = true;
1062
+ constructor(m, r, type) {
1063
+ this.m = m;
1064
+ this.r = r;
1065
+ this.type = type;
1066
+ }
1067
+ invalid(message) {
1068
+ throw new WasmError("invalid", message, this.r.pos);
1069
+ }
1070
+ /** Stops typing: the rest of the body only decodes. */
1071
+ untyped(feature) {
1072
+ this.m.feature(feature);
1073
+ this.typed = false;
1074
+ }
1075
+ run() {
1076
+ const r = this.r;
1077
+ for (const p of this.type.params)
1078
+ this.locals.push(p);
1079
+ const groups = r.u32();
1080
+ let total = this.locals.length;
1081
+ for (let i = 0; i < groups; i++) {
1082
+ const n = r.u32();
1083
+ total += n;
1084
+ if (total > MAX_LOCALS)
1085
+ r.malformed("too many locals");
1086
+ const t = this.m.valType(r);
1087
+ if (t === V128)
1088
+ this.typed = false;
1089
+ if (isRef(t))
1090
+ this.m.feature("reference-types");
1091
+ for (let k = 0; k < n; k++)
1092
+ this.locals.push(t);
1093
+ }
1094
+ if (this.type.params.includes(V128) || this.type.results.includes(V128))
1095
+ this.typed = false;
1096
+ if (this.m.memory64 || this.m.gcTypes)
1097
+ this.typed = false;
1098
+ this.pushCtrl(-1, [], this.type.results);
1099
+ while (this.ctrls.length > 0) {
1100
+ if (r.eof())
1101
+ r.malformed("unexpected end of section or function");
1102
+ this.instruction();
1103
+ }
1104
+ if (!r.eof())
1105
+ r.malformed("operators remaining after end of function");
1106
+ }
1107
+ // The operand stack.
1108
+ push(t) {
1109
+ this.vals.push(t);
1110
+ }
1111
+ pop() {
1112
+ const frame = this.ctrls[this.ctrls.length - 1];
1113
+ if (this.vals.length === frame.height) {
1114
+ if (frame.unreachable)
1115
+ return UNKNOWN;
1116
+ this.invalid("type mismatch");
1117
+ }
1118
+ return this.vals.pop();
1119
+ }
1120
+ popExpect(expected) {
1121
+ const actual = this.pop();
1122
+ if (!matches(actual, expected))
1123
+ this.invalid("type mismatch");
1124
+ // Unreachable code's unknown operand stays unknown when pushed back
1125
+ // (br_if, br_table), so later labels can still meet it.
1126
+ return actual;
1127
+ }
1128
+ pushAll(types) {
1129
+ for (const t of types)
1130
+ this.push(t);
1131
+ }
1132
+ popAll(types) {
1133
+ const out = [];
1134
+ for (let i = types.length - 1; i >= 0; i--)
1135
+ out.unshift(this.popExpect(types[i]));
1136
+ return out;
1137
+ }
1138
+ pushCtrl(opcode, start, end) {
1139
+ this.ctrls.push({
1140
+ opcode,
1141
+ start,
1142
+ end,
1143
+ height: this.vals.length,
1144
+ unreachable: false,
1145
+ hasElse: false,
1146
+ });
1147
+ this.pushAll(start);
1148
+ }
1149
+ popCtrl() {
1150
+ if (this.ctrls.length === 0)
1151
+ this.invalid("control stack underflow");
1152
+ const frame = this.ctrls[this.ctrls.length - 1];
1153
+ this.popAll(frame.end);
1154
+ if (this.vals.length !== frame.height)
1155
+ this.invalid("type mismatch");
1156
+ this.ctrls.pop();
1157
+ return frame;
1158
+ }
1159
+ labelTypes(frame) {
1160
+ return frame.opcode === 0x03 ? frame.start : frame.end;
1161
+ }
1162
+ setUnreachable() {
1163
+ const frame = this.ctrls[this.ctrls.length - 1];
1164
+ this.vals.length = frame.height;
1165
+ frame.unreachable = true;
1166
+ }
1167
+ label(depth) {
1168
+ if (depth >= this.ctrls.length)
1169
+ this.invalid(`unknown label ${depth}`);
1170
+ return this.ctrls[this.ctrls.length - 1 - depth];
1171
+ }
1172
+ blockType() {
1173
+ const r = this.r;
1174
+ const b = r.peek();
1175
+ if (b === 0x40) {
1176
+ r.u8();
1177
+ return { params: [], results: [] };
1178
+ }
1179
+ if (b === I32 ||
1180
+ b === I64 ||
1181
+ b === F32 ||
1182
+ b === F64 ||
1183
+ b === V128 ||
1184
+ b === FUNCREF ||
1185
+ b === EXTERNREF) {
1186
+ return { params: [], results: [this.m.valType(r)] };
1187
+ }
1188
+ if (b >= 0x60) {
1189
+ return { params: [], results: [this.m.valType(r)] };
1190
+ }
1191
+ const offset = r.pos;
1192
+ const index = r.sleb(33);
1193
+ if (index < 0)
1194
+ r.malformed("malformed block type");
1195
+ this.m.feature("multi-value");
1196
+ return this.m.funcTypeAt(index, offset);
1197
+ }
1198
+ local(index) {
1199
+ if (index >= this.locals.length)
1200
+ this.invalid(`unknown local ${index}`);
1201
+ return this.locals[index];
1202
+ }
1203
+ global(index) {
1204
+ if (index >= this.m.globals.length)
1205
+ this.invalid(`unknown global ${index}`);
1206
+ return this.m.globals[index];
1207
+ }
1208
+ table(index) {
1209
+ if (index >= this.m.tables.length)
1210
+ this.invalid(`unknown table ${index}`);
1211
+ return this.m.tables[index];
1212
+ }
1213
+ /** A memory other than 0 (multi-memory): it must exist; typing stops. */
1214
+ otherMemory(index) {
1215
+ if (index >= this.m.memories)
1216
+ this.invalid(`unknown memory ${index}`);
1217
+ this.untyped("multi-memory");
1218
+ }
1219
+ memoryZero() {
1220
+ if (this.m.memories === 0)
1221
+ this.invalid("unknown memory 0");
1222
+ }
1223
+ func(index) {
1224
+ if (index >= this.m.funcs.length)
1225
+ this.invalid(`unknown function ${index}`);
1226
+ return this.m.funcTypeAt(this.m.funcs[index], this.r.pos);
1227
+ }
1228
+ /** A memarg. A memory other than 0 stops typing (multi-memory). */
1229
+ memarg(naturalAlign) {
1230
+ const r = this.r;
1231
+ const { align, memory } = readMemargFlags(() => r.u32());
1232
+ if (align < 0)
1233
+ r.malformed("malformed memop flags");
1234
+ if (memory !== 0)
1235
+ this.otherMemory(memory);
1236
+ if (this.m.memory64)
1237
+ r.u64();
1238
+ else
1239
+ r.u32();
1240
+ if (!this.typed)
1241
+ return;
1242
+ if (memory >= this.m.memories)
1243
+ this.invalid(`unknown memory ${memory}`);
1244
+ if (align > naturalAlign)
1245
+ this.invalid("alignment must not be larger than natural");
1246
+ }
1247
+ instruction() {
1248
+ const r = this.r;
1249
+ const op = r.u8();
1250
+ if (!this.typed) {
1251
+ this.scan(op);
1252
+ return;
1253
+ }
1254
+ switch (op) {
1255
+ case 0x00:
1256
+ this.setUnreachable();
1257
+ return;
1258
+ case 0x01:
1259
+ return;
1260
+ case 0x02:
1261
+ case 0x03: {
1262
+ const bt = this.blockType();
1263
+ this.popAll(bt.params);
1264
+ this.pushCtrl(op, bt.params, bt.results);
1265
+ return;
1266
+ }
1267
+ case 0x04: {
1268
+ const bt = this.blockType();
1269
+ this.popExpect(I32);
1270
+ this.popAll(bt.params);
1271
+ this.pushCtrl(op, bt.params, bt.results);
1272
+ return;
1273
+ }
1274
+ case 0x05: {
1275
+ const frame = this.ctrls[this.ctrls.length - 1];
1276
+ if (frame.opcode !== 0x04 || frame.hasElse)
1277
+ this.invalid("else without matching if");
1278
+ this.popCtrl();
1279
+ this.pushCtrl(0x04, frame.start, frame.end);
1280
+ this.ctrls[this.ctrls.length - 1].hasElse = true;
1281
+ return;
1282
+ }
1283
+ case 0x0b: {
1284
+ const frame = this.popCtrl();
1285
+ // An if without else must leave its params as its results.
1286
+ if (frame.opcode === 0x04 && !frame.hasElse) {
1287
+ if (frame.start.length !== frame.end.length)
1288
+ this.invalid("type mismatch");
1289
+ for (let i = 0; i < frame.start.length; i++) {
1290
+ if (frame.start[i] !== frame.end[i])
1291
+ this.invalid("type mismatch");
1292
+ }
1293
+ }
1294
+ this.pushAll(frame.end);
1295
+ return;
1296
+ }
1297
+ case 0x0c: {
1298
+ const depth = r.u32();
1299
+ this.popAll(this.labelTypes(this.label(depth)));
1300
+ this.setUnreachable();
1301
+ return;
1302
+ }
1303
+ case 0x0d: {
1304
+ const depth = r.u32();
1305
+ this.popExpect(I32);
1306
+ // br_if leaves the label's types (even over unknown operands);
1307
+ // br_table below leaves what it popped.
1308
+ const types = this.labelTypes(this.label(depth));
1309
+ this.popAll(types);
1310
+ this.pushAll(types);
1311
+ return;
1312
+ }
1313
+ case 0x0e: {
1314
+ const n = r.u32();
1315
+ const targets = [];
1316
+ for (let i = 0; i < n; i++)
1317
+ targets.push(r.u32());
1318
+ const defaultDepth = r.u32();
1319
+ this.popExpect(I32);
1320
+ const arity = this.labelTypes(this.label(defaultDepth)).length;
1321
+ for (const depth of targets) {
1322
+ const types = this.labelTypes(this.label(depth));
1323
+ if (types.length !== arity)
1324
+ this.invalid("type mismatch");
1325
+ this.pushAll(this.popAll(types));
1326
+ }
1327
+ this.popAll(this.labelTypes(this.label(defaultDepth)));
1328
+ this.setUnreachable();
1329
+ return;
1330
+ }
1331
+ case 0x0f:
1332
+ this.popAll(this.type.results);
1333
+ this.setUnreachable();
1334
+ return;
1335
+ case 0x10: {
1336
+ const type = this.func(r.u32());
1337
+ this.popAll(type.params);
1338
+ this.pushAll(type.results);
1339
+ return;
1340
+ }
1341
+ case 0x11: {
1342
+ const typeIndex = r.u32();
1343
+ const tableIndex = r.u32();
1344
+ if (tableIndex !== 0)
1345
+ this.m.feature("reference-types");
1346
+ const table = this.table(tableIndex);
1347
+ if (table.type !== FUNCREF && table.type !== UNKNOWN)
1348
+ this.invalid("type mismatch");
1349
+ const type = this.m.funcTypeAt(typeIndex, r.pos);
1350
+ this.popExpect(I32);
1351
+ this.popAll(type.params);
1352
+ this.pushAll(type.results);
1353
+ return;
1354
+ }
1355
+ case 0x12:
1356
+ case 0x13:
1357
+ case 0x14:
1358
+ case 0x15:
1359
+ this.untyped(op === 0x14 || op === 0x15 ? "function-references" : "tail-call");
1360
+ this.scan(op);
1361
+ return;
1362
+ case 0x06:
1363
+ case 0x07:
1364
+ case 0x08:
1365
+ case 0x09:
1366
+ case 0x0a:
1367
+ case 0x18:
1368
+ case 0x19:
1369
+ case 0x1f:
1370
+ this.untyped("exceptions");
1371
+ this.scan(op);
1372
+ return;
1373
+ case 0x1a:
1374
+ this.pop();
1375
+ return;
1376
+ case 0x1b: {
1377
+ this.popExpect(I32);
1378
+ const t1 = this.pop();
1379
+ const t2 = this.pop();
1380
+ if (!(isNum(t1) || t1 === UNKNOWN) || !(isNum(t2) || t2 === UNKNOWN))
1381
+ this.invalid("type mismatch");
1382
+ if (t1 !== t2 && t1 !== UNKNOWN && t2 !== UNKNOWN)
1383
+ this.invalid("type mismatch");
1384
+ this.push(t1 === UNKNOWN ? t2 : t1);
1385
+ return;
1386
+ }
1387
+ case 0x1c: {
1388
+ const n = r.u32();
1389
+ if (n !== 1)
1390
+ this.invalid("invalid result arity");
1391
+ const t = this.m.valType(r);
1392
+ if (isRef(t))
1393
+ this.m.feature("reference-types");
1394
+ this.popExpect(I32);
1395
+ this.popExpect(t);
1396
+ this.popExpect(t);
1397
+ this.push(t);
1398
+ return;
1399
+ }
1400
+ case 0x20:
1401
+ this.push(this.local(r.u32()));
1402
+ return;
1403
+ case 0x21:
1404
+ this.popExpect(this.local(r.u32()));
1405
+ return;
1406
+ case 0x22: {
1407
+ const t = this.local(r.u32());
1408
+ this.popExpect(t);
1409
+ this.push(t);
1410
+ return;
1411
+ }
1412
+ case 0x23:
1413
+ this.push(this.global(r.u32()).type);
1414
+ return;
1415
+ case 0x24: {
1416
+ const global = this.global(r.u32());
1417
+ if (!global.mutable)
1418
+ this.invalid("global is immutable");
1419
+ this.popExpect(global.type);
1420
+ return;
1421
+ }
1422
+ case 0x25: {
1423
+ this.m.feature("reference-types");
1424
+ const table = this.table(r.u32());
1425
+ this.popExpect(I32);
1426
+ this.push(table.type);
1427
+ return;
1428
+ }
1429
+ case 0x26: {
1430
+ this.m.feature("reference-types");
1431
+ const table = this.table(r.u32());
1432
+ this.popExpect(table.type);
1433
+ this.popExpect(I32);
1434
+ return;
1435
+ }
1436
+ case 0x3f:
1437
+ case 0x40: {
1438
+ const memory = r.u8();
1439
+ if (memory !== 0) {
1440
+ // A memory index (multi-memory) or a malformed reserved byte.
1441
+ r.pos--;
1442
+ const index = r.u32();
1443
+ if (index !== 0)
1444
+ this.otherMemory(index);
1445
+ if (!this.typed)
1446
+ return;
1447
+ }
1448
+ this.memoryZero();
1449
+ if (op === 0x40)
1450
+ this.popExpect(I32);
1451
+ this.push(I32);
1452
+ return;
1453
+ }
1454
+ case 0x41:
1455
+ r.sleb(32);
1456
+ this.push(I32);
1457
+ return;
1458
+ case 0x42:
1459
+ r.sleb(64);
1460
+ this.push(I64);
1461
+ return;
1462
+ case 0x43:
1463
+ r.skip(4);
1464
+ this.push(F32);
1465
+ return;
1466
+ case 0x44:
1467
+ r.skip(8);
1468
+ this.push(F64);
1469
+ return;
1470
+ case 0xd0: {
1471
+ this.m.feature("reference-types");
1472
+ const t = this.m.refHeapNull(r);
1473
+ if (t === UNKNOWN) {
1474
+ this.typed = false;
1475
+ return;
1476
+ }
1477
+ this.push(t);
1478
+ return;
1479
+ }
1480
+ case 0xd1: {
1481
+ this.m.feature("reference-types");
1482
+ const t = this.pop();
1483
+ if (!isRef(t) && t !== UNKNOWN)
1484
+ this.invalid("type mismatch");
1485
+ this.push(I32);
1486
+ return;
1487
+ }
1488
+ case 0xd2: {
1489
+ this.m.feature("reference-types");
1490
+ const index = r.u32();
1491
+ this.func(index);
1492
+ if (!this.m.declaredRefs.has(index))
1493
+ this.invalid("undeclared function reference");
1494
+ this.push(FUNCREF);
1495
+ return;
1496
+ }
1497
+ case 0xd3:
1498
+ case 0xd4:
1499
+ case 0xd5:
1500
+ case 0xd6:
1501
+ this.untyped(op === 0xd3 ? "gc" : "function-references");
1502
+ this.scan(op);
1503
+ return;
1504
+ case 0xfc:
1505
+ this.prefixFC();
1506
+ return;
1507
+ case 0xfd:
1508
+ this.untyped("simd");
1509
+ this.scanSimd();
1510
+ return;
1511
+ case 0xfe:
1512
+ this.untyped("threads");
1513
+ this.scanAtomic();
1514
+ return;
1515
+ case 0xfb:
1516
+ this.untyped("gc");
1517
+ r.pos = r.end;
1518
+ this.ctrls.length = 0;
1519
+ return;
1520
+ }
1521
+ if (op >= 0x28 && op <= 0x3e) {
1522
+ const k = op - 0x28;
1523
+ this.memarg(MEMORY_ALIGN[k]);
1524
+ if (!this.typed)
1525
+ return;
1526
+ this.memoryZero();
1527
+ if (op <= 0x35) {
1528
+ this.popExpect(I32);
1529
+ this.push(MEMORY_TYPE[k]);
1530
+ }
1531
+ else {
1532
+ this.popExpect(MEMORY_TYPE[k]);
1533
+ this.popExpect(I32);
1534
+ }
1535
+ return;
1536
+ }
1537
+ if (op >= 0x45 && op <= 0xc4) {
1538
+ if (op >= 0xc0)
1539
+ this.m.feature("sign-extension");
1540
+ const [operand, count, result] = numericSignature(op);
1541
+ for (let i = 0; i < count; i++)
1542
+ this.popExpect(operand);
1543
+ this.push(result);
1544
+ return;
1545
+ }
1546
+ r.pos--;
1547
+ r.malformed(`illegal opcode 0x${op.toString(16)}`);
1548
+ }
1549
+ prefixFC() {
1550
+ const r = this.r;
1551
+ const sub = r.u32();
1552
+ if (sub <= 7) {
1553
+ this.m.feature("nontrapping-fptoint");
1554
+ const from = sub <= 1 || (sub >= 4 && sub <= 5) ? F32 : F64;
1555
+ const to = sub <= 3 ? I32 : I64;
1556
+ this.popExpect(from);
1557
+ this.push(to);
1558
+ return;
1559
+ }
1560
+ switch (sub) {
1561
+ case 8: {
1562
+ this.m.feature("bulk-memory");
1563
+ const segment = r.u32();
1564
+ const memory = r.u32();
1565
+ if (memory !== 0) {
1566
+ this.otherMemory(memory);
1567
+ return;
1568
+ }
1569
+ this.memoryZero();
1570
+ const dataCount = this.m.dataCount;
1571
+ if (dataCount === null)
1572
+ return r.malformed("data count section required");
1573
+ if (segment >= dataCount)
1574
+ this.invalid(`unknown data segment ${segment}`);
1575
+ this.popExpect(I32);
1576
+ this.popExpect(I32);
1577
+ this.popExpect(I32);
1578
+ return;
1579
+ }
1580
+ case 9: {
1581
+ this.m.feature("bulk-memory");
1582
+ const segment = r.u32();
1583
+ const dataCount = this.m.dataCount;
1584
+ if (dataCount === null)
1585
+ return r.malformed("data count section required");
1586
+ if (segment >= dataCount)
1587
+ this.invalid(`unknown data segment ${segment}`);
1588
+ return;
1589
+ }
1590
+ case 10: {
1591
+ this.m.feature("bulk-memory");
1592
+ const dst = r.u32();
1593
+ const src = r.u32();
1594
+ if (dst !== 0 || src !== 0) {
1595
+ this.otherMemory(Math.max(dst, src));
1596
+ return;
1597
+ }
1598
+ this.memoryZero();
1599
+ this.popExpect(I32);
1600
+ this.popExpect(I32);
1601
+ this.popExpect(I32);
1602
+ return;
1603
+ }
1604
+ case 11: {
1605
+ this.m.feature("bulk-memory");
1606
+ const memory = r.u32();
1607
+ if (memory !== 0) {
1608
+ this.otherMemory(memory);
1609
+ return;
1610
+ }
1611
+ this.memoryZero();
1612
+ this.popExpect(I32);
1613
+ this.popExpect(I32);
1614
+ this.popExpect(I32);
1615
+ return;
1616
+ }
1617
+ case 12: {
1618
+ this.m.feature("bulk-memory");
1619
+ const segment = r.u32();
1620
+ const table = this.table(r.u32());
1621
+ if (segment >= this.m.elemTypes.length)
1622
+ this.invalid(`unknown elem segment ${segment}`);
1623
+ const elemType = this.m.elemTypes[segment];
1624
+ if (!matches(elemType, table.type))
1625
+ this.invalid("type mismatch");
1626
+ this.popExpect(I32);
1627
+ this.popExpect(I32);
1628
+ this.popExpect(I32);
1629
+ return;
1630
+ }
1631
+ case 13: {
1632
+ this.m.feature("bulk-memory");
1633
+ const segment = r.u32();
1634
+ if (segment >= this.m.elemTypes.length)
1635
+ this.invalid(`unknown elem segment ${segment}`);
1636
+ return;
1637
+ }
1638
+ case 14: {
1639
+ this.m.feature("bulk-memory");
1640
+ const dst = this.table(r.u32());
1641
+ const src = this.table(r.u32());
1642
+ if (!matches(src.type, dst.type))
1643
+ this.invalid("type mismatch");
1644
+ this.popExpect(I32);
1645
+ this.popExpect(I32);
1646
+ this.popExpect(I32);
1647
+ return;
1648
+ }
1649
+ case 15: {
1650
+ this.m.feature("reference-types");
1651
+ const table = this.table(r.u32());
1652
+ this.popExpect(I32);
1653
+ this.popExpect(table.type);
1654
+ this.push(I32);
1655
+ return;
1656
+ }
1657
+ case 16:
1658
+ this.m.feature("reference-types");
1659
+ this.table(r.u32());
1660
+ this.push(I32);
1661
+ return;
1662
+ case 17: {
1663
+ this.m.feature("reference-types");
1664
+ const table = this.table(r.u32());
1665
+ this.popExpect(I32);
1666
+ this.popExpect(table.type);
1667
+ this.popExpect(I32);
1668
+ return;
1669
+ }
1670
+ }
1671
+ r.malformed(`illegal opcode 0xfc ${sub}`);
1672
+ }
1673
+ // ── decode-only scanning (proposals outside the translatable set) ─────
1674
+ /** One instruction, decoded for its immediates only. Tracks block
1675
+ * nesting so that the body's final end is found. */
1676
+ scan(op) {
1677
+ const r = this.r;
1678
+ switch (op) {
1679
+ case 0x02:
1680
+ case 0x03:
1681
+ case 0x04:
1682
+ case 0x06:
1683
+ this.scanBlockType();
1684
+ this.ctrls.push({
1685
+ opcode: op,
1686
+ start: [],
1687
+ end: [],
1688
+ height: 0,
1689
+ unreachable: true,
1690
+ hasElse: false,
1691
+ });
1692
+ return;
1693
+ case 0x1f: {
1694
+ this.m.feature("exceptions");
1695
+ this.scanBlockType();
1696
+ const n = r.u32();
1697
+ for (let i = 0; i < n; i++) {
1698
+ const kind = r.u8();
1699
+ if (kind > 3)
1700
+ r.malformed("malformed catch kind");
1701
+ if (kind < 2)
1702
+ r.u32();
1703
+ r.u32();
1704
+ }
1705
+ this.ctrls.push({
1706
+ opcode: op,
1707
+ start: [],
1708
+ end: [],
1709
+ height: 0,
1710
+ unreachable: true,
1711
+ hasElse: false,
1712
+ });
1713
+ return;
1714
+ }
1715
+ case 0x0b:
1716
+ this.ctrls.pop();
1717
+ return;
1718
+ case 0x18:
1719
+ // delegate ends its try block.
1720
+ this.m.feature("exceptions");
1721
+ r.u32();
1722
+ this.ctrls.pop();
1723
+ return;
1724
+ case 0xfc:
1725
+ this.scanFC();
1726
+ return;
1727
+ case 0xfd:
1728
+ this.m.feature("simd");
1729
+ this.scanSimd();
1730
+ return;
1731
+ case 0xfe:
1732
+ this.m.feature("threads");
1733
+ this.scanAtomic();
1734
+ return;
1735
+ case 0xfb:
1736
+ this.m.feature("gc");
1737
+ r.pos = r.end;
1738
+ this.ctrls.length = 0;
1739
+ return;
1740
+ }
1741
+ this.scanImmediates(op);
1742
+ }
1743
+ scanBlockType() {
1744
+ const r = this.r;
1745
+ const b = r.peek();
1746
+ if (b === 0x40) {
1747
+ r.u8();
1748
+ return;
1749
+ }
1750
+ if (b >= 0x60) {
1751
+ this.m.valType(r);
1752
+ return;
1753
+ }
1754
+ if (r.sleb(33) < 0)
1755
+ r.malformed("malformed block type");
1756
+ }
1757
+ /** The immediates of a single-byte opcode that opens no block. */
1758
+ scanImmediates(op) {
1759
+ const r = this.r;
1760
+ switch (op) {
1761
+ case 0x00:
1762
+ case 0x01:
1763
+ case 0x05:
1764
+ case 0x0f:
1765
+ case 0x1a:
1766
+ case 0x1b:
1767
+ case 0x0a:
1768
+ case 0x19:
1769
+ case 0xd1:
1770
+ case 0xd3:
1771
+ case 0xd4:
1772
+ if (op === 0x0a || op === 0x19)
1773
+ this.m.feature("exceptions");
1774
+ return;
1775
+ case 0x07:
1776
+ case 0x08:
1777
+ case 0x09:
1778
+ case 0x0c:
1779
+ case 0x0d:
1780
+ case 0x10:
1781
+ case 0x12:
1782
+ case 0x14:
1783
+ case 0x15:
1784
+ case 0x20:
1785
+ case 0x21:
1786
+ case 0x22:
1787
+ case 0x23:
1788
+ case 0x24:
1789
+ case 0x25:
1790
+ case 0x26:
1791
+ case 0xd2:
1792
+ case 0xd5:
1793
+ case 0xd6:
1794
+ if (op === 0x07 || op === 0x08 || op === 0x09)
1795
+ this.m.feature("exceptions");
1796
+ if (op === 0x12)
1797
+ this.m.feature("tail-call");
1798
+ if (op === 0x14 || op === 0x15 || op === 0xd5 || op === 0xd6)
1799
+ this.m.feature("function-references");
1800
+ r.u32();
1801
+ return;
1802
+ case 0x0e: {
1803
+ const n = r.u32();
1804
+ for (let i = 0; i <= n; i++)
1805
+ r.u32();
1806
+ return;
1807
+ }
1808
+ case 0x11:
1809
+ case 0x13:
1810
+ if (op === 0x13)
1811
+ this.m.feature("tail-call");
1812
+ r.u32();
1813
+ r.u32();
1814
+ return;
1815
+ case 0x1c: {
1816
+ const n = r.u32();
1817
+ for (let i = 0; i < n; i++)
1818
+ this.m.valType(r);
1819
+ return;
1820
+ }
1821
+ case 0x3f:
1822
+ case 0x40:
1823
+ r.u32();
1824
+ return;
1825
+ case 0x41:
1826
+ r.sleb(32);
1827
+ return;
1828
+ case 0x42:
1829
+ r.sleb(64);
1830
+ return;
1831
+ case 0x43:
1832
+ r.skip(4);
1833
+ return;
1834
+ case 0x44:
1835
+ r.skip(8);
1836
+ return;
1837
+ case 0xd0:
1838
+ this.m.refHeapNull(r);
1839
+ return;
1840
+ }
1841
+ if (op >= 0x28 && op <= 0x3e) {
1842
+ this.scanMemarg();
1843
+ return;
1844
+ }
1845
+ if (op >= 0x45 && op <= 0xc4) {
1846
+ if (op >= 0xc0)
1847
+ this.m.feature("sign-extension");
1848
+ return;
1849
+ }
1850
+ r.pos--;
1851
+ r.malformed(`illegal opcode 0x${op.toString(16)}`);
1852
+ }
1853
+ scanMemarg() {
1854
+ const r = this.r;
1855
+ const { align, memory } = readMemargFlags(() => r.u32());
1856
+ if (align < 0)
1857
+ r.malformed("malformed memop flags");
1858
+ if (memory !== 0)
1859
+ this.m.feature("multi-memory");
1860
+ if (this.m.memory64)
1861
+ r.u64();
1862
+ else
1863
+ r.u32();
1864
+ }
1865
+ scanFC() {
1866
+ const r = this.r;
1867
+ const sub = r.u32();
1868
+ if (sub <= 7) {
1869
+ this.m.feature("nontrapping-fptoint");
1870
+ return;
1871
+ }
1872
+ if (sub > 17)
1873
+ r.malformed(`illegal opcode 0xfc ${sub}`);
1874
+ this.m.feature(sub >= 15 ? "reference-types" : "bulk-memory");
1875
+ switch (sub) {
1876
+ case 8:
1877
+ case 10:
1878
+ case 12:
1879
+ case 14:
1880
+ r.u32();
1881
+ r.u32();
1882
+ return;
1883
+ default:
1884
+ r.u32();
1885
+ }
1886
+ }
1887
+ scanSimd() {
1888
+ const r = this.r;
1889
+ const sub = r.u32();
1890
+ if (sub <= 11 || sub === 92 || sub === 93) {
1891
+ this.scanMemarg();
1892
+ return;
1893
+ }
1894
+ if (sub === 12 || sub === 13) {
1895
+ r.skip(16);
1896
+ return;
1897
+ }
1898
+ if (sub >= 21 && sub <= 34) {
1899
+ r.u8();
1900
+ return;
1901
+ }
1902
+ if (sub >= 84 && sub <= 91) {
1903
+ this.scanMemarg();
1904
+ r.u8();
1905
+ return;
1906
+ }
1907
+ if (sub > 0x113)
1908
+ r.malformed(`illegal opcode 0xfd ${sub}`);
1909
+ }
1910
+ scanAtomic() {
1911
+ const r = this.r;
1912
+ const sub = r.u32();
1913
+ if (sub === 0x03) {
1914
+ if (r.u8() !== 0)
1915
+ r.malformed("zero byte expected");
1916
+ return;
1917
+ }
1918
+ if (sub > 0x4e || (sub > 0x03 && sub < 0x10))
1919
+ r.malformed(`illegal opcode 0xfe ${sub}`);
1920
+ this.scanMemarg();
1921
+ }
1922
+ }
1923
+ /** Decodes and validates `bytes` (a whole module). Never throws. */
1924
+ export function analyzeWasm(bytes) {
1925
+ const m = new ModuleDecoder(bytes);
1926
+ let status = "valid";
1927
+ let error = null;
1928
+ try {
1929
+ m.decode();
1930
+ }
1931
+ catch (e) {
1932
+ if (!(e instanceof WasmError))
1933
+ throw e;
1934
+ status = e.kind;
1935
+ error = `${e.message} (at byte ${e.offset})`;
1936
+ }
1937
+ const features = [];
1938
+ const unsupported = [];
1939
+ for (const feature of WASM_FEATURES) {
1940
+ if (!m.features.has(feature))
1941
+ continue;
1942
+ features.push(feature);
1943
+ if (!TRANSLATABLE.has(feature))
1944
+ unsupported.push(feature);
1945
+ }
1946
+ if (status === "valid" && unsupported.length > 0)
1947
+ status = "unsupported";
1948
+ return {
1949
+ size: bytes.length,
1950
+ status,
1951
+ error,
1952
+ features,
1953
+ unsupported,
1954
+ functions: Math.max(0, m.funcs.length - m.importedFuncs),
1955
+ imports: m.imports,
1956
+ exports: m.exports,
1957
+ importModules: m.importModules,
1958
+ memories: m.memories,
1959
+ tables: m.tables.length,
1960
+ globals: m.globals.length,
1961
+ customSections: m.customSections,
1962
+ };
1963
+ }
1964
+ /** True when `bytes` starts with the WebAssembly magic and version 1. */
1965
+ export function isWasmHeader(bytes) {
1966
+ return (bytes.length >= 8 &&
1967
+ bytes[0] === 0 &&
1968
+ bytes[1] === 0x61 &&
1969
+ bytes[2] === 0x73 &&
1970
+ bytes[3] === 0x6d &&
1971
+ bytes[4] === 1 &&
1972
+ bytes[5] === 0 &&
1973
+ bytes[6] === 0 &&
1974
+ bytes[7] === 0);
1975
+ }
1976
+ //# sourceMappingURL=binary.js.map