semantifold 0.1.1 → 0.3.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 (399) hide show
  1. package/README.md +42 -10
  2. package/build/index.d.ts +32 -3
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +99 -4
  5. package/build/src/acceptance.d.ts +32 -0
  6. package/build/src/acceptance.d.ts.map +1 -0
  7. package/build/src/acceptance.js +358 -0
  8. package/build/src/array.d.ts +7 -0
  9. package/build/src/array.d.ts.map +1 -0
  10. package/build/src/array.js +18 -0
  11. package/build/src/artifact-path.d.ts +13 -0
  12. package/build/src/artifact-path.d.ts.map +1 -0
  13. package/build/src/artifact-path.js +30 -0
  14. package/build/src/artifacts.d.ts +7 -0
  15. package/build/src/artifacts.d.ts.map +1 -0
  16. package/build/src/artifacts.js +389 -0
  17. package/build/src/backends/c-runtime.d.ts +3 -0
  18. package/build/src/backends/c-runtime.d.ts.map +1 -0
  19. package/build/src/backends/c-runtime.js +151 -0
  20. package/build/src/backends/c-validation.d.ts +12 -0
  21. package/build/src/backends/c-validation.d.ts.map +1 -0
  22. package/build/src/backends/c-validation.js +85 -0
  23. package/build/src/backends/c.d.ts +31 -0
  24. package/build/src/backends/c.d.ts.map +1 -0
  25. package/build/src/backends/c.js +308 -0
  26. package/build/src/backends/cpp-runtime.d.ts +3 -0
  27. package/build/src/backends/cpp-runtime.d.ts.map +1 -0
  28. package/build/src/backends/cpp-runtime.js +99 -0
  29. package/build/src/backends/cpp-validation.d.ts +9 -0
  30. package/build/src/backends/cpp-validation.d.ts.map +1 -0
  31. package/build/src/backends/cpp-validation.js +74 -0
  32. package/build/src/backends/cpp.d.ts +16 -0
  33. package/build/src/backends/cpp.d.ts.map +1 -0
  34. package/build/src/backends/cpp.js +285 -0
  35. package/build/src/backends/csharp.d.ts +20 -0
  36. package/build/src/backends/csharp.d.ts.map +1 -0
  37. package/build/src/backends/csharp.js +259 -0
  38. package/build/src/backends/go.d.ts +20 -0
  39. package/build/src/backends/go.d.ts.map +1 -0
  40. package/build/src/backends/go.js +374 -0
  41. package/build/src/backends/identifiers.d.ts +12 -0
  42. package/build/src/backends/identifiers.d.ts.map +1 -1
  43. package/build/src/backends/identifiers.js +79 -2
  44. package/build/src/backends/index.d.ts.map +1 -1
  45. package/build/src/backends/index.js +27 -37
  46. package/build/src/backends/native-validation.d.ts +9 -0
  47. package/build/src/backends/native-validation.d.ts.map +1 -0
  48. package/build/src/backends/native-validation.js +59 -0
  49. package/build/src/backends/ordered-expressions.d.ts +74 -0
  50. package/build/src/backends/ordered-expressions.d.ts.map +1 -0
  51. package/build/src/backends/ordered-expressions.js +159 -0
  52. package/build/src/backends/python.d.ts +8 -0
  53. package/build/src/backends/python.d.ts.map +1 -0
  54. package/build/src/backends/python.js +162 -0
  55. package/build/src/backends/scalars.d.ts.map +1 -1
  56. package/build/src/backends/scalars.js +8 -2
  57. package/build/src/backends/shared.d.ts.map +1 -1
  58. package/build/src/backends/shared.js +67 -19
  59. package/build/src/binary-mapping.d.ts +32 -0
  60. package/build/src/binary-mapping.d.ts.map +1 -0
  61. package/build/src/binary-mapping.js +285 -0
  62. package/build/src/diagnostic.d.ts +36 -4
  63. package/build/src/diagnostic.d.ts.map +1 -1
  64. package/build/src/diagnostic.js +42 -3
  65. package/build/src/frontends/c-parser.d.ts +20 -0
  66. package/build/src/frontends/c-parser.d.ts.map +1 -0
  67. package/build/src/frontends/c-parser.js +14 -0
  68. package/build/src/frontends/c.d.ts +220 -0
  69. package/build/src/frontends/c.d.ts.map +1 -0
  70. package/build/src/frontends/c.js +750 -0
  71. package/build/src/frontends/cpp-parser.d.ts +11 -0
  72. package/build/src/frontends/cpp-parser.d.ts.map +1 -0
  73. package/build/src/frontends/cpp-parser.js +15 -0
  74. package/build/src/frontends/cpp.d.ts +227 -0
  75. package/build/src/frontends/cpp.d.ts.map +1 -0
  76. package/build/src/frontends/cpp.js +784 -0
  77. package/build/src/frontends/csharp.d.ts +14 -0
  78. package/build/src/frontends/csharp.d.ts.map +1 -0
  79. package/build/src/frontends/csharp.js +708 -0
  80. package/build/src/frontends/go.d.ts +15 -0
  81. package/build/src/frontends/go.d.ts.map +1 -0
  82. package/build/src/frontends/go.js +712 -0
  83. package/build/src/frontends/index.d.ts.map +1 -1
  84. package/build/src/frontends/index.js +5 -23
  85. package/build/src/frontends/python.d.ts +14 -0
  86. package/build/src/frontends/python.d.ts.map +1 -0
  87. package/build/src/frontends/python.js +615 -0
  88. package/build/src/frontends/scalars.d.ts.map +1 -1
  89. package/build/src/frontends/scalars.js +21 -1
  90. package/build/src/language-registry.d.ts +113 -0
  91. package/build/src/language-registry.d.ts.map +1 -0
  92. package/build/src/language-registry.js +421 -0
  93. package/build/src/mapping.js +3 -2
  94. package/build/src/semantic/location.d.ts +7 -0
  95. package/build/src/semantic/location.d.ts.map +1 -1
  96. package/build/src/semantic/location.js +10 -1
  97. package/build/src/semantic/provenance.js +3 -3
  98. package/build/src/semantic/types.d.ts +399 -2
  99. package/build/src/semantic/types.d.ts.map +1 -1
  100. package/build/src/semantic/types.js +110 -2
  101. package/build/src/subprocess.d.ts +38 -0
  102. package/build/src/subprocess.d.ts.map +1 -0
  103. package/build/src/subprocess.js +233 -0
  104. package/build/src/timeout.d.ts +8 -0
  105. package/build/src/timeout.d.ts.map +1 -0
  106. package/build/src/timeout.js +11 -0
  107. package/build/src/toolchains.d.ts +107 -0
  108. package/build/src/toolchains.d.ts.map +1 -0
  109. package/build/src/toolchains.js +417 -0
  110. package/docs/architecture.md +23 -5
  111. package/docs/c.md +60 -0
  112. package/docs/cpp.md +61 -0
  113. package/docs/goals.md +4 -2
  114. package/docs/language-support.md +46 -6
  115. package/docs/parser-qualification.md +219 -0
  116. package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
  117. package/docs/source-maps.md +38 -5
  118. package/docs/standard-library-portability.md +190 -0
  119. package/docs/testing.md +131 -3
  120. package/index.js +109 -4
  121. package/node_modules/node-addon-api/LICENSE.md +9 -0
  122. package/node_modules/node-addon-api/README.md +95 -0
  123. package/node_modules/node-addon-api/common.gypi +21 -0
  124. package/node_modules/node-addon-api/except.gypi +25 -0
  125. package/node_modules/node-addon-api/index.js +14 -0
  126. package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  127. package/node_modules/node-addon-api/napi-inl.h +7250 -0
  128. package/node_modules/node-addon-api/napi.h +3463 -0
  129. package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
  130. package/node_modules/node-addon-api/node_api.gyp +9 -0
  131. package/node_modules/node-addon-api/noexcept.gypi +26 -0
  132. package/node_modules/node-addon-api/nothing.c +0 -0
  133. package/node_modules/node-addon-api/package-support.json +21 -0
  134. package/node_modules/node-addon-api/package.json +481 -0
  135. package/node_modules/node-addon-api/tools/README.md +73 -0
  136. package/node_modules/node-addon-api/tools/check-napi.js +99 -0
  137. package/node_modules/node-addon-api/tools/clang-format.js +71 -0
  138. package/node_modules/node-addon-api/tools/conversion.js +301 -0
  139. package/node_modules/node-gyp-build/LICENSE +21 -0
  140. package/node_modules/node-gyp-build/README.md +58 -0
  141. package/node_modules/node-gyp-build/SECURITY.md +5 -0
  142. package/node_modules/node-gyp-build/bin.js +84 -0
  143. package/node_modules/node-gyp-build/build-test.js +19 -0
  144. package/node_modules/node-gyp-build/index.js +6 -0
  145. package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  146. package/node_modules/node-gyp-build/optional.js +7 -0
  147. package/node_modules/node-gyp-build/package.json +43 -0
  148. package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
  149. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
  150. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
  151. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
  152. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
  153. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
  154. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
  155. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  156. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  157. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  158. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  159. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
  160. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
  161. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
  162. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
  163. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
  164. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
  165. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
  166. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
  167. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  168. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  169. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
  170. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
  171. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
  172. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
  173. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
  174. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
  175. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
  176. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
  177. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  178. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  179. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
  180. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
  181. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  182. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  183. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
  184. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  185. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  186. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  187. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
  188. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  189. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  190. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
  191. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
  192. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  193. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
  194. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
  195. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
  196. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
  197. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
  198. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
  199. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
  200. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
  201. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  202. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  203. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
  204. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  205. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
  236. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
  237. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
  238. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
  239. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
  240. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
  241. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
  242. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
  243. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
  244. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
  245. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
  246. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
  247. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
  248. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
  249. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
  250. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
  251. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
  252. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
  253. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
  254. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
  255. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
  256. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
  257. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
  258. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
  259. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
  260. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
  261. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
  262. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
  263. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
  264. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
  265. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
  266. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
  267. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
  268. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
  269. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
  270. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
  271. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
  272. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
  273. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
  274. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
  275. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
  276. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
  277. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
  278. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
  279. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
  280. package/node_modules/tree-sitter/LICENSE +21 -0
  281. package/node_modules/tree-sitter/README.md +128 -0
  282. package/node_modules/tree-sitter/binding.gyp +88 -0
  283. package/node_modules/tree-sitter/index.js +950 -0
  284. package/node_modules/tree-sitter/package.json +76 -0
  285. package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  286. package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  287. package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
  288. package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  289. package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
  290. package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  291. package/node_modules/tree-sitter/src/addon_data.h +47 -0
  292. package/node_modules/tree-sitter/src/binding.cc +35 -0
  293. package/node_modules/tree-sitter/src/conversions.cc +140 -0
  294. package/node_modules/tree-sitter/src/conversions.h +22 -0
  295. package/node_modules/tree-sitter/src/language.cc +105 -0
  296. package/node_modules/tree-sitter/src/language.h +17 -0
  297. package/node_modules/tree-sitter/src/logger.cc +70 -0
  298. package/node_modules/tree-sitter/src/logger.h +19 -0
  299. package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  300. package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  301. package/node_modules/tree-sitter/src/node.cc +1088 -0
  302. package/node_modules/tree-sitter/src/node.h +30 -0
  303. package/node_modules/tree-sitter/src/parser.cc +332 -0
  304. package/node_modules/tree-sitter/src/parser.h +35 -0
  305. package/node_modules/tree-sitter/src/query.cc +425 -0
  306. package/node_modules/tree-sitter/src/query.h +40 -0
  307. package/node_modules/tree-sitter/src/tree.cc +316 -0
  308. package/node_modules/tree-sitter/src/tree.h +45 -0
  309. package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  310. package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  311. package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
  312. package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
  313. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  314. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  315. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
  316. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  317. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  318. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  319. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
  320. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  321. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  322. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
  323. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
  324. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  325. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
  326. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
  327. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
  328. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
  329. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
  330. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
  331. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
  332. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
  333. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
  334. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  335. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  336. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
  337. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  338. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
  339. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
  340. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
  341. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  342. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
  343. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  344. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
  345. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  346. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  347. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  348. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  349. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  350. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  351. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  352. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  353. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  354. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
  355. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
  356. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
  357. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
  358. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
  359. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  360. package/package.json +24 -6
  361. package/src/acceptance.js +380 -0
  362. package/src/array.js +19 -0
  363. package/src/artifact-path.js +34 -0
  364. package/src/artifacts.js +420 -0
  365. package/src/backends/c-runtime.js +151 -0
  366. package/src/backends/c-validation.js +83 -0
  367. package/src/backends/c.js +308 -0
  368. package/src/backends/cpp-runtime.js +99 -0
  369. package/src/backends/cpp-validation.js +70 -0
  370. package/src/backends/cpp.js +285 -0
  371. package/src/backends/csharp.js +270 -0
  372. package/src/backends/go.js +383 -0
  373. package/src/backends/identifiers.js +80 -1
  374. package/src/backends/index.js +23 -32
  375. package/src/backends/native-validation.js +64 -0
  376. package/src/backends/ordered-expressions.js +161 -0
  377. package/src/backends/python.js +175 -0
  378. package/src/backends/scalars.js +8 -1
  379. package/src/backends/shared.js +64 -17
  380. package/src/binary-mapping.js +305 -0
  381. package/src/diagnostic.js +34 -2
  382. package/src/frontends/c-parser.js +17 -0
  383. package/src/frontends/c.js +780 -0
  384. package/src/frontends/cpp-parser.js +18 -0
  385. package/src/frontends/cpp.js +816 -0
  386. package/src/frontends/csharp.js +759 -0
  387. package/src/frontends/go.js +770 -0
  388. package/src/frontends/index.js +5 -20
  389. package/src/frontends/python.js +689 -0
  390. package/src/frontends/scalars.js +20 -0
  391. package/src/language-registry.js +454 -0
  392. package/src/mapping.js +2 -1
  393. package/src/semantic/location.js +10 -0
  394. package/src/semantic/provenance.js +2 -2
  395. package/src/semantic/types.js +124 -1
  396. package/src/subprocess.js +232 -0
  397. package/src/timeout.js +12 -0
  398. package/src/toolchains.js +448 -0
  399. package/tsconfig.json +1 -0
