c-next 0.1.69 → 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 (247) 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 +240 -205
  7. package/src/transpiler/logic/analysis/InitializationAnalyzer.ts +1 -2
  8. package/src/transpiler/logic/analysis/PassByValueAnalyzer.ts +742 -0
  9. package/src/transpiler/logic/analysis/__tests__/FunctionCallAnalyzer.test.ts +102 -15
  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/{output/codegen → logic/analysis}/helpers/AssignmentTargetExtractor.ts +1 -1
  13. package/src/transpiler/{output/codegen → logic/analysis}/helpers/ChildStatementCollector.ts +1 -1
  14. package/src/transpiler/{output/codegen → logic/analysis}/helpers/StatementExpressionCollector.ts +1 -1
  15. package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/AssignmentTargetExtractor.test.ts +2 -2
  16. package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/ChildStatementCollector.test.ts +2 -2
  17. package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/StatementExpressionCollector.test.ts +2 -2
  18. package/src/transpiler/logic/symbols/SymbolTable.ts +676 -258
  19. package/src/transpiler/logic/symbols/SymbolUtils.ts +2 -2
  20. package/src/transpiler/logic/symbols/__tests__/SymbolTable.test.ts +290 -782
  21. package/src/transpiler/logic/symbols/c/__tests__/CResolver.integration.test.ts +573 -0
  22. package/src/transpiler/logic/symbols/c/__tests__/testHelpers.ts +20 -0
  23. package/src/transpiler/logic/symbols/c/collectors/EnumCollector.ts +82 -0
  24. package/src/transpiler/logic/symbols/c/collectors/FunctionCollector.ts +106 -0
  25. package/src/transpiler/logic/symbols/c/collectors/StructCollector.ts +173 -0
  26. package/src/transpiler/logic/symbols/c/collectors/TypedefCollector.ts +35 -0
  27. package/src/transpiler/logic/symbols/c/collectors/VariableCollector.ts +80 -0
  28. package/src/transpiler/logic/symbols/c/index.ts +333 -0
  29. package/src/transpiler/logic/symbols/c/utils/DeclaratorUtils.ts +269 -0
  30. package/src/transpiler/logic/symbols/cnext/__tests__/BitmapCollector.test.ts +50 -11
  31. package/src/transpiler/logic/symbols/cnext/__tests__/CNextResolver.integration.test.ts +45 -34
  32. package/src/transpiler/logic/symbols/cnext/__tests__/EnumCollector.test.ts +30 -13
  33. package/src/transpiler/logic/symbols/cnext/__tests__/FunctionCollector.test.ts +279 -64
  34. package/src/transpiler/logic/symbols/cnext/__tests__/RegisterCollector.test.ts +60 -13
  35. package/src/transpiler/logic/symbols/cnext/__tests__/ScopeCollector.test.ts +40 -37
  36. package/src/transpiler/logic/symbols/cnext/__tests__/StructCollector.test.ts +131 -45
  37. package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolInfoAdapter.test.ts +223 -139
  38. package/src/transpiler/logic/symbols/cnext/__tests__/VariableCollector.test.ts +79 -25
  39. package/src/transpiler/logic/symbols/cnext/__tests__/testUtils.ts +53 -0
  40. package/src/transpiler/logic/symbols/cnext/adapters/TSymbolInfoAdapter.ts +83 -43
  41. package/src/transpiler/logic/symbols/cnext/collectors/BitmapCollector.ts +14 -13
  42. package/src/transpiler/logic/symbols/cnext/collectors/EnumCollector.ts +11 -10
  43. package/src/transpiler/logic/symbols/cnext/collectors/FunctionCollector.ts +83 -34
  44. package/src/transpiler/logic/symbols/cnext/collectors/RegisterCollector.ts +22 -18
  45. package/src/transpiler/logic/symbols/cnext/collectors/ScopeCollector.ts +53 -35
  46. package/src/transpiler/logic/symbols/cnext/collectors/StructCollector.ts +30 -23
  47. package/src/transpiler/logic/symbols/cnext/collectors/VariableCollector.ts +18 -19
  48. package/src/transpiler/logic/symbols/cnext/index.ts +36 -14
  49. package/src/transpiler/logic/symbols/cnext/types/IScopeCollectorResult.ts +2 -2
  50. package/src/transpiler/logic/symbols/cnext/utils/SymbolNameUtils.ts +27 -0
  51. package/src/transpiler/logic/symbols/cpp/__tests__/CppResolver.integration.test.ts +270 -0
  52. package/src/transpiler/logic/symbols/cpp/__tests__/testHelpers.ts +20 -0
  53. package/src/transpiler/logic/symbols/cpp/collectors/ClassCollector.ts +317 -0
  54. package/src/transpiler/logic/symbols/cpp/collectors/EnumCollector.ts +71 -0
  55. package/src/transpiler/logic/symbols/cpp/collectors/FunctionCollector.ts +155 -0
  56. package/src/transpiler/logic/symbols/cpp/collectors/NamespaceCollector.ts +65 -0
  57. package/src/transpiler/logic/symbols/cpp/collectors/TypeAliasCollector.ts +46 -0
  58. package/src/transpiler/logic/symbols/cpp/collectors/VariableCollector.ts +54 -0
  59. package/src/transpiler/logic/symbols/cpp/index.ts +366 -0
  60. package/src/transpiler/logic/symbols/cpp/utils/DeclaratorUtils.ts +248 -0
  61. package/src/transpiler/logic/symbols/shared/IExtractedParameter.ts +18 -0
  62. package/src/transpiler/logic/symbols/shared/ParameterExtractorUtils.ts +73 -0
  63. package/src/transpiler/output/codegen/CodeGenerator.ts +310 -2288
  64. package/src/transpiler/output/codegen/TypeRegistrationUtils.ts +4 -6
  65. package/src/transpiler/output/codegen/TypeResolver.ts +2 -2
  66. package/src/transpiler/output/codegen/TypeValidator.ts +5 -5
  67. package/src/transpiler/output/codegen/__tests__/CodeGenerator.test.ts +7 -1
  68. package/src/transpiler/output/codegen/__tests__/TypeRegistrationUtils.test.ts +36 -51
  69. package/src/transpiler/output/codegen/__tests__/TypeResolver.test.ts +20 -17
  70. package/src/transpiler/output/codegen/__tests__/TypeValidator.resolution.test.ts +3 -3
  71. package/src/transpiler/output/codegen/__tests__/TypeValidator.test.ts +1 -1
  72. package/src/transpiler/output/codegen/analysis/MemberChainAnalyzer.ts +1 -1
  73. package/src/transpiler/output/codegen/analysis/StringLengthCounter.ts +1 -1
  74. package/src/transpiler/output/codegen/analysis/__tests__/MemberChainAnalyzer.test.ts +9 -9
  75. package/src/transpiler/output/codegen/analysis/__tests__/StringLengthCounter.test.ts +12 -12
  76. package/src/transpiler/output/codegen/assignment/AssignmentClassifier.ts +13 -12
  77. package/src/transpiler/output/codegen/assignment/__tests__/AssignmentClassifier.test.ts +23 -17
  78. package/src/transpiler/output/codegen/assignment/handlers/ArrayHandlers.ts +2 -2
  79. package/src/transpiler/output/codegen/assignment/handlers/AssignmentHandlerUtils.ts +7 -1
  80. package/src/transpiler/output/codegen/assignment/handlers/BitAccessHandlers.ts +3 -3
  81. package/src/transpiler/output/codegen/assignment/handlers/BitmapHandlers.ts +9 -5
  82. package/src/transpiler/output/codegen/assignment/handlers/RegisterHandlers.ts +2 -1
  83. package/src/transpiler/output/codegen/assignment/handlers/SpecialHandlers.ts +4 -4
  84. package/src/transpiler/output/codegen/assignment/handlers/StringHandlers.ts +5 -5
  85. package/src/transpiler/output/codegen/assignment/handlers/__tests__/ArrayHandlers.test.ts +23 -25
  86. package/src/transpiler/output/codegen/assignment/handlers/__tests__/BitAccessHandlers.test.ts +20 -36
  87. package/src/transpiler/output/codegen/assignment/handlers/__tests__/BitmapHandlers.test.ts +18 -18
  88. package/src/transpiler/output/codegen/assignment/handlers/__tests__/SpecialHandlers.test.ts +42 -32
  89. package/src/transpiler/output/codegen/assignment/handlers/__tests__/handlerTestUtils.ts +5 -4
  90. package/src/transpiler/output/codegen/generators/declarationGenerators/ScopeGenerator.ts +21 -8
  91. package/src/transpiler/output/codegen/generators/declarationGenerators/ScopedRegisterGenerator.ts +3 -2
  92. package/src/transpiler/output/codegen/generators/expressions/CallExprGenerator.ts +14 -6
  93. package/src/transpiler/output/codegen/generators/expressions/CallExprUtils.ts +9 -3
  94. package/src/transpiler/output/codegen/generators/expressions/PostfixExpressionGenerator.ts +19 -16
  95. package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprGenerator.test.ts +24 -8
  96. package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprUtils.test.ts +4 -8
  97. package/src/transpiler/output/codegen/generators/expressions/__tests__/PostfixExpressionGenerator.test.ts +15 -2
  98. package/src/transpiler/output/codegen/helpers/ArgumentGenerator.ts +236 -0
  99. package/src/transpiler/output/codegen/helpers/ArrayInitHelper.ts +2 -1
  100. package/src/transpiler/output/codegen/helpers/AssignmentExpectedTypeResolver.ts +2 -2
  101. package/src/transpiler/output/codegen/helpers/AssignmentValidator.ts +3 -3
  102. package/src/transpiler/output/codegen/helpers/CppConstructorHelper.ts +3 -3
  103. package/src/transpiler/output/codegen/helpers/EnumAssignmentValidator.ts +1 -1
  104. package/src/transpiler/output/codegen/helpers/FunctionContextManager.ts +435 -0
  105. package/src/transpiler/output/codegen/helpers/StringDeclHelper.ts +2 -2
  106. package/src/transpiler/output/codegen/helpers/StringOperationsHelper.ts +203 -0
  107. package/src/transpiler/output/codegen/helpers/SymbolLookupHelper.ts +8 -12
  108. package/src/transpiler/output/codegen/helpers/TypeRegistrationEngine.ts +520 -0
  109. package/src/transpiler/output/codegen/helpers/VariableDeclHelper.ts +735 -0
  110. package/src/transpiler/output/codegen/helpers/VariableDeclarationFormatter.ts +1 -1
  111. package/src/transpiler/output/codegen/helpers/__tests__/ArgumentGenerator.test.ts +521 -0
  112. package/src/transpiler/output/codegen/helpers/__tests__/ArrayInitHelper.test.ts +1 -1
  113. package/src/transpiler/output/codegen/helpers/__tests__/AssignmentExpectedTypeResolver.test.ts +7 -7
  114. package/src/transpiler/output/codegen/helpers/__tests__/AssignmentValidator.test.ts +7 -7
  115. package/src/transpiler/output/codegen/helpers/__tests__/CppConstructorHelper.test.ts +4 -5
  116. package/src/transpiler/output/codegen/helpers/__tests__/EnumAssignmentValidator.test.ts +2 -2
  117. package/src/transpiler/output/codegen/helpers/__tests__/FunctionContextManager.test.ts +983 -0
  118. package/src/transpiler/output/codegen/helpers/__tests__/StringDeclHelper.test.ts +4 -4
  119. package/src/transpiler/output/codegen/helpers/__tests__/StringOperationsHelper.test.ts +269 -0
  120. package/src/transpiler/output/codegen/helpers/__tests__/SymbolLookupHelper.test.ts +31 -32
  121. package/src/transpiler/output/codegen/helpers/__tests__/TypeRegistrationEngine.test.ts +186 -0
  122. package/src/transpiler/output/codegen/helpers/__tests__/VariableDeclHelper.test.ts +460 -0
  123. package/src/transpiler/output/codegen/helpers/types/IArgumentGeneratorCallbacks.ts +32 -0
  124. package/src/transpiler/output/codegen/resolution/EnumTypeResolver.ts +7 -3
  125. package/src/transpiler/output/codegen/resolution/__tests__/EnumTypeResolver.test.ts +5 -5
  126. package/src/transpiler/output/codegen/types/IFunctionContextCallbacks.ts +12 -0
  127. package/src/transpiler/output/codegen/types/IVariableFormatInput.ts +1 -1
  128. package/src/transpiler/output/codegen/utils/QualifiedNameGenerator.ts +114 -0
  129. package/src/transpiler/output/codegen/utils/__tests__/QualifiedNameGenerator.test.ts +183 -0
  130. package/src/transpiler/output/headers/BaseHeaderGenerator.ts +4 -4
  131. package/src/transpiler/output/headers/ExternalTypeHeaderBuilder.ts +7 -7
  132. package/src/transpiler/output/headers/HeaderGenerator.ts +9 -7
  133. package/src/transpiler/output/headers/HeaderGeneratorUtils.ts +19 -20
  134. package/src/transpiler/output/headers/__tests__/BaseHeaderGenerator.test.ts +15 -18
  135. package/src/transpiler/output/headers/__tests__/CHeaderGenerator.test.ts +63 -64
  136. package/src/transpiler/output/headers/__tests__/CppHeaderGenerator.test.ts +36 -32
  137. package/src/transpiler/output/headers/__tests__/ExternalTypeHeaderBuilder.test.ts +26 -26
  138. package/src/transpiler/output/headers/__tests__/HeaderGenerator.test.ts +87 -59
  139. package/src/transpiler/output/headers/__tests__/HeaderGeneratorUtils.test.ts +57 -58
  140. package/src/transpiler/output/headers/adapters/HeaderSymbolAdapter.ts +222 -0
  141. package/src/transpiler/output/headers/adapters/__tests__/HeaderSymbolAdapter.test.ts +538 -0
  142. package/src/transpiler/output/headers/types/IGroupedSymbols.ts +8 -8
  143. package/src/transpiler/output/headers/types/IHeaderSymbol.ts +62 -0
  144. package/src/transpiler/state/CodeGenState.ts +109 -4
  145. package/src/transpiler/state/SymbolRegistry.ts +181 -0
  146. package/src/transpiler/{types → state}/TranspilerState.ts +1 -1
  147. package/src/transpiler/state/__tests__/CodeGenState.test.ts +277 -1
  148. package/src/transpiler/state/__tests__/SymbolRegistry.test.ts +249 -0
  149. package/src/transpiler/{types → state}/__tests__/TranspilerState.test.ts +1 -1
  150. package/src/transpiler/types/ICachedFileEntry.ts +1 -1
  151. package/src/transpiler/types/IConflict.ts +14 -0
  152. package/src/transpiler/types/ISerializedSymbol.ts +11 -0
  153. package/src/transpiler/types/TPrimitiveKind.ts +20 -0
  154. package/src/transpiler/types/TType.ts +103 -0
  155. package/src/transpiler/types/TVisibility.ts +6 -0
  156. package/src/transpiler/types/symbol-kinds/TSymbolKind.ts +10 -0
  157. package/src/transpiler/types/symbol-kinds/TSymbolKindC.ts +12 -0
  158. package/src/transpiler/types/symbol-kinds/TSymbolKindCNext.ts +16 -0
  159. package/src/transpiler/types/symbol-kinds/TSymbolKindCpp.ts +14 -0
  160. package/src/transpiler/types/symbols/IBaseSymbol.ts +31 -0
  161. package/src/transpiler/{logic/symbols/types → types/symbols}/IBitmapFieldInfo.ts +2 -2
  162. package/src/transpiler/types/symbols/IBitmapSymbol.ts +21 -0
  163. package/src/transpiler/{logic/symbols/types → types/symbols}/IEnumSymbol.ts +5 -6
  164. package/src/transpiler/types/symbols/IFieldInfo.ts +26 -0
  165. package/src/transpiler/types/symbols/IFunctionSymbol.ts +30 -0
  166. package/src/transpiler/types/symbols/IParameterInfo.ts +26 -0
  167. package/src/transpiler/{logic/symbols/types → types/symbols}/IRegisterMemberInfo.ts +4 -4
  168. package/src/transpiler/types/symbols/IRegisterSymbol.ts +18 -0
  169. package/src/transpiler/types/symbols/IScopeSymbol.ts +32 -0
  170. package/src/transpiler/{logic/symbols/types → types/symbols}/IStructFieldInfo.ts +2 -1
  171. package/src/transpiler/types/symbols/IStructSymbol.ts +15 -0
  172. package/src/transpiler/types/symbols/IVariableSymbol.ts +30 -0
  173. package/src/transpiler/types/symbols/SymbolGuards.ts +43 -0
  174. package/src/transpiler/types/symbols/TAnySymbol.ts +22 -0
  175. package/src/transpiler/types/symbols/TSymbol.ts +32 -0
  176. package/src/transpiler/types/symbols/__tests__/IBaseSymbol.test.ts +56 -0
  177. package/src/transpiler/types/symbols/__tests__/SymbolGuards.test.ts +57 -0
  178. package/src/transpiler/types/symbols/c/ICBaseSymbol.ts +28 -0
  179. package/src/transpiler/types/symbols/c/ICEnumMemberSymbol.ts +17 -0
  180. package/src/transpiler/types/symbols/c/ICEnumSymbol.ts +17 -0
  181. package/src/transpiler/types/symbols/c/ICFieldInfo.ts +16 -0
  182. package/src/transpiler/types/symbols/c/ICFunctionSymbol.ts +21 -0
  183. package/src/transpiler/types/symbols/c/ICParameterInfo.ts +19 -0
  184. package/src/transpiler/types/symbols/c/ICStructSymbol.ts +21 -0
  185. package/src/transpiler/types/symbols/c/ICTypedefSymbol.ts +14 -0
  186. package/src/transpiler/types/symbols/c/ICVariableSymbol.ts +26 -0
  187. package/src/transpiler/types/symbols/c/TCSymbol.ts +26 -0
  188. package/src/transpiler/types/symbols/cpp/ICppBaseSymbol.ts +31 -0
  189. package/src/transpiler/types/symbols/cpp/ICppClassSymbol.ts +15 -0
  190. package/src/transpiler/types/symbols/cpp/ICppEnumMemberSymbol.ts +14 -0
  191. package/src/transpiler/types/symbols/cpp/ICppEnumSymbol.ts +14 -0
  192. package/src/transpiler/types/symbols/cpp/ICppFieldInfo.ts +16 -0
  193. package/src/transpiler/types/symbols/cpp/ICppFunctionSymbol.ts +21 -0
  194. package/src/transpiler/types/symbols/cpp/ICppNamespaceSymbol.ts +11 -0
  195. package/src/transpiler/types/symbols/cpp/ICppParameterInfo.ts +19 -0
  196. package/src/transpiler/types/symbols/cpp/ICppStructSymbol.ts +16 -0
  197. package/src/transpiler/types/symbols/cpp/ICppTypeAliasSymbol.ts +14 -0
  198. package/src/transpiler/types/symbols/cpp/ICppVariableSymbol.ts +23 -0
  199. package/src/transpiler/types/symbols/cpp/TCppSymbol.ts +30 -0
  200. package/src/utils/CppNamespaceUtils.ts +3 -4
  201. package/src/utils/FunctionUtils.ts +92 -0
  202. package/src/utils/ParameterUtils.ts +55 -0
  203. package/src/utils/PrimitiveKindUtils.ts +33 -0
  204. package/src/utils/ScopeUtils.ts +105 -0
  205. package/src/utils/TTypeUtils.ts +159 -0
  206. package/src/utils/TypeResolver.ts +132 -0
  207. package/src/utils/__tests__/CppNamespaceUtils.test.ts +92 -99
  208. package/src/utils/__tests__/FunctionUtils.test.ts +284 -0
  209. package/src/utils/__tests__/ParameterUtils.test.ts +174 -0
  210. package/src/utils/__tests__/PrimitiveKindUtils.test.ts +59 -0
  211. package/src/utils/__tests__/ScopeUtils.test.ts +53 -0
  212. package/src/utils/__tests__/TTypeUtils.test.ts +245 -0
  213. package/src/utils/__tests__/TypeResolver.test.ts +332 -0
  214. package/src/utils/cache/CacheManager.ts +91 -50
  215. package/src/utils/cache/__tests__/CacheManager.test.ts +180 -114
  216. package/src/transpiler/logic/symbols/AutoConstUpdater.ts +0 -93
  217. package/src/transpiler/logic/symbols/CSymbolCollector.ts +0 -648
  218. package/src/transpiler/logic/symbols/CppSymbolCollector.ts +0 -874
  219. package/src/transpiler/logic/symbols/SymbolCollectorContext.ts +0 -68
  220. package/src/transpiler/logic/symbols/__tests__/AutoConstUpdater.test.ts +0 -418
  221. package/src/transpiler/logic/symbols/__tests__/CSymbolCollector.test.ts +0 -685
  222. package/src/transpiler/logic/symbols/__tests__/CppSymbolCollector.test.ts +0 -1146
  223. package/src/transpiler/logic/symbols/__tests__/SymbolCollectorContext.test.ts +0 -290
  224. package/src/transpiler/logic/symbols/__tests__/cTestHelpers.ts +0 -43
  225. package/src/transpiler/logic/symbols/__tests__/cppTestHelpers.ts +0 -40
  226. package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolAdapter.test.ts +0 -595
  227. package/src/transpiler/logic/symbols/cnext/adapters/TSymbolAdapter.ts +0 -345
  228. package/src/transpiler/logic/symbols/types/IBaseSymbol.ts +0 -27
  229. package/src/transpiler/logic/symbols/types/IBitmapSymbol.ts +0 -23
  230. package/src/transpiler/logic/symbols/types/ICollectorContext.ts +0 -19
  231. package/src/transpiler/logic/symbols/types/IConflict.ts +0 -20
  232. package/src/transpiler/logic/symbols/types/IFieldInfo.ts +0 -18
  233. package/src/transpiler/logic/symbols/types/IFunctionSymbol.ts +0 -25
  234. package/src/transpiler/logic/symbols/types/IParameterInfo.ts +0 -24
  235. package/src/transpiler/logic/symbols/types/IRegisterSymbol.ts +0 -20
  236. package/src/transpiler/logic/symbols/types/IScopeSymbol.ts +0 -19
  237. package/src/transpiler/logic/symbols/types/IStructSymbol.ts +0 -16
  238. package/src/transpiler/logic/symbols/types/IVariableSymbol.ts +0 -30
  239. package/src/transpiler/logic/symbols/types/TSymbol.ts +0 -36
  240. package/src/transpiler/logic/symbols/types/__tests__/SymbolGuards.test.ts +0 -244
  241. package/src/transpiler/logic/symbols/types/typeGuards.ts +0 -44
  242. package/src/utils/types/ESymbolKind.ts +0 -19
  243. package/src/utils/types/ISymbol.ts +0 -64
  244. /package/src/transpiler/{types → constants}/BITMAP_BACKING_TYPE.ts +0 -0
  245. /package/src/transpiler/{types → constants}/BITMAP_SIZE.ts +0 -0
  246. /package/src/transpiler/{output/codegen → logic/analysis}/helpers/TransitiveModificationPropagator.ts +0 -0
  247. /package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/TransitiveModificationPropagator.test.ts +0 -0
