c-next 0.1.70 → 0.1.71

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 (204) hide show
  1. package/package.json +1 -1
  2. package/src/lib/__tests__/parseCHeader.mocked.test.ts +69 -54
  3. package/src/lib/parseCHeader.ts +56 -23
  4. package/src/lib/parseWithSymbols.ts +195 -53
  5. package/src/transpiler/Transpiler.ts +173 -60
  6. package/src/transpiler/logic/analysis/FunctionCallAnalyzer.ts +1 -2
  7. package/src/transpiler/logic/analysis/InitializationAnalyzer.ts +1 -2
  8. package/src/transpiler/logic/analysis/PassByValueAnalyzer.ts +51 -2
  9. package/src/transpiler/logic/analysis/__tests__/FunctionCallAnalyzer.test.ts +18 -12
  10. package/src/transpiler/logic/analysis/__tests__/InitializationAnalyzer.test.ts +9 -9
  11. package/src/transpiler/logic/analysis/__tests__/runAnalyzers.test.ts +5 -5
  12. package/src/transpiler/logic/symbols/SymbolTable.ts +676 -258
  13. package/src/transpiler/logic/symbols/SymbolUtils.ts +2 -2
  14. package/src/transpiler/logic/symbols/__tests__/SymbolTable.test.ts +290 -782
  15. package/src/transpiler/logic/symbols/c/__tests__/CResolver.integration.test.ts +573 -0
  16. package/src/transpiler/logic/symbols/c/__tests__/testHelpers.ts +20 -0
  17. package/src/transpiler/logic/symbols/c/collectors/EnumCollector.ts +82 -0
  18. package/src/transpiler/logic/symbols/c/collectors/FunctionCollector.ts +106 -0
  19. package/src/transpiler/logic/symbols/c/collectors/StructCollector.ts +173 -0
  20. package/src/transpiler/logic/symbols/c/collectors/TypedefCollector.ts +35 -0
  21. package/src/transpiler/logic/symbols/c/collectors/VariableCollector.ts +80 -0
  22. package/src/transpiler/logic/symbols/c/index.ts +333 -0
  23. package/src/transpiler/logic/symbols/c/utils/DeclaratorUtils.ts +269 -0
  24. package/src/transpiler/logic/symbols/cnext/__tests__/BitmapCollector.test.ts +50 -11
  25. package/src/transpiler/logic/symbols/cnext/__tests__/CNextResolver.integration.test.ts +45 -34
  26. package/src/transpiler/logic/symbols/cnext/__tests__/EnumCollector.test.ts +30 -13
  27. package/src/transpiler/logic/symbols/cnext/__tests__/FunctionCollector.test.ts +279 -64
  28. package/src/transpiler/logic/symbols/cnext/__tests__/RegisterCollector.test.ts +60 -13
  29. package/src/transpiler/logic/symbols/cnext/__tests__/ScopeCollector.test.ts +40 -37
  30. package/src/transpiler/logic/symbols/cnext/__tests__/StructCollector.test.ts +131 -45
  31. package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolInfoAdapter.test.ts +223 -139
  32. package/src/transpiler/logic/symbols/cnext/__tests__/VariableCollector.test.ts +79 -25
  33. package/src/transpiler/logic/symbols/cnext/__tests__/testUtils.ts +53 -0
  34. package/src/transpiler/logic/symbols/cnext/adapters/TSymbolInfoAdapter.ts +83 -43
  35. package/src/transpiler/logic/symbols/cnext/collectors/BitmapCollector.ts +14 -13
  36. package/src/transpiler/logic/symbols/cnext/collectors/EnumCollector.ts +11 -10
  37. package/src/transpiler/logic/symbols/cnext/collectors/FunctionCollector.ts +83 -34
  38. package/src/transpiler/logic/symbols/cnext/collectors/RegisterCollector.ts +22 -18
  39. package/src/transpiler/logic/symbols/cnext/collectors/ScopeCollector.ts +53 -35
  40. package/src/transpiler/logic/symbols/cnext/collectors/StructCollector.ts +30 -23
  41. package/src/transpiler/logic/symbols/cnext/collectors/VariableCollector.ts +18 -19
  42. package/src/transpiler/logic/symbols/cnext/index.ts +36 -14
  43. package/src/transpiler/logic/symbols/cnext/types/IScopeCollectorResult.ts +2 -2
  44. package/src/transpiler/logic/symbols/cnext/utils/SymbolNameUtils.ts +27 -0
  45. package/src/transpiler/logic/symbols/cpp/__tests__/CppResolver.integration.test.ts +270 -0
  46. package/src/transpiler/logic/symbols/cpp/__tests__/testHelpers.ts +20 -0
  47. package/src/transpiler/logic/symbols/cpp/collectors/ClassCollector.ts +317 -0
  48. package/src/transpiler/logic/symbols/cpp/collectors/EnumCollector.ts +71 -0
  49. package/src/transpiler/logic/symbols/cpp/collectors/FunctionCollector.ts +155 -0
  50. package/src/transpiler/logic/symbols/cpp/collectors/NamespaceCollector.ts +65 -0
  51. package/src/transpiler/logic/symbols/cpp/collectors/TypeAliasCollector.ts +46 -0
  52. package/src/transpiler/logic/symbols/cpp/collectors/VariableCollector.ts +54 -0
  53. package/src/transpiler/logic/symbols/cpp/index.ts +366 -0
  54. package/src/transpiler/logic/symbols/cpp/utils/DeclaratorUtils.ts +248 -0
  55. package/src/transpiler/logic/symbols/shared/IExtractedParameter.ts +18 -0
  56. package/src/transpiler/logic/symbols/shared/ParameterExtractorUtils.ts +73 -0
  57. package/src/transpiler/output/codegen/CodeGenerator.ts +268 -1674
  58. package/src/transpiler/output/codegen/__tests__/CodeGenerator.test.ts +7 -1
  59. package/src/transpiler/output/codegen/assignment/AssignmentClassifier.ts +2 -1
  60. package/src/transpiler/output/codegen/assignment/handlers/AssignmentHandlerUtils.ts +7 -1
  61. package/src/transpiler/output/codegen/assignment/handlers/BitmapHandlers.ts +6 -2
  62. package/src/transpiler/output/codegen/assignment/handlers/RegisterHandlers.ts +2 -1
  63. package/src/transpiler/output/codegen/generators/declarationGenerators/ScopeGenerator.ts +21 -8
  64. package/src/transpiler/output/codegen/generators/declarationGenerators/ScopedRegisterGenerator.ts +3 -2
  65. package/src/transpiler/output/codegen/generators/expressions/CallExprUtils.ts +9 -3
  66. package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprGenerator.test.ts +3 -4
  67. package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprUtils.test.ts +4 -8
  68. package/src/transpiler/output/codegen/helpers/ArgumentGenerator.ts +236 -0
  69. package/src/transpiler/output/codegen/helpers/CppConstructorHelper.ts +3 -3
  70. package/src/transpiler/output/codegen/helpers/FunctionContextManager.ts +435 -0
  71. package/src/transpiler/output/codegen/helpers/StringOperationsHelper.ts +203 -0
  72. package/src/transpiler/output/codegen/helpers/SymbolLookupHelper.ts +8 -12
  73. package/src/transpiler/output/codegen/helpers/TypeRegistrationEngine.ts +520 -0
  74. package/src/transpiler/output/codegen/helpers/VariableDeclHelper.ts +735 -0
  75. package/src/transpiler/output/codegen/helpers/VariableDeclarationFormatter.ts +1 -1
  76. package/src/transpiler/output/codegen/helpers/__tests__/ArgumentGenerator.test.ts +521 -0
  77. package/src/transpiler/output/codegen/helpers/__tests__/CppConstructorHelper.test.ts +4 -5
  78. package/src/transpiler/output/codegen/helpers/__tests__/FunctionContextManager.test.ts +983 -0
  79. package/src/transpiler/output/codegen/helpers/__tests__/StringOperationsHelper.test.ts +269 -0
  80. package/src/transpiler/output/codegen/helpers/__tests__/SymbolLookupHelper.test.ts +31 -32
  81. package/src/transpiler/output/codegen/helpers/__tests__/TypeRegistrationEngine.test.ts +186 -0
  82. package/src/transpiler/output/codegen/helpers/__tests__/VariableDeclHelper.test.ts +460 -0
  83. package/src/transpiler/output/codegen/helpers/types/IArgumentGeneratorCallbacks.ts +32 -0
  84. package/src/transpiler/output/codegen/resolution/EnumTypeResolver.ts +5 -1
  85. package/src/transpiler/output/codegen/types/IFunctionContextCallbacks.ts +12 -0
  86. package/src/transpiler/output/codegen/types/IVariableFormatInput.ts +1 -1
  87. package/src/transpiler/output/codegen/utils/QualifiedNameGenerator.ts +114 -0
  88. package/src/transpiler/output/codegen/utils/__tests__/QualifiedNameGenerator.test.ts +183 -0
  89. package/src/transpiler/output/headers/BaseHeaderGenerator.ts +4 -4
  90. package/src/transpiler/output/headers/ExternalTypeHeaderBuilder.ts +7 -7
  91. package/src/transpiler/output/headers/HeaderGenerator.ts +9 -7
  92. package/src/transpiler/output/headers/HeaderGeneratorUtils.ts +19 -20
  93. package/src/transpiler/output/headers/__tests__/BaseHeaderGenerator.test.ts +15 -18
  94. package/src/transpiler/output/headers/__tests__/CHeaderGenerator.test.ts +63 -64
  95. package/src/transpiler/output/headers/__tests__/CppHeaderGenerator.test.ts +36 -32
  96. package/src/transpiler/output/headers/__tests__/ExternalTypeHeaderBuilder.test.ts +26 -26
  97. package/src/transpiler/output/headers/__tests__/HeaderGenerator.test.ts +87 -59
  98. package/src/transpiler/output/headers/__tests__/HeaderGeneratorUtils.test.ts +57 -58
  99. package/src/transpiler/output/headers/adapters/HeaderSymbolAdapter.ts +222 -0
  100. package/src/transpiler/output/headers/adapters/__tests__/HeaderSymbolAdapter.test.ts +538 -0
  101. package/src/transpiler/output/headers/types/IGroupedSymbols.ts +8 -8
  102. package/src/transpiler/output/headers/types/IHeaderSymbol.ts +62 -0
  103. package/src/transpiler/state/CodeGenState.ts +20 -33
  104. package/src/transpiler/state/SymbolRegistry.ts +181 -0
  105. package/src/transpiler/{types → state}/TranspilerState.ts +1 -1
  106. package/src/transpiler/state/__tests__/CodeGenState.test.ts +67 -59
  107. package/src/transpiler/state/__tests__/SymbolRegistry.test.ts +249 -0
  108. package/src/transpiler/{types → state}/__tests__/TranspilerState.test.ts +1 -1
  109. package/src/transpiler/types/ICachedFileEntry.ts +1 -1
  110. package/src/transpiler/types/IConflict.ts +14 -0
  111. package/src/transpiler/types/ISerializedSymbol.ts +11 -0
  112. package/src/transpiler/types/TPrimitiveKind.ts +20 -0
  113. package/src/transpiler/types/TType.ts +103 -0
  114. package/src/transpiler/types/TVisibility.ts +6 -0
  115. package/src/transpiler/types/symbol-kinds/TSymbolKind.ts +10 -0
  116. package/src/transpiler/types/symbol-kinds/TSymbolKindC.ts +12 -0
  117. package/src/transpiler/types/symbol-kinds/TSymbolKindCNext.ts +16 -0
  118. package/src/transpiler/types/symbol-kinds/TSymbolKindCpp.ts +14 -0
  119. package/src/transpiler/types/symbols/IBaseSymbol.ts +31 -0
  120. package/src/transpiler/{logic/symbols/types → types/symbols}/IBitmapFieldInfo.ts +2 -2
  121. package/src/transpiler/types/symbols/IBitmapSymbol.ts +21 -0
  122. package/src/transpiler/{logic/symbols/types → types/symbols}/IEnumSymbol.ts +5 -6
  123. package/src/transpiler/types/symbols/IFieldInfo.ts +26 -0
  124. package/src/transpiler/types/symbols/IFunctionSymbol.ts +30 -0
  125. package/src/transpiler/types/symbols/IParameterInfo.ts +26 -0
  126. package/src/transpiler/{logic/symbols/types → types/symbols}/IRegisterMemberInfo.ts +4 -4
  127. package/src/transpiler/types/symbols/IRegisterSymbol.ts +18 -0
  128. package/src/transpiler/types/symbols/IScopeSymbol.ts +32 -0
  129. package/src/transpiler/{logic/symbols/types → types/symbols}/IStructFieldInfo.ts +2 -1
  130. package/src/transpiler/types/symbols/IStructSymbol.ts +15 -0
  131. package/src/transpiler/types/symbols/IVariableSymbol.ts +30 -0
  132. package/src/transpiler/types/symbols/SymbolGuards.ts +43 -0
  133. package/src/transpiler/types/symbols/TAnySymbol.ts +22 -0
  134. package/src/transpiler/types/symbols/TSymbol.ts +32 -0
  135. package/src/transpiler/types/symbols/__tests__/IBaseSymbol.test.ts +56 -0
  136. package/src/transpiler/types/symbols/__tests__/SymbolGuards.test.ts +57 -0
  137. package/src/transpiler/types/symbols/c/ICBaseSymbol.ts +28 -0
  138. package/src/transpiler/types/symbols/c/ICEnumMemberSymbol.ts +17 -0
  139. package/src/transpiler/types/symbols/c/ICEnumSymbol.ts +17 -0
  140. package/src/transpiler/types/symbols/c/ICFieldInfo.ts +16 -0
  141. package/src/transpiler/types/symbols/c/ICFunctionSymbol.ts +21 -0
  142. package/src/transpiler/types/symbols/c/ICParameterInfo.ts +19 -0
  143. package/src/transpiler/types/symbols/c/ICStructSymbol.ts +21 -0
  144. package/src/transpiler/types/symbols/c/ICTypedefSymbol.ts +14 -0
  145. package/src/transpiler/types/symbols/c/ICVariableSymbol.ts +26 -0
  146. package/src/transpiler/types/symbols/c/TCSymbol.ts +26 -0
  147. package/src/transpiler/types/symbols/cpp/ICppBaseSymbol.ts +31 -0
  148. package/src/transpiler/types/symbols/cpp/ICppClassSymbol.ts +15 -0
  149. package/src/transpiler/types/symbols/cpp/ICppEnumMemberSymbol.ts +14 -0
  150. package/src/transpiler/types/symbols/cpp/ICppEnumSymbol.ts +14 -0
  151. package/src/transpiler/types/symbols/cpp/ICppFieldInfo.ts +16 -0
  152. package/src/transpiler/types/symbols/cpp/ICppFunctionSymbol.ts +21 -0
  153. package/src/transpiler/types/symbols/cpp/ICppNamespaceSymbol.ts +11 -0
  154. package/src/transpiler/types/symbols/cpp/ICppParameterInfo.ts +19 -0
  155. package/src/transpiler/types/symbols/cpp/ICppStructSymbol.ts +16 -0
  156. package/src/transpiler/types/symbols/cpp/ICppTypeAliasSymbol.ts +14 -0
  157. package/src/transpiler/types/symbols/cpp/ICppVariableSymbol.ts +23 -0
  158. package/src/transpiler/types/symbols/cpp/TCppSymbol.ts +30 -0
  159. package/src/utils/CppNamespaceUtils.ts +3 -4
  160. package/src/utils/FunctionUtils.ts +92 -0
  161. package/src/utils/ParameterUtils.ts +55 -0
  162. package/src/utils/PrimitiveKindUtils.ts +33 -0
  163. package/src/utils/ScopeUtils.ts +105 -0
  164. package/src/utils/TTypeUtils.ts +159 -0
  165. package/src/utils/TypeResolver.ts +132 -0
  166. package/src/utils/__tests__/CppNamespaceUtils.test.ts +92 -99
  167. package/src/utils/__tests__/FunctionUtils.test.ts +284 -0
  168. package/src/utils/__tests__/ParameterUtils.test.ts +174 -0
  169. package/src/utils/__tests__/PrimitiveKindUtils.test.ts +59 -0
  170. package/src/utils/__tests__/ScopeUtils.test.ts +53 -0
  171. package/src/utils/__tests__/TTypeUtils.test.ts +245 -0
  172. package/src/utils/__tests__/TypeResolver.test.ts +332 -0
  173. package/src/utils/cache/CacheManager.ts +91 -50
  174. package/src/utils/cache/__tests__/CacheManager.test.ts +180 -114
  175. package/src/transpiler/logic/symbols/AutoConstUpdater.ts +0 -93
  176. package/src/transpiler/logic/symbols/CSymbolCollector.ts +0 -648
  177. package/src/transpiler/logic/symbols/CppSymbolCollector.ts +0 -874
  178. package/src/transpiler/logic/symbols/SymbolCollectorContext.ts +0 -68
  179. package/src/transpiler/logic/symbols/__tests__/AutoConstUpdater.test.ts +0 -418
  180. package/src/transpiler/logic/symbols/__tests__/CSymbolCollector.test.ts +0 -685
  181. package/src/transpiler/logic/symbols/__tests__/CppSymbolCollector.test.ts +0 -1146
  182. package/src/transpiler/logic/symbols/__tests__/SymbolCollectorContext.test.ts +0 -290
  183. package/src/transpiler/logic/symbols/__tests__/cTestHelpers.ts +0 -43
  184. package/src/transpiler/logic/symbols/__tests__/cppTestHelpers.ts +0 -40
  185. package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolAdapter.test.ts +0 -595
  186. package/src/transpiler/logic/symbols/cnext/adapters/TSymbolAdapter.ts +0 -345
  187. package/src/transpiler/logic/symbols/types/IBaseSymbol.ts +0 -27
  188. package/src/transpiler/logic/symbols/types/IBitmapSymbol.ts +0 -23
  189. package/src/transpiler/logic/symbols/types/ICollectorContext.ts +0 -19
  190. package/src/transpiler/logic/symbols/types/IConflict.ts +0 -20
  191. package/src/transpiler/logic/symbols/types/IFieldInfo.ts +0 -18
  192. package/src/transpiler/logic/symbols/types/IFunctionSymbol.ts +0 -25
  193. package/src/transpiler/logic/symbols/types/IParameterInfo.ts +0 -24
  194. package/src/transpiler/logic/symbols/types/IRegisterSymbol.ts +0 -20
  195. package/src/transpiler/logic/symbols/types/IScopeSymbol.ts +0 -19
  196. package/src/transpiler/logic/symbols/types/IStructSymbol.ts +0 -16
  197. package/src/transpiler/logic/symbols/types/IVariableSymbol.ts +0 -30
  198. package/src/transpiler/logic/symbols/types/TSymbol.ts +0 -36
  199. package/src/transpiler/logic/symbols/types/__tests__/SymbolGuards.test.ts +0 -244
  200. package/src/transpiler/logic/symbols/types/typeGuards.ts +0 -44
  201. package/src/utils/types/ESymbolKind.ts +0 -19
  202. package/src/utils/types/ISymbol.ts +0 -64
  203. /package/src/transpiler/{types → constants}/BITMAP_BACKING_TYPE.ts +0 -0
  204. /package/src/transpiler/{types → constants}/BITMAP_SIZE.ts +0 -0
