c-next 0.1.70 → 0.1.72

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 (205) 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 +180 -63
  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 +729 -265
  13. package/src/transpiler/logic/symbols/SymbolUtils.ts +2 -2
  14. package/src/transpiler/logic/symbols/__tests__/SymbolTable.test.ts +415 -751
  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/IPipelineInput.ts +0 -3
  112. package/src/transpiler/types/ISerializedSymbol.ts +11 -0
  113. package/src/transpiler/types/TPrimitiveKind.ts +20 -0
  114. package/src/transpiler/types/TType.ts +103 -0
  115. package/src/transpiler/types/TVisibility.ts +6 -0
  116. package/src/transpiler/types/symbol-kinds/TSymbolKind.ts +10 -0
  117. package/src/transpiler/types/symbol-kinds/TSymbolKindC.ts +12 -0
  118. package/src/transpiler/types/symbol-kinds/TSymbolKindCNext.ts +16 -0
  119. package/src/transpiler/types/symbol-kinds/TSymbolKindCpp.ts +14 -0
  120. package/src/transpiler/types/symbols/IBaseSymbol.ts +31 -0
  121. package/src/transpiler/{logic/symbols/types → types/symbols}/IBitmapFieldInfo.ts +2 -2
  122. package/src/transpiler/types/symbols/IBitmapSymbol.ts +21 -0
  123. package/src/transpiler/{logic/symbols/types → types/symbols}/IEnumSymbol.ts +5 -6
  124. package/src/transpiler/types/symbols/IFieldInfo.ts +26 -0
  125. package/src/transpiler/types/symbols/IFunctionSymbol.ts +30 -0
  126. package/src/transpiler/types/symbols/IParameterInfo.ts +26 -0
  127. package/src/transpiler/{logic/symbols/types → types/symbols}/IRegisterMemberInfo.ts +4 -4
  128. package/src/transpiler/types/symbols/IRegisterSymbol.ts +18 -0
  129. package/src/transpiler/types/symbols/IScopeSymbol.ts +32 -0
  130. package/src/transpiler/{logic/symbols/types → types/symbols}/IStructFieldInfo.ts +2 -1
  131. package/src/transpiler/types/symbols/IStructSymbol.ts +15 -0
  132. package/src/transpiler/types/symbols/IVariableSymbol.ts +30 -0
  133. package/src/transpiler/types/symbols/SymbolGuards.ts +43 -0
  134. package/src/transpiler/types/symbols/TAnySymbol.ts +22 -0
  135. package/src/transpiler/types/symbols/TSymbol.ts +32 -0
  136. package/src/transpiler/types/symbols/__tests__/IBaseSymbol.test.ts +56 -0
  137. package/src/transpiler/types/symbols/__tests__/SymbolGuards.test.ts +57 -0
  138. package/src/transpiler/types/symbols/c/ICBaseSymbol.ts +28 -0
  139. package/src/transpiler/types/symbols/c/ICEnumMemberSymbol.ts +17 -0
  140. package/src/transpiler/types/symbols/c/ICEnumSymbol.ts +17 -0
  141. package/src/transpiler/types/symbols/c/ICFieldInfo.ts +16 -0
  142. package/src/transpiler/types/symbols/c/ICFunctionSymbol.ts +21 -0
  143. package/src/transpiler/types/symbols/c/ICParameterInfo.ts +19 -0
  144. package/src/transpiler/types/symbols/c/ICStructSymbol.ts +21 -0
  145. package/src/transpiler/types/symbols/c/ICTypedefSymbol.ts +14 -0
  146. package/src/transpiler/types/symbols/c/ICVariableSymbol.ts +26 -0
  147. package/src/transpiler/types/symbols/c/TCSymbol.ts +26 -0
  148. package/src/transpiler/types/symbols/cpp/ICppBaseSymbol.ts +31 -0
  149. package/src/transpiler/types/symbols/cpp/ICppClassSymbol.ts +15 -0
  150. package/src/transpiler/types/symbols/cpp/ICppEnumMemberSymbol.ts +14 -0
  151. package/src/transpiler/types/symbols/cpp/ICppEnumSymbol.ts +14 -0
  152. package/src/transpiler/types/symbols/cpp/ICppFieldInfo.ts +16 -0
  153. package/src/transpiler/types/symbols/cpp/ICppFunctionSymbol.ts +21 -0
  154. package/src/transpiler/types/symbols/cpp/ICppNamespaceSymbol.ts +11 -0
  155. package/src/transpiler/types/symbols/cpp/ICppParameterInfo.ts +19 -0
  156. package/src/transpiler/types/symbols/cpp/ICppStructSymbol.ts +16 -0
  157. package/src/transpiler/types/symbols/cpp/ICppTypeAliasSymbol.ts +14 -0
  158. package/src/transpiler/types/symbols/cpp/ICppVariableSymbol.ts +23 -0
  159. package/src/transpiler/types/symbols/cpp/TCppSymbol.ts +30 -0
  160. package/src/utils/CppNamespaceUtils.ts +3 -4
  161. package/src/utils/FunctionUtils.ts +92 -0
  162. package/src/utils/ParameterUtils.ts +55 -0
  163. package/src/utils/PrimitiveKindUtils.ts +33 -0
  164. package/src/utils/ScopeUtils.ts +105 -0
  165. package/src/utils/TTypeUtils.ts +159 -0
  166. package/src/utils/TypeResolver.ts +132 -0
  167. package/src/utils/__tests__/CppNamespaceUtils.test.ts +92 -99
  168. package/src/utils/__tests__/FunctionUtils.test.ts +284 -0
  169. package/src/utils/__tests__/ParameterUtils.test.ts +174 -0
  170. package/src/utils/__tests__/PrimitiveKindUtils.test.ts +59 -0
  171. package/src/utils/__tests__/ScopeUtils.test.ts +53 -0
  172. package/src/utils/__tests__/TTypeUtils.test.ts +245 -0
  173. package/src/utils/__tests__/TypeResolver.test.ts +332 -0
  174. package/src/utils/cache/CacheManager.ts +91 -50
  175. package/src/utils/cache/__tests__/CacheManager.test.ts +180 -114
  176. package/src/transpiler/logic/symbols/AutoConstUpdater.ts +0 -93
  177. package/src/transpiler/logic/symbols/CSymbolCollector.ts +0 -648
  178. package/src/transpiler/logic/symbols/CppSymbolCollector.ts +0 -874
  179. package/src/transpiler/logic/symbols/SymbolCollectorContext.ts +0 -68
  180. package/src/transpiler/logic/symbols/__tests__/AutoConstUpdater.test.ts +0 -418
  181. package/src/transpiler/logic/symbols/__tests__/CSymbolCollector.test.ts +0 -685
  182. package/src/transpiler/logic/symbols/__tests__/CppSymbolCollector.test.ts +0 -1146
  183. package/src/transpiler/logic/symbols/__tests__/SymbolCollectorContext.test.ts +0 -290
  184. package/src/transpiler/logic/symbols/__tests__/cTestHelpers.ts +0 -43
  185. package/src/transpiler/logic/symbols/__tests__/cppTestHelpers.ts +0 -40
  186. package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolAdapter.test.ts +0 -595
  187. package/src/transpiler/logic/symbols/cnext/adapters/TSymbolAdapter.ts +0 -345
  188. package/src/transpiler/logic/symbols/types/IBaseSymbol.ts +0 -27
  189. package/src/transpiler/logic/symbols/types/IBitmapSymbol.ts +0 -23
  190. package/src/transpiler/logic/symbols/types/ICollectorContext.ts +0 -19
  191. package/src/transpiler/logic/symbols/types/IConflict.ts +0 -20
  192. package/src/transpiler/logic/symbols/types/IFieldInfo.ts +0 -18
  193. package/src/transpiler/logic/symbols/types/IFunctionSymbol.ts +0 -25
  194. package/src/transpiler/logic/symbols/types/IParameterInfo.ts +0 -24
  195. package/src/transpiler/logic/symbols/types/IRegisterSymbol.ts +0 -20
  196. package/src/transpiler/logic/symbols/types/IScopeSymbol.ts +0 -19
  197. package/src/transpiler/logic/symbols/types/IStructSymbol.ts +0 -16
  198. package/src/transpiler/logic/symbols/types/IVariableSymbol.ts +0 -30
  199. package/src/transpiler/logic/symbols/types/TSymbol.ts +0 -36
  200. package/src/transpiler/logic/symbols/types/__tests__/SymbolGuards.test.ts +0 -244
  201. package/src/transpiler/logic/symbols/types/typeGuards.ts +0 -44
  202. package/src/utils/types/ESymbolKind.ts +0 -19
  203. package/src/utils/types/ISymbol.ts +0 -64
  204. /package/src/transpiler/{types → constants}/BITMAP_BACKING_TYPE.ts +0 -0
  205. /package/src/transpiler/{types → constants}/BITMAP_SIZE.ts +0 -0
