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
@@ -1,290 +0,0 @@
1
- /**
2
- * Unit tests for SymbolCollectorContext.
3
- * Tests the shared context for C and C++ symbol collectors.
4
- */
5
-
6
- import { describe, expect, it } from "vitest";
7
- import SymbolCollectorContext from "../SymbolCollectorContext";
8
- import SymbolTable from "../SymbolTable";
9
- import ESymbolKind from "../../../../utils/types/ESymbolKind";
10
- import ESourceLanguage from "../../../../utils/types/ESourceLanguage";
11
- import ISymbol from "../../../../utils/types/ISymbol";
12
-
13
- describe("SymbolCollectorContext", () => {
14
- describe("create", () => {
15
- it("creates context with sourceFile and empty collections", () => {
16
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
17
-
18
- expect(ctx.sourceFile).toBe("/path/to/file.h");
19
- expect(ctx.symbols).toEqual([]);
20
- expect(ctx.warnings).toEqual([]);
21
- expect(ctx.symbolTable).toBeNull();
22
- });
23
-
24
- it("creates context with optional symbolTable", () => {
25
- const symbolTable = new SymbolTable();
26
- const ctx = SymbolCollectorContext.create("/path/to/file.h", symbolTable);
27
-
28
- expect(ctx.symbolTable).toBe(symbolTable);
29
- });
30
-
31
- it("creates context with different source file paths", () => {
32
- const ctxC = SymbolCollectorContext.create("/path/to/file.c");
33
- const ctxCpp = SymbolCollectorContext.create("/path/to/file.cpp");
34
- const ctxH = SymbolCollectorContext.create("/path/to/file.h");
35
-
36
- expect(ctxC.sourceFile).toBe("/path/to/file.c");
37
- expect(ctxCpp.sourceFile).toBe("/path/to/file.cpp");
38
- expect(ctxH.sourceFile).toBe("/path/to/file.h");
39
- });
40
-
41
- it("creates independent contexts", () => {
42
- const ctx1 = SymbolCollectorContext.create("/file1.h");
43
- const ctx2 = SymbolCollectorContext.create("/file2.h");
44
-
45
- ctx1.symbols.push(createMockSymbol("sym1"));
46
- ctx2.warnings.push("warning2");
47
-
48
- expect(ctx1.symbols).toHaveLength(1);
49
- expect(ctx2.symbols).toHaveLength(0);
50
- expect(ctx1.warnings).toHaveLength(0);
51
- expect(ctx2.warnings).toHaveLength(1);
52
- });
53
- });
54
-
55
- describe("reset", () => {
56
- it("clears symbols and warnings arrays", () => {
57
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
58
- ctx.symbols.push(createMockSymbol("test"));
59
- ctx.warnings.push("some warning");
60
-
61
- SymbolCollectorContext.reset(ctx);
62
-
63
- expect(ctx.symbols).toEqual([]);
64
- expect(ctx.warnings).toEqual([]);
65
- });
66
-
67
- it("preserves sourceFile after reset", () => {
68
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
69
- ctx.symbols.push(createMockSymbol("test"));
70
-
71
- SymbolCollectorContext.reset(ctx);
72
-
73
- expect(ctx.sourceFile).toBe("/path/to/file.h");
74
- });
75
-
76
- it("preserves symbolTable after reset", () => {
77
- const symbolTable = new SymbolTable();
78
- const ctx = SymbolCollectorContext.create("/path/to/file.h", symbolTable);
79
- ctx.symbols.push(createMockSymbol("test"));
80
-
81
- SymbolCollectorContext.reset(ctx);
82
-
83
- expect(ctx.symbolTable).toBe(symbolTable);
84
- });
85
-
86
- it("clears multiple symbols and warnings", () => {
87
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
88
- ctx.symbols.push(createMockSymbol("func1"));
89
- ctx.symbols.push(createMockSymbol("func2"));
90
- ctx.symbols.push(createMockSymbol("var1"));
91
- ctx.warnings.push("warning1");
92
- ctx.warnings.push("warning2");
93
-
94
- SymbolCollectorContext.reset(ctx);
95
-
96
- expect(ctx.symbols).toEqual([]);
97
- expect(ctx.warnings).toEqual([]);
98
- });
99
-
100
- it("allows reuse after reset", () => {
101
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
102
- ctx.symbols.push(createMockSymbol("original"));
103
- ctx.warnings.push("original warning");
104
-
105
- SymbolCollectorContext.reset(ctx);
106
-
107
- ctx.symbols.push(createMockSymbol("new"));
108
- ctx.warnings.push("new warning");
109
-
110
- expect(ctx.symbols).toHaveLength(1);
111
- expect(ctx.symbols[0].name).toBe("new");
112
- expect(ctx.warnings).toEqual(["new warning"]);
113
- });
114
- });
115
-
116
- describe("getSymbols", () => {
117
- it("returns empty array for new context", () => {
118
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
119
-
120
- expect(SymbolCollectorContext.getSymbols(ctx)).toEqual([]);
121
- });
122
-
123
- it("returns symbols added to context", () => {
124
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
125
- ctx.symbols.push(createMockSymbol("sym1"));
126
- ctx.symbols.push(createMockSymbol("sym2"));
127
-
128
- const symbols = SymbolCollectorContext.getSymbols(ctx);
129
- expect(symbols).toHaveLength(2);
130
- expect(symbols[0].name).toBe("sym1");
131
- expect(symbols[1].name).toBe("sym2");
132
- });
133
- });
134
-
135
- describe("getWarnings", () => {
136
- it("returns empty array for new context", () => {
137
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
138
-
139
- expect(SymbolCollectorContext.getWarnings(ctx)).toEqual([]);
140
- });
141
-
142
- it("returns warnings added to context", () => {
143
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
144
- ctx.warnings.push("warning1");
145
- ctx.warnings.push("warning2");
146
-
147
- const warnings = SymbolCollectorContext.getWarnings(ctx);
148
- expect(warnings).toHaveLength(2);
149
- expect(warnings[0]).toBe("warning1");
150
- expect(warnings[1]).toBe("warning2");
151
- });
152
- });
153
-
154
- describe("addSymbol", () => {
155
- it("adds symbol to context", () => {
156
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
157
- const symbol = createMockSymbol("testFunc");
158
-
159
- SymbolCollectorContext.addSymbol(ctx, symbol);
160
-
161
- expect(ctx.symbols).toHaveLength(1);
162
- expect(ctx.symbols[0].name).toBe("testFunc");
163
- });
164
-
165
- it("adds multiple symbols in order", () => {
166
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
167
-
168
- SymbolCollectorContext.addSymbol(ctx, createMockSymbol("first"));
169
- SymbolCollectorContext.addSymbol(ctx, createMockSymbol("second"));
170
- SymbolCollectorContext.addSymbol(ctx, createMockSymbol("third"));
171
-
172
- expect(ctx.symbols).toHaveLength(3);
173
- expect(ctx.symbols[0].name).toBe("first");
174
- expect(ctx.symbols[1].name).toBe("second");
175
- expect(ctx.symbols[2].name).toBe("third");
176
- });
177
- });
178
-
179
- describe("addWarning", () => {
180
- it("adds warning to context", () => {
181
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
182
-
183
- SymbolCollectorContext.addWarning(ctx, "Test warning message");
184
-
185
- expect(ctx.warnings).toHaveLength(1);
186
- expect(ctx.warnings[0]).toBe("Test warning message");
187
- });
188
-
189
- it("adds multiple warnings in order", () => {
190
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
191
-
192
- SymbolCollectorContext.addWarning(ctx, "first warning");
193
- SymbolCollectorContext.addWarning(ctx, "second warning");
194
-
195
- expect(ctx.warnings).toHaveLength(2);
196
- expect(ctx.warnings[0]).toBe("first warning");
197
- expect(ctx.warnings[1]).toBe("second warning");
198
- });
199
- });
200
-
201
- describe("integration patterns", () => {
202
- it("supports C symbol collection pattern", () => {
203
- const symbolTable = new SymbolTable();
204
- const ctx = SymbolCollectorContext.create("/path/to/file.c", symbolTable);
205
-
206
- // Simulate C collector adding symbols
207
- ctx.symbols.push({
208
- name: "main",
209
- kind: ESymbolKind.Function,
210
- type: "int",
211
- sourceFile: ctx.sourceFile,
212
- sourceLine: 10,
213
- sourceLanguage: ESourceLanguage.C,
214
- isExported: true,
215
- });
216
-
217
- expect(ctx.symbols).toHaveLength(1);
218
- expect(ctx.symbols[0].sourceLanguage).toBe(ESourceLanguage.C);
219
- });
220
-
221
- it("supports C++ symbol collection pattern", () => {
222
- const symbolTable = new SymbolTable();
223
- const ctx = SymbolCollectorContext.create(
224
- "/path/to/file.cpp",
225
- symbolTable,
226
- );
227
-
228
- // Simulate C++ collector adding namespace and class
229
- ctx.symbols.push({
230
- name: "MyNamespace",
231
- kind: ESymbolKind.Namespace,
232
- sourceFile: ctx.sourceFile,
233
- sourceLine: 1,
234
- sourceLanguage: ESourceLanguage.Cpp,
235
- isExported: true,
236
- });
237
-
238
- ctx.symbols.push({
239
- name: "MyNamespace::MyClass",
240
- kind: ESymbolKind.Class,
241
- sourceFile: ctx.sourceFile,
242
- sourceLine: 5,
243
- sourceLanguage: ESourceLanguage.Cpp,
244
- isExported: true,
245
- parent: "MyNamespace",
246
- });
247
-
248
- expect(ctx.symbols).toHaveLength(2);
249
- expect(ctx.symbols[1].parent).toBe("MyNamespace");
250
- });
251
-
252
- it("supports warning collection for reserved field names", () => {
253
- const ctx = SymbolCollectorContext.create("/path/to/file.h");
254
-
255
- // Simulate warning for reserved field name
256
- ctx.warnings.push(
257
- "Warning: C header struct 'MyStruct' has field 'length' which conflicts with C-Next's .length property.",
258
- );
259
-
260
- expect(ctx.warnings).toHaveLength(1);
261
- expect(ctx.warnings[0]).toContain("length");
262
- });
263
-
264
- it("supports symbolTable operations through context", () => {
265
- const symbolTable = new SymbolTable();
266
- const ctx = SymbolCollectorContext.create("/path/to/file.h", symbolTable);
267
-
268
- // Simulate adding struct field through symbolTable
269
- ctx.symbolTable!.addStructField("MyStruct", "x", "int");
270
- ctx.symbolTable!.addStructField("MyStruct", "y", "int");
271
-
272
- const fields = ctx.symbolTable!.getStructFields("MyStruct");
273
- expect(fields).toHaveLength(2);
274
- });
275
- });
276
- });
277
-
278
- /**
279
- * Helper to create mock symbol for testing
280
- */
281
- function createMockSymbol(name: string): ISymbol {
282
- return {
283
- name,
284
- kind: ESymbolKind.Function,
285
- sourceFile: "/path/to/file.h",
286
- sourceLine: 1,
287
- sourceLanguage: ESourceLanguage.C,
288
- isExported: true,
289
- };
290
- }
@@ -1,43 +0,0 @@
1
- /**
2
- * Test helpers for C symbol collector unit tests
3
- * Provides utilities to parse C code strings into parse trees.
4
- */
5
-
6
- import { CharStream, CommonTokenStream } from "antlr4ng";
7
- import { CLexer } from "../../parser/c/grammar/CLexer";
8
- import {
9
- CParser,
10
- CompilationUnitContext,
11
- } from "../../parser/c/grammar/CParser";
12
-
13
- /**
14
- * Parse a C code string into a CompilationUnitContext.
15
- * Throws if there are parse errors.
16
- */
17
- function parseC(code: string): CompilationUnitContext {
18
- const charStream = CharStream.fromString(code);
19
- const lexer = new CLexer(charStream);
20
- const tokenStream = new CommonTokenStream(lexer);
21
- const parser = new CParser(tokenStream);
22
-
23
- const errors: string[] = [];
24
- parser.removeErrorListeners();
25
- parser.addErrorListener({
26
- syntaxError: (_recognizer, _offendingSymbol, line, charPos, msg) => {
27
- errors.push(`${line}:${charPos} ${msg}`);
28
- },
29
- reportAmbiguity: () => {},
30
- reportAttemptingFullContext: () => {},
31
- reportContextSensitivity: () => {},
32
- });
33
-
34
- const tree = parser.compilationUnit();
35
-
36
- if (errors.length > 0) {
37
- throw new Error(`Parse errors:\n${errors.join("\n")}`);
38
- }
39
-
40
- return tree;
41
- }
42
-
43
- export default parseC;
@@ -1,40 +0,0 @@
1
- /**
2
- * Test helpers for C++ symbol collector unit tests
3
- * Provides utilities to parse C++ code strings into parse trees.
4
- */
5
-
6
- import { CharStream, CommonTokenStream } from "antlr4ng";
7
- import { CPP14Lexer } from "../../parser/cpp/grammar/CPP14Lexer";
8
- import { CPP14Parser } from "../../parser/cpp/grammar/CPP14Parser";
9
-
10
- /**
11
- * Parse a C++ code string into a TranslationUnitContext.
12
- * Throws if there are parse errors.
13
- */
14
- function parseCpp(code: string): ReturnType<CPP14Parser["translationUnit"]> {
15
- const charStream = CharStream.fromString(code);
16
- const lexer = new CPP14Lexer(charStream);
17
- const tokenStream = new CommonTokenStream(lexer);
18
- const parser = new CPP14Parser(tokenStream);
19
-
20
- const errors: string[] = [];
21
- parser.removeErrorListeners();
22
- parser.addErrorListener({
23
- syntaxError: (_recognizer, _offendingSymbol, line, charPos, msg) => {
24
- errors.push(`${line}:${charPos} ${msg}`);
25
- },
26
- reportAmbiguity: () => {},
27
- reportAttemptingFullContext: () => {},
28
- reportContextSensitivity: () => {},
29
- });
30
-
31
- const tree = parser.translationUnit();
32
-
33
- if (errors.length > 0) {
34
- throw new Error(`Parse errors:\n${errors.join("\n")}`);
35
- }
36
-
37
- return tree;
38
- }
39
-
40
- export default parseCpp;