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
@@ -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;