@@ -6,9 +6,8 @@
6
6
 
7
7
  import { describe, it, expect } from "vitest";
8
8
  import CppHeaderGenerator from "../CppHeaderGenerator";
9
- import ISymbol from "../../../../utils/types/ISymbol";
10
- import ESymbolKind from "../../../../utils/types/ESymbolKind";
11
- import ESourceLanguage from "../../../../utils/types/ESourceLanguage";
9
+ import IHeaderSymbol from "../types/IHeaderSymbol";
10
+
12
11
  import IParameterSymbol from "../../../../utils/types/IParameterSymbol";
13
12
 
14
13
  // ============================================================================
@@ -20,16 +19,15 @@ function createFunctionSymbol(
20
19
  returnType: string,
21
20
  parameters: IParameterSymbol[] = [],
22
21
  isExported = true,
23
- ): ISymbol {
22
+ ): IHeaderSymbol {
24
23
  return {
25
24
  name,
26
- kind: ESymbolKind.Function,
25
+ kind: "function",
27
26
  type: returnType,
28
27
  parameters,
29
28
  isExported,
30
29
  sourceFile: "test.cnx",
31
30
  sourceLine: 1,
32
- sourceLanguage: ESourceLanguage.CNext,
33
31
  };
34
32
  }
35
33
 