@@ -25,13 +25,16 @@ import ExternalTypeHeaderBuilder from "./output/headers/ExternalTypeHeaderBuilde
25
25
  import ICodeGenSymbols from "./types/ICodeGenSymbols";
26
26
  import IncludeExtractor from "./logic/IncludeExtractor";
27
27
  import SymbolTable from "./logic/symbols/SymbolTable";
28
- import ESymbolKind from "../utils/types/ESymbolKind";
29
- import ISymbol from "../utils/types/ISymbol";
28
+ import ISerializedSymbol from "./types/ISerializedSymbol";
29
+ import ESourceLanguage from "../utils/types/ESourceLanguage";
30
30
  import CNextResolver from "./logic/symbols/cnext";
31
- import TSymbolAdapter from "./logic/symbols/cnext/adapters/TSymbolAdapter";
31
+ import SymbolRegistry from "./state/SymbolRegistry";
32
32
  import TSymbolInfoAdapter from "./logic/symbols/cnext/adapters/TSymbolInfoAdapter";
33
- import CSymbolCollector from "./logic/symbols/CSymbolCollector";
34
- import CppSymbolCollector from "./logic/symbols/CppSymbolCollector";
33
+ import CResolver from "./logic/symbols/c";
34
+ import CppResolver from "./logic/symbols/cpp";
35
+ import HeaderSymbolAdapter from "./output/headers/adapters/HeaderSymbolAdapter";
36
+ import IHeaderSymbol from "./output/headers/types/IHeaderSymbol";
37
+ import TSymbol from "./types/symbols/TSymbol";
35
38
  import Preprocessor from "./logic/preprocessor/Preprocessor";
