@scriptc/compiler 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +5 -18
  2. package/dist/backend/cycle-analysis.d.ts +21 -9
  3. package/dist/backend/cycle-analysis.js +139 -67
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-analysis.test.js +283 -3
  6. package/dist/backend/cycle-analysis.test.js.map +1 -1
  7. package/dist/backend/cycle-mutability.d.ts +39 -0
  8. package/dist/backend/cycle-mutability.js +205 -0
  9. package/dist/backend/cycle-mutability.js.map +1 -0
  10. package/dist/backend/link-plan-core.d.ts +2 -1
  11. package/dist/backend/link-plan-core.js +15 -3
  12. package/dist/backend/link-plan-core.js.map +1 -1
  13. package/dist/backend/link-plan.d.ts +2 -1
  14. package/dist/backend/link-plan.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +40 -0
  16. package/dist/backend/llvm/alloc.js +205 -0
  17. package/dist/backend/llvm/alloc.js.map +1 -0
  18. package/dist/backend/llvm/alloc.test.d.ts +1 -0
  19. package/dist/backend/llvm/alloc.test.js +102 -0
  20. package/dist/backend/llvm/alloc.test.js.map +1 -0
  21. package/dist/backend/llvm/call-lifetimes.d.ts +15 -3
  22. package/dist/backend/llvm/call-lifetimes.js +42 -18
  23. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  24. package/dist/backend/llvm/call-lifetimes.test.js +170 -0
  25. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  26. package/dist/backend/llvm/classes.d.ts +4 -1
  27. package/dist/backend/llvm/classes.js +35 -32
  28. package/dist/backend/llvm/classes.js.map +1 -1
  29. package/dist/backend/llvm/classes.test.js +36 -3
  30. package/dist/backend/llvm/classes.test.js.map +1 -1
  31. package/dist/backend/llvm/common.d.ts +13 -0
  32. package/dist/backend/llvm/common.js +30 -0
  33. package/dist/backend/llvm/common.js.map +1 -1
  34. package/dist/backend/llvm/constant-callbacks.d.ts +19 -3
  35. package/dist/backend/llvm/constant-callbacks.js +289 -52
  36. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  37. package/dist/backend/llvm/constant-callbacks.test.js +140 -3
  38. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  39. package/dist/backend/llvm/dense-array-access.d.ts +29 -0
  40. package/dist/backend/llvm/dense-array-access.js +335 -0
  41. package/dist/backend/llvm/dense-array-access.js.map +1 -0
  42. package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
  43. package/dist/backend/llvm/dense-array-access.test.js +149 -0
  44. package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
  45. package/dist/backend/llvm/dyn.d.ts +34 -0
  46. package/dist/backend/llvm/dyn.js +189 -1
  47. package/dist/backend/llvm/dyn.js.map +1 -1
  48. package/dist/backend/llvm/emitter.d.ts +124 -4
  49. package/dist/backend/llvm/emitter.js +623 -105
  50. package/dist/backend/llvm/emitter.js.map +1 -1
  51. package/dist/backend/llvm/emitter.test.js +68 -6
  52. package/dist/backend/llvm/emitter.test.js.map +1 -1
  53. package/dist/backend/llvm/expr-async.js +58 -4
  54. package/dist/backend/llvm/expr-async.js.map +1 -1
  55. package/dist/backend/llvm/expr-async.test.d.ts +1 -0
  56. package/dist/backend/llvm/expr-async.test.js +62 -0
  57. package/dist/backend/llvm/expr-async.test.js.map +1 -0
  58. package/dist/backend/llvm/expr-calls.js +64 -6
  59. package/dist/backend/llvm/expr-calls.js.map +1 -1
  60. package/dist/backend/llvm/expr-containers.js +16 -5
  61. package/dist/backend/llvm/expr-containers.js.map +1 -1
  62. package/dist/backend/llvm/expr-control.js +92 -2
  63. package/dist/backend/llvm/expr-control.js.map +1 -1
  64. package/dist/backend/llvm/expr-dispatch.js +2 -0
  65. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  66. package/dist/backend/llvm/expr-dynamic.js +174 -25
  67. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  68. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  69. package/dist/backend/llvm/expr-primitives.js +52 -24
  70. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  71. package/dist/backend/llvm/expr-primitives.test.js +1 -1
  72. package/dist/backend/llvm/expr-records.js +3 -3
  73. package/dist/backend/llvm/expr-records.js.map +1 -1
  74. package/dist/backend/llvm/expr-stream-bridges.js +59 -2
  75. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  76. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  77. package/dist/backend/llvm/integer-remainder.d.ts +11 -0
  78. package/dist/backend/llvm/integer-remainder.js +91 -0
  79. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  80. package/dist/backend/llvm/layouts.d.ts +2 -1
  81. package/dist/backend/llvm/layouts.js +3 -2
  82. package/dist/backend/llvm/layouts.js.map +1 -1
  83. package/dist/backend/llvm/lazy-captures.d.ts +16 -0
  84. package/dist/backend/llvm/lazy-captures.js +96 -0
  85. package/dist/backend/llvm/lazy-captures.js.map +1 -0
  86. package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
  87. package/dist/backend/llvm/lazy-captures.test.js +78 -0
  88. package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
  89. package/dist/backend/llvm/lib-filesystem.js +3 -4
  90. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  91. package/dist/backend/llvm/local-array-reads.d.ts +5 -1
  92. package/dist/backend/llvm/local-array-reads.js +78 -17
  93. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  94. package/dist/backend/llvm/local-array-reads.test.js +78 -1
  95. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  96. package/dist/backend/llvm/local-union-storage.d.ts +5 -1
  97. package/dist/backend/llvm/local-union-storage.js +48 -6
  98. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  99. package/dist/backend/llvm/local-union-storage.test.js +91 -4
  100. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  101. package/dist/backend/llvm/map-read-lifetimes.test.js +1 -1
  102. package/dist/backend/llvm/nullable-fields.d.ts +28 -0
  103. package/dist/backend/llvm/nullable-fields.js +45 -0
  104. package/dist/backend/llvm/nullable-fields.js.map +1 -0
  105. package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
  106. package/dist/backend/llvm/nullable-fields.test.js +48 -0
  107. package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
  108. package/dist/backend/llvm/serialized-ir-emission.test.d.ts +1 -0
  109. package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
  110. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
  111. package/dist/backend/llvm/shapes.d.ts +69 -2
  112. package/dist/backend/llvm/shapes.js +259 -27
  113. package/dist/backend/llvm/shapes.js.map +1 -1
  114. package/dist/backend/llvm/shapes.test.js +114 -5
  115. package/dist/backend/llvm/shapes.test.js.map +1 -1
  116. package/dist/backend/llvm/stack-callbacks.js +2 -3
  117. package/dist/backend/llvm/stack-callbacks.js.map +1 -1
  118. package/dist/backend/llvm/stack-captures.d.ts +3 -1
  119. package/dist/backend/llvm/stack-captures.js +5 -3
  120. package/dist/backend/llvm/stack-captures.js.map +1 -1
  121. package/dist/backend/llvm/stack-unions.test.js +38 -1
  122. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  123. package/dist/backend/llvm/string-construction.test.js +1 -1
  124. package/dist/backend/llvm/string-key-hash.d.ts +8 -0
  125. package/dist/backend/llvm/string-key-hash.js +59 -0
  126. package/dist/backend/llvm/string-key-hash.js.map +1 -0
  127. package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
  128. package/dist/backend/llvm/string-key-hash.test.js +34 -0
  129. package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
  130. package/dist/backend/llvm/string-lifetimes.test.js +41 -4
  131. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  132. package/dist/backend/llvm/switch-dispatch.js +1 -1
  133. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  134. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  135. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  136. package/dist/backend/may-throw.js +3 -0
  137. package/dist/backend/may-throw.js.map +1 -1
  138. package/dist/backend/may-throw.test.js +1 -1
  139. package/dist/backend/native/cache-warm.d.ts +2 -1
  140. package/dist/backend/native/cache-warm.js.map +1 -1
  141. package/dist/backend/native/contracts.d.ts +3 -2
  142. package/dist/backend/native/contracts.js.map +1 -1
  143. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  144. package/dist/backend/native/runtime-inputs.js +1 -0
  145. package/dist/backend/native/runtime-inputs.js.map +1 -1
  146. package/dist/backend/native-codegen-core.d.ts +2 -1
  147. package/dist/backend/native-codegen-core.js.map +1 -1
  148. package/dist/backend/native-codegen.d.ts +5 -0
  149. package/dist/backend/native-codegen.js +4 -0
  150. package/dist/backend/native-codegen.js.map +1 -1
  151. package/dist/backend/native-codegen.test.js +23 -0
  152. package/dist/backend/native-codegen.test.js.map +1 -1
  153. package/dist/backend/native-link-info-core.d.ts +3 -2
  154. package/dist/backend/native-link-info-core.js.map +1 -1
  155. package/dist/backend/native-link-info.d.ts +2 -1
  156. package/dist/backend/native-link-info.js.map +1 -1
  157. package/dist/backend/native-link-info.test.js +2 -2
  158. package/dist/backend/native-link-info.test.js.map +1 -1
  159. package/dist/backend/native-tools.d.ts +3 -1
  160. package/dist/backend/native-tools.js +0 -1
  161. package/dist/backend/native-tools.js.map +1 -1
  162. package/dist/backend/optimization.d.ts +25 -0
  163. package/dist/backend/optimization.js +21 -0
  164. package/dist/backend/optimization.js.map +1 -0
  165. package/dist/backend/optimization.test.d.ts +1 -0
  166. package/dist/backend/optimization.test.js +24 -0
  167. package/dist/backend/optimization.test.js.map +1 -0
  168. package/dist/backend/runtime-abi.d.ts +2 -2
  169. package/dist/backend/runtime-abi.js +2 -2
  170. package/dist/backend/runtime-pack-core.d.ts +15 -4
  171. package/dist/backend/runtime-pack-core.js +23 -12
  172. package/dist/backend/runtime-pack-core.js.map +1 -1
  173. package/dist/backend/runtime-pack-native.d.ts +7 -3
  174. package/dist/backend/runtime-pack-native.js +0 -3
  175. package/dist/backend/runtime-pack-native.js.map +1 -1
  176. package/dist/backend/runtime-pack-targets.test.js +1 -1
  177. package/dist/backend/runtime-pack.d.ts +20 -2
  178. package/dist/backend/runtime-pack.js +23 -0
  179. package/dist/backend/runtime-pack.js.map +1 -1
  180. package/dist/backend/runtime-pack.test.js +115 -2
  181. package/dist/backend/runtime-pack.test.js.map +1 -1
  182. package/dist/backend/target-diagnostics.test.js +1 -1
  183. package/dist/backend/targets.d.ts +2 -1
  184. package/dist/backend/targets.js +1 -1
  185. package/dist/backend/targets.js.map +1 -1
  186. package/dist/cli/command.js +5 -4
  187. package/dist/cli/command.js.map +1 -1
  188. package/dist/cli/host.d.ts +2 -1
  189. package/dist/cli/usage.d.ts +1 -1
  190. package/dist/cli/usage.js +5 -2
  191. package/dist/cli/usage.js.map +1 -1
  192. package/dist/compile-types.d.ts +5 -2
  193. package/dist/diagnostics/diagnostic.js +10 -8
  194. package/dist/diagnostics/diagnostic.js.map +1 -1
  195. package/dist/executable/executable-cache.d.ts +2 -2
  196. package/dist/executable/executable-cache.js +7 -4
  197. package/dist/executable/executable-cache.js.map +1 -1
  198. package/dist/executable/executable-cache.test.js +20 -0
  199. package/dist/executable/executable-cache.test.js.map +1 -1
  200. package/dist/frontend/lowering/abstract-equality.js +5 -49
  201. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  202. package/dist/frontend/lowering/array-values.d.ts +23 -0
  203. package/dist/frontend/lowering/array-values.js +129 -0
  204. package/dist/frontend/lowering/array-values.js.map +1 -1
  205. package/dist/frontend/lowering/builtins/errors.js +17 -2
  206. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  207. package/dist/frontend/lowering/builtins/process.d.ts +6 -17
  208. package/dist/frontend/lowering/builtins/process.js +56 -29
  209. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  210. package/dist/frontend/lowering/caught-value-dispatch.d.ts +11 -0
  211. package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
  212. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
  213. package/dist/frontend/lowering/class-assertions.d.ts +4 -0
  214. package/dist/frontend/lowering/class-assertions.js +12 -4
  215. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  216. package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
  217. package/dist/frontend/lowering/class-callbacks.js +18 -5
  218. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  219. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
  220. package/dist/frontend/lowering/class-dynamic-dispatch.js +4 -1
  221. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  222. package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
  223. package/dist/frontend/lowering/class-method-mutations.js +472 -0
  224. package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
  225. package/dist/frontend/lowering/class-method-values.js +25 -5
  226. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  227. package/dist/frontend/lowering/class-prototypes.js +8 -2
  228. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  229. package/dist/frontend/lowering/class-unions.d.ts +16 -0
  230. package/dist/frontend/lowering/class-unions.js +127 -0
  231. package/dist/frontend/lowering/class-unions.js.map +1 -0
  232. package/dist/frontend/lowering/coercions/builders.js +8 -1
  233. package/dist/frontend/lowering/coercions/builders.js.map +1 -1
  234. package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
  235. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  236. package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
  237. package/dist/frontend/lowering/coercions/identity.js +26 -0
  238. package/dist/frontend/lowering/coercions/identity.js.map +1 -0
  239. package/dist/frontend/lowering/coercions/structural.js +9 -6
  240. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  241. package/dist/frontend/lowering/collection-narrowing.d.ts +6 -0
  242. package/dist/frontend/lowering/collection-narrowing.js +31 -0
  243. package/dist/frontend/lowering/collection-narrowing.js.map +1 -0
  244. package/dist/frontend/lowering/containers/array-callback-call.d.ts +7 -0
  245. package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
  246. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
  247. package/dist/frontend/lowering/containers/array-callbacks.d.ts +1 -1
  248. package/dist/frontend/lowering/containers/array-callbacks.js +363 -49
  249. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  250. package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
  251. package/dist/frontend/lowering/containers/array-concat.js +130 -0
  252. package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
  253. package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
  254. package/dist/frontend/lowering/containers/array-construction.js +95 -3
  255. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  256. package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
  257. package/dist/frontend/lowering/containers/array-methods.js +43 -132
  258. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  259. package/dist/frontend/lowering/containers/collection-methods.js +10 -1
  260. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  261. package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
  262. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  263. package/dist/frontend/lowering/cycle-initialization.d.ts +41 -0
  264. package/dist/frontend/lowering/cycle-initialization.js +277 -0
  265. package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
  266. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -0
  267. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  268. package/dist/frontend/lowering/expressions/object-literals.js +138 -32
  269. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  270. package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
  271. package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
  272. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  273. package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
  274. package/dist/frontend/lowering/iterator-adapters.js +605 -0
  275. package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
  276. package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
  277. package/dist/frontend/lowering/lower-array-sort.js +44 -5
  278. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  279. package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
  280. package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
  281. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
  282. package/dist/frontend/lowering/lower-assert.js +7 -0
  283. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  284. package/dist/frontend/lowering/lower-builtin-values.js +1 -0
  285. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  286. package/dist/frontend/lowering/lower-calls.d.ts +3 -3
  287. package/dist/frontend/lowering/lower-calls.js +162 -121
  288. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  289. package/dist/frontend/lowering/lower-classes.d.ts +2 -0
  290. package/dist/frontend/lowering/lower-classes.js +45 -43
  291. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  292. package/dist/frontend/lowering/lower-exprs.d.ts +9 -2
  293. package/dist/frontend/lowering/lower-exprs.js +390 -157
  294. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  295. package/dist/frontend/lowering/lower-functions.js +32 -19
  296. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  297. package/dist/frontend/lowering/lower-inspect.js +26 -2
  298. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  299. package/dist/frontend/lowering/lower-modules.js +10 -2
  300. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  301. package/dist/frontend/lowering/lower-stmts.js +46 -58
  302. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  303. package/dist/frontend/lowering/lowerer.d.ts +37 -0
  304. package/dist/frontend/lowering/lowerer.js +283 -18
  305. package/dist/frontend/lowering/lowerer.js.map +1 -1
  306. package/dist/frontend/lowering/native-ffi.js +3 -1
  307. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  308. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +15 -0
  309. package/dist/frontend/lowering/runtime-optional-provenance.js +40 -0
  310. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
  311. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  312. package/dist/frontend/lowering/strict-equality.d.ts +9 -0
  313. package/dist/frontend/lowering/strict-equality.js +116 -0
  314. package/dist/frontend/lowering/strict-equality.js.map +1 -0
  315. package/dist/frontend/lowering/surfaces.js +3 -0
  316. package/dist/frontend/lowering/surfaces.js.map +1 -1
  317. package/dist/frontend/lowering/union-comparison.d.ts +5 -0
  318. package/dist/frontend/lowering/union-comparison.js +47 -0
  319. package/dist/frontend/lowering/union-comparison.js.map +1 -0
  320. package/dist/frontend/program.d.ts +38 -2
  321. package/dist/frontend/program.js +440 -59
  322. package/dist/frontend/program.js.map +1 -1
  323. package/dist/frontend/program.test.js +59 -6
  324. package/dist/frontend/program.test.js.map +1 -1
  325. package/dist/frontend/type-mapper.d.ts +1 -1
  326. package/dist/frontend/type-mapper.js +89 -14
  327. package/dist/frontend/type-mapper.js.map +1 -1
  328. package/dist/frontend/type-mapper.test.js +15 -3
  329. package/dist/frontend/type-mapper.test.js.map +1 -1
  330. package/dist/index.js +25 -9
  331. package/dist/index.js.map +1 -1
  332. package/dist/ir/analysis.d.ts +3 -1
  333. package/dist/ir/analysis.js +4 -0
  334. package/dist/ir/analysis.js.map +1 -1
  335. package/dist/ir/builtin-signatures.js +2 -3
  336. package/dist/ir/builtin-signatures.js.map +1 -1
  337. package/dist/ir/constant-tables.test.js +1 -1
  338. package/dist/ir/initializer-bindings.test.js +1 -1
  339. package/dist/ir/ir.d.ts +78 -15
  340. package/dist/ir/ir.js +20 -6
  341. package/dist/ir/ir.js.map +1 -1
  342. package/dist/ir/scalar-records.test.js +1 -1
  343. package/dist/ir/serialize.d.ts +1 -1
  344. package/dist/ir/serialize.js +3 -3
  345. package/dist/ir/serialize.js.map +1 -1
  346. package/dist/ir/traverse.js +8 -0
  347. package/dist/ir/traverse.js.map +1 -1
  348. package/dist/ir/validate.js +118 -20
  349. package/dist/ir/validate.js.map +1 -1
  350. package/dist/ir/validate.test.js +269 -8
  351. package/dist/ir/validate.test.js.map +1 -1
  352. package/dist/library/fence-eval.test.js +1 -1
  353. package/dist/library/int-infer.test.js +4 -4
  354. package/dist/library/library-cache.test.js +5 -5
  355. package/dist/library/library-profile.d.ts +2 -1
  356. package/dist/library/library-profile.js +4 -3
  357. package/dist/library/library-profile.js.map +1 -1
  358. package/dist/native/compiler.js.map +1 -1
  359. package/dist/native/compiler.test.js +2 -2
  360. package/dist/native/library.d.ts +2 -1
  361. package/dist/native/library.js.map +1 -1
  362. package/dist/native/prepare.js +27 -3
  363. package/dist/native/prepare.js.map +1 -1
  364. package/dist/native/sanitizer.d.ts +3 -2
  365. package/dist/native/sanitizer.js +3 -13
  366. package/dist/native/sanitizer.js.map +1 -1
  367. package/package.json +20 -20
  368. package/surface-manifest.json +8 -2