@@ -1,93 +0,0 @@
1
- /**
2
- * AutoConstUpdater
3
- * Issue #588: Extracted from Transpiler to logic layer
4
- *
5
- * Updates symbol parameters with auto-const information based on code generation
6
- * analysis. Parameters that are not modified in function bodies can be marked
7
- * as auto-const, enabling correct const qualifier generation in headers.
8
- */
9
-
10
- import ISymbol from "../../../utils/types/ISymbol";
11
- import ESymbolKind from "../../../utils/types/ESymbolKind";
12
-
13
- /**
14
- * Utility class for updating symbol parameters with auto-const information.
15
- *
16
- * In C-Next, struct parameters are passed by pointer by default. If a parameter
17
- * is never modified, it can be marked as `const` in the generated C code.
18
- * This class encapsulates the logic to determine which parameters qualify.
19
- */
20
- class AutoConstUpdater {
21
- /**
22
- * Update symbols with auto-const information.
23
- *
24
- * For each function symbol, checks if its parameters were unmodified during
25
- * code generation and marks them as auto-const if they meet the criteria.
26
- *
27
- * @param symbols - Array of symbols to update (typically from a single file)
28
- * @param unmodifiedParams - Map of function name to set of unmodified param names
29
- * @param knownEnums - Set of known enum type names (these don't get pointer semantics)
30
- */
31
- static update(
32
- symbols: ISymbol[],
33
- unmodifiedParams: ReadonlyMap<string, ReadonlySet<string>>,
34
- knownEnums: ReadonlySet<string>,
35
- ): void {
36
- for (const symbol of symbols) {
37
- if (symbol.kind !== ESymbolKind.Function || !symbol.parameters) {
38
- continue;
39
- }
40
-
41
- const unmodified = unmodifiedParams.get(symbol.name);
42
- if (!unmodified) continue;
43
-
44
- // Update each parameter's isAutoConst
45
- for (const param of symbol.parameters) {
46
- if (
47
- AutoConstUpdater.shouldMarkAutoConst(param, unmodified, knownEnums)
48
- ) {
49
- param.isAutoConst = true;
50
- }
51
- }
52
- }
53
- }
54
-
55
- /**
56
- * Determine if a parameter should be marked as auto-const.
57
- *
58
- * A parameter qualifies for auto-const if:
59
- * 1. It was not modified in the function body
60
- * 2. It would get pointer semantics in generated C (not a primitive/enum)
61
- *
62
- * @param param - The parameter to check
63
- * @param unmodified - Set of unmodified parameter names for this function
64
- * @param knownEnums - Set of known enum type names
65
- * @returns true if the parameter should be marked as auto-const
66
- */
67
- static shouldMarkAutoConst(
68
- param: NonNullable<ISymbol["parameters"]>[number],
69
- unmodified: ReadonlySet<string>,
70
- knownEnums: ReadonlySet<string>,
71
- ): boolean {
72
- // Parameter must be unmodified
73
- if (!unmodified.has(param.name)) {
74
- return false;
75
- }
76
-
77
- // Check if parameter would get pointer semantics
78
- const isPointerParam =
79
- !param.isConst &&
80
- !param.isArray &&
81
- param.type !== "f32" &&
82
- param.type !== "f64" &&
83
- param.type !== "ISR" &&
84
- !knownEnums.has(param.type);
85
-
86
- // Array params also become pointers in C
87
- const isArrayParam = param.isArray && !param.isConst;
88
-
89
- return isPointerParam || isArrayParam;
90
- }
91
- }
92
-
93
- export default AutoConstUpdater;