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.
- package/package.json +1 -1
- package/src/lib/__tests__/parseCHeader.mocked.test.ts +69 -54
- package/src/lib/parseCHeader.ts +56 -23
- package/src/lib/parseWithSymbols.ts +195 -53
- package/src/transpiler/Transpiler.ts +180 -63
- package/src/transpiler/logic/analysis/FunctionCallAnalyzer.ts +1 -2
- package/src/transpiler/logic/analysis/InitializationAnalyzer.ts +1 -2
- package/src/transpiler/logic/analysis/PassByValueAnalyzer.ts +51 -2
- package/src/transpiler/logic/analysis/__tests__/FunctionCallAnalyzer.test.ts +18 -12
- package/src/transpiler/logic/analysis/__tests__/InitializationAnalyzer.test.ts +9 -9
- package/src/transpiler/logic/analysis/__tests__/runAnalyzers.test.ts +5 -5
- package/src/transpiler/logic/symbols/SymbolTable.ts +729 -265
- package/src/transpiler/logic/symbols/SymbolUtils.ts +2 -2
- package/src/transpiler/logic/symbols/__tests__/SymbolTable.test.ts +415 -751
- package/src/transpiler/logic/symbols/c/__tests__/CResolver.integration.test.ts +573 -0
- package/src/transpiler/logic/symbols/c/__tests__/testHelpers.ts +20 -0
- package/src/transpiler/logic/symbols/c/collectors/EnumCollector.ts +82 -0
- package/src/transpiler/logic/symbols/c/collectors/FunctionCollector.ts +106 -0
- package/src/transpiler/logic/symbols/c/collectors/StructCollector.ts +173 -0
- package/src/transpiler/logic/symbols/c/collectors/TypedefCollector.ts +35 -0
- package/src/transpiler/logic/symbols/c/collectors/VariableCollector.ts +80 -0
- package/src/transpiler/logic/symbols/c/index.ts +333 -0
- package/src/transpiler/logic/symbols/c/utils/DeclaratorUtils.ts +269 -0
- package/src/transpiler/logic/symbols/cnext/__tests__/BitmapCollector.test.ts +50 -11
- package/src/transpiler/logic/symbols/cnext/__tests__/CNextResolver.integration.test.ts +45 -34
- package/src/transpiler/logic/symbols/cnext/__tests__/EnumCollector.test.ts +30 -13
- package/src/transpiler/logic/symbols/cnext/__tests__/FunctionCollector.test.ts +279 -64
- package/src/transpiler/logic/symbols/cnext/__tests__/RegisterCollector.test.ts +60 -13
- package/src/transpiler/logic/symbols/cnext/__tests__/ScopeCollector.test.ts +40 -37
- package/src/transpiler/logic/symbols/cnext/__tests__/StructCollector.test.ts +131 -45
- package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolInfoAdapter.test.ts +223 -139
- package/src/transpiler/logic/symbols/cnext/__tests__/VariableCollector.test.ts +79 -25
- package/src/transpiler/logic/symbols/cnext/__tests__/testUtils.ts +53 -0
- package/src/transpiler/logic/symbols/cnext/adapters/TSymbolInfoAdapter.ts +83 -43
- package/src/transpiler/logic/symbols/cnext/collectors/BitmapCollector.ts +14 -13
- package/src/transpiler/logic/symbols/cnext/collectors/EnumCollector.ts +11 -10
- package/src/transpiler/logic/symbols/cnext/collectors/FunctionCollector.ts +83 -34
- package/src/transpiler/logic/symbols/cnext/collectors/RegisterCollector.ts +22 -18
- package/src/transpiler/logic/symbols/cnext/collectors/ScopeCollector.ts +53 -35
- package/src/transpiler/logic/symbols/cnext/collectors/StructCollector.ts +30 -23
- package/src/transpiler/logic/symbols/cnext/collectors/VariableCollector.ts +18 -19
- package/src/transpiler/logic/symbols/cnext/index.ts +36 -14
- package/src/transpiler/logic/symbols/cnext/types/IScopeCollectorResult.ts +2 -2
- package/src/transpiler/logic/symbols/cnext/utils/SymbolNameUtils.ts +27 -0
- package/src/transpiler/logic/symbols/cpp/__tests__/CppResolver.integration.test.ts +270 -0
- package/src/transpiler/logic/symbols/cpp/__tests__/testHelpers.ts +20 -0
- package/src/transpiler/logic/symbols/cpp/collectors/ClassCollector.ts +317 -0
- package/src/transpiler/logic/symbols/cpp/collectors/EnumCollector.ts +71 -0
- package/src/transpiler/logic/symbols/cpp/collectors/FunctionCollector.ts +155 -0
- package/src/transpiler/logic/symbols/cpp/collectors/NamespaceCollector.ts +65 -0
- package/src/transpiler/logic/symbols/cpp/collectors/TypeAliasCollector.ts +46 -0
- package/src/transpiler/logic/symbols/cpp/collectors/VariableCollector.ts +54 -0
- package/src/transpiler/logic/symbols/cpp/index.ts +366 -0
- package/src/transpiler/logic/symbols/cpp/utils/DeclaratorUtils.ts +248 -0
- package/src/transpiler/logic/symbols/shared/IExtractedParameter.ts +18 -0
- package/src/transpiler/logic/symbols/shared/ParameterExtractorUtils.ts +73 -0
- package/src/transpiler/output/codegen/CodeGenerator.ts +268 -1674
- package/src/transpiler/output/codegen/__tests__/CodeGenerator.test.ts +7 -1
- package/src/transpiler/output/codegen/assignment/AssignmentClassifier.ts +2 -1
- package/src/transpiler/output/codegen/assignment/handlers/AssignmentHandlerUtils.ts +7 -1
- package/src/transpiler/output/codegen/assignment/handlers/BitmapHandlers.ts +6 -2
- package/src/transpiler/output/codegen/assignment/handlers/RegisterHandlers.ts +2 -1
- package/src/transpiler/output/codegen/generators/declarationGenerators/ScopeGenerator.ts +21 -8
- package/src/transpiler/output/codegen/generators/declarationGenerators/ScopedRegisterGenerator.ts +3 -2
- package/src/transpiler/output/codegen/generators/expressions/CallExprUtils.ts +9 -3
- package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprGenerator.test.ts +3 -4
- package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprUtils.test.ts +4 -8
- package/src/transpiler/output/codegen/helpers/ArgumentGenerator.ts +236 -0
- package/src/transpiler/output/codegen/helpers/CppConstructorHelper.ts +3 -3
- package/src/transpiler/output/codegen/helpers/FunctionContextManager.ts +435 -0
- package/src/transpiler/output/codegen/helpers/StringOperationsHelper.ts +203 -0
- package/src/transpiler/output/codegen/helpers/SymbolLookupHelper.ts +8 -12
- package/src/transpiler/output/codegen/helpers/TypeRegistrationEngine.ts +520 -0
- package/src/transpiler/output/codegen/helpers/VariableDeclHelper.ts +735 -0
- package/src/transpiler/output/codegen/helpers/VariableDeclarationFormatter.ts +1 -1
- package/src/transpiler/output/codegen/helpers/__tests__/ArgumentGenerator.test.ts +521 -0
- package/src/transpiler/output/codegen/helpers/__tests__/CppConstructorHelper.test.ts +4 -5
- package/src/transpiler/output/codegen/helpers/__tests__/FunctionContextManager.test.ts +983 -0
- package/src/transpiler/output/codegen/helpers/__tests__/StringOperationsHelper.test.ts +269 -0
- package/src/transpiler/output/codegen/helpers/__tests__/SymbolLookupHelper.test.ts +31 -32
- package/src/transpiler/output/codegen/helpers/__tests__/TypeRegistrationEngine.test.ts +186 -0
- package/src/transpiler/output/codegen/helpers/__tests__/VariableDeclHelper.test.ts +460 -0
- package/src/transpiler/output/codegen/helpers/types/IArgumentGeneratorCallbacks.ts +32 -0
- package/src/transpiler/output/codegen/resolution/EnumTypeResolver.ts +5 -1
- package/src/transpiler/output/codegen/types/IFunctionContextCallbacks.ts +12 -0
- package/src/transpiler/output/codegen/types/IVariableFormatInput.ts +1 -1
- package/src/transpiler/output/codegen/utils/QualifiedNameGenerator.ts +114 -0
- package/src/transpiler/output/codegen/utils/__tests__/QualifiedNameGenerator.test.ts +183 -0
- package/src/transpiler/output/headers/BaseHeaderGenerator.ts +4 -4
- package/src/transpiler/output/headers/ExternalTypeHeaderBuilder.ts +7 -7
- package/src/transpiler/output/headers/HeaderGenerator.ts +9 -7
- package/src/transpiler/output/headers/HeaderGeneratorUtils.ts +19 -20
- package/src/transpiler/output/headers/__tests__/BaseHeaderGenerator.test.ts +15 -18
- package/src/transpiler/output/headers/__tests__/CHeaderGenerator.test.ts +63 -64
- package/src/transpiler/output/headers/__tests__/CppHeaderGenerator.test.ts +36 -32
- package/src/transpiler/output/headers/__tests__/ExternalTypeHeaderBuilder.test.ts +26 -26
- package/src/transpiler/output/headers/__tests__/HeaderGenerator.test.ts +87 -59
- package/src/transpiler/output/headers/__tests__/HeaderGeneratorUtils.test.ts +57 -58
- package/src/transpiler/output/headers/adapters/HeaderSymbolAdapter.ts +222 -0
- package/src/transpiler/output/headers/adapters/__tests__/HeaderSymbolAdapter.test.ts +538 -0
- package/src/transpiler/output/headers/types/IGroupedSymbols.ts +8 -8
- package/src/transpiler/output/headers/types/IHeaderSymbol.ts +62 -0
- package/src/transpiler/state/CodeGenState.ts +20 -33
- package/src/transpiler/state/SymbolRegistry.ts +181 -0
- package/src/transpiler/{types → state}/TranspilerState.ts +1 -1
- package/src/transpiler/state/__tests__/CodeGenState.test.ts +67 -59
- package/src/transpiler/state/__tests__/SymbolRegistry.test.ts +249 -0
- package/src/transpiler/{types → state}/__tests__/TranspilerState.test.ts +1 -1
- package/src/transpiler/types/ICachedFileEntry.ts +1 -1
- package/src/transpiler/types/IConflict.ts +14 -0
- package/src/transpiler/types/IPipelineInput.ts +0 -3
- package/src/transpiler/types/ISerializedSymbol.ts +11 -0
- package/src/transpiler/types/TPrimitiveKind.ts +20 -0
- package/src/transpiler/types/TType.ts +103 -0
- package/src/transpiler/types/TVisibility.ts +6 -0
- package/src/transpiler/types/symbol-kinds/TSymbolKind.ts +10 -0
- package/src/transpiler/types/symbol-kinds/TSymbolKindC.ts +12 -0
- package/src/transpiler/types/symbol-kinds/TSymbolKindCNext.ts +16 -0
- package/src/transpiler/types/symbol-kinds/TSymbolKindCpp.ts +14 -0
- package/src/transpiler/types/symbols/IBaseSymbol.ts +31 -0
- package/src/transpiler/{logic/symbols/types → types/symbols}/IBitmapFieldInfo.ts +2 -2
- package/src/transpiler/types/symbols/IBitmapSymbol.ts +21 -0
- package/src/transpiler/{logic/symbols/types → types/symbols}/IEnumSymbol.ts +5 -6
- package/src/transpiler/types/symbols/IFieldInfo.ts +26 -0
- package/src/transpiler/types/symbols/IFunctionSymbol.ts +30 -0
- package/src/transpiler/types/symbols/IParameterInfo.ts +26 -0
- package/src/transpiler/{logic/symbols/types → types/symbols}/IRegisterMemberInfo.ts +4 -4
- package/src/transpiler/types/symbols/IRegisterSymbol.ts +18 -0
- package/src/transpiler/types/symbols/IScopeSymbol.ts +32 -0
- package/src/transpiler/{logic/symbols/types → types/symbols}/IStructFieldInfo.ts +2 -1
- package/src/transpiler/types/symbols/IStructSymbol.ts +15 -0
- package/src/transpiler/types/symbols/IVariableSymbol.ts +30 -0
- package/src/transpiler/types/symbols/SymbolGuards.ts +43 -0
- package/src/transpiler/types/symbols/TAnySymbol.ts +22 -0
- package/src/transpiler/types/symbols/TSymbol.ts +32 -0
- package/src/transpiler/types/symbols/__tests__/IBaseSymbol.test.ts +56 -0
- package/src/transpiler/types/symbols/__tests__/SymbolGuards.test.ts +57 -0
- package/src/transpiler/types/symbols/c/ICBaseSymbol.ts +28 -0
- package/src/transpiler/types/symbols/c/ICEnumMemberSymbol.ts +17 -0
- package/src/transpiler/types/symbols/c/ICEnumSymbol.ts +17 -0
- package/src/transpiler/types/symbols/c/ICFieldInfo.ts +16 -0
- package/src/transpiler/types/symbols/c/ICFunctionSymbol.ts +21 -0
- package/src/transpiler/types/symbols/c/ICParameterInfo.ts +19 -0
- package/src/transpiler/types/symbols/c/ICStructSymbol.ts +21 -0
- package/src/transpiler/types/symbols/c/ICTypedefSymbol.ts +14 -0
- package/src/transpiler/types/symbols/c/ICVariableSymbol.ts +26 -0
- package/src/transpiler/types/symbols/c/TCSymbol.ts +26 -0
- package/src/transpiler/types/symbols/cpp/ICppBaseSymbol.ts +31 -0
- package/src/transpiler/types/symbols/cpp/ICppClassSymbol.ts +15 -0
- package/src/transpiler/types/symbols/cpp/ICppEnumMemberSymbol.ts +14 -0
- package/src/transpiler/types/symbols/cpp/ICppEnumSymbol.ts +14 -0
- package/src/transpiler/types/symbols/cpp/ICppFieldInfo.ts +16 -0
- package/src/transpiler/types/symbols/cpp/ICppFunctionSymbol.ts +21 -0
- package/src/transpiler/types/symbols/cpp/ICppNamespaceSymbol.ts +11 -0
- package/src/transpiler/types/symbols/cpp/ICppParameterInfo.ts +19 -0
- package/src/transpiler/types/symbols/cpp/ICppStructSymbol.ts +16 -0
- package/src/transpiler/types/symbols/cpp/ICppTypeAliasSymbol.ts +14 -0
- package/src/transpiler/types/symbols/cpp/ICppVariableSymbol.ts +23 -0
- package/src/transpiler/types/symbols/cpp/TCppSymbol.ts +30 -0
- package/src/utils/CppNamespaceUtils.ts +3 -4
- package/src/utils/FunctionUtils.ts +92 -0
- package/src/utils/ParameterUtils.ts +55 -0
- package/src/utils/PrimitiveKindUtils.ts +33 -0
- package/src/utils/ScopeUtils.ts +105 -0
- package/src/utils/TTypeUtils.ts +159 -0
- package/src/utils/TypeResolver.ts +132 -0
- package/src/utils/__tests__/CppNamespaceUtils.test.ts +92 -99
- package/src/utils/__tests__/FunctionUtils.test.ts +284 -0
- package/src/utils/__tests__/ParameterUtils.test.ts +174 -0
- package/src/utils/__tests__/PrimitiveKindUtils.test.ts +59 -0
- package/src/utils/__tests__/ScopeUtils.test.ts +53 -0
- package/src/utils/__tests__/TTypeUtils.test.ts +245 -0
- package/src/utils/__tests__/TypeResolver.test.ts +332 -0
- package/src/utils/cache/CacheManager.ts +91 -50
- package/src/utils/cache/__tests__/CacheManager.test.ts +180 -114
- package/src/transpiler/logic/symbols/AutoConstUpdater.ts +0 -93
- package/src/transpiler/logic/symbols/CSymbolCollector.ts +0 -648
- package/src/transpiler/logic/symbols/CppSymbolCollector.ts +0 -874
- package/src/transpiler/logic/symbols/SymbolCollectorContext.ts +0 -68
- package/src/transpiler/logic/symbols/__tests__/AutoConstUpdater.test.ts +0 -418
- package/src/transpiler/logic/symbols/__tests__/CSymbolCollector.test.ts +0 -685
- package/src/transpiler/logic/symbols/__tests__/CppSymbolCollector.test.ts +0 -1146
- package/src/transpiler/logic/symbols/__tests__/SymbolCollectorContext.test.ts +0 -290
- package/src/transpiler/logic/symbols/__tests__/cTestHelpers.ts +0 -43
- package/src/transpiler/logic/symbols/__tests__/cppTestHelpers.ts +0 -40
- package/src/transpiler/logic/symbols/cnext/__tests__/TSymbolAdapter.test.ts +0 -595
- package/src/transpiler/logic/symbols/cnext/adapters/TSymbolAdapter.ts +0 -345
- package/src/transpiler/logic/symbols/types/IBaseSymbol.ts +0 -27
- package/src/transpiler/logic/symbols/types/IBitmapSymbol.ts +0 -23
- package/src/transpiler/logic/symbols/types/ICollectorContext.ts +0 -19
- package/src/transpiler/logic/symbols/types/IConflict.ts +0 -20
- package/src/transpiler/logic/symbols/types/IFieldInfo.ts +0 -18
- package/src/transpiler/logic/symbols/types/IFunctionSymbol.ts +0 -25
- package/src/transpiler/logic/symbols/types/IParameterInfo.ts +0 -24
- package/src/transpiler/logic/symbols/types/IRegisterSymbol.ts +0 -20
- package/src/transpiler/logic/symbols/types/IScopeSymbol.ts +0 -19
- package/src/transpiler/logic/symbols/types/IStructSymbol.ts +0 -16
- package/src/transpiler/logic/symbols/types/IVariableSymbol.ts +0 -30
- package/src/transpiler/logic/symbols/types/TSymbol.ts +0 -36
- package/src/transpiler/logic/symbols/types/__tests__/SymbolGuards.test.ts +0 -244
- package/src/transpiler/logic/symbols/types/typeGuards.ts +0 -44
- package/src/utils/types/ESymbolKind.ts +0 -19
- package/src/utils/types/ISymbol.ts +0 -64
- /package/src/transpiler/{types → constants}/BITMAP_BACKING_TYPE.ts +0 -0
- /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
|
|
10
|
-
|
|
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
|
-
):
|
|
22
|
+
): IHeaderSymbol {
|
|
24
23
|
return {
|
|
25
24
|
name,
|
|
26
|
-
kind:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
8
|
-
import
|
|
9
|
-
import
|
|
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:
|
|
17
|
+
kind: TSymbolKind,
|
|
17
18
|
sourceFile: string,
|
|
18
|
-
):
|
|
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,
|
|
33
|
+
private symbolsByFile: Map<string, TAnySymbol[]> = new Map();
|
|
34
34
|
|
|
35
|
-
addSymbols(filePath: string, symbols:
|
|
35
|
+
addSymbols(filePath: string, symbols: TAnySymbol[]): void {
|
|
36
36
|
this.symbolsByFile.set(filePath, symbols);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
getSymbolsByFile(filePath: string):
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
139
|
+
createSymbol("DuplicateType", "struct", "/path/to/first.h"),
|
|
140
140
|
]);
|
|
141
141
|
source.addSymbols("/path/to/second.h", [
|
|
142
|
-
createSymbol("DuplicateType",
|
|
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",
|
|
159
|
-
createSymbol("EnumB",
|
|
160
|
-
createSymbol("TypeC",
|
|
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",
|
|
177
|
+
createSymbol("TypeA", "struct", "/path/to/a.h"),
|
|
178
178
|
]);
|
|
179
179
|
source.addSymbols("/path/to/b.h", [
|
|
180
|
-
createSymbol("TypeB",
|
|
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",
|
|
207
|
-
createSymbol("func2",
|
|
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([
|