@@ -0,0 +1,472 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ import { literalValues } from "../literal-values.js";
3
+ import { isJsSourceFile } from "../program.js";
4
+ /** Members every function value has (Function.prototype and
5
+ * Object.prototype, plus own `length`/`name`/`prototype`). */
6
+ const FUNCTION_MEMBER_NAMES = new Set([
7
+ "apply",
8
+ "arguments",
9
+ "bind",
10
+ "call",
11
+ "caller",
12
+ "constructor",
13
+ "hasOwnProperty",
14
+ "isPrototypeOf",
15
+ "length",
16
+ "name",
17
+ "propertyIsEnumerable",
18
+ "prototype",
19
+ "toLocaleString",
20
+ "toString",
21
+ "valueOf",
22
+ ]);
23
+ /** Census observable slots before choosing native calls. Names are shared
24
+ * conservatively across classes: aliases cannot hide a named replacement. */
25
+ export function collectClassMethodMutations(lowerer, files) {
26
+ const methods = new Set();
27
+ const arrowFields = new Set();
28
+ const receiverFields = new Set();
29
+ const computedWrites = [];
30
+ const propertyWrites = [];
31
+ const reflection = [];
32
+ const globals = [];
33
+ const jsAssignments = [];
34
+ const computedMethods = [];
35
+ let unknownKey;
36
+ let numericKey;
37
+ let unknownOwnField = false;
38
+ // JavaScript method inference and dynamic class factories keep their
39
+ // existing dispatch contract. The native-call proof applies to typed
40
+ // declarations, while writes in either source language can invalidate it.
41
+ for (const file of files) {
42
+ if (isJsSourceFile(file))
43
+ continue;
44
+ ts.walkPreorder(file, (node) => {
45
+ if (!ts.isMethodDeclaration(node) ||
46
+ (!ts.isClassDeclaration(node.parent) && !ts.isClassExpression(node.parent)))
47
+ return;
48
+ if (ts.isIdentifier(node.name) ||
49
+ ts.isStringLiteralLike(node.name) ||
50
+ ts.isNumericLiteral(node.name))
51
+ methods.add(node.name.text);
52
+ else if (ts.isComputedPropertyName(node.name))
53
+ computedMethods.push(node.name.expression);
54
+ });
55
+ }
56
+ lowerer.checker.prefetchClassCollection(computedMethods, []);
57
+ for (const key of computedMethods)
58
+ for (const name of literalValues(lowerer.typeOf(key)) ?? [])
59
+ methods.add(String(name));
60
+ const markName = (name, site, arrow = false) => {
61
+ if (name === "prototype" || name === "__proto__")
62
+ unknownKey = site;
63
+ if (methods.has(name))
64
+ lowerer.prototypeMethodAccesses.set(name, site);
65
+ if (!arrow)
66
+ receiverFields.add(name);
67
+ };
68
+ const unwrap = (value) => {
69
+ while (ts.isParenthesizedExpression(value) ||
70
+ ts.isAsExpression(value) ||
71
+ ts.isTypeAssertion(value) ||
72
+ ts.isNonNullExpression(value))
73
+ value = value.expression;
74
+ return value;
75
+ };
76
+ // Structural types can be live views of class instances. A fresh
77
+ // allocation in a constant binding proves that a dictionary write cannot
78
+ // replace a class method without relying on its declared shape.
79
+ const freshReceiver = (value) => {
80
+ value = unwrap(value);
81
+ if (ts.isIdentifier(value)) {
82
+ const symbol = lowerer.checker.getSymbolAtLocation(value);
83
+ const decl = symbol && lowerer.checker.declarationsOf(symbol)[0];
84
+ if (!decl ||
85
+ !ts.isVariableDeclaration(decl) ||
86
+ !ts.isIdentifier(decl.name) ||
87
+ !ts.isVariableDeclarationList(decl.parent) ||
88
+ !(decl.parent.flags & ts.NodeFlags.Const) ||
89
+ !decl.initializer)
90
+ return false;
91
+ value = unwrap(decl.initializer);
92
+ }
93
+ if (ts.isObjectLiteralExpression(value) || ts.isArrayLiteralExpression(value))
94
+ return true;
95
+ return (ts.isCallExpression(value) &&
96
+ ts.isPropertyAccessExpression(value.expression) &&
97
+ lowerer.stdlibGlobalMember(value.expression, "Object") === "create");
98
+ };
99
+ // Whether no function value can inhabit `type`. Primitives qualify, and so
100
+ // do non-callable object types a function is not assignable to: one that
101
+ // requires a property functions lack, or a weak (all-optional) type that
102
+ // shares no property with functions (TypeScript's weak-type rule rejects
103
+ // callable sources too).
104
+ const functionFree = (type) => {
105
+ if (type.isUnionType())
106
+ return ts.constituentTypes(type).every(functionFree);
107
+ if ((type.flags &
108
+ (ts.TypeFlags.StringLike |
109
+ ts.TypeFlags.NumberLike |
110
+ ts.TypeFlags.BooleanLike |
111
+ ts.TypeFlags.BigIntLike |
112
+ ts.TypeFlags.Null |
113
+ ts.TypeFlags.Undefined |
114
+ ts.TypeFlags.ESSymbolLike)) !==
115
+ 0)
116
+ return true;
117
+ if (!(type.flags & ts.TypeFlags.Object) ||
118
+ lowerer.checker.getCallSignatures(type).length > 0 ||
119
+ lowerer.checker.getConstructSignatures(type).length > 0)
120
+ return false;
121
+ const properties = lowerer.checker.getPropertiesOfType(type);
122
+ if (properties.length === 0)
123
+ return false;
124
+ const required = properties.filter((property) => (property.flags & ts.SymbolFlags.Optional) === 0);
125
+ if (required.some((property) => !FUNCTION_MEMBER_NAMES.has(property.name)))
126
+ return true;
127
+ return (required.length === 0 &&
128
+ properties.every((property) => !FUNCTION_MEMBER_NAMES.has(property.name)));
129
+ };
130
+ // A string index whose values cannot be functions excludes callable
131
+ // method slots. Class instances have no implicit index signature, so such
132
+ // a dictionary is only a class view when the class declares that index
133
+ // signature, and then every method must be assignable to its value type.
134
+ const functionFreeDictionary = (value) => lowerer.checker
135
+ .getIndexInfosOfType(lowerer.typeOf(value))
136
+ .some((index) => (index.keyType.flags & ts.TypeFlags.StringLike) !== 0 && functionFree(index.valueType));
137
+ const literalLoopKeys = (key) => {
138
+ if (!ts.isIdentifier(key))
139
+ return null;
140
+ const symbol = lowerer.checker.getSymbolAtLocation(key);
141
+ const decl = symbol && lowerer.checker.declarationsOf(symbol)[0];
142
+ if (!decl || !ts.isVariableDeclaration(decl) || !ts.isIdentifier(decl.name))
143
+ return null;
144
+ const list = decl.parent;
145
+ if (!ts.isVariableDeclarationList(list) || !(list.flags & ts.NodeFlags.Const))
146
+ return null;
147
+ const loop = list.parent;
148
+ if (!ts.isForOfStatement(loop) || loop.initializer !== list)
149
+ return null;
150
+ const values = unwrap(loop.expression);
151
+ if (!ts.isArrayLiteralExpression(values))
152
+ return null;
153
+ const names = [];
154
+ for (const value of values.elements) {
155
+ if (ts.isStringLiteralLike(value))
156
+ names.push(value.text);
157
+ else if (ts.isNumericLiteral(value))
158
+ names.push(Number(value.text));
159
+ else
160
+ return null;
161
+ }
162
+ return names;
163
+ };
164
+ const sameBinding = (left, right) => {
165
+ left = unwrap(left);
166
+ right = unwrap(right);
167
+ if (!ts.isIdentifier(left) || !ts.isIdentifier(right))
168
+ return false;
169
+ const symbol = lowerer.checker.getSymbolAtLocation(left);
170
+ return symbol !== undefined && symbol === lowerer.checker.getSymbolAtLocation(right);
171
+ };
172
+ const preservesExistingMethod = (key, receiver, site) => {
173
+ // An immediately guarded insertion cannot replace a method already
174
+ // present on the receiver or its prototype. Restrict the body to this
175
+ // one write so no intervening statement can change either binding.
176
+ const statement = site.parent;
177
+ if (!ts.isExpressionStatement(statement))
178
+ return false;
179
+ const branch = statement.parent;
180
+ if (!ts.isIfStatement(branch) || branch.thenStatement !== statement)
181
+ return false;
182
+ const test = unwrap(branch.expression);
183
+ if (!ts.isPrefixUnaryExpression(test) || test.operator !== ts.SyntaxKind.ExclamationToken)
184
+ return false;
185
+ const present = unwrap(test.operand);
186
+ return (ts.isBinaryExpression(present) &&
187
+ present.operatorToken.kind === ts.SyntaxKind.InKeyword &&
188
+ sameBinding(key, present.left) &&
189
+ sameBinding(receiver, present.right));
190
+ };
191
+ const deletesOwnEnumerableKey = (key, receiver, site) => {
192
+ if (!ts.isDeleteExpression(site) || !ts.isIdentifier(key))
193
+ return false;
194
+ const statement = site.parent;
195
+ if (!ts.isExpressionStatement(statement))
196
+ return false;
197
+ const loop = statement.parent;
198
+ if (!ts.isForOfStatement(loop) || loop.statement !== statement)
199
+ return false;
200
+ if (!ts.isVariableDeclarationList(loop.initializer))
201
+ return false;
202
+ const decl = loop.initializer.declarations[0];
203
+ if (!decl || !ts.isIdentifier(decl.name) || !sameBinding(key, decl.name))
204
+ return false;
205
+ const keys = unwrap(loop.expression);
206
+ return (ts.isCallExpression(keys) &&
207
+ ts.isPropertyAccessExpression(keys.expression) &&
208
+ lowerer.stdlibGlobalMember(keys.expression, "Object") === "keys" &&
209
+ keys.arguments.length === 1 &&
210
+ sameBinding(receiver, keys.arguments[0]));
211
+ };
212
+ const markKey = (key, site, receiver) => {
213
+ key = unwrap(key);
214
+ if (ts.isStringLiteralLike(key))
215
+ markName(key.text, site);
216
+ else if (ts.isNumericLiteral(key))
217
+ markName(String(Number(key.text)), site);
218
+ else
219
+ computedWrites.push({ key, receiver, site });
220
+ };
221
+ const markFields = (value, site, receiver) => {
222
+ value = unwrap(value);
223
+ if (!ts.isObjectLiteralExpression(value)) {
224
+ computedWrites.push({ key: undefined, receiver, site });
225
+ return;
226
+ }
227
+ for (const field of value.properties) {
228
+ if (ts.isSpreadAssignment(field))
229
+ markFields(field.expression, site, receiver);
230
+ else if (field.name && (ts.isIdentifier(field.name) || ts.isStringLiteralLike(field.name)))
231
+ markName(field.name.text, site);
232
+ else if (field.name && ts.isComputedPropertyName(field.name))
233
+ markKey(field.name.expression, site, receiver);
234
+ }
235
+ };
236
+ const markTarget = (target, site, arrow = false) => {
237
+ target = unwrap(target);
238
+ if (ts.isPropertyAccessExpression(target)) {
239
+ const name = target.name.text;
240
+ // A named write to a method name is judged by the written property's
241
+ // type once types are prefetched (see propertyWrites below).
242
+ if (methods.has(name) && name !== "prototype" && name !== "__proto__") {
243
+ if (!arrow)
244
+ receiverFields.add(name);
245
+ propertyWrites.push({ target, site });
246
+ }
247
+ else
248
+ markName(name, site, arrow);
249
+ }
250
+ else if (ts.isElementAccessExpression(target))
251
+ markKey(target.argumentExpression, site, target.expression);
252
+ else if (ts.isArrayLiteralExpression(target)) {
253
+ for (const element of target.elements) {
254
+ if (ts.isSpreadElement(element))
255
+ markTarget(element.expression, site);
256
+ else if (!ts.isOmittedExpression(element))
257
+ markTarget(element, site);
258
+ }
259
+ }
260
+ else if (ts.isObjectLiteralExpression(target)) {
261
+ for (const field of target.properties) {
262
+ if (ts.isPropertyAssignment(field))
263
+ markTarget(field.initializer, site);
264
+ else if (ts.isSpreadAssignment(field))
265
+ markTarget(field.expression, site);
266
+ }
267
+ }
268
+ else if (ts.isBinaryExpression(target) &&
269
+ target.operatorToken.kind === ts.SyntaxKind.EqualsToken)
270
+ markTarget(target.left, site);
271
+ };
272
+ for (const file of files)
273
+ ts.walkPreorder(file, (node) => {
274
+ if (lowerer.dynamic)
275
+ unknownKey = file;
276
+ if ((ts.isPropertyDeclaration(node) ||
277
+ ts.isPropertyAssignment(node) ||
278
+ ts.isMethodDeclaration(node) ||
279
+ ts.isGetAccessorDeclaration(node) ||
280
+ ts.isSetAccessorDeclaration(node)) &&
281
+ ts.isComputedPropertyName(node.name)) {
282
+ markKey(node.name.expression, node);
283
+ }
284
+ if ((ts.isPropertyDeclaration(node) ||
285
+ ts.isGetAccessorDeclaration(node) ||
286
+ ts.isSetAccessorDeclaration(node)) &&
287
+ (ts.isIdentifier(node.name) ||
288
+ ts.isStringLiteralLike(node.name) ||
289
+ ts.isNumericLiteral(node.name))) {
290
+ if (ts.isPropertyDeclaration(node) &&
291
+ node.initializer &&
292
+ ts.isArrowFunction(unwrap(node.initializer)))
293
+ arrowFields.add(node.name.text);
294
+ else
295
+ receiverFields.add(node.name.text);
296
+ }
297
+ if ((ts.isPropertyAssignment(node) || ts.isShorthandPropertyAssignment(node)) &&
298
+ (ts.isIdentifier(node.name) ||
299
+ ts.isStringLiteralLike(node.name) ||
300
+ ts.isNumericLiteral(node.name))) {
301
+ if (!ts.isPropertyAssignment(node) || !ts.isArrowFunction(unwrap(node.initializer)))
302
+ receiverFields.add(node.name.text);
303
+ }
304
+ if (ts.isParameter(node) && ts.isIdentifier(node.name) && node.modifiers?.length)
305
+ receiverFields.add(node.name.text);
306
+ if (ts.isMethodDeclaration(node) &&
307
+ (ts.isIdentifier(node.name) ||
308
+ ts.isStringLiteralLike(node.name) ||
309
+ ts.isNumericLiteral(node.name))) {
310
+ receiverFields.add(node.name.text);
311
+ }
312
+ if (ts.isBinaryExpression(node) &&
313
+ node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
314
+ node.operatorToken.kind <= ts.SyntaxKind.LastAssignment) {
315
+ markTarget(node.left, node, node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
316
+ ts.isArrowFunction(unwrap(node.right)));
317
+ if (isJsSourceFile(file) &&
318
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
319
+ (ts.isPropertyAccessExpression(node.left) ||
320
+ (ts.isElementAccessExpression(node.left) &&
321
+ ts.isStringLiteralLike(node.left.argumentExpression))))
322
+ jsAssignments.push(node.left);
323
+ }
324
+ if (ts.isDeleteExpression(node))
325
+ markTarget(node.expression, node);
326
+ if ((ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) &&
327
+ (node.operator === ts.SyntaxKind.PlusPlusToken ||
328
+ node.operator === ts.SyntaxKind.MinusMinusToken))
329
+ markTarget(node.operand, node);
330
+ if ((ts.isForOfStatement(node) || ts.isForInStatement(node)) &&
331
+ !ts.isVariableDeclarationList(node.initializer) &&
332
+ node.initializer.kind !== ts.SyntaxKind.MissingDeclaration)
333
+ markTarget(node.initializer, node);
334
+ if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {
335
+ const base = unwrap(node.expression);
336
+ const prototype = (ts.isPropertyAccessExpression(base) && base.name.text === "prototype") ||
337
+ (ts.isElementAccessExpression(base) &&
338
+ ts.isStringLiteralLike(base.argumentExpression) &&
339
+ base.argumentExpression.text === "prototype");
340
+ if (prototype) {
341
+ if (ts.isPropertyAccessExpression(node))
342
+ lowerer.prototypeMethodAccesses.set(node.name.text, node);
343
+ else if (ts.isStringLiteralLike(node.argumentExpression))
344
+ lowerer.prototypeMethodAccesses.set(node.argumentExpression.text, node);
345
+ else
346
+ markKey(node.argumentExpression, node);
347
+ }
348
+ }
349
+ // Extracted reflection functions and aliases of Object/Reflect can
350
+ // mutate arbitrary names. Direct calls below retain precise keys.
351
+ if (ts.isIdentifier(node) && (node.text === "Object" || node.text === "Reflect"))
352
+ globals.push(node);
353
+ if (ts.isPropertyAccessExpression(node) &&
354
+ [
355
+ "setPrototypeOf",
356
+ "defineProperty",
357
+ "set",
358
+ "deleteProperty",
359
+ "defineProperties",
360
+ "assign",
361
+ ].includes(node.name.text))
362
+ reflection.push(node);
363
+ });
364
+ // The census crosses deferred bodies. Batch only the binding and key
365
+ // queries it actually needs instead of eagerly querying every identifier.
366
+ lowerer.checker.prefetchClassCollection(jsAssignments.flatMap((access) => ts.isElementAccessExpression(access) ? [access.expression] : []), jsAssignments.flatMap((access) => (ts.isPropertyAccessExpression(access) ? [access.name] : [])));
367
+ for (const access of jsAssignments) {
368
+ const name = ts.isPropertyAccessExpression(access)
369
+ ? access.name.text
370
+ : access.argumentExpression.text;
371
+ const symbol = ts.isPropertyAccessExpression(access)
372
+ ? lowerer.checker.getSymbolAtLocation(access.name)
373
+ : lowerer.checker.getPropertyOfType(lowerer.typeOf(access.expression), name);
374
+ if (symbol && lowerer.checker.declarationsOf(symbol).some(ts.isMethodDeclaration))
375
+ lowerer.prototypeMethodAccesses.set(name, access);
376
+ }
377
+ lowerer.checker.prefetchSymbolRoots([...globals, ...reflection]);
378
+ for (const node of globals)
379
+ if ((lowerer.isStdlibGlobal(node, "Object") || lowerer.isStdlibGlobal(node, "Reflect")) &&
380
+ (!ts.isPropertyAccessExpression(node.parent) || node.parent.expression !== node))
381
+ unknownKey = node;
382
+ for (const node of reflection) {
383
+ const objectMethod = lowerer.stdlibGlobalMember(node, "Object");
384
+ const reflectMethod = lowerer.stdlibGlobalMember(node, "Reflect");
385
+ if (objectMethod === "setPrototypeOf" || reflectMethod === "setPrototypeOf")
386
+ unknownKey = node;
387
+ const single = objectMethod === "defineProperty" ||
388
+ reflectMethod === "defineProperty" ||
389
+ reflectMethod === "set" ||
390
+ reflectMethod === "deleteProperty";
391
+ const multiple = objectMethod === "defineProperties" || objectMethod === "assign";
392
+ if (!single && !multiple)
393
+ continue;
394
+ const call = node.parent;
395
+ if (!ts.isCallExpression(call) || call.expression !== node) {
396
+ unknownKey = node;
397
+ continue;
398
+ }
399
+ const receiver = call.arguments[0];
400
+ if (single && call.arguments[1])
401
+ markKey(call.arguments[1], call, receiver);
402
+ else if (objectMethod === "defineProperties" && call.arguments[1])
403
+ markFields(call.arguments[1], call, receiver);
404
+ else if (objectMethod === "assign")
405
+ for (const source of call.arguments.slice(1))
406
+ markFields(source, call, receiver);
407
+ }
408
+ lowerer.checker.prefetchClassCollection(computedWrites.flatMap((write) => [
409
+ ...(write.key ? [write.key] : []),
410
+ ...(write.receiver ? [write.receiver] : []),
411
+ ]), computedWrites.flatMap((write) => [
412
+ ...(write.key ? [write.key] : []),
413
+ ...(write.receiver ? [write.receiver] : []),
414
+ ]));
415
+ // A named write can replace a method only when the written property can
416
+ // hold a function: a class instance seen through the receiver's type must
417
+ // have its method assignable to that property's type. Data fields (an AST
418
+ // node, a string, a JSON record) cannot shadow a same-named method of an
419
+ // unrelated class, so they stay out of the observed-slot census.
420
+ lowerer.checker.prefetchClassCollection(propertyWrites.map((write) => write.target), []);
421
+ for (const { target, site } of propertyWrites) {
422
+ const name = target.name.text;
423
+ if (lowerer.prototypeMethodAccesses.has(name) || functionFree(lowerer.typeOf(target)))
424
+ continue;
425
+ lowerer.prototypeMethodAccesses.set(name, site);
426
+ }
427
+ for (const { key, receiver, site } of computedWrites) {
428
+ const type = key ? lowerer.typeOf(key) : undefined;
429
+ const names = type && (literalValues(type) ?? (key ? literalLoopKeys(key) : null));
430
+ if (names) {
431
+ for (const name of names)
432
+ markName(String(name), site);
433
+ continue;
434
+ }
435
+ if (key && receiver && preservesExistingMethod(key, receiver, site))
436
+ continue;
437
+ if (key && receiver && deletesOwnEnumerableKey(key, receiver, site)) {
438
+ // Class methods are non-enumerable prototype properties. Own callback
439
+ // fields remain observable, so this proof does not certify those.
440
+ unknownOwnField = true;
441
+ continue;
442
+ }
443
+ // A string index whose values cannot be functions excludes callable
444
+ // method slots. Unlike structural interfaces, it cannot be a live
445
+ // class-method view.
446
+ if (receiver && (freshReceiver(receiver) || functionFreeDictionary(receiver)))
447
+ continue;
448
+ const flags = type?.flags ?? ts.TypeFlags.Unknown;
449
+ if (flags & ts.TypeFlags.NumberLike) {
450
+ // Numeric writes can replace numeric names but not ordinary names.
451
+ numericKey = site;
452
+ }
453
+ else if (!(flags & ts.TypeFlags.ESSymbolLike)) {
454
+ unknownKey = site;
455
+ }
456
+ }
457
+ if (numericKey) {
458
+ for (const name of [...methods, ...arrowFields]) {
459
+ if (String(Number(name)) === name)
460
+ markName(name, numericKey);
461
+ }
462
+ }
463
+ if (unknownKey)
464
+ for (const method of methods)
465
+ lowerer.prototypeMethodAccesses.set(method, unknownKey);
466
+ if (!unknownKey && !unknownOwnField)
467
+ for (const field of arrowFields) {
468
+ if (!receiverFields.has(field))
469
+ lowerer.receiverFreeCallbackFields.add(field);
470
+ }
471
+ }
472
+ //# sourceMappingURL=class-method-mutations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-method-mutations.js","sourceRoot":"","sources":["../../../src/frontend/lowering/class-method-mutations.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as ts from "../ts7/adapter.js";
2
2
  import { BOOL, DYN, STRING, RUNTIME_ERROR_CLASSES, typeEquals, typeKey, } from "../../ir/ir.js";
