semantifold 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +61 -15
  2. package/build/index.d.ts +52 -2
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +60 -8
  5. package/build/src/artifact-path.d.ts +23 -1
  6. package/build/src/artifact-path.d.ts.map +1 -1
  7. package/build/src/artifact-path.js +45 -3
  8. package/build/src/artifacts.d.ts.map +1 -1
  9. package/build/src/artifacts.js +66 -1
  10. package/build/src/backends/android.d.ts +49 -0
  11. package/build/src/backends/android.d.ts.map +1 -0
  12. package/build/src/backends/android.js +1274 -0
  13. package/build/src/backends/c-validation.d.ts.map +1 -1
  14. package/build/src/backends/c-validation.js +7 -3
  15. package/build/src/backends/cpp-validation.d.ts.map +1 -1
  16. package/build/src/backends/cpp-validation.js +7 -3
  17. package/build/src/backends/csharp.js +7 -1
  18. package/build/src/backends/dart-runtime.d.ts +2 -0
  19. package/build/src/backends/dart-runtime.d.ts.map +1 -0
  20. package/build/src/backends/dart-runtime.js +41 -0
  21. package/build/src/backends/dart.d.ts +20 -0
  22. package/build/src/backends/dart.d.ts.map +1 -0
  23. package/build/src/backends/dart.js +321 -0
  24. package/build/src/backends/effects.d.ts +60 -0
  25. package/build/src/backends/effects.d.ts.map +1 -0
  26. package/build/src/backends/effects.js +746 -0
  27. package/build/src/backends/go.js +18 -4
  28. package/build/src/backends/identifiers.d.ts +36 -4
  29. package/build/src/backends/identifiers.d.ts.map +1 -1
  30. package/build/src/backends/identifiers.js +160 -10
  31. package/build/src/backends/index.d.ts.map +1 -1
  32. package/build/src/backends/index.js +27 -4
  33. package/build/src/backends/ios.d.ts +68 -0
  34. package/build/src/backends/ios.d.ts.map +1 -0
  35. package/build/src/backends/ios.js +1503 -0
  36. package/build/src/backends/java.d.ts.map +1 -1
  37. package/build/src/backends/java.js +429 -36
  38. package/build/src/backends/javascript.d.ts +6 -0
  39. package/build/src/backends/javascript.d.ts.map +1 -1
  40. package/build/src/backends/javascript.js +380 -24
  41. package/build/src/backends/kotlin-runtime.d.ts +3 -0
  42. package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
  43. package/build/src/backends/kotlin-runtime.js +29 -0
  44. package/build/src/backends/kotlin.d.ts +33 -0
  45. package/build/src/backends/kotlin.d.ts.map +1 -0
  46. package/build/src/backends/kotlin.js +138 -0
  47. package/build/src/backends/native-validation.d.ts +2 -2
  48. package/build/src/backends/native-validation.d.ts.map +1 -1
  49. package/build/src/backends/native-validation.js +2 -2
  50. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  51. package/build/src/backends/ordered-expressions.js +39 -7
  52. package/build/src/backends/php-stdlib-support.d.ts +19 -0
  53. package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
  54. package/build/src/backends/php-stdlib-support.js +227 -0
  55. package/build/src/backends/php.d.ts.map +1 -1
  56. package/build/src/backends/php.js +448 -33
  57. package/build/src/backends/program.d.ts +83 -0
  58. package/build/src/backends/program.d.ts.map +1 -0
  59. package/build/src/backends/program.js +1309 -0
  60. package/build/src/backends/python.js +7 -1
  61. package/build/src/backends/ruby.d.ts.map +1 -1
  62. package/build/src/backends/ruby.js +310 -24
  63. package/build/src/backends/rust-runtime.d.ts +7 -0
  64. package/build/src/backends/rust-runtime.d.ts.map +1 -0
  65. package/build/src/backends/rust-runtime.js +32 -0
  66. package/build/src/backends/rust-validation.d.ts +9 -0
  67. package/build/src/backends/rust-validation.d.ts.map +1 -0
  68. package/build/src/backends/rust-validation.js +78 -0
  69. package/build/src/backends/rust.d.ts +24 -0
  70. package/build/src/backends/rust.d.ts.map +1 -0
  71. package/build/src/backends/rust.js +344 -0
  72. package/build/src/backends/scalars.d.ts +14 -6
  73. package/build/src/backends/scalars.d.ts.map +1 -1
  74. package/build/src/backends/scalars.js +167 -17
  75. package/build/src/backends/shared.d.ts +23 -4
  76. package/build/src/backends/shared.d.ts.map +1 -1
  77. package/build/src/backends/shared.js +2174 -62
  78. package/build/src/backends/stdlib-support.d.ts +14 -0
  79. package/build/src/backends/stdlib-support.d.ts.map +1 -0
  80. package/build/src/backends/stdlib-support.js +237 -0
  81. package/build/src/backends/swift-runtime.d.ts +3 -0
  82. package/build/src/backends/swift-runtime.d.ts.map +1 -0
  83. package/build/src/backends/swift-runtime.js +14 -0
  84. package/build/src/backends/swift.d.ts +8 -0
  85. package/build/src/backends/swift.d.ts.map +1 -0
  86. package/build/src/backends/swift.js +127 -0
  87. package/build/src/backends/typescript.d.ts.map +1 -1
  88. package/build/src/backends/typescript.js +344 -24
  89. package/build/src/backends/wasm.d.ts +43 -0
  90. package/build/src/backends/wasm.d.ts.map +1 -0
  91. package/build/src/backends/wasm.js +2164 -0
  92. package/build/src/backends/writer.d.ts +255 -4
  93. package/build/src/backends/writer.d.ts.map +1 -1
  94. package/build/src/backends/writer.js +491 -3
  95. package/build/src/diagnostic.d.ts +4 -3
  96. package/build/src/diagnostic.d.ts.map +1 -1
  97. package/build/src/diagnostic.js +5 -3
  98. package/build/src/frontends/c.d.ts.map +1 -1
  99. package/build/src/frontends/c.js +5 -3
  100. package/build/src/frontends/cpp.d.ts.map +1 -1
  101. package/build/src/frontends/cpp.js +5 -3
  102. package/build/src/frontends/csharp.d.ts.map +1 -1
  103. package/build/src/frontends/csharp.js +7 -3
  104. package/build/src/frontends/dart.d.ts +10 -0
  105. package/build/src/frontends/dart.d.ts.map +1 -0
  106. package/build/src/frontends/dart.js +913 -0
  107. package/build/src/frontends/index.d.ts +3 -1
  108. package/build/src/frontends/index.d.ts.map +1 -1
  109. package/build/src/frontends/index.js +15 -5
  110. package/build/src/frontends/java.d.ts +110 -1
  111. package/build/src/frontends/java.d.ts.map +1 -1
  112. package/build/src/frontends/java.js +1725 -70
  113. package/build/src/frontends/javascript-typescript.d.ts +69 -1
  114. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  115. package/build/src/frontends/javascript-typescript.js +1825 -93
  116. package/build/src/frontends/kotlin.d.ts +10 -0
  117. package/build/src/frontends/kotlin.d.ts.map +1 -0
  118. package/build/src/frontends/kotlin.js +685 -0
  119. package/build/src/frontends/php.d.ts +118 -1
  120. package/build/src/frontends/php.d.ts.map +1 -1
  121. package/build/src/frontends/php.js +1583 -76
  122. package/build/src/frontends/program.d.ts +74 -0
  123. package/build/src/frontends/program.d.ts.map +1 -0
  124. package/build/src/frontends/program.js +989 -0
  125. package/build/src/frontends/ruby.d.ts +68 -1
  126. package/build/src/frontends/ruby.d.ts.map +1 -1
  127. package/build/src/frontends/ruby.js +1446 -101
  128. package/build/src/frontends/rust-parser.d.ts +11 -0
  129. package/build/src/frontends/rust-parser.d.ts.map +1 -0
  130. package/build/src/frontends/rust-parser.js +15 -0
  131. package/build/src/frontends/rust.d.ts +14 -0
  132. package/build/src/frontends/rust.d.ts.map +1 -0
  133. package/build/src/frontends/rust.js +715 -0
  134. package/build/src/frontends/scalars.d.ts +10 -0
  135. package/build/src/frontends/scalars.d.ts.map +1 -1
  136. package/build/src/frontends/scalars.js +28 -2
  137. package/build/src/frontends/swift.d.ts +10 -0
  138. package/build/src/frontends/swift.d.ts.map +1 -0
  139. package/build/src/frontends/swift.js +860 -0
  140. package/build/src/frontends/types.d.ts +186 -0
  141. package/build/src/frontends/types.d.ts.map +1 -0
  142. package/build/src/frontends/types.js +634 -0
  143. package/build/src/language-registry.d.ts +46 -4
  144. package/build/src/language-registry.d.ts.map +1 -1
  145. package/build/src/language-registry.js +177 -13
  146. package/build/src/mapping.d.ts +2 -2
  147. package/build/src/mapping.d.ts.map +1 -1
  148. package/build/src/mapping.js +31 -10
  149. package/build/src/semantic/capabilities.d.ts +66 -0
  150. package/build/src/semantic/capabilities.d.ts.map +1 -0
  151. package/build/src/semantic/capabilities.js +649 -0
  152. package/build/src/semantic/effects.d.ts +26 -0
  153. package/build/src/semantic/effects.d.ts.map +1 -0
  154. package/build/src/semantic/effects.js +764 -0
  155. package/build/src/semantic/generics.d.ts +23 -0
  156. package/build/src/semantic/generics.d.ts.map +1 -0
  157. package/build/src/semantic/generics.js +61 -0
  158. package/build/src/semantic/lifetime.d.ts +37 -0
  159. package/build/src/semantic/lifetime.d.ts.map +1 -0
  160. package/build/src/semantic/lifetime.js +527 -0
  161. package/build/src/semantic/provenance.d.ts +9 -2
  162. package/build/src/semantic/provenance.d.ts.map +1 -1
  163. package/build/src/semantic/provenance.js +462 -20
  164. package/build/src/semantic/scalars.d.ts +11 -0
  165. package/build/src/semantic/scalars.d.ts.map +1 -1
  166. package/build/src/semantic/scalars.js +16 -1
  167. package/build/src/semantic/stdlib.d.ts +254 -0
  168. package/build/src/semantic/stdlib.d.ts.map +1 -0
  169. package/build/src/semantic/stdlib.js +880 -0
  170. package/build/src/semantic/types.d.ts +3108 -178
  171. package/build/src/semantic/types.d.ts.map +1 -1
  172. package/build/src/semantic/types.js +730 -15
  173. package/build/src/semantic/validate.d.ts +85 -5
  174. package/build/src/semantic/validate.d.ts.map +1 -1
  175. package/build/src/semantic/validate.js +2576 -98
  176. package/build/src/stdlib-facades.d.ts +304 -0
  177. package/build/src/stdlib-facades.d.ts.map +1 -0
  178. package/build/src/stdlib-facades.js +1167 -0
  179. package/build/src/stdlib-negotiation.d.ts +69 -0
  180. package/build/src/stdlib-negotiation.d.ts.map +1 -0
  181. package/build/src/stdlib-negotiation.js +403 -0
  182. package/build/src/stdlib-providers.d.ts +72 -0
  183. package/build/src/stdlib-providers.d.ts.map +1 -0
  184. package/build/src/stdlib-providers.js +339 -0
  185. package/build/src/toolchains.d.ts +55 -1
  186. package/build/src/toolchains.d.ts.map +1 -1
  187. package/build/src/toolchains.js +15 -4
  188. package/docs/android.md +79 -0
  189. package/docs/architecture.md +47 -13
  190. package/docs/dart.md +60 -0
  191. package/docs/goals.md +3 -3
  192. package/docs/ios.md +121 -0
  193. package/docs/kotlin.md +42 -0
  194. package/docs/language-support.md +238 -26
  195. package/docs/multi-file-modules.md +52 -0
  196. package/docs/parser-qualification.md +121 -8
  197. package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
  198. package/docs/rust.md +88 -0
  199. package/docs/source-maps.md +17 -7
  200. package/docs/specification.md +5 -0
  201. package/docs/standard-library-portability.md +39 -8
  202. package/docs/swift.md +44 -0
  203. package/docs/testing.md +381 -4
  204. package/docs/webassembly.md +52 -0
  205. package/index.js +66 -8
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
  236. package/package.json +5 -2
  237. package/src/artifact-path.js +47 -2
  238. package/src/artifacts.js +67 -0
  239. package/src/backends/android.js +1370 -0
  240. package/src/backends/c-validation.js +6 -1
  241. package/src/backends/cpp-validation.js +6 -1
  242. package/src/backends/csharp.js +3 -0
  243. package/src/backends/dart-runtime.js +41 -0
  244. package/src/backends/dart.js +326 -0
  245. package/src/backends/effects.js +705 -0
  246. package/src/backends/go.js +14 -2
  247. package/src/backends/identifiers.js +166 -9
  248. package/src/backends/index.js +27 -2
  249. package/src/backends/ios.js +1612 -0
  250. package/src/backends/java.js +454 -36
  251. package/src/backends/javascript.js +389 -23
  252. package/src/backends/kotlin-runtime.js +29 -0
  253. package/src/backends/kotlin.js +144 -0
  254. package/src/backends/native-validation.js +1 -1
  255. package/src/backends/ordered-expressions.js +40 -6
  256. package/src/backends/php-stdlib-support.js +239 -0
  257. package/src/backends/php.js +469 -32
  258. package/src/backends/program.js +1408 -0
  259. package/src/backends/python.js +3 -0
  260. package/src/backends/ruby.js +326 -23
  261. package/src/backends/rust-runtime.js +34 -0
  262. package/src/backends/rust-validation.js +75 -0
  263. package/src/backends/rust.js +335 -0
  264. package/src/backends/scalars.js +141 -16
  265. package/src/backends/shared.js +2314 -115
  266. package/src/backends/stdlib-support.js +234 -0
  267. package/src/backends/swift-runtime.js +14 -0
  268. package/src/backends/swift.js +132 -0
  269. package/src/backends/typescript.js +349 -23
  270. package/src/backends/wasm.js +2208 -0
  271. package/src/backends/writer.js +545 -2
  272. package/src/diagnostic.js +4 -2
  273. package/src/frontends/c.js +4 -2
  274. package/src/frontends/cpp.js +4 -2
  275. package/src/frontends/csharp.js +4 -2
  276. package/src/frontends/dart.js +963 -0
  277. package/src/frontends/index.js +14 -4
  278. package/src/frontends/java.js +1977 -69
  279. package/src/frontends/javascript-typescript.js +2046 -102
  280. package/src/frontends/kotlin.js +713 -0
  281. package/src/frontends/php.js +1725 -79
  282. package/src/frontends/program.js +1062 -0
  283. package/src/frontends/ruby.js +1624 -98
  284. package/src/frontends/rust-parser.js +18 -0
  285. package/src/frontends/rust.js +714 -0
  286. package/src/frontends/scalars.js +31 -1
  287. package/src/frontends/swift.js +893 -0
  288. package/src/frontends/types.js +750 -0
  289. package/src/language-registry.js +182 -12
  290. package/src/mapping.js +33 -9
  291. package/src/semantic/capabilities.js +671 -0
  292. package/src/semantic/effects.js +737 -0
  293. package/src/semantic/generics.js +58 -0
  294. package/src/semantic/lifetime.js +517 -0
  295. package/src/semantic/provenance.js +412 -19
  296. package/src/semantic/scalars.js +17 -0
  297. package/src/semantic/stdlib.js +921 -0
  298. package/src/semantic/types.js +810 -14
  299. package/src/semantic/validate.js +2934 -209
  300. package/src/stdlib-facades.js +1211 -0
  301. package/src/stdlib-negotiation.js +446 -0
  302. package/src/stdlib-providers.js +377 -0
  303. package/src/toolchains.js +16 -3
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Builds an ordered substitution map for a closed generic record application.
3
+ * @param {import("./types.js").RecordType} type - Closed record application.
4
+ * @param {import("./types.js").RecordDeclaration} declaration - Resolved declaration.
5
+ * @returns {Map<string, import("./types.js").SemanticValueType>} Substitutions.
6
+ */
7
+ export declare function recordTypeSubstitutions(type: import("./types.js").RecordType, declaration: import("./types.js").RecordDeclaration): Map<string, import("./types.js").SemanticValueType>;
8
+ /**
9
+ * Applies complete recursive substitution without mutating declaration-owned types.
10
+ * @param {import("./types.js").SemanticValueType} type - Open semantic type.
11
+ * @param {Map<string, import("./types.js").SemanticValueType>} substitutions - Closed substitutions.
12
+ * @returns {import("./types.js").SemanticValueType} Substituted type.
13
+ */
14
+ export declare function substituteValueType(type: import("./types.js").SemanticValueType, substitutions: Map<string, import("./types.js").SemanticValueType>): import("./types.js").SemanticValueType;
15
+ /**
16
+ * Checks whether a recursive type contains any declaration-scoped variable
17
+ * outside an explicitly visible identity set.
18
+ * @param {import("./types.js").SemanticValueType} type - Candidate open type.
19
+ * @param {Set<string>} [visibleParameterIds] - Exact variable identities permitted by the caller's lexical scope.
20
+ * @returns {boolean} Whether any non-visible type variable occurs.
21
+ */
22
+ export declare function typeContainsAnyVariable(type: import("./types.js").SemanticValueType, visibleParameterIds?: Set<string>): boolean;
23
+ //# sourceMappingURL=generics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generics.d.ts","sourceRoot":"","sources":["../../../src/semantic/generics.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAJjC,OAAO,YAAY,EAAE,UAIY,EAAE,WAAW,EAH9C,OAAO,YAAY,EAAE,iBAGyB,GAF5C,GAAG,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,iBAAiB,CAAC,CAO/D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAJ7B,OAAO,YAAY,EAAE,iBAIQ,EAAE,aAAa,EAH5C,GAAG,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,iBAAiB,CAGN,GAF1C,OAAO,YAAY,EAAE,iBAAiB,CAgBlD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAJjC,OAAO,YAAY,EAAE,iBAIY,EAAE,mBAAmB,AAH9D,CACA,EADQ,GAAG,CAAC,MAAM,CAGwD,GAFhE,OAAO,CAenB"}
@@ -0,0 +1,61 @@
1
+ // @ts-check
2
+ /**
3
+ * Builds an ordered substitution map for a closed generic record application.
4
+ * @param {import("./types.js").RecordType} type - Closed record application.
5
+ * @param {import("./types.js").RecordDeclaration} declaration - Resolved declaration.
6
+ * @returns {Map<string, import("./types.js").SemanticValueType>} Substitutions.
7
+ */
8
+ export function recordTypeSubstitutions(type, declaration) {
9
+ return new Map((declaration.typeParameters ?? []).map((parameter, index) => [
10
+ /** @type {string} */ (parameter.id),
11
+ /** @type {import("./types.js").SemanticValueType} */ (type.arguments?.[index])
12
+ ]));
13
+ }
14
+ /**
15
+ * Applies complete recursive substitution without mutating declaration-owned types.
16
+ * @param {import("./types.js").SemanticValueType} type - Open semantic type.
17
+ * @param {Map<string, import("./types.js").SemanticValueType>} substitutions - Closed substitutions.
18
+ * @returns {import("./types.js").SemanticValueType} Substituted type.
19
+ */
20
+ export function substituteValueType(type, substitutions) {
21
+ if (type.kind == "TypeVariableReference")
22
+ return substitutions.get(type.parameterId) ?? type;
23
+ if (type.kind == "ListType")
24
+ return { ...type, elementType: substituteValueType(type.elementType, substitutions) };
25
+ if (type.kind == "MapType" || type.kind == "OrderedMapType")
26
+ return {
27
+ ...type,
28
+ keyType: /** @type {import("./types.js").TypeReference} */ (substituteValueType(type.keyType, substitutions)),
29
+ valueType: substituteValueType(type.valueType, substitutions)
30
+ };
31
+ if (type.kind == "OptionalType")
32
+ return { ...type, valueType: substituteValueType(type.valueType, substitutions) };
33
+ if (type.kind == "RecordType" && type.arguments) {
34
+ return { ...type, arguments: type.arguments.map((argument) => substituteValueType(argument, substitutions)) };
35
+ }
36
+ return type;
37
+ }
38
+ /**
39
+ * Checks whether a recursive type contains any declaration-scoped variable
40
+ * outside an explicitly visible identity set.
41
+ * @param {import("./types.js").SemanticValueType} type - Candidate open type.
42
+ * @param {Set<string>} [visibleParameterIds] - Exact variable identities permitted by the caller's lexical scope.
43
+ * @returns {boolean} Whether any non-visible type variable occurs.
44
+ */
45
+ export function typeContainsAnyVariable(type, visibleParameterIds = new Set()) {
46
+ if (type.kind == "TypeVariableReference")
47
+ return !visibleParameterIds.has(type.parameterId);
48
+ if (type.kind == "RecordType") {
49
+ return type.arguments?.some((argument) => typeContainsAnyVariable(argument, visibleParameterIds)) ?? false;
50
+ }
51
+ if (type.kind == "ListType")
52
+ return typeContainsAnyVariable(type.elementType, visibleParameterIds);
53
+ if (type.kind == "MapType" || type.kind == "OrderedMapType") {
54
+ return typeContainsAnyVariable(type.keyType, visibleParameterIds) ||
55
+ typeContainsAnyVariable(type.valueType, visibleParameterIds);
56
+ }
57
+ if (type.kind == "OptionalType")
58
+ return typeContainsAnyVariable(type.valueType, visibleParameterIds);
59
+ return false;
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VtYW50aWMvZ2VuZXJpY3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQUksRUFBRSxXQUFXO0lBQ3ZELE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzFFLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxxREFBcUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoRixDQUFDLENBQUMsQ0FBQTtBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYTtJQUNyRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksdUJBQXVCO1FBQUUsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUE7SUFDNUYsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVU7UUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLEVBQUMsQ0FBQTtJQUNoSCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksZ0JBQWdCO1FBQUUsT0FBTztZQUNsRSxHQUFHLElBQUk7WUFDUCxPQUFPLEVBQUUsaURBQWlELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdHLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztTQUM5RCxDQUFBO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGNBQWM7UUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUMsQ0FBQTtJQUNoSCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxPQUFPLEVBQUMsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBQyxDQUFBO0lBQzdHLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsSUFBSSxFQUFFLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFFO0lBQzNFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSx1QkFBdUI7UUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMzRixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUMsSUFBSSxLQUFLLENBQUE7SUFDNUcsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVO1FBQUUsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUE7SUFDbEcsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDNUQsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDO1lBQy9ELHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGNBQWM7UUFBRSxPQUFPLHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtJQUVwRyxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBCdWlsZHMgYW4gb3JkZXJlZCBzdWJzdGl0dXRpb24gbWFwIGZvciBhIGNsb3NlZCBnZW5lcmljIHJlY29yZCBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWNvcmRUeXBlfSB0eXBlIC0gQ2xvc2VkIHJlY29yZCBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBSZXNvbHZlZCBkZWNsYXJhdGlvbi5cbiAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlPn0gU3Vic3RpdHV0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZFR5cGVTdWJzdGl0dXRpb25zKHR5cGUsIGRlY2xhcmF0aW9uKSB7XG4gIHJldHVybiBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PiBbXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXJhbWV0ZXIuaWQpLFxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gKi8gKHR5cGUuYXJndW1lbnRzPy5baW5kZXhdKVxuICBdKSlcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGNvbXBsZXRlIHJlY3Vyc2l2ZSBzdWJzdGl0dXRpb24gd2l0aG91dCBtdXRhdGluZyBkZWNsYXJhdGlvbi1vd25lZCB0eXBlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gdHlwZSAtIE9wZW4gc2VtYW50aWMgdHlwZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZT59IHN1YnN0aXR1dGlvbnMgLSBDbG9zZWQgc3Vic3RpdHV0aW9ucy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTdWJzdGl0dXRlZCB0eXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0ZVZhbHVlVHlwZSh0eXBlLCBzdWJzdGl0dXRpb25zKSB7XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikgcmV0dXJuIHN1YnN0aXR1dGlvbnMuZ2V0KHR5cGUucGFyYW1ldGVySWQpID8/IHR5cGVcbiAgaWYgKHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIpIHJldHVybiB7Li4udHlwZSwgZWxlbWVudFR5cGU6IHN1YnN0aXR1dGVWYWx1ZVR5cGUodHlwZS5lbGVtZW50VHlwZSwgc3Vic3RpdHV0aW9ucyl9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgdHlwZS5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikgcmV0dXJuIHtcbiAgICAuLi50eXBlLFxuICAgIGtleVR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5UeXBlUmVmZXJlbmNlfSAqLyAoc3Vic3RpdHV0ZVZhbHVlVHlwZSh0eXBlLmtleVR5cGUsIHN1YnN0aXR1dGlvbnMpKSxcbiAgICB2YWx1ZVR5cGU6IHN1YnN0aXR1dGVWYWx1ZVR5cGUodHlwZS52YWx1ZVR5cGUsIHN1YnN0aXR1dGlvbnMpXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSByZXR1cm4gey4uLnR5cGUsIHZhbHVlVHlwZTogc3Vic3RpdHV0ZVZhbHVlVHlwZSh0eXBlLnZhbHVlVHlwZSwgc3Vic3RpdHV0aW9ucyl9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIgJiYgdHlwZS5hcmd1bWVudHMpIHtcbiAgICByZXR1cm4gey4uLnR5cGUsIGFyZ3VtZW50czogdHlwZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCkgPT4gc3Vic3RpdHV0ZVZhbHVlVHlwZShhcmd1bWVudCwgc3Vic3RpdHV0aW9ucykpfVxuICB9XG5cbiAgcmV0dXJuIHR5cGVcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHJlY3Vyc2l2ZSB0eXBlIGNvbnRhaW5zIGFueSBkZWNsYXJhdGlvbi1zY29wZWQgdmFyaWFibGVcbiAqIG91dHNpZGUgYW4gZXhwbGljaXRseSB2aXNpYmxlIGlkZW50aXR5IHNldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gdHlwZSAtIENhbmRpZGF0ZSBvcGVuIHR5cGUuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbdmlzaWJsZVBhcmFtZXRlcklkc10gLSBFeGFjdCB2YXJpYWJsZSBpZGVudGl0aWVzIHBlcm1pdHRlZCBieSB0aGUgY2FsbGVyJ3MgbGV4aWNhbCBzY29wZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFueSBub24tdmlzaWJsZSB0eXBlIHZhcmlhYmxlIG9jY3Vycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVDb250YWluc0FueVZhcmlhYmxlKHR5cGUsIHZpc2libGVQYXJhbWV0ZXJJZHMgPSBuZXcgU2V0KCkpIHtcbiAgaWYgKHR5cGUua2luZCA9PSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiKSByZXR1cm4gIXZpc2libGVQYXJhbWV0ZXJJZHMuaGFzKHR5cGUucGFyYW1ldGVySWQpXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICByZXR1cm4gdHlwZS5hcmd1bWVudHM/LnNvbWUoKGFyZ3VtZW50KSA9PiB0eXBlQ29udGFpbnNBbnlWYXJpYWJsZShhcmd1bWVudCwgdmlzaWJsZVBhcmFtZXRlcklkcykpID8/IGZhbHNlXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIpIHJldHVybiB0eXBlQ29udGFpbnNBbnlWYXJpYWJsZSh0eXBlLmVsZW1lbnRUeXBlLCB2aXNpYmxlUGFyYW1ldGVySWRzKVxuICBpZiAodHlwZS5raW5kID09IFwiTWFwVHlwZVwiIHx8IHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICByZXR1cm4gdHlwZUNvbnRhaW5zQW55VmFyaWFibGUodHlwZS5rZXlUeXBlLCB2aXNpYmxlUGFyYW1ldGVySWRzKSB8fFxuICAgICAgdHlwZUNvbnRhaW5zQW55VmFyaWFibGUodHlwZS52YWx1ZVR5cGUsIHZpc2libGVQYXJhbWV0ZXJJZHMpXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSByZXR1cm4gdHlwZUNvbnRhaW5zQW55VmFyaWFibGUodHlwZS52YWx1ZVR5cGUsIHZpc2libGVQYXJhbWV0ZXJJZHMpXG5cbiAgcmV0dXJuIGZhbHNlXG59XG4iXX0=
@@ -0,0 +1,37 @@
1
+ export type LifetimeFail = (code: string, detail: string, location: import("./types.js").SourceLocation) => never;
2
+ export type OwnerState = {
3
+ kind: "open";
4
+ originId: string;
5
+ origin: import("./types.js").SourceLocation;
6
+ } | {
7
+ kind: "moved";
8
+ originId: string;
9
+ origin: import("./types.js").SourceLocation;
10
+ destination: string;
11
+ } | {
12
+ kind: "terminal";
13
+ originId: string;
14
+ origin: import("./types.js").SourceLocation;
15
+ closeSiteId: string | import("./types.js").SourceLocation;
16
+ };
17
+ export type LifetimeExit = {
18
+ kind: "normal" | "return" | "raise" | "break" | "continue";
19
+ state: Map<string, OwnerState>;
20
+ location?: import("./types.js").SourceLocation;
21
+ errorId?: string;
22
+ };
23
+ /** @typedef {(code: string, detail: string, location: import("./types.js").SourceLocation) => never} LifetimeFail */
24
+ /** @typedef {{kind: "open", originId: string, origin: import("./types.js").SourceLocation} | {kind: "moved", originId: string, origin: import("./types.js").SourceLocation, destination: string} | {kind: "terminal", originId: string, origin: import("./types.js").SourceLocation, closeSiteId: string | import("./types.js").SourceLocation}} OwnerState */
25
+ /** @typedef {{kind: "normal" | "return" | "raise" | "break" | "continue", state: Map<string, OwnerState>, location?: import("./types.js").SourceLocation, errorId?: string}} LifetimeExit */
26
+ /**
27
+ * Performs path-sensitive structured lifetime validation for Task 034 owned values.
28
+ * @param {import("./types.js").SemanticModule} module - Fully type-resolved module.
29
+ * @param {{functions: Map<string, Set<string>>, methods: Map<string, Set<string>>}} errorEffects - Complete escaping error sets per function and method.
30
+ * @param {LifetimeFail} fail - Located failure.
31
+ * @returns {void}
32
+ */
33
+ export declare function validateResourceLifetimes(module: import("./types.js").SemanticModule, errorEffects: {
34
+ functions: Map<string, Set<string>>;
35
+ methods: Map<string, Set<string>>;
36
+ }, fail: LifetimeFail): void;
37
+ //# sourceMappingURL=lifetime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifetime.d.ts","sourceRoot":"","sources":["../../../src/semantic/lifetime.js"],"names":[],"mappings":"AAEI,YAAkG,YAAY,GAApG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,YAAY,EAAE,cAAc,KAAK,KAAK,CAAc;AAC9G,YAA8U,UAAU,GAA9U;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,YAAY,EAAE,cAAc,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,YAAY,EAAE,cAAc,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,YAAY,EAAE,cAAc,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,OAAO,YAAY,EAAE,cAAc,CAAA;CAAC,CAAY;AACxV,YAA0K,YAAY,GAA5K;IAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAC,CAAc;AAF1L,qHAAqH;AACrH,+VAA+V;AAC/V,6LAA6L;AAE7L;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EALrC,OAAO,YAAY,EAAE,cAKgB,EAAE,YAAY,EAJnD;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;CAIpB,EAAE,IAAI,EAHzD,YAGyD,GAFvD,IAAI,CAYhB"}