c-next 0.1.62 → 0.1.63
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 +86 -63
- package/package.json +1 -1
- package/src/transpiler/Transpiler.ts +3 -2
- package/src/transpiler/__tests__/DualCodePaths.test.ts +1 -1
- package/src/transpiler/__tests__/Transpiler.coverage.test.ts +1 -1
- package/src/transpiler/__tests__/Transpiler.test.ts +0 -23
- package/src/transpiler/logic/symbols/cnext/collectors/StructCollector.ts +156 -70
- package/src/transpiler/logic/symbols/cnext/collectors/VariableCollector.ts +31 -6
- package/src/transpiler/logic/symbols/cnext/utils/TypeUtils.ts +43 -11
- package/src/transpiler/output/codegen/CodeGenState.ts +811 -0
- package/src/transpiler/output/codegen/CodeGenerator.ts +817 -1377
- package/src/transpiler/output/codegen/TypeResolver.ts +193 -149
- package/src/transpiler/output/codegen/TypeValidator.ts +148 -370
- package/src/transpiler/output/codegen/__tests__/CodeGenState.test.ts +446 -0
- package/src/transpiler/output/codegen/__tests__/CodeGenerator.test.ts +326 -60
- package/src/transpiler/output/codegen/__tests__/TrackVariableTypeHelpers.test.ts +1 -1
- package/src/transpiler/output/codegen/__tests__/TypeResolver.test.ts +435 -196
- package/src/transpiler/output/codegen/__tests__/TypeValidator.resolution.test.ts +51 -67
- package/src/transpiler/output/codegen/__tests__/TypeValidator.test.ts +495 -471
- package/src/transpiler/output/codegen/analysis/MemberChainAnalyzer.ts +39 -43
- package/src/transpiler/output/codegen/analysis/StringLengthCounter.ts +52 -55
- package/src/transpiler/output/codegen/analysis/__tests__/MemberChainAnalyzer.test.ts +122 -62
- package/src/transpiler/output/codegen/analysis/__tests__/StringLengthCounter.test.ts +101 -144
- package/src/transpiler/output/codegen/assignment/AssignmentClassifier.ts +143 -126
- package/src/transpiler/output/codegen/assignment/__tests__/AssignmentClassifier.test.ts +287 -320
- package/src/transpiler/output/codegen/generators/GeneratorRegistry.ts +12 -0
- package/src/transpiler/output/codegen/generators/__tests__/GeneratorRegistry.test.ts +28 -1
- package/src/transpiler/output/codegen/generators/declarationGenerators/ArrayDimensionUtils.ts +67 -0
- package/src/transpiler/output/codegen/generators/declarationGenerators/ScopeGenerator.ts +121 -51
- package/src/transpiler/output/codegen/generators/declarationGenerators/StructGenerator.ts +100 -23
- package/src/transpiler/output/codegen/generators/declarationGenerators/__tests__/ArrayDimensionUtils.test.ts +125 -0
- package/src/transpiler/output/codegen/generators/declarationGenerators/__tests__/ScopeGenerator.test.ts +157 -4
- package/src/transpiler/output/codegen/generators/support/HelperGenerator.ts +23 -22
- package/src/transpiler/output/codegen/helpers/ArrayInitHelper.ts +54 -61
- package/src/transpiler/output/codegen/helpers/AssignmentExpectedTypeResolver.ts +21 -30
- package/src/transpiler/output/codegen/helpers/AssignmentValidator.ts +56 -53
- package/src/transpiler/output/codegen/helpers/CppModeHelper.ts +22 -30
- package/src/transpiler/output/codegen/helpers/EnumAssignmentValidator.ts +108 -50
- package/src/transpiler/output/codegen/helpers/FloatBitHelper.ts +16 -31
- package/src/transpiler/output/codegen/helpers/StringDeclHelper.ts +103 -96
- package/src/transpiler/output/codegen/helpers/TypeGenerationHelper.ts +9 -0
- package/src/transpiler/output/codegen/helpers/__tests__/ArrayInitHelper.test.ts +58 -103
- package/src/transpiler/output/codegen/helpers/__tests__/AssignmentExpectedTypeResolver.test.ts +97 -40
- package/src/transpiler/output/codegen/helpers/__tests__/AssignmentValidator.test.ts +223 -128
- package/src/transpiler/output/codegen/helpers/__tests__/CppModeHelper.test.ts +68 -41
- package/src/transpiler/output/codegen/helpers/__tests__/EnumAssignmentValidator.test.ts +198 -47
- package/src/transpiler/output/codegen/helpers/__tests__/FloatBitHelper.test.ts +39 -37
- package/src/transpiler/output/codegen/helpers/__tests__/StringDeclHelper.test.ts +191 -453
- package/src/transpiler/output/codegen/resolution/EnumTypeResolver.ts +229 -0
- package/src/transpiler/output/codegen/resolution/ScopeResolver.ts +60 -0
- package/src/transpiler/output/codegen/resolution/SizeofResolver.ts +177 -0
- package/src/transpiler/output/codegen/resolution/__tests__/EnumTypeResolver.test.ts +336 -0
- package/src/transpiler/output/codegen/resolution/__tests__/SizeofResolver.test.ts +201 -0
- package/src/transpiler/output/codegen/types/ITypeResolverDeps.ts +0 -23
- package/src/transpiler/output/codegen/types/ITypeValidatorDeps.ts +0 -53
|
@@ -5,6 +5,41 @@
|
|
|
5
5
|
import * as Parser from "../../../parser/grammar/CNextParser";
|
|
6
6
|
import CNEXT_TO_C_TYPE_MAP from "../../../../../utils/constants/TypeMappings";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Resolve scoped type (this.Type) to full name.
|
|
10
|
+
*/
|
|
11
|
+
function resolveScopedType(
|
|
12
|
+
scopedTypeCtx: Parser.ScopedTypeContext,
|
|
13
|
+
scopeName?: string,
|
|
14
|
+
): string {
|
|
15
|
+
const typeName = scopedTypeCtx.IDENTIFIER().getText();
|
|
16
|
+
return scopeName ? `${scopeName}_${typeName}` : typeName;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Resolve string type with optional capacity.
|
|
21
|
+
*/
|
|
22
|
+
function resolveStringType(stringCtx: Parser.StringTypeContext): string {
|
|
23
|
+
const intLiteral = stringCtx.INTEGER_LITERAL();
|
|
24
|
+
return intLiteral ? `string<${intLiteral.getText()}>` : "string";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Extract inner type from arrayType context.
|
|
29
|
+
*/
|
|
30
|
+
function resolveArrayInnerType(arrayTypeCtx: Parser.ArrayTypeContext): string {
|
|
31
|
+
if (arrayTypeCtx.primitiveType()) {
|
|
32
|
+
return arrayTypeCtx.primitiveType()!.getText();
|
|
33
|
+
}
|
|
34
|
+
if (arrayTypeCtx.userType()) {
|
|
35
|
+
return arrayTypeCtx.userType()!.getText();
|
|
36
|
+
}
|
|
37
|
+
// Fallback for other nested types - strip the dimension part
|
|
38
|
+
const text = arrayTypeCtx.getText();
|
|
39
|
+
const bracketIdx = text.indexOf("[");
|
|
40
|
+
return bracketIdx > 0 ? text.substring(0, bracketIdx) : text;
|
|
41
|
+
}
|
|
42
|
+
|
|
8
43
|
class TypeUtils {
|
|
9
44
|
/**
|
|
10
45
|
* Extract the type name from a type context.
|
|
@@ -23,11 +58,7 @@ class TypeUtils {
|
|
|
23
58
|
|
|
24
59
|
// Handle this.Type for scoped types (e.g., this.State -> Motor_State)
|
|
25
60
|
if (ctx.scopedType()) {
|
|
26
|
-
|
|
27
|
-
if (scopeName) {
|
|
28
|
-
return `${scopeName}_${typeName}`;
|
|
29
|
-
}
|
|
30
|
-
return typeName;
|
|
61
|
+
return resolveScopedType(ctx.scopedType()!, scopeName);
|
|
31
62
|
}
|
|
32
63
|
|
|
33
64
|
// Issue #478: Handle global.Type for global types inside scope
|
|
@@ -54,12 +85,13 @@ class TypeUtils {
|
|
|
54
85
|
|
|
55
86
|
// Handle string types - preserve capacity for validation (Issue #139)
|
|
56
87
|
if (ctx.stringType()) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
88
|
+
return resolveStringType(ctx.stringType()!);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Handle arrayType: Type[size] - extract the inner type without dimension
|
|
92
|
+
// The dimension is tracked separately in arrayDimensions
|
|
93
|
+
if (ctx.arrayType()) {
|
|
94
|
+
return resolveArrayInnerType(ctx.arrayType()!);
|
|
63
95
|
}
|
|
64
96
|
|
|
65
97
|
// Fallback
|