semantifold 0.5.0 → 0.7.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 (201) hide show
  1. package/README.md +15 -9
  2. package/build/index.d.ts +8 -8
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +6 -6
  5. package/build/src/backends/android.js +8 -4
  6. package/build/src/backends/dart.d.ts +19 -0
  7. package/build/src/backends/dart.d.ts.map +1 -1
  8. package/build/src/backends/dart.js +28 -16
  9. package/build/src/backends/flutter.d.ts +51 -0
  10. package/build/src/backends/flutter.d.ts.map +1 -0
  11. package/build/src/backends/flutter.js +1362 -0
  12. package/build/src/backends/identifiers.d.ts +6 -0
  13. package/build/src/backends/identifiers.d.ts.map +1 -1
  14. package/build/src/backends/identifiers.js +28 -5
  15. package/build/src/backends/ios.js +2 -2
  16. package/build/src/backends/native-validation.d.ts +2 -2
  17. package/build/src/backends/native-validation.d.ts.map +1 -1
  18. package/build/src/backends/native-validation.js +2 -2
  19. package/build/src/backends/program.d.ts +4 -4
  20. package/build/src/backends/program.d.ts.map +1 -1
  21. package/build/src/backends/program.js +4 -4
  22. package/build/src/backends/scalars.d.ts.map +1 -1
  23. package/build/src/backends/scalars.js +2 -1
  24. package/build/src/backends/shared.d.ts +7 -0
  25. package/build/src/backends/shared.d.ts.map +1 -1
  26. package/build/src/backends/shared.js +14 -9
  27. package/build/src/backends/zig-runtime.d.ts +5 -0
  28. package/build/src/backends/zig-runtime.d.ts.map +1 -0
  29. package/build/src/backends/zig-runtime.js +92 -0
  30. package/build/src/backends/zig-validation.d.ts +9 -0
  31. package/build/src/backends/zig-validation.d.ts.map +1 -0
  32. package/build/src/backends/zig-validation.js +73 -0
  33. package/build/src/backends/zig.d.ts +42 -0
  34. package/build/src/backends/zig.d.ts.map +1 -0
  35. package/build/src/backends/zig.js +584 -0
  36. package/build/src/frontends/scalars.d.ts.map +1 -1
  37. package/build/src/frontends/scalars.js +2 -1
  38. package/build/src/frontends/zig-parser.d.ts +31 -0
  39. package/build/src/frontends/zig-parser.d.ts.map +1 -0
  40. package/build/src/frontends/zig-parser.js +17 -0
  41. package/build/src/frontends/zig.d.ts +14 -0
  42. package/build/src/frontends/zig.d.ts.map +1 -0
  43. package/build/src/frontends/zig.js +970 -0
  44. package/build/src/language-registry.d.ts.map +1 -1
  45. package/build/src/language-registry.js +40 -1
  46. package/build/src/mapping.js +2 -2
  47. package/build/src/semantic/provenance.js +3 -3
  48. package/build/src/semantic/types.d.ts +154 -4
  49. package/build/src/semantic/types.d.ts.map +1 -1
  50. package/build/src/semantic/types.js +39 -3
  51. package/build/src/semantic/validate.js +2 -2
  52. package/build/src/toolchains.d.ts +6 -0
  53. package/build/src/toolchains.d.ts.map +1 -1
  54. package/build/src/toolchains.js +2 -1
  55. package/build/src/zig-bindings.d.ts +10 -0
  56. package/build/src/zig-bindings.d.ts.map +1 -0
  57. package/build/src/zig-bindings.js +54 -0
  58. package/docs/android.md +7 -3
  59. package/docs/architecture.md +13 -5
  60. package/docs/flutter.md +47 -0
  61. package/docs/goals.md +1 -1
  62. package/docs/language-support.md +16 -5
  63. package/docs/parser-qualification.md +31 -1
  64. package/docs/source-maps.md +7 -3
  65. package/docs/testing.md +47 -4
  66. package/docs/zig.md +33 -0
  67. package/index.js +5 -5
  68. package/node_modules/semantifold-tree-sitter-zig-internal/LICENSE +15 -0
  69. package/node_modules/semantifold-tree-sitter-zig-internal/README.md +5 -0
  70. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/LICENSE +21 -0
  71. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/README.md +21 -0
  72. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/binding.gyp +29 -0
  73. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/bindings/node/binding.cc +20 -0
  74. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/bindings/node/binding_test.js +9 -0
  75. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/bindings/node/index.d.ts +28 -0
  76. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/bindings/node/index.js +11 -0
  77. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/grammar.js +900 -0
  78. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/package.json +57 -0
  79. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/darwin-arm64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
  80. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/darwin-x64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
  81. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/linux-arm64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
  82. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/linux-x64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
  83. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/win32-arm64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
  84. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/win32-x64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
  85. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/queries/folds.scm +23 -0
  86. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/queries/highlights.scm +291 -0
  87. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/queries/indents.scm +22 -0
  88. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/queries/injections.scm +10 -0
  89. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/grammar.json +6570 -0
  90. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/node-types.json +3178 -0
  91. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/parser.c +169829 -0
  92. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/tree_sitter/alloc.h +54 -0
  93. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/tree_sitter/array.h +291 -0
  94. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/tree_sitter/parser.h +266 -0
  95. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/tree-sitter-zig.wasm +0 -0
  96. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/tree-sitter.json +38 -0
  97. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/LICENSE +21 -0
  98. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/README.md +128 -0
  99. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/binding.gyp +80 -0
  100. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/index.js +916 -0
  101. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/package.json +76 -0
  102. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  103. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  104. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
  105. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  106. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
  107. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  108. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
  109. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/binding.cc +35 -0
  110. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
  111. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/conversions.h +22 -0
  112. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/language.cc +106 -0
  113. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/language.h +17 -0
  114. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/logger.cc +70 -0
  115. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/logger.h +19 -0
  116. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  117. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  118. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/node.cc +1088 -0
  119. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/node.h +30 -0
  120. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/parser.cc +306 -0
  121. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/parser.h +35 -0
  122. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/query.cc +397 -0
  123. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/query.h +40 -0
  124. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/tree.cc +316 -0
  125. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/tree.h +45 -0
  126. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  127. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  128. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/tree-sitter.d.ts +1042 -0
  129. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1318 -0
  130. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  131. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  132. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
  133. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  134. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  135. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  136. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
  137. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  138. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  139. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +223 -0
  140. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +297 -0
  141. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  142. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +435 -0
  143. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
  144. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
  145. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +920 -0
  146. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2165 -0
  147. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +266 -0
  148. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
  149. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +206 -0
  150. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4187 -0
  151. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  152. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  153. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
  154. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +130 -0
  155. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1066 -0
  156. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
  157. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
  158. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  159. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +712 -0
  160. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  161. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
  162. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  163. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  164. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  165. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  166. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  167. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  168. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  169. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  170. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  171. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +83 -0
  172. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
  173. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
  174. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1302 -0
  175. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1859 -0
  176. package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  177. package/node_modules/semantifold-tree-sitter-zig-internal/package.json +21 -0
  178. package/node_modules/semantifold-tree-sitter-zig-internal/src/zig.js +134 -0
  179. package/package.json +11 -6
  180. package/src/backends/android.js +7 -3
  181. package/src/backends/dart.js +28 -15
  182. package/src/backends/flutter.js +1465 -0
  183. package/src/backends/identifiers.js +28 -4
  184. package/src/backends/ios.js +1 -1
  185. package/src/backends/native-validation.js +1 -1
  186. package/src/backends/program.js +3 -3
  187. package/src/backends/scalars.js +1 -0
  188. package/src/backends/shared.js +15 -11
  189. package/src/backends/zig-runtime.js +93 -0
  190. package/src/backends/zig-validation.js +68 -0
  191. package/src/backends/zig.js +579 -0
  192. package/src/frontends/scalars.js +1 -0
  193. package/src/frontends/zig-parser.js +20 -0
  194. package/src/frontends/zig.js +994 -0
  195. package/src/language-registry.js +40 -0
  196. package/src/mapping.js +1 -1
  197. package/src/semantic/provenance.js +2 -2
  198. package/src/semantic/types.js +41 -2
  199. package/src/semantic/validate.js +1 -1
  200. package/src/toolchains.js +1 -0
  201. package/src/zig-bindings.js +46 -0
