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.
Files changed (55) hide show
  1. package/README.md +86 -63
  2. package/package.json +1 -1
  3. package/src/transpiler/Transpiler.ts +3 -2
  4. package/src/transpiler/__tests__/DualCodePaths.test.ts +1 -1
  5. package/src/transpiler/__tests__/Transpiler.coverage.test.ts +1 -1
  6. package/src/transpiler/__tests__/Transpiler.test.ts +0 -23
  7. package/src/transpiler/logic/symbols/cnext/collectors/StructCollector.ts +156 -70
  8. package/src/transpiler/logic/symbols/cnext/collectors/VariableCollector.ts +31 -6
  9. package/src/transpiler/logic/symbols/cnext/utils/TypeUtils.ts +43 -11
  10. package/src/transpiler/output/codegen/CodeGenState.ts +811 -0
  11. package/src/transpiler/output/codegen/CodeGenerator.ts +817 -1377
  12. package/src/transpiler/output/codegen/TypeResolver.ts +193 -149
  13. package/src/transpiler/output/codegen/TypeValidator.ts +148 -370
  14. package/src/transpiler/output/codegen/__tests__/CodeGenState.test.ts +446 -0
  15. package/src/transpiler/output/codegen/__tests__/CodeGenerator.test.ts +326 -60
  16. package/src/transpiler/output/codegen/__tests__/TrackVariableTypeHelpers.test.ts +1 -1
  17. package/src/transpiler/output/codegen/__tests__/TypeResolver.test.ts +435 -196
  18. package/src/transpiler/output/codegen/__tests__/TypeValidator.resolution.test.ts +51 -67
  19. package/src/transpiler/output/codegen/__tests__/TypeValidator.test.ts +495 -471
  20. package/src/transpiler/output/codegen/analysis/MemberChainAnalyzer.ts +39 -43
  21. package/src/transpiler/output/codegen/analysis/StringLengthCounter.ts +52 -55
  22. package/src/transpiler/output/codegen/analysis/__tests__/MemberChainAnalyzer.test.ts +122 -62
  23. package/src/transpiler/output/codegen/analysis/__tests__/StringLengthCounter.test.ts +101 -144
  24. package/src/transpiler/output/codegen/assignment/AssignmentClassifier.ts +143 -126
  25. package/src/transpiler/output/codegen/assignment/__tests__/AssignmentClassifier.test.ts +287 -320
  26. package/src/transpiler/output/codegen/generators/GeneratorRegistry.ts +12 -0
  27. package/src/transpiler/output/codegen/generators/__tests__/GeneratorRegistry.test.ts +28 -1
  28. package/src/transpiler/output/codegen/generators/declarationGenerators/ArrayDimensionUtils.ts +67 -0
  29. package/src/transpiler/output/codegen/generators/declarationGenerators/ScopeGenerator.ts +121 -51
  30. package/src/transpiler/output/codegen/generators/declarationGenerators/StructGenerator.ts +100 -23
  31. package/src/transpiler/output/codegen/generators/declarationGenerators/__tests__/ArrayDimensionUtils.test.ts +125 -0
  32. package/src/transpiler/output/codegen/generators/declarationGenerators/__tests__/ScopeGenerator.test.ts +157 -4
  33. package/src/transpiler/output/codegen/generators/support/HelperGenerator.ts +23 -22
  34. package/src/transpiler/output/codegen/helpers/ArrayInitHelper.ts +54 -61
  35. package/src/transpiler/output/codegen/helpers/AssignmentExpectedTypeResolver.ts +21 -30
  36. package/src/transpiler/output/codegen/helpers/AssignmentValidator.ts +56 -53
  37. package/src/transpiler/output/codegen/helpers/CppModeHelper.ts +22 -30
  38. package/src/transpiler/output/codegen/helpers/EnumAssignmentValidator.ts +108 -50
  39. package/src/transpiler/output/codegen/helpers/FloatBitHelper.ts +16 -31
  40. package/src/transpiler/output/codegen/helpers/StringDeclHelper.ts +103 -96
  41. package/src/transpiler/output/codegen/helpers/TypeGenerationHelper.ts +9 -0
  42. package/src/transpiler/output/codegen/helpers/__tests__/ArrayInitHelper.test.ts +58 -103
  43. package/src/transpiler/output/codegen/helpers/__tests__/AssignmentExpectedTypeResolver.test.ts +97 -40
  44. package/src/transpiler/output/codegen/helpers/__tests__/AssignmentValidator.test.ts +223 -128
  45. package/src/transpiler/output/codegen/helpers/__tests__/CppModeHelper.test.ts +68 -41
  46. package/src/transpiler/output/codegen/helpers/__tests__/EnumAssignmentValidator.test.ts +198 -47
  47. package/src/transpiler/output/codegen/helpers/__tests__/FloatBitHelper.test.ts +39 -37
  48. package/src/transpiler/output/codegen/helpers/__tests__/StringDeclHelper.test.ts +191 -453
  49. package/src/transpiler/output/codegen/resolution/EnumTypeResolver.ts +229 -0
  50. package/src/transpiler/output/codegen/resolution/ScopeResolver.ts +60 -0
  51. package/src/transpiler/output/codegen/resolution/SizeofResolver.ts +177 -0
  52. package/src/transpiler/output/codegen/resolution/__tests__/EnumTypeResolver.test.ts +336 -0
  53. package/src/transpiler/output/codegen/resolution/__tests__/SizeofResolver.test.ts +201 -0
  54. package/src/transpiler/output/codegen/types/ITypeResolverDeps.ts +0 -23
  55. 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
- const typeName = ctx.scopedType()!.IDENTIFIER().getText();
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
- const stringCtx = ctx.stringType()!;
58
- const intLiteral = stringCtx.INTEGER_LITERAL();
59
- if (intLiteral) {
60
- return `string<${intLiteral.getText()}>`;
61
- }
62
- return "string";
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