c-next 0.2.3 → 0.2.4
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/README.md +59 -57
- package/dist/index.js +537 -170
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
- package/src/cli/Runner.ts +1 -1
- package/src/cli/__tests__/Runner.test.ts +8 -8
- package/src/cli/serve/ServeCommand.ts +29 -9
- package/src/transpiler/Transpiler.ts +105 -200
- package/src/transpiler/__tests__/DualCodePaths.test.ts +117 -68
- package/src/transpiler/__tests__/Transpiler.coverage.test.ts +87 -51
- package/src/transpiler/__tests__/Transpiler.test.ts +150 -48
- package/src/transpiler/__tests__/determineProjectRoot.test.ts +2 -2
- package/src/transpiler/data/IncludeResolver.ts +11 -3
- package/src/transpiler/data/__tests__/IncludeResolver.test.ts +2 -2
- package/src/transpiler/logic/analysis/ArrayIndexTypeAnalyzer.ts +346 -0
- package/src/transpiler/logic/analysis/FunctionCallAnalyzer.ts +170 -14
- package/src/transpiler/logic/analysis/__tests__/ArrayIndexTypeAnalyzer.test.ts +545 -0
- package/src/transpiler/logic/analysis/__tests__/FunctionCallAnalyzer.test.ts +327 -0
- package/src/transpiler/logic/analysis/runAnalyzers.ts +9 -2
- package/src/transpiler/logic/analysis/types/IArrayIndexTypeError.ts +15 -0
- package/src/transpiler/logic/symbols/TransitiveEnumCollector.ts +1 -1
- package/src/transpiler/logic/symbols/c/index.ts +50 -1
- package/src/transpiler/output/codegen/CodeGenerator.ts +31 -5
- package/src/transpiler/output/codegen/TypeValidator.ts +10 -7
- package/src/transpiler/output/codegen/__tests__/ExpressionWalker.test.ts +9 -3
- package/src/transpiler/output/codegen/__tests__/RequireInclude.test.ts +86 -23
- package/src/transpiler/output/codegen/__tests__/TrackVariableTypeHelpers.test.ts +3 -1
- package/src/transpiler/output/codegen/__tests__/TypeValidator.test.ts +43 -29
- package/src/transpiler/output/codegen/generators/IOrchestrator.ts +5 -2
- package/src/transpiler/output/codegen/generators/expressions/__tests__/PostfixExpressionGenerator.test.ts +1 -1
- package/src/transpiler/output/codegen/generators/statements/ControlFlowGenerator.ts +12 -3
- package/src/transpiler/output/codegen/generators/statements/__tests__/ControlFlowGenerator.test.ts +4 -4
- package/src/transpiler/output/codegen/helpers/FunctionContextManager.ts +9 -1
- package/src/transpiler/output/headers/HeaderGeneratorUtils.ts +5 -2
- package/src/transpiler/state/CodeGenState.ts +6 -0
- package/src/transpiler/types/IPipelineFile.ts +2 -2
- package/src/transpiler/types/IPipelineInput.ts +1 -1
- package/src/transpiler/types/TTranspileInput.ts +18 -0
- package/src/utils/constants/TypeConstants.ts +22 -0
package/README.md
CHANGED
|
@@ -698,44 +698,46 @@ Decisions are documented in `/docs/decisions/`:
|
|
|
698
698
|
|
|
699
699
|
### Implemented
|
|
700
700
|
|
|
701
|
-
| ADR | Title
|
|
702
|
-
| --------------------------------------------------------------------- |
|
|
703
|
-
| [ADR-001](docs/decisions/adr-001-assignment-operator.md) | Assignment Operator
|
|
704
|
-
| [ADR-003](docs/decisions/adr-003-static-allocation.md) | Static Allocation
|
|
705
|
-
| [ADR-004](docs/decisions/adr-004-register-bindings.md) | Register Bindings
|
|
706
|
-
| [ADR-006](docs/decisions/adr-006-simplified-references.md) | Simplified References
|
|
707
|
-
| [ADR-007](docs/decisions/adr-007-type-aware-bit-indexing.md) | Type-Aware Bit Indexing
|
|
708
|
-
| [ADR-010](docs/decisions/adr-010-c-interoperability.md) | C Interoperability
|
|
709
|
-
| [ADR-011](docs/decisions/adr-011-vscode-extension.md) | VS Code Extension
|
|
710
|
-
| [ADR-012](docs/decisions/adr-012-static-analysis.md) | Static Analysis
|
|
711
|
-
| [ADR-013](docs/decisions/adr-013-const-qualifier.md) | Const Qualifier
|
|
712
|
-
| [ADR-014](docs/decisions/adr-014-structs.md) | Structs
|
|
713
|
-
| [ADR-015](docs/decisions/adr-015-null-state.md) | Null State
|
|
714
|
-
| [ADR-016](docs/decisions/adr-016-scope.md) | Scope
|
|
715
|
-
| [ADR-017](docs/decisions/adr-017-enums.md) | Enums
|
|
716
|
-
| [ADR-030](docs/decisions/adr-030-forward-declarations.md) | Define-Before-Use
|
|
717
|
-
| [ADR-037](docs/decisions/adr-037-preprocessor.md) | Preprocessor
|
|
718
|
-
| [ADR-043](docs/decisions/adr-043-comments.md) | Comments
|
|
719
|
-
| [ADR-044](docs/decisions/adr-044-primitive-types.md) | Primitive Types
|
|
720
|
-
| [ADR-024](docs/decisions/adr-024-type-casting.md) | Type Casting
|
|
721
|
-
| [ADR-022](docs/decisions/adr-022-conditional-expressions.md) | Conditional Expressions
|
|
722
|
-
| [ADR-025](docs/decisions/adr-025-switch-statements.md) | Switch Statements
|
|
723
|
-
| [ADR-029](docs/decisions/adr-029-function-pointers.md) | Callbacks
|
|
724
|
-
| [ADR-045](docs/decisions/adr-045-string-type.md) | Bounded Strings
|
|
725
|
-
| [ADR-023](docs/decisions/adr-023-sizeof.md) | Sizeof
|
|
726
|
-
| [ADR-027](docs/decisions/adr-027-do-while.md) | Do-While
|
|
727
|
-
| [ADR-032](docs/decisions/adr-032-nested-structs.md) | Nested Structs
|
|
728
|
-
| [ADR-035](docs/decisions/adr-035-array-initializers.md) | Array Initializers
|
|
729
|
-
| [ADR-036](docs/decisions/adr-036-multidimensional-arrays.md) | Multi-dim Arrays
|
|
730
|
-
| [ADR-040](docs/decisions/adr-040-isr-declaration.md) | ISR Type
|
|
731
|
-
| [ADR-034](docs/decisions/adr-034-bit-fields.md) | Bitmap Types
|
|
732
|
-
| [ADR-048](docs/decisions/adr-048-cli-executable.md) | CLI Executable
|
|
733
|
-
| [ADR-049](docs/decisions/adr-049-atomic-types.md) | Atomic Types
|
|
734
|
-
| [ADR-050](docs/decisions/adr-050-critical-sections.md) | Critical Sections
|
|
735
|
-
| [ADR-108](docs/decisions/adr-108-volatile-keyword.md) | Volatile Variables
|
|
736
|
-
| [ADR-046](docs/decisions/adr-046-nullable-c-interop.md) | Nullable C Interop
|
|
737
|
-
| [ADR-053](docs/decisions/adr-053-transpiler-pipeline-architecture.md) | Transpiler Pipeline
|
|
738
|
-
| [ADR-057](docs/decisions/adr-057-implicit-scope-resolution.md) | Implicit Scope Resolution
|
|
701
|
+
| ADR | Title | Description |
|
|
702
|
+
| --------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------ |
|
|
703
|
+
| [ADR-001](docs/decisions/adr-001-assignment-operator.md) | Assignment Operator | `<-` for assignment, `=` for comparison |
|
|
704
|
+
| [ADR-003](docs/decisions/adr-003-static-allocation.md) | Static Allocation | No dynamic memory after init |
|
|
705
|
+
| [ADR-004](docs/decisions/adr-004-register-bindings.md) | Register Bindings | Type-safe hardware access |
|
|
706
|
+
| [ADR-006](docs/decisions/adr-006-simplified-references.md) | Simplified References | Pass by reference, no pointer syntax |
|
|
707
|
+
| [ADR-007](docs/decisions/adr-007-type-aware-bit-indexing.md) | Type-Aware Bit Indexing | Integers as bit arrays, `.length` property |
|
|
708
|
+
| [ADR-010](docs/decisions/adr-010-c-interoperability.md) | C Interoperability | Unified ANTLR parser architecture |
|
|
709
|
+
| [ADR-011](docs/decisions/adr-011-vscode-extension.md) | VS Code Extension | Live C preview with syntax highlighting |
|
|
710
|
+
| [ADR-012](docs/decisions/adr-012-static-analysis.md) | Static Analysis | cppcheck integration for generated C |
|
|
711
|
+
| [ADR-013](docs/decisions/adr-013-const-qualifier.md) | Const Qualifier | Compile-time const enforcement |
|
|
712
|
+
| [ADR-014](docs/decisions/adr-014-structs.md) | Structs | Data containers without methods |
|
|
713
|
+
| [ADR-015](docs/decisions/adr-015-null-state.md) | Null State | Zero initialization for all variables |
|
|
714
|
+
| [ADR-016](docs/decisions/adr-016-scope.md) | Scope | `this.`/`global.` explicit qualification |
|
|
715
|
+
| [ADR-017](docs/decisions/adr-017-enums.md) | Enums | Type-safe enums with C-style casting |
|
|
716
|
+
| [ADR-030](docs/decisions/adr-030-forward-declarations.md) | Define-Before-Use | Functions must be defined before called |
|
|
717
|
+
| [ADR-037](docs/decisions/adr-037-preprocessor.md) | Preprocessor | Flag-only defines, const for values |
|
|
718
|
+
| [ADR-043](docs/decisions/adr-043-comments.md) | Comments | Comment preservation with MISRA compliance |
|
|
719
|
+
| [ADR-044](docs/decisions/adr-044-primitive-types.md) | Primitive Types | Fixed-width types with `clamp`/`wrap` overflow |
|
|
720
|
+
| [ADR-024](docs/decisions/adr-024-type-casting.md) | Type Casting | Widening implicit, narrowing uses bit indexing |
|
|
721
|
+
| [ADR-022](docs/decisions/adr-022-conditional-expressions.md) | Conditional Expressions | Ternary with required parens, boolean condition, no nesting |
|
|
722
|
+
| [ADR-025](docs/decisions/adr-025-switch-statements.md) | Switch Statements | Safe switch with braces, `\|\|` syntax, counted `default(n)` |
|
|
723
|
+
| [ADR-029](docs/decisions/adr-029-function-pointers.md) | Callbacks | Function-as-Type pattern with nominal typing |
|
|
724
|
+
| [ADR-045](docs/decisions/adr-045-string-type.md) | Bounded Strings | `string<N>` with compile-time safety |
|
|
725
|
+
| [ADR-023](docs/decisions/adr-023-sizeof.md) | Sizeof | Type/value size queries with safety checks |
|
|
726
|
+
| [ADR-027](docs/decisions/adr-027-do-while.md) | Do-While | `do { } while ()` with boolean condition (E0701) |
|
|
727
|
+
| [ADR-032](docs/decisions/adr-032-nested-structs.md) | Nested Structs | Named nested structs only (no anonymous) |
|
|
728
|
+
| [ADR-035](docs/decisions/adr-035-array-initializers.md) | Array Initializers | `[1, 2, 3]` syntax with `[0*]` fill-all |
|
|
729
|
+
| [ADR-036](docs/decisions/adr-036-multidimensional-arrays.md) | Multi-dim Arrays | `arr[i][j]` with compile-time bounds enforcement |
|
|
730
|
+
| [ADR-040](docs/decisions/adr-040-isr-declaration.md) | ISR Type | Built-in `ISR` type for `void(void)` function pointers |
|
|
731
|
+
| [ADR-034](docs/decisions/adr-034-bit-fields.md) | Bitmap Types | `bitmap8`/`bitmap16`/`bitmap32` for portable bit-packed data |
|
|
732
|
+
| [ADR-048](docs/decisions/adr-048-cli-executable.md) | CLI Executable | `cnext` command with smart defaults |
|
|
733
|
+
| [ADR-049](docs/decisions/adr-049-atomic-types.md) | Atomic Types | `atomic` keyword with LDREX/STREX or PRIMASK fallback |
|
|
734
|
+
| [ADR-050](docs/decisions/adr-050-critical-sections.md) | Critical Sections | `critical { }` blocks with PRIMASK save/restore |
|
|
735
|
+
| [ADR-108](docs/decisions/adr-108-volatile-keyword.md) | Volatile Variables | `volatile` keyword prevents compiler optimization |
|
|
736
|
+
| [ADR-046](docs/decisions/adr-046-nullable-c-interop.md) | Nullable C Interop | `c_` prefix for nullable C pointer types |
|
|
737
|
+
| [ADR-053](docs/decisions/adr-053-transpiler-pipeline-architecture.md) | Transpiler Pipeline | Unified multi-pass pipeline with header symbol extraction |
|
|
738
|
+
| [ADR-057](docs/decisions/adr-057-implicit-scope-resolution.md) | Implicit Scope Resolution | Bare identifiers resolve local → scope → global |
|
|
739
|
+
| [ADR-055](docs/decisions/adr-055-symbol-parser-architecture.md) | Symbol Parser Architecture | Unified symbol resolution with composable collectors |
|
|
740
|
+
| [ADR-058](docs/decisions/adr-058-explicit-length-properties.md) | Explicit Length Properties | `.bit_length`/`.byte_length`/`.element_count`/`.char_count` |
|
|
739
741
|
|
|
740
742
|
### Accepted
|
|
741
743
|
|
|
@@ -752,28 +754,28 @@ Decisions are documented in `/docs/decisions/`:
|
|
|
752
754
|
|
|
753
755
|
### Research (v1 Roadmap)
|
|
754
756
|
|
|
755
|
-
| ADR | Title | Description
|
|
756
|
-
| ---------------------------------------------------------------- | ----------------------------- |
|
|
757
|
-
| [ADR-008](docs/decisions/adr-008-language-bug-prevention.md) | Language-Level Bug Prevention | Top 15 embedded bugs and prevention
|
|
758
|
-
| [ADR-009](docs/decisions/adr-009-isr-safety.md) | ISR Safety | Safe interrupts without `unsafe` blocks
|
|
759
|
-
| [ADR-054](docs/decisions/adr-054-array-index-overflow.md) | Array Index Overflow | Overflow semantics for array index expressions
|
|
760
|
-
| [ADR-
|
|
761
|
-
| [ADR-
|
|
762
|
-
| [ADR-
|
|
763
|
-
| [ADR-
|
|
764
|
-
| [ADR-109](docs/decisions/adr-109-codegenerator-decomposition.md) | CodeGenerator Decomposition | Breaking down CodeGenerator into modules |
|
|
757
|
+
| ADR | Title | Description |
|
|
758
|
+
| ---------------------------------------------------------------- | ----------------------------- | ------------------------------------------------ |
|
|
759
|
+
| [ADR-008](docs/decisions/adr-008-language-bug-prevention.md) | Language-Level Bug Prevention | Top 15 embedded bugs and prevention |
|
|
760
|
+
| [ADR-009](docs/decisions/adr-009-isr-safety.md) | ISR Safety | Safe interrupts without `unsafe` blocks |
|
|
761
|
+
| [ADR-054](docs/decisions/adr-054-array-index-overflow.md) | Array Index Overflow | Overflow semantics for array index expressions |
|
|
762
|
+
| [ADR-056](docs/decisions/adr-056-cast-overflow-behavior.md) | Cast Overflow Behavior | Consistent overflow semantics for type casts |
|
|
763
|
+
| [ADR-060](docs/decisions/adr-060-vscode-extension-separation.md) | VS Code Extension Separation | Separate repository for VS Code extension |
|
|
764
|
+
| [ADR-109](docs/decisions/adr-109-codegenerator-decomposition.md) | CodeGenerator Decomposition | Breaking down CodeGenerator into modules |
|
|
765
|
+
| [ADR-110](docs/decisions/adr-110-do178c-compliance.md) | DO-178C Compliance | Safety-critical software certification framework |
|
|
765
766
|
|
|
766
767
|
### Research (v2 Roadmap)
|
|
767
768
|
|
|
768
|
-
| ADR | Title | Description
|
|
769
|
-
| --------------------------------------------------------------- | -------------------------- |
|
|
770
|
-
| [ADR-100](docs/decisions/adr-100-multi-core-synchronization.md) | Multi-Core Synchronization | ESP32/RP2040 spinlock patterns
|
|
771
|
-
| [ADR-101](docs/decisions/adr-101-heap-allocation.md) | Heap Allocation | Dynamic memory for desktop targets
|
|
772
|
-
| [ADR-102](docs/decisions/adr-102-critical-section-analysis.md) | Critical Section Analysis | Complexity warnings and cycle analysis
|
|
773
|
-
| [ADR-103](docs/decisions/adr-103-stream-handling.md) | Stream Handling | FILE\* and fopen patterns for file I/O
|
|
774
|
-
| [ADR-104](docs/decisions/adr-104-isr-queues.md) | ISR-Safe Queues | Producer-consumer patterns for ISR/main
|
|
775
|
-
| [ADR-105](docs/decisions/adr-105-prefixed-includes.md) | Prefixed Includes | Namespace control for includes
|
|
776
|
-
| [ADR-106](docs/decisions/adr-106-isr-vector-bindings.md) | Vector Table Bindings | Register bindings for ISR vector tables
|
|
769
|
+
| ADR | Title | Description |
|
|
770
|
+
| --------------------------------------------------------------- | -------------------------- | ----------------------------------------- |
|
|
771
|
+
| [ADR-100](docs/decisions/adr-100-multi-core-synchronization.md) | Multi-Core Synchronization | ESP32/RP2040 spinlock patterns |
|
|
772
|
+
| [ADR-101](docs/decisions/adr-101-heap-allocation.md) | Heap Allocation | Dynamic memory for desktop targets |
|
|
773
|
+
| [ADR-102](docs/decisions/adr-102-critical-section-analysis.md) | Critical Section Analysis | Complexity warnings and cycle analysis |
|
|
774
|
+
| [ADR-103](docs/decisions/adr-103-stream-handling.md) | Stream Handling | FILE\* and fopen patterns for file I/O |
|
|
775
|
+
| [ADR-104](docs/decisions/adr-104-isr-queues.md) | ISR-Safe Queues | Producer-consumer patterns for ISR/main |
|
|
776
|
+
| [ADR-105](docs/decisions/adr-105-prefixed-includes.md) | Prefixed Includes | Namespace control for includes |
|
|
777
|
+
| [ADR-106](docs/decisions/adr-106-isr-vector-bindings.md) | Vector Table Bindings | Register bindings for ISR vector tables |
|
|
778
|
+
| [ADR-111](docs/decisions/adr-111-safe-hardware-abstraction.md) | Safe Hardware Abstraction | Type-safe hardware abstraction primitives |
|
|
777
779
|
|
|
778
780
|
### Rejected
|
|
779
781
|
|