semantifold 0.2.0 → 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 (356) hide show
  1. package/README.md +37 -12
  2. package/build/index.js +2 -2
  3. package/build/src/acceptance.d.ts +10 -0
  4. package/build/src/acceptance.d.ts.map +1 -1
  5. package/build/src/acceptance.js +24 -5
  6. package/build/src/backends/c-runtime.d.ts +3 -0
  7. package/build/src/backends/c-runtime.d.ts.map +1 -0
  8. package/build/src/backends/c-runtime.js +151 -0
  9. package/build/src/backends/c-validation.d.ts +12 -0
  10. package/build/src/backends/c-validation.d.ts.map +1 -0
  11. package/build/src/backends/c-validation.js +85 -0
  12. package/build/src/backends/c.d.ts +31 -0
  13. package/build/src/backends/c.d.ts.map +1 -0
  14. package/build/src/backends/c.js +308 -0
  15. package/build/src/backends/cpp-runtime.d.ts +3 -0
  16. package/build/src/backends/cpp-runtime.d.ts.map +1 -0
  17. package/build/src/backends/cpp-runtime.js +99 -0
  18. package/build/src/backends/cpp-validation.d.ts +9 -0
  19. package/build/src/backends/cpp-validation.d.ts.map +1 -0
  20. package/build/src/backends/cpp-validation.js +74 -0
  21. package/build/src/backends/cpp.d.ts +16 -0
  22. package/build/src/backends/cpp.d.ts.map +1 -0
  23. package/build/src/backends/cpp.js +285 -0
  24. package/build/src/backends/csharp.d.ts +20 -0
  25. package/build/src/backends/csharp.d.ts.map +1 -0
  26. package/build/src/backends/csharp.js +259 -0
  27. package/build/src/backends/go.d.ts +20 -0
  28. package/build/src/backends/go.d.ts.map +1 -0
  29. package/build/src/backends/go.js +374 -0
  30. package/build/src/backends/identifiers.d.ts +12 -0
  31. package/build/src/backends/identifiers.d.ts.map +1 -1
  32. package/build/src/backends/identifiers.js +71 -2
  33. package/build/src/backends/index.d.ts.map +1 -1
  34. package/build/src/backends/index.js +9 -1
  35. package/build/src/backends/native-validation.d.ts +9 -0
  36. package/build/src/backends/native-validation.d.ts.map +1 -0
  37. package/build/src/backends/native-validation.js +59 -0
  38. package/build/src/backends/ordered-expressions.d.ts +74 -0
  39. package/build/src/backends/ordered-expressions.d.ts.map +1 -0
  40. package/build/src/backends/ordered-expressions.js +159 -0
  41. package/build/src/backends/scalars.d.ts.map +1 -1
  42. package/build/src/backends/scalars.js +7 -2
  43. package/build/src/backends/shared.d.ts.map +1 -1
  44. package/build/src/backends/shared.js +59 -14
  45. package/build/src/frontends/c-parser.d.ts +20 -0
  46. package/build/src/frontends/c-parser.d.ts.map +1 -0
  47. package/build/src/frontends/c-parser.js +14 -0
  48. package/build/src/frontends/c.d.ts +220 -0
  49. package/build/src/frontends/c.d.ts.map +1 -0
  50. package/build/src/frontends/c.js +750 -0
  51. package/build/src/frontends/cpp-parser.d.ts +11 -0
  52. package/build/src/frontends/cpp-parser.d.ts.map +1 -0
  53. package/build/src/frontends/cpp-parser.js +15 -0
  54. package/build/src/frontends/cpp.d.ts +227 -0
  55. package/build/src/frontends/cpp.d.ts.map +1 -0
  56. package/build/src/frontends/cpp.js +784 -0
  57. package/build/src/frontends/csharp.d.ts +14 -0
  58. package/build/src/frontends/csharp.d.ts.map +1 -0
  59. package/build/src/frontends/csharp.js +708 -0
  60. package/build/src/frontends/go.d.ts +15 -0
  61. package/build/src/frontends/go.d.ts.map +1 -0
  62. package/build/src/frontends/go.js +712 -0
  63. package/build/src/frontends/scalars.d.ts.map +1 -1
  64. package/build/src/frontends/scalars.js +16 -1
  65. package/build/src/language-registry.d.ts.map +1 -1
  66. package/build/src/language-registry.js +51 -2
  67. package/build/src/mapping.js +2 -2
  68. package/build/src/semantic/provenance.js +3 -3
  69. package/build/src/semantic/types.d.ts +4 -4
  70. package/build/src/semantic/types.d.ts.map +1 -1
  71. package/build/src/semantic/types.js +3 -3
  72. package/build/src/subprocess.d.ts +10 -1
  73. package/build/src/subprocess.d.ts.map +1 -1
  74. package/build/src/subprocess.js +29 -3
  75. package/build/src/toolchains.d.ts +24 -0
  76. package/build/src/toolchains.d.ts.map +1 -1
  77. package/build/src/toolchains.js +6 -2
  78. package/docs/architecture.md +20 -6
  79. package/docs/c.md +60 -0
  80. package/docs/cpp.md +61 -0
  81. package/docs/goals.md +4 -2
  82. package/docs/language-support.md +27 -8
  83. package/docs/parser-qualification.md +153 -4
  84. package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
  85. package/docs/source-maps.md +11 -5
  86. package/docs/standard-library-portability.md +190 -0
  87. package/docs/testing.md +113 -4
  88. package/index.js +1 -1
  89. package/node_modules/node-addon-api/LICENSE.md +9 -0
  90. package/node_modules/node-addon-api/README.md +95 -0
  91. package/node_modules/node-addon-api/common.gypi +21 -0
  92. package/node_modules/node-addon-api/except.gypi +25 -0
  93. package/node_modules/node-addon-api/index.js +14 -0
  94. package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  95. package/node_modules/node-addon-api/napi-inl.h +7250 -0
  96. package/node_modules/node-addon-api/napi.h +3463 -0
  97. package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
  98. package/node_modules/node-addon-api/node_api.gyp +9 -0
  99. package/node_modules/node-addon-api/noexcept.gypi +26 -0
  100. package/node_modules/node-addon-api/nothing.c +0 -0
  101. package/node_modules/node-addon-api/package-support.json +21 -0
  102. package/node_modules/node-addon-api/package.json +481 -0
  103. package/node_modules/node-addon-api/tools/README.md +73 -0
  104. package/node_modules/node-addon-api/tools/check-napi.js +99 -0
  105. package/node_modules/node-addon-api/tools/clang-format.js +71 -0
  106. package/node_modules/node-addon-api/tools/conversion.js +301 -0
  107. package/node_modules/node-gyp-build/LICENSE +21 -0
  108. package/node_modules/node-gyp-build/README.md +58 -0
  109. package/node_modules/node-gyp-build/SECURITY.md +5 -0
  110. package/node_modules/node-gyp-build/bin.js +84 -0
  111. package/node_modules/node-gyp-build/build-test.js +19 -0
  112. package/node_modules/node-gyp-build/index.js +6 -0
  113. package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  114. package/node_modules/node-gyp-build/optional.js +7 -0
  115. package/node_modules/node-gyp-build/package.json +43 -0
  116. package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
  117. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
  118. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
  119. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
  120. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
  121. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
  122. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
  123. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  124. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  125. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  126. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  127. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
  128. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
  129. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
  130. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
  131. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
  132. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
  133. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
  134. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
  135. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  136. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  137. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
  138. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
  139. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
  140. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
  141. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
  142. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
  143. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
  144. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
  145. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  146. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  147. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
  148. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
  149. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  150. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  151. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
  152. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  153. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  154. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  155. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
  156. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  157. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  158. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
  159. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
  160. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  161. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
  162. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
  163. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
  164. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
  165. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
  166. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
  167. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
  168. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
  169. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  170. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  171. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
  172. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  173. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
  174. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
  175. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
  176. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  177. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
  178. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  179. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  180. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  181. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  182. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  183. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  184. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  185. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  186. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  187. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  188. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
  189. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
  190. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
  191. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
  192. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
  193. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  194. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
  195. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
  196. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
  197. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
  198. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
  199. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
  200. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
  201. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
  202. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
  203. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
  204. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
  205. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
  236. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
  237. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
  238. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
  239. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
  240. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
  241. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
  242. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
  243. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
  244. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
  245. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
  246. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
  247. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
  248. package/node_modules/tree-sitter/LICENSE +21 -0
  249. package/node_modules/tree-sitter/README.md +128 -0
  250. package/node_modules/tree-sitter/binding.gyp +88 -0
  251. package/node_modules/tree-sitter/index.js +950 -0
  252. package/node_modules/tree-sitter/package.json +76 -0
  253. package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  254. package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  255. package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
  256. package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  257. package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
  258. package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  259. package/node_modules/tree-sitter/src/addon_data.h +47 -0
  260. package/node_modules/tree-sitter/src/binding.cc +35 -0
  261. package/node_modules/tree-sitter/src/conversions.cc +140 -0
  262. package/node_modules/tree-sitter/src/conversions.h +22 -0
  263. package/node_modules/tree-sitter/src/language.cc +105 -0
  264. package/node_modules/tree-sitter/src/language.h +17 -0
  265. package/node_modules/tree-sitter/src/logger.cc +70 -0
  266. package/node_modules/tree-sitter/src/logger.h +19 -0
  267. package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  268. package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  269. package/node_modules/tree-sitter/src/node.cc +1088 -0
  270. package/node_modules/tree-sitter/src/node.h +30 -0
  271. package/node_modules/tree-sitter/src/parser.cc +332 -0
  272. package/node_modules/tree-sitter/src/parser.h +35 -0
  273. package/node_modules/tree-sitter/src/query.cc +425 -0
  274. package/node_modules/tree-sitter/src/query.h +40 -0
  275. package/node_modules/tree-sitter/src/tree.cc +316 -0
  276. package/node_modules/tree-sitter/src/tree.h +45 -0
  277. package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  278. package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  279. package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
  280. package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
  281. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  282. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  283. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
  284. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  285. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  286. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  287. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
  288. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  289. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  290. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
  291. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
  292. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  293. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
  294. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
  295. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
  296. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
  297. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
  298. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
  299. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
  300. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
  301. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
  302. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  303. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  304. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
  305. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  306. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
  307. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
  308. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
  309. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  310. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
  311. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  312. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
  313. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  314. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  315. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  316. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  317. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  318. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  319. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  320. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  321. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  322. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
  323. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
  324. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
  325. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
  326. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
  327. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  328. package/package.json +21 -5
  329. package/src/acceptance.js +25 -4
  330. package/src/backends/c-runtime.js +151 -0
  331. package/src/backends/c-validation.js +83 -0
  332. package/src/backends/c.js +308 -0
  333. package/src/backends/cpp-runtime.js +99 -0
  334. package/src/backends/cpp-validation.js +70 -0
  335. package/src/backends/cpp.js +285 -0
  336. package/src/backends/csharp.js +270 -0
  337. package/src/backends/go.js +383 -0
  338. package/src/backends/identifiers.js +72 -1
  339. package/src/backends/index.js +7 -0
  340. package/src/backends/native-validation.js +64 -0
  341. package/src/backends/ordered-expressions.js +161 -0
  342. package/src/backends/scalars.js +7 -1
  343. package/src/backends/shared.js +56 -12
  344. package/src/frontends/c-parser.js +17 -0
  345. package/src/frontends/c.js +780 -0
  346. package/src/frontends/cpp-parser.js +18 -0
  347. package/src/frontends/cpp.js +816 -0
  348. package/src/frontends/csharp.js +759 -0
  349. package/src/frontends/go.js +770 -0
  350. package/src/frontends/scalars.js +15 -0
  351. package/src/language-registry.js +52 -1
  352. package/src/mapping.js +1 -1
  353. package/src/semantic/provenance.js +2 -2
  354. package/src/semantic/types.js +2 -2
  355. package/src/subprocess.js +31 -2
  356. package/src/toolchains.js +5 -1