@@ -56,7 +54,7 @@ describe("CppHeaderGenerator", () => {
56
54
  describe("generate", () => {
57
55
  it("generates header with include guard", () => {
58
56
  const generator = new CppHeaderGenerator();
59
- const symbols: ISymbol[] = [];
57
+ const symbols: IHeaderSymbol[] = [];
60
58
 
61
59
  const result = generator.generate(symbols, "test.h");
62
60
 
@@ -67,7 +65,7 @@ describe("CppHeaderGenerator", () => {
67
65
 
68
66
  it("generates header with custom guard prefix", () => {
69
67
  const generator = new CppHeaderGenerator();
70
- const symbols: ISymbol[] = [];
68
+ const symbols: IHeaderSymbol[] = [];
71
69
 
72
70
  const result = generator.generate(symbols, "module.h", {
73
71
  guardPrefix: "MY_PROJECT",
@@ -79,7 +77,7 @@ describe("CppHeaderGenerator", () => {
79
77
 
80
78
  it("generates extern C wrapper for C++ compatibility", () => {
81
79
  const generator = new CppHeaderGenerator();
82
- const symbols: ISymbol[] = [];
80
+ const symbols: IHeaderSymbol[] = [];
83
81
 
84
82
  const result = generator.generate(symbols, "test.h");
85
83
 
@@ -90,7 +88,9 @@ describe("CppHeaderGenerator", () => {
90
88
 
91
89
  it("generates function prototypes", () => {
92
90
  const generator = new CppHeaderGenerator();
93
- const symbols: ISymbol[] = [createFunctionSymbol("doSomething", "void")];
91
+ const symbols: IHeaderSymbol[] = [
92
+ createFunctionSymbol("doSomething", "void"),
93
+ ];
94
94
 
95
95
  const result = generator.generate(symbols, "test.h");
96
96
 
@@ -99,7 +99,7 @@ describe("CppHeaderGenerator", () => {
99
99
 
100
100
  it("filters to exported symbols when exportedOnly is true", () => {
101
101
  const generator = new CppHeaderGenerator();
102
- const symbols: ISymbol[] = [
102
+ const symbols: IHeaderSymbol[] = [
103
103
  createFunctionSymbol("publicFunc", "void", [], true),
104
104
  createFunctionSymbol("privateFunc", "void", [], false),
105
105
  ];
@@ -114,7 +114,7 @@ describe("CppHeaderGenerator", () => {
114
114
 
115
115
  it("includes all symbols when exportedOnly is false", () => {
116
116
  const generator = new CppHeaderGenerator();
117
- const symbols: ISymbol[] = [
117
+ const symbols: IHeaderSymbol[] = [
118
118
  createFunctionSymbol("publicFunc", "void", [], true),
119
119
  createFunctionSymbol("privateFunc", "void", [], false),
120
120
  ];
@@ -131,7 +131,7 @@ describe("CppHeaderGenerator", () => {
131
131
  describe("function prototype generation", () => {
132
132
  it("generates void function with no parameters", () => {
133
133
  const generator = new CppHeaderGenerator();
134
- const symbols: ISymbol[] = [createFunctionSymbol("init", "void")];
134
+ const symbols: IHeaderSymbol[] = [createFunctionSymbol("init", "void")];
135
135
 
136
136
  const result = generator.generate(symbols, "test.h");
137
137
 
@@ -140,7 +140,9 @@ describe("CppHeaderGenerator", () => {
140
140
 
141
141
  it("generates function with return type", () => {
142
142
  const generator = new CppHeaderGenerator();
143
- const symbols: ISymbol[] = [createFunctionSymbol("getValue", "u32")];
143
+ const symbols: IHeaderSymbol[] = [
144
+ createFunctionSymbol("getValue", "u32"),
145
+ ];
144
146
 
145
147
  const result = generator.generate(symbols, "test.h");
146
148
 
@@ -149,7 +151,7 @@ describe("CppHeaderGenerator", () => {
149
151
 
150
152
  it("forces main to return int", () => {
151
153
  const generator = new CppHeaderGenerator();
152
- const symbols: ISymbol[] = [createFunctionSymbol("main", "u32")];
154
+ const symbols: IHeaderSymbol[] = [createFunctionSymbol("main", "u32")];
153
155
 
154
156
  const result = generator.generate(symbols, "test.h");
155
157
 
@@ -158,7 +160,7 @@ describe("CppHeaderGenerator", () => {
158
160
 
159
161
  it("generates function with single parameter using reference", () => {
160
162
  const generator = new CppHeaderGenerator();
161
- const symbols: ISymbol[] = [
163
+ const symbols: IHeaderSymbol[] = [
162
164
  createFunctionSymbol("process", "void", [createParam("value", "u32")]),
163
165
  ];
164
166
 
@@ -169,7 +171,7 @@ describe("CppHeaderGenerator", () => {
169
171
 
170
172
  it("generates function with const parameter", () => {
171
173
  const generator = new CppHeaderGenerator();
172
- const symbols: ISymbol[] = [
174
+ const symbols: IHeaderSymbol[] = [
173
175
  createFunctionSymbol("process", "void", [
174
176
  createParam("value", "u32", { isConst: true }),
175
177
  ]),
@@ -182,7 +184,7 @@ describe("CppHeaderGenerator", () => {
182
184
 
183
185
  it("generates function with auto-const parameter", () => {
184
186
  const generator = new CppHeaderGenerator();
185
- const symbols: ISymbol[] = [
187
+ const symbols: IHeaderSymbol[] = [
186
188
  createFunctionSymbol("process", "void", [
187
189
  createParam("value", "u32", { isAutoConst: true }),
188
190
  ]),
@@ -195,7 +197,7 @@ describe("CppHeaderGenerator", () => {
195
197
 
196
198
  it("generates function with multiple parameters", () => {
197
199
  const generator = new CppHeaderGenerator();
198
- const symbols: ISymbol[] = [
200
+ const symbols: IHeaderSymbol[] = [
199
201
  createFunctionSymbol("add", "u32", [
200
202
  createParam("a", "u32"),
201
203
  createParam("b", "u32"),
@@ -209,7 +211,7 @@ describe("CppHeaderGenerator", () => {
209
211
 
210
212
  it("uses pass-by-value for parameters in passByValueParams", () => {
211
213
  const generator = new CppHeaderGenerator();
212
- const symbols: ISymbol[] = [
214
+ const symbols: IHeaderSymbol[] = [
213
215
  createFunctionSymbol("process", "void", [createParam("value", "u32")]),
214
216
  ];
215
217
  const passByValueParams = new Map([["process", new Set(["value"])]]);
@@ -227,7 +229,7 @@ describe("CppHeaderGenerator", () => {
227
229
 
228
230
  it("uses pass-by-value for float types (f32)", () => {
229
231
  const generator = new CppHeaderGenerator();
230
- const symbols: ISymbol[] = [
232
+ const symbols: IHeaderSymbol[] = [
231
233
  createFunctionSymbol("setFloat", "void", [createParam("value", "f32")]),
232
234
  ];
233
235
 
@@ -238,7 +240,7 @@ describe("CppHeaderGenerator", () => {
238
240
 
239
241
  it("uses pass-by-value for float types (f64)", () => {
240
242
  const generator = new CppHeaderGenerator();
241
- const symbols: ISymbol[] = [
243
+ const symbols: IHeaderSymbol[] = [
242
244
  createFunctionSymbol("setDouble", "void", [
243
245
  createParam("value", "f64"),
244
246
  ]),
@@ -251,7 +253,7 @@ describe("CppHeaderGenerator", () => {
251
253
 
252
254
  it("uses pass-by-value for enum types", () => {
253
255
  const generator = new CppHeaderGenerator();
254
- const symbols: ISymbol[] = [
256
+ const symbols: IHeaderSymbol[] = [
255
257
  createFunctionSymbol("setState", "void", [
256
258
  createParam("state", "State"),
257
259
  ]),
@@ -272,7 +274,7 @@ describe("CppHeaderGenerator", () => {
272
274
 
273
275
  it("uses pass-by-value for ISR type (function pointer)", () => {
274
276
  const generator = new CppHeaderGenerator();
275
- const symbols: ISymbol[] = [
277
+ const symbols: IHeaderSymbol[] = [
276
278
  createFunctionSymbol("setHandler", "void", [
277
279
  createParam("handler", "ISR"),
278
280
  ]),
@@ -285,7 +287,7 @@ describe("CppHeaderGenerator", () => {
285
287
 
286
288
  it("generates array parameter with pointer syntax", () => {
287
289
  const generator = new CppHeaderGenerator();
288
- const symbols: ISymbol[] = [
290
+ const symbols: IHeaderSymbol[] = [
289
291
  createFunctionSymbol("processArray", "void", [
290
292
  createParam("data", "u8", { isArray: true, arrayDimensions: ["10"] }),
291
293
  ]),
@@ -298,7 +300,7 @@ describe("CppHeaderGenerator", () => {
298
300
 
299
301
  it("generates const array parameter", () => {
300
302
  const generator = new CppHeaderGenerator();
301
- const symbols: ISymbol[] = [
303
+ const symbols: IHeaderSymbol[] = [
302
304
  createFunctionSymbol("readArray", "void", [
303
305
  createParam("data", "u8", {
304
306
  isConst: true,
@@ -315,7 +317,7 @@ describe("CppHeaderGenerator", () => {
315
317
 
316
318
  it("generates string array parameter as char*", () => {
317
319
  const generator = new CppHeaderGenerator();
318
- const symbols: ISymbol[] = [
320
+ const symbols: IHeaderSymbol[] = [
319
321
  createFunctionSymbol("processStrings", "void", [
320
322
  createParam("strings", "string", {
321
323
  isArray: true,
@@ -331,7 +333,7 @@ describe("CppHeaderGenerator", () => {
331
333
 
332
334
  it("generates multi-dimensional array parameter", () => {
333
335
  const generator = new CppHeaderGenerator();
334
- const symbols: ISymbol[] = [
336
+ const symbols: IHeaderSymbol[] = [
335
337
  createFunctionSymbol("processMatrix", "void", [
336
338
  createParam("matrix", "u32", {
337
339
  isArray: true,
@@ -361,7 +363,7 @@ describe("CppHeaderGenerator", () => {
361
363
  ];
362
364
 
363
365
  for (const { cnx, c } of types) {
364
- const symbols: ISymbol[] = [createFunctionSymbol("get", cnx)];
366
+ const symbols: IHeaderSymbol[] = [createFunctionSymbol("get", cnx)];
365
367
  const result = generator.generate(symbols, "test.h");
366
368
  expect(result).toContain(`${c} get(void);`);
367
369
  }
@@ -369,7 +371,9 @@ describe("CppHeaderGenerator", () => {
369
371
 
370
372
  it("maps bool type", () => {
371
373
  const generator = new CppHeaderGenerator();
372
- const symbols: ISymbol[] = [createFunctionSymbol("isReady", "bool")];
374
+ const symbols: IHeaderSymbol[] = [
375
+ createFunctionSymbol("isReady", "bool"),
376
+ ];
373
377
 
374
378
  const result = generator.generate(symbols, "test.h");
375
379
 
@@ -378,7 +382,7 @@ describe("CppHeaderGenerator", () => {
378
382
 
379
383
  it("maps float types", () => {
380
384
  const generator = new CppHeaderGenerator();
381
- const symbols: ISymbol[] = [
385
+ const symbols: IHeaderSymbol[] = [
382
386
  createFunctionSymbol("getF32", "f32"),
383
387
  createFunctionSymbol("getF64", "f64"),
384
388
  ];
@@ -393,7 +397,7 @@ describe("CppHeaderGenerator", () => {
393
397
  describe("empty inputs", () => {
394
398
  it("generates valid header with no functions", () => {
395
399
  const generator = new CppHeaderGenerator();
396
- const symbols: ISymbol[] = [];
400
+ const symbols: IHeaderSymbol[] = [];
397
401
 
398
402
  const result = generator.generate(symbols, "empty.h");
399
403
 
@@ -4,39 +4,39 @@
4
4
 
5
5
  import { describe, it, expect } from "vitest";
6
6
  import ExternalTypeHeaderBuilder from "../ExternalTypeHeaderBuilder";
7
- import ESymbolKind from "../../../../utils/types/ESymbolKind";
8
- import ISymbol from "../../../../utils/types/ISymbol";
9
- import ESourceLanguage from "../../../../utils/types/ESourceLanguage";
7
+
8
+ import TSymbolKind from "../../../types/symbol-kinds/TSymbolKind";
9
+ import TAnySymbol from "../../../types/symbols/TAnySymbol";
10
+ import TCSymbol from "../../../types/symbols/c/TCSymbol";
10
11
 
11
12
  /**
12
- * Create a minimal test symbol
13
+ * Create a minimal test symbol (using C symbol for simplicity)
13
14
  */
14
15
  function createSymbol(
15
16
  name: string,
16
- kind: ESymbolKind,
17
+ kind: TSymbolKind,
17
18
  sourceFile: string,
18
- ): ISymbol {
19
+ ): TCSymbol {
19
20
  return {
20
21
  name,
21
22
  kind,
22
23
  sourceFile,
23
24
  sourceLine: 1,
24
- sourceLanguage: ESourceLanguage.C,
25
25
  isExported: false,
26
- };
26
+ } as TCSymbol;
27
27
  }
28
28
 
29
29
  /**
30
30
  * Mock symbol source for testing
31
31
  */
32
32
  class MockSymbolSource {
33
- private symbolsByFile: Map<string, ISymbol[]> = new Map();
33
+ private symbolsByFile: Map<string, TAnySymbol[]> = new Map();
34
34
 
35
- addSymbols(filePath: string, symbols: ISymbol[]): void {
35
+ addSymbols(filePath: string, symbols: TAnySymbol[]): void {
36
36
  this.symbolsByFile.set(filePath, symbols);
37
37
  }
38
38
 
39
- getSymbolsByFile(filePath: string): ISymbol[] {
39
+ getSymbolsByFile(filePath: string): TAnySymbol[] {
40
40
  return this.symbolsByFile.get(filePath) ?? [];
41
41
  }
42
42
  }
@@ -46,7 +46,7 @@ describe("ExternalTypeHeaderBuilder", () => {
46
46
  it("maps struct types to their include directives", () => {
47
47
  const source = new MockSymbolSource();
48
48
  source.addSymbols("/path/to/types.h", [
49
- createSymbol("MyStruct", ESymbolKind.Struct, "/path/to/types.h"),
49
+ createSymbol("MyStruct", "struct", "/path/to/types.h"),
50
50
  ]);
51
51
 
52
52
  const headerDirectives = new Map([
@@ -61,7 +61,7 @@ describe("ExternalTypeHeaderBuilder", () => {
61
61
  it("maps enum types to their include directives", () => {
62
62
  const source = new MockSymbolSource();
63
63
  source.addSymbols("/path/to/enums.h", [
64
- createSymbol("Status", ESymbolKind.Enum, "/path/to/enums.h"),
64
+ createSymbol("Status", "enum", "/path/to/enums.h"),
65
65
  ]);
66
66
 
67
67
  const headerDirectives = new Map([
@@ -76,7 +76,7 @@ describe("ExternalTypeHeaderBuilder", () => {
76
76
  it("maps typedef types to their include directives", () => {
77
77
  const source = new MockSymbolSource();
78
78
  source.addSymbols("/path/to/types.h", [
79
- createSymbol("size_t", ESymbolKind.Type, "/path/to/types.h"),
79
+ createSymbol("size_t", "type", "/path/to/types.h"),
80
80
  ]);
81
81
 
82
82
  const headerDirectives = new Map([
@@ -91,7 +91,7 @@ describe("ExternalTypeHeaderBuilder", () => {
91
91
  it("maps class types to their include directives", () => {
92
92
  const source = new MockSymbolSource();
93
93
  source.addSymbols("/path/to/serial.hpp", [
94
- createSymbol("Serial", ESymbolKind.Class, "/path/to/serial.hpp"),
94
+ createSymbol("Serial", "class", "/path/to/serial.hpp"),
95
95
  ]);
96
96
 
97
97
  const headerDirectives = new Map([
@@ -106,7 +106,7 @@ describe("ExternalTypeHeaderBuilder", () => {
106
106
  it("ignores function symbols", () => {
107
107
  const source = new MockSymbolSource();
108
108
  source.addSymbols("/path/to/funcs.h", [
109
- createSymbol("doSomething", ESymbolKind.Function, "/path/to/funcs.h"),
109
+ createSymbol("doSomething", "function", "/path/to/funcs.h"),
110
110
  ]);
111
111
 
112
112
  const headerDirectives = new Map([
@@ -121,7 +121,7 @@ describe("ExternalTypeHeaderBuilder", () => {
121
121
  it("ignores variable symbols", () => {
122
122
  const source = new MockSymbolSource();
123
123
  source.addSymbols("/path/to/vars.h", [
124
- createSymbol("globalVar", ESymbolKind.Variable, "/path/to/vars.h"),
124
+ createSymbol("globalVar", "variable", "/path/to/vars.h"),
125
125
  ]);
126
126
 
127
127
  const headerDirectives = new Map([
@@ -136,10 +136,10 @@ describe("ExternalTypeHeaderBuilder", () => {
136
136
  it("first include wins for duplicate type names", () => {
137
137
  const source = new MockSymbolSource();
138
138
  source.addSymbols("/path/to/first.h", [
139
- createSymbol("DuplicateType", ESymbolKind.Struct, "/path/to/first.h"),
139
+ createSymbol("DuplicateType", "struct", "/path/to/first.h"),
140
140
  ]);
141
141
  source.addSymbols("/path/to/second.h", [
142
- createSymbol("DuplicateType", ESymbolKind.Struct, "/path/to/second.h"),
142
+ createSymbol("DuplicateType", "struct", "/path/to/second.h"),
143
143
  ]);
144
144
 
145
145
  const headerDirectives = new Map([
@@ -155,9 +155,9 @@ describe("ExternalTypeHeaderBuilder", () => {
155
155
  it("handles multiple types from same header", () => {
156
156
  const source = new MockSymbolSource();
157
157
  source.addSymbols("/path/to/types.h", [
158
- createSymbol("StructA", ESymbolKind.Struct, "/path/to/types.h"),
159
- createSymbol("EnumB", ESymbolKind.Enum, "/path/to/types.h"),
160
- createSymbol("TypeC", ESymbolKind.Type, "/path/to/types.h"),
158
+ createSymbol("StructA", "struct", "/path/to/types.h"),
159
+ createSymbol("EnumB", "enum", "/path/to/types.h"),
160
+ createSymbol("TypeC", "type", "/path/to/types.h"),
161
161
  ]);
162
162
 
163
163
  const headerDirectives = new Map([
@@ -174,10 +174,10 @@ describe("ExternalTypeHeaderBuilder", () => {
174
174
  it("handles multiple headers", () => {
175
175
  const source = new MockSymbolSource();
176
176
  source.addSymbols("/path/to/a.h", [
177
- createSymbol("TypeA", ESymbolKind.Struct, "/path/to/a.h"),
177
+ createSymbol("TypeA", "struct", "/path/to/a.h"),
178
178
  ]);
179
179
  source.addSymbols("/path/to/b.h", [
180
- createSymbol("TypeB", ESymbolKind.Enum, "/path/to/b.h"),
180
+ createSymbol("TypeB", "enum", "/path/to/b.h"),
181
181
  ]);
182
182
 
183
183
  const headerDirectives = new Map([
@@ -203,8 +203,8 @@ describe("ExternalTypeHeaderBuilder", () => {
203
203
  it("returns empty map when headers have no type symbols", () => {
204
204
  const source = new MockSymbolSource();
205
205
  source.addSymbols("/path/to/funcs.h", [
206
- createSymbol("func1", ESymbolKind.Function, "/path/to/funcs.h"),
207
- createSymbol("func2", ESymbolKind.Function, "/path/to/funcs.h"),
206
+ createSymbol("func1", "function", "/path/to/funcs.h"),
207
+ createSymbol("func2", "function", "/path/to/funcs.h"),
208
208
  ]);
209
209
 
210
210
  const headerDirectives = new Map([