@typecad/cuttlefish 0.1.0-alpha.1

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 (377) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +79 -0
  3. package/dist/api/board-types.d.ts +1 -0
  4. package/dist/api/board-types.js +4 -0
  5. package/dist/api/capabilities.d.ts +12 -0
  6. package/dist/api/capabilities.js +1 -0
  7. package/dist/api/config.d.ts +120 -0
  8. package/dist/api/config.js +7 -0
  9. package/dist/api/index.d.ts +5 -0
  10. package/dist/api/index.js +2 -0
  11. package/dist/api/schema/builder.d.ts +14 -0
  12. package/dist/api/schema/builder.js +15 -0
  13. package/dist/api/schema/index.d.ts +2 -0
  14. package/dist/api/schema/index.js +1 -0
  15. package/dist/api/schema/types.d.ts +257 -0
  16. package/dist/api/schema/types.js +4 -0
  17. package/dist/api/shared/async-runtime-static.d.ts +8 -0
  18. package/dist/api/shared/async-runtime-static.js +201 -0
  19. package/dist/api/shared/async-types.d.ts +42 -0
  20. package/dist/api/shared/async-types.js +8 -0
  21. package/dist/api/shared/board-resolver.d.ts +12 -0
  22. package/dist/api/shared/board-resolver.js +7 -0
  23. package/dist/api/shared/cpp-type-ir.d.ts +229 -0
  24. package/dist/api/shared/cpp-type-ir.js +672 -0
  25. package/dist/api/shared/display-adapter.d.ts +12 -0
  26. package/dist/api/shared/display-adapter.js +145 -0
  27. package/dist/api/shared/display-adapters/eink-mono.d.ts +2 -0
  28. package/dist/api/shared/display-adapters/eink-mono.js +53 -0
  29. package/dist/api/shared/display-adapters/sdl.d.ts +2 -0
  30. package/dist/api/shared/display-adapters/sdl.js +452 -0
  31. package/dist/api/shared/display-adapters/ssd1309.d.ts +2 -0
  32. package/dist/api/shared/display-adapters/ssd1309.js +136 -0
  33. package/dist/api/shared/display-adapters/st7796.d.ts +2 -0
  34. package/dist/api/shared/display-adapters/st7796.js +132 -0
  35. package/dist/api/shared/display-capabilities.d.ts +45 -0
  36. package/dist/api/shared/display-capabilities.js +54 -0
  37. package/dist/api/shared/display-op-ir.d.ts +62 -0
  38. package/dist/api/shared/display-op-ir.js +19 -0
  39. package/dist/api/shared/display-profile.d.ts +265 -0
  40. package/dist/api/shared/display-profile.js +338 -0
  41. package/dist/api/shared/graphics-strategy.d.ts +29 -0
  42. package/dist/api/shared/graphics-strategy.js +11 -0
  43. package/dist/api/shared/hal-op-ir.d.ts +393 -0
  44. package/dist/api/shared/hal-op-ir.js +18 -0
  45. package/dist/api/shared/index.d.ts +26 -0
  46. package/dist/api/shared/index.js +21 -0
  47. package/dist/api/shared/ir-core.d.ts +363 -0
  48. package/dist/api/shared/ir-core.js +8 -0
  49. package/dist/api/shared/ir-declarations.d.ts +201 -0
  50. package/dist/api/shared/ir-declarations.js +26 -0
  51. package/dist/api/shared/ir.d.ts +85 -0
  52. package/dist/api/shared/ir.js +13 -0
  53. package/dist/api/shared/platform-strategy.d.ts +402 -0
  54. package/dist/api/shared/platform-strategy.js +14 -0
  55. package/dist/api/shared/polyfill-helper-registry.d.ts +11 -0
  56. package/dist/api/shared/polyfill-helper-registry.js +86 -0
  57. package/dist/api/shared/polyfill-types.d.ts +33 -0
  58. package/dist/api/shared/polyfill-types.js +76 -0
  59. package/dist/api/shared/promise-runtime.d.ts +10 -0
  60. package/dist/api/shared/promise-runtime.js +244 -0
  61. package/dist/api/shared/snprintf-types.d.ts +29 -0
  62. package/dist/api/shared/snprintf-types.js +8 -0
  63. package/dist/api/shared/string-method-registry.d.ts +53 -0
  64. package/dist/api/shared/string-method-registry.js +168 -0
  65. package/dist/api/shared/toolchain-types.d.ts +63 -0
  66. package/dist/api/shared/toolchain-types.js +71 -0
  67. package/dist/api/shared/types.d.ts +50 -0
  68. package/dist/api/shared/types.js +6 -0
  69. package/dist/ast/parse.d.ts +2 -0
  70. package/dist/ast/parse.js +4 -0
  71. package/dist/cache.d.ts +26 -0
  72. package/dist/cache.js +95 -0
  73. package/dist/cli-utils.d.ts +37 -0
  74. package/dist/cli-utils.js +250 -0
  75. package/dist/cli.d.ts +2 -0
  76. package/dist/cli.js +635 -0
  77. package/dist/config-loader.d.ts +78 -0
  78. package/dist/config-loader.js +508 -0
  79. package/dist/config-schema.d.ts +233 -0
  80. package/dist/config-schema.js +83 -0
  81. package/dist/create/board-checklist.d.ts +2 -0
  82. package/dist/create/board-checklist.js +52 -0
  83. package/dist/create/board-codegen.d.ts +9 -0
  84. package/dist/create/board-codegen.js +238 -0
  85. package/dist/create/board-generators.d.ts +12 -0
  86. package/dist/create/board-generators.js +652 -0
  87. package/dist/create/board-spec.d.ts +640 -0
  88. package/dist/create/board-spec.js +215 -0
  89. package/dist/create/eslint-rules-template.d.ts +2 -0
  90. package/dist/create/eslint-rules-template.js +672 -0
  91. package/dist/create/index.d.ts +11 -0
  92. package/dist/create/index.js +8 -0
  93. package/dist/create/init-scaffold.d.ts +27 -0
  94. package/dist/create/init-scaffold.js +150 -0
  95. package/dist/create/init-templates.d.ts +24 -0
  96. package/dist/create/init-templates.js +379 -0
  97. package/dist/create/init-wizard.d.ts +8 -0
  98. package/dist/create/init-wizard.js +168 -0
  99. package/dist/debug/breakpoint-loader.d.ts +24 -0
  100. package/dist/debug/breakpoint-loader.js +137 -0
  101. package/dist/debug/index.d.ts +3 -0
  102. package/dist/debug/index.js +7 -0
  103. package/dist/debug/preprocessor.d.ts +9 -0
  104. package/dist/debug/preprocessor.js +214 -0
  105. package/dist/debug/types.d.ts +32 -0
  106. package/dist/debug/types.js +6 -0
  107. package/dist/diagnostics/diagnostics-report.d.ts +51 -0
  108. package/dist/diagnostics/diagnostics-report.js +333 -0
  109. package/dist/diagnostics/json-schema.d.ts +138 -0
  110. package/dist/diagnostics/json-schema.js +27 -0
  111. package/dist/diagnostics/md-writer.d.ts +10 -0
  112. package/dist/diagnostics/md-writer.js +336 -0
  113. package/dist/diagnostics/mermaid-builder.d.ts +65 -0
  114. package/dist/diagnostics/mermaid-builder.js +681 -0
  115. package/dist/emit/cpp-emitter.d.ts +6 -0
  116. package/dist/emit/cpp-emitter.js +48 -0
  117. package/dist/emit/emitters/class-emitter.d.ts +2 -0
  118. package/dist/emit/emitters/class-emitter.js +523 -0
  119. package/dist/emit/emitters/emitter-context.d.ts +174 -0
  120. package/dist/emit/emitters/emitter-context.js +1 -0
  121. package/dist/emit/emitters/entrypoint-synthesizer.d.ts +2 -0
  122. package/dist/emit/emitters/entrypoint-synthesizer.js +175 -0
  123. package/dist/emit/emitters/function-emitter-impl.d.ts +19 -0
  124. package/dist/emit/emitters/function-emitter-impl.js +428 -0
  125. package/dist/emit/emitters/line-appender.d.ts +15 -0
  126. package/dist/emit/emitters/line-appender.js +344 -0
  127. package/dist/emit/emitters/namespace-emitter.d.ts +2 -0
  128. package/dist/emit/emitters/namespace-emitter.js +324 -0
  129. package/dist/emit/emitters/output-finalizer.d.ts +4 -0
  130. package/dist/emit/emitters/output-finalizer.js +267 -0
  131. package/dist/emit/emitters/setup.d.ts +3 -0
  132. package/dist/emit/emitters/setup.js +851 -0
  133. package/dist/emit/emitters/top-level-prep.d.ts +2 -0
  134. package/dist/emit/emitters/top-level-prep.js +706 -0
  135. package/dist/emit/emitters/type-decl-emitter.d.ts +2 -0
  136. package/dist/emit/emitters/type-decl-emitter.js +251 -0
  137. package/dist/emit/emitters/ui-emitter.d.ts +21 -0
  138. package/dist/emit/emitters/ui-emitter.js +564 -0
  139. package/dist/emit/enum-emitter.d.ts +1 -0
  140. package/dist/emit/enum-emitter.js +1 -0
  141. package/dist/emit/expression-renderer.d.ts +283 -0
  142. package/dist/emit/expression-renderer.js +1477 -0
  143. package/dist/emit/native-helpers-emitter.d.ts +11 -0
  144. package/dist/emit/native-helpers-emitter.js +34 -0
  145. package/dist/emit/route-hal-op.d.ts +5 -0
  146. package/dist/emit/route-hal-op.js +13 -0
  147. package/dist/emit/snprintf-helpers.d.ts +17 -0
  148. package/dist/emit/snprintf-helpers.js +462 -0
  149. package/dist/emit/statement-renderer.d.ts +189 -0
  150. package/dist/emit/statement-renderer.js +948 -0
  151. package/dist/emit/utils/async-state-machine.d.ts +42 -0
  152. package/dist/emit/utils/async-state-machine.js +343 -0
  153. package/dist/emit/utils/comment-helpers.d.ts +20 -0
  154. package/dist/emit/utils/comment-helpers.js +31 -0
  155. package/dist/emit/utils/cpp-helpers.d.ts +47 -0
  156. package/dist/emit/utils/cpp-helpers.js +85 -0
  157. package/dist/emit/utils/include-resolver.d.ts +58 -0
  158. package/dist/emit/utils/include-resolver.js +155 -0
  159. package/dist/emit/utils/index.d.ts +8 -0
  160. package/dist/emit/utils/index.js +12 -0
  161. package/dist/emit/utils/type-inference.d.ts +159 -0
  162. package/dist/emit/utils/type-inference.js +559 -0
  163. package/dist/eslint-check.d.ts +10 -0
  164. package/dist/eslint-check.js +102 -0
  165. package/dist/framework-package.d.ts +10 -0
  166. package/dist/framework-package.js +58 -0
  167. package/dist/framework-registry.d.ts +39 -0
  168. package/dist/framework-registry.js +30 -0
  169. package/dist/incremental-cache.d.ts +116 -0
  170. package/dist/incremental-cache.js +335 -0
  171. package/dist/ir/adc-range-validation.d.ts +11 -0
  172. package/dist/ir/adc-range-validation.js +250 -0
  173. package/dist/ir/ast-node-utils.d.ts +8 -0
  174. package/dist/ir/ast-node-utils.js +32 -0
  175. package/dist/ir/board-pin-utils.d.ts +13 -0
  176. package/dist/ir/board-pin-utils.js +65 -0
  177. package/dist/ir/board-resolver.d.ts +36 -0
  178. package/dist/ir/board-resolver.js +437 -0
  179. package/dist/ir/build-ir-state.d.ts +167 -0
  180. package/dist/ir/build-ir-state.js +306 -0
  181. package/dist/ir/build-ir.d.ts +2 -0
  182. package/dist/ir/build-ir.js +808 -0
  183. package/dist/ir/call-graph.d.ts +35 -0
  184. package/dist/ir/call-graph.js +194 -0
  185. package/dist/ir/compile-time-only.d.ts +2 -0
  186. package/dist/ir/compile-time-only.js +16 -0
  187. package/dist/ir/declaration-builders.d.ts +9 -0
  188. package/dist/ir/declaration-builders.js +608 -0
  189. package/dist/ir/entry-points.d.ts +30 -0
  190. package/dist/ir/entry-points.js +191 -0
  191. package/dist/ir/expression-to-ir.d.ts +5 -0
  192. package/dist/ir/expression-to-ir.js +2249 -0
  193. package/dist/ir/extract-property-chain.d.ts +10 -0
  194. package/dist/ir/extract-property-chain.js +30 -0
  195. package/dist/ir/feature-prescan.d.ts +3 -0
  196. package/dist/ir/feature-prescan.js +43 -0
  197. package/dist/ir/feature-registry.d.ts +30 -0
  198. package/dist/ir/feature-registry.js +816 -0
  199. package/dist/ir/filter.d.ts +7 -0
  200. package/dist/ir/filter.js +85 -0
  201. package/dist/ir/function-builder.d.ts +19 -0
  202. package/dist/ir/function-builder.js +670 -0
  203. package/dist/ir/hal/hal-emitter.d.ts +62 -0
  204. package/dist/ir/hal/hal-emitter.js +735 -0
  205. package/dist/ir/hal/hal-parser.d.ts +61 -0
  206. package/dist/ir/hal/hal-parser.js +473 -0
  207. package/dist/ir/hal/hal-plugins.d.ts +34 -0
  208. package/dist/ir/hal/hal-plugins.js +706 -0
  209. package/dist/ir/hal-resolver.d.ts +5 -0
  210. package/dist/ir/hal-resolver.js +5 -0
  211. package/dist/ir/heap-analysis.d.ts +8 -0
  212. package/dist/ir/heap-analysis.js +350 -0
  213. package/dist/ir/heap-array-validation.d.ts +24 -0
  214. package/dist/ir/heap-array-validation.js +29 -0
  215. package/dist/ir/identifier-collector.d.ts +18 -0
  216. package/dist/ir/identifier-collector.js +439 -0
  217. package/dist/ir/interrupt-analysis.d.ts +39 -0
  218. package/dist/ir/interrupt-analysis.js +467 -0
  219. package/dist/ir/memory-budget-validation.d.ts +10 -0
  220. package/dist/ir/memory-budget-validation.js +86 -0
  221. package/dist/ir/namespace-builder.d.ts +7 -0
  222. package/dist/ir/namespace-builder.js +152 -0
  223. package/dist/ir/ownership-analysis.d.ts +9 -0
  224. package/dist/ir/ownership-analysis.js +1207 -0
  225. package/dist/ir/peripheral-ownership.d.ts +3 -0
  226. package/dist/ir/peripheral-ownership.js +152 -0
  227. package/dist/ir/peripheral-symbols.d.ts +7 -0
  228. package/dist/ir/peripheral-symbols.js +57 -0
  229. package/dist/ir/peripheral-usage.d.ts +54 -0
  230. package/dist/ir/peripheral-usage.js +691 -0
  231. package/dist/ir/peripheral-validation.d.ts +8 -0
  232. package/dist/ir/peripheral-validation.js +77 -0
  233. package/dist/ir/pin-alias-conflict.d.ts +4 -0
  234. package/dist/ir/pin-alias-conflict.js +34 -0
  235. package/dist/ir/pin-capability-validation.d.ts +6 -0
  236. package/dist/ir/pin-capability-validation.js +413 -0
  237. package/dist/ir/pin-mode-validation.d.ts +10 -0
  238. package/dist/ir/pin-mode-validation.js +301 -0
  239. package/dist/ir/pin-safety.d.ts +11 -0
  240. package/dist/ir/pin-safety.js +58 -0
  241. package/dist/ir/program-analysis.d.ts +44 -0
  242. package/dist/ir/program-analysis.js +589 -0
  243. package/dist/ir/pulldown-validation.d.ts +7 -0
  244. package/dist/ir/pulldown-validation.js +49 -0
  245. package/dist/ir/pwm-timer-sharing.d.ts +4 -0
  246. package/dist/ir/pwm-timer-sharing.js +93 -0
  247. package/dist/ir/reachability.d.ts +68 -0
  248. package/dist/ir/reachability.js +224 -0
  249. package/dist/ir/register-decorators.d.ts +6 -0
  250. package/dist/ir/register-decorators.js +49 -0
  251. package/dist/ir/render-expr.d.ts +4 -0
  252. package/dist/ir/render-expr.js +127 -0
  253. package/dist/ir/resource-analysis.d.ts +19 -0
  254. package/dist/ir/resource-analysis.js +153 -0
  255. package/dist/ir/statement-to-ir.d.ts +23 -0
  256. package/dist/ir/statement-to-ir.js +349 -0
  257. package/dist/ir/symbol-table.d.ts +68 -0
  258. package/dist/ir/symbol-table.js +179 -0
  259. package/dist/ir/symbol-types.d.ts +56 -0
  260. package/dist/ir/symbol-types.js +107 -0
  261. package/dist/ir/timer0-pwm-timing-conflict.d.ts +4 -0
  262. package/dist/ir/timer0-pwm-timing-conflict.js +71 -0
  263. package/dist/ir/timing-validation.d.ts +7 -0
  264. package/dist/ir/timing-validation.js +95 -0
  265. package/dist/ir/transformers/array-methods.d.ts +8 -0
  266. package/dist/ir/transformers/array-methods.js +493 -0
  267. package/dist/ir/transformers/call-statement.d.ts +5 -0
  268. package/dist/ir/transformers/call-statement.js +758 -0
  269. package/dist/ir/transformers/callback-context-registry.d.ts +20 -0
  270. package/dist/ir/transformers/callback-context-registry.js +55 -0
  271. package/dist/ir/transformers/canvas-lowering.d.ts +42 -0
  272. package/dist/ir/transformers/canvas-lowering.js +249 -0
  273. package/dist/ir/transformers/control-flow.d.ts +8 -0
  274. package/dist/ir/transformers/control-flow.js +508 -0
  275. package/dist/ir/transformers/expressions.d.ts +7 -0
  276. package/dist/ir/transformers/expressions.js +406 -0
  277. package/dist/ir/transformers/hal-call-resolver.d.ts +29 -0
  278. package/dist/ir/transformers/hal-call-resolver.js +274 -0
  279. package/dist/ir/transformers/hal-emit-helpers.d.ts +14 -0
  280. package/dist/ir/transformers/hal-emit-helpers.js +63 -0
  281. package/dist/ir/transformers/namespace-methods.d.ts +20 -0
  282. package/dist/ir/transformers/namespace-methods.js +110 -0
  283. package/dist/ir/transformers/register-assignment.d.ts +5 -0
  284. package/dist/ir/transformers/register-assignment.js +56 -0
  285. package/dist/ir/transformers/ui-call-resolver.d.ts +149 -0
  286. package/dist/ir/transformers/ui-call-resolver.js +1136 -0
  287. package/dist/ir/transformers/ui-callback-lowering.d.ts +62 -0
  288. package/dist/ir/transformers/ui-callback-lowering.js +623 -0
  289. package/dist/ir/transformers/ui-mount.d.ts +20 -0
  290. package/dist/ir/transformers/ui-mount.js +35 -0
  291. package/dist/ir/transformers/ui-reactive.d.ts +68 -0
  292. package/dist/ir/transformers/ui-reactive.js +129 -0
  293. package/dist/ir/transformers/variables.d.ts +14 -0
  294. package/dist/ir/transformers/variables.js +1045 -0
  295. package/dist/ir/try-catch-validation.d.ts +26 -0
  296. package/dist/ir/try-catch-validation.js +128 -0
  297. package/dist/ir/type-resolution.d.ts +31 -0
  298. package/dist/ir/type-resolution.js +977 -0
  299. package/dist/ir/ui-element-auto-wire.d.ts +50 -0
  300. package/dist/ir/ui-element-auto-wire.js +218 -0
  301. package/dist/ir/unit-suspicion-validation.d.ts +12 -0
  302. package/dist/ir/unit-suspicion-validation.js +296 -0
  303. package/dist/ir/utils/walk-ir.d.ts +6 -0
  304. package/dist/ir/utils/walk-ir.js +162 -0
  305. package/dist/ir/validation-orchestrator.d.ts +4 -0
  306. package/dist/ir/validation-orchestrator.js +45 -0
  307. package/dist/libdef/base-class-resolver.d.ts +23 -0
  308. package/dist/libdef/base-class-resolver.js +50 -0
  309. package/dist/libdef/cpp-to-decl.d.ts +34 -0
  310. package/dist/libdef/cpp-to-decl.js +584 -0
  311. package/dist/libdef/header-parser.d.ts +53 -0
  312. package/dist/libdef/header-parser.js +269 -0
  313. package/dist/libdef/registry.d.ts +10 -0
  314. package/dist/libdef/registry.js +142 -0
  315. package/dist/mapping/peripheral-names.d.ts +23 -0
  316. package/dist/mapping/peripheral-names.js +63 -0
  317. package/dist/mapping/source-map.d.ts +46 -0
  318. package/dist/mapping/source-map.js +207 -0
  319. package/dist/orchestrator/dts-generator.d.ts +17 -0
  320. package/dist/orchestrator/dts-generator.js +83 -0
  321. package/dist/orchestrator/graph-builder.d.ts +18 -0
  322. package/dist/orchestrator/graph-builder.js +218 -0
  323. package/dist/orchestrator/semantic-facts-verifier.d.ts +38 -0
  324. package/dist/orchestrator/semantic-facts-verifier.js +121 -0
  325. package/dist/orchestrator/semantic-facts.d.ts +141 -0
  326. package/dist/orchestrator/semantic-facts.js +652 -0
  327. package/dist/orchestrator/type-checker.d.ts +39 -0
  328. package/dist/orchestrator/type-checker.js +760 -0
  329. package/dist/platform/async-runtime.d.ts +8 -0
  330. package/dist/platform/async-runtime.js +26 -0
  331. package/dist/platform/generic-strategy.d.ts +101 -0
  332. package/dist/platform/generic-strategy.js +289 -0
  333. package/dist/platform/index.d.ts +4 -0
  334. package/dist/platform/index.js +9 -0
  335. package/dist/platform/registry.d.ts +21 -0
  336. package/dist/platform/registry.js +42 -0
  337. package/dist/platform/toolchain.d.ts +4 -0
  338. package/dist/platform/toolchain.js +43 -0
  339. package/dist/preview/client.d.ts +1 -0
  340. package/dist/preview/client.js +137 -0
  341. package/dist/preview/server.d.ts +5 -0
  342. package/dist/preview/server.js +199 -0
  343. package/dist/profiler/index.d.ts +28 -0
  344. package/dist/profiler/index.js +28 -0
  345. package/dist/profiler/profiler.d.ts +95 -0
  346. package/dist/profiler/profiler.js +338 -0
  347. package/dist/profiler/types.d.ts +87 -0
  348. package/dist/profiler/types.js +12 -0
  349. package/dist/stores/display-profile-store.d.ts +16 -0
  350. package/dist/stores/display-profile-store.js +48 -0
  351. package/dist/stores/theme-store.d.ts +13 -0
  352. package/dist/stores/theme-store.js +30 -0
  353. package/dist/testing.d.ts +45 -0
  354. package/dist/testing.js +47 -0
  355. package/dist/transpile/resolution.d.ts +29 -0
  356. package/dist/transpile/resolution.js +282 -0
  357. package/dist/transpile.d.ts +3 -0
  358. package/dist/transpile.js +722 -0
  359. package/dist/types.d.ts +217 -0
  360. package/dist/types.js +1 -0
  361. package/dist/ui/ui-bridge.d.ts +4 -0
  362. package/dist/ui/ui-bridge.js +34 -0
  363. package/dist/ui-hook.d.ts +84 -0
  364. package/dist/ui-hook.js +45 -0
  365. package/dist/utils/cli.d.ts +3 -0
  366. package/dist/utils/cli.js +463 -0
  367. package/dist/utils/fs.d.ts +4 -0
  368. package/dist/utils/fs.js +23 -0
  369. package/dist/utils/logger.d.ts +2 -0
  370. package/dist/utils/logger.js +8 -0
  371. package/dist/utils/strings.d.ts +35 -0
  372. package/dist/utils/strings.js +142 -0
  373. package/dist/utils/ui.d.ts +66 -0
  374. package/dist/utils/ui.js +149 -0
  375. package/dist/watch.d.ts +35 -0
  376. package/dist/watch.js +111 -0
  377. package/package.json +127 -0