36
39
 
37
40
  import FileDiscovery from "./data/FileDiscovery";
@@ -50,13 +53,12 @@ import IFileResult from "./types/IFileResult";
50
53
  import IPipelineFile from "./types/IPipelineFile";
51
54
  import IPipelineInput from "./types/IPipelineInput";
52
55
  import ITranspileError from "../lib/types/ITranspileError";
53
- import TranspilerState from "./types/TranspilerState";
56
+ import TranspilerState from "./state/TranspilerState";
54
57
  import runAnalyzers from "./logic/analysis/runAnalyzers";
55
58
  import ModificationAnalyzer from "./logic/analysis/ModificationAnalyzer";
56
59
  import CacheManager from "../utils/cache/CacheManager";
57
60
  import MapUtils from "../utils/MapUtils";
58
61
  import detectCppSyntax from "./logic/detectCppSyntax";
59
- import AutoConstUpdater from "./logic/symbols/AutoConstUpdater";
60
62
  import TransitiveEnumCollector from "./logic/symbols/TransitiveEnumCollector";
61
63
 
62
64
  /**
@@ -333,13 +335,11 @@ class Transpiler {
333
335
  }
334
336
 
335
337
  try {
336
- // ADR-055: Use composable collectors via CNextResolver + TSymbolAdapter
338
+ // ADR-055 Phase 7: Use composable collectors via CNextResolver
337
339
  const tSymbols = CNextResolver.resolve(tree, file.path);
338
- const iSymbols = TSymbolAdapter.toISymbols(
339
- tSymbols,
340
- CodeGenState.symbolTable,
341
- );
342
- CodeGenState.symbolTable.addSymbols(iSymbols);
340
+
341
+ // ADR-055 Phase 7: Store TSymbol directly in SymbolTable (no ISymbol conversion)
342
+ CodeGenState.symbolTable.addTSymbols(tSymbols);
343
343
 
344
344
  // Issue #465: Store ICodeGenSymbols for external enum resolution in stage 5
345
345
  const symbolInfo = TSymbolInfoAdapter.convert(tSymbols);
@@ -450,16 +450,13 @@ class Transpiler {
450
450
  this._accumulateFileModifications();
451
451
  }
452
452
 
453
- // Update symbol parameters with auto-const info
454
- const symbols = CodeGenState.symbolTable.getSymbolsByFile(sourcePath);
455
- const unmodifiedParams = this.codeGenerator.getFunctionUnmodifiedParams();
456
- const knownEnums =
457
- this.state.getSymbolInfo(sourcePath)?.knownEnums ?? new Set<string>();
458
- AutoConstUpdater.update(symbols, unmodifiedParams, knownEnums);
453
+ // ADR-055 Phase 7: Get TSymbols for header generation (auto-const applied during conversion)
454
+ const fileSymbols =
455
+ CodeGenState.symbolTable.getTSymbolsByFile(sourcePath);
459
456
 
460
457
  // Generate header content
461
458
  const headerCode = this.generateHeaderContent(
462
- symbols,
459
+ fileSymbols,
463
460
  sourcePath,
464
461
  this.cppDetected,
465
462
  userIncludes,
@@ -621,6 +618,8 @@ class Transpiler {
621
618
  this.state.reset();
622
619
  // Issue #634: Reset symbol table for new run
623
620
  CodeGenState.symbolTable.clear();
621
+ // Reset SymbolRegistry for new run (new IFunctionSymbol type system)
622
+ SymbolRegistry.reset();
624
623
  }
625
624
 
626
625
  /**
@@ -1057,7 +1056,8 @@ class Transpiler {
1057
1056
  }
1058
1057
 
1059
1058
  // Restore symbols, struct fields, needsStructKeyword, and enumBitWidth from cache
1060
- CodeGenState.symbolTable.addSymbols(cached.symbols);
1059
+ // ADR-055 Phase 7: Cache returns ISerializedSymbol[], converted to typed symbols
1060
+ this.restoreCachedSymbols(cached.symbols, file);
1061
1061
  CodeGenState.symbolTable.restoreStructFields(cached.structFields);
1062
1062
  CodeGenState.symbolTable.restoreNeedsStructKeyword(
1063
1063
  cached.needsStructKeyword,
@@ -1070,6 +1070,78 @@ class Transpiler {
1070
1070
  return true;
1071
1071
  }
1072
1072
 
1073
+ /**
1074
+ * Restore cached symbols to the symbol table.
1075
+ * ADR-055 Phase 7: Converts ISerializedSymbol[] from cache to typed symbols.
1076
+ */
1077
+ private restoreCachedSymbols(
1078
+ symbols: ISerializedSymbol[],
1079
+ _file: IDiscoveredFile,
1080
+ ): void {
1081
+ for (const symbol of symbols) {
1082
+ // Determine which storage to use based on source language
1083
+ if (symbol.sourceLanguage === ESourceLanguage.CNext) {
1084
+ // C-Next symbols are never cached (they use TSymbol format).
1085
+ // If we see one here, it indicates a cache format issue - skip silently
1086
+ // since C-Next symbols are always re-parsed from source anyway.
1087
+ continue;
1088
+ } else if (symbol.sourceLanguage === ESourceLanguage.C) {
1089
+ // Convert ISymbol to TCSymbol (simplified conversion)
1090
+ CodeGenState.symbolTable.addCSymbol({
1091
+ kind: symbol.kind as
1092
+ | "struct"
1093
+ | "enum"
1094
+ | "function"
1095
+ | "variable"
1096
+ | "enum_member"
1097
+ | "typedef",
1098
+ name: symbol.name,
1099
+ sourceFile: symbol.sourceFile,
1100
+ sourceLine: symbol.sourceLine,
1101
+ sourceLanguage: ESourceLanguage.C,
1102
+ type: symbol.type,
1103
+ isExported: symbol.isExported ?? true,
1104
+ isDeclaration: symbol.isDeclaration,
1105
+ parameters: symbol.parameters?.map((p) => ({
1106
+ name: p.name,
1107
+ type: p.type,
1108
+ isArray: p.isArray,
1109
+ })),
1110
+ arrayDimensions: symbol.arrayDimensions?.map(String),
1111
+ members: undefined,
1112
+ isUnion: false,
1113
+ } as import("./types/symbols/c/TCSymbol").default);
1114
+ } else if (symbol.sourceLanguage === ESourceLanguage.Cpp) {
1115
+ // Convert ISymbol to TCppSymbol (simplified conversion)
1116
+ CodeGenState.symbolTable.addCppSymbol({
1117
+ kind: symbol.kind as
1118
+ | "class"
1119
+ | "struct"
1120
+ | "namespace"
1121
+ | "enum"
1122
+ | "function"
1123
+ | "variable"
1124
+ | "enum_member"
1125
+ | "type_alias",
1126
+ name: symbol.name,
1127
+ sourceFile: symbol.sourceFile,
1128
+ sourceLine: symbol.sourceLine,
1129
+ sourceLanguage: ESourceLanguage.Cpp,
1130
+ type: symbol.type,
1131
+ isExported: symbol.isExported ?? true,
1132
+ isDeclaration: symbol.isDeclaration,
1133
+ parent: symbol.parent,
1134
+ parameters: symbol.parameters?.map((p) => ({
1135
+ name: p.name,
1136
+ type: p.type,
1137
+ isArray: p.isArray,
1138
+ })),
1139
+ arrayDimensions: symbol.arrayDimensions?.map(String),
1140
+ } as import("./types/symbols/cpp/TCppSymbol").default);
1141
+ }
1142
+ }
1143
+ }
1144
+
1073
1145
  /**
1074
1146
  * Detect C++ mode based on file type and content.
1075
1147
  * SonarCloud S3776: Extracted from doCollectHeaderSymbols().
@@ -1130,33 +1202,36 @@ class Transpiler {
1130
1202
 
1131
1203
  /**
1132
1204
  * Issue #208: Parse a pure C header (no C++ syntax detected)
1205
+ * Uses CResolver for symbol collection
1206
+ * ADR-055 Phase 7: Direct TCSymbol storage (no adapter conversion)
1133
1207
  */
