@geastack/compiler 1.0.15

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 (966) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +149 -0
  3. package/dist/cli-analyze.d.ts +1 -0
  4. package/dist/cli-analyze.js +61 -0
  5. package/dist/cli-coverage.d.ts +1 -0
  6. package/dist/cli-coverage.js +329 -0
  7. package/dist/cli-emit.d.ts +10 -0
  8. package/dist/cli-emit.js +398 -0
  9. package/dist/cli-module-graph.d.ts +18 -0
  10. package/dist/cli-module-graph.js +123 -0
  11. package/dist/cli-package-source.d.ts +5 -0
  12. package/dist/cli-package-source.js +116 -0
  13. package/dist/cli-project.d.ts +2 -0
  14. package/dist/cli-project.js +60 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +199 -0
  17. package/dist/compiler.d.ts +228 -0
  18. package/dist/compiler.js +1029 -0
  19. package/dist/conversion/algebra.d.ts +218 -0
  20. package/dist/conversion/algebra.js +155 -0
  21. package/dist/conversion/build.d.ts +67 -0
  22. package/dist/conversion/build.js +1378 -0
  23. package/dist/conversion/derive.d.ts +37 -0
  24. package/dist/conversion/derive.js +260 -0
  25. package/dist/conversion/graph-validation.d.ts +8 -0
  26. package/dist/conversion/graph-validation.js +97 -0
  27. package/dist/conversion/native-callable-adapter.d.ts +13 -0
  28. package/dist/conversion/native-callable-adapter.js +53 -0
  29. package/dist/conversion/native-class-reference.d.ts +12 -0
  30. package/dist/conversion/native-class-reference.js +39 -0
  31. package/dist/conversion/native-payload-transport.d.ts +25 -0
  32. package/dist/conversion/native-payload-transport.js +33 -0
  33. package/dist/conversion/native-selection.d.ts +49 -0
  34. package/dist/conversion/native-selection.js +135 -0
  35. package/dist/conversion/native-sum.d.ts +42 -0
  36. package/dist/conversion/native-sum.js +115 -0
  37. package/dist/conversion/nodes.d.ts +55 -0
  38. package/dist/conversion/nodes.js +91 -0
  39. package/dist/conversion/operand-view.d.ts +14 -0
  40. package/dist/conversion/operand-view.js +20 -0
  41. package/dist/conversion/record-view.d.ts +157 -0
  42. package/dist/conversion/record-view.js +273 -0
  43. package/dist/conversion/registry.d.ts +217 -0
  44. package/dist/conversion/registry.js +1 -0
  45. package/dist/diagnostics/model.d.ts +76 -0
  46. package/dist/diagnostics/model.js +60 -0
  47. package/dist/diagnostics/sweep.d.ts +31 -0
  48. package/dist/diagnostics/sweep.js +112 -0
  49. package/dist/identity/ids.d.ts +179 -0
  50. package/dist/identity/ids.js +212 -0
  51. package/dist/ir/absent-class-arm.d.ts +48 -0
  52. package/dist/ir/absent-class-arm.js +157 -0
  53. package/dist/ir/borrow-effects.d.ts +23 -0
  54. package/dist/ir/borrow-effects.js +151 -0
  55. package/dist/ir/borrowed-call-arguments.d.ts +40 -0
  56. package/dist/ir/borrowed-call-arguments.js +117 -0
  57. package/dist/ir/build.d.ts +168 -0
  58. package/dist/ir/build.js +459 -0
  59. package/dist/ir/call-dispatch.d.ts +38 -0
  60. package/dist/ir/call-dispatch.js +502 -0
  61. package/dist/ir/call-entry.d.ts +142 -0
  62. package/dist/ir/call-entry.js +386 -0
  63. package/dist/ir/callable-class-flow.d.ts +27 -0
  64. package/dist/ir/callable-class-flow.js +1386 -0
  65. package/dist/ir/callable-field-slots.d.ts +22 -0
  66. package/dist/ir/callable-field-slots.js +166 -0
  67. package/dist/ir/callable-identity-demand.d.ts +52 -0
  68. package/dist/ir/callable-identity-demand.js +460 -0
  69. package/dist/ir/callable-member-candidates.d.ts +9 -0
  70. package/dist/ir/callable-member-candidates.js +39 -0
  71. package/dist/ir/callable-records.d.ts +21 -0
  72. package/dist/ir/callable-records.js +411 -0
  73. package/dist/ir/captures.d.ts +26 -0
  74. package/dist/ir/captures.js +335 -0
  75. package/dist/ir/certificate.d.ts +45 -0
  76. package/dist/ir/certificate.js +47 -0
  77. package/dist/ir/certify/carrier-keys.d.ts +73 -0
  78. package/dist/ir/certify/carrier-keys.js +221 -0
  79. package/dist/ir/certify/function-source.d.ts +4 -0
  80. package/dist/ir/certify/function-source.js +28 -0
  81. package/dist/ir/certify/has-property-key.d.ts +88 -0
  82. package/dist/ir/certify/has-property-key.js +116 -0
  83. package/dist/ir/certify/instanceof-key.d.ts +24 -0
  84. package/dist/ir/certify/instanceof-key.js +35 -0
  85. package/dist/ir/certify/property-access-keys.d.ts +172 -0
  86. package/dist/ir/certify/property-access-keys.js +291 -0
  87. package/dist/ir/certify/property-access.d.ts +3 -0
  88. package/dist/ir/certify/property-access.js +597 -0
  89. package/dist/ir/certify/runtime-helper.d.ts +3 -0
  90. package/dist/ir/certify/runtime-helper.js +326 -0
  91. package/dist/ir/certify/typeof-operand.d.ts +14 -0
  92. package/dist/ir/certify/typeof-operand.js +16 -0
  93. package/dist/ir/certify.d.ts +123 -0
  94. package/dist/ir/certify.js +481 -0
  95. package/dist/ir/class-evaluation.d.ts +26 -0
  96. package/dist/ir/class-evaluation.js +50 -0
  97. package/dist/ir/class-static-fields.d.ts +60 -0
  98. package/dist/ir/class-static-fields.js +108 -0
  99. package/dist/ir/construct-entry.d.ts +26 -0
  100. package/dist/ir/construct-entry.js +117 -0
  101. package/dist/ir/dead-values.d.ts +90 -0
  102. package/dist/ir/dead-values.js +184 -0
  103. package/dist/ir/deferral.d.ts +99 -0
  104. package/dist/ir/deferral.js +409 -0
  105. package/dist/ir/dense-loops.d.ts +230 -0
  106. package/dist/ir/dense-loops.js +697 -0
  107. package/dist/ir/dominance.d.ts +82 -0
  108. package/dist/ir/dominance.js +268 -0
  109. package/dist/ir/emission-representations.d.ts +71 -0
  110. package/dist/ir/emission-representations.js +350 -0
  111. package/dist/ir/facts.d.ts +218 -0
  112. package/dist/ir/facts.js +181 -0
  113. package/dist/ir/fixed-data-definition.d.ts +19 -0
  114. package/dist/ir/fixed-data-definition.js +49 -0
  115. package/dist/ir/generator-split.d.ts +38 -0
  116. package/dist/ir/generator-split.js +329 -0
  117. package/dist/ir/hoist.d.ts +55 -0
  118. package/dist/ir/hoist.js +375 -0
  119. package/dist/ir/instantiation.d.ts +61 -0
  120. package/dist/ir/instantiation.js +137 -0
  121. package/dist/ir/integer-storage.d.ts +170 -0
  122. package/dist/ir/integer-storage.js +822 -0
  123. package/dist/ir/integers.d.ts +161 -0
  124. package/dist/ir/integers.js +539 -0
  125. package/dist/ir/integrity-restrictions.d.ts +50 -0
  126. package/dist/ir/integrity-restrictions.js +118 -0
  127. package/dist/ir/local-iterators.d.ts +4 -0
  128. package/dist/ir/local-iterators.js +27 -0
  129. package/dist/ir/lower-allocation.d.ts +4 -0
  130. package/dist/ir/lower-allocation.js +325 -0
  131. package/dist/ir/lower-completion.d.ts +15 -0
  132. package/dist/ir/lower-completion.js +25 -0
  133. package/dist/ir/lower-destructuring.d.ts +5 -0
  134. package/dist/ir/lower-destructuring.js +693 -0
  135. package/dist/ir/lower-element.d.ts +29 -0
  136. package/dist/ir/lower-element.js +111 -0
  137. package/dist/ir/lower-exceptions.d.ts +47 -0
  138. package/dist/ir/lower-exceptions.js +92 -0
  139. package/dist/ir/lower-flow.d.ts +137 -0
  140. package/dist/ir/lower-flow.js +600 -0
  141. package/dist/ir/lower-graph.d.ts +218 -0
  142. package/dist/ir/lower-graph.js +687 -0
  143. package/dist/ir/lower-invocation.d.ts +4 -0
  144. package/dist/ir/lower-invocation.js +514 -0
  145. package/dist/ir/lower-narrow.d.ts +53 -0
  146. package/dist/ir/lower-narrow.js +320 -0
  147. package/dist/ir/lower-operands.d.ts +272 -0
  148. package/dist/ir/lower-operands.js +461 -0
  149. package/dist/ir/lower-property.d.ts +21 -0
  150. package/dist/ir/lower-property.js +132 -0
  151. package/dist/ir/lower-protocol.d.ts +11 -0
  152. package/dist/ir/lower-protocol.js +118 -0
  153. package/dist/ir/lower-short-circuit.d.ts +41 -0
  154. package/dist/ir/lower-short-circuit.js +63 -0
  155. package/dist/ir/lower.d.ts +82 -0
  156. package/dist/ir/lower.js +1346 -0
  157. package/dist/ir/model.d.ts +1474 -0
  158. package/dist/ir/model.js +6 -0
  159. package/dist/ir/native-absent-property.d.ts +3 -0
  160. package/dist/ir/native-absent-property.js +13 -0
  161. package/dist/ir/native-array-transport.d.ts +7 -0
  162. package/dist/ir/native-array-transport.js +46 -0
  163. package/dist/ir/native-callable-bind.d.ts +9 -0
  164. package/dist/ir/native-callable-bind.js +30 -0
  165. package/dist/ir/native-carrier-predicate.d.ts +34 -0
  166. package/dist/ir/native-carrier-predicate.js +49 -0
  167. package/dist/ir/native-class-accessor.d.ts +18 -0
  168. package/dist/ir/native-class-accessor.js +52 -0
  169. package/dist/ir/native-class-construction.d.ts +16 -0
  170. package/dist/ir/native-class-construction.js +71 -0
  171. package/dist/ir/native-class-initialization.d.ts +15 -0
  172. package/dist/ir/native-class-initialization.js +56 -0
  173. package/dist/ir/native-class-origins.d.ts +13 -0
  174. package/dist/ir/native-class-origins.js +237 -0
  175. package/dist/ir/native-dictionary-transport.d.ts +6 -0
  176. package/dist/ir/native-dictionary-transport.js +37 -0
  177. package/dist/ir/native-enumeration.d.ts +14 -0
  178. package/dist/ir/native-enumeration.js +26 -0
  179. package/dist/ir/native-equality.d.ts +10 -0
  180. package/dist/ir/native-equality.js +18 -0
  181. package/dist/ir/native-field-owner.d.ts +37 -0
  182. package/dist/ir/native-field-owner.js +183 -0
  183. package/dist/ir/native-fixed-layout.d.ts +41 -0
  184. package/dist/ir/native-fixed-layout.js +232 -0
  185. package/dist/ir/native-host-construction.d.ts +53 -0
  186. package/dist/ir/native-host-construction.js +62 -0
  187. package/dist/ir/native-key-query.d.ts +4 -0
  188. package/dist/ir/native-key-query.js +38 -0
  189. package/dist/ir/native-merge-transport.d.ts +25 -0
  190. package/dist/ir/native-merge-transport.js +71 -0
  191. package/dist/ir/native-record-index-transport.d.ts +11 -0
  192. package/dist/ir/native-record-index-transport.js +34 -0
  193. package/dist/ir/native-record-index.d.ts +12 -0
  194. package/dist/ir/native-record-index.js +27 -0
  195. package/dist/ir/native-reflect-field.d.ts +5 -0
  196. package/dist/ir/native-reflect-field.js +33 -0
  197. package/dist/ir/native-sequence-transport.d.ts +7 -0
  198. package/dist/ir/native-sequence-transport.js +53 -0
  199. package/dist/ir/numeric-intrinsics.d.ts +13 -0
  200. package/dist/ir/numeric-intrinsics.js +57 -0
  201. package/dist/ir/object-value-conversions.d.ts +20 -0
  202. package/dist/ir/object-value-conversions.js +50 -0
  203. package/dist/ir/physical-class-reflection.d.ts +9 -0
  204. package/dist/ir/physical-class-reflection.js +57 -0
  205. package/dist/ir/presence-proof.d.ts +42 -0
  206. package/dist/ir/presence-proof.js +490 -0
  207. package/dist/ir/program-facts.d.ts +106 -0
  208. package/dist/ir/program-facts.js +319 -0
  209. package/dist/ir/proven-branches.d.ts +16 -0
  210. package/dist/ir/proven-branches.js +219 -0
  211. package/dist/ir/queries.d.ts +41 -0
  212. package/dist/ir/queries.js +213 -0
  213. package/dist/ir/reflection-demand.d.ts +64 -0
  214. package/dist/ir/reflection-demand.js +1394 -0
  215. package/dist/ir/refusal.d.ts +43 -0
  216. package/dist/ir/refusal.js +28 -0
  217. package/dist/ir/shake.d.ts +37 -0
  218. package/dist/ir/shake.js +1078 -0
  219. package/dist/ir/static-callables.d.ts +11 -0
  220. package/dist/ir/static-callables.js +163 -0
  221. package/dist/ir/string-layout-reuse.d.ts +13 -0
  222. package/dist/ir/string-layout-reuse.js +39 -0
  223. package/dist/ir/string-length-reuse.d.ts +8 -0
  224. package/dist/ir/string-length-reuse.js +47 -0
  225. package/dist/ir/transfer.d.ts +78 -0
  226. package/dist/ir/transfer.js +270 -0
  227. package/dist/ir/type-query-results.d.ts +25 -0
  228. package/dist/ir/type-query-results.js +96 -0
  229. package/dist/ir/typed-property-access.d.ts +100 -0
  230. package/dist/ir/typed-property-access.js +161 -0
  231. package/dist/ir/verify.d.ts +19 -0
  232. package/dist/ir/verify.js +355 -0
  233. package/dist/plugins/apple/constructors.d.ts +112 -0
  234. package/dist/plugins/apple/constructors.js +217 -0
  235. package/dist/plugins/apple/host.d.ts +181 -0
  236. package/dist/plugins/apple/host.js +262 -0
  237. package/dist/plugins/apple/jsx.d.ts +2 -0
  238. package/dist/plugins/apple/jsx.js +293 -0
  239. package/dist/plugins/apple/members.d.ts +16 -0
  240. package/dist/plugins/apple/members.js +190 -0
  241. package/dist/plugins/apple/plugin.d.ts +2 -0
  242. package/dist/plugins/apple/plugin.js +156 -0
  243. package/dist/plugins/gea/component-classes.d.ts +25 -0
  244. package/dist/plugins/gea/component-classes.js +162 -0
  245. package/dist/plugins/gea/component-inline.d.ts +13 -0
  246. package/dist/plugins/gea/component-inline.js +532 -0
  247. package/dist/plugins/gea/constructors.d.ts +23 -0
  248. package/dist/plugins/gea/constructors.js +100 -0
  249. package/dist/plugins/gea/contract.d.ts +150 -0
  250. package/dist/plugins/gea/contract.js +195 -0
  251. package/dist/plugins/gea/element-ref.d.ts +31 -0
  252. package/dist/plugins/gea/element-ref.js +45 -0
  253. package/dist/plugins/gea/host.d.ts +520 -0
  254. package/dist/plugins/gea/host.js +762 -0
  255. package/dist/plugins/gea/lower.d.ts +6 -0
  256. package/dist/plugins/gea/lower.js +195 -0
  257. package/dist/plugins/gea/members.d.ts +22 -0
  258. package/dist/plugins/gea/members.js +221 -0
  259. package/dist/plugins/gea/plugin.d.ts +22 -0
  260. package/dist/plugins/gea/plugin.js +307 -0
  261. package/dist/plugins/gea/prelude.d.ts +78 -0
  262. package/dist/plugins/gea/prelude.js +153 -0
  263. package/dist/plugins/gea/producer.d.ts +5 -0
  264. package/dist/plugins/gea/producer.js +52 -0
  265. package/dist/plugins/gea/reactive-slots.d.ts +49 -0
  266. package/dist/plugins/gea/reactive-slots.js +578 -0
  267. package/dist/plugins/gea/render-bridge.d.ts +6 -0
  268. package/dist/plugins/gea/render-bridge.js +281 -0
  269. package/dist/plugins/gea/slots.d.ts +15 -0
  270. package/dist/plugins/gea/slots.js +36 -0
  271. package/dist/plugins/gea/template-analysis.d.ts +151 -0
  272. package/dist/plugins/gea/template-analysis.js +346 -0
  273. package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
  274. package/dist/plugins/gea/user-agent-styles.js +94 -0
  275. package/dist/plugins/installed.d.ts +19 -0
  276. package/dist/plugins/installed.js +21 -0
  277. package/dist/plugins/load.d.ts +7 -0
  278. package/dist/plugins/load.js +207 -0
  279. package/dist/plugins/model.d.ts +735 -0
  280. package/dist/plugins/model.js +47 -0
  281. package/dist/plugins/webgl/host.d.ts +77 -0
  282. package/dist/plugins/webgl/host.js +162 -0
  283. package/dist/plugins/webgl/plugin.d.ts +40 -0
  284. package/dist/plugins/webgl/plugin.js +99 -0
  285. package/dist/preflight/obligations.d.ts +206 -0
  286. package/dist/preflight/obligations.js +36 -0
  287. package/dist/preflight/report.d.ts +20 -0
  288. package/dist/preflight/report.js +61 -0
  289. package/dist/preflight/run.d.ts +39 -0
  290. package/dist/preflight/run.js +403 -0
  291. package/dist/project-preparation.d.ts +33 -0
  292. package/dist/project-preparation.js +314 -0
  293. package/dist/projection/abi.d.ts +82 -0
  294. package/dist/projection/abi.js +349 -0
  295. package/dist/projection/apply-arguments.d.ts +12 -0
  296. package/dist/projection/apply-arguments.js +20 -0
  297. package/dist/projection/bindings.d.ts +250 -0
  298. package/dist/projection/bindings.js +340 -0
  299. package/dist/projection/callee.d.ts +196 -0
  300. package/dist/projection/callee.js +444 -0
  301. package/dist/projection/class-property-presence.d.ts +28 -0
  302. package/dist/projection/class-property-presence.js +58 -0
  303. package/dist/projection/class-prototype.d.ts +5 -0
  304. package/dist/projection/class-prototype.js +23 -0
  305. package/dist/projection/class-storage.d.ts +26 -0
  306. package/dist/projection/class-storage.js +236 -0
  307. package/dist/projection/classes.d.ts +283 -0
  308. package/dist/projection/classes.js +944 -0
  309. package/dist/projection/coercions.d.ts +20 -0
  310. package/dist/projection/coercions.js +33 -0
  311. package/dist/projection/dispatch.d.ts +167 -0
  312. package/dist/projection/dispatch.js +379 -0
  313. package/dist/projection/fields.d.ts +123 -0
  314. package/dist/projection/fields.js +383 -0
  315. package/dist/projection/instance-test.d.ts +78 -0
  316. package/dist/projection/instance-test.js +156 -0
  317. package/dist/projection/slots.d.ts +146 -0
  318. package/dist/projection/slots.js +663 -0
  319. package/dist/projection/synthesized-abi.d.ts +61 -0
  320. package/dist/projection/synthesized-abi.js +94 -0
  321. package/dist/representation/array-index.d.ts +14 -0
  322. package/dist/representation/array-index.js +17 -0
  323. package/dist/representation/callable-object.d.ts +3 -0
  324. package/dist/representation/callable-object.js +6 -0
  325. package/dist/representation/collections.d.ts +84 -0
  326. package/dist/representation/collections.js +139 -0
  327. package/dist/representation/derive.d.ts +159 -0
  328. package/dist/representation/derive.js +2546 -0
  329. package/dist/representation/difference.d.ts +30 -0
  330. package/dist/representation/difference.js +240 -0
  331. package/dist/representation/field-descriptor-policy.d.ts +19 -0
  332. package/dist/representation/field-descriptor-policy.js +39 -0
  333. package/dist/representation/function-constructor.d.ts +13 -0
  334. package/dist/representation/function-constructor.js +9 -0
  335. package/dist/representation/host-abi.d.ts +32 -0
  336. package/dist/representation/host-abi.js +97 -0
  337. package/dist/representation/host-templates.d.ts +67 -0
  338. package/dist/representation/host-templates.js +94 -0
  339. package/dist/representation/intersection.d.ts +84 -0
  340. package/dist/representation/intersection.js +149 -0
  341. package/dist/representation/literal-destination.d.ts +43 -0
  342. package/dist/representation/literal-destination.js +133 -0
  343. package/dist/representation/merge.d.ts +18 -0
  344. package/dist/representation/merge.js +83 -0
  345. package/dist/representation/model.d.ts +1160 -0
  346. package/dist/representation/model.js +1019 -0
  347. package/dist/representation/numeric-index.d.ts +13 -0
  348. package/dist/representation/numeric-index.js +29 -0
  349. package/dist/representation/object-shape.d.ts +109 -0
  350. package/dist/representation/object-shape.js +123 -0
  351. package/dist/representation/optional.d.ts +12 -0
  352. package/dist/representation/optional.js +87 -0
  353. package/dist/representation/plan.d.ts +60 -0
  354. package/dist/representation/plan.js +78 -0
  355. package/dist/representation/policies.d.ts +589 -0
  356. package/dist/representation/policies.js +107 -0
  357. package/dist/representation/primitive-domain.d.ts +1 -0
  358. package/dist/representation/primitive-domain.js +1 -0
  359. package/dist/representation/primitives.d.ts +44 -0
  360. package/dist/representation/primitives.js +78 -0
  361. package/dist/representation/publish.d.ts +49 -0
  362. package/dist/representation/publish.js +648 -0
  363. package/dist/representation/record-fields.d.ts +96 -0
  364. package/dist/representation/record-fields.js +116 -0
  365. package/dist/representation/template-object.d.ts +11 -0
  366. package/dist/representation/template-object.js +26 -0
  367. package/dist/representation/union.d.ts +30 -0
  368. package/dist/representation/union.js +324 -0
  369. package/dist/representation/value-records.d.ts +3 -0
  370. package/dist/representation/value-records.js +307 -0
  371. package/dist/representation/verify.d.ts +17 -0
  372. package/dist/representation/verify.js +221 -0
  373. package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
  374. package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
  375. package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
  376. package/dist/semantics/ambient-type-realization-transform.js +168 -0
  377. package/dist/semantics/ambient.d.ts +24 -0
  378. package/dist/semantics/ambient.js +119 -0
  379. package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
  380. package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
  381. package/dist/semantics/callable-origins.d.ts +46 -0
  382. package/dist/semantics/callable-origins.js +354 -0
  383. package/dist/semantics/class-alias.d.ts +7 -0
  384. package/dist/semantics/class-alias.js +37 -0
  385. package/dist/semantics/class-heritage.d.ts +34 -0
  386. package/dist/semantics/class-heritage.js +104 -0
  387. package/dist/semantics/commonjs-wrapper.d.ts +69 -0
  388. package/dist/semantics/commonjs-wrapper.js +231 -0
  389. package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
  390. package/dist/semantics/constructor-slot-subclasses.js +112 -0
  391. package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
  392. package/dist/semantics/declaration-overlay-transform.js +2157 -0
  393. package/dist/semantics/define-property-source-transform.d.ts +4 -0
  394. package/dist/semantics/define-property-source-transform.js +437 -0
  395. package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
  396. package/dist/semantics/diagnostic-source-preparation.js +82 -0
  397. package/dist/semantics/documentation-ranges.d.ts +22 -0
  398. package/dist/semantics/documentation-ranges.js +36 -0
  399. package/dist/semantics/dynamic-fallback.d.ts +86 -0
  400. package/dist/semantics/dynamic-fallback.js +249 -0
  401. package/dist/semantics/frontend-timing.d.ts +6 -0
  402. package/dist/semantics/frontend-timing.js +35 -0
  403. package/dist/semantics/frontend.d.ts +504 -0
  404. package/dist/semantics/frontend.js +1157 -0
  405. package/dist/semantics/host-declaration-provenance.d.ts +11 -0
  406. package/dist/semantics/host-declaration-provenance.js +18 -0
  407. package/dist/semantics/host-methods.d.ts +24 -0
  408. package/dist/semantics/host-methods.js +74 -0
  409. package/dist/semantics/host-protocols.d.ts +429 -0
  410. package/dist/semantics/host-protocols.js +1501 -0
  411. package/dist/semantics/inherited-accessor.d.ts +7 -0
  412. package/dist/semantics/inherited-accessor.js +48 -0
  413. package/dist/semantics/interface-families.d.ts +70 -0
  414. package/dist/semantics/interface-families.js +180 -0
  415. package/dist/semantics/interface-implementors.d.ts +53 -0
  416. package/dist/semantics/interface-implementors.js +87 -0
  417. package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
  418. package/dist/semantics/jsdoc-namepath-transform.js +85 -0
  419. package/dist/semantics/model/coverage.d.ts +68 -0
  420. package/dist/semantics/model/coverage.js +73 -0
  421. package/dist/semantics/model/edges.d.ts +103 -0
  422. package/dist/semantics/model/edges.js +20 -0
  423. package/dist/semantics/model/graph.d.ts +55 -0
  424. package/dist/semantics/model/graph.js +129 -0
  425. package/dist/semantics/model/operands.d.ts +159 -0
  426. package/dist/semantics/model/operands.js +26 -0
  427. package/dist/semantics/model/operations.d.ts +496 -0
  428. package/dist/semantics/model/operations.js +2 -0
  429. package/dist/semantics/model/primitive-domain.d.ts +26 -0
  430. package/dist/semantics/model/primitive-domain.js +38 -0
  431. package/dist/semantics/model/selected-signature.d.ts +261 -0
  432. package/dist/semantics/model/selected-signature.js +55 -0
  433. package/dist/semantics/model/structural-type-table.d.ts +93 -0
  434. package/dist/semantics/model/structural-type-table.js +237 -0
  435. package/dist/semantics/model/structural-types.d.ts +367 -0
  436. package/dist/semantics/model/structural-types.js +200 -0
  437. package/dist/semantics/module-resolution.d.ts +23 -0
  438. package/dist/semantics/module-resolution.js +227 -0
  439. package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
  440. package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
  441. package/dist/semantics/node-project.d.ts +13 -0
  442. package/dist/semantics/node-project.js +107 -0
  443. package/dist/semantics/node-source-hooks.d.ts +1 -0
  444. package/dist/semantics/node-source-hooks.js +63 -0
  445. package/dist/semantics/normalize/absent-globals.d.ts +143 -0
  446. package/dist/semantics/normalize/absent-globals.js +191 -0
  447. package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
  448. package/dist/semantics/normalize/arguments-objects.js +60 -0
  449. package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
  450. package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
  451. package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
  452. package/dist/semantics/normalize/assignment-patterns.js +147 -0
  453. package/dist/semantics/normalize/bag-absence.d.ts +8 -0
  454. package/dist/semantics/normalize/bag-absence.js +42 -0
  455. package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
  456. package/dist/semantics/normalize/binding-fixpoint.js +140 -0
  457. package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
  458. package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
  459. package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
  460. package/dist/semantics/normalize/cells/agreement.js +34 -0
  461. package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
  462. package/dist/semantics/normalize/cells/candidates.js +35 -0
  463. package/dist/semantics/normalize/cells/facts.d.ts +19 -0
  464. package/dist/semantics/normalize/cells/facts.js +90 -0
  465. package/dist/semantics/normalize/cells/index.d.ts +10 -0
  466. package/dist/semantics/normalize/cells/index.js +6 -0
  467. package/dist/semantics/normalize/cells/model.d.ts +98 -0
  468. package/dist/semantics/normalize/cells/model.js +2 -0
  469. package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
  470. package/dist/semantics/normalize/cells/policies/bag.js +114 -0
  471. package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
  472. package/dist/semantics/normalize/cells/policies/collection.js +218 -0
  473. package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
  474. package/dist/semantics/normalize/cells/policies/field.js +40 -0
  475. package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
  476. package/dist/semantics/normalize/cells/policies/index.js +58 -0
  477. package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
  478. package/dist/semantics/normalize/cells/policies/local.js +37 -0
  479. package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
  480. package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
  481. package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
  482. package/dist/semantics/normalize/cells/policies/return.js +45 -0
  483. package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
  484. package/dist/semantics/normalize/cells/policies/shared.js +45 -0
  485. package/dist/semantics/normalize/cells/policy.d.ts +72 -0
  486. package/dist/semantics/normalize/cells/policy.js +18 -0
  487. package/dist/semantics/normalize/cells/registry.d.ts +14 -0
  488. package/dist/semantics/normalize/cells/registry.js +17 -0
  489. package/dist/semantics/normalize/census-refusal.d.ts +62 -0
  490. package/dist/semantics/normalize/census-refusal.js +27 -0
  491. package/dist/semantics/normalize/census.d.ts +109 -0
  492. package/dist/semantics/normalize/census.js +667 -0
  493. package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
  494. package/dist/semantics/normalize/collection-bindings.js +677 -0
  495. package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
  496. package/dist/semantics/normalize/commonjs-module-record.js +289 -0
  497. package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
  498. package/dist/semantics/normalize/commonjs-require.js +1527 -0
  499. package/dist/semantics/normalize/contribution.d.ts +63 -0
  500. package/dist/semantics/normalize/contribution.js +172 -0
  501. package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
  502. package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
  503. package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
  504. package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
  505. package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
  506. package/dist/semantics/normalize/derived-expression-type.js +3463 -0
  507. package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
  508. package/dist/semantics/normalize/evaluation-order.js +37 -0
  509. package/dist/semantics/normalize/field-bindings.d.ts +167 -0
  510. package/dist/semantics/normalize/field-bindings.js +1125 -0
  511. package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
  512. package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
  513. package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
  514. package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
  515. package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
  516. package/dist/semantics/normalize/flow/callable-completions.js +82 -0
  517. package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
  518. package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
  519. package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
  520. package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
  521. package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
  522. package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
  523. package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
  524. package/dist/semantics/normalize/flow/component-solver.js +587 -0
  525. package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
  526. package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
  527. package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
  528. package/dist/semantics/normalize/flow/export-importers.js +269 -0
  529. package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
  530. package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
  531. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
  532. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
  533. package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
  534. package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
  535. package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
  536. package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
  537. package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
  538. package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
  539. package/dist/semantics/normalize/flow/model.d.ts +357 -0
  540. package/dist/semantics/normalize/flow/model.js +177 -0
  541. package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
  542. package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
  543. package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
  544. package/dist/semantics/normalize/flow/node-path-token.js +53 -0
  545. package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
  546. package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
  547. package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
  548. package/dist/semantics/normalize/flow/origin-authority.js +2 -0
  549. package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
  550. package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
  551. package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
  552. package/dist/semantics/normalize/flow/parameter-values.js +251 -0
  553. package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
  554. package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
  555. package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
  556. package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
  557. package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
  558. package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
  559. package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
  560. package/dist/semantics/normalize/flow/source-class-data.js +838 -0
  561. package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
  562. package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
  563. package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
  564. package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
  565. package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
  566. package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
  567. package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
  568. package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
  569. package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
  570. package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
  571. package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
  572. package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
  573. package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
  574. package/dist/semantics/normalize/flow/source-record-data.js +626 -0
  575. package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
  576. package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
  577. package/dist/semantics/normalize/flow/targets.d.ts +118 -0
  578. package/dist/semantics/normalize/flow/targets.js +405 -0
  579. package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
  580. package/dist/semantics/normalize/flow/value-flow.js +823 -0
  581. package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
  582. package/dist/semantics/normalize/flow/value-provenance.js +112 -0
  583. package/dist/semantics/normalize/gating.d.ts +51 -0
  584. package/dist/semantics/normalize/gating.js +560 -0
  585. package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
  586. package/dist/semantics/normalize/generic-function-choice.js +115 -0
  587. package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
  588. package/dist/semantics/normalize/global-host-mutations.js +5989 -0
  589. package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
  590. package/dist/semantics/normalize/host-effect-contracts.js +143 -0
  591. package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
  592. package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
  593. package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
  594. package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
  595. package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
  596. package/dist/semantics/normalize/host-mutation-keys.js +183 -0
  597. package/dist/semantics/normalize/identities.d.ts +172 -0
  598. package/dist/semantics/normalize/identities.js +426 -0
  599. package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
  600. package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
  601. package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
  602. package/dist/semantics/normalize/implicit-arguments.js +39 -0
  603. package/dist/semantics/normalize/instantiation.d.ts +73 -0
  604. package/dist/semantics/normalize/instantiation.js +399 -0
  605. package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
  606. package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
  607. package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
  608. package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
  609. package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
  610. package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
  611. package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
  612. package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
  613. package/dist/semantics/normalize/keyof.d.ts +32 -0
  614. package/dist/semantics/normalize/keyof.js +110 -0
  615. package/dist/semantics/normalize/local-bindings.d.ts +176 -0
  616. package/dist/semantics/normalize/local-bindings.js +1826 -0
  617. package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
  618. package/dist/semantics/normalize/logical-result-type.js +102 -0
  619. package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
  620. package/dist/semantics/normalize/namespace-paths.js +108 -0
  621. package/dist/semantics/normalize/normalize.d.ts +57 -0
  622. package/dist/semantics/normalize/normalize.js +68 -0
  623. package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
  624. package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
  625. package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
  626. package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
  627. package/dist/semantics/normalize/open-type-form.d.ts +10 -0
  628. package/dist/semantics/normalize/open-type-form.js +32 -0
  629. package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
  630. package/dist/semantics/normalize/parameter-bindings.js +3339 -0
  631. package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
  632. package/dist/semantics/normalize/parameter-slot.js +491 -0
  633. package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
  634. package/dist/semantics/normalize/physical-overload-result.js +99 -0
  635. package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
  636. package/dist/semantics/normalize/primitive-property-absence.js +60 -0
  637. package/dist/semantics/normalize/producer-context.d.ts +376 -0
  638. package/dist/semantics/normalize/producer-context.js +1 -0
  639. package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
  640. package/dist/semantics/normalize/producers/allocations.js +863 -0
  641. package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
  642. package/dist/semantics/normalize/producers/binding-kind.js +36 -0
  643. package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
  644. package/dist/semantics/normalize/producers/bindings.js +710 -0
  645. package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
  646. package/dist/semantics/normalize/producers/boundary.js +123 -0
  647. package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
  648. package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
  649. package/dist/semantics/normalize/producers/computations.d.ts +3 -0
  650. package/dist/semantics/normalize/producers/computations.js +613 -0
  651. package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
  652. package/dist/semantics/normalize/producers/control-loops.js +91 -0
  653. package/dist/semantics/normalize/producers/control.d.ts +30 -0
  654. package/dist/semantics/normalize/producers/control.js +923 -0
  655. package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
  656. package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
  657. package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
  658. package/dist/semantics/normalize/producers/destructuring.js +1180 -0
  659. package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
  660. package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
  661. package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
  662. package/dist/semantics/normalize/producers/erasure.js +90 -0
  663. package/dist/semantics/normalize/producers/installed.d.ts +3 -0
  664. package/dist/semantics/normalize/producers/installed.js +55 -0
  665. package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
  666. package/dist/semantics/normalize/producers/invocations.js +1796 -0
  667. package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
  668. package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
  669. package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
  670. package/dist/semantics/normalize/producers/jsx.js +360 -0
  671. package/dist/semantics/normalize/producers/mint.d.ts +39 -0
  672. package/dist/semantics/normalize/producers/mint.js +44 -0
  673. package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
  674. package/dist/semantics/normalize/producers/nullish.js +27 -0
  675. package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
  676. package/dist/semantics/normalize/producers/object-assignment.js +204 -0
  677. package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
  678. package/dist/semantics/normalize/producers/object-tag.js +119 -0
  679. package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
  680. package/dist/semantics/normalize/producers/optional-chain.js +75 -0
  681. package/dist/semantics/normalize/producers/properties.d.ts +21 -0
  682. package/dist/semantics/normalize/producers/properties.js +1053 -0
  683. package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
  684. package/dist/semantics/normalize/producers/protocol.js +695 -0
  685. package/dist/semantics/normalize/producers/references.d.ts +53 -0
  686. package/dist/semantics/normalize/producers/references.js +1027 -0
  687. package/dist/semantics/normalize/producers/shared.d.ts +561 -0
  688. package/dist/semantics/normalize/producers/shared.js +1683 -0
  689. package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
  690. package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
  691. package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
  692. package/dist/semantics/normalize/producers/tagged-template.js +307 -0
  693. package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
  694. package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
  695. package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
  696. package/dist/semantics/normalize/property-key-domain.js +150 -0
  697. package/dist/semantics/normalize/reachability.d.ts +189 -0
  698. package/dist/semantics/normalize/reachability.js +1057 -0
  699. package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
  700. package/dist/semantics/normalize/reassigned-bindings.js +41 -0
  701. package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
  702. package/dist/semantics/normalize/record-storage-families.js +109 -0
  703. package/dist/semantics/normalize/return-bindings.d.ts +260 -0
  704. package/dist/semantics/normalize/return-bindings.js +1311 -0
  705. package/dist/semantics/normalize/return-paths.d.ts +2 -0
  706. package/dist/semantics/normalize/return-paths.js +28 -0
  707. package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
  708. package/dist/semantics/normalize/script-global-redefinition.js +75 -0
  709. package/dist/semantics/normalize/specialization.d.ts +201 -0
  710. package/dist/semantics/normalize/specialization.js +1824 -0
  711. package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
  712. package/dist/semantics/normalize/structural-array-element.js +700 -0
  713. package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
  714. package/dist/semantics/normalize/structural-array-read.js +124 -0
  715. package/dist/semantics/normalize/structural-callable.d.ts +12 -0
  716. package/dist/semantics/normalize/structural-callable.js +82 -0
  717. package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
  718. package/dist/semantics/normalize/structural-creation-order.js +111 -0
  719. package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
  720. package/dist/semantics/normalize/structural-declarations.js +968 -0
  721. package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
  722. package/dist/semantics/normalize/structural-declared-body.js +147 -0
  723. package/dist/semantics/normalize/structural-generics.d.ts +56 -0
  724. package/dist/semantics/normalize/structural-generics.js +120 -0
  725. package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
  726. package/dist/semantics/normalize/structural-indexed-access.js +126 -0
  727. package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
  728. package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
  729. package/dist/semantics/normalize/structural-joins.d.ts +44 -0
  730. package/dist/semantics/normalize/structural-joins.js +143 -0
  731. package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
  732. package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
  733. package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
  734. package/dist/semantics/normalize/structural-layout-type.js +1468 -0
  735. package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
  736. package/dist/semantics/normalize/structural-leaves.js +125 -0
  737. package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
  738. package/dist/semantics/normalize/structural-local-union.js +133 -0
  739. package/dist/semantics/normalize/structural-members.d.ts +26 -0
  740. package/dist/semantics/normalize/structural-members.js +84 -0
  741. package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
  742. package/dist/semantics/normalize/structural-mutable-method.js +109 -0
  743. package/dist/semantics/normalize/structural-parts.d.ts +131 -0
  744. package/dist/semantics/normalize/structural-parts.js +737 -0
  745. package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
  746. package/dist/semantics/normalize/structural-receiver.js +551 -0
  747. package/dist/semantics/normalize/structural-rules.d.ts +112 -0
  748. package/dist/semantics/normalize/structural-rules.js +93 -0
  749. package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
  750. package/dist/semantics/normalize/structural-self-reference.js +494 -0
  751. package/dist/semantics/normalize/structural.d.ts +202 -0
  752. package/dist/semantics/normalize/structural.js +4218 -0
  753. package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
  754. package/dist/semantics/normalize/unreduced-type-form.js +53 -0
  755. package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
  756. package/dist/semantics/normalize/unresolvable-names.js +140 -0
  757. package/dist/semantics/package-sources.d.ts +16 -0
  758. package/dist/semantics/package-sources.js +365 -0
  759. package/dist/semantics/program.d.ts +151 -0
  760. package/dist/semantics/program.js +667 -0
  761. package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
  762. package/dist/semantics/prototype-install-source-transform.js +341 -0
  763. package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
  764. package/dist/semantics/prototype-object-class-source-transform.js +525 -0
  765. package/dist/semantics/prototype-reparenting.d.ts +50 -0
  766. package/dist/semantics/prototype-reparenting.js +317 -0
  767. package/dist/semantics/stable-checker.d.ts +10 -0
  768. package/dist/semantics/stable-checker.js +148 -0
  769. package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
  770. package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
  771. package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
  772. package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
  773. package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
  774. package/dist/semantics/this-constructor-source-transform.js +122 -0
  775. package/dist/semantics/uninstantiable-classes.d.ts +22 -0
  776. package/dist/semantics/uninstantiable-classes.js +75 -0
  777. package/dist/targets/cpp/balanced-units.d.ts +3 -0
  778. package/dist/targets/cpp/balanced-units.js +58 -0
  779. package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
  780. package/dist/targets/cpp/borrowed-call-entry.js +68 -0
  781. package/dist/targets/cpp/captures.d.ts +68 -0
  782. package/dist/targets/cpp/captures.js +269 -0
  783. package/dist/targets/cpp/class-layout.d.ts +313 -0
  784. package/dist/targets/cpp/class-layout.js +483 -0
  785. package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
  786. package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
  787. package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
  788. package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
  789. package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
  790. package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
  791. package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
  792. package/dist/targets/cpp/class-ref-transport.js +32 -0
  793. package/dist/targets/cpp/conversions.d.ts +3 -0
  794. package/dist/targets/cpp/conversions.js +2027 -0
  795. package/dist/targets/cpp/deferral-safety.d.ts +82 -0
  796. package/dist/targets/cpp/deferral-safety.js +86 -0
  797. package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
  798. package/dist/targets/cpp/direct-call-receivers.js +79 -0
  799. package/dist/targets/cpp/document.d.ts +74 -0
  800. package/dist/targets/cpp/document.js +106 -0
  801. package/dist/targets/cpp/emit-allocation.d.ts +60 -0
  802. package/dist/targets/cpp/emit-allocation.js +573 -0
  803. package/dist/targets/cpp/emit-arrays.d.ts +119 -0
  804. package/dist/targets/cpp/emit-arrays.js +1047 -0
  805. package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
  806. package/dist/targets/cpp/emit-binding-reference.js +120 -0
  807. package/dist/targets/cpp/emit-bindings.d.ts +158 -0
  808. package/dist/targets/cpp/emit-bindings.js +769 -0
  809. package/dist/targets/cpp/emit-buffers.d.ts +156 -0
  810. package/dist/targets/cpp/emit-buffers.js +573 -0
  811. package/dist/targets/cpp/emit-callable.d.ts +230 -0
  812. package/dist/targets/cpp/emit-callable.js +2154 -0
  813. package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
  814. package/dist/targets/cpp/emit-carrier-members.js +1224 -0
  815. package/dist/targets/cpp/emit-coercion.d.ts +26 -0
  816. package/dist/targets/cpp/emit-coercion.js +39 -0
  817. package/dist/targets/cpp/emit-context.d.ts +1882 -0
  818. package/dist/targets/cpp/emit-context.js +904 -0
  819. package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
  820. package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
  821. package/dist/targets/cpp/emit-equality.d.ts +39 -0
  822. package/dist/targets/cpp/emit-equality.js +472 -0
  823. package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
  824. package/dist/targets/cpp/emit-exceptions.js +513 -0
  825. package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
  826. package/dist/targets/cpp/emit-field-owner.js +27 -0
  827. package/dist/targets/cpp/emit-in.d.ts +31 -0
  828. package/dist/targets/cpp/emit-in.js +426 -0
  829. package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
  830. package/dist/targets/cpp/emit-instanceof.js +601 -0
  831. package/dist/targets/cpp/emit-integers.d.ts +68 -0
  832. package/dist/targets/cpp/emit-integers.js +184 -0
  833. package/dist/targets/cpp/emit-iterator.d.ts +100 -0
  834. package/dist/targets/cpp/emit-iterator.js +1137 -0
  835. package/dist/targets/cpp/emit-json.d.ts +73 -0
  836. package/dist/targets/cpp/emit-json.js +823 -0
  837. package/dist/targets/cpp/emit-jsx.d.ts +74 -0
  838. package/dist/targets/cpp/emit-jsx.js +806 -0
  839. package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
  840. package/dist/targets/cpp/emit-mixed-binary.js +60 -0
  841. package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
  842. package/dist/targets/cpp/emit-namespaces.js +133 -0
  843. package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
  844. package/dist/targets/cpp/emit-narrowing.js +3967 -0
  845. package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
  846. package/dist/targets/cpp/emit-native-equality.js +14 -0
  847. package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
  848. package/dist/targets/cpp/emit-native-selection.js +37 -0
  849. package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
  850. package/dist/targets/cpp/emit-object-tag.js +108 -0
  851. package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
  852. package/dist/targets/cpp/emit-owned-record.js +15 -0
  853. package/dist/targets/cpp/emit-presence.d.ts +78 -0
  854. package/dist/targets/cpp/emit-presence.js +376 -0
  855. package/dist/targets/cpp/emit-properties.d.ts +105 -0
  856. package/dist/targets/cpp/emit-properties.js +1640 -0
  857. package/dist/targets/cpp/emit-record-view.d.ts +20 -0
  858. package/dist/targets/cpp/emit-record-view.js +354 -0
  859. package/dist/targets/cpp/emit-return.d.ts +5 -0
  860. package/dist/targets/cpp/emit-return.js +237 -0
  861. package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
  862. package/dist/targets/cpp/emit-sum-widening.js +69 -0
  863. package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
  864. package/dist/targets/cpp/emit-tonumber.js +177 -0
  865. package/dist/targets/cpp/emit-tostring.d.ts +92 -0
  866. package/dist/targets/cpp/emit-tostring.js +556 -0
  867. package/dist/targets/cpp/emit-typeof.d.ts +49 -0
  868. package/dist/targets/cpp/emit-typeof.js +317 -0
  869. package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
  870. package/dist/targets/cpp/emit-union-properties.js +1281 -0
  871. package/dist/targets/cpp/emit.d.ts +45 -0
  872. package/dist/targets/cpp/emit.js +2225 -0
  873. package/dist/targets/cpp/error-types.d.ts +4 -0
  874. package/dist/targets/cpp/error-types.js +11 -0
  875. package/dist/targets/cpp/function-source-reads.d.ts +72 -0
  876. package/dist/targets/cpp/function-source-reads.js +148 -0
  877. package/dist/targets/cpp/host/atomics.d.ts +25 -0
  878. package/dist/targets/cpp/host/atomics.js +63 -0
  879. package/dist/targets/cpp/host/core-globals.d.ts +108 -0
  880. package/dist/targets/cpp/host/core-globals.js +158 -0
  881. package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
  882. package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
  883. package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
  884. package/dist/targets/cpp/host/emit-host-arity.js +232 -0
  885. package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
  886. package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
  887. package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
  888. package/dist/targets/cpp/host/emit-host-object.js +2206 -0
  889. package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
  890. package/dist/targets/cpp/host/emit-host-properties.js +533 -0
  891. package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
  892. package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
  893. package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
  894. package/dist/targets/cpp/host/emit-host-value.js +392 -0
  895. package/dist/targets/cpp/host/host-members.d.ts +505 -0
  896. package/dist/targets/cpp/host/host-members.js +819 -0
  897. package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
  898. package/dist/targets/cpp/host/host-method-aliases.js +76 -0
  899. package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
  900. package/dist/targets/cpp/host/native-protocols.js +183 -0
  901. package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
  902. package/dist/targets/cpp/host/object-protocol.js +671 -0
  903. package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
  904. package/dist/targets/cpp/host-namespace-reads.js +113 -0
  905. package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
  906. package/dist/targets/cpp/manifest/capabilities.js +1484 -0
  907. package/dist/targets/cpp/manifest.d.ts +23 -0
  908. package/dist/targets/cpp/manifest.js +113 -0
  909. package/dist/targets/cpp/native-error-base.d.ts +38 -0
  910. package/dist/targets/cpp/native-error-base.js +74 -0
  911. package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
  912. package/dist/targets/cpp/native-narrowing-transport.js +151 -0
  913. package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
  914. package/dist/targets/cpp/native-selection-helpers.js +46 -0
  915. package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
  916. package/dist/targets/cpp/native-symbol-keys.js +34 -0
  917. package/dist/targets/cpp/ownership.d.ts +43 -0
  918. package/dist/targets/cpp/ownership.js +38 -0
  919. package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
  920. package/dist/targets/cpp/owning-conversion-input.js +12 -0
  921. package/dist/targets/cpp/property-read-claims.d.ts +62 -0
  922. package/dist/targets/cpp/property-read-claims.js +23 -0
  923. package/dist/targets/cpp/property-store-claims.d.ts +62 -0
  924. package/dist/targets/cpp/property-store-claims.js +26 -0
  925. package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
  926. package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
  927. package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
  928. package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
  929. package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
  930. package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
  931. package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
  932. package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
  933. package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
  934. package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
  935. package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
  936. package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
  937. package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
  938. package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
  939. package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
  940. package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
  941. package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
  942. package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
  943. package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
  944. package/dist/targets/cpp/reactive-dependencies.js +432 -0
  945. package/dist/targets/cpp/reactive-origins.d.ts +44 -0
  946. package/dist/targets/cpp/reactive-origins.js +82 -0
  947. package/dist/targets/cpp/records.d.ts +277 -0
  948. package/dist/targets/cpp/records.js +2427 -0
  949. package/dist/targets/cpp/recursive-containers.d.ts +43 -0
  950. package/dist/targets/cpp/recursive-containers.js +144 -0
  951. package/dist/targets/cpp/regexp-types.d.ts +56 -0
  952. package/dist/targets/cpp/regexp-types.js +59 -0
  953. package/dist/targets/cpp/substrate.d.ts +125 -0
  954. package/dist/targets/cpp/substrate.js +12 -0
  955. package/dist/targets/cpp/translation-unit.d.ts +219 -0
  956. package/dist/targets/cpp/translation-unit.js +2063 -0
  957. package/dist/targets/cpp/types.d.ts +280 -0
  958. package/dist/targets/cpp/types.js +1135 -0
  959. package/dist/targets/cpp/virtual-methods.d.ts +95 -0
  960. package/dist/targets/cpp/virtual-methods.js +264 -0
  961. package/package.json +95 -0
  962. package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
  963. package/src/targets/cpp/runtime/gea_eval.h +1376 -0
  964. package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
  965. package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
  966. package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