3
- import { varRef } from "../../ir/build.js";
3
+ import { nodeThrowExpr, varRef } from "../../ir/build.js";
4
4
  import { everyStmtList, transformStmtList } from "../../ir/traverse.js";
5
5
  import { isJsSourceFile, locOf } from "../program.js";
6
6
  import { newFnCtx } from "./lowerer.js";
@@ -29,7 +29,12 @@ export function lowerClassMethodValue(lowerer, expr, info) {
29
29
  type: DYN,
30
30
  loc,
31
31
  };
32
- let value = methodValue(lowerer, expr, info);
32
+ const declared = findMethodOn(lowerer, info, method);
33
+ // Abstract declarations have no prototype function. Concrete descendants
34
+ // provide the extracted value through the same reachability-driven selector.
35
+ let value = declared?.sig.abstract
36
+ ? nodeThrowExpr(1, "", `Missing implementation of method '${method}'`, funcTypeFromParamShapes(declared.sig.params, declared.sig.ret), loc)
37
+ : methodValue(lowerer, expr, info);
33
38
  if (!value)
34
39
  return null;
35
40
  const callback = isClassCallback(lowerer, info, method);
@@ -91,11 +96,19 @@ export function refreshClassMethodValueSelections(lowerer) {
91
96
  selection.values.has(candidate.def.name) ||
92
97
  !lowerer.classCanBeConstructed(candidate) ||
93
98
  !lowerer.isSubclassOf(candidate.def.name, selection.info.def.name) ||
94
- !candidate.methods.has(selection.method))
99
+ !candidate.methods.has(selection.method) ||
100
+ candidate.methods.get(selection.method)?.abstract)
95
101
  continue;
