@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,35 @@
|
|
|
1
|
+
import { ProgramIR } from "../api/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Represents a node in the call graph
|
|
4
|
+
*/
|
|
5
|
+
interface CallGraphNode {
|
|
6
|
+
/** Symbol name */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Type of symbol */
|
|
9
|
+
kind: "function" | "class" | "enum" | "variable" | "type_alias";
|
|
10
|
+
/** Names of symbols this node references */
|
|
11
|
+
dependencies: Set<string>;
|
|
12
|
+
/** Source for debugging/diagnostics */
|
|
13
|
+
source?: {
|
|
14
|
+
line: number;
|
|
15
|
+
column: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Call graph representing dependencies between symbols
|
|
20
|
+
*/
|
|
21
|
+
export interface CallGraph {
|
|
22
|
+
/** All nodes in the graph, keyed by symbol name */
|
|
23
|
+
nodes: Map<string, CallGraphNode>;
|
|
24
|
+
/** Reverse mapping: symbol -> symbols that reference it */
|
|
25
|
+
referencedBy: Map<string, Set<string>>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build a call graph from program IR
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildCallGraph(program: ProgramIR): CallGraph;
|
|
31
|
+
/**
|
|
32
|
+
* Get all symbols reachable from a starting set
|
|
33
|
+
*/
|
|
34
|
+
export declare function getReachableSymbols(graph: CallGraph, entryPoints: Set<string>): Set<string>;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { collectExpressionIdentifiers, collectStatementIdentifiers } from "./identifier-collector.js";
|
|
2
|
+
import { parsedCollectNamedTypes } from "../api/shared/cpp-type-ir.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build a call graph from program IR
|
|
5
|
+
*/
|
|
6
|
+
export function buildCallGraph(program) {
|
|
7
|
+
const nodes = new Map();
|
|
8
|
+
const referencedBy = new Map();
|
|
9
|
+
// Helper to add a reference
|
|
10
|
+
const addReference = (from, to) => {
|
|
11
|
+
if (!referencedBy.has(to)) {
|
|
12
|
+
referencedBy.set(to, new Set());
|
|
13
|
+
}
|
|
14
|
+
referencedBy.get(to).add(from);
|
|
15
|
+
};
|
|
16
|
+
// Process functions
|
|
17
|
+
for (const fn of program.functions) {
|
|
18
|
+
const dependencies = new Set();
|
|
19
|
+
// Add parameters as local (don't count as external dependencies)
|
|
20
|
+
const localBindings = new Set(fn.parameters.map((p) => p.name));
|
|
21
|
+
// Collect type references from parameter types (e.g. SampleWindow)
|
|
22
|
+
for (const param of fn.parameters) {
|
|
23
|
+
for (const match of parsedCollectNamedTypes(param.cppType)) {
|
|
24
|
+
dependencies.add(match);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Collect identifiers from function body
|
|
28
|
+
for (const statement of fn.statements) {
|
|
29
|
+
for (const id of collectStatementIdentifiers(statement)) {
|
|
30
|
+
if (!localBindings.has(id)) {
|
|
31
|
+
dependencies.add(id);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
nodes.set(fn.originalName, {
|
|
36
|
+
name: fn.originalName,
|
|
37
|
+
kind: "function",
|
|
38
|
+
dependencies,
|
|
39
|
+
source: {
|
|
40
|
+
line: fn.sourceSpan.startLine,
|
|
41
|
+
column: fn.sourceSpan.startColumn,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
// Update reverse mapping
|
|
45
|
+
for (const dep of dependencies) {
|
|
46
|
+
addReference(fn.originalName, dep);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Process classes
|
|
50
|
+
for (const cls of program.classes) {
|
|
51
|
+
const dependencies = new Set();
|
|
52
|
+
// Collect from fields
|
|
53
|
+
for (const field of cls.fields) {
|
|
54
|
+
if (field.initializer) {
|
|
55
|
+
for (const id of collectExpressionIdentifiers(field.initializer)) {
|
|
56
|
+
dependencies.add(id);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Field type might reference other classes
|
|
60
|
+
for (const match of parsedCollectNamedTypes(field.cppType)) {
|
|
61
|
+
if (match !== cls.name)
|
|
62
|
+
dependencies.add(match);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Collect from constructor
|
|
66
|
+
if (cls.constructor) {
|
|
67
|
+
const localBindings = new Set(cls.constructor.parameters.map((p) => p.name));
|
|
68
|
+
for (const statement of cls.constructor.statements) {
|
|
69
|
+
for (const id of collectStatementIdentifiers(statement)) {
|
|
70
|
+
if (!localBindings.has(id)) {
|
|
71
|
+
dependencies.add(id);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Collect from methods
|
|
77
|
+
for (const method of cls.methods) {
|
|
78
|
+
const localBindings = new Set(method.parameters.map((p) => p.name));
|
|
79
|
+
for (const statement of method.statements) {
|
|
80
|
+
for (const id of collectStatementIdentifiers(statement)) {
|
|
81
|
+
if (!localBindings.has(id)) {
|
|
82
|
+
dependencies.add(id);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
nodes.set(cls.name, {
|
|
88
|
+
name: cls.name,
|
|
89
|
+
kind: "class",
|
|
90
|
+
dependencies,
|
|
91
|
+
source: {
|
|
92
|
+
line: cls.sourceSpan.startLine,
|
|
93
|
+
column: cls.sourceSpan.startColumn,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
// Update reverse mapping
|
|
97
|
+
for (const dep of dependencies) {
|
|
98
|
+
addReference(cls.name, dep);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Process enums
|
|
102
|
+
for (const enumDef of program.enums) {
|
|
103
|
+
// Enums might reference other enums for values, but typically are leaf nodes
|
|
104
|
+
nodes.set(enumDef.name, {
|
|
105
|
+
name: enumDef.name,
|
|
106
|
+
kind: "enum",
|
|
107
|
+
dependencies: new Set(),
|
|
108
|
+
source: {
|
|
109
|
+
line: enumDef.sourceSpan.startLine,
|
|
110
|
+
column: enumDef.sourceSpan.startColumn,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Process type aliases
|
|
115
|
+
for (const typeAlias of program.typeAliases) {
|
|
116
|
+
const dependencies = new Set();
|
|
117
|
+
for (const match of parsedCollectNamedTypes(typeAlias.cppType)) {
|
|
118
|
+
dependencies.add(match);
|
|
119
|
+
}
|
|
120
|
+
nodes.set(typeAlias.name, {
|
|
121
|
+
name: typeAlias.name,
|
|
122
|
+
kind: "type_alias",
|
|
123
|
+
dependencies,
|
|
124
|
+
source: {
|
|
125
|
+
line: typeAlias.sourceSpan.startLine,
|
|
126
|
+
column: typeAlias.sourceSpan.startColumn,
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
for (const dep of dependencies) {
|
|
130
|
+
addReference(typeAlias.name, dep);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Process top-level statements.
|
|
134
|
+
// Named var_decl statements get their own nodes so they can be
|
|
135
|
+
// individually tree-shaken. All other (non-var_decl) statements
|
|
136
|
+
// contribute to the special __top_level__ node.
|
|
137
|
+
const topLevelDependencies = new Set();
|
|
138
|
+
for (const statement of program.topLevelStatements) {
|
|
139
|
+
if (statement.kind === "var_decl") {
|
|
140
|
+
const varDeps = new Set();
|
|
141
|
+
if (statement.initializer) {
|
|
142
|
+
for (const id of collectExpressionIdentifiers(statement.initializer)) {
|
|
143
|
+
varDeps.add(id);
|
|
144
|
+
topLevelDependencies.add(id);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
nodes.set(statement.name, {
|
|
148
|
+
name: statement.name,
|
|
149
|
+
kind: "variable",
|
|
150
|
+
dependencies: varDeps,
|
|
151
|
+
});
|
|
152
|
+
for (const dep of varDeps) {
|
|
153
|
+
addReference(statement.name, dep);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
for (const id of collectStatementIdentifiers(statement)) {
|
|
158
|
+
topLevelDependencies.add(id);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
nodes.set("__top_level__", {
|
|
163
|
+
name: "__top_level__",
|
|
164
|
+
kind: "variable",
|
|
165
|
+
dependencies: topLevelDependencies,
|
|
166
|
+
});
|
|
167
|
+
for (const dep of topLevelDependencies) {
|
|
168
|
+
addReference("__top_level__", dep);
|
|
169
|
+
}
|
|
170
|
+
return { nodes, referencedBy };
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get all symbols reachable from a starting set
|
|
174
|
+
*/
|
|
175
|
+
export function getReachableSymbols(graph, entryPoints) {
|
|
176
|
+
const reachable = new Set();
|
|
177
|
+
const worklist = [...entryPoints];
|
|
178
|
+
while (worklist.length > 0) {
|
|
179
|
+
const current = worklist.pop();
|
|
180
|
+
if (reachable.has(current)) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
reachable.add(current);
|
|
184
|
+
const node = graph.nodes.get(current);
|
|
185
|
+
if (node) {
|
|
186
|
+
for (const dep of node.dependencies) {
|
|
187
|
+
if (!reachable.has(dep)) {
|
|
188
|
+
worklist.push(dep);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return reachable;
|
|
194
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const COMPILE_TIME_ONLY_CALLS = new Set([
|
|
2
|
+
"registerPlatformStrategy",
|
|
3
|
+
"registerPolyfill",
|
|
4
|
+
"registerBoard",
|
|
5
|
+
"defineBoardManifest",
|
|
6
|
+
]);
|
|
7
|
+
const COMPILE_TIME_ONLY_CLASSES = new Set([
|
|
8
|
+
"NativeStrategy",
|
|
9
|
+
"BoardStrategy",
|
|
10
|
+
]);
|
|
11
|
+
export function isCompileTimeOnlyCallName(name) {
|
|
12
|
+
return COMPILE_TIME_ONLY_CALLS.has(name);
|
|
13
|
+
}
|
|
14
|
+
export function isCompileTimeOnlyClassName(name) {
|
|
15
|
+
return COMPILE_TIME_ONLY_CLASSES.has(name) || name.endsWith("Strategy");
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { Diagnostic } from "../types.js";
|
|
3
|
+
import { ClassIR, EnumIR, InterfaceIR, RegisterClassIR, TypeAliasIR } from "../api/index.js";
|
|
4
|
+
import { CppTypeHint } from "./type-resolution.js";
|
|
5
|
+
import { PointerTracker } from "./build-ir-state.js";
|
|
6
|
+
export declare function classDeclarationToIR(node: ts.ClassDeclaration, fileName: string, sourceText: string, diagnostics: Diagnostic[], functionReturnTypes: Map<string, CppTypeHint>, typeAliasNodes: Map<string, ts.TypeNode>, registerClasses: RegisterClassIR[], pointerVars?: PointerTracker, scopePrefix?: string): ClassIR | undefined;
|
|
7
|
+
export declare function enumDeclarationToIR(node: ts.EnumDeclaration, fileName: string, sourceText: string): EnumIR | undefined;
|
|
8
|
+
export declare function interfaceDeclarationToIR(node: ts.InterfaceDeclaration, fileName: string, sourceText: string, typeAliasNodes: Map<string, ts.TypeNode>): InterfaceIR | undefined;
|
|
9
|
+
export declare function typeAliasDeclarationToIR(node: ts.TypeAliasDeclaration, fileName: string, sourceText: string, typeAliasNodes: Map<string, ts.TypeNode>): TypeAliasIR | undefined;
|