@@ -0,0 +1,308 @@
1
+ // @ts-check
2
+ import { unsupportedCapability } from "../diagnostic.js";
3
+ import { finalizeMapping, toSourceMapV3 } from "../mapping.js";
4
+ import { statementSignature, planNativeModule } from "./ordered-expressions.js";
5
+ import { cRuntimeHeader } from "./c-runtime.js";
6
+ import { maximumCSourceLength, validateCMemory } from "./c-validation.js";
7
+ import { validateNativeGraph } from "./native-validation.js";
8
+ import { emitScalarType } from "./scalars.js";
9
+ import { validateBackendModule } from "./shared.js";
10
+ import { SourceWriter } from "./writer.js";
11
+ /** @typedef {import("../semantic/types.js").SemanticModule} SemanticModule */
12
+ /** @typedef {import("../semantic/types.js").SemanticNode} SemanticNode */
13
+ /** @typedef {import("../semantic/types.js").Statement} Statement */
14
+ /** @typedef {import("../semantic/types.js").Block} Block */
15
+ /** @typedef {import("./ordered-expressions.js").PlannedValue} PlannedValue */
16
+ /** @typedef {import("./ordered-expressions.js").PlannedStep} PlannedStep */
17
+ /** @typedef {{id: string, steps: PlannedStep[], value: PlannedValue}} StatementPlan */
18
+ const binaryTokens = new Map([
19
+ ["IntegerAdd", "semantifold_integer_add"], ["IntegerSubtract", "semantifold_integer_subtract"],
20
+ ["IntegerMultiply", "semantifold_integer_multiply"], ["StringConcat", "semantifold_string_concat"],
21
+ ["StringEqual", "semantifold_string_equal"], ["StringNotEqual", "semantifold_string_not_equal"],
22
+ ["IntegerEqual", "=="], ["IntegerNotEqual", "!="], ["BooleanEqual", "=="], ["BooleanNotEqual", "!="],
23
+ ["IntegerLessThan", "<"], ["IntegerLessThanOrEqual", "<="],
24
+ ["IntegerGreaterThan", ">"], ["IntegerGreaterThanOrEqual", ">="]
25
+ ]);
26
+ /**
27
+ * Produces a fully validated, deterministic C17 translation unit and owned support header.
28
+ * @param {{filename?: string, mapDirective?: unknown, module: SemanticModule, sourceMapFilename?: unknown, sources?: {filename: string, content: string, language?: import("../semantic/types.js").SemanticLanguage}[]}} input - Backend request.
29
+ * @returns {{artifacts: import("../semantic/types.js").GeneratedSetArtifact[], target: string}} Complete candidate.
30
+ */
31
+ export function generateCProgram({ filename, mapDirective, module, sourceMapFilename, sources }) {
32
+ validateNativeGraph(module);
33
+ validateBackendModule(module, "c");
34
+ validateCMemory(module);
35
+ if (filename !== undefined && filename != "program.c")
36
+ unsupportedCapability("c", "artifact filename other than program.c", module.location);
37
+ if (mapDirective !== undefined || sourceMapFilename !== undefined)
38
+ unsupportedCapability("c", "source-map filename or directive option", module.location);
39
+ const plans = planNativeModule(module);
40
+ new CEmitter(undefined, plans, module.location).program(module);
41
+ const writer = new SourceWriter({ filename: "program.c", language: "c", module, sources });
42
+ const emitter = new CEmitter(writer, plans, module.location);
43
+ emitter.program(module);
44
+ const mapping = finalizeMapping(writer.finish());
45
+ const root = mapping.nodes.find(({ path }) => path == "");
46
+ if (!root)
47
+ throw new Error("Validated C module omitted its root provenance.");
48
+ const relatedOrigins = root.origin.kind == "source"
49
+ ? [{ location: root.origin.location, nodeId: root.id, role: "module", sourceId: root.origin.sourceId }]
50
+ : (root.origin.kind == "derived" ? root.origin.origins : root.origin.relatedOrigins).map((origin) => ({ ...origin, nodeId: origin.nodeId ?? root.id, role: origin.role ?? "module" }));
51
+ return { target: "c", artifacts: [{
52
+ content: mapping.generated.content, contentKind: "text", mediaType: "text/x-c", ownership: "generated", path: "program.c",
53
+ provenance: { kind: "text", mapping, sourceMap: toSourceMapV3(mapping) }, role: "entry"
54
+ }, {
55
+ content: cRuntimeHeader, contentKind: "text", mediaType: "text/x-c", ownership: "generated", path: "semantifold_runtime.h",
56
+ provenance: { kind: "synthetic", reason: "Canonical C17 scalar helpers and module-lifetime immutable UTF-8 arena.", relatedOrigins }, role: "support"
57
+ }] };
58
+ }
59
+ /** Writes only target syntax from validated semantic occurrences and private plans. */
60
+ class CEmitter {
61
+ /**
62
+ * Binds the writer and complete plan.
63
+ * @param {SourceWriter | undefined} writer - Provenance writer; omitted for exact size preflight.
64
+ * @param {Map<string, StatementPlan>} plans - Validated occurrence plans.
65
+ * @param {import("../semantic/types.js").SourceLocation} location - Root diagnostic location.
66
+ */
67
+ constructor(writer, plans, location) {
68
+ this.writer = writer;
69
+ this.plans = plans;
70
+ this.location = location;
71
+ this.length = 0;
72
+ }
73
+ /**
74
+ * Writes generated scaffold with a related semantic origin.
75
+ * @param {string} text - C syntax.
76
+ * @param {SemanticNode} node - Related node.
77
+ * @param {string} path - Occurrence path.
78
+ * @returns {void}
79
+ */
80
+ synthetic(text, node, path) {
81
+ this.checkSize(text, node);
82
+ this.writer?.synthetic(text, "C17 ordered-expression and lifetime scaffold", [node], [path]);
83
+ }
84
+ /**
85
+ * Writes an original semantic token or anchor.
86
+ * @param {string} text - Target token.
87
+ * @param {SemanticNode} node - Original node.
88
+ * @param {string} path - Occurrence path.
89
+ * @param {string} [role] - Parser token role.
90
+ * @returns {void}
91
+ */
92
+ mapped(text, node, path, role) {
93
+ this.checkSize(text, node);
94
+ this.writer?.mapped(text, { mappingKind: role ? "exact" : "anchor", node, path, ...(role ? { role } : {}) });
95
+ }
96
+ /**
97
+ * Bounds private emission before any artifact can escape the parser's proven input profile.
98
+ * @param {string} text - Next exact output chunk.
99
+ * @param {SemanticNode} node - Related semantic occurrence.
100
+ * @returns {void}
101
+ */
102
+ checkSize(text, node) {
103
+ this.length += text.length;
104
+ if (this.length > maximumCSourceLength)
105
+ unsupportedCapability("c", "generated program exceeds the frozen C parser's 32767 UTF-16 input limit", "location" in node ? node.location : this.location);
106
+ }
107
+ /**
108
+ * Emits canonical prototypes, definitions, and the cleanup-owning main.
109
+ * @param {SemanticModule} module - Semantic module.
110
+ * @returns {void}
111
+ */
112
+ program(module) {
113
+ this.synthetic('/* semantifold:program:c:v1 */\n#include "semantifold_runtime.h"\n\n', module, "");
114
+ module.functions.forEach((declaration, index) => {
115
+ const parameters = declaration.parameters.map((parameter) => `${emitScalarType("c", parameter.type)} ${parameter.name}`).join(", ");
116
+ this.synthetic(`static ${emitScalarType("c", declaration.returnType)} ${declaration.name}(${parameters});\n`, declaration, `/functions/${index}`);
117
+ });
118
+ module.functions.forEach((declaration, index) => {
119
+ const path = `/functions/${index}`;
120
+ this.synthetic("\nstatic ", declaration, path);
121
+ this.mapped(emitScalarType("c", declaration.returnType), declaration.returnType, `${path}/returnType`, "type");
122
+ this.synthetic(" ", declaration, path);
123
+ this.mapped(declaration.name, declaration, path, "name");
124
+ this.synthetic("(", declaration, path);
125
+ declaration.parameters.forEach((parameter, parameterIndex) => {
126
+ const parameterPath = `${path}/parameters/${parameterIndex}`;
127
+ if (parameterIndex)
128
+ this.synthetic(", ", parameter, parameterPath);
129
+ this.mapped(emitScalarType("c", parameter.type), parameter.type, `${parameterPath}/type`, "type");
130
+ this.synthetic(" ", parameter, parameterPath);
131
+ this.mapped(parameter.name, parameter, parameterPath, "name");
132
+ });
133
+ this.synthetic(") {\n", declaration, path);
134
+ declaration.parameters.forEach((parameter, parameterIndex) => this.synthetic(` (void)${parameter.name};\n`, parameter, `${path}/parameters/${parameterIndex}`));
135
+ this.block(declaration.body, `${path}/body`, " ");
136
+ this.synthetic("}\n", declaration, path);
137
+ });
138
+ this.synthetic("\nint main(void) {\n", module.entryPoint, "/entryPoint");
139
+ module.functions.forEach((declaration, index) => this.synthetic(` (void)${declaration.name};\n`, declaration, `/functions/${index}`));
140
+ this.block(module.entryPoint.body, "/entryPoint/body", " ");
141
+ this.synthetic(" semantifold_cleanup();\n return 0;\n}\n", module.entryPoint, "/entryPoint");
142
+ }
143
+ /**
144
+ * Emits statements in semantic source order.
145
+ * @param {Block} block - Semantic block.
146
+ * @param {string} path - Occurrence path.
147
+ * @param {string} indent - Current indentation.
148
+ * @returns {void}
149
+ */
150
+ block(block, path, indent) {
151
+ block.statements.forEach((statement, index) => this.statement(statement, `${path}/statements/${index}`, indent));
152
+ }
153
+ /**
154
+ * Emits one paired region with a pure final consumer.
155
+ * @param {Statement} statement - Original statement.
156
+ * @param {string} path - Occurrence path.
157
+ * @param {string} indent - Current indentation.
158
+ * @returns {void}
159
+ */
160
+ statement(statement, path, indent) {
161
+ const plan = this.plans.get(path);
162
+ if (!plan)
163
+ throw new Error("Missing validated C statement plan.");
164
+ const marker = `semantifold:ordered-expression:c:v1`;
165
+ const signature = statementSignature(statement);
166
+ this.synthetic(`${indent}/* ${marker} begin ${plan.id} ${signature} */\n`, statement, path);
167
+ this.steps(plan.steps, indent);
168
+ this.synthetic(indent, statement, path);
169
+ if (statement.kind == "LocalDeclaration") {
170
+ if (!statement.mutable)
171
+ this.synthetic("const ", statement, path);
172
+ this.mapped(emitScalarType("c", statement.type), statement.type, `${path}/type`, "type");
173
+ this.synthetic(" ", statement, path);
174
+ this.mapped(statement.name, statement, path, "name");
175
+ this.synthetic(" ", statement, path);
176
+ this.mapped("=", statement, path, "operator");
177
+ this.synthetic(" ", statement, path);
178
+ }
179
+ else if (statement.kind == "AssignmentStatement") {
180
+ this.mapped(statement.target.name, statement.target, `${path}/target`, "name");
181
+ this.synthetic(" ", statement, path);
182
+ this.mapped("=", statement, path, "operator");
183
+ this.synthetic(" ", statement, path);
184
+ }
185
+ else if (statement.kind == "ReturnStatement")
186
+ this.mapped("return ", statement, path);
187
+ else if (statement.kind == "PrintStatement")
188
+ this.mapped(`semantifold_print_${plan.value.type}(`, statement, path);
189
+ else
190
+ this.mapped("if (", statement, path);
191
+ this.value(plan.value);
192
+ if (statement.kind == "IfStatement") {
193
+ this.synthetic(") {\n", statement, path);
194
+ this.block(statement.consequent, `${path}/consequent`, `${indent} `);
195
+ this.synthetic(`${indent}}`, statement, path);
196
+ if (statement.alternate) {
197
+ this.mapped(" else ", statement, path);
198
+ this.synthetic("{\n", statement, path);
199
+ this.block(statement.alternate, `${path}/alternate`, `${indent} `);
200
+ this.synthetic(`${indent}}`, statement, path);
201
+ }
202
+ this.synthetic("\n", statement, path);
203
+ }
204
+ else {
205
+ this.synthetic(`${statement.kind == "PrintStatement" ? ")" : ""};\n`, statement, path);
206
+ if (statement.kind == "LocalDeclaration")
207
+ this.synthetic(`${indent}(void)${statement.name};\n`, statement, path);
208
+ }
209
+ this.synthetic(`${indent}/* ${marker} end ${plan.id} ${signature} */\n`, statement, path);
210
+ }
211
+ /**
212
+ * Emits each eager step or conditional RHS at its planned location.
213
+ * @param {PlannedStep[]} steps - Ordered private steps.
214
+ * @param {string} indent - Current indentation.
215
+ * @returns {void}
216
+ */
217
+ steps(steps, indent) {
218
+ for (const step of steps) {
219
+ const { result, operands, rightSteps } = step;
220
+ const { expression, path, name } = result;
221
+ const type = emitScalarType("c", { kind: "TypeReference", name: result.type });
222
+ this.synthetic(`${indent}${type} ${name} = `, expression, path);
223
+ if (rightSteps) {
224
+ this.value(operands[0]);
225
+ this.synthetic(`;\n${indent}if (`, expression, path);
226
+ if (expression.kind != "BinaryExpression")
227
+ throw new Error("Invalid conditional C plan.");
228
+ this.synthetic(`${expression.operation == "BooleanOr" ? "!" : ""}${name}) {\n`, expression, path);
229
+ this.steps(rightSteps, `${indent} `);
230
+ this.synthetic(`${indent} ${name} = (${name} `, expression, path);
231
+ this.mapped(expression.operation == "BooleanOr" ? "||" : "&&", expression, path, "operator");
232
+ this.synthetic(" ", expression, path);
233
+ this.value(operands[1]);
234
+ this.synthetic(`);\n${indent}}\n`, expression, path);
235
+ }
236
+ else {
237
+ this.operation(step);
238
+ this.synthetic(";\n", expression, path);
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Emits one nontrivial operation with pure operands.
244
+ * @param {PlannedStep} step - Eager step.
245
+ * @returns {void}
246
+ */
247
+ operation({ result: { expression, path }, operands }) {
248
+ if (expression.kind == "CallExpression") {
249
+ this.mapped(expression.callee, expression, path, "callee");
250
+ this.synthetic("(", expression, path);
251
+ operands.forEach((operand, index) => {
252
+ if (index)
253
+ this.synthetic(", ", expression, path);
254
+ this.value(operand);
255
+ });
256
+ this.synthetic(")", expression, path);
257
+ }
258
+ else if (expression.kind == "UnaryExpression") {
259
+ this.mapped(expression.operation == "IntegerNegate" ? "semantifold_integer_negate" : "!", expression, path, "operator");
260
+ this.synthetic("(", expression, path);
261
+ this.value(operands[0]);
262
+ this.synthetic(")", expression, path);
263
+ }
264
+ else if (expression.kind == "BinaryExpression") {
265
+ const token = binaryTokens.get(expression.operation);
266
+ if (!token)
267
+ throw new Error("Unsupported operation passed C planning.");
268
+ const helper = token.startsWith("semantifold_");
269
+ if (helper)
270
+ this.mapped(token, expression, path, "operator");
271
+ this.synthetic("(", expression, path);
272
+ this.value(operands[0]);
273
+ if (helper)
274
+ this.synthetic(", ", expression, path);
275
+ else {
276
+ this.synthetic(" ", expression, path);
277
+ this.mapped(token, expression, path, "operator");
278
+ this.synthetic(" ", expression, path);
279
+ }
280
+ this.value(operands[1]);
281
+ this.synthetic(")", expression, path);
282
+ }
283
+ else
284
+ throw new Error("Pure expression was scheduled as a C operation.");
285
+ }
286
+ /**
287
+ * Emits a pure operand with original token provenance or a synthetic temporary use.
288
+ * @param {PlannedValue} value - Planned pure operand.
289
+ * @returns {void}
290
+ */
291
+ value({ expression, path, name }) {
292
+ if (name)
293
+ return this.synthetic(name, expression, path);
294
+ if (expression.kind == "IdentifierExpression")
295
+ return this.mapped(expression.name, expression, path, "name");
296
+ if (expression.kind == "BooleanLiteral")
297
+ return this.mapped(String(expression.value), expression, path, "literal");
298
+ if (expression.kind == "IntegerLiteral")
299
+ return this.mapped(`INT64_C(${expression.value})`, expression, path, "literal");
300
+ if (expression.kind == "StringLiteral") {
301
+ const bytes = new TextEncoder().encode(expression.value);
302
+ const literal = Array.from(bytes, (byte) => `\\${byte.toString(8).padStart(3, "0")}`).join("");
303
+ return this.mapped(`SEMANTIFOLD_STRING("${literal}")`, expression, path, "literal");
304
+ }
305
+ throw new Error("Unsequenced expression passed C planning.");
306
+ }
307
+ }
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9jLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUM3RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0MsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3ZFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFFeEMsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUMxRSxvRUFBb0U7QUFDcEUsNERBQTREO0FBQzVELDhFQUE4RTtBQUM5RSw0RUFBNEU7QUFDNUUsdUZBQXVGO0FBRXZGLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzNCLENBQUMsWUFBWSxFQUFFLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSw4QkFBOEIsQ0FBQztJQUM5RixDQUFDLGlCQUFpQixFQUFFLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsMkJBQTJCLENBQUM7SUFDbEcsQ0FBQyxhQUFhLEVBQUUsMEJBQTBCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLDhCQUE4QixDQUFDO0lBQy9GLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFF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QUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDeEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7WUFFOUYsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixPQUFPLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3JGLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7SUFDOUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2ZpbmFsaXplTWFwcGluZywgdG9Tb3VyY2VNYXBWM30gZnJvbSBcIi4uL21hcHBpbmcuanNcIlxuaW1wb3J0IHtzdGF0ZW1lbnRTaWduYXR1cmUsIHBsYW5OYXRpdmVNb2R1bGV9IGZyb20gXCIuL29yZGVyZWQtZXhwcmVzc2lvbnMuanNcIlxuaW1wb3J0IHtjUnVudGltZUhlYWRlcn0gZnJvbSBcIi4vYy1ydW50aW1lLmpzXCJcbmltcG9ydCB7bWF4aW11bUNTb3VyY2VMZW5ndGgsIHZhbGlkYXRlQ01lbW9yeX0gZnJvbSBcIi4vYy12YWxpZGF0aW9uLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVOYXRpdmVHcmFwaH0gZnJvbSBcIi4vbmF0aXZlLXZhbGlkYXRpb24uanNcIlxuaW1wb3J0IHtlbWl0U2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlQmFja2VuZE1vZHVsZX0gZnJvbSBcIi4vc2hhcmVkLmpzXCJcbmltcG9ydCB7U291cmNlV3JpdGVyfSBmcm9tIFwiLi93cml0ZXIuanNcIlxuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpY01vZHVsZSAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGV9IFNlbWFudGljTm9kZSAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IFN0YXRlbWVudCAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gQmxvY2sgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9vcmRlcmVkLWV4cHJlc3Npb25zLmpzXCIpLlBsYW5uZWRWYWx1ZX0gUGxhbm5lZFZhbHVlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vb3JkZXJlZC1leHByZXNzaW9ucy5qc1wiKS5QbGFubmVkU3RlcH0gUGxhbm5lZFN0ZXAgKi9cbi8qKiBAdHlwZWRlZiB7e2lkOiBzdHJpbmcsIHN0ZXBzOiBQbGFubmVkU3RlcFtdLCB2YWx1ZTogUGxhbm5lZFZhbHVlfX0gU3RhdGVtZW50UGxhbiAqL1xuXG5jb25zdCBiaW5hcnlUb2tlbnMgPSBuZXcgTWFwKFtcbiAgW1wiSW50ZWdlckFkZFwiLCBcInNlbWFudGlmb2xkX2ludGVnZXJfYWRkXCJdLCBbXCJJbnRlZ2VyU3VidHJhY3RcIiwgXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX3N1YnRyYWN0XCJdLFxuICBbXCJJbnRlZ2VyTXVsdGlwbHlcIiwgXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX211bHRpcGx5XCJdLCBbXCJTdHJpbmdDb25jYXRcIiwgXCJzZW1hbnRpZm9sZF9zdHJpbmdfY29uY2F0XCJdLFxuICBbXCJTdHJpbmdFcXVhbFwiLCBcInNlbWFudGlmb2xkX3N0cmluZ19lcXVhbFwiXSwgW1wiU3RyaW5nTm90RXF1YWxcIiwgXCJzZW1hbnRpZm9sZF9zdHJpbmdfbm90X2VxdWFsXCJdLFxuICBbXCJJbnRlZ2VyRXF1YWxcIiwgXCI9PVwiXSwgW1wiSW50ZWdlck5vdEVxdWFsXCIsIFwiIT1cIl0sIFtcIkJvb2xlYW5FcXVhbFwiLCBcIj09XCJdLCBbXCJCb29sZWFuTm90RXF1YWxcIiwgXCIhPVwiXSxcbiAgW1wiSW50ZWdlckxlc3NUaGFuXCIsIFwiPFwiXSwgW1wiSW50ZWdlckxlc3NUaGFuT3JFcXVhbFwiLCBcIjw9XCJdLFxuICBbXCJJbnRlZ2VyR3JlYXRlclRoYW5cIiwgXCI+XCJdLCBbXCJJbnRlZ2VyR3JlYXRlclRoYW5PckVxdWFsXCIsIFwiPj1cIl1cbl0pXG5cbi8qKlxuICogUHJvZHVjZXMgYSBmdWxseSB2YWxpZGF0ZWQsIGRldGVybWluaXN0aWMgQzE3IHRyYW5zbGF0aW9uIHVuaXQgYW5kIG93bmVkIHN1cHBvcnQgaGVhZGVyLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU/OiBzdHJpbmcsIG1hcERpcmVjdGl2ZT86IHVua25vd24sIG1vZHVsZTogU2VtYW50aWNNb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lPzogdW5rbm93biwgc291cmNlcz86IHtmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX19IGlucHV0IC0gQmFja2VuZCByZXF1ZXN0LlxuICogQHJldHVybnMge3thcnRpZmFjdHM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0W10sIHRhcmdldDogc3RyaW5nfX0gQ29tcGxldGUgY2FuZGlkYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDUHJvZ3JhbSh7ZmlsZW5hbWUsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCBzb3VyY2VNYXBGaWxlbmFtZSwgc291cmNlc30pIHtcbiAgdmFsaWRhdGVOYXRpdmVHcmFwaChtb2R1bGUpXG4gIHZhbGlkYXRlQmFja2VuZE1vZHVsZShtb2R1bGUsIFwiY1wiKVxuICB2YWxpZGF0ZUNNZW1vcnkobW9kdWxlKVxuICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCAmJiBmaWxlbmFtZSAhPSBcInByb2dyYW0uY1wiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJjXCIsIFwiYXJ0aWZhY3QgZmlsZW5hbWUgb3RoZXIgdGhhbiBwcm9ncmFtLmNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAobWFwRGlyZWN0aXZlICE9PSB1bmRlZmluZWQgfHwgc291cmNlTWFwRmlsZW5hbWUgIT09IHVuZGVmaW5lZCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiY1wiLCBcInNvdXJjZS1tYXAgZmlsZW5hbWUgb3IgZGlyZWN0aXZlIG9wdGlvblwiLCBtb2R1bGUubG9jYXRpb24pXG4gIGNvbnN0IHBsYW5zID0gcGxhbk5hdGl2ZU1vZHVsZShtb2R1bGUpXG5cbiAgbmV3IENFbWl0dGVyKHVuZGVmaW5lZCwgcGxhbnMsIG1vZHVsZS5sb2NhdGlvbikucHJvZ3JhbShtb2R1bGUpXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBTb3VyY2VXcml0ZXIoe2ZpbGVuYW1lOiBcInByb2dyYW0uY1wiLCBsYW5ndWFnZTogXCJjXCIsIG1vZHVsZSwgc291cmNlc30pXG4gIGNvbnN0IGVtaXR0ZXIgPSBuZXcgQ0VtaXR0ZXIod3JpdGVyLCBwbGFucywgbW9kdWxlLmxvY2F0aW9uKVxuXG4gIGVtaXR0ZXIucHJvZ3JhbShtb2R1bGUpXG4gIGNvbnN0IG1hcHBpbmcgPSBmaW5hbGl6ZU1hcHBpbmcod3JpdGVyLmZpbmlzaCgpKVxuICBjb25zdCByb290ID0gbWFwcGluZy5ub2Rlcy5maW5kKCh7cGF0aH0pID0+IHBhdGggPT0gXCJcIilcblxuICBpZiAoIXJvb3QpIHRocm93IG5ldyBFcnJvcihcIlZhbGlkYXRlZCBDIG1vZHVsZSBvbWl0dGVkIGl0cyByb290IHByb3ZlbmFuY2UuXCIpXG4gIGNvbnN0IHJlbGF0ZWRPcmlnaW5zID0gcm9vdC5vcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiXG4gICAgPyBbe2xvY2F0aW9uOiByb290Lm9yaWdpbi5sb2NhdGlvbiwgbm9kZUlkOiByb290LmlkLCByb2xlOiBcIm1vZHVsZVwiLCBzb3VyY2VJZDogcm9vdC5vcmlnaW4uc291cmNlSWR9XVxuICAgIDogKHJvb3Qub3JpZ2luLmtpbmQgPT0gXCJkZXJpdmVkXCIgPyByb290Lm9yaWdpbi5vcmlnaW5zIDogcm9vdC5vcmlnaW4ucmVsYXRlZE9yaWdpbnMpLm1hcCgob3JpZ2luKSA9PlxuICAgICAgKHsuLi5vcmlnaW4sIG5vZGVJZDogb3JpZ2luLm5vZGVJZCA/PyByb290LmlkLCByb2xlOiBvcmlnaW4ucm9sZSA/PyBcIm1vZHVsZVwifSkpXG5cbiAgcmV0dXJuIHt0YXJnZXQ6IFwiY1wiLCBhcnRpZmFjdHM6IFt7XG4gICAgY29udGVudDogbWFwcGluZy5nZW5lcmF0ZWQuY29udGVudCwgY29udGVudEtpbmQ6IFwidGV4dFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LWNcIiwgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLCBwYXRoOiBcInByb2dyYW0uY1wiLFxuICAgIHByb3ZlbmFuY2U6IHtraW5kOiBcInRleHRcIiwgbWFwcGluZywgc291cmNlTWFwOiB0b1NvdXJjZU1hcFYzKG1hcHBpbmcpfSwgcm9sZTogXCJlbnRyeVwiXG4gIH0sIHtcbiAgICBjb250ZW50OiBjUnVudGltZUhlYWRlciwgY29udGVudEtpbmQ6IFwidGV4dFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LWNcIiwgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLCBwYXRoOiBcInNlbWFudGlmb2xkX3J1bnRpbWUuaFwiLFxuICAgIHByb3ZlbmFuY2U6IHtraW5kOiBcInN5bnRoZXRpY1wiLCByZWFzb246IFwiQ2Fub25pY2FsIEMxNyBzY2FsYXIgaGVscGVycyBhbmQgbW9kdWxlLWxpZmV0aW1lIGltbXV0YWJsZSBVVEYtOCBhcmVuYS5cIiwgcmVsYXRlZE9yaWdpbnN9LCByb2xlOiBcInN1cHBvcnRcIlxuICB9XX1cbn1cblxuLyoqIFdyaXRlcyBvbmx5IHRhcmdldCBzeW50YXggZnJvbSB2YWxpZGF0ZWQgc2VtYW50aWMgb2NjdXJyZW5jZXMgYW5kIHByaXZhdGUgcGxhbnMuICovXG5jbGFzcyBDRW1pdHRlciB7XG4gIC8qKlxuICAgKiBCaW5kcyB0aGUgd3JpdGVyIGFuZCBjb21wbGV0ZSBwbGFuLlxuICAgKiBAcGFyYW0ge1NvdXJjZVdyaXRlciB8IHVuZGVmaW5lZH0gd3JpdGVyIC0gUHJvdmVuYW5jZSB3cml0ZXI7IG9taXR0ZWQgZm9yIGV4YWN0IHNpemUgcHJlZmxpZ2h0LlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIFN0YXRlbWVudFBsYW4+fSBwbGFucyAtIFZhbGlkYXRlZCBvY2N1cnJlbmNlIHBsYW5zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFJvb3QgZGlhZ25vc3RpYyBsb2NhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHdyaXRlciwgcGxhbnMsIGxvY2F0aW9uKSB7XG4gICAgdGhpcy53cml0ZXIgPSB3cml0ZXJcbiAgICB0aGlzLnBsYW5zID0gcGxhbnNcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb25cbiAgICB0aGlzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgZ2VuZXJhdGVkIHNjYWZmb2xkIHdpdGggYSByZWxhdGVkIHNlbWFudGljIG9yaWdpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBDIHN5bnRheC5cbiAgICogQHBhcmFtIHtTZW1hbnRpY05vZGV9IG5vZGUgLSBSZWxhdGVkIG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gT2NjdXJyZW5jZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN5bnRoZXRpYyh0ZXh0LCBub2RlLCBwYXRoKSB7XG4gICAgdGhpcy5jaGVja1NpemUodGV4dCwgbm9kZSlcbiAgICB0aGlzLndyaXRlcj8uc3ludGhldGljKHRleHQsIFwiQzE3IG9yZGVyZWQtZXhwcmVzc2lvbiBhbmQgbGlmZXRpbWUgc2NhZmZvbGRcIiwgW25vZGVdLCBbcGF0aF0pXG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGFuIG9yaWdpbmFsIHNlbWFudGljIHRva2VuIG9yIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUYXJnZXQgdG9rZW4uXG4gICAqIEBwYXJhbSB7U2VtYW50aWNOb2RlfSBub2RlIC0gT3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBPY2N1cnJlbmNlIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcm9sZV0gLSBQYXJzZXIgdG9rZW4gcm9sZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBtYXBwZWQodGV4dCwgbm9kZSwgcGF0aCwgcm9sZSkge1xuICAgIHRoaXMuY2hlY2tTaXplKHRleHQsIG5vZGUpXG4gICAgdGhpcy53cml0ZXI/Lm1hcHBlZCh0ZXh0LCB7bWFwcGluZ0tpbmQ6IHJvbGUgPyBcImV4YWN0XCIgOiBcImFuY2hvclwiLCBub2RlLCBwYXRoLCAuLi4ocm9sZSA/IHtyb2xlfSA6IHt9KX0pXG4gIH1cblxuICAvKipcbiAgICogQm91bmRzIHByaXZhdGUgZW1pc3Npb24gYmVmb3JlIGFueSBhcnRpZmFjdCBjYW4gZXNjYXBlIHRoZSBwYXJzZXIncyBwcm92ZW4gaW5wdXQgcHJvZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBOZXh0IGV4YWN0IG91dHB1dCBjaHVuay5cbiAgICogQHBhcmFtIHtTZW1hbnRpY05vZGV9IG5vZGUgLSBSZWxhdGVkIHNlbWFudGljIG9jY3VycmVuY2UuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2hlY2tTaXplKHRleHQsIG5vZGUpIHtcbiAgICB0aGlzLmxlbmd0aCArPSB0ZXh0Lmxlbmd0aFxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heGltdW1DU291cmNlTGVuZ3RoKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJjXCIsIFwiZ2VuZXJhdGVkIHByb2dyYW0gZXhjZWVkcyB0aGUgZnJvemVuIEMgcGFyc2VyJ3MgMzI3NjcgVVRGLTE2IGlucHV0IGxpbWl0XCIsXG4gICAgICBcImxvY2F0aW9uXCIgaW4gbm9kZSA/IG5vZGUubG9jYXRpb24gOiB0aGlzLmxvY2F0aW9uKVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGNhbm9uaWNhbCBwcm90b3R5cGVzLCBkZWZpbml0aW9ucywgYW5kIHRoZSBjbGVhbnVwLW93bmluZyBtYWluLlxuICAgKiBAcGFyYW0ge1NlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcHJvZ3JhbShtb2R1bGUpIHtcbiAgICB0aGlzLnN5bnRoZXRpYygnLyogc2VtYW50aWZvbGQ6cHJvZ3JhbTpjOnYxICovXFxuI2luY2x1ZGUgXCJzZW1hbnRpZm9sZF9ydW50aW1lLmhcIlxcblxcbicsIG1vZHVsZSwgXCJcIilcbiAgICBtb2R1bGUuZnVuY3Rpb25zLmZvckVhY2goKGRlY2xhcmF0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IGAke2VtaXRTY2FsYXJUeXBlKFwiY1wiLCBwYXJhbWV0ZXIudHlwZSl9ICR7cGFyYW1ldGVyLm5hbWV9YCkuam9pbihcIiwgXCIpXG5cbiAgICAgIHRoaXMuc3ludGhldGljKGBzdGF0aWMgJHtlbWl0U2NhbGFyVHlwZShcImNcIiwgZGVjbGFyYXRpb24ucmV0dXJuVHlwZSl9ICR7ZGVjbGFyYXRpb24ubmFtZX0oJHtwYXJhbWV0ZXJzfSk7XFxuYCwgZGVjbGFyYXRpb24sIGAvZnVuY3Rpb25zLyR7aW5kZXh9YClcbiAgICB9KVxuICAgIG1vZHVsZS5mdW5jdGlvbnMuZm9yRWFjaCgoZGVjbGFyYXRpb24sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gYC9mdW5jdGlvbnMvJHtpbmRleH1gXG5cbiAgICAgIHRoaXMuc3ludGhldGljKFwiXFxuc3RhdGljIFwiLCBkZWNsYXJhdGlvbiwgcGF0aClcbiAgICAgIHRoaXMubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiY1wiLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlKSwgZGVjbGFyYXRpb24ucmV0dXJuVHlwZSwgYCR7cGF0aH0vcmV0dXJuVHlwZWAsIFwidHlwZVwiKVxuICAgICAgdGhpcy5zeW50aGV0aWMoXCIgXCIsIGRlY2xhcmF0aW9uLCBwYXRoKVxuICAgICAgdGhpcy5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24sIHBhdGgsIFwibmFtZVwiKVxuICAgICAgdGhpcy5zeW50aGV0aWMoXCIoXCIsIGRlY2xhcmF0aW9uLCBwYXRoKVxuICAgICAgZGVjbGFyYXRpb24ucGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIHBhcmFtZXRlckluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YFxuXG4gICAgICAgIGlmIChwYXJhbWV0ZXJJbmRleCkgdGhpcy5zeW50aGV0aWMoXCIsIFwiLCBwYXJhbWV0ZXIsIHBhcmFtZXRlclBhdGgpXG4gICAgICAgIHRoaXMubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiY1wiLCBwYXJhbWV0ZXIudHlwZSksIHBhcmFtZXRlci50eXBlLCBgJHtwYXJhbWV0ZXJQYXRofS90eXBlYCwgXCJ0eXBlXCIpXG4gICAgICAgIHRoaXMuc3ludGhldGljKFwiIFwiLCBwYXJhbWV0ZXIsIHBhcmFtZXRlclBhdGgpXG4gICAgICAgIHRoaXMubWFwcGVkKHBhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIsIHBhcmFtZXRlclBhdGgsIFwibmFtZVwiKVxuICAgICAgfSlcbiAgICAgIHRoaXMuc3ludGhldGljKFwiKSB7XFxuXCIsIGRlY2xhcmF0aW9uLCBwYXRoKVxuICAgICAgZGVjbGFyYXRpb24ucGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIHBhcmFtZXRlckluZGV4KSA9PiB0aGlzLnN5bnRoZXRpYyhgICAgICh2b2lkKSR7cGFyYW1ldGVyLm5hbWV9O1xcbmAsIHBhcmFtZXRlciwgYCR7cGF0aH0vcGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWApKVxuICAgICAgdGhpcy5ibG9jayhkZWNsYXJhdGlvbi5ib2R5LCBgJHtwYXRofS9ib2R5YCwgXCIgICAgXCIpXG4gICAgICB0aGlzLnN5bnRoZXRpYyhcIn1cXG5cIiwgZGVjbGFyYXRpb24sIHBhdGgpXG4gICAgfSlcbiAgICB0aGlzLnN5bnRoZXRpYyhcIlxcbmludCBtYWluKHZvaWQpIHtcXG5cIiwgbW9kdWxlLmVudHJ5UG9pbnQsIFwiL2VudHJ5UG9pbnRcIilcbiAgICBtb2R1bGUuZnVuY3Rpb25zLmZvckVhY2goKGRlY2xhcmF0aW9uLCBpbmRleCkgPT4gdGhpcy5zeW50aGV0aWMoYCAgICAodm9pZCkke2RlY2xhcmF0aW9uLm5hbWV9O1xcbmAsIGRlY2xhcmF0aW9uLCBgL2Z1bmN0aW9ucy8ke2luZGV4fWApKVxuICAgIHRoaXMuYmxvY2sobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCIvZW50cnlQb2ludC9ib2R5XCIsIFwiICAgIFwiKVxuICAgIHRoaXMuc3ludGhldGljKFwiICAgIHNlbWFudGlmb2xkX2NsZWFudXAoKTtcXG4gICAgcmV0dXJuIDA7XFxufVxcblwiLCBtb2R1bGUuZW50cnlQb2ludCwgXCIvZW50cnlQb2ludFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHN0YXRlbWVudHMgaW4gc2VtYW50aWMgc291cmNlIG9yZGVyLlxuICAgKiBAcGFyYW0ge0Jsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIE9jY3VycmVuY2UgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYmxvY2soYmxvY2ssIHBhdGgsIGluZGVudCkge1xuICAgIGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50LCBpbmRleCkgPT4gdGhpcy5zdGF0ZW1lbnQoc3RhdGVtZW50LCBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YCwgaW5kZW50KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBvbmUgcGFpcmVkIHJlZ2lvbiB3aXRoIGEgcHVyZSBmaW5hbCBjb25zdW1lci5cbiAgICogQHBhcmFtIHtTdGF0ZW1lbnR9IHN0YXRlbWVudCAtIE9yaWdpbmFsIHN0YXRlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBPY2N1cnJlbmNlIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgLSBDdXJyZW50IGluZGVudGF0aW9uLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRlbWVudChzdGF0ZW1lbnQsIHBhdGgsIGluZGVudCkge1xuICAgIGNvbnN0IHBsYW4gPSB0aGlzLnBsYW5zLmdldChwYXRoKVxuXG4gICAgaWYgKCFwbGFuKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHZhbGlkYXRlZCBDIHN0YXRlbWVudCBwbGFuLlwiKVxuICAgIGNvbnN0IG1hcmtlciA9IGBzZW1hbnRpZm9sZDpvcmRlcmVkLWV4cHJlc3Npb246Yzp2MWBcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzdGF0ZW1lbnRTaWduYXR1cmUoc3RhdGVtZW50KVxuXG4gICAgdGhpcy5zeW50aGV0aWMoYCR7aW5kZW50fS8qICR7bWFya2VyfSBiZWdpbiAke3BsYW4uaWR9ICR7c2lnbmF0dXJlfSAqL1xcbmAsIHN0YXRlbWVudCwgcGF0aClcbiAgICB0aGlzLnN0ZXBzKHBsYW4uc3RlcHMsIGluZGVudClcbiAgICB0aGlzLnN5bnRoZXRpYyhpbmRlbnQsIHN0YXRlbWVudCwgcGF0aClcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICghc3RhdGVtZW50Lm11dGFibGUpIHRoaXMuc3ludGhldGljKFwiY29uc3QgXCIsIHN0YXRlbWVudCwgcGF0aClcbiAgICAgIHRoaXMubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiY1wiLCBzdGF0ZW1lbnQudHlwZSksIHN0YXRlbWVudC50eXBlLCBgJHtwYXRofS90eXBlYCwgXCJ0eXBlXCIpXG4gICAgICB0aGlzLnN5bnRoZXRpYyhcIiBcIiwgc3RhdGVtZW50LCBwYXRoKVxuICAgICAgdGhpcy5tYXBwZWQoc3RhdGVtZW50Lm5hbWUsIHN0YXRlbWVudCwgcGF0aCwgXCJuYW1lXCIpXG4gICAgICB0aGlzLnN5bnRoZXRpYyhcIiBcIiwgc3RhdGVtZW50LCBwYXRoKVxuICAgICAgdGhpcy5tYXBwZWQoXCI9XCIsIHN0YXRlbWVudCwgcGF0aCwgXCJvcGVyYXRvclwiKVxuICAgICAgdGhpcy5zeW50aGV0aWMoXCIgXCIsIHN0YXRlbWVudCwgcGF0aClcbiAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgICB0aGlzLm1hcHBlZChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUsIHN0YXRlbWVudC50YXJnZXQsIGAke3BhdGh9L3RhcmdldGAsIFwibmFtZVwiKVxuICAgICAgdGhpcy5zeW50aGV0aWMoXCIgXCIsIHN0YXRlbWVudCwgcGF0aClcbiAgICAgIHRoaXMubWFwcGVkKFwiPVwiLCBzdGF0ZW1lbnQsIHBhdGgsIFwib3BlcmF0b3JcIilcbiAgICAgIHRoaXMuc3ludGhldGljKFwiIFwiLCBzdGF0ZW1lbnQsIHBhdGgpXG4gICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB0aGlzLm1hcHBlZChcInJldHVybiBcIiwgc3RhdGVtZW50LCBwYXRoKVxuICAgIGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikgdGhpcy5tYXBwZWQoYHNlbWFudGlmb2xkX3ByaW50XyR7cGxhbi52YWx1ZS50eXBlfShgLCBzdGF0ZW1lbnQsIHBhdGgpXG4gICAgZWxzZSB0aGlzLm1hcHBlZChcImlmIChcIiwgc3RhdGVtZW50LCBwYXRoKVxuICAgIHRoaXMudmFsdWUocGxhbi52YWx1ZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICB0aGlzLnN5bnRoZXRpYyhcIikge1xcblwiLCBzdGF0ZW1lbnQsIHBhdGgpXG4gICAgICB0aGlzLmJsb2NrKHN0YXRlbWVudC5jb25zZXF1ZW50LCBgJHtwYXRofS9jb25zZXF1ZW50YCwgYCR7aW5kZW50fSAgICBgKVxuICAgICAgdGhpcy5zeW50aGV0aWMoYCR7aW5kZW50fX1gLCBzdGF0ZW1lbnQsIHBhdGgpXG4gICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkge1xuICAgICAgICB0aGlzLm1hcHBlZChcIiBlbHNlIFwiLCBzdGF0ZW1lbnQsIHBhdGgpXG4gICAgICAgIHRoaXMuc3ludGhldGljKFwie1xcblwiLCBzdGF0ZW1lbnQsIHBhdGgpXG4gICAgICAgIHRoaXMuYmxvY2soc3RhdGVtZW50LmFsdGVybmF0ZSwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgYCR7aW5kZW50fSAgICBgKVxuICAgICAgICB0aGlzLnN5bnRoZXRpYyhgJHtpbmRlbnR9fWAsIHN0YXRlbWVudCwgcGF0aClcbiAgICAgIH1cbiAgICAgIHRoaXMuc3ludGhldGljKFwiXFxuXCIsIHN0YXRlbWVudCwgcGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zeW50aGV0aWMoYCR7c3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiID8gXCIpXCIgOiBcIlwifTtcXG5gLCBzdGF0ZW1lbnQsIHBhdGgpXG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHRoaXMuc3ludGhldGljKGAke2luZGVudH0odm9pZCkke3N0YXRlbWVudC5uYW1lfTtcXG5gLCBzdGF0ZW1lbnQsIHBhdGgpXG4gICAgfVxuICAgIHRoaXMuc3ludGhldGljKGAke2luZGVudH0vKiAke21hcmtlcn0gZW5kICR7cGxhbi5pZH0gJHtzaWduYXR1cmV9ICovXFxuYCwgc3RhdGVtZW50LCBwYXRoKVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGVhY2ggZWFnZXIgc3RlcCBvciBjb25kaXRpb25hbCBSSFMgYXQgaXRzIHBsYW5uZWQgbG9jYXRpb24uXG4gICAqIEBwYXJhbSB7UGxhbm5lZFN0ZXBbXX0gc3RlcHMgLSBPcmRlcmVkIHByaXZhdGUgc3RlcHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgLSBDdXJyZW50IGluZGVudGF0aW9uLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0ZXBzKHN0ZXBzLCBpbmRlbnQpIHtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMpIHtcbiAgICAgIGNvbnN0IHtyZXN1bHQsIG9wZXJhbmRzLCByaWdodFN0ZXBzfSA9IHN0ZXBcbiAgICAgIGNvbnN0IHtleHByZXNzaW9uLCBwYXRoLCBuYW1lfSA9IHJlc3VsdFxuICAgICAgY29uc3QgdHlwZSA9IGVtaXRTY2FsYXJUeXBlKFwiY1wiLCB7a2luZDogXCJUeXBlUmVmZXJlbmNlXCIsIG5hbWU6IHJlc3VsdC50eXBlfSlcblxuICAgICAgdGhpcy5zeW50aGV0aWMoYCR7aW5kZW50fSR7dHlwZX0gJHtuYW1lfSA9IGAsIGV4cHJlc3Npb24sIHBhdGgpXG4gICAgICBpZiAocmlnaHRTdGVwcykge1xuICAgICAgICB0aGlzLnZhbHVlKG9wZXJhbmRzWzBdKVxuICAgICAgICB0aGlzLnN5bnRoZXRpYyhgO1xcbiR7aW5kZW50fWlmIChgLCBleHByZXNzaW9uLCBwYXRoKVxuICAgICAgICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvbmRpdGlvbmFsIEMgcGxhbi5cIilcbiAgICAgICAgdGhpcy5zeW50aGV0aWMoYCR7ZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJCb29sZWFuT3JcIiA/IFwiIVwiIDogXCJcIn0ke25hbWV9KSB7XFxuYCwgZXhwcmVzc2lvbiwgcGF0aClcbiAgICAgICAgdGhpcy5zdGVwcyhyaWdodFN0ZXBzLCBgJHtpbmRlbnR9ICAgIGApXG4gICAgICAgIHRoaXMuc3ludGhldGljKGAke2luZGVudH0gICAgJHtuYW1lfSA9ICgke25hbWV9IGAsIGV4cHJlc3Npb24sIHBhdGgpXG4gICAgICAgIHRoaXMubWFwcGVkKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiQm9vbGVhbk9yXCIgPyBcInx8XCIgOiBcIiYmXCIsIGV4cHJlc3Npb24sIHBhdGgsIFwib3BlcmF0b3JcIilcbiAgICAgICAgdGhpcy5zeW50aGV0aWMoXCIgXCIsIGV4cHJlc3Npb24sIHBhdGgpXG4gICAgICAgIHRoaXMudmFsdWUob3BlcmFuZHNbMV0pXG4gICAgICAgIHRoaXMuc3ludGhldGljKGApO1xcbiR7aW5kZW50fX1cXG5gLCBleHByZXNzaW9uLCBwYXRoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24oc3RlcClcbiAgICAgICAgdGhpcy5zeW50aGV0aWMoXCI7XFxuXCIsIGV4cHJlc3Npb24sIHBhdGgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIG9uZSBub250cml2aWFsIG9wZXJhdGlvbiB3aXRoIHB1cmUgb3BlcmFuZHMuXG4gICAqIEBwYXJhbSB7UGxhbm5lZFN0ZXB9IHN0ZXAgLSBFYWdlciBzdGVwLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9wZXJhdGlvbih7cmVzdWx0OiB7ZXhwcmVzc2lvbiwgcGF0aH0sIG9wZXJhbmRzfSkge1xuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICB0aGlzLm1hcHBlZChleHByZXNzaW9uLmNhbGxlZSwgZXhwcmVzc2lvbiwgcGF0aCwgXCJjYWxsZWVcIilcbiAgICAgIHRoaXMuc3ludGhldGljKFwiKFwiLCBleHByZXNzaW9uLCBwYXRoKVxuICAgICAgb3BlcmFuZHMuZm9yRWFjaCgob3BlcmFuZCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4KSB0aGlzLnN5bnRoZXRpYyhcIiwgXCIsIGV4cHJlc3Npb24sIHBhdGgpXG4gICAgICAgIHRoaXMudmFsdWUob3BlcmFuZClcbiAgICAgIH0pXG4gICAgICB0aGlzLnN5bnRoZXRpYyhcIilcIiwgZXhwcmVzc2lvbiwgcGF0aClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB0aGlzLm1hcHBlZChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIiA/IFwic2VtYW50aWZvbGRfaW50ZWdlcl9uZWdhdGVcIiA6IFwiIVwiLCBleHByZXNzaW9uLCBwYXRoLCBcIm9wZXJhdG9yXCIpXG4gICAgICB0aGlzLnN5bnRoZXRpYyhcIihcIiwgZXhwcmVzc2lvbiwgcGF0aClcbiAgICAgIHRoaXMudmFsdWUob3BlcmFuZHNbMF0pXG4gICAgICB0aGlzLnN5bnRoZXRpYyhcIilcIiwgZXhwcmVzc2lvbiwgcGF0aClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgY29uc3QgdG9rZW4gPSBiaW5hcnlUb2tlbnMuZ2V0KGV4cHJlc3Npb24ub3BlcmF0aW9uKVxuXG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBvcGVyYXRpb24gcGFzc2VkIEMgcGxhbm5pbmcuXCIpXG4gICAgICBjb25zdCBoZWxwZXIgPSB0b2tlbi5zdGFydHNXaXRoKFwic2VtYW50aWZvbGRfXCIpXG5cbiAgICAgIGlmIChoZWxwZXIpIHRoaXMubWFwcGVkKHRva2VuLCBleHByZXNzaW9uLCBwYXRoLCBcIm9wZXJhdG9yXCIpXG4gICAgICB0aGlzLnN5bnRoZXRpYyhcIihcIiwgZXhwcmVzc2lvbiwgcGF0aClcbiAgICAgIHRoaXMudmFsdWUob3BlcmFuZHNbMF0pXG4gICAgICBpZiAoaGVscGVyKSB0aGlzLnN5bnRoZXRpYyhcIiwgXCIsIGV4cHJlc3Npb24sIHBhdGgpXG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5zeW50aGV0aWMoXCIgXCIsIGV4cHJlc3Npb24sIHBhdGgpXG4gICAgICAgIHRoaXMubWFwcGVkKHRva2VuLCBleHByZXNzaW9uLCBwYXRoLCBcIm9wZXJhdG9yXCIpXG4gICAgICAgIHRoaXMuc3ludGhldGljKFwiIFwiLCBleHByZXNzaW9uLCBwYXRoKVxuICAgICAgfVxuICAgICAgdGhpcy52YWx1ZShvcGVyYW5kc1sxXSlcbiAgICAgIHRoaXMuc3ludGhldGljKFwiKVwiLCBleHByZXNzaW9uLCBwYXRoKVxuICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJQdXJlIGV4cHJlc3Npb24gd2FzIHNjaGVkdWxlZCBhcyBhIEMgb3BlcmF0aW9uLlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgcHVyZSBvcGVyYW5kIHdpdGggb3JpZ2luYWwgdG9rZW4gcHJvdmVuYW5jZSBvciBhIHN5bnRoZXRpYyB0ZW1wb3JhcnkgdXNlLlxuICAgKiBAcGFyYW0ge1BsYW5uZWRWYWx1ZX0gdmFsdWUgLSBQbGFubmVkIHB1cmUgb3BlcmFuZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICB2YWx1ZSh7ZXhwcmVzc2lvbiwgcGF0aCwgbmFtZX0pIHtcbiAgICBpZiAobmFtZSkgcmV0dXJuIHRoaXMuc3ludGhldGljKG5hbWUsIGV4cHJlc3Npb24sIHBhdGgpXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHJldHVybiB0aGlzLm1hcHBlZChleHByZXNzaW9uLm5hbWUsIGV4cHJlc3Npb24sIHBhdGgsIFwibmFtZVwiKVxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSByZXR1cm4gdGhpcy5tYXBwZWQoU3RyaW5nKGV4cHJlc3Npb24udmFsdWUpLCBleHByZXNzaW9uLCBwYXRoLCBcImxpdGVyYWxcIilcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikgcmV0dXJuIHRoaXMubWFwcGVkKGBJTlQ2NF9DKCR7ZXhwcmVzc2lvbi52YWx1ZX0pYCwgZXhwcmVzc2lvbiwgcGF0aCwgXCJsaXRlcmFsXCIpXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZXhwcmVzc2lvbi52YWx1ZSlcbiAgICAgIGNvbnN0IGxpdGVyYWwgPSBBcnJheS5mcm9tKGJ5dGVzLCAoYnl0ZSkgPT4gYFxcXFwke2J5dGUudG9TdHJpbmcoOCkucGFkU3RhcnQoMywgXCIwXCIpfWApLmpvaW4oXCJcIilcblxuICAgICAgcmV0dXJuIHRoaXMubWFwcGVkKGBTRU1BTlRJRk9MRF9TVFJJTkcoXCIke2xpdGVyYWx9XCIpYCwgZXhwcmVzc2lvbiwgcGF0aCwgXCJsaXRlcmFsXCIpXG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc2VxdWVuY2VkIGV4cHJlc3Npb24gcGFzc2VkIEMgcGxhbm5pbmcuXCIpXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ /** Exact C++20 native support; owned scalar values never expose implementation lifetimes. */
2
+ export declare const cppRuntime = "#include <cstdint>\n#include <cstdio>\n#include <cstdlib>\n#include <string>\n#include <limits>\n#include <climits>\n\nstatic_assert(CHAR_BIT == 8 && sizeof(std::int64_t) == 8, \"Semantifold requires eight-bit bytes and int64\");\nstatic_assert(sizeof(std::size_t) == 8 && sizeof(std::ptrdiff_t) == 8, \"Semantifold requires the qualified 64-bit ABI\");\nstatic_assert(_GLIBCXX_USE_CXX11_ABI == 1, \"Semantifold requires libstdc++ C++11 string ABI\");\n\n[[noreturn]] inline void semantifold_fatal(const char *message, std::size_t length) {\n (void)std::fwrite(message, 1, length, stderr);\n std::exit(70);\n}\n\ninline std::int64_t semantifold_integer_add(std::int64_t left, std::int64_t right) {\n std::int64_t result;\n if (__builtin_add_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\ninline std::int64_t semantifold_integer_subtract(std::int64_t left, std::int64_t right) {\n std::int64_t result;\n if (__builtin_sub_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\ninline std::int64_t semantifold_integer_multiply(std::int64_t left, std::int64_t right) {\n std::int64_t result;\n if (__builtin_mul_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\ninline std::int64_t semantifold_integer_negate(std::int64_t value) {\n return semantifold_integer_subtract(std::int64_t(0), value);\n}\n\ninline std::string semantifold_string_concat(std::string left, std::string right) {\n if (right.size() > left.max_size() - left.size()) {\n semantifold_fatal(\"semantifold: string size\\n\", sizeof(\"semantifold: string size\\n\") - 1);\n }\n return left + right;\n}\n\ninline bool semantifold_string_equal(std::string left, std::string right) {\n return left == right;\n}\n\ninline bool semantifold_string_not_equal(std::string left, std::string right) {\n return left != right;\n}\n\ninline void semantifold_write(const char *data, std::size_t length) {\n if (length != 0 && std::fwrite(data, 1, length, stdout) != length) {\n semantifold_fatal(\"semantifold: output failure\\n\", sizeof(\"semantifold: output failure\\n\") - 1);\n }\n}\n\ninline void semantifold_newline() {\n semantifold_write(\"\\n\", 1);\n if (std::fflush(stdout) != 0) semantifold_fatal(\"semantifold: output failure\\n\", sizeof(\"semantifold: output failure\\n\") - 1);\n}\n\ninline void semantifold_print_string(std::string value) {\n semantifold_write(value.data(), value.size());\n semantifold_newline();\n}\n\ninline void semantifold_print_boolean(bool value) {\n if (value) semantifold_write(\"true\", 4);\n else semantifold_write(\"false\", 5);\n semantifold_newline();\n}\n\ninline void semantifold_print_integer(std::int64_t value) {\n char digits[20];\n std::size_t position = sizeof(digits);\n std::uint64_t magnitude = static_cast<std::uint64_t>(value);\n if (value < 0) magnitude = std::uint64_t(0) - magnitude;\n do {\n digits[--position] = static_cast<char>(std::uint64_t(48) + magnitude % std::uint64_t(10));\n magnitude /= std::uint64_t(10);\n } while (magnitude != 0);\n if (value < 0) digits[--position] = '-';\n semantifold_write(digits + position, sizeof(digits) - position);\n semantifold_newline();\n}\n/* semantifold:runtime:cpp:v1 end */\n";
3
+ //# sourceMappingURL=cpp-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpp-runtime.d.ts","sourceRoot":"","sources":["../../../src/backends/cpp-runtime.js"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,eAAO,MAAM,UAAU,8kHA+FtB,CAAA"}
@@ -0,0 +1,99 @@
1
+ // @ts-check
2
+ /** Exact C++20 native support; owned scalar values never expose implementation lifetimes. */
3
+ export const cppRuntime = `#include <cstdint>
4
+ #include <cstdio>
5
+ #include <cstdlib>
6
+ #include <string>
7
+ #include <limits>
8
+ #include <climits>
9
+
10
+ static_assert(CHAR_BIT == 8 && sizeof(std::int64_t) == 8, "Semantifold requires eight-bit bytes and int64");
11
+ static_assert(sizeof(std::size_t) == 8 && sizeof(std::ptrdiff_t) == 8, "Semantifold requires the qualified 64-bit ABI");
12
+ static_assert(_GLIBCXX_USE_CXX11_ABI == 1, "Semantifold requires libstdc++ C++11 string ABI");
13
+
14
+ [[noreturn]] inline void semantifold_fatal(const char *message, std::size_t length) {
15
+ (void)std::fwrite(message, 1, length, stderr);
16
+ std::exit(70);
17
+ }
18
+
19
+ inline std::int64_t semantifold_integer_add(std::int64_t left, std::int64_t right) {
20
+ std::int64_t result;
21
+ if (__builtin_add_overflow(left, right, &result)) {
22
+ semantifold_fatal("semantifold: integer overflow\\n", sizeof("semantifold: integer overflow\\n") - 1);
23
+ }
24
+ return result;
25
+ }
26
+
27
+ inline std::int64_t semantifold_integer_subtract(std::int64_t left, std::int64_t right) {
28
+ std::int64_t result;
29
+ if (__builtin_sub_overflow(left, right, &result)) {
30
+ semantifold_fatal("semantifold: integer overflow\\n", sizeof("semantifold: integer overflow\\n") - 1);
31
+ }
32
+ return result;
33
+ }
34
+
35
+ inline std::int64_t semantifold_integer_multiply(std::int64_t left, std::int64_t right) {
36
+ std::int64_t result;
37
+ if (__builtin_mul_overflow(left, right, &result)) {
38
+ semantifold_fatal("semantifold: integer overflow\\n", sizeof("semantifold: integer overflow\\n") - 1);
39
+ }
40
+ return result;
41
+ }
42
+
43
+ inline std::int64_t semantifold_integer_negate(std::int64_t value) {
44
+ return semantifold_integer_subtract(std::int64_t(0), value);
45
+ }
46
+
47
+ inline std::string semantifold_string_concat(std::string left, std::string right) {
48
+ if (right.size() > left.max_size() - left.size()) {
49
+ semantifold_fatal("semantifold: string size\\n", sizeof("semantifold: string size\\n") - 1);
50
+ }
51
+ return left + right;
52
+ }
53
+
54
+ inline bool semantifold_string_equal(std::string left, std::string right) {
55
+ return left == right;
56
+ }
57
+
58
+ inline bool semantifold_string_not_equal(std::string left, std::string right) {
59
+ return left != right;
60
+ }
61
+
62
+ inline void semantifold_write(const char *data, std::size_t length) {
63
+ if (length != 0 && std::fwrite(data, 1, length, stdout) != length) {
64
+ semantifold_fatal("semantifold: output failure\\n", sizeof("semantifold: output failure\\n") - 1);
65
+ }
66
+ }
67
+
68
+ inline void semantifold_newline() {
69
+ semantifold_write("\\n", 1);
70
+ if (std::fflush(stdout) != 0) semantifold_fatal("semantifold: output failure\\n", sizeof("semantifold: output failure\\n") - 1);
71
+ }
72
+
73
+ inline void semantifold_print_string(std::string value) {
74
+ semantifold_write(value.data(), value.size());
75
+ semantifold_newline();
76
+ }
77
+
78
+ inline void semantifold_print_boolean(bool value) {
79
+ if (value) semantifold_write("true", 4);
80
+ else semantifold_write("false", 5);
81
+ semantifold_newline();
82
+ }
83
+
84
+ inline void semantifold_print_integer(std::int64_t value) {
85
+ char digits[20];
86
+ std::size_t position = sizeof(digits);
87
+ std::uint64_t magnitude = static_cast<std::uint64_t>(value);
88
+ if (value < 0) magnitude = std::uint64_t(0) - magnitude;
89
+ do {
90
+ digits[--position] = static_cast<char>(std::uint64_t(48) + magnitude % std::uint64_t(10));
91
+ magnitude /= std::uint64_t(10);
92
+ } while (magnitude != 0);
93
+ if (value < 0) digits[--position] = '-';
94
+ semantifold_write(digits + position, sizeof(digits) - position);
95
+ semantifold_newline();
96
+ }
97
+ /* semantifold:runtime:cpp:v1 end */
98
+ `;
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BwLXJ1bnRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvY3BwLXJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLDZGQUE2RjtBQUM3RixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0Z6QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKiBFeGFjdCBDKysyMCBuYXRpdmUgc3VwcG9ydDsgb3duZWQgc2NhbGFyIHZhbHVlcyBuZXZlciBleHBvc2UgaW1wbGVtZW50YXRpb24gbGlmZXRpbWVzLiAqL1xuZXhwb3J0IGNvbnN0IGNwcFJ1bnRpbWUgPSBgI2luY2x1ZGUgPGNzdGRpbnQ+XG4jaW5jbHVkZSA8Y3N0ZGlvPlxuI2luY2x1ZGUgPGNzdGRsaWI+XG4jaW5jbHVkZSA8c3RyaW5nPlxuI2luY2x1ZGUgPGxpbWl0cz5cbiNpbmNsdWRlIDxjbGltaXRzPlxuXG5zdGF0aWNfYXNzZXJ0KENIQVJfQklUID09IDggJiYgc2l6ZW9mKHN0ZDo6aW50NjRfdCkgPT0gOCwgXCJTZW1hbnRpZm9sZCByZXF1aXJlcyBlaWdodC1iaXQgYnl0ZXMgYW5kIGludDY0XCIpO1xuc3RhdGljX2Fzc2VydChzaXplb2Yoc3RkOjpzaXplX3QpID09IDggJiYgc2l6ZW9mKHN0ZDo6cHRyZGlmZl90KSA9PSA4LCBcIlNlbWFudGlmb2xkIHJlcXVpcmVzIHRoZSBxdWFsaWZpZWQgNjQtYml0IEFCSVwiKTtcbnN0YXRpY19hc3NlcnQoX0dMSUJDWFhfVVNFX0NYWDExX0FCSSA9PSAxLCBcIlNlbWFudGlmb2xkIHJlcXVpcmVzIGxpYnN0ZGMrKyBDKysxMSBzdHJpbmcgQUJJXCIpO1xuXG5bW25vcmV0dXJuXV0gaW5saW5lIHZvaWQgc2VtYW50aWZvbGRfZmF0YWwoY29uc3QgY2hhciAqbWVzc2FnZSwgc3RkOjpzaXplX3QgbGVuZ3RoKSB7XG4gICAgKHZvaWQpc3RkOjpmd3JpdGUobWVzc2FnZSwgMSwgbGVuZ3RoLCBzdGRlcnIpO1xuICAgIHN0ZDo6ZXhpdCg3MCk7XG59XG5cbmlubGluZSBzdGQ6OmludDY0X3Qgc2VtYW50aWZvbGRfaW50ZWdlcl9hZGQoc3RkOjppbnQ2NF90IGxlZnQsIHN0ZDo6aW50NjRfdCByaWdodCkge1xuICAgIHN0ZDo6aW50NjRfdCByZXN1bHQ7XG4gICAgaWYgKF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3cobGVmdCwgcmlnaHQsICZyZXN1bHQpKSB7XG4gICAgICAgIHNlbWFudGlmb2xkX2ZhdGFsKFwic2VtYW50aWZvbGQ6IGludGVnZXIgb3ZlcmZsb3dcXFxcblwiLCBzaXplb2YoXCJzZW1hbnRpZm9sZDogaW50ZWdlciBvdmVyZmxvd1xcXFxuXCIpIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmlubGluZSBzdGQ6OmludDY0X3Qgc2VtYW50aWZvbGRfaW50ZWdlcl9zdWJ0cmFjdChzdGQ6OmludDY0X3QgbGVmdCwgc3RkOjppbnQ2NF90IHJpZ2h0KSB7XG4gICAgc3RkOjppbnQ2NF90IHJlc3VsdDtcbiAgICBpZiAoX19idWlsdGluX3N1Yl9vdmVyZmxvdyhsZWZ0LCByaWdodCwgJnJlc3VsdCkpIHtcbiAgICAgICAgc2VtYW50aWZvbGRfZmF0YWwoXCJzZW1hbnRpZm9sZDogaW50ZWdlciBvdmVyZmxvd1xcXFxuXCIsIHNpemVvZihcInNlbWFudGlmb2xkOiBpbnRlZ2VyIG92ZXJmbG93XFxcXG5cIikgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuaW5saW5lIHN0ZDo6aW50NjRfdCBzZW1hbnRpZm9sZF9pbnRlZ2VyX211bHRpcGx5KHN0ZDo6aW50NjRfdCBsZWZ0LCBzdGQ6OmludDY0X3QgcmlnaHQpIHtcbiAgICBzdGQ6OmludDY0X3QgcmVzdWx0O1xuICAgIGlmIChfX2J1aWx0aW5fbXVsX292ZXJmbG93KGxlZnQsIHJpZ2h0LCAmcmVzdWx0KSkge1xuICAgICAgICBzZW1hbnRpZm9sZF9mYXRhbChcInNlbWFudGlmb2xkOiBpbnRlZ2VyIG92ZXJmbG93XFxcXG5cIiwgc2l6ZW9mKFwic2VtYW50aWZvbGQ6IGludGVnZXIgb3ZlcmZsb3dcXFxcblwiKSAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5pbmxpbmUgc3RkOjppbnQ2NF90IHNlbWFudGlmb2xkX2ludGVnZXJfbmVnYXRlKHN0ZDo6aW50NjRfdCB2YWx1ZSkge1xuICAgIHJldHVybiBzZW1hbnRpZm9sZF9pbnRlZ2VyX3N1YnRyYWN0KHN0ZDo6aW50NjRfdCgwKSwgdmFsdWUpO1xufVxuXG5pbmxpbmUgc3RkOjpzdHJpbmcgc2VtYW50aWZvbGRfc3RyaW5nX2NvbmNhdChzdGQ6OnN0cmluZyBsZWZ0LCBzdGQ6OnN0cmluZyByaWdodCkge1xuICAgIGlmIChyaWdodC5zaXplKCkgPiBsZWZ0Lm1heF9zaXplKCkgLSBsZWZ0LnNpemUoKSkge1xuICAgICAgICBzZW1hbnRpZm9sZF9mYXRhbChcInNlbWFudGlmb2xkOiBzdHJpbmcgc2l6ZVxcXFxuXCIsIHNpemVvZihcInNlbWFudGlmb2xkOiBzdHJpbmcgc2l6ZVxcXFxuXCIpIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0ICsgcmlnaHQ7XG59XG5cbmlubGluZSBib29sIHNlbWFudGlmb2xkX3N0cmluZ19lcXVhbChzdGQ6OnN0cmluZyBsZWZ0LCBzdGQ6OnN0cmluZyByaWdodCkge1xuICAgIHJldHVybiBsZWZ0ID09IHJpZ2h0O1xufVxuXG5pbmxpbmUgYm9vbCBzZW1hbnRpZm9sZF9zdHJpbmdfbm90X2VxdWFsKHN0ZDo6c3RyaW5nIGxlZnQsIHN0ZDo6c3RyaW5nIHJpZ2h0KSB7XG4gICAgcmV0dXJuIGxlZnQgIT0gcmlnaHQ7XG59XG5cbmlubGluZSB2b2lkIHNlbWFudGlmb2xkX3dyaXRlKGNvbnN0IGNoYXIgKmRhdGEsIHN0ZDo6c2l6ZV90IGxlbmd0aCkge1xuICAgIGlmIChsZW5ndGggIT0gMCAmJiBzdGQ6OmZ3cml0ZShkYXRhLCAxLCBsZW5ndGgsIHN0ZG91dCkgIT0gbGVuZ3RoKSB7XG4gICAgICAgIHNlbWFudGlmb2xkX2ZhdGFsKFwic2VtYW50aWZvbGQ6IG91dHB1dCBmYWlsdXJlXFxcXG5cIiwgc2l6ZW9mKFwic2VtYW50aWZvbGQ6IG91dHB1dCBmYWlsdXJlXFxcXG5cIikgLSAxKTtcbiAgICB9XG59XG5cbmlubGluZSB2b2lkIHNlbWFudGlmb2xkX25ld2xpbmUoKSB7XG4gICAgc2VtYW50aWZvbGRfd3JpdGUoXCJcXFxcblwiLCAxKTtcbiAgICBpZiAoc3RkOjpmZmx1c2goc3Rkb3V0KSAhPSAwKSBzZW1hbnRpZm9sZF9mYXRhbChcInNlbWFudGlmb2xkOiBvdXRwdXQgZmFpbHVyZVxcXFxuXCIsIHNpemVvZihcInNlbWFudGlmb2xkOiBvdXRwdXQgZmFpbHVyZVxcXFxuXCIpIC0gMSk7XG59XG5cbmlubGluZSB2b2lkIHNlbWFudGlmb2xkX3ByaW50X3N0cmluZyhzdGQ6OnN0cmluZyB2YWx1ZSkge1xuICAgIHNlbWFudGlmb2xkX3dyaXRlKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKTtcbiAgICBzZW1hbnRpZm9sZF9uZXdsaW5lKCk7XG59XG5cbmlubGluZSB2b2lkIHNlbWFudGlmb2xkX3ByaW50X2Jvb2xlYW4oYm9vbCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkgc2VtYW50aWZvbGRfd3JpdGUoXCJ0cnVlXCIsIDQpO1xuICAgIGVsc2Ugc2VtYW50aWZvbGRfd3JpdGUoXCJmYWxzZVwiLCA1KTtcbiAgICBzZW1hbnRpZm9sZF9uZXdsaW5lKCk7XG59XG5cbmlubGluZSB2b2lkIHNlbWFudGlmb2xkX3ByaW50X2ludGVnZXIoc3RkOjppbnQ2NF90IHZhbHVlKSB7XG4gICAgY2hhciBkaWdpdHNbMjBdO1xuICAgIHN0ZDo6c2l6ZV90IHBvc2l0aW9uID0gc2l6ZW9mKGRpZ2l0cyk7XG4gICAgc3RkOjp1aW50NjRfdCBtYWduaXR1ZGUgPSBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90Pih2YWx1ZSk7XG4gICAgaWYgKHZhbHVlIDwgMCkgbWFnbml0dWRlID0gc3RkOjp1aW50NjRfdCgwKSAtIG1hZ25pdHVkZTtcbiAgICBkbyB7XG4gICAgICAgIGRpZ2l0c1stLXBvc2l0aW9uXSA9IHN0YXRpY19jYXN0PGNoYXI+KHN0ZDo6dWludDY0X3QoNDgpICsgbWFnbml0dWRlICUgc3RkOjp1aW50NjRfdCgxMCkpO1xuICAgICAgICBtYWduaXR1ZGUgLz0gc3RkOjp1aW50NjRfdCgxMCk7XG4gICAgfSB3aGlsZSAobWFnbml0dWRlICE9IDApO1xuICAgIGlmICh2YWx1ZSA8IDApIGRpZ2l0c1stLXBvc2l0aW9uXSA9ICctJztcbiAgICBzZW1hbnRpZm9sZF93cml0ZShkaWdpdHMgKyBwb3NpdGlvbiwgc2l6ZW9mKGRpZ2l0cykgLSBwb3NpdGlvbik7XG4gICAgc2VtYW50aWZvbGRfbmV3bGluZSgpO1xufVxuLyogc2VtYW50aWZvbGQ6cnVudGltZTpjcHA6djEgZW5kICovXG5gXG4iXX0=
@@ -0,0 +1,9 @@
1
+ /** Qualified frozen parser input bound, including the inline support. */
2
+ export declare const maximumCppSourceLength = 32767;
3
+ /**
4
+ * Rejects known unrepresentable values before target emission.
5
+ * @param {import("../semantic/types.js").SemanticModule} module - Fully validated semantic module.
6
+ * @returns {void}
7
+ */
8
+ export declare function validateCppValues(module: import("../semantic/types.js").SemanticModule): void;
9
+ //# sourceMappingURL=cpp-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpp-validation.d.ts","sourceRoot":"","sources":["../../../src/backends/cpp-validation.js"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,QAAQ,CAAA;AAsD3C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAH7B,OAAO,sBAAsB,EAAE,cAGF,GAF3B,IAAI,CAOhB"}
@@ -0,0 +1,74 @@
1
+ // @ts-check
2
+ import { unsupportedCapability } from "../diagnostic.js";
3
+ /** Qualified frozen parser input bound, including the inline support. */
4
+ export const maximumCppSourceLength = 32767;
5
+ /** Propagates proven UTF-8 value sizes without evaluating or rewriting semantic expressions. */
6
+ class CppValueValidator {
7
+ /**
8
+ * Checks every expression, including skipped-runtime candidates before generation.
9
+ * @param {import("../semantic/types.js").Expression} expression - Validated expression.
10
+ * @param {Map<string, bigint | undefined>} sizes - Visible value byte sizes.
11
+ * @returns {bigint | undefined} Statically known string size.
12
+ */
13
+ size(expression, sizes) {
14
+ if (expression.kind == "StringLiteral")
15
+ return BigInt(Buffer.byteLength(expression.value, "utf8"));
16
+ if (expression.kind == "IdentifierExpression")
17
+ return sizes.get(expression.name);
18
+ if (expression.kind == "CallExpression") {
19
+ for (const argument of expression.arguments)
20
+ this.size(argument, sizes);
21
+ }
22
+ else if (expression.kind == "UnaryExpression")
23
+ this.size(expression.operand, sizes);
24
+ else if (expression.kind == "BinaryExpression") {
25
+ const left = this.size(expression.left, sizes);
26
+ const right = this.size(expression.right, sizes);
27
+ if (expression.operation == "StringConcat") {
28
+ if ((left ?? 0n) + (right ?? 0n) > 9223372036854775807n) {
29
+ unsupportedCapability("cpp", "known owned string size exceeds the qualified 64-bit object limit", expression.location);
30
+ }
31
+ if (left !== undefined && right !== undefined)
32
+ return left + right;
33
+ }
34
+ }
35
+ return undefined;
36
+ }
37
+ /**
38
+ * Follows value copies and merges only identical proven branch results.
39
+ * @param {import("../semantic/types.js").Block} block - Lexical block.
40
+ * @param {Map<string, bigint | undefined>} inherited - Visible byte sizes.
41
+ * @returns {Map<string, bigint | undefined>} Outgoing proven sizes.
42
+ */
43
+ block(block, inherited) {
44
+ const sizes = new Map(inherited);
45
+ for (const statement of block.statements) {
46
+ if (statement.kind == "LocalDeclaration")
47
+ sizes.set(statement.name, this.size(statement.initializer, sizes));
48
+ else if (statement.kind == "AssignmentStatement")
49
+ sizes.set(statement.target.name, this.size(statement.expression, sizes));
50
+ else if (statement.kind == "IfStatement") {
51
+ this.size(statement.condition, sizes);
52
+ const left = this.block(statement.consequent, sizes);
53
+ const right = statement.alternate ? this.block(statement.alternate, sizes) : sizes;
54
+ for (const name of sizes.keys())
55
+ sizes.set(name, left.get(name) === right.get(name) ? left.get(name) : undefined);
56
+ }
57
+ else
58
+ this.size(statement.expression, sizes);
59
+ }
60
+ return sizes;
61
+ }
62
+ }
63
+ /**
64
+ * Rejects known unrepresentable values before target emission.
65
+ * @param {import("../semantic/types.js").SemanticModule} module - Fully validated semantic module.
66
+ * @returns {void}
67
+ */
68
+ export function validateCppValues(module) {
69
+ const validator = new CppValueValidator();
70
+ for (const declaration of module.functions)
71
+ validator.block(declaration.body, new Map());
72
+ validator.block(module.entryPoint.body, new Map());
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BwLXZhbGlkYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvY3BwLXZhbGlkYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUE7QUFFM0MsZ0dBQWdHO0FBQ2hHLE1BQU0saUJBQWlCO0lBQ3JCOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLO1FBQ3BCLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxlQUFlO1lBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDbEcsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHNCQUFzQjtZQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEYsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLENBQUMsU0FBUztnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN6RSxDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGlCQUFpQjtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTthQUNoRixJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7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Q3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcblxuLyoqIFF1YWxpZmllZCBmcm96ZW4gcGFyc2VyIGlucHV0IGJvdW5kLCBpbmNsdWRpbmcgdGhlIGlubGluZSBzdXBwb3J0LiAqL1xuZXhwb3J0IGNvbnN0IG1heGltdW1DcHBTb3VyY2VMZW5ndGggPSAzMjc2N1xuXG4vKiogUHJvcGFnYXRlcyBwcm92ZW4gVVRGLTggdmFsdWUgc2l6ZXMgd2l0aG91dCBldmFsdWF0aW5nIG9yIHJld3JpdGluZyBzZW1hbnRpYyBleHByZXNzaW9ucy4gKi9cbmNsYXNzIENwcFZhbHVlVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIENoZWNrcyBldmVyeSBleHByZXNzaW9uLCBpbmNsdWRpbmcgc2tpcHBlZC1ydW50aW1lIGNhbmRpZGF0ZXMgYmVmb3JlIGdlbmVyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFZhbGlkYXRlZCBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIGJpZ2ludCB8IHVuZGVmaW5lZD59IHNpemVzIC0gVmlzaWJsZSB2YWx1ZSBieXRlIHNpemVzLlxuICAgKiBAcmV0dXJucyB7YmlnaW50IHwgdW5kZWZpbmVkfSBTdGF0aWNhbGx5IGtub3duIHN0cmluZyBzaXplLlxuICAgKi9cbiAgc2l6ZShleHByZXNzaW9uLCBzaXplcykge1xuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVybiBCaWdJbnQoQnVmZmVyLmJ5dGVMZW5ndGgoZXhwcmVzc2lvbi52YWx1ZSwgXCJ1dGY4XCIpKVxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSByZXR1cm4gc2l6ZXMuZ2V0KGV4cHJlc3Npb24ubmFtZSlcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBleHByZXNzaW9uLmFyZ3VtZW50cykgdGhpcy5zaXplKGFyZ3VtZW50LCBzaXplcylcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB0aGlzLnNpemUoZXhwcmVzc2lvbi5vcGVyYW5kLCBzaXplcylcbiAgICBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLnNpemUoZXhwcmVzc2lvbi5sZWZ0LCBzaXplcylcbiAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5zaXplKGV4cHJlc3Npb24ucmlnaHQsIHNpemVzKVxuXG4gICAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdDb25jYXRcIikge1xuICAgICAgICBpZiAoKGxlZnQgPz8gMG4pICsgKHJpZ2h0ID8/IDBuKSA+IDkyMjMzNzIwMzY4NTQ3NzU4MDduKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiY3BwXCIsIFwia25vd24gb3duZWQgc3RyaW5nIHNpemUgZXhjZWVkcyB0aGUgcXVhbGlmaWVkIDY0LWJpdCBvYmplY3QgbGltaXRcIiwgZXhwcmVzc2lvbi5sb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdCAhPT0gdW5kZWZpbmVkICYmIHJpZ2h0ICE9PSB1bmRlZmluZWQpIHJldHVybiBsZWZ0ICsgcmlnaHRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEZvbGxvd3MgdmFsdWUgY29waWVzIGFuZCBtZXJnZXMgb25seSBpZGVudGljYWwgcHJvdmVuIGJyYW5jaCByZXN1bHRzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIExleGljYWwgYmxvY2suXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgYmlnaW50IHwgdW5kZWZpbmVkPn0gaW5oZXJpdGVkIC0gVmlzaWJsZSBieXRlIHNpemVzLlxuICAgKiBAcmV0dXJucyB7TWFwPHN0cmluZywgYmlnaW50IHwgdW5kZWZpbmVkPn0gT3V0Z29pbmcgcHJvdmVuIHNpemVzLlxuICAgKi9cbiAgYmxvY2soYmxvY2ssIGluaGVyaXRlZCkge1xuICAgIGNvbnN0IHNpemVzID0gbmV3IE1hcChpbmhlcml0ZWQpXG5cbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBibG9jay5zdGF0ZW1lbnRzKSB7XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHNpemVzLnNldChzdGF0ZW1lbnQubmFtZSwgdGhpcy5zaXplKHN0YXRlbWVudC5pbml0aWFsaXplciwgc2l6ZXMpKVxuICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHNpemVzLnNldChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUsIHRoaXMuc2l6ZShzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgc2l6ZXMpKVxuICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHRoaXMuc2l6ZShzdGF0ZW1lbnQuY29uZGl0aW9uLCBzaXplcylcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuYmxvY2soc3RhdGVtZW50LmNvbnNlcXVlbnQsIHNpemVzKVxuICAgICAgICBjb25zdCByaWdodCA9IHN0YXRlbWVudC5hbHRlcm5hdGUgPyB0aGlzLmJsb2NrKHN0YXRlbWVudC5hbHRlcm5hdGUsIHNpemVzKSA6IHNpemVzXG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIHNpemVzLmtleXMoKSkgc2l6ZXMuc2V0KG5hbWUsIGxlZnQuZ2V0KG5hbWUpID09PSByaWdodC5nZXQobmFtZSkgPyBsZWZ0LmdldChuYW1lKSA6IHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB0aGlzLnNpemUoc3RhdGVtZW50LmV4cHJlc3Npb24sIHNpemVzKVxuICAgIH1cbiAgICByZXR1cm4gc2l6ZXNcbiAgfVxufVxuXG4vKipcbiAqIFJlamVjdHMga25vd24gdW5yZXByZXNlbnRhYmxlIHZhbHVlcyBiZWZvcmUgdGFyZ2V0IGVtaXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gRnVsbHkgdmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDcHBWYWx1ZXMobW9kdWxlKSB7XG4gIGNvbnN0IHZhbGlkYXRvciA9IG5ldyBDcHBWYWx1ZVZhbGlkYXRvcigpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB2YWxpZGF0b3IuYmxvY2soZGVjbGFyYXRpb24uYm9keSwgbmV3IE1hcCgpKVxuICB2YWxpZGF0b3IuYmxvY2sobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbmV3IE1hcCgpKVxufVxuIl19