96
102
  let value = methodValue(lowerer, selection.expression, candidate);
97
103
  if (value && selection.checked)
98
104
  value = lowerer.coerceToExpected(value, DYN);
105
+ if (value && !typeEquals(value.type, selection.fallback.type)) {
106
+ const widened = lowerer.coerceCovariantFunction(value, selection.fallback.type);
107
+ // Only a representation-preserving view can keep extraction's
108
+ // identity contract across differently typed base/derived views.
109
+ if (widened)
110
+ value = widened;
111
+ }
99
112
  if (!value || !typeEquals(value.type, selection.fallback.type))
100
113
  lowerer.unsupported("SC1090", selection.expression, "method values with incompatible override signatures");
101
114
  selection.values.set(candidate.def.name, value);
@@ -105,8 +118,15 @@ export function refreshClassMethodValueSelections(lowerer) {
105
118
  continue;
106
119
  const loc = selection.fn.loc;
107
120
  const receiver = varRef("this.0", selection.fn.params[0].type, loc);
108
- const values = [...selection.values].sort(([a], [b]) => lowerer.isSubclassOf(a, b) ? -1 : lowerer.isSubclassOf(b, a) ? 1 : 0);
109
- selection.fn.body = values.map(([className, value]) => ({
121
+ const names = [...selection.values.keys()];
122
+ const values = [...selection.values]
123
+ .map(([className, value]) => ({
124
+ className,
125
+ value,
126
+ ancestors: names.filter((name) => lowerer.isSubclassOf(className, name)).length,
127
+ }))
128
+ .sort((a, b) => b.ancestors - a.ancestors);
129
+ selection.fn.body = values.map(({ className, value }) => ({
110
130
  kind: "if",
111
131
  cond: { kind: "instanceOf", value: receiver, className, type: BOOL, loc },
112
132
  then: [{ kind: "return", value, loc }],