@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.
- package/LICENSE +21 -0
- package/README.md +79 -0
- package/dist/api/board-types.d.ts +1 -0
- package/dist/api/board-types.js +4 -0
- package/dist/api/capabilities.d.ts +12 -0
- package/dist/api/capabilities.js +1 -0
- package/dist/api/config.d.ts +120 -0
- package/dist/api/config.js +7 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.js +2 -0
- package/dist/api/schema/builder.d.ts +14 -0
- package/dist/api/schema/builder.js +15 -0
- package/dist/api/schema/index.d.ts +2 -0
- package/dist/api/schema/index.js +1 -0
- package/dist/api/schema/types.d.ts +257 -0
- package/dist/api/schema/types.js +4 -0
- package/dist/api/shared/async-runtime-static.d.ts +8 -0
- package/dist/api/shared/async-runtime-static.js +201 -0
- package/dist/api/shared/async-types.d.ts +42 -0
- package/dist/api/shared/async-types.js +8 -0
- package/dist/api/shared/board-resolver.d.ts +12 -0
- package/dist/api/shared/board-resolver.js +7 -0
- package/dist/api/shared/cpp-type-ir.d.ts +229 -0
- package/dist/api/shared/cpp-type-ir.js +672 -0
- package/dist/api/shared/display-adapter.d.ts +12 -0
- package/dist/api/shared/display-adapter.js +145 -0
- package/dist/api/shared/display-adapters/eink-mono.d.ts +2 -0
- package/dist/api/shared/display-adapters/eink-mono.js +53 -0
- package/dist/api/shared/display-adapters/sdl.d.ts +2 -0
- package/dist/api/shared/display-adapters/sdl.js +452 -0
- package/dist/api/shared/display-adapters/ssd1309.d.ts +2 -0
- package/dist/api/shared/display-adapters/ssd1309.js +136 -0
- package/dist/api/shared/display-adapters/st7796.d.ts +2 -0
- package/dist/api/shared/display-adapters/st7796.js +132 -0
- package/dist/api/shared/display-capabilities.d.ts +45 -0
- package/dist/api/shared/display-capabilities.js +54 -0
- package/dist/api/shared/display-op-ir.d.ts +62 -0
- package/dist/api/shared/display-op-ir.js +19 -0
- package/dist/api/shared/display-profile.d.ts +265 -0
- package/dist/api/shared/display-profile.js +338 -0
- package/dist/api/shared/graphics-strategy.d.ts +29 -0
- package/dist/api/shared/graphics-strategy.js +11 -0
- package/dist/api/shared/hal-op-ir.d.ts +393 -0
- package/dist/api/shared/hal-op-ir.js +18 -0
- package/dist/api/shared/index.d.ts +26 -0
- package/dist/api/shared/index.js +21 -0
- package/dist/api/shared/ir-core.d.ts +363 -0
- package/dist/api/shared/ir-core.js +8 -0
- package/dist/api/shared/ir-declarations.d.ts +201 -0
- package/dist/api/shared/ir-declarations.js +26 -0
- package/dist/api/shared/ir.d.ts +85 -0
- package/dist/api/shared/ir.js +13 -0
- package/dist/api/shared/platform-strategy.d.ts +402 -0
- package/dist/api/shared/platform-strategy.js +14 -0
- package/dist/api/shared/polyfill-helper-registry.d.ts +11 -0
- package/dist/api/shared/polyfill-helper-registry.js +86 -0
- package/dist/api/shared/polyfill-types.d.ts +33 -0
- package/dist/api/shared/polyfill-types.js +76 -0
- package/dist/api/shared/promise-runtime.d.ts +10 -0
- package/dist/api/shared/promise-runtime.js +244 -0
- package/dist/api/shared/snprintf-types.d.ts +29 -0
- package/dist/api/shared/snprintf-types.js +8 -0
- package/dist/api/shared/string-method-registry.d.ts +53 -0
- package/dist/api/shared/string-method-registry.js +168 -0
- package/dist/api/shared/toolchain-types.d.ts +63 -0
- package/dist/api/shared/toolchain-types.js +71 -0
- package/dist/api/shared/types.d.ts +50 -0
- package/dist/api/shared/types.js +6 -0
- package/dist/ast/parse.d.ts +2 -0
- package/dist/ast/parse.js +4 -0
- package/dist/cache.d.ts +26 -0
- package/dist/cache.js +95 -0
- package/dist/cli-utils.d.ts +37 -0
- package/dist/cli-utils.js +250 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +635 -0
- package/dist/config-loader.d.ts +78 -0
- package/dist/config-loader.js +508 -0
- package/dist/config-schema.d.ts +233 -0
- package/dist/config-schema.js +83 -0
- package/dist/create/board-checklist.d.ts +2 -0
- package/dist/create/board-checklist.js +52 -0
- package/dist/create/board-codegen.d.ts +9 -0
- package/dist/create/board-codegen.js +238 -0
- package/dist/create/board-generators.d.ts +12 -0
- package/dist/create/board-generators.js +652 -0
- package/dist/create/board-spec.d.ts +640 -0
- package/dist/create/board-spec.js +215 -0
- package/dist/create/eslint-rules-template.d.ts +2 -0
- package/dist/create/eslint-rules-template.js +672 -0
- package/dist/create/index.d.ts +11 -0
- package/dist/create/index.js +8 -0
- package/dist/create/init-scaffold.d.ts +27 -0
- package/dist/create/init-scaffold.js +150 -0
- package/dist/create/init-templates.d.ts +24 -0
- package/dist/create/init-templates.js +379 -0
- package/dist/create/init-wizard.d.ts +8 -0
- package/dist/create/init-wizard.js +168 -0
- package/dist/debug/breakpoint-loader.d.ts +24 -0
- package/dist/debug/breakpoint-loader.js +137 -0
- package/dist/debug/index.d.ts +3 -0
- package/dist/debug/index.js +7 -0
- package/dist/debug/preprocessor.d.ts +9 -0
- package/dist/debug/preprocessor.js +214 -0
- package/dist/debug/types.d.ts +32 -0
- package/dist/debug/types.js +6 -0
- package/dist/diagnostics/diagnostics-report.d.ts +51 -0
- package/dist/diagnostics/diagnostics-report.js +333 -0
- package/dist/diagnostics/json-schema.d.ts +138 -0
- package/dist/diagnostics/json-schema.js +27 -0
- package/dist/diagnostics/md-writer.d.ts +10 -0
- package/dist/diagnostics/md-writer.js +336 -0
- package/dist/diagnostics/mermaid-builder.d.ts +65 -0
- package/dist/diagnostics/mermaid-builder.js +681 -0
- package/dist/emit/cpp-emitter.d.ts +6 -0
- package/dist/emit/cpp-emitter.js +48 -0
- package/dist/emit/emitters/class-emitter.d.ts +2 -0
- package/dist/emit/emitters/class-emitter.js +523 -0
- package/dist/emit/emitters/emitter-context.d.ts +174 -0
- package/dist/emit/emitters/emitter-context.js +1 -0
- package/dist/emit/emitters/entrypoint-synthesizer.d.ts +2 -0
- package/dist/emit/emitters/entrypoint-synthesizer.js +175 -0
- package/dist/emit/emitters/function-emitter-impl.d.ts +19 -0
- package/dist/emit/emitters/function-emitter-impl.js +428 -0
- package/dist/emit/emitters/line-appender.d.ts +15 -0
- package/dist/emit/emitters/line-appender.js +344 -0
- package/dist/emit/emitters/namespace-emitter.d.ts +2 -0
- package/dist/emit/emitters/namespace-emitter.js +324 -0
- package/dist/emit/emitters/output-finalizer.d.ts +4 -0
- package/dist/emit/emitters/output-finalizer.js +267 -0
- package/dist/emit/emitters/setup.d.ts +3 -0
- package/dist/emit/emitters/setup.js +851 -0
- package/dist/emit/emitters/top-level-prep.d.ts +2 -0
- package/dist/emit/emitters/top-level-prep.js +706 -0
- package/dist/emit/emitters/type-decl-emitter.d.ts +2 -0
- package/dist/emit/emitters/type-decl-emitter.js +251 -0
- package/dist/emit/emitters/ui-emitter.d.ts +21 -0
- package/dist/emit/emitters/ui-emitter.js +564 -0
- package/dist/emit/enum-emitter.d.ts +1 -0
- package/dist/emit/enum-emitter.js +1 -0
- package/dist/emit/expression-renderer.d.ts +283 -0
- package/dist/emit/expression-renderer.js +1477 -0
- package/dist/emit/native-helpers-emitter.d.ts +11 -0
- package/dist/emit/native-helpers-emitter.js +34 -0
- package/dist/emit/route-hal-op.d.ts +5 -0
- package/dist/emit/route-hal-op.js +13 -0
- package/dist/emit/snprintf-helpers.d.ts +17 -0
- package/dist/emit/snprintf-helpers.js +462 -0
- package/dist/emit/statement-renderer.d.ts +189 -0
- package/dist/emit/statement-renderer.js +948 -0
- package/dist/emit/utils/async-state-machine.d.ts +42 -0
- package/dist/emit/utils/async-state-machine.js +343 -0
- package/dist/emit/utils/comment-helpers.d.ts +20 -0
- package/dist/emit/utils/comment-helpers.js +31 -0
- package/dist/emit/utils/cpp-helpers.d.ts +47 -0
- package/dist/emit/utils/cpp-helpers.js +85 -0
- package/dist/emit/utils/include-resolver.d.ts +58 -0
- package/dist/emit/utils/include-resolver.js +155 -0
- package/dist/emit/utils/index.d.ts +8 -0
- package/dist/emit/utils/index.js +12 -0
- package/dist/emit/utils/type-inference.d.ts +159 -0
- package/dist/emit/utils/type-inference.js +559 -0
- package/dist/eslint-check.d.ts +10 -0
- package/dist/eslint-check.js +102 -0
- package/dist/framework-package.d.ts +10 -0
- package/dist/framework-package.js +58 -0
- package/dist/framework-registry.d.ts +39 -0
- package/dist/framework-registry.js +30 -0
- package/dist/incremental-cache.d.ts +116 -0
- package/dist/incremental-cache.js +335 -0
- package/dist/ir/adc-range-validation.d.ts +11 -0
- package/dist/ir/adc-range-validation.js +250 -0
- package/dist/ir/ast-node-utils.d.ts +8 -0
- package/dist/ir/ast-node-utils.js +32 -0
- package/dist/ir/board-pin-utils.d.ts +13 -0
- package/dist/ir/board-pin-utils.js +65 -0
- package/dist/ir/board-resolver.d.ts +36 -0
- package/dist/ir/board-resolver.js +437 -0
- package/dist/ir/build-ir-state.d.ts +167 -0
- package/dist/ir/build-ir-state.js +306 -0
- package/dist/ir/build-ir.d.ts +2 -0
- package/dist/ir/build-ir.js +808 -0
- package/dist/ir/call-graph.d.ts +35 -0
- package/dist/ir/call-graph.js +194 -0
- package/dist/ir/compile-time-only.d.ts +2 -0
- package/dist/ir/compile-time-only.js +16 -0
- package/dist/ir/declaration-builders.d.ts +9 -0
- package/dist/ir/declaration-builders.js +608 -0
- package/dist/ir/entry-points.d.ts +30 -0
- package/dist/ir/entry-points.js +191 -0
- package/dist/ir/expression-to-ir.d.ts +5 -0
- package/dist/ir/expression-to-ir.js +2249 -0
- package/dist/ir/extract-property-chain.d.ts +10 -0
- package/dist/ir/extract-property-chain.js +30 -0
- package/dist/ir/feature-prescan.d.ts +3 -0
- package/dist/ir/feature-prescan.js +43 -0
- package/dist/ir/feature-registry.d.ts +30 -0
- package/dist/ir/feature-registry.js +816 -0
- package/dist/ir/filter.d.ts +7 -0
- package/dist/ir/filter.js +85 -0
- package/dist/ir/function-builder.d.ts +19 -0
- package/dist/ir/function-builder.js +670 -0
- package/dist/ir/hal/hal-emitter.d.ts +62 -0
- package/dist/ir/hal/hal-emitter.js +735 -0
- package/dist/ir/hal/hal-parser.d.ts +61 -0
- package/dist/ir/hal/hal-parser.js +473 -0
- package/dist/ir/hal/hal-plugins.d.ts +34 -0
- package/dist/ir/hal/hal-plugins.js +706 -0
- package/dist/ir/hal-resolver.d.ts +5 -0
- package/dist/ir/hal-resolver.js +5 -0
- package/dist/ir/heap-analysis.d.ts +8 -0
- package/dist/ir/heap-analysis.js +350 -0
- package/dist/ir/heap-array-validation.d.ts +24 -0
- package/dist/ir/heap-array-validation.js +29 -0
- package/dist/ir/identifier-collector.d.ts +18 -0
- package/dist/ir/identifier-collector.js +439 -0
- package/dist/ir/interrupt-analysis.d.ts +39 -0
- package/dist/ir/interrupt-analysis.js +467 -0
- package/dist/ir/memory-budget-validation.d.ts +10 -0
- package/dist/ir/memory-budget-validation.js +86 -0
- package/dist/ir/namespace-builder.d.ts +7 -0
- package/dist/ir/namespace-builder.js +152 -0
- package/dist/ir/ownership-analysis.d.ts +9 -0
- package/dist/ir/ownership-analysis.js +1207 -0
- package/dist/ir/peripheral-ownership.d.ts +3 -0
- package/dist/ir/peripheral-ownership.js +152 -0
- package/dist/ir/peripheral-symbols.d.ts +7 -0
- package/dist/ir/peripheral-symbols.js +57 -0
- package/dist/ir/peripheral-usage.d.ts +54 -0
- package/dist/ir/peripheral-usage.js +691 -0
- package/dist/ir/peripheral-validation.d.ts +8 -0
- package/dist/ir/peripheral-validation.js +77 -0
- package/dist/ir/pin-alias-conflict.d.ts +4 -0
- package/dist/ir/pin-alias-conflict.js +34 -0
- package/dist/ir/pin-capability-validation.d.ts +6 -0
- package/dist/ir/pin-capability-validation.js +413 -0
- package/dist/ir/pin-mode-validation.d.ts +10 -0
- package/dist/ir/pin-mode-validation.js +301 -0
- package/dist/ir/pin-safety.d.ts +11 -0
- package/dist/ir/pin-safety.js +58 -0
- package/dist/ir/program-analysis.d.ts +44 -0
- package/dist/ir/program-analysis.js +589 -0
- package/dist/ir/pulldown-validation.d.ts +7 -0
- package/dist/ir/pulldown-validation.js +49 -0
- package/dist/ir/pwm-timer-sharing.d.ts +4 -0
- package/dist/ir/pwm-timer-sharing.js +93 -0
- package/dist/ir/reachability.d.ts +68 -0
- package/dist/ir/reachability.js +224 -0
- package/dist/ir/register-decorators.d.ts +6 -0
- package/dist/ir/register-decorators.js +49 -0
- package/dist/ir/render-expr.d.ts +4 -0
- package/dist/ir/render-expr.js +127 -0
- package/dist/ir/resource-analysis.d.ts +19 -0
- package/dist/ir/resource-analysis.js +153 -0
- package/dist/ir/statement-to-ir.d.ts +23 -0
- package/dist/ir/statement-to-ir.js +349 -0
- package/dist/ir/symbol-table.d.ts +68 -0
- package/dist/ir/symbol-table.js +179 -0
- package/dist/ir/symbol-types.d.ts +56 -0
- package/dist/ir/symbol-types.js +107 -0
- package/dist/ir/timer0-pwm-timing-conflict.d.ts +4 -0
- package/dist/ir/timer0-pwm-timing-conflict.js +71 -0
- package/dist/ir/timing-validation.d.ts +7 -0
- package/dist/ir/timing-validation.js +95 -0
- package/dist/ir/transformers/array-methods.d.ts +8 -0
- package/dist/ir/transformers/array-methods.js +493 -0
- package/dist/ir/transformers/call-statement.d.ts +5 -0
- package/dist/ir/transformers/call-statement.js +758 -0
- package/dist/ir/transformers/callback-context-registry.d.ts +20 -0
- package/dist/ir/transformers/callback-context-registry.js +55 -0
- package/dist/ir/transformers/canvas-lowering.d.ts +42 -0
- package/dist/ir/transformers/canvas-lowering.js +249 -0
- package/dist/ir/transformers/control-flow.d.ts +8 -0
- package/dist/ir/transformers/control-flow.js +508 -0
- package/dist/ir/transformers/expressions.d.ts +7 -0
- package/dist/ir/transformers/expressions.js +406 -0
- package/dist/ir/transformers/hal-call-resolver.d.ts +29 -0
- package/dist/ir/transformers/hal-call-resolver.js +274 -0
- package/dist/ir/transformers/hal-emit-helpers.d.ts +14 -0
- package/dist/ir/transformers/hal-emit-helpers.js +63 -0
- package/dist/ir/transformers/namespace-methods.d.ts +20 -0
- package/dist/ir/transformers/namespace-methods.js +110 -0
- package/dist/ir/transformers/register-assignment.d.ts +5 -0
- package/dist/ir/transformers/register-assignment.js +56 -0
- package/dist/ir/transformers/ui-call-resolver.d.ts +149 -0
- package/dist/ir/transformers/ui-call-resolver.js +1136 -0
- package/dist/ir/transformers/ui-callback-lowering.d.ts +62 -0
- package/dist/ir/transformers/ui-callback-lowering.js +623 -0
- package/dist/ir/transformers/ui-mount.d.ts +20 -0
- package/dist/ir/transformers/ui-mount.js +35 -0
- package/dist/ir/transformers/ui-reactive.d.ts +68 -0
- package/dist/ir/transformers/ui-reactive.js +129 -0
- package/dist/ir/transformers/variables.d.ts +14 -0
- package/dist/ir/transformers/variables.js +1045 -0
- package/dist/ir/try-catch-validation.d.ts +26 -0
- package/dist/ir/try-catch-validation.js +128 -0
- package/dist/ir/type-resolution.d.ts +31 -0
- package/dist/ir/type-resolution.js +977 -0
- package/dist/ir/ui-element-auto-wire.d.ts +50 -0
- package/dist/ir/ui-element-auto-wire.js +218 -0
- package/dist/ir/unit-suspicion-validation.d.ts +12 -0
- package/dist/ir/unit-suspicion-validation.js +296 -0
- package/dist/ir/utils/walk-ir.d.ts +6 -0
- package/dist/ir/utils/walk-ir.js +162 -0
- package/dist/ir/validation-orchestrator.d.ts +4 -0
- package/dist/ir/validation-orchestrator.js +45 -0
- package/dist/libdef/base-class-resolver.d.ts +23 -0
- package/dist/libdef/base-class-resolver.js +50 -0
- package/dist/libdef/cpp-to-decl.d.ts +34 -0
- package/dist/libdef/cpp-to-decl.js +584 -0
- package/dist/libdef/header-parser.d.ts +53 -0
- package/dist/libdef/header-parser.js +269 -0
- package/dist/libdef/registry.d.ts +10 -0
- package/dist/libdef/registry.js +142 -0
- package/dist/mapping/peripheral-names.d.ts +23 -0
- package/dist/mapping/peripheral-names.js +63 -0
- package/dist/mapping/source-map.d.ts +46 -0
- package/dist/mapping/source-map.js +207 -0
- package/dist/orchestrator/dts-generator.d.ts +17 -0
- package/dist/orchestrator/dts-generator.js +83 -0
- package/dist/orchestrator/graph-builder.d.ts +18 -0
- package/dist/orchestrator/graph-builder.js +218 -0
- package/dist/orchestrator/semantic-facts-verifier.d.ts +38 -0
- package/dist/orchestrator/semantic-facts-verifier.js +121 -0
- package/dist/orchestrator/semantic-facts.d.ts +141 -0
- package/dist/orchestrator/semantic-facts.js +652 -0
- package/dist/orchestrator/type-checker.d.ts +39 -0
- package/dist/orchestrator/type-checker.js +760 -0
- package/dist/platform/async-runtime.d.ts +8 -0
- package/dist/platform/async-runtime.js +26 -0
- package/dist/platform/generic-strategy.d.ts +101 -0
- package/dist/platform/generic-strategy.js +289 -0
- package/dist/platform/index.d.ts +4 -0
- package/dist/platform/index.js +9 -0
- package/dist/platform/registry.d.ts +21 -0
- package/dist/platform/registry.js +42 -0
- package/dist/platform/toolchain.d.ts +4 -0
- package/dist/platform/toolchain.js +43 -0
- package/dist/preview/client.d.ts +1 -0
- package/dist/preview/client.js +137 -0
- package/dist/preview/server.d.ts +5 -0
- package/dist/preview/server.js +199 -0
- package/dist/profiler/index.d.ts +28 -0
- package/dist/profiler/index.js +28 -0
- package/dist/profiler/profiler.d.ts +95 -0
- package/dist/profiler/profiler.js +338 -0
- package/dist/profiler/types.d.ts +87 -0
- package/dist/profiler/types.js +12 -0
- package/dist/stores/display-profile-store.d.ts +16 -0
- package/dist/stores/display-profile-store.js +48 -0
- package/dist/stores/theme-store.d.ts +13 -0
- package/dist/stores/theme-store.js +30 -0
- package/dist/testing.d.ts +45 -0
- package/dist/testing.js +47 -0
- package/dist/transpile/resolution.d.ts +29 -0
- package/dist/transpile/resolution.js +282 -0
- package/dist/transpile.d.ts +3 -0
- package/dist/transpile.js +722 -0
- package/dist/types.d.ts +217 -0
- package/dist/types.js +1 -0
- package/dist/ui/ui-bridge.d.ts +4 -0
- package/dist/ui/ui-bridge.js +34 -0
- package/dist/ui-hook.d.ts +84 -0
- package/dist/ui-hook.js +45 -0
- package/dist/utils/cli.d.ts +3 -0
- package/dist/utils/cli.js +463 -0
- package/dist/utils/fs.d.ts +4 -0
- package/dist/utils/fs.js +23 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.js +8 -0
- package/dist/utils/strings.d.ts +35 -0
- package/dist/utils/strings.js +142 -0
- package/dist/utils/ui.d.ts +66 -0
- package/dist/utils/ui.js +149 -0
- package/dist/watch.d.ts +35 -0
- package/dist/watch.js +111 -0
- package/package.json +127 -0
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
* Validate that try/catch and throw statements are not used on
|
|
7
|
+
* architectures without C++ exception support.
|
|
8
|
+
*
|
|
9
|
+
* @param program - The program IR to validate
|
|
10
|
+
* @param boardConstants - Board constants containing architecture info
|
|
11
|
+
* @returns Array of error diagnostics for try/catch/throw usage
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateTryCatch(program: {
|
|
14
|
+
topLevelStatements: StatementIR[];
|
|
15
|
+
functions: Array<{
|
|
16
|
+
statements: StatementIR[];
|
|
17
|
+
}>;
|
|
18
|
+
classes: Array<{
|
|
19
|
+
methods: Array<{
|
|
20
|
+
statements: StatementIR[];
|
|
21
|
+
}>;
|
|
22
|
+
constructor?: {
|
|
23
|
+
statements: StatementIR[];
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
}, boardConstants: BoardConstants | undefined, strategy?: PlatformStrategy): Diagnostic[];
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Try/Catch Validation
|
|
3
|
+
//
|
|
4
|
+
// Validates that try/catch and throw statements are not used on architectures
|
|
5
|
+
// that do not support C++ exceptions. The platform strategy determines which
|
|
6
|
+
// architectures have exceptions disabled (e.g. AVR-GCC with -fno-exceptions).
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
/**
|
|
9
|
+
* Validate that try/catch and throw statements are not used on
|
|
10
|
+
* architectures without C++ exception support.
|
|
11
|
+
*
|
|
12
|
+
* @param program - The program IR to validate
|
|
13
|
+
* @param boardConstants - Board constants containing architecture info
|
|
14
|
+
* @returns Array of error diagnostics for try/catch/throw usage
|
|
15
|
+
*/
|
|
16
|
+
export function validateTryCatch(program, boardConstants, strategy) {
|
|
17
|
+
const diagnostics = [];
|
|
18
|
+
const arch = boardConstants?.get('architecture');
|
|
19
|
+
if (!arch || !strategy?.isExceptionSupportDisabled?.(arch)) {
|
|
20
|
+
return diagnostics;
|
|
21
|
+
}
|
|
22
|
+
// Scan all statements for try/catch and throw
|
|
23
|
+
const scanStatements = (stmts) => {
|
|
24
|
+
for (const stmt of stmts) {
|
|
25
|
+
scanStatement(stmt);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const scanStatement = (stmt) => {
|
|
29
|
+
if (!stmt || typeof stmt !== 'object')
|
|
30
|
+
return;
|
|
31
|
+
if (stmt.kind === 'try') {
|
|
32
|
+
const tryStmt = stmt;
|
|
33
|
+
diagnostics.push({
|
|
34
|
+
severity: 'error',
|
|
35
|
+
code: 'try-catch-unsupported',
|
|
36
|
+
message: `try/catch is not supported on ${arch.toUpperCase()} targets. ` +
|
|
37
|
+
`AVR-GCC disables C++ exceptions (-fno-exceptions) and the generated ` +
|
|
38
|
+
`code will not compile. Use return-code error checking instead.`,
|
|
39
|
+
hint: `function readSensor(): number | null {\n const data = sensor.read();\n if (!data) return null; // error path\n return data.value; // success path\n}`,
|
|
40
|
+
line: stmt.sourceSpan?.startLine,
|
|
41
|
+
column: stmt.sourceSpan?.startColumn,
|
|
42
|
+
source: 'try-catch-validation',
|
|
43
|
+
});
|
|
44
|
+
// Still recurse into nested blocks to find other try/catch
|
|
45
|
+
scanStatements(tryStmt.tryBlock ?? []);
|
|
46
|
+
scanStatements(tryStmt.catchBlock ?? []);
|
|
47
|
+
scanStatements(tryStmt.finallyBlock ?? []);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (stmt.kind === 'throw') {
|
|
51
|
+
diagnostics.push({
|
|
52
|
+
severity: 'error',
|
|
53
|
+
code: 'try-catch-unsupported',
|
|
54
|
+
message: `throw is not supported on ${arch.toUpperCase()} targets. ` +
|
|
55
|
+
`AVR-GCC disables C++ exceptions (-fno-exceptions). ` +
|
|
56
|
+
`Use return codes or error flags instead.`,
|
|
57
|
+
hint: `return null; // or return an error code`,
|
|
58
|
+
line: stmt.sourceSpan?.startLine,
|
|
59
|
+
column: stmt.sourceSpan?.startColumn,
|
|
60
|
+
source: 'try-catch-validation',
|
|
61
|
+
});
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Recurse into nested statement containers
|
|
65
|
+
scanNested(stmt, scanStatement);
|
|
66
|
+
};
|
|
67
|
+
// Scan top-level statements
|
|
68
|
+
scanStatements(program.topLevelStatements);
|
|
69
|
+
// Scan function bodies
|
|
70
|
+
for (const fn of program.functions) {
|
|
71
|
+
scanStatements(fn.statements);
|
|
72
|
+
}
|
|
73
|
+
// Scan class methods and constructors
|
|
74
|
+
for (const cls of program.classes) {
|
|
75
|
+
for (const method of cls.methods) {
|
|
76
|
+
scanStatements(method.statements);
|
|
77
|
+
}
|
|
78
|
+
if (cls.constructor) {
|
|
79
|
+
scanStatements(cls.constructor.statements);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return diagnostics;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Recurse into nested statement containers of a given statement.
|
|
86
|
+
* Calls the visitor for each nested statement found.
|
|
87
|
+
*/
|
|
88
|
+
function scanNested(stmt, visitor) {
|
|
89
|
+
const s = stmt;
|
|
90
|
+
// if
|
|
91
|
+
if (s.thenBranch) {
|
|
92
|
+
for (const child of s.thenBranch)
|
|
93
|
+
visitor(child);
|
|
94
|
+
}
|
|
95
|
+
if (s.elseBranch) {
|
|
96
|
+
for (const child of s.elseBranch)
|
|
97
|
+
visitor(child);
|
|
98
|
+
}
|
|
99
|
+
// while, do_while
|
|
100
|
+
if (s.body && Array.isArray(s.body)) {
|
|
101
|
+
for (const child of s.body)
|
|
102
|
+
visitor(child);
|
|
103
|
+
}
|
|
104
|
+
// for, for_of, for_in
|
|
105
|
+
if (s.body && Array.isArray(s.body)) {
|
|
106
|
+
for (const child of s.body)
|
|
107
|
+
visitor(child);
|
|
108
|
+
}
|
|
109
|
+
// switch
|
|
110
|
+
if (s.cases && Array.isArray(s.cases)) {
|
|
111
|
+
for (const c of s.cases) {
|
|
112
|
+
if (c.body && Array.isArray(c.body)) {
|
|
113
|
+
for (const child of c.body)
|
|
114
|
+
visitor(child);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// block
|
|
119
|
+
if (s.statements && Array.isArray(s.statements) && stmt.kind === 'block') {
|
|
120
|
+
for (const child of s.statements)
|
|
121
|
+
visitor(child);
|
|
122
|
+
}
|
|
123
|
+
// labeled
|
|
124
|
+
if (s.body && Array.isArray(s.body) && stmt.kind === 'labeled') {
|
|
125
|
+
for (const child of s.body)
|
|
126
|
+
visitor(child);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { CppType } from "../api/index.js";
|
|
3
|
+
export type CppTypeHint = "int" | "long long" | "unsigned long long" | "float" | "double" | "bool" | "auto" | "void" | "long" | "std::string" | "unsigned int" | "__tc_str_ptr" | `std::vector<${string}>` | `std::set<${string}>` | `std::map<${string}, ${string}>` | `std::function<${string}>` | `${string}*`;
|
|
4
|
+
interface FunctionTypeSignature {
|
|
5
|
+
parameterTypes: CppTypeHint[];
|
|
6
|
+
returnType: CppTypeHint;
|
|
7
|
+
}
|
|
8
|
+
export interface ResolvedDeclarationType {
|
|
9
|
+
explicitType: CppTypeHint;
|
|
10
|
+
inferredType: CppTypeHint;
|
|
11
|
+
resolvedType: CppTypeHint;
|
|
12
|
+
canLowerFromStructuredInitializer: boolean;
|
|
13
|
+
isKnownCompileTimeType: boolean;
|
|
14
|
+
shouldWarnUnmappedType: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveAliasedTypeNode(node: ts.TypeNode | undefined, typeAliases?: Map<string, ts.TypeNode>, visited?: Set<string>): ts.TypeNode | undefined;
|
|
17
|
+
export declare function getDirectCppType(typeName: string): CppTypeHint | undefined;
|
|
18
|
+
export declare function typeNodeToCppType(node: ts.TypeNode | undefined, typeAliases?: Map<string, ts.TypeNode>, typeParametersInScope?: Set<string>): CppTypeHint;
|
|
19
|
+
export declare function resolveFunctionTypeSignature(typeNode: ts.TypeNode | undefined, typeAliases?: Map<string, ts.TypeNode>): FunctionTypeSignature | undefined;
|
|
20
|
+
export declare function inferExprCppType(expr: ts.Expression, functionReturnTypes: Map<string, CppTypeHint>, localVariableTypes: Map<string, CppTypeHint>, sourceText?: string): CppTypeHint;
|
|
21
|
+
export declare function resolveDeclarationType(typeNode: ts.TypeNode | undefined, initializer: ts.Expression | undefined, functionReturnTypes: Map<string, CppTypeHint>, localVariableTypes: Map<string, CppTypeHint>, typeAliases?: Map<string, ts.TypeNode>, sourceText?: string): ResolvedDeclarationType;
|
|
22
|
+
export declare function collectReturns(block: ts.Block): ts.ReturnStatement[];
|
|
23
|
+
export declare function buildFunctionReturnTypeMap(source: ts.SourceFile): Map<string, CppTypeHint>;
|
|
24
|
+
export declare function resolveFunctionReturnType(name: string, functionReturnTypes: Map<string, CppTypeHint>): CppType;
|
|
25
|
+
/**
|
|
26
|
+
* Extract the ownership kind from a TypeScript type node.
|
|
27
|
+
* Detects Shared<T>, Mutable<T>, and Owned<T> wrapper types.
|
|
28
|
+
* Returns undefined if no ownership wrapper is found.
|
|
29
|
+
*/
|
|
30
|
+
export declare function extractOwnershipKindFromTypeNode(node: ts.TypeNode | undefined, typeAliases?: Map<string, ts.TypeNode>): 'owned' | 'shared' | 'mutable' | undefined;
|
|
31
|
+
export {};
|