1134
1208
  private parsePureCHeader(content: string, filePath: string): void {
1135
1209
  const { tree } = HeaderParser.parseC(content);
1136
1210
  if (tree) {
1137
- const collector = new CSymbolCollector(
1211
+ const result = CResolver.resolve(
1212
+ tree,
1138
1213
  filePath,
1139
1214
  CodeGenState.symbolTable,
1140
1215
  );
1141
- const symbols = collector.collect(tree);
1142
- if (symbols.length > 0) {
1143
- CodeGenState.symbolTable.addSymbols(symbols);
1144
- }
1216
+ // ADR-055 Phase 7: Store TCSymbol directly
1217
+ CodeGenState.symbolTable.addCSymbols(result.symbols);
1145
1218
  }
1146
1219
  }
1147
1220
 
1148
1221
  /**
1149
- * Parse a C++ header
1222
+ * Parse a C++ header using CppResolver
1223
+ * ADR-055 Phase 7: Direct TCppSymbol storage (no adapter conversion)
1150
1224
  */
1151
1225
  private parseCppHeader(content: string, filePath: string): void {
1152
1226
  const { tree } = HeaderParser.parseCpp(content);
1153
1227
  if (tree) {
1154
- const collector = new CppSymbolCollector(
1228
+ const result = CppResolver.resolve(
1229
+ tree,
1155
1230
  filePath,
1156
1231
  CodeGenState.symbolTable,
1157
1232
  );
1158
- const symbols = collector.collect(tree);
1159
- CodeGenState.symbolTable.addSymbols(symbols);
1233
+ // ADR-055 Phase 7: Store TCppSymbol directly
1234
+ CodeGenState.symbolTable.addCppSymbols(result.symbols);
1160
1235
  }
1161
1236
  }
1162
1237
 
@@ -1166,10 +1241,11 @@ class Transpiler {
1166
1241
 
1167
1242
  /**
1168
1243
  * Stage 6: Generate header file for a C-Next file
1244
+ * ADR-055 Phase 7: Uses TSymbol directly, converts to IHeaderSymbol for generation.
1169
1245
  */
1170
1246
  private generateHeader(file: IDiscoveredFile): string | null {
1171
- const symbols = CodeGenState.symbolTable.getSymbolsByFile(file.path);
1172
- const exportedSymbols = symbols.filter((s) => s.isExported);
1247
+ const tSymbols = CodeGenState.symbolTable.getTSymbolsByFile(file.path);
1248
+ const exportedSymbols = tSymbols.filter((s) => s.isExported);
1173
1249
 
1174
1250
  if (exportedSymbols.length === 0) {
1175
1251
  return null;
@@ -1207,8 +1283,12 @@ class Transpiler {
1207
1283
  ? { ...typeInput, symbolTable: CodeGenState.symbolTable }
1208
1284
  : undefined;
1209
1285
 
1286
+ // ADR-055 Phase 7: Convert TSymbol to IHeaderSymbol
1287
+ // Note: In multi-file run() path, auto-const is already applied during transpilation
1288
+ const headerSymbols = HeaderSymbolAdapter.fromTSymbols(exportedSymbols);
1289
+
1210
1290
  const headerContent = this.headerGenerator.generate(
1211
- exportedSymbols,
1291
+ headerSymbols,
1212
1292
  headerName,
1213
1293
  {
1214
1294
  exportedOnly: true,
@@ -1270,50 +1350,35 @@ class Transpiler {
1270
1350
  /**
1271
1351
  * Generate header content for exported symbols.
1272
1352
  * Issue #591: Extracted from transpileSource() for reduced complexity.
1353
+ * ADR-055 Phase 7: Works with TSymbol[], converts to IHeaderSymbol for generation.
1273
1354
  */
1274
1355
  private generateHeaderContent(
1275
- symbols: ISymbol[],
1356
+ tSymbols: TSymbol[],
1276
1357
  sourcePath: string,
1277
1358
  cppMode: boolean,
1278
1359
  userIncludes: string[],
1279
1360
  passByValueParams: Map<string, Set<string>>,
1280
1361
  symbolInfo: ICodeGenSymbols,
1281
1362
  ): string | undefined {
1282
- const exportedSymbols = symbols.filter(
1283
- (s: { isExported?: boolean }) => s.isExported,
1284
- );
1363
+ const exportedSymbols = tSymbols.filter((s) => s.isExported);
1285
1364
 
1286
1365
  if (exportedSymbols.length === 0) {
1287
1366
  return undefined;
1288
1367
  }
1289
1368
 
1369
+ // Convert to IHeaderSymbol with auto-const info
1370
+ const unmodifiedParams = this.codeGenerator.getFunctionUnmodifiedParams();
1371
+ const headerSymbols = this.convertToHeaderSymbols(
1372
+ exportedSymbols,
1373
+ unmodifiedParams,
1374
+ symbolInfo.knownEnums,
1375
+ );
1376
+
1290
1377
  const headerName = basename(sourcePath).replace(/\.cnx$|\.cnext$/, ".h");
1291
1378
 
1292
1379
  // Get type input from CodeGenState (for struct/enum definitions)
1293
1380
  const typeInput = CodeGenState.symbols;
1294
1381
 
1295
- // Update auto-const info on symbol parameters
1296
- const unmodifiedParams = this.codeGenerator.getFunctionUnmodifiedParams();
1297
- for (const symbol of symbols) {
1298
- if (symbol.kind !== ESymbolKind.Function || !symbol.parameters) {
1299
- continue;
1300
- }
1301
- const unmodified = unmodifiedParams.get(symbol.name);
1302
- if (!unmodified) continue;
1303
-
1304
- for (const param of symbol.parameters) {
1305
- const isPointerParam =
1306
- !param.isConst &&
1307
- !param.isArray &&
1308
- param.type !== "f32" &&
1309
- param.type !== "f64" &&
1310
- param.type !== "ISR";
1311
- if (isPointerParam && unmodified.has(param.name)) {
1312
- param.isAutoConst = true;
1313
- }
1314
- }
1315
- }
1316
-
1317
1382
  // Issue #497: Build mapping from external types to their C header includes
1318
1383
  const externalTypeHeaders = ExternalTypeHeaderBuilder.build(
1319
1384
  this.state.getAllHeaderDirectives(),
@@ -1327,7 +1392,7 @@ class Transpiler {
1327
1392
 
1328
1393
  // Issue #478: Pass all known enums for cross-file type handling
1329
1394
  return this.headerGenerator.generate(
1330
- exportedSymbols,
1395
+ headerSymbols,
1331
1396
  headerName,
1332
1397
  {
1333
1398
  exportedOnly: true,
@@ -1341,6 +1406,54 @@ class Transpiler {
1341
1406
  );
1342
1407
  }
1343
1408
 
1409
+ /**
1410
+ * Convert TSymbols to IHeaderSymbols with auto-const information applied.
1411
+ * ADR-055 Phase 7: Replaces mutation-based auto-const updating.
1412
+ */
1413
+ private convertToHeaderSymbols(
1414
+ symbols: TSymbol[],
1415
+ unmodifiedParams: ReadonlyMap<string, ReadonlySet<string>>,
1416
+ knownEnums: ReadonlySet<string>,
1417
+ ): IHeaderSymbol[] {
1418
+ return symbols.map((symbol) => {
1419
+ const headerSymbol = HeaderSymbolAdapter.fromTSymbol(symbol);
1420
+
1421
+ // Apply auto-const to function parameters
1422
+ if (
1423
+ symbol.kind === "function" &&
1424
+ headerSymbol.parameters &&
1425
+ headerSymbol.parameters.length > 0
1426
+ ) {
1427
+ const unmodified = unmodifiedParams.get(headerSymbol.name);
1428
+ if (unmodified) {
1429
+ // Create a mutable copy of parameters with auto-const applied
1430
+ const updatedParams = headerSymbol.parameters.map((param) => {
1431
+ const isPointerParam =
1432
+ !param.isConst &&
1433
+ !param.isArray &&
1434
+ param.type !== "f32" &&
1435
+ param.type !== "f64" &&
1436
+ param.type !== "ISR" &&
1437
+ !knownEnums.has(param.type ?? "");
1438
+ const isArrayParam = param.isArray && !param.isConst;
1439
+
1440
+ if (
1441
+ (isPointerParam || isArrayParam) &&
1442
+ unmodified.has(param.name)
1443
+ ) {
1444
+ return { ...param, isAutoConst: true };
1445
+ }
1446
+ return param;
1447
+ });
1448
+
1449
+ return { ...headerSymbol, parameters: updatedParams };
1450
+ }
1451
+ }
1452
+
1453
+ return headerSymbol;
1454
+ });
1455
+ }
1456
+
1344
1457
  // ===========================================================================
1345
1458
  // Result Builder Helpers
1346
1459
  // ===========================================================================