@@ -2,13 +2,14 @@
2
2
 
3
3
  import {unsupportedCapability} from "../diagnostic.js"
4
4
 
5
- /** @type {Record<Exclude<import("../semantic/types.js").BackendLanguage, "ios">, RegExp>} */
5
+ /** @type {Record<Exclude<import("../semantic/types.js").BackendLanguage, "ios" | "flutter">, RegExp>} */
6
6
  const identifierPatterns = {
7
7
  android: /^(?:_|\p{L})(?:_|\p{L}|\p{Nd})*$/u,
8
8
  dart: /^(?:_|\p{L})(?:_|\p{L}|\p{Nd})*$/u,
9
9
  kotlin: /^(?:_|\p{L})(?:_|\p{L}|\p{Nd})*$/u,
10
10
  swift: /^(?:_|\p{XID_Start})(?:_|\p{XID_Continue})*$/u,
11
11
  rust: /^[A-Za-z_][A-Za-z0-9_]*$/u,
12
+ zig: /^[A-Za-z_][A-Za-z0-9_]*$/u,
12
13
  cpp: /^[A-Za-z][A-Za-z0-9_]*$/u,
13
14
  c: /^[A-Za-z][A-Za-z0-9_]*$/u,
14
15
  csharp: /^[A-Za-z_][A-Za-z0-9_]*$/u,
@@ -22,7 +23,7 @@ const identifierPatterns = {
22
23
  wasm: /^(?:[$_]|\p{XID_Start})(?:[$_]|\p{XID_Continue})*$/u
23
24
  }
24
25
 
25
- /** @type {Record<Exclude<import("../semantic/types.js").BackendLanguage, "ios">, Set<string>>} */
26
+ /** @type {Record<Exclude<import("../semantic/types.js").BackendLanguage, "ios" | "flutter">, Set<string>>} */
26
27
  const reservedWords = {
27
28
  android: new Set([
28
29
  "as", "break", "class", "continue", "do", "else", "false", "for", "fun", "if", "in", "interface", "is", "null",
@@ -60,6 +61,18 @@ const reservedWords = {
60
61
  "unsafe", "use", "where", "while", "abstract", "become", "box", "do", "final", "macro", "override", "priv", "typeof", "unsized", "virtual",
61
62
  "yield", "try", "union", "_", "main", "String", "std", "i64", "bool"
62
63
  ]),
64
+ zig: new Set([
65
+ "addrspace", "align", "allowzero", "and", "anyerror", "anyframe", "anyopaque", "anytype", "asm", "async", "await", "break", "callconv",
66
+ "catch", "comptime", "const", "continue", "defer", "else", "enum", "errdefer", "error", "export", "extern", "false",
67
+ "fn", "for", "if", "inline", "linksection", "noalias", "noinline", "nosuspend", "null", "opaque", "or", "orelse",
68
+ "packed", "pub", "resume", "return", "struct", "suspend", "switch", "test", "threadlocal", "true", "try", "union",
69
+ "unreachable", "usingnamespace", "var", "volatile", "while", "_", "main", "std", "bool", "c_char", "c_int", "c_long",
70
+ "c_longdouble", "c_longlong", "c_short", "c_uint", "c_ulong", "c_ulonglong", "c_ushort", "comptime_float",
71
+ "comptime_int", "f16", "f32", "f64", "f80", "f128", "isize", "noreturn", "type", "undefined", "usize", "void",
72
+ "semantifold_arena", "semantifold_fail", "semantifold_integer_add", "semantifold_integer_subtract",
73
+ "semantifold_integer_multiply", "semantifold_integer_negate", "semantifold_string_concat", "semantifold_string_equal",
74
+ "semantifold_string_not_equal", "semantifold_print_integer", "semantifold_print_boolean", "semantifold_print_string"
75
+ ]),
63
76
  cpp: new Set([
64
77
  "alignas", "alignof", "and", "and_eq", "asm", "auto", "bitand", "bitor", "bool", "break", "case", "catch", "char", "char8_t", "char16_t", "char32_t", "class", "compl", "concept", "const", "consteval", "constexpr", "constinit", "const_cast", "continue", "co_await", "co_return", "co_yield", "decltype", "default", "delete", "do", "double", "dynamic_cast", "else", "enum", "explicit", "export", "extern", "false", "float", "for", "friend", "goto", "if", "inline", "int", "long", "mutable", "namespace", "new", "noexcept", "not", "not_eq", "nullptr", "operator", "or", "or_eq", "private", "protected", "public", "register", "reinterpret_cast", "requires", "return", "short", "signed", "sizeof", "static", "static_assert", "static_cast", "struct", "switch", "template", "this", "thread_local", "throw", "true", "try", "typedef", "typeid", "typename", "union", "unsigned", "using", "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq", "std", "string", "numeric_limits",
65
78
  // The qualified libstdc++ <string> include chain also exposes these global names.
@@ -223,12 +236,13 @@ export function validateTargetIdentifier(language, name, role, location) {
223
236
  if (typeof name != "string") unsupportedCapability(language, `${role} identifier`, location)
224
237
 
225
238
  const reservedName = language == "php" ? name.toLowerCase() : name
226
- const syntaxLanguage = language == "ios" ? "swift" : language
239
+ const syntaxLanguage = language == "ios" ? "swift" : language == "flutter" ? "dart" : language
227
240
 
228
241
  if (!identifierPatterns[syntaxLanguage].test(name) || reservedWords[syntaxLanguage].has(reservedName) ||
229
242
  language == "python" && name.normalize("NFKC") != name ||
230
243
  language == "c" && !isCIdentifier(name) ||
231
244
  language == "rust" && !isRustIdentifier(name) ||
245
+ language == "zig" && !isZigIdentifier(name) ||
232
246
  language == "cpp" && !isCppIdentifier(name) ||
233
247
  language == "dart" && !isDartIdentifier(name) ||
234
248
  language == "swift" && (!isSwiftIdentifier(name) || name.normalize("NFC") != name) ||
@@ -282,7 +296,7 @@ export function validateTargetTypeIdentifier(language, name, location) {
282
296
  unsupportedCapability(language, `record type identifier '${String(name)}'`, location)
283
297
  }
284
298
  const reservedName = language == "php" ? name.toLowerCase() : name
285
- const syntaxLanguage = language == "ios" ? "swift" : language
299
+ const syntaxLanguage = language == "ios" ? "swift" : language == "flutter" ? "dart" : language
286
300
 
287
301
  if (reservedWords[syntaxLanguage].has(reservedName) || reservedTypeNames[language]?.has(reservedName)) {
288
302
  unsupportedCapability(language, `record type identifier '${name}'`, location)
@@ -307,6 +321,16 @@ export function isRustIdentifier(name) {
307
321
  return identifierPatterns.rust.test(name) && !reservedWords.rust.has(name) && !name.startsWith("semantifold_")
308
322
  }
309
323
 
324
+ /**
325
+ * Protects Zig keywords, scalar names, entry plumbing, builtins, and the support namespace.
326
+ * @param {string} name - Caller-owned function or binding name.
327
+ * @returns {boolean} Whether ordinary unquoted Zig syntax can preserve the name.
328
+ */
329
+ export function isZigIdentifier(name) {
330
+ return identifierPatterns.zig.test(name) && !reservedWords.zig.has(name) && !/^[iu][0-9]+$/u.test(name) &&
331
+ !name.startsWith("semantifold_")
332
+ }
333
+
310
334
  /**
311
335
  * Protects Swift keywords, scalar names, entry plumbing, and target-only helper names.
312
336
  * @param {string} name - Caller-owned function or binding name.
@@ -13,7 +13,7 @@ import {SourceWriter} from "./writer.js"
13
13
 
14
14
  /** @type {Readonly<Set<import("../semantic/types.js").SemanticLanguage>>} */
15
15
  const iosSourceLanguages = new Set([
16
- "php", "ruby", "javascript", "typescript", "java", "kotlin", "python", "csharp", "go", "c", "cpp", "rust", "swift", "dart"
16
+ "php", "ruby", "javascript", "typescript", "java", "kotlin", "python", "csharp", "go", "c", "cpp", "rust", "swift", "dart", "zig"
17
17
  ])
18
18
  const configurationFields = new Set([
19
19
  "bundleIdentifier", "capabilities", "deploymentTarget", "displayName", "entitlements", "infoPlist", "lifecycle",
@@ -10,7 +10,7 @@ const semanticEdges = new Set(["functions", "entryPoint", "body", "parameters",
10
10
  /**
11
11
  * Bounds a native occurrence plan and rejects cycles before recursive shared validation.
12
12
  * @param {unknown} module - Untrusted backend request.
13
- * @param {"c" | "cpp" | "kotlin" | "rust" | "swift" | "wasm"} [language] - Backend diagnostic language.
13
+ * @param {"c" | "cpp" | "kotlin" | "rust" | "swift" | "wasm" | "zig"} [language] - Backend diagnostic language.
14
14
  * @returns {void}
15
15
  */
16
16
  export function validateNativeGraph(module, language = "c") {
@@ -23,7 +23,7 @@ import {programImportName, SourceWriter} from "./writer.js"
23
23
  /** @type {Readonly<Set<import("../semantic/types.js").SemanticLanguage>>} */
24
24
  const programTargets = new Set(["php", "ruby", "javascript", "typescript", "java"])
25
25
  /** @type {Readonly<Set<import("../semantic/types.js").BackendLanguage>>} */
26
- const programApplicationTargets = new Set(["android", "ios"])
26
+ const programApplicationTargets = new Set(["android", "ios", "flutter"])
27
27
 
28
28
  /**
29
29
  * Validates and prepares a complete semantic program for a non-text backend without allocating a writer.
@@ -68,8 +68,8 @@ export function preflightSemanticProgram({backendLanguage, diagnosticLanguage, p
68
68
  * @param {import("../semantic/types.js").BackendLanguage} input.language - Registered program target.
69
69
  * @param {import("../semantic/types.js").SemanticProgram} input.program - Complete semantic program.
70
70
  * @param {"text" | "application"} [input.role] - Explicit artifact role; omitted preserves text generation.
71
- * @param {import("../semantic/types.js").IosApplicationConfigurationInput | import("../semantic/types.js").AndroidApplicationConfigurationInput} [input.configuration] - Application configuration.
72
- * @param {import("../semantic/types.js").IosApplicationAssetInput[] | import("../semantic/types.js").AndroidApplicationInputFile[]} [input.assets] - Exact caller assets.
71
+ * @param {import("../semantic/types.js").IosApplicationConfigurationInput | import("../semantic/types.js").AndroidApplicationConfigurationInput | import("../semantic/types.js").FlutterApplicationConfigurationInput} [input.configuration] - Application configuration.
72
+ * @param {import("../semantic/types.js").IosApplicationAssetInput[] | import("../semantic/types.js").AndroidApplicationInputFile[] | import("../semantic/types.js").FlutterApplicationAssetInput[]} [input.assets] - Exact caller assets.
73
73
  * @param {import("../semantic/types.js").AndroidApplicationInputFile[]} [input.resources] - Exact Android caller resources.
74
74
  * @returns {import("../semantic/types.js").GeneratedArtifactSet} Transactionally validated artifact set.
75
75
  */
@@ -2,6 +2,7 @@
2
2
 
3
3
  /** @type {Readonly<Record<import("../semantic/types.js").TextBackendLanguage, Readonly<Record<import("../semantic/types.js").FunctionReturnTypeName, string>>>>} */
4
4
  const targetScalarTypes = Object.freeze({
5
+ zig: Object.freeze({boolean: "bool", integer: "i64", string: "[]const u8", void: "void"}),
5
6
  dart: Object.freeze({boolean: "bool", integer: "int", string: "String", void: "void"}),
6
7
  swift: Object.freeze({boolean: "Bool", integer: "Int64", string: "String", void: "Void"}),
7
8
  rust: Object.freeze({boolean: "bool", integer: "i64", string: "String", void: "()"}),
@@ -27,7 +27,7 @@ const binaryOperationSyntax = Object.freeze({
27
27
  StringEqual: Object.freeze({default: "==", strict: "==="}),
28
28
  StringNotEqual: Object.freeze({default: "!=", strict: "!=="})
29
29
  })
30
- const task005Languages = new Set(["php", "ruby", "javascript", "typescript", "java", "dart"])
30
+ const task005Languages = new Set(["php", "ruby", "javascript", "typescript", "java", "dart", "zig"])
31
31
  const task006Languages = new Set(["php", "ruby", "javascript", "typescript", "java"])
32
32
  const task007Languages = new Set(["php", "ruby", "javascript", "typescript", "java"])
33
33
  const task008Languages = new Set(["php", "ruby", "javascript", "typescript", "java"])
@@ -1952,9 +1952,9 @@ function validateKnownTargetInteger(expression, language, location) {
1952
1952
  if (language == "java" && value !== undefined && (value < -2147483648n || value > 2147483647n)) {
1953
1953
  unsupportedCapability(language, "compile-time-known integer operation outside signed 32-bit int range", location)
1954
1954
  }
1955
- if ((language == "csharp" || language == "go" || language == "c" || language == "cpp" || language == "rust" || language == "swift" || language == "wasm") && value !== undefined &&
1955
+ if ((language == "csharp" || language == "go" || language == "c" || language == "cpp" || language == "rust" || language == "swift" || language == "wasm" || language == "zig") && value !== undefined &&
1956
1956
  (value < -9223372036854775808n || value > 9223372036854775807n)) {
1957
- const scalar = language == "wasm" ? "i64" : language == "swift" ? "Int64" : "long"
1957
+ const scalar = language == "wasm" || language == "zig" ? "i64" : language == "swift" ? "Int64" : "long"
1958
1958
 
1959
1959
  unsupportedCapability(language, `compile-time-known integer operation outside signed 64-bit ${scalar} range`, location)
1960
1960
  }
@@ -2241,7 +2241,8 @@ export function emitExpression(writer, expression, path, language, emitIdentifie
2241
2241
  return
2242
2242
  }
2243
2243
  if (expression.kind == "CallExpression") {
2244
- const dartMultiline = language == "dart" && expression.arguments.length > 0 &&
2244
+ const callArgumentSuffix = writer.callArgumentSuffixFor(expression)
2245
+ const dartMultiline = language == "dart" && (expression.arguments.length > 0 || Boolean(callArgumentSuffix)) &&
2245
2246
  dartExpressionExceedsPageWidth(writer, expression)
2246
2247
  const dartIndent = dartMultiline ? currentLineIndent(writer) : ""
2247
2248
 
@@ -2255,11 +2256,10 @@ export function emitExpression(writer, expression, path, language, emitIdentifie
2255
2256
  emitExpression(writer, argument, `${path}/arguments/${index}`, language, emitIdentifier)
2256
2257
  if (dartMultiline) writer.synthetic(",\n", "Dart formatter argument separator", [expression], [path])
2257
2258
  })
2258
- const callArgumentSuffix = writer.callArgumentSuffixFor(expression)
2259
-
2260
2259
  if (callArgumentSuffix) {
2261
- writer.synthetic(`${expression.arguments.length ? ", " : ""}${callArgumentSuffix}`,
2262
- "target-container semantic call argument", [expression], [path])
2260
+ writer.synthetic(dartMultiline ? `${expression.arguments.length ? "" : "\n"}${dartIndent} ${callArgumentSuffix},\n` :
2261
+ `${expression.arguments.length ? ", " : ""}${callArgumentSuffix}`,
2262
+ "target-container semantic call argument", [expression], [path])
2263
2263
  }
2264
2264
  if (dartMultiline) writer.synthetic(dartIndent, "Dart call closing indentation", [expression], [path])
2265
2265
  writer.mapped(")", {mappingKind: "anchor", node: expression, path})
@@ -2558,14 +2558,18 @@ function currentLineIndent(writer) {
2558
2558
  * @param {import("../semantic/types.js").Expression} expression Semantic expression.
2559
2559
  * @returns {string} Flat canonical spelling.
2560
2560
  */
2561
- function flatDartExpression(writer, expression) {
2561
+ export function flatDartExpression(writer, expression) {
2562
2562
  if (expression.kind == "IdentifierExpression") return expression.name
2563
2563
  if (expression.kind == "IntegerLiteral") return String(expression.value)
2564
2564
  if (expression.kind == "BooleanLiteral") return `_semantifoldBoolean(${expression.value ? "true" : "false"})`
2565
2565
  if (expression.kind == "StringLiteral") return emitStringLiteral("dart", expression.value)
2566
2566
  if (expression.kind == "CallExpression") {
2567
- return `${writer.callNameFor(expression)}(${expression.arguments.map((argument) =>
2568
- flatDartExpression(writer, argument)).join(", ")})`
2567
+ const arguments_ = expression.arguments.map((argument) => flatDartExpression(writer, argument))
2568
+ const callArgumentSuffix = writer.callArgumentSuffixFor(expression)
2569
+
2570
+ if (callArgumentSuffix) arguments_.push(callArgumentSuffix)
2571
+
2572
+ return `${writer.callNameFor(expression)}(${arguments_.join(", ")})`
2569
2573
  }
2570
2574
  if (expression.kind == "UnaryExpression") {
2571
2575
  const operand = flatDartExpression(writer, expression.operand)
@@ -0,0 +1,93 @@
1
+ // @ts-check
2
+
3
+ /** Exact Zig 0.15.2 standard-library-only support; the frontend checks every token before collapse. */
4
+ export const zigRuntime = `const std = @import("std");
5
+
6
+ var semantifold_arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
7
+
8
+ fn semantifold_fail(message: []const u8) noreturn {
9
+ std.fs.File.stderr().writeAll(message) catch {};
10
+ std.process.exit(70);
11
+ }
12
+
13
+ fn semantifold_integer_add(left: i64, right: i64) i64 {
14
+ const result = @addWithOverflow(left, right);
15
+ if (result[1] != 0) semantifold_fail("semantifold: integer overflow\\n");
16
+ return result[0];
17
+ }
18
+
19
+ fn semantifold_integer_subtract(left: i64, right: i64) i64 {
20
+ const result = @subWithOverflow(left, right);
21
+ if (result[1] != 0) semantifold_fail("semantifold: integer overflow\\n");
22
+ return result[0];
23
+ }
24
+
25
+ fn semantifold_integer_multiply(left: i64, right: i64) i64 {
26
+ const result = @mulWithOverflow(left, right);
27
+ if (result[1] != 0) semantifold_fail("semantifold: integer overflow\\n");
28
+ return result[0];
29
+ }
30
+
31
+ fn semantifold_integer_negate(value: i64) i64 {
32
+ return semantifold_integer_subtract(0, value);
33
+ }
34
+
35
+ fn semantifold_string_concat(left: []const u8, right: []const u8) []const u8 {
36
+ const size = @addWithOverflow(left.len, right.len);
37
+ if (size[1] != 0) semantifold_fail("semantifold: allocation failure\\n");
38
+ const bytes = semantifold_arena.allocator().alloc(u8, size[0]) catch semantifold_fail("semantifold: allocation failure\\n");
39
+ @memcpy(bytes[0..left.len], left);
40
+ @memcpy(bytes[left.len..], right);
41
+ return bytes;
42
+ }
43
+
44
+ fn semantifold_string_equal(left: []const u8, right: []const u8) bool {
45
+ return std.mem.eql(u8, left, right);
46
+ }
47
+
48
+ fn semantifold_string_not_equal(left: []const u8, right: []const u8) bool {
49
+ return !std.mem.eql(u8, left, right);
50
+ }
51
+
52
+ fn semantifold_write(value: []const u8) void {
53
+ const stdout = std.fs.File.stdout();
54
+ stdout.writeAll(value) catch semantifold_fail("semantifold: output failure\\n");
55
+ stdout.writeAll("\\n") catch semantifold_fail("semantifold: output failure\\n");
56
+ }
57
+
58
+ fn semantifold_print_integer(value: i64) void {
59
+ var buffer: [20]u8 = undefined;
60
+ const bytes = std.fmt.bufPrint(&buffer, "{d}", .{value}) catch semantifold_fail("semantifold: output failure\\n");
61
+ semantifold_write(bytes);
62
+ }
63
+
64
+ fn semantifold_print_boolean(value: bool) void {
65
+ semantifold_write(if (value) "true" else "false");
66
+ }
67
+
68
+ fn semantifold_print_string(value: []const u8) void {
69
+ semantifold_write(value);
70
+ }
71
+ `
72
+
73
+ /** Fixed native-host Zig build with only the selected optimization option and no package resolution. */
74
+ export const zigBuild = `const std = @import("std");
75
+
76
+ pub fn build(b: *std.Build) void {
77
+ const optimize = b.standardOptimizeOption(.{});
78
+ const executable = b.addExecutable(.{
79
+ .name = "semantifold-generated",
80
+ .root_module = b.createModule(.{
81
+ .root_source_file = b.path("src/main.zig"),
82
+ .target = b.graph.host,
83
+ .optimize = optimize,
84
+ }),
85
+ });
86
+ b.installArtifact(executable);
87
+
88
+ const tests = b.addTest(.{ .root_module = executable.root_module });
89
+ const run_tests = b.addRunArtifact(tests);
90
+ const test_step = b.step("test", "Compile and run tests");
91
+ test_step.dependOn(&run_tests.step);
92
+ }
93
+ `
@@ -0,0 +1,68 @@
1
+ // @ts-check
2
+
3
+ import {unsupportedCapability} from "../diagnostic.js"
4
+
5
+ /** Repository-owned bound for frozen CST traversal and deterministic project generation. */
6
+ export const maximumZigSourceLength = 1_000_000
7
+
8
+ /**
9
+ * Rejects statically impossible UTF-8 arena sizes without changing the semantic graph.
10
+ * @param {import("../semantic/types.js").SemanticModule} module - Fully validated module.
11
+ * @returns {void}
12
+ */
13
+ export function validateZigValues(module) {
14
+ /**
15
+ * Infers a known UTF-8 byte size while validating literal shape.
16
+ * @param {import("../semantic/types.js").Expression} expression - Expression to inspect.
17
+ * @param {Map<string, bigint | undefined>} sizes - Known binding sizes.
18
+ * @returns {bigint | undefined} Known byte size when statically available.
19
+ */
20
+ const size = (expression, sizes) => {
21
+ if (expression.kind == "IntegerLiteral" && (!Number.isSafeInteger(expression.value) || expression.value < 0 || Object.is(expression.value, -0))) {
22
+ unsupportedCapability("zig", "non-safe or noncanonical i64 literal", expression.location)
23
+ }
24
+ if (expression.kind == "StringLiteral") return BigInt(Buffer.byteLength(expression.value, "utf8"))
25
+ if (expression.kind == "IdentifierExpression") return sizes.get(expression.name)
26
+ if (expression.kind == "CallExpression") expression.arguments.forEach(argument => size(argument, sizes))
27
+ else if (expression.kind == "UnaryExpression") size(expression.operand, sizes)
28
+ else if (expression.kind == "BinaryExpression") {
29
+ const left = size(expression.left, sizes)
30
+ const right = size(expression.right, sizes)
31
+
32
+ if (expression.operation == "StringConcat") {
33
+ if ((left ?? 0n) + (right ?? 0n) > 9223372036854775807n) {
34
+ unsupportedCapability("zig", "known immutable UTF-8 slice exceeds the qualified native allocation limit", expression.location)
35
+ }
36
+ if (left !== undefined && right !== undefined) return left + right
37
+ }
38
+ }
39
+ return undefined
40
+ }
41
+ /**
42
+ * Propagates conservative known string sizes through one block.
43
+ * @param {import("../semantic/types.js").Block} block - Block to inspect.
44
+ * @param {Map<string, bigint | undefined>} inherited - Sizes visible on entry.
45
+ * @returns {Map<string, bigint | undefined>} Sizes known after the block.
46
+ */
47
+ const visit = (block, inherited) => {
48
+ const sizes = new Map(inherited)
49
+
50
+ for (const statement of block.statements) {
51
+ if (statement.kind == "LocalDeclaration") sizes.set(statement.name, size(statement.initializer, sizes))
52
+ else if (statement.kind == "AssignmentStatement") sizes.set(statement.target.name, size(statement.expression, sizes))
53
+ else if (statement.kind == "IfStatement") {
54
+ size(statement.condition, sizes)
55
+ const left = visit(statement.consequent, sizes)
56
+ const right = statement.alternate ? visit(statement.alternate, sizes) : sizes
57
+
58
+ for (const name of sizes.keys()) sizes.set(name, left.get(name) === right.get(name) ? left.get(name) : undefined)
59
+ } else if (statement.kind == "ExpressionStatement" || statement.kind == "PrintStatement" || statement.kind == "ReturnStatement") {
60
+ if (statement.expression) size(statement.expression, sizes)
61
+ }
62
+ }
63
+ return sizes
64
+ }
65
+
66
+ for (const declaration of module.functions) visit(declaration.body, new Map())
67
+ visit(module.entryPoint.body, new Map())
68
+ }