@@ -0,0 +1,5 @@
1
+ import { halInstances } from "./build-ir-state.js";
2
+ export { halInstances };
3
+ export { HALInstance, HALMethodEntry, HALClassEntry, halClassRegistry, halGlobalFunctions, halSingletons, halCtorIncludes, halModulesLoaded, isHALSingleton, resolveHALSourceDir, extractCtorFieldMap, extractCtorIncludes, extractParams, extractMethods, loadHALModules, getCtorIncludes, resolveHALReceiver, resolveCtorFieldValues, isKnownHALClass, getHALCtorFieldMap, } from "./hal/hal-parser.js";
4
+ export { resolveSemanticArg, resolveNumericArg, portFromInstance, tryResolveBoardResolveArg, tryResolveCompoundSemanticReturn, tryResolveSemanticCall, } from "./hal/hal-plugins.js";
5
+ export { maybeEscapeResolvedText, resolveExpressionText, extractAndRegisterCallbacks, processHALMethodBody, isLiteralReturnValue, resolveCppObjectName, processStatementList, resetHALResolver, setActiveStrategy, resolveHALExprToText, registerFloatVariable, buildSnprintfFromConcat, } from "./hal/hal-emitter.js";
@@ -0,0 +1,5 @@
1
+ import { halInstances } from "./build-ir-state.js";
2
+ export { halInstances };
3
+ export { halClassRegistry, halGlobalFunctions, halSingletons, halCtorIncludes, halModulesLoaded, isHALSingleton, resolveHALSourceDir, extractCtorFieldMap, extractCtorIncludes, extractParams, extractMethods, loadHALModules, getCtorIncludes, resolveHALReceiver, resolveCtorFieldValues, isKnownHALClass, getHALCtorFieldMap, } from "./hal/hal-parser.js";
4
+ export { resolveSemanticArg, resolveNumericArg, portFromInstance, tryResolveBoardResolveArg, tryResolveCompoundSemanticReturn, tryResolveSemanticCall, } from "./hal/hal-plugins.js";
5
+ export { maybeEscapeResolvedText, resolveExpressionText, extractAndRegisterCallbacks, processHALMethodBody, isLiteralReturnValue, resolveCppObjectName, processStatementList, resetHALResolver, setActiveStrategy, resolveHALExprToText, registerFloatVariable, buildSnprintfFromConcat, } from "./hal/hal-emitter.js";
@@ -0,0 +1,8 @@
1
+ import type { ProgramIR } from "../api/index.js";
2
+ import type { HeapEstimate } from "../diagnostics/json-schema.js";
3
+ /**
4
+ * Perform heap/memory estimate analysis on a ProgramIR.
5
+ */
6
+ export declare function analyzeHeapUsage(program: ProgramIR | null, architecture?: string, callGraphNodes?: Map<string, {
7
+ dependencies: Set<string>;
8
+ }>): HeapEstimate;
@@ -0,0 +1,350 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Heap / Memory Estimate Analysis
3
+ //
4
+ // Performs static analysis of the ProgramIR to estimate memory usage.
5
+ // This is a conservative approximation — actual usage depends on compiler
6
+ // optimizations and runtime behavior.
7
+ // ---------------------------------------------------------------------------
8
+ import { parseCppType, renderCppType, bareType } from "../api/shared/cpp-type-ir.js";
9
+ /** Type sizes for common C++ types on AVR (8-bit) and ESP32 (32-bit) */
10
+ const AVR_TYPE_SIZES = {
11
+ bool: 1,
12
+ char: 1,
13
+ "unsigned char": 1,
14
+ "signed char": 1,
15
+ uint8_t: 1,
16
+ int8_t: 1,
17
+ byte: 1,
18
+ short: 2,
19
+ "unsigned short": 2,
20
+ int16_t: 2,
21
+ uint16_t: 2,
22
+ int: 2,
23
+ "unsigned int": 2,
24
+ int32_t: 4,
25
+ uint32_t: 4,
26
+ long: 4,
27
+ "unsigned long": 4,
28
+ int64_t: 8,
29
+ uint64_t: 8,
30
+ float: 4,
31
+ double: 4,
32
+ "long long": 8,
33
+ size_t: 2,
34
+ ptrdiff_t: 2,
35
+ pointer: 2,
36
+ "char*": 2,
37
+ "const char*": 2,
38
+ };
39
+ const ESP32_TYPE_SIZES = {
40
+ bool: 1,
41
+ char: 1,
42
+ "unsigned char": 1,
43
+ "signed char": 1,
44
+ uint8_t: 1,
45
+ int8_t: 1,
46
+ byte: 1,
47
+ short: 2,
48
+ "unsigned short": 2,
49
+ int16_t: 2,
50
+ uint16_t: 2,
51
+ int: 4,
52
+ "unsigned int": 4,
53
+ int32_t: 4,
54
+ uint32_t: 4,
55
+ long: 4,
56
+ "unsigned long": 4,
57
+ int64_t: 8,
58
+ uint64_t: 8,
59
+ float: 4,
60
+ double: 8,
61
+ "long long": 8,
62
+ size_t: 4,
63
+ ptrdiff_t: 4,
64
+ pointer: 4,
65
+ "char*": 4,
66
+ "const char*": 4,
67
+ };
68
+ /**
69
+ * Determine the type size table based on the target architecture.
70
+ */
71
+ function getTypeSizes(architecture) {
72
+ const arch = (architecture ?? "").toLowerCase();
73
+ if (arch === "avr" || arch === "atmega328p" || arch === "atmega2560") {
74
+ return AVR_TYPE_SIZES;
75
+ }
76
+ if (arch === "esp32" || arch === "esp32s3" || arch === "esp32c3" || arch === "esp32c6" || arch === "xtensa" || arch === "riscv32") {
77
+ return ESP32_TYPE_SIZES;
78
+ }
79
+ // Default to ESP32 sizes (more conservative for 32-bit targets)
80
+ return ESP32_TYPE_SIZES;
81
+ }
82
+ /**
83
+ * Estimate the size of a C++ type string.
84
+ * Handles arrays like "int[10]" and pointers.
85
+ */
86
+ function estimateTypeSize(cppType, typeSizes) {
87
+ const ir = parseCppType(cppType);
88
+ // Fixed-size arrays: element[N] → element size × N.
89
+ if (ir.kind === "staticArray" && ir.size !== undefined) {
90
+ return estimateTypeSize(renderCppType(ir.element), typeSizes) * ir.size;
91
+ }
92
+ // Pointers.
93
+ if (ir.kind === "pointer") {
94
+ return typeSizes.pointer ?? 2;
95
+ }
96
+ // Normalize: strip const, references, etc., then look up the bare name.
97
+ const normalized = renderCppType(bareType(ir));
98
+ // Check known sizes
99
+ if (typeSizes[normalized] !== undefined) {
100
+ return typeSizes[normalized];
101
+ }
102
+ // For struct/class types, we return 0 here and handle in struct size analysis
103
+ return 0;
104
+ }
105
+ /**
106
+ * Estimate the size of a variable, falling back to the initializer when the
107
+ * type-based estimate is zero. This handles array-typed variables whose
108
+ * element count isn't in the type string:
109
+ * - `int32_t buf[] = {0,0,...}` (cArray with no size)
110
+ * - `std::vector<int32_t> buf = {...}` (vector — common before AVR promotion)
111
+ * - `__tc_StaticArray<int32_t, N> buf = {...}` (handled by estimateTypeSize
112
+ * when N is known, but the initializer fallback covers edge cases)
113
+ * Without this, large unsized global arrays (the most common SRAM consumer on
114
+ * AVR) are silently under-counted in the memory budget estimate.
115
+ */
116
+ function estimateVariableSize(vd, typeSizes) {
117
+ const typeSize = estimateTypeSize(vd.cppType, typeSizes);
118
+ if (typeSize > 0)
119
+ return typeSize;
120
+ if (!vd.initializer)
121
+ return 0;
122
+ // Determine the element count and element type from the initializer.
123
+ const init = vd.initializer;
124
+ let count = 0;
125
+ let elementType = "";
126
+ if (init.kind === "array" && Array.isArray(init.elements)) {
127
+ count = init.elements.length;
128
+ elementType = init.elementType ?? "";
129
+ }
130
+ else if (init.kind === "raw" && typeof init.value === "string") {
131
+ const match = init.value.match(/^\s*\{([\s\S]*)\}\s*$/);
132
+ if (match) {
133
+ const inner = match[1].trim();
134
+ count = inner === "" ? 0 : inner.split(",").length;
135
+ }
136
+ }
137
+ if (count === 0)
138
+ return 0;
139
+ // Recover the element type from the cppType if the initializer didn't carry it.
140
+ if (!elementType) {
141
+ const ir = parseCppType(vd.cppType);
142
+ // cArray: element field holds the element type IR.
143
+ // std::vector<T> / __tc_StaticArray<T,N>: element field holds T.
144
+ const arrayLike = ir;
145
+ if (arrayLike.element && typeof arrayLike.element === "object") {
146
+ elementType = renderCppType(arrayLike.element);
147
+ }
148
+ else {
149
+ // Fallback: try to extract from the raw type string (e.g. "std::vector<int32_t>").
150
+ const m = vd.cppType.match(/<[ \t]*(\w+)[ \t]*>/);
151
+ if (m)
152
+ elementType = m[1];
153
+ }
154
+ }
155
+ const elementSize = estimateTypeSize(elementType, typeSizes);
156
+ if (elementSize > 0)
157
+ return elementSize * count;
158
+ return 0;
159
+ }
160
+ /**
161
+ * Estimate the size of a struct or class from its fields.
162
+ */
163
+ function estimateStructSize(def, typeSizes, structSizes) {
164
+ let total = 0;
165
+ const fields = "fields" in def ? def.fields : def.fields;
166
+ if (fields) {
167
+ for (const field of fields) {
168
+ total += estimateTypeSize(field.cppType, typeSizes);
169
+ }
170
+ }
171
+ return total;
172
+ }
173
+ /**
174
+ * Walk expression IR to find string literals.
175
+ */
176
+ function collectStringLiterals(expr, literals) {
177
+ if (!expr)
178
+ return;
179
+ // Work around type re-export issues with ExpressionIR union
180
+ const e = expr;
181
+ if (e.kind === "string") {
182
+ const value = e.value ?? "";
183
+ // C string: length + null terminator
184
+ const bytes = value.length + 1;
185
+ // Deduplicate (optional — keep simple for now)
186
+ literals.push({ value, estimatedBytes: bytes });
187
+ }
188
+ if (e.kind === "binary") {
189
+ collectStringLiterals(e.left, literals);
190
+ collectStringLiterals(e.right, literals);
191
+ }
192
+ }
193
+ /**
194
+ * Walk statements to find string literals in expressions.
195
+ */
196
+ function collectStatementsStringLiterals(stmts, literals) {
197
+ if (!stmts || !Array.isArray(stmts))
198
+ return;
199
+ for (const stmt of stmts) {
200
+ const s = stmt;
201
+ if (s.kind === "var_decl") {
202
+ const vd = stmt;
203
+ if (vd.initializer) {
204
+ collectStringLiterals(vd.initializer, literals);
205
+ }
206
+ }
207
+ else if (s.kind === "expr_stmt") {
208
+ if (s.expression) {
209
+ collectStringLiterals(s.expression, literals);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ /**
215
+ * Estimate stack depth and return the deepest paths.
216
+ */
217
+ function estimateStackDepth(callGraphNodes, entryPoints) {
218
+ const visited = new Set();
219
+ let maxDepth = 0;
220
+ let deepestPaths = [];
221
+ function dfs(name, depth, currentPath) {
222
+ if (depth > 30)
223
+ return; // guard against infinite recursion
224
+ const newPath = [...currentPath, name];
225
+ visited.add(name);
226
+ if (depth > maxDepth) {
227
+ maxDepth = depth;
228
+ deepestPaths = [newPath];
229
+ }
230
+ else if (depth === maxDepth && maxDepth > 0) {
231
+ deepestPaths.push(newPath);
232
+ }
233
+ const node = callGraphNodes.get(name);
234
+ if (node) {
235
+ for (const dep of node.dependencies) {
236
+ if (!visited.has(dep)) {
237
+ dfs(dep, depth + 1, newPath);
238
+ }
239
+ }
240
+ }
241
+ }
242
+ for (const entry of entryPoints) {
243
+ visited.clear();
244
+ dfs(entry, 1, []);
245
+ }
246
+ return { depth: maxDepth, paths: deepestPaths.slice(0, 5) }; // Return top 5 deepest paths
247
+ }
248
+ /**
249
+ * Perform heap/memory estimate analysis on a ProgramIR.
250
+ */
251
+ export function analyzeHeapUsage(program, architecture, callGraphNodes) {
252
+ const typeSizes = getTypeSizes(architecture);
253
+ const globalVariables = [];
254
+ const structSizes = {};
255
+ const stringLiterals = [];
256
+ const notes = [];
257
+ let totalStaticBytes = 0;
258
+ if (!program) {
259
+ notes.push("No program IR available for heap analysis.");
260
+ return {
261
+ globalVariables: [],
262
+ structSizes: {},
263
+ stringLiterals: [],
264
+ totalStaticBytes: 0,
265
+ estimatedStackDepth: 0,
266
+ stackPaths: [],
267
+ notes,
268
+ };
269
+ }
270
+ // Analyze struct sizes
271
+ for (const struct of program.structs) {
272
+ const size = estimateStructSize(struct, typeSizes, structSizes);
273
+ structSizes[struct.name] = size;
274
+ totalStaticBytes += size;
275
+ }
276
+ // Analyze class sizes
277
+ for (const cls of program.classes) {
278
+ const size = estimateStructSize(cls, typeSizes, structSizes);
279
+ structSizes[cls.name] = size;
280
+ totalStaticBytes += size;
281
+ }
282
+ // Analyze global variable declarations from top-level statements
283
+ for (const stmt of program.topLevelStatements) {
284
+ if (stmt.kind === "var_decl") {
285
+ const vd = stmt;
286
+ const size = estimateVariableSize(vd, typeSizes);
287
+ if (size > 0) {
288
+ globalVariables.push({
289
+ name: vd.name,
290
+ cppType: vd.cppType,
291
+ estimatedBytes: size,
292
+ });
293
+ totalStaticBytes += size;
294
+ }
295
+ else {
296
+ // Unknown type — might be a struct/class
297
+ globalVariables.push({
298
+ name: vd.name,
299
+ cppType: vd.cppType,
300
+ estimatedBytes: 0,
301
+ });
302
+ }
303
+ }
304
+ }
305
+ // Analyze global variables declared inside functions (static locals)
306
+ // and string literals from function bodies
307
+ for (const fn of program.functions) {
308
+ for (const stmt of fn.statements) {
309
+ if (stmt.kind === "var_decl") {
310
+ const vd = stmt;
311
+ const size = estimateVariableSize(vd, typeSizes);
312
+ globalVariables.push({
313
+ name: `${fn.originalName}::${vd.name}`,
314
+ cppType: vd.cppType,
315
+ estimatedBytes: size,
316
+ });
317
+ totalStaticBytes += size;
318
+ }
319
+ }
320
+ collectStatementsStringLiterals(fn.statements, stringLiterals);
321
+ }
322
+ // Collect string literals from top-level statements
323
+ collectStatementsStringLiterals(program.topLevelStatements, stringLiterals);
324
+ // Sum string literal sizes
325
+ let stringTotal = 0;
326
+ for (const sl of stringLiterals) {
327
+ stringTotal += sl.estimatedBytes;
328
+ }
329
+ totalStaticBytes += stringTotal;
330
+ // Estimate stack depth from call graph
331
+ const entryPoints = ["setup", "loop"];
332
+ const stackInfo = callGraphNodes
333
+ ? estimateStackDepth(callGraphNodes, entryPoints)
334
+ : { depth: 0, paths: [] };
335
+ // Add notes about approximations
336
+ notes.push("Heap estimate is static only — dynamic allocations (malloc/new) are not tracked.");
337
+ notes.push("String literals may be deduplicated by the compiler/linker.");
338
+ notes.push(architecture === "avr"
339
+ ? "AVR sizes: int=2 bytes, pointer=2 bytes, float=4 bytes."
340
+ : `Default sizes: int=${typeSizes.int ?? "?"} bytes, pointer=${typeSizes.pointer ?? "?"} bytes, float=${typeSizes.float ?? "?"} bytes.`);
341
+ return {
342
+ globalVariables,
343
+ structSizes,
344
+ stringLiterals,
345
+ totalStaticBytes,
346
+ estimatedStackDepth: stackInfo.depth,
347
+ stackPaths: stackInfo.paths,
348
+ notes,
349
+ };
350
+ }
@@ -0,0 +1,24 @@
1
+ import type { Diagnostic } from '../types.js';
2
+ import type { BoardConstants } from './board-resolver.js';
3
+ import type { StatementIR } from '../api/index.js';
4
+ import type { PlatformStrategy } from '../api/shared/index.js';
5
+ /**
6
+ * @deprecated Heap allocation is now validated at emit time by the platform
7
+ * strategy's `profileDiagnostics` (see framework-arduino `collectHeapAllocationDiagnostics`).
8
+ * This build-time stub returns no diagnostics. Kept to preserve the
9
+ * `validation-orchestrator.ts` import; remove that call site when convenient.
10
+ */
11
+ export declare function validateHeapArrayUsage(_program: {
12
+ topLevelStatements: StatementIR[];
13
+ functions: Array<{
14
+ statements: StatementIR[];
15
+ }>;
16
+ classes: Array<{
17
+ methods: Array<{
18
+ statements: StatementIR[];
19
+ }>;
20
+ constructor?: {
21
+ statements: StatementIR[];
22
+ };
23
+ }>;
24
+ }, _boardConstants: BoardConstants | undefined, _strategy?: PlatformStrategy): Diagnostic[];
@@ -0,0 +1,29 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Heap Allocation Validator (retired — moved to the emit-time profile gate)
3
+ //
4
+ // Heap allocation via `new` on no-heap architectures (AVR, etc.) is now
5
+ // rejected by the Arduino strategy's `profileDiagnostics`
6
+ // (`framework-arduino/src/strategy.ts` `collectHeapAllocationDiagnostics`).
7
+ //
8
+ // WHY THE MOVE: this build-time validator keyed off `boardConstants.architecture`,
9
+ // which is only populated when an MCU/board `import` is present. Programs with
10
+ // no such import silently bypassed it — so demo #33's `new Accumulator()`
11
+ // passed while a HAL-importing demo's `new Blinker()` failed, for the same
12
+ // source pattern. The profile-time gate derives `arch` from the FQBN
13
+ // (`frameworkData.buildTarget`), so it fires regardless of import structure
14
+ // (demo #34 Finding A). It also keys off the `newClassName` marker a user-class
15
+ // `new` tags its raw IR node with (set in `expression-to-ir.ts`), making
16
+ // detection structural rather than textual.
17
+ //
18
+ // The export is kept (returns `[]`) so `validation-orchestrator.ts`'s import
19
+ // stays valid; the real work happens at emit time.
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * @deprecated Heap allocation is now validated at emit time by the platform
23
+ * strategy's `profileDiagnostics` (see framework-arduino `collectHeapAllocationDiagnostics`).
24
+ * This build-time stub returns no diagnostics. Kept to preserve the
25
+ * `validation-orchestrator.ts` import; remove that call site when convenient.
26
+ */
27
+ export function validateHeapArrayUsage(_program, _boardConstants, _strategy) {
28
+ return [];
29
+ }
@@ -0,0 +1,18 @@
1
+ import { ExpressionIR, StatementIR } from "../api/index.js";
2
+ /**
3
+ * Shared utility for collecting identifiers from IR nodes.
4
+ * This consolidates duplicate logic that was previously in:
5
+ * - transpile.ts (collectExpressionIdentifiers, collectStatementIdentifiers)
6
+ * - call-graph.ts (collectExpressionIdentifiers, collectStatementIdentifiers)
7
+ * - build-ir.ts (similar traversal logic)
8
+ */
9
+ /**
10
+ * Collect all identifiers from an expression IR node.
11
+ * Returns a Set of identifier names found.
12
+ */
13
+ export declare function collectExpressionIdentifiers(expr: ExpressionIR | null | undefined): Set<string>;
14
+ /**
15
+ * Collect all identifiers from a statement IR node.
16
+ * Returns a Set of identifier names found.
17
+ */
18
+ export declare function collectStatementIdentifiers(statement: StatementIR | null | undefined): Set<string>;