@@ -15,6 +15,21 @@ function sourceTypeMap(entries) {
15
15
 
16
16
  /** @type {Readonly<Record<import("../semantic/types.js").SemanticLanguage, Map<string, import("../semantic/types.js").SemanticTypeName>>>} */
17
17
  const sourceScalarTypes = Object.freeze({
18
+ cpp: sourceTypeMap([["std::int64_t", "integer"], ["bool", "boolean"], ["std::string", "string"]]),
19
+ c: sourceTypeMap([["int64_t", "integer"], ["bool", "boolean"], ["SemantifoldString", "string"]]),
20
+ csharp: sourceTypeMap([
21
+ ["long", "integer"],
22
+ ["System.Int64", "integer"],
23
+ ["bool", "boolean"],
24
+ ["System.Boolean", "boolean"],
25
+ ["string", "string"],
26
+ ["System.String", "string"]
27
+ ]),
28
+ go: sourceTypeMap([
29
+ ["int64", "integer"],
30
+ ["bool", "boolean"],
31
+ ["string", "string"]
32
+ ]),
18
33
  java: sourceTypeMap([
19
34
  ["int", "integer"],
20
35
  ["boolean", "boolean"],
@@ -31,6 +46,11 @@ const sourceScalarTypes = Object.freeze({
31
46
  ["bool", "boolean"],
32
47
  ["string", "string"]
33
48
  ]),
49
+ python: sourceTypeMap([
50
+ ["int", "integer"],
51
+ ["bool", "boolean"],
52
+ ["str", "string"]
53
+ ]),
34
54
  ruby: sourceTypeMap([
35
55
  ["[Integer]", "integer"],
36
56
  ["[bool]", "boolean"],
@@ -0,0 +1,454 @@
1
+ // @ts-check
2
+
3
+ import {isDenseArray} from "./array.js"
4
+ import {SemantifoldDiagnostic, unsupportedRole} from "./diagnostic.js"
5
+ import {generateJava} from "./backends/java.js"
6
+ import {generateCSharpProject} from "./backends/csharp.js"
7
+ import {generateGoModule} from "./backends/go.js"
8
+ import {generateJavaScript} from "./backends/javascript.js"
9
+ import {generatePhp} from "./backends/php.js"
10
+ import {generatePython} from "./backends/python.js"
11
+ import {generateRuby} from "./backends/ruby.js"
12
+ import {generateTypeScript} from "./backends/typescript.js"
13
+ import {parseJava} from "./frontends/java.js"
14
+ import {parseCSharp} from "./frontends/csharp.js"
15
+ import {parseGo} from "./frontends/go.js"
16
+ import {parseCpp} from "./frontends/cpp.js"
17
+ import {generateCpp} from "./backends/cpp.js"
18
+ import {parseC} from "./frontends/c.js"
19
+ import {generateCProgram} from "./backends/c.js"
20
+ import {parseJavaScriptTypeScript} from "./frontends/javascript-typescript.js"
21
+ import {parsePhp} from "./frontends/php.js"
22
+ import {parsePython} from "./frontends/python.js"
23
+ import {parseRuby} from "./frontends/ruby.js"
24
+
25
+ const registryRoles = Object.freeze(["frontend", "textBackend", "binaryBackend", "applicationBackend", "interoperability"])
26
+ const acceptanceStageOrder = ["parse", "generate", "restore", "compile", "link", "validate", "instantiate", "execute"]
27
+ const acceptanceStages = new Map(acceptanceStageOrder.map((stage, index) => [stage, index]))
28
+ const registryKeys = new Set([
29
+ "acceptance", "applicationBackend", "artifactMultiplicity", "binaryBackend", "defaultFilename", "frontend", "id",
30
+ "interoperability", "mapping", "mediaType", "roundTrip", "textBackend"
31
+ ])
32
+
33
+ /** @typedef {"frontend" | "textBackend" | "binaryBackend" | "applicationBackend" | "interoperability"} RegistryRole */
34
+ /** @typedef {(input: {filename: string, source: string}) => import("./semantic/types.js").SemanticModule} Frontend */
35
+ /** @typedef {(...values: unknown[]) => unknown} RegistryImplementation */
36
+
37
+ /**
38
+ * @typedef LanguageRegistryRecord
39
+ * @property {string} id - Stable identity.
40
+ * @property {{stages: import("./semantic/types.js").AcceptanceStage[], toolchains: string[]}} acceptance - Acceptance declaration.
41
+ * @property {"single" | "multiple"} artifactMultiplicity - Artifact multiplicity.
42
+ * @property {import("./semantic/types.js").LanguageMappingCapabilities} mapping - Mapping capabilities.
43
+ * @property {boolean} roundTrip - Round-trip declaration.
44
+ * @property {string} [defaultFilename] - Default backend filename.
45
+ * @property {string} [mediaType] - Default backend media type.
46
+ * @property {RegistryImplementation} [frontend] - Frontend adapter.
47
+ * @property {RegistryImplementation} [textBackend] - Text backend.
48
+ * @property {RegistryImplementation} [binaryBackend] - Binary backend.
49
+ * @property {RegistryImplementation} [applicationBackend] - Application-artifact backend.
50
+ * @property {RegistryImplementation} [interoperability] - Interoperability bridge.
51
+ */
52
+
53
+ /**
54
+ * @typedef LanguageRegistry
55
+ * @property {readonly import("./semantic/types.js").LanguageCapabilities[]} descriptors - Public descriptors.
56
+ * @property {readonly string[]} ids - Registered IDs in stable order.
57
+ * @property {(id: string) => Readonly<LanguageRegistryRecord>} record - Exact record lookup.
58
+ * @property {(id: string, role: RegistryRole, location?: import("./semantic/types.js").SourceLocation) => RegistryImplementation} resolve - Role lookup.
59
+ */
60
+
61
+ /**
62
+ * Constructs an immutable role registry from ordered records.
63
+ * @param {unknown} candidateRecords - Ordered language records.
64
+ * @returns {Readonly<LanguageRegistry>} Registry.
65
+ */
66
+ export function createLanguageRegistry(candidateRecords) {
67
+ if (!isDenseArray(candidateRecords)) invalidRegistry("Registry records must be an ordered dense array.")
68
+
69
+ /** @type {Map<string, Readonly<LanguageRegistryRecord>>} */
70
+ const recordsById = new Map()
71
+ /** @type {import("./semantic/types.js").LanguageCapabilities[]} */
72
+ const descriptors = []
73
+
74
+ for (let recordIndex = 0; recordIndex < candidateRecords.length; recordIndex += 1) {
75
+ const candidate = candidateRecords[recordIndex]
76
+
77
+ if (!isPlainObject(candidate)) invalidRegistry("Every registry record must be a plain object.")
78
+ const id = candidate.id
79
+
80
+ if (typeof id != "string" || id.length == 0 || !/^[a-z][a-z0-9-]*$/u.test(id)) {
81
+ invalidRegistry("Every registry record requires a stable lowercase ID.", typeof id == "string" ? id : undefined)
82
+ }
83
+ if (recordsById.has(id)) invalidRegistry(`Duplicate registry ID '${id}'.`, id)
84
+ if (Object.keys(candidate).some((key) => !registryKeys.has(key))) invalidRegistry(`Registry record '${id}' has unknown fields.`, id)
85
+
86
+ for (const role of registryRoles) {
87
+ if (candidate[role] !== undefined && typeof candidate[role] != "function") {
88
+ invalidRegistry(`Registry role '${role}' for '${id}' must be a function when present.`, id)
89
+ }
90
+ }
91
+ const artifactMultiplicity = candidate.artifactMultiplicity
92
+
93
+ if (artifactMultiplicity != "single" && artifactMultiplicity != "multiple") {
94
+ invalidRegistry(`Registry record '${id}' has an invalid artifact multiplicity.`, id)
95
+ }
96
+ if (typeof candidate.roundTrip != "boolean") invalidRegistry(`Registry record '${id}' requires a Boolean round-trip declaration.`, id)
97
+ const mappingCandidate = candidate.mapping
98
+
99
+ if (!isPlainObject(mappingCandidate)) invalidRegistry(`Registry record '${id}' has an invalid mapping declaration.`, id)
100
+ const mappingSnapshot = {
101
+ binaryRanges: mappingCandidate.binaryRanges,
102
+ richText: mappingCandidate.richText,
103
+ sourceMapV3: mappingCandidate.sourceMapV3
104
+ }
105
+
106
+ if (typeof mappingSnapshot.richText != "boolean" || typeof mappingSnapshot.sourceMapV3 != "boolean" ||
107
+ typeof mappingSnapshot.binaryRanges != "boolean") {
108
+ invalidRegistry(`Registry record '${id}' has an invalid mapping declaration.`, id)
109
+ }
110
+ const mapping = deepFreeze(/** @type {import("./semantic/types.js").LanguageMappingCapabilities} */ (mappingSnapshot))
111
+ const acceptanceCandidate = candidate.acceptance
112
+
113
+ if (!isPlainObject(acceptanceCandidate) || !isDenseArray(acceptanceCandidate.stages) ||
114
+ !isDenseArray(acceptanceCandidate.toolchains)) {
115
+ invalidRegistry(`Registry record '${id}' has an invalid acceptance declaration.`, id)
116
+ }
117
+ /** @type {unknown[]} */
118
+ const stageSnapshot = []
119
+ /** @type {unknown[]} */
120
+ const toolchainSnapshot = []
121
+
122
+ for (let index = 0; index < acceptanceCandidate.stages.length; index += 1) {
123
+ stageSnapshot.push(acceptanceCandidate.stages[index])
124
+ }
125
+ for (let index = 0; index < acceptanceCandidate.toolchains.length; index += 1) {
126
+ toolchainSnapshot.push(acceptanceCandidate.toolchains[index])
127
+ }
128
+ if (!stageSnapshot.every((stage) => typeof stage == "string" && acceptanceStages.has(stage)) ||
129
+ !toolchainSnapshot.every((toolchain) => typeof toolchain == "string" && toolchain.length > 0)) {
130
+ invalidRegistry(`Registry record '${id}' has an invalid acceptance declaration.`, id)
131
+ }
132
+ const stages = /** @type {import("./semantic/types.js").AcceptanceStage[]} */ (stageSnapshot)
133
+ const toolchains = /** @type {string[]} */ (toolchainSnapshot)
134
+ let previousStage = -1
135
+ const declaredStages = new Set()
136
+
137
+ for (const stage of stages) {
138
+ const stageIndex = /** @type {number} */ (acceptanceStages.get(/** @type {string} */ (stage)))
139
+
140
+ if (declaredStages.has(stage) || stageIndex < previousStage) invalidRegistry(`Registry record '${id}' has unordered or duplicate acceptance stages.`, id)
141
+ declaredStages.add(stage)
142
+ previousStage = stageIndex
143
+ }
144
+ if (new Set(toolchains).size != toolchains.length) {
145
+ invalidRegistry(`Registry record '${id}' has duplicate acceptance toolchains.`, id)
146
+ }
147
+
148
+ const hasFrontend = typeof candidate.frontend == "function"
149
+ const hasTextBackend = typeof candidate.textBackend == "function"
150
+ const hasBinaryBackend = typeof candidate.binaryBackend == "function"
151
+ const hasApplicationBackend = typeof candidate.applicationBackend == "function"
152
+ const hasBackend = hasTextBackend || hasBinaryBackend || hasApplicationBackend
153
+
154
+ if ((mapping.richText || mapping.sourceMapV3) && !hasTextBackend ||
155
+ mapping.sourceMapV3 && !mapping.richText ||
156
+ mapping.binaryRanges && !hasBinaryBackend && !hasApplicationBackend) {
157
+ invalidRegistry(`Registry record '${id}' declares mapping support without its required backend role.`, id)
158
+ }
159
+ if (candidate.roundTrip && (!hasFrontend || !hasBackend)) {
160
+ invalidRegistry(`Registry record '${id}' declares round-trip support without frontend and backend roles.`, id)
161
+ }
162
+ if (stages.includes("parse") && !hasFrontend || stages.includes("generate") && !hasBackend) {
163
+ invalidRegistry(`Registry record '${id}' declares an acceptance stage without its required role.`, id)
164
+ }
165
+
166
+ if ((hasBackend || candidate.defaultFilename !== undefined) &&
167
+ (typeof candidate.defaultFilename != "string" || candidate.defaultFilename.length == 0)) {
168
+ invalidRegistry(`Registry backend '${id}' requires a default filename.`, id)
169
+ }
170
+ if ((hasBackend || candidate.mediaType !== undefined) &&
171
+ (typeof candidate.mediaType != "string" || candidate.mediaType.length == 0)) {
172
+ invalidRegistry(`Registry backend '${id}' requires a media type.`, id)
173
+ }
174
+
175
+ const acceptance = deepFreeze(/** @type {import("./semantic/types.js").LanguageAcceptanceCapabilities} */ ({
176
+ stages,
177
+ toolchains
178
+ }))
179
+ const record = deepFreeze(/** @type {LanguageRegistryRecord} */ ({
180
+ acceptance,
181
+ artifactMultiplicity,
182
+ id,
183
+ mapping,
184
+ roundTrip: candidate.roundTrip,
185
+ ...(typeof candidate.defaultFilename == "string" ? {defaultFilename: candidate.defaultFilename} : {}),
186
+ ...(typeof candidate.mediaType == "string" ? {mediaType: candidate.mediaType} : {}),
187
+ ...(typeof candidate.frontend == "function" ? {frontend: candidate.frontend} : {}),
188
+ ...(typeof candidate.textBackend == "function" ? {textBackend: candidate.textBackend} : {}),
189
+ ...(typeof candidate.binaryBackend == "function" ? {binaryBackend: candidate.binaryBackend} : {}),
190
+ ...(typeof candidate.applicationBackend == "function" ? {applicationBackend: candidate.applicationBackend} : {}),
191
+ ...(typeof candidate.interoperability == "function" ? {interoperability: candidate.interoperability} : {})
192
+ }))
193
+ const descriptor = deepFreeze(/** @type {import("./semantic/types.js").LanguageCapabilities} */ ({
194
+ acceptance,
195
+ artifactMultiplicity,
196
+ id,
197
+ mapping,
198
+ roles: {
199
+ applicationBackend: typeof candidate.applicationBackend == "function",
200
+ binaryBackend: typeof candidate.binaryBackend == "function",
201
+ frontend: typeof candidate.frontend == "function",
202
+ interoperability: typeof candidate.interoperability == "function",
203
+ textBackend: typeof candidate.textBackend == "function"
204
+ },
205
+ roundTrip: candidate.roundTrip
206
+ }))
207
+
208
+ recordsById.set(id, record)
209
+ descriptors.push(descriptor)
210
+ }
211
+
212
+ const frozenDescriptors = deepFreeze(descriptors)
213
+ const ids = Object.freeze(frozenDescriptors.map(({id}) => id))
214
+
215
+ return Object.freeze({
216
+ descriptors: frozenDescriptors,
217
+ ids,
218
+ record(id) {
219
+ const record = recordsById.get(id)
220
+
221
+ if (!record) unsupportedLanguage(id)
222
+
223
+ return record
224
+ },
225
+ resolve(id, role, location) {
226
+ if (!registryRoles.includes(role)) invalidRegistry(`Unknown registry role '${role}'.`, id)
227
+ const record = recordsById.get(id)
228
+
229
+ if (!record) unsupportedLanguage(id, location, role)
230
+ const implementation = record[role]
231
+
232
+ if (typeof implementation != "function") unsupportedRole(id, publicRoleName(role), location)
233
+
234
+ return implementation
235
+ }
236
+ })
237
+ }
238
+
239
+ /**
240
+ * PHP registry frontend wrapper.
241
+ * @type {Frontend}
242
+ */
243
+ const phpFrontend = ({filename, source}) => parsePhp({filename, source})
244
+
245
+ /**
246
+ * Ruby registry frontend wrapper.
247
+ * @type {Frontend}
248
+ */
249
+ const rubyFrontend = ({filename, source}) => parseRuby({filename, source})
250
+
251
+ /**
252
+ * JavaScript registry frontend wrapper.
253
+ * @type {Frontend}
254
+ */
255
+ const javaScriptFrontend = ({filename, source}) => parseJavaScriptTypeScript({filename, language: "javascript", source})
256
+
257
+ /**
258
+ * TypeScript registry frontend wrapper.
259
+ * @type {Frontend}
260
+ */
261
+ const typeScriptFrontend = ({filename, source}) => parseJavaScriptTypeScript({filename, language: "typescript", source})
262
+
263
+ /**
264
+ * Java registry frontend wrapper.
265
+ * @type {Frontend}
266
+ */
267
+ const javaFrontend = ({filename, source}) => parseJava({filename, source})
268
+
269
+ /**
270
+ * Python registry frontend wrapper.
271
+ * @type {Frontend}
272
+ */
273
+ const pythonFrontend = ({filename, source}) => parsePython({filename, source})
274
+
275
+ /**
276
+ * C# registry frontend wrapper.
277
+ * @type {Frontend}
278
+ */
279
+ const csharpFrontend = ({filename, source}) => parseCSharp({filename, source})
280
+
281
+ /**
282
+ * Go registry frontend wrapper.
283
+ * @type {Frontend}
284
+ */
285
+ const goFrontend = ({filename, source}) => parseGo({filename, source})
286
+
287
+ const records = [
288
+ language({
289
+ acceptance: {stages: ["parse", "generate", "execute"], toolchains: ["php"]},
290
+ defaultFilename: "program.php",
291
+ frontend: phpFrontend,
292
+ id: "php",
293
+ mediaType: "application/x-httpd-php",
294
+ textBackend: generatePhp
295
+ }),
296
+ language({
297
+ acceptance: {stages: ["parse", "generate", "execute"], toolchains: ["ruby"]},
298
+ defaultFilename: "program.rb",
299
+ frontend: rubyFrontend,
300
+ id: "ruby",
301
+ mediaType: "text/x-ruby",
302
+ textBackend: generateRuby
303
+ }),
304
+ language({
305
+ acceptance: {stages: ["parse", "generate", "execute"], toolchains: ["node"]},
306
+ defaultFilename: "program.js",
307
+ frontend: javaScriptFrontend,
308
+ id: "javascript",
309
+ mediaType: "text/javascript",
310
+ textBackend: generateJavaScript
311
+ }),
312
+ language({
313
+ acceptance: {stages: ["parse", "generate", "compile", "execute"], toolchains: ["tsc", "node"]},
314
+ defaultFilename: "program.ts",
315
+ frontend: typeScriptFrontend,
316
+ id: "typescript",
317
+ mediaType: "text/typescript",
318
+ textBackend: generateTypeScript
319
+ }),
320
+ language({
321
+ acceptance: {stages: ["parse", "generate", "compile", "execute"], toolchains: ["javac", "java"]},
322
+ defaultFilename: "Main.java",
323
+ frontend: javaFrontend,
324
+ id: "java",
325
+ mediaType: "text/x-java-source",
326
+ textBackend: generateJava
327
+ }),
328
+ language({
329
+ acceptance: {stages: ["parse", "generate", "compile", "execute"], toolchains: ["python"]},
330
+ defaultFilename: "program.py",
331
+ frontend: pythonFrontend,
332
+ id: "python",
333
+ mediaType: "text/x-python",
334
+ textBackend: generatePython
335
+ }),
336
+ language({
337
+ acceptance: {stages: ["parse", "generate", "restore", "compile", "execute"], toolchains: ["dotnet"]},
338
+ artifactMultiplicity: "multiple",
339
+ defaultFilename: "Program.cs",
340
+ frontend: csharpFrontend,
341
+ id: "csharp",
342
+ mediaType: "text/x-csharp",
343
+ textBackend: generateCSharpProject
344
+ }),
345
+ language({
346
+ acceptance: {stages: ["parse", "generate", "compile", "validate", "execute"], toolchains: ["go"]},
347
+ artifactMultiplicity: "multiple",
348
+ defaultFilename: "main.go",
349
+ frontend: goFrontend,
350
+ id: "go",
351
+ mediaType: "text/x-go",
352
+ textBackend: generateGoModule
353
+ }),
354
+ language({
355
+ acceptance: {stages: ["parse", "generate", "compile", "link", "execute"], toolchains: ["clang"]},
356
+ artifactMultiplicity: "multiple",
357
+ defaultFilename: "program.c",
358
+ frontend: parseC,
359
+ id: "c",
360
+ mediaType: "text/x-c",
361
+ textBackend: generateCProgram
362
+ }),
363
+ language({
364
+ acceptance: {stages: ["parse", "generate", "compile", "link", "execute"], toolchains: ["clangpp"]},
365
+ defaultFilename: "program.cpp", frontend: parseCpp, id: "cpp", mediaType: "text/x-c++src", textBackend: generateCpp
366
+ })
367
+ ]
368
+
369
+ export const languageRegistry = createLanguageRegistry(records)
370
+ export const languageCapabilities = languageRegistry.descriptors
371
+ /** @type {readonly import("./semantic/types.js").SemanticLanguage[]} */
372
+ export const supportedLanguages = Object.freeze(languageCapabilities
373
+ .filter(({roles}) => roles.frontend && roles.textBackend)
374
+ .map(({id}) => /** @type {import("./semantic/types.js").SemanticLanguage} */ (id)))
375
+
376
+ /**
377
+ * Supplies common original-five capability declarations.
378
+ * @param {Record<string, unknown>} values - Language-specific record fields.
379
+ * @returns {Record<string, unknown>} Complete record.
380
+ */
381
+ function language(values) {
382
+ return {
383
+ artifactMultiplicity: "single",
384
+ mapping: {binaryRanges: false, richText: true, sourceMapV3: true},
385
+ roundTrip: true,
386
+ ...values
387
+ }
388
+ }
389
+
390
+ /**
391
+ * Formats an internal registry key for a public role diagnostic.
392
+ * @param {string} role - Internal role key.
393
+ * @returns {string} Public role name.
394
+ */
395
+ function publicRoleName(role) {
396
+ if (role == "textBackend") return "text backend"
397
+ if (role == "binaryBackend") return "binary backend"
398
+ if (role == "applicationBackend") return "application-artifact backend"
399
+
400
+ return role
401
+ }
402
+
403
+ /**
404
+ * Throws an unknown-language diagnostic.
405
+ * @param {string} id - Unknown identity.
406
+ * @param {import("./semantic/types.js").SourceLocation | undefined} [location] - Related location.
407
+ * @param {RegistryRole | undefined} [role] - Requested role.
408
+ * @returns {never} Always throws.
409
+ */
410
+ function unsupportedLanguage(id, location, role) {
411
+ const message = role == "frontend" ? "No frontend adapter is registered for this language." :
412
+ role == "textBackend" ? "No source backend is registered for this language." :
413
+ "No language or target is registered for this ID."
414
+
415
+ throw new SemantifoldDiagnostic({
416
+ code: "UNSUPPORTED_LANGUAGE",
417
+ language: id,
418
+ location,
419
+ message
420
+ })
421
+ }
422
+
423
+ /**
424
+ * Throws a normalized registry-shape diagnostic.
425
+ * @param {string} message - Failure detail.
426
+ * @param {string | undefined} [id] - Candidate registry ID.
427
+ * @returns {never} Always throws.
428
+ */
429
+ function invalidRegistry(message, id = "registry") {
430
+ throw new SemantifoldDiagnostic({code: "INVALID_REGISTRY", language: id, message})
431
+ }
432
+
433
+ /**
434
+ * Checks for an ordinary string-keyed object.
435
+ * @param {unknown} value - Candidate value.
436
+ * @returns {value is Record<string, unknown>} Whether the value is a plain object.
437
+ */
438
+ function isPlainObject(value) {
439
+ return typeof value == "object" && value != null && !Array.isArray(value) && Object.getPrototypeOf(value) == Object.prototype
440
+ }
441
+
442
+ /**
443
+ * Deeply freezes registry records and public descriptors.
444
+ * @template T
445
+ * @param {T} value - Registry-owned value.
446
+ * @returns {T} Frozen value.
447
+ */
448
+ function deepFreeze(value) {
449
+ if (!value || typeof value != "object" || Object.isFrozen(value)) return value
450
+
451
+ for (const nested of Object.values(value)) deepFreeze(nested)
452
+
453
+ return Object.freeze(value)
454
+ }
package/src/mapping.js CHANGED
@@ -1104,7 +1104,8 @@ function validPoint(value) {
1104
1104
  * @returns {value is import("./semantic/types.js").SemanticLanguage} Whether supported.
1105
1105
  */
1106
1106
  function isLanguage(value) {
1107
- return value == "php" || value == "ruby" || value == "javascript" || value == "typescript" || value == "java"
1107
+ return value == "php" || value == "ruby" || value == "javascript" || value == "typescript" || value == "java" ||
1108
+ value == "python" || value == "csharp" || value == "go" || value == "c" || value == "cpp"
1108
1109
  }
1109
1110
 
1110
1111
  /**
@@ -143,6 +143,16 @@ export function locationFromOffsets(filename, source, startOffset, endOffset) {
143
143
  }
144
144
  }
145
145
 
146
+ /**
147
+ * Checks the one-based lexicographic order of a source range's endpoints.
148
+ * @param {import("./types.js").SourcePoint} start - Inclusive range start.
149
+ * @param {import("./types.js").SourcePoint} end - Exclusive range end.
150
+ * @returns {boolean} Whether end is at or after start.
151
+ */
152
+ export function isSourceRangeOrdered(start, end) {
153
+ return end.line > start.line || end.line == start.line && end.column >= start.column
154
+ }
155
+
146
156
  /**
147
157
  * Builds a location spanning a complete source file.
148
158
  * @param {string} filename - Originating filename.
@@ -185,7 +185,7 @@ export function createGenerationIndex(module, providedSources = []) {
185
185
  */
186
186
  function addSource(filename, content, language) {
187
187
  if (typeof filename != "string" || content !== null && typeof content != "string" ||
188
- language !== null && !["php", "ruby", "javascript", "typescript", "java"].includes(language)) {
188
+ language !== null && !["php", "ruby", "javascript", "typescript", "java", "python", "csharp", "go", "c", "cpp"].includes(language)) {
189
189
  throw new TypeError("Malformed semantic source registry entry.")
190
190
  }
191
191
 
@@ -242,7 +242,7 @@ function usableSourceProvenance(provenance) {
242
242
  if (!source || typeof source.id != "string" || sourceIds.has(source.id) || typeof source.filename != "string" ||
243
243
  source.filename.length == 0 ||
244
244
  source.content !== null && typeof source.content != "string" || source.language !== null &&
245
- !["php", "ruby", "javascript", "typescript", "java"].includes(source.language)) return undefined
245
+ !["php", "ruby", "javascript", "typescript", "java", "python", "csharp", "go", "c", "cpp"].includes(source.language)) return undefined
246
246
  sourceIds.add(source.id)
247
247
  }
248
248