@@ -0,0 +1,601 @@
1
+ import { classViewCarrierKinds, typedArrayConstructorDomains } from '../../projection/instance-test.js';
2
+ import { representationKey } from '../../representation/model.js';
3
+ import { createCppEmitBlockedError, operandText } from './emit-context.js';
4
+ import { cppClassName, cppScalarType } from './types.js';
5
+ import { cppErrorNativeType, errorConstructorNames, isNativeError } from './error-types.js';
6
+ import { cppRegExpNativeTypes } from './regexp-types.js';
7
+ /**
8
+ * `v instanceof C` -- ECMA-262 13.10.2, for the one right-hand side this
9
+ * backend has a real `[[HasInstance]]` for.
10
+ *
11
+ * The general operator is a prototype walk (7.3.22 OrdinaryHasInstance), and
12
+ * this compiler's objects have no prototype chain: a record is a C++ struct
13
+ * and a class instance is a C++ object, and neither carries a link to the
14
+ * constructor that built it. So the general answer is not rendered, and this
15
+ * refuses by name rather than approximating one -- a test that compared
16
+ * payload types directly would answer `false` for `new RangeError(m)
17
+ * instanceof Error`, which the language answers `true`, and a wrong answer
18
+ * wearing a plausible shape is the one outcome worth refusing for.
19
+ *
20
+ * The ERROR family is different, and exactly so. Every error a compiled
21
+ * program can hold was minted by `gea::host::<X>Constructor::create`, which
22
+ * records the record struct it minted under its own constructor's name and
23
+ * under every name that constructor inherits (`detail::registerErrorRecordType`,
24
+ * gea_runtime.h) -- 20.5.6.3's prototype chain, stated once at the one place
25
+ * that knows both halves. `gea::host::instanceOfError` reads it back through
26
+ * the box's own payload type, so the answer is the language's for every value
27
+ * this runtime can produce.
28
+ */
29
+ /** Native object families whose identity survives an explicitly dynamic boundary. */
30
+ const dynamicNativeInstanceTests = new Map([
31
+ ['MapConstructor', 'gea::host::instanceOfMap'],
32
+ ['DateConstructor', 'gea::host::instanceOfDate'],
33
+ ['RegExpConstructor', 'gea::host::instanceOfRegExp'],
34
+ ['ArrayBufferConstructor', 'gea::host::instanceOfArrayBuffer']
35
+ ]);
36
+ /** A carrier that can never hold an object and therefore always fails OrdinaryHasInstance. */
37
+ const definitelyPrimitive = (representation) => representation.kind === 'scalar' ||
38
+ representation.kind === 'string' ||
39
+ representation.kind === 'symbol' ||
40
+ representation.kind === 'null' ||
41
+ representation.kind === 'undefined';
42
+ /** Render the hierarchy census's recipe without rediscovering membership. */
43
+ const classInstanceTestText = (test, text) => {
44
+ switch (test.kind) {
45
+ case 'constant':
46
+ return `((void)(${text}), ${test.value ? 'true' : 'false'})`;
47
+ case 'throws-non-object':
48
+ return `(gea::host::throwInstanceofNonObject("${test.target}"), false)`;
49
+ case 'present':
50
+ return `static_cast<bool>(${text})`;
51
+ case 'boxed-typed-array':
52
+ return `gea::host::instanceOfTypedArray<${cppScalarType(test.domain)}>(${text})`;
53
+ case 'class-family':
54
+ if (test.members.length === 0)
55
+ return `((void)(${text}), false)`;
56
+ return `gea::host::${test.boxed ? 'instanceOfClassFamily' : 'instanceOfClassFamilyRef'}<${test.members.map(cppClassName).join(', ')}>(${text})`;
57
+ case 'view-origin':
58
+ if (test.members.length === 0)
59
+ return `((void)(${text}), false)`;
60
+ return `gea::host::instanceOfClassFamily<${test.members.map(cppClassName).join(', ')}>(gea::record::viewOrigin(${text}))`;
61
+ case 'optional':
62
+ return `((${text}).has_value() ? (${classInstanceTestText(test.payload, `(*${text})`)}) : false)`;
63
+ case 'union': {
64
+ const clauses = test.arms.map(({ index, test: arm }) => {
65
+ const nested = classInstanceTestText(arm, `${text}.get<${index}>()`);
66
+ return arm.kind === 'class-family' && arm.boxed
67
+ ? `(${text}.is<${index}>() && ${nested})`
68
+ : `(${text}.is<${index}>() && (${nested}))`;
69
+ });
70
+ if (clauses.length === 0)
71
+ return `((void)(${text}), false)`;
72
+ return clauses.length === 1 ? clauses[0] : `(${clauses.join(' || ')})`;
73
+ }
74
+ }
75
+ };
76
+ /**
77
+ * `value instanceof Promise` for a left operand the checker joined into a
78
+ * `tagged-union`, the exact counterpart of the instance-test census
79
+ * for the one host protocol this backend's own `Promise<T>` carrier answers
80
+ * for.
81
+ *
82
+ * Like that function, no runtime read is needed for a `promise` arm: which
83
+ * arms could ever BE a Promise is the checker's own declared member list, so
84
+ * the answer is the union's own discriminant test. A `dynamic` arm is refused
85
+ * rather than approximated -- see `instanceofText`'s own `dynamic` refusal
86
+ * below for why a boxed value cannot answer this either (no boxing path
87
+ * exists for a `promise` carrier at all: `emit-narrowing.ts`'s `dynamicTagFor`
88
+ * has no case for it, so a box reaching this test was never produced FROM a
89
+ * promise, but this file does not lean on that absence to fabricate `false`
90
+ * for the arm -- it refuses by name, the same posture every other
91
+ * unanswerable shape here takes).
92
+ */
93
+ const instanceofTaggedUnionPromiseText = (ctx, left, union) => {
94
+ const text = operandText(ctx, left);
95
+ const clauses = [];
96
+ for (const [index, arm] of union.arms.entries()) {
97
+ if (arm.value.kind === 'promise') {
98
+ clauses.push(`${text}.is<${index}>()`);
99
+ }
100
+ else if (arm.value.kind === 'dynamic') {
101
+ throw createCppEmitBlockedError('runtime-helper:computation:instanceof:dynamic:native-handle(PromiseConstructor)', '"instanceof" against "Promise" over a boxed union arm needs a runtime read this backend does not perform for a Promise payload');
102
+ }
103
+ // Every other arm kind is never how this backend carries a Promise
104
+ // (`types.ts`'s `promise -> gea::Promise<T>` is the only spelling), so it
105
+ // contributes nothing.
106
+ }
107
+ if (clauses.length === 0)
108
+ return `((void)(${text}), false)`;
109
+ return clauses.length === 1 ? clauses[0] : `(${clauses.join(' || ')})`;
110
+ };
111
+ /**
112
+ * `value instanceof Promise` for a left operand the checker settled to an
113
+ * `optional`.
114
+ *
115
+ * The same question `instanceofTaggedUnionPromiseText` above answers, asked of
116
+ * the other spelling of one absence: `T | undefined` and `T | void` are one
117
+ * carrier (`representation/union.ts`'s `absenceOf`), and this compiler names
118
+ * it `optional(T, undefined)`. hono's `defineWebSocketHelper` and
119
+ * node-compat's `whatwg-streams.ts` both reach it -- `const result =
120
+ * write(chunk, ...)` typed `void | Promise<void>`, then `result instanceof
121
+ * Promise`.
122
+ *
123
+ * Written as its own renderer rather than folded into the tagged-union one:
124
+ * that function's text is what every program carrying a union arm already
125
+ * emits, and a shared recursion would re-spell it. A `dynamic` payload is
126
+ * refused by name for exactly the reason stated there.
127
+ */
128
+ const instanceofOptionalPromiseText = (ctx, left, optional) => {
129
+ const test = (carrier, value) => {
130
+ if (carrier.kind === 'promise')
131
+ return `((void)(${value}), true)`;
132
+ if (carrier.kind === 'dynamic')
133
+ throw createCppEmitBlockedError('runtime-helper:computation:instanceof:dynamic:native-handle(PromiseConstructor)', '"instanceof" against "Promise" over a boxed optional payload needs a runtime read this backend does not perform for a Promise payload');
134
+ if (carrier.kind === 'optional')
135
+ return `((${value}).has_value() && (${test(carrier.payload, `(*${value})`)}))`;
136
+ if (carrier.kind === 'tagged-union') {
137
+ const clauses = [];
138
+ for (const [index, arm] of carrier.arms.entries()) {
139
+ if (arm.value.kind === 'promise')
140
+ clauses.push(`${value}.is<${index}>()`);
141
+ else if (arm.value.kind === 'dynamic')
142
+ test(arm.value, `${value}.get<${index}>()`);
143
+ }
144
+ return clauses.length === 0 ? `((void)(${value}), false)` : clauses.length === 1 ? clauses[0] : `(${clauses.join(' || ')})`;
145
+ }
146
+ // Every other carrier is never how this backend holds a Promise
147
+ // (`types.ts`'s `promise -> gea::Promise<T>` is the only spelling).
148
+ return `((void)(${value}), false)`;
149
+ };
150
+ return test(optional, operandText(ctx, left));
151
+ };
152
+ /**
153
+ * `value instanceof Map` for a flow-carrier union containing a native Map.
154
+ *
155
+ * A `Map<K,V>` has one physical spelling in this backend: a
156
+ * `keyed-collection` whose family is `map`. The union discriminant therefore
157
+ * answers concrete arms exactly. A genuinely dynamic arm uses the same
158
+ * payload identity test as the standalone dynamic case; every other carrier
159
+ * is a different allocation kind and contributes false.
160
+ */
161
+ const instanceofTaggedUnionMapText = (ctx, left, union) => {
162
+ const text = operandText(ctx, left);
163
+ const test = (representation, value) => {
164
+ if (representation.kind === 'keyed-collection') {
165
+ return `((void)(${value}), ${representation.family === 'map' ? 'true' : 'false'})`;
166
+ }
167
+ if (representation.kind === 'dynamic')
168
+ return `gea::host::instanceOfMap(${value})`;
169
+ if (representation.kind === 'optional') {
170
+ return `((${value}).has_value() && (${test(representation.payload, `(*${value})`)}))`;
171
+ }
172
+ if (representation.kind === 'tagged-union') {
173
+ const nested = [];
174
+ for (const [index, arm] of representation.arms.entries()) {
175
+ const clause = test(arm.value, `${value}.get<${index}>()`);
176
+ nested.push(`(${value}.is<${index}>() && (${clause}))`);
177
+ }
178
+ return nested.length === 0 ? `((void)(${value}), false)` : `(${nested.join(' || ')})`;
179
+ }
180
+ return `((void)(${value}), false)`;
181
+ };
182
+ const clauses = [];
183
+ for (const [index, arm] of union.arms.entries()) {
184
+ const armText = `${text}.get<${index}>()`;
185
+ clauses.push(`(${text}.is<${index}>() && (${test(arm.value, armText)}))`);
186
+ }
187
+ if (clauses.length === 0)
188
+ return `((void)(${text}), false)`;
189
+ return clauses.length === 1 ? clauses[0] : `(${clauses.join(' || ')})`;
190
+ };
191
+ /**
192
+ * `v instanceof C` for a native protocol whose identity this backend really
193
+ * can settle, over a left operand the checker joined into an `optional` or a
194
+ * `tagged-union` -- `Buffer | Error`, `string | RegExp`, `BodyInit`.
195
+ *
196
+ * It is the generalization of `instanceofTaggedUnionPromiseText` and
197
+ * `instanceofTaggedUnionMapText` above, written once instead of a third time,
198
+ * and it exists because those two already established that a composite carrier
199
+ * is not an obstacle to answering `instanceof`: a sum's discriminant IS the
200
+ * question for every arm whose carrier is a settled physical allocation, and
201
+ * only the arms that are not need a runtime read. The two older functions are
202
+ * left where they are rather than folded in, because folding them would move
203
+ * the emitted text of programs this change is not about.
204
+ *
205
+ * Which protocols: the seven error constructors, whose `gea::runtime::Error`
206
+ * handle answers its own inheritance chain through `instanceOf` (see this
207
+ * file's header), plus `RegExp` and `ArrayBuffer`, each of which has exactly
208
+ * one physical carrier here, so an arm carrying it IS one and an arm carrying
209
+ * anything else is not. `Map` and `Promise` are deliberately absent: their own
210
+ * composite renderers above already claim those keys, and routing them here
211
+ * would move their output.
212
+ */
213
+ const compositeNativeInstanceProtocols = new Set([
214
+ ...errorConstructorNames.keys(),
215
+ 'RegExpConstructor',
216
+ 'ArrayBufferConstructor'
217
+ ]);
218
+ /** A settled answer that still evaluates the operand, the way every other constant verdict in this file does. */
219
+ const settledInstanceText = (value, answer) => `((void)(${value}), ${answer ? 'true' : 'false'})`;
220
+ /**
221
+ * Whether any class in this one's base chain links a NATIVE base.
222
+ *
223
+ * The intrinsic `Error` family is the only native base this compiler links
224
+ * (`emit-callable.ts` refuses every other `nativeBase.instance.native`), so a
225
+ * class with none anywhere in its chain is a plain C++ object of its own
226
+ * layout and cannot BE a native allocation of any kind -- which is what lets
227
+ * an arm carrying it settle `false` without a read. A class that DOES link one
228
+ * is refused rather than guessed at: `class NativeFailure extends Error` is
229
+ * real, supported code (`test/runtime/native-error-descriptor-inheritance.ts`),
230
+ * and answering `false` for `new NativeFailure() instanceof Error` would be
231
+ * exactly the plausibly-shaped wrong answer this file exists to refuse.
232
+ */
233
+ const extendsNativeClass = (ctx, declaration) => {
234
+ let layout = ctx.classes.get(declaration);
235
+ const seen = new Set();
236
+ while (layout !== undefined && !seen.has(layout.declaration)) {
237
+ if (layout.nativeBase !== null)
238
+ return true;
239
+ seen.add(layout.declaration);
240
+ layout = layout.base === null ? undefined : ctx.classes.get(layout.base);
241
+ }
242
+ return false;
243
+ };
244
+ /**
245
+ * The carriers that are a DIFFERENT physical allocation than any native object
246
+ * tested for here, so `instanceof` is `false` for them with nothing read.
247
+ *
248
+ * Spelled as an explicit list rather than a default arm for the same reason
249
+ * `instanceofLeftKinds` below is: a carrier kind added to the representation
250
+ * model must not silently acquire a verdict here. Anything absent refuses by
251
+ * name, which is the posture every unanswerable shape in this file takes.
252
+ */
253
+ const settledNonNativeCarrier = (ctx, carrier) => {
254
+ switch (carrier.kind) {
255
+ case 'scalar':
256
+ case 'string':
257
+ case 'symbol':
258
+ case 'null':
259
+ case 'undefined':
260
+ case 'void':
261
+ case 'record':
262
+ case 'record-with-index':
263
+ case 'array-object':
264
+ case 'typed-array':
265
+ case 'dense-buffer':
266
+ case 'native-sequence':
267
+ case 'keyed-collection':
268
+ case 'dictionary':
269
+ case 'iterator':
270
+ case 'promise':
271
+ case 'data-view':
272
+ case 'array-buffer':
273
+ case 'shared-array-buffer':
274
+ return true;
275
+ case 'class-ref':
276
+ return !extendsNativeClass(ctx, carrier.declaration);
277
+ default:
278
+ return false;
279
+ }
280
+ };
281
+ /** One arm/payload of the walk above: a carrier with no discriminant left to read. */
282
+ const nativeInstanceLeafText = (ctx, protocol, carrier, value) => {
283
+ const errorName = errorConstructorNames.get(protocol);
284
+ if (carrier.kind === 'dynamic') {
285
+ const nativeTest = dynamicNativeInstanceTests.get(protocol);
286
+ if (nativeTest !== undefined)
287
+ return `${nativeTest}(${value})`;
288
+ if (errorName !== undefined)
289
+ return `gea::host::instanceOfError(${value}, "${errorName}")`;
290
+ }
291
+ else if (errorName !== undefined) {
292
+ if (isNativeError(carrier))
293
+ return `(${value})->instanceOf("${errorName}")`;
294
+ // A `gea::runtime::Error` held some other way than by a counted handle has
295
+ // no `instanceOf` to call through, and `false` would be a wrong answer for
296
+ // the one carrier that certainly IS an error. Refuse, so the defect is
297
+ // named at the carrier rather than folded into a verdict. Every OTHER
298
+ // native record is one C++ layout and not that one.
299
+ const isOtherNativeRecord = carrier.kind === 'native-record-ref' && carrier.native !== cppErrorNativeType;
300
+ if (isOtherNativeRecord || settledNonNativeCarrier(ctx, carrier))
301
+ return settledInstanceText(value, false);
302
+ }
303
+ else if (protocol === 'RegExpConstructor' || protocol === 'ArrayBufferConstructor') {
304
+ const matches = protocol === 'RegExpConstructor'
305
+ ? carrier.kind === 'native-record-ref' && carrier.native === cppRegExpNativeTypes.pattern
306
+ : carrier.kind === 'array-buffer';
307
+ // A `native-record-ref` of a different native layout IS that layout and no
308
+ // other -- one C++ type per native record -- so it settles as flatly as a
309
+ // scalar does.
310
+ if (matches || carrier.kind === 'native-record-ref' || settledNonNativeCarrier(ctx, carrier)) {
311
+ return settledInstanceText(value, matches);
312
+ }
313
+ }
314
+ throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${carrier.kind}:native-handle(${protocol})`, `"instanceof" against "${protocol}" over a "${representationKey(carrier)}" arm has no identity this backend can read`);
315
+ };
316
+ const compositeNativeInstanceText = (ctx, left, protocol) => {
317
+ const render = (carrier, value) => {
318
+ if (carrier.kind === 'optional')
319
+ return `((${value}).has_value() ? (${render(carrier.payload, `(*${value})`)}) : false)`;
320
+ if (carrier.kind === 'tagged-union') {
321
+ const clauses = carrier.arms.map((arm, index) => `(${value}.is<${index}>() && (${render(arm.value, `${value}.get<${index}>()`)}))`);
322
+ return clauses.length === 0 ? settledInstanceText(value, false) : `(${clauses.join(' || ')})`;
323
+ }
324
+ return nativeInstanceLeafText(ctx, protocol, carrier, value);
325
+ };
326
+ return render(left.representation, operandText(ctx, left));
327
+ };
328
+ /**
329
+ * The carrier kinds a left operand can arrive in, for the `undefined`
330
+ * right-hand side below.
331
+ *
332
+ * The obligation key names BOTH sides (`preflight/instanceof-key.ts`), and this
333
+ * answer does not depend on the left one at all -- 13.10.2 throws before it
334
+ * looks at `V`. So the claim has to be made for every left kind rather than
335
+ * once, and the list is spelled here rather than derived from
336
+ * `Representation`'s own union because a manifest row must claim only what this
337
+ * file renders: adding a carrier kind to the model should not silently widen a
338
+ * claim.
339
+ */
340
+ export const cppInstanceofLeftKinds = [
341
+ 'absent',
342
+ 'constant',
343
+ 'unplanned',
344
+ 'dynamic',
345
+ 'record',
346
+ 'class-ref',
347
+ 'native-record-ref',
348
+ 'array-object',
349
+ 'string',
350
+ 'scalar',
351
+ 'optional',
352
+ 'tagged-union',
353
+ 'undefined',
354
+ 'null',
355
+ 'typed-array',
356
+ 'keyed-collection',
357
+ 'dictionary',
358
+ 'iterator',
359
+ 'promise',
360
+ 'symbol'
361
+ ];
362
+ /**
363
+ * The left carrier kinds `constructorFamilyInstanceofText` actually renders a
364
+ * verdict for against a program-class (`constructor-family`) right-hand
365
+ * side. `dynamic` is included since `instanceOfClassFamilyText` above --
366
+ * `Value::classIdentity()` answers the family test exactly for a boxed
367
+ * operand, upcast or not (see that function's own doc comment).
368
+ */
369
+ const constructorFamilyLeftKinds = [
370
+ 'class-ref',
371
+ 'dynamic',
372
+ 'optional',
373
+ 'tagged-union',
374
+ // A structural view the class census settled (`projection/instance-test.ts`'s `viewed`).
375
+ ...classViewCarrierKinds
376
+ ];
377
+ /** Every `computation:instanceof:*` key this file renders -- what `capabilities.ts` claims, derived from the tables above so the two cannot drift. */
378
+ export const cppInstanceofHelperKeys = new Set([
379
+ ...[...errorConstructorNames.keys()].map((protocol) => `computation:instanceof:dynamic:native-handle(${protocol})`),
380
+ ...[...errorConstructorNames.keys()].map((protocol) => `computation:instanceof:native-record-ref:native-handle(${protocol})`),
381
+ ...cppInstanceofLeftKinds.map((left) => `computation:instanceof:${left}:undefined`),
382
+ ...[...dynamicNativeInstanceTests.keys()].map((protocol) => `computation:instanceof:dynamic:native-handle(${protocol})`),
383
+ ...[...dynamicNativeInstanceTests.keys()].map((protocol) => `computation:instanceof:dictionary:native-handle(${protocol})`),
384
+ 'computation:instanceof:scalar:native-handle(NumberConstructor)',
385
+ 'computation:instanceof:tagged-union(primitive-only):native-handle(NumberConstructor)',
386
+ // The native element domain is also sufficient when narrowing has already
387
+ // removed the union: it is the same identity used for each union arm.
388
+ ...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:typed-array:native-handle(${protocol})`),
389
+ ...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:optional:native-handle(${protocol})`),
390
+ ...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:dynamic:native-handle(${protocol})`),
391
+ ...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:tagged-union:native-handle(${protocol})`),
392
+ ...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:dictionary:native-handle(${protocol})`),
393
+ // A `class-ref` left operand: the census's own plan answers it (`constant
394
+ // false`), because a program class's instance is a C++ object of that
395
+ // class's layout and the only native base this compiler ever links is the
396
+ // intrinsic Error family -- never a typed array. It was renderable all
397
+ // along and merely unclaimed, which is how `@hono/node-server`'s `body
398
+ // instanceof Uint8Array` over a narrowed `BodyInit` slot refused.
399
+ ...[...typedArrayConstructorDomains.keys()].map((protocol) => `computation:instanceof:class-ref:native-handle(${protocol})`),
400
+ // `compositeNativeInstanceText` above -- an `optional`/`tagged-union` left
401
+ // operand against a protocol whose identity is a physical carrier here.
402
+ ...[...compositeNativeInstanceProtocols].flatMap((protocol) => [
403
+ `computation:instanceof:optional:native-handle(${protocol})`,
404
+ `computation:instanceof:tagged-union:native-handle(${protocol})`
405
+ ]),
406
+ // `v instanceof <program class>` -- `constructorFamilyInstanceofText`'s own
407
+ // three renderable left shapes.
408
+ ...constructorFamilyLeftKinds.map((left) => `computation:instanceof:${left}:constructor-family`),
409
+ // `v instanceof Promise` / `v instanceof String` for a left operand the
410
+ // checker already settled to exactly `promise` -- `instanceofText`'s own
411
+ // `left.representation.kind === 'promise'` branch below, sound for ANY
412
+ // right-hand protocol (a Promise's identity can only ever be Promise's),
413
+ // claimed for the two protocols this program actually exercises rather
414
+ // than every authenticated protocol, matching this file's own
415
+ // one-row-per-demonstrated-need practice elsewhere.
416
+ 'computation:instanceof:promise:native-handle(PromiseConstructor)',
417
+ 'computation:instanceof:promise:native-handle(StringConstructor)',
418
+ // `v instanceof Promise` for a left operand joined into a `tagged-union` --
419
+ // `instanceofTaggedUnionPromiseText` above.
420
+ 'computation:instanceof:tagged-union:native-handle(PromiseConstructor)',
421
+ // ...and for one joined into an `optional`, the other spelling of the same
422
+ // absence -- `instanceofOptionalPromiseText` above.
423
+ 'computation:instanceof:optional:native-handle(PromiseConstructor)',
424
+ 'computation:instanceof:tagged-union(map-testable):native-handle(MapConstructor)',
425
+ // `v instanceof Promise` for a BOXED left operand -- the branch above that
426
+ // reads `gea::host::instanceOfPromise`'s family table.
427
+ 'computation:instanceof:dynamic:native-handle(PromiseConstructor)',
428
+ // `v instanceof C` where `C` is a plain JS function boxed `dynamic` under
429
+ // `--dynamic-fallback` (its own `.prototype` is read or written) -- the
430
+ // general prototype WALK `gea::host::instanceOfDynamicConstructor` renders,
431
+ // over a left operand this same census also boxed (see that function's own
432
+ // doc comment for why the left operand can only ever be `dynamic` too).
433
+ 'computation:instanceof:dynamic:dynamic'
434
+ ]);
435
+ /**
436
+ * `v instanceof <host namespace root>` -- the host's own `[[HasInstance]]`.
437
+ *
438
+ * A namespace root is a PATH, not a value, and the object behind it carries an
439
+ * empty facade struct with no prototype chain 13.10.2 could walk. Node's
440
+ * `Buffer` is exactly that shape and `x instanceof Buffer` is exactly the
441
+ * question `@hono/node-server` asks of it. The host is the one authority that
442
+ * can answer: `gea::node::buffer::isBuffer` reads the opaque brand a Buffer
443
+ * factory attached to the byte view, so a `Uint8Array` no Buffer ever produced
444
+ * answers `false` -- which is the language's answer and not a structural guess
445
+ * a shared byte-view carrier could ever have made.
446
+ *
447
+ * The predicate is applied per LEAF, never to a composite: an `Optional<T>`
448
+ * or a `TaggedUnion<...>` is a different C++ type than anything the host
449
+ * declared an overload for, and handing one over would silently select a
450
+ * catch-all `false`. The presence and discriminant tests are this backend's own
451
+ * question anyway, exactly as they are for every other `instanceof` here.
452
+ */
453
+ const hostInstanceTestText = (ctx, left, spelling) => {
454
+ const render = (carrier, value) => {
455
+ if (carrier.kind === 'optional')
456
+ return `((${value}).has_value() ? ${spelling}(*${value}) : false)`;
457
+ if (carrier.kind === 'tagged-union') {
458
+ const clauses = carrier.arms.map((arm, index) => `(${value}.is<${index}>() && (${render(arm.value, `${value}.get<${index}>()`)}))`);
459
+ return clauses.length === 0 ? settledInstanceText(value, false) : `(${clauses.join(' || ')})`;
460
+ }
461
+ return `${spelling}(${value})`;
462
+ };
463
+ return render(left.representation, operandText(ctx, left));
464
+ };
465
+ export const instanceofText = (ctx, left, right, recipe) => {
466
+ const constructor = right.representation;
467
+ // A right-hand side that is not an Object is the one case the specification
468
+ // answers with no prototype chain at all: 13.10.2 step 3 throws a TypeError
469
+ // before `[[HasInstance]]` is consulted. It arises when a host has declared a
470
+ // global ABSENT and a program tests against it anyway. Rendering the throw is
471
+ // the language's own answer; rendering `false` would be a fabricated one, and
472
+ // refusing would reject a library whose guard already made the test dead.
473
+ // The instance-test census publishes the same answer for every non-Object
474
+ // carrier (`throws-non-object`), which is what reflection consumes.
475
+ if (recipe?.test.kind === 'throws-non-object')
476
+ return classInstanceTestText(recipe.test, operandText(ctx, left));
477
+ if (constructor.kind === 'undefined') {
478
+ return `(gea::host::throwInstanceofNonObject("undefined"), false)`;
479
+ }
480
+ // A `constructor-family` right-hand side names a PROGRAM class rather than
481
+ // a host protocol, and unlike the general prototype-walk case just above,
482
+ // the left operand's own carrier already answers this without one --
483
+ // `constructorFamilyInstanceofText`'s own doc comment states exactly how
484
+ // far that goes (declaration membership, no inheritance chain) and where it
485
+ // refuses instead (a boxed left operand).
486
+ if (constructor.kind === 'constructor-family') {
487
+ if (recipe === undefined)
488
+ throw createCppEmitBlockedError('runtime-helper:instanceof:missing-class-recipe', 'class membership was not published by the hierarchy census');
489
+ return classInstanceTestText(recipe.test, operandText(ctx, left));
490
+ }
491
+ // A BOXED right-hand side: a plain JS function whose own `.prototype` is
492
+ // read or written somewhere in the program, so `representation/derive.ts`
493
+ // (under `--dynamic-fallback`) answers its structural type `dynamic`
494
+ // instead of `function-and-constructor` -- there is no declaration here for
495
+ // `constructorFamilyInstanceofText`'s membership test to read, only a
496
+ // runtime value. `gea::host::instanceOfDynamicConstructor` performs the
497
+ // general prototype WALK 13.10.2 asks for, over the left operand's own
498
+ // chain (also boxed: a program's own class instance never derives
499
+ // `dynamic` on its own, so the only left operand that can reach a `dynamic`
500
+ // constructor is one this same census also marked `dynamic` -- its own
501
+ // construct signature's return type).
502
+ if (constructor.kind === 'dynamic') {
503
+ if (left.representation.kind !== 'dynamic') {
504
+ throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${left.representation.kind}:dynamic`, `"instanceof" against a boxed constructor function needs a boxed left operand too, and this one carries "${representationKey(left.representation)}"`);
505
+ }
506
+ return `gea::host::instanceOfDynamicConstructor(${operandText(ctx, left)}, ${operandText(ctx, right)})`;
507
+ }
508
+ if (constructor.kind === 'native-record-ref' && constructor.native !== null) {
509
+ const spelling = ctx.hosts.instanceTests.get(constructor.native);
510
+ if (spelling !== undefined)
511
+ return hostInstanceTestText(ctx, left, spelling);
512
+ }
513
+ if (constructor.kind !== 'native-handle') {
514
+ throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${left.representation.kind}:${representationKey(constructor)}`, `"instanceof" against a "${representationKey(constructor)}" right-hand side needs a prototype chain, which this backend does not model`);
515
+ }
516
+ if (left.representation.kind === 'dynamic') {
517
+ const nativeTest = dynamicNativeInstanceTests.get(constructor.protocol);
518
+ if (nativeTest !== undefined)
519
+ return `${nativeTest}(${operandText(ctx, left)})`;
520
+ }
521
+ // A native Dictionary is an ordinary object whose physical allocation is
522
+ // neither a Map exotic nor a Date/RegExp object. Its static carrier proves
523
+ // the result false; preserve evaluation of the left operand.
524
+ if (left.representation.kind === 'dictionary' && dynamicNativeInstanceTests.has(constructor.protocol)) {
525
+ return `((void)(${operandText(ctx, left)}), false)`;
526
+ }
527
+ // OrdinaryHasInstance returns false for a primitive. A scalar carrier is
528
+ // never a Number wrapper object, including when an erased `as unknown`
529
+ // assertion was used to write the test. Keep evaluation of the operand.
530
+ if (constructor.protocol === 'NumberConstructor' && left.representation.kind === 'scalar') {
531
+ return `((void)(${operandText(ctx, left)}), false)`;
532
+ }
533
+ if (constructor.protocol === 'NumberConstructor' &&
534
+ left.representation.kind === 'tagged-union' &&
535
+ left.representation.arms.every((arm) => definitelyPrimitive(arm.value))) {
536
+ return `((void)(${operandText(ctx, left)}), false)`;
537
+ }
538
+ // A `promise` left operand settles ANY native-handle right-hand side
539
+ // without reading anything: ECMA-262 27.2's Promise objects have exactly
540
+ // one exotic kind, so the checker having already proved this exact carrier
541
+ // IS the whole answer -- `true` for `PromiseConstructor` itself, `false`
542
+ // for every other protocol, the same posture the instance-test census
543
+ // takes for a typed-array arm that can never match a DIFFERENT element
544
+ // domain.
545
+ if (left.representation.kind === 'promise') {
546
+ return `((void)(${operandText(ctx, left)}), ${constructor.protocol === 'PromiseConstructor' ? 'true' : 'false'})`;
547
+ }
548
+ if (constructor.protocol === 'PromiseConstructor' && left.representation.kind === 'tagged-union') {
549
+ return instanceofTaggedUnionPromiseText(ctx, left, left.representation);
550
+ }
551
+ if (constructor.protocol === 'PromiseConstructor' && left.representation.kind === 'optional') {
552
+ return instanceofOptionalPromiseText(ctx, left, left.representation);
553
+ }
554
+ if (constructor.protocol === 'MapConstructor' && left.representation.kind === 'tagged-union') {
555
+ return instanceofTaggedUnionMapText(ctx, left, left.representation);
556
+ }
557
+ // A BOXED left operand, answered by the family table `Value::box` fills.
558
+ // Between the two shapes this file already renders: a promise needs a table
559
+ // like the error family, because `gea::Promise<V>` is a different C++ type
560
+ // for every `V` and no single `payloadType()` address identifies "a
561
+ // promise"; but it needs no inheritance reconciliation like the errors,
562
+ // because every promise is an instance of exactly one constructor
563
+ // (ECMA-262 27.2.5). Sound for any box -- a payload that is not a promise
564
+ // answers `false`, the same OrdinaryHasInstance step every other renderer
565
+ // here takes.
566
+ if (constructor.protocol === 'PromiseConstructor' && left.representation.kind === 'dynamic') {
567
+ return `gea::host::instanceOfPromise(${operandText(ctx, left)})`;
568
+ }
569
+ // A composite left operand against one of the protocols whose identity IS a
570
+ // physical carrier here -- the seven errors, `RegExp`, `ArrayBuffer`. It sits
571
+ // below the Map/Promise/typed-array branches on purpose: each of those has
572
+ // its own composite renderer already, and `compositeNativeInstanceProtocols`
573
+ // deliberately excludes them so this cannot take a program's output away
574
+ // from the renderer that already claims its key.
575
+ if ((left.representation.kind === 'optional' || left.representation.kind === 'tagged-union') &&
576
+ compositeNativeInstanceProtocols.has(constructor.protocol)) {
577
+ return compositeNativeInstanceText(ctx, left, constructor.protocol);
578
+ }
579
+ if (typedArrayConstructorDomains.has(constructor.protocol)) {
580
+ if (recipe === undefined)
581
+ throw createCppEmitBlockedError('runtime-helper:instanceof:missing-typed-array-recipe', 'typed array membership was not published by the instance-test census');
582
+ return classInstanceTestText(recipe.test, operandText(ctx, left));
583
+ }
584
+ const name = errorConstructorNames.get(constructor.protocol);
585
+ if (name === undefined) {
586
+ throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${left.representation.kind}:native-handle(${constructor.protocol})`, `"instanceof" against the host protocol "${constructor.protocol}" over a "${representationKey(left.representation)}" left operand has ` +
587
+ 'no [[HasInstance]] rendered here -- only the error constructors answer a boxed left operand, and Promise/TypedArray answer only the ' +
588
+ 'left shapes their own tables above cover');
589
+ }
590
+ if (isNativeError(left.representation))
591
+ return `(${operandText(ctx, left)})->instanceOf("${name}")`;
592
+ if (left.representation.kind !== 'dynamic') {
593
+ // A statically typed left operand is a question the checker already
594
+ // answered, and answering it again from a carrier would be a second
595
+ // authority over the same fact -- one that cannot see the narrowing the
596
+ // checker performed. Refused until the constant folding is written where
597
+ // the proof lives.
598
+ throw createCppEmitBlockedError(`runtime-helper:computation:instanceof:${left.representation.kind}:native-handle(${constructor.protocol})`, `"instanceof" over a "${representationKey(left.representation)}" left operand is settled by the checker, and this backend renders only the boxed test`);
599
+ }
600
+ return `gea::host::instanceOfError(${operandText(ctx, left)}, "${name}")`;
601
+ };