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.
- 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 +173 -60
- package/src/transpiler/logic/analysis/FunctionCallAnalyzer.ts +240 -205
- package/src/transpiler/logic/analysis/InitializationAnalyzer.ts +1 -2
- package/src/transpiler/logic/analysis/PassByValueAnalyzer.ts +742 -0
- package/src/transpiler/logic/analysis/__tests__/FunctionCallAnalyzer.test.ts +102 -15
- 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/{output/codegen → logic/analysis}/helpers/AssignmentTargetExtractor.ts +1 -1
- package/src/transpiler/{output/codegen → logic/analysis}/helpers/ChildStatementCollector.ts +1 -1
- package/src/transpiler/{output/codegen → logic/analysis}/helpers/StatementExpressionCollector.ts +1 -1
- package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/AssignmentTargetExtractor.test.ts +2 -2
- package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/ChildStatementCollector.test.ts +2 -2
- package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/StatementExpressionCollector.test.ts +2 -2
- package/src/transpiler/logic/symbols/SymbolTable.ts +676 -258
- package/src/transpiler/logic/symbols/SymbolUtils.ts +2 -2
- package/src/transpiler/logic/symbols/__tests__/SymbolTable.test.ts +290 -782
- 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 +310 -2288
- package/src/transpiler/output/codegen/TypeRegistrationUtils.ts +4 -6
- package/src/transpiler/output/codegen/TypeResolver.ts +2 -2
- package/src/transpiler/output/codegen/TypeValidator.ts +5 -5
- package/src/transpiler/output/codegen/__tests__/CodeGenerator.test.ts +7 -1
- package/src/transpiler/output/codegen/__tests__/TypeRegistrationUtils.test.ts +36 -51
- package/src/transpiler/output/codegen/__tests__/TypeResolver.test.ts +20 -17
- package/src/transpiler/output/codegen/__tests__/TypeValidator.resolution.test.ts +3 -3
- package/src/transpiler/output/codegen/__tests__/TypeValidator.test.ts +1 -1
- package/src/transpiler/output/codegen/analysis/MemberChainAnalyzer.ts +1 -1
- package/src/transpiler/output/codegen/analysis/StringLengthCounter.ts +1 -1
- package/src/transpiler/output/codegen/analysis/__tests__/MemberChainAnalyzer.test.ts +9 -9
- package/src/transpiler/output/codegen/analysis/__tests__/StringLengthCounter.test.ts +12 -12
- package/src/transpiler/output/codegen/assignment/AssignmentClassifier.ts +13 -12
- package/src/transpiler/output/codegen/assignment/__tests__/AssignmentClassifier.test.ts +23 -17
- package/src/transpiler/output/codegen/assignment/handlers/ArrayHandlers.ts +2 -2
- package/src/transpiler/output/codegen/assignment/handlers/AssignmentHandlerUtils.ts +7 -1
- package/src/transpiler/output/codegen/assignment/handlers/BitAccessHandlers.ts +3 -3
- package/src/transpiler/output/codegen/assignment/handlers/BitmapHandlers.ts +9 -5
- package/src/transpiler/output/codegen/assignment/handlers/RegisterHandlers.ts +2 -1
- package/src/transpiler/output/codegen/assignment/handlers/SpecialHandlers.ts +4 -4
- package/src/transpiler/output/codegen/assignment/handlers/StringHandlers.ts +5 -5
- package/src/transpiler/output/codegen/assignment/handlers/__tests__/ArrayHandlers.test.ts +23 -25
- package/src/transpiler/output/codegen/assignment/handlers/__tests__/BitAccessHandlers.test.ts +20 -36
- package/src/transpiler/output/codegen/assignment/handlers/__tests__/BitmapHandlers.test.ts +18 -18
- package/src/transpiler/output/codegen/assignment/handlers/__tests__/SpecialHandlers.test.ts +42 -32
- package/src/transpiler/output/codegen/assignment/handlers/__tests__/handlerTestUtils.ts +5 -4
- 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/CallExprGenerator.ts +14 -6
- package/src/transpiler/output/codegen/generators/expressions/CallExprUtils.ts +9 -3
- package/src/transpiler/output/codegen/generators/expressions/PostfixExpressionGenerator.ts +19 -16
- package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprGenerator.test.ts +24 -8
- package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprUtils.test.ts +4 -8
- package/src/transpiler/output/codegen/generators/expressions/__tests__/PostfixExpressionGenerator.test.ts +15 -2
- package/src/transpiler/output/codegen/helpers/ArgumentGenerator.ts +236 -0
- package/src/transpiler/output/codegen/helpers/ArrayInitHelper.ts +2 -1
- package/src/transpiler/output/codegen/helpers/AssignmentExpectedTypeResolver.ts +2 -2
- package/src/transpiler/output/codegen/helpers/AssignmentValidator.ts +3 -3
- package/src/transpiler/output/codegen/helpers/CppConstructorHelper.ts +3 -3
- package/src/transpiler/output/codegen/helpers/EnumAssignmentValidator.ts +1 -1
- package/src/transpiler/output/codegen/helpers/FunctionContextManager.ts +435 -0
- package/src/transpiler/output/codegen/helpers/StringDeclHelper.ts +2 -2
- 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__/ArrayInitHelper.test.ts +1 -1
- package/src/transpiler/output/codegen/helpers/__tests__/AssignmentExpectedTypeResolver.test.ts +7 -7
- package/src/transpiler/output/codegen/helpers/__tests__/AssignmentValidator.test.ts +7 -7
- package/src/transpiler/output/codegen/helpers/__tests__/CppConstructorHelper.test.ts +4 -5
- package/src/transpiler/output/codegen/helpers/__tests__/EnumAssignmentValidator.test.ts +2 -2
- package/src/transpiler/output/codegen/helpers/__tests__/FunctionContextManager.test.ts +983 -0
- package/src/transpiler/output/codegen/helpers/__tests__/StringDeclHelper.test.ts +4 -4
- 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 +7 -3
- package/src/transpiler/output/codegen/resolution/__tests__/EnumTypeResolver.test.ts +5 -5
- 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 +109 -4
- 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 +277 -1
- 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/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
- /package/src/transpiler/{output/codegen → logic/analysis}/helpers/TransitiveModificationPropagator.ts +0 -0
- /package/src/transpiler/{output/codegen → logic/analysis}/helpers/__tests__/TransitiveModificationPropagator.test.ts +0 -0
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import ESourceLanguage from "../../../../../utils/types/ESourceLanguage";
|
|
3
|
-
import ESymbolKind from "../../../../../utils/types/ESymbolKind";
|
|
4
|
-
import IBitmapSymbol from "../IBitmapSymbol";
|
|
5
|
-
import IEnumSymbol from "../IEnumSymbol";
|
|
6
|
-
import IFunctionSymbol from "../IFunctionSymbol";
|
|
7
|
-
import IRegisterSymbol from "../IRegisterSymbol";
|
|
8
|
-
import IScopeSymbol from "../IScopeSymbol";
|
|
9
|
-
import IStructSymbol from "../IStructSymbol";
|
|
10
|
-
import IVariableSymbol from "../IVariableSymbol";
|
|
11
|
-
import TSymbol from "../TSymbol";
|
|
12
|
-
import SymbolGuards from "../typeGuards";
|
|
13
|
-
|
|
14
|
-
const baseFields = {
|
|
15
|
-
name: "TestSymbol",
|
|
16
|
-
sourceFile: "test.cnx",
|
|
17
|
-
sourceLine: 1,
|
|
18
|
-
sourceLanguage: ESourceLanguage.CNext,
|
|
19
|
-
isExported: true,
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
describe("SymbolGuards", () => {
|
|
23
|
-
const structSymbol: IStructSymbol = {
|
|
24
|
-
...baseFields,
|
|
25
|
-
kind: ESymbolKind.Struct,
|
|
26
|
-
fields: new Map([["x", { type: "u32", isArray: false, isConst: false }]]),
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const enumSymbol: IEnumSymbol = {
|
|
30
|
-
...baseFields,
|
|
31
|
-
kind: ESymbolKind.Enum,
|
|
32
|
-
members: new Map([
|
|
33
|
-
["A", 0],
|
|
34
|
-
["B", 1],
|
|
35
|
-
]),
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const bitmapSymbol: IBitmapSymbol = {
|
|
39
|
-
...baseFields,
|
|
40
|
-
kind: ESymbolKind.Bitmap,
|
|
41
|
-
backingType: "u8",
|
|
42
|
-
bitWidth: 8,
|
|
43
|
-
fields: new Map([["flag", { offset: 0, width: 1 }]]),
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const functionSymbol: IFunctionSymbol = {
|
|
47
|
-
...baseFields,
|
|
48
|
-
kind: ESymbolKind.Function,
|
|
49
|
-
returnType: "void",
|
|
50
|
-
parameters: [],
|
|
51
|
-
visibility: "public",
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const variableSymbol: IVariableSymbol = {
|
|
55
|
-
...baseFields,
|
|
56
|
-
kind: ESymbolKind.Variable,
|
|
57
|
-
type: "u32",
|
|
58
|
-
isConst: false,
|
|
59
|
-
isAtomic: false,
|
|
60
|
-
isArray: false,
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const scopeSymbol: IScopeSymbol = {
|
|
64
|
-
...baseFields,
|
|
65
|
-
kind: ESymbolKind.Namespace,
|
|
66
|
-
members: ["init", "update"],
|
|
67
|
-
memberVisibility: new Map([
|
|
68
|
-
["init", "public"],
|
|
69
|
-
["update", "private"],
|
|
70
|
-
]),
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const registerSymbol: IRegisterSymbol = {
|
|
74
|
-
...baseFields,
|
|
75
|
-
kind: ESymbolKind.Register,
|
|
76
|
-
baseAddress: "0x40000000",
|
|
77
|
-
members: new Map([
|
|
78
|
-
["DATA", { offset: "0x00", cType: "uint32_t", access: "rw" }],
|
|
79
|
-
]),
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const allSymbols: TSymbol[] = [
|
|
83
|
-
structSymbol,
|
|
84
|
-
enumSymbol,
|
|
85
|
-
bitmapSymbol,
|
|
86
|
-
functionSymbol,
|
|
87
|
-
variableSymbol,
|
|
88
|
-
scopeSymbol,
|
|
89
|
-
registerSymbol,
|
|
90
|
-
];
|
|
91
|
-
|
|
92
|
-
describe("isStruct", () => {
|
|
93
|
-
it("returns true for struct symbols", () => {
|
|
94
|
-
expect(SymbolGuards.isStruct(structSymbol)).toBe(true);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it("returns false for non-struct symbols", () => {
|
|
98
|
-
for (const symbol of allSymbols) {
|
|
99
|
-
if (symbol.kind !== ESymbolKind.Struct) {
|
|
100
|
-
expect(SymbolGuards.isStruct(symbol)).toBe(false);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it("narrows type correctly", () => {
|
|
106
|
-
const symbol: TSymbol = structSymbol;
|
|
107
|
-
if (SymbolGuards.isStruct(symbol)) {
|
|
108
|
-
// TypeScript should know this is IStructSymbol
|
|
109
|
-
expect(symbol.fields.get("x")?.type).toBe("u32");
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
describe("isEnum", () => {
|
|
115
|
-
it("returns true for enum symbols", () => {
|
|
116
|
-
expect(SymbolGuards.isEnum(enumSymbol)).toBe(true);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it("returns false for non-enum symbols", () => {
|
|
120
|
-
for (const symbol of allSymbols) {
|
|
121
|
-
if (symbol.kind !== ESymbolKind.Enum) {
|
|
122
|
-
expect(SymbolGuards.isEnum(symbol)).toBe(false);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
it("narrows type correctly", () => {
|
|
128
|
-
const symbol: TSymbol = enumSymbol;
|
|
129
|
-
if (SymbolGuards.isEnum(symbol)) {
|
|
130
|
-
expect(symbol.members.get("A")).toBe(0);
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
describe("isBitmap", () => {
|
|
136
|
-
it("returns true for bitmap symbols", () => {
|
|
137
|
-
expect(SymbolGuards.isBitmap(bitmapSymbol)).toBe(true);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it("returns false for non-bitmap symbols", () => {
|
|
141
|
-
for (const symbol of allSymbols) {
|
|
142
|
-
if (symbol.kind !== ESymbolKind.Bitmap) {
|
|
143
|
-
expect(SymbolGuards.isBitmap(symbol)).toBe(false);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
it("narrows type correctly", () => {
|
|
149
|
-
const symbol: TSymbol = bitmapSymbol;
|
|
150
|
-
if (SymbolGuards.isBitmap(symbol)) {
|
|
151
|
-
expect(symbol.backingType).toBe("u8");
|
|
152
|
-
expect(symbol.fields.get("flag")?.width).toBe(1);
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
describe("isFunction", () => {
|
|
158
|
-
it("returns true for function symbols", () => {
|
|
159
|
-
expect(SymbolGuards.isFunction(functionSymbol)).toBe(true);
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
it("returns false for non-function symbols", () => {
|
|
163
|
-
for (const symbol of allSymbols) {
|
|
164
|
-
if (symbol.kind !== ESymbolKind.Function) {
|
|
165
|
-
expect(SymbolGuards.isFunction(symbol)).toBe(false);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it("narrows type correctly", () => {
|
|
171
|
-
const symbol: TSymbol = functionSymbol;
|
|
172
|
-
if (SymbolGuards.isFunction(symbol)) {
|
|
173
|
-
expect(symbol.returnType).toBe("void");
|
|
174
|
-
expect(symbol.visibility).toBe("public");
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
describe("isVariable", () => {
|
|
180
|
-
it("returns true for variable symbols", () => {
|
|
181
|
-
expect(SymbolGuards.isVariable(variableSymbol)).toBe(true);
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it("returns false for non-variable symbols", () => {
|
|
185
|
-
for (const symbol of allSymbols) {
|
|
186
|
-
if (symbol.kind !== ESymbolKind.Variable) {
|
|
187
|
-
expect(SymbolGuards.isVariable(symbol)).toBe(false);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
it("narrows type correctly", () => {
|
|
193
|
-
const symbol: TSymbol = variableSymbol;
|
|
194
|
-
if (SymbolGuards.isVariable(symbol)) {
|
|
195
|
-
expect(symbol.type).toBe("u32");
|
|
196
|
-
expect(symbol.isConst).toBe(false);
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
describe("isScope", () => {
|
|
202
|
-
it("returns true for scope symbols", () => {
|
|
203
|
-
expect(SymbolGuards.isScope(scopeSymbol)).toBe(true);
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
it("returns false for non-scope symbols", () => {
|
|
207
|
-
for (const symbol of allSymbols) {
|
|
208
|
-
if (symbol.kind !== ESymbolKind.Namespace) {
|
|
209
|
-
expect(SymbolGuards.isScope(symbol)).toBe(false);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
it("narrows type correctly", () => {
|
|
215
|
-
const symbol: TSymbol = scopeSymbol;
|
|
216
|
-
if (SymbolGuards.isScope(symbol)) {
|
|
217
|
-
expect(symbol.members).toContain("init");
|
|
218
|
-
expect(symbol.memberVisibility.get("update")).toBe("private");
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
describe("isRegister", () => {
|
|
224
|
-
it("returns true for register symbols", () => {
|
|
225
|
-
expect(SymbolGuards.isRegister(registerSymbol)).toBe(true);
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
it("returns false for non-register symbols", () => {
|
|
229
|
-
for (const symbol of allSymbols) {
|
|
230
|
-
if (symbol.kind !== ESymbolKind.Register) {
|
|
231
|
-
expect(SymbolGuards.isRegister(symbol)).toBe(false);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
it("narrows type correctly", () => {
|
|
237
|
-
const symbol: TSymbol = registerSymbol;
|
|
238
|
-
if (SymbolGuards.isRegister(symbol)) {
|
|
239
|
-
expect(symbol.baseAddress).toBe("0x40000000");
|
|
240
|
-
expect(symbol.members.get("DATA")?.access).toBe("rw");
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
});
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import ESymbolKind from "../../../../utils/types/ESymbolKind";
|
|
2
|
-
import IBitmapSymbol from "./IBitmapSymbol";
|
|
3
|
-
import IEnumSymbol from "./IEnumSymbol";
|
|
4
|
-
import IFunctionSymbol from "./IFunctionSymbol";
|
|
5
|
-
import IRegisterSymbol from "./IRegisterSymbol";
|
|
6
|
-
import IScopeSymbol from "./IScopeSymbol";
|
|
7
|
-
import IStructSymbol from "./IStructSymbol";
|
|
8
|
-
import IVariableSymbol from "./IVariableSymbol";
|
|
9
|
-
import TSymbol from "./TSymbol";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Type guards for narrowing TSymbol to specific symbol types.
|
|
13
|
-
*/
|
|
14
|
-
class SymbolGuards {
|
|
15
|
-
static isStruct(symbol: TSymbol): symbol is IStructSymbol {
|
|
16
|
-
return symbol.kind === ESymbolKind.Struct;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
static isEnum(symbol: TSymbol): symbol is IEnumSymbol {
|
|
20
|
-
return symbol.kind === ESymbolKind.Enum;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
static isBitmap(symbol: TSymbol): symbol is IBitmapSymbol {
|
|
24
|
-
return symbol.kind === ESymbolKind.Bitmap;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
static isFunction(symbol: TSymbol): symbol is IFunctionSymbol {
|
|
28
|
-
return symbol.kind === ESymbolKind.Function;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
static isVariable(symbol: TSymbol): symbol is IVariableSymbol {
|
|
32
|
-
return symbol.kind === ESymbolKind.Variable;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
static isScope(symbol: TSymbol): symbol is IScopeSymbol {
|
|
36
|
-
return symbol.kind === ESymbolKind.Namespace;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
static isRegister(symbol: TSymbol): symbol is IRegisterSymbol {
|
|
40
|
-
return symbol.kind === ESymbolKind.Register;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export default SymbolGuards;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Types of symbols that can be collected from source files
|
|
3
|
-
*/
|
|
4
|
-
enum ESymbolKind {
|
|
5
|
-
Function = "function",
|
|
6
|
-
Variable = "variable",
|
|
7
|
-
Type = "type",
|
|
8
|
-
Namespace = "namespace",
|
|
9
|
-
Class = "class",
|
|
10
|
-
Struct = "struct",
|
|
11
|
-
Enum = "enum",
|
|
12
|
-
EnumMember = "enum_member",
|
|
13
|
-
Bitmap = "bitmap",
|
|
14
|
-
BitmapField = "bitmap_field",
|
|
15
|
-
Register = "register",
|
|
16
|
-
RegisterMember = "register_member",
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export default ESymbolKind;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import ESymbolKind from "./ESymbolKind";
|
|
2
|
-
import ESourceLanguage from "./ESourceLanguage";
|
|
3
|
-
import IParameterSymbol from "./IParameterSymbol";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Represents a symbol collected from a source file
|
|
7
|
-
*/
|
|
8
|
-
interface ISymbol {
|
|
9
|
-
/** Symbol name (e.g., "LED_toggle", "GPIO7", "uint32_t") */
|
|
10
|
-
name: string;
|
|
11
|
-
|
|
12
|
-
/** Kind of symbol */
|
|
13
|
-
kind: ESymbolKind;
|
|
14
|
-
|
|
15
|
-
/** Type of the symbol (e.g., "void", "u32", "int*") */
|
|
16
|
-
type?: string;
|
|
17
|
-
|
|
18
|
-
/** Source file where the symbol is defined */
|
|
19
|
-
sourceFile: string;
|
|
20
|
-
|
|
21
|
-
/** Line number in the source file */
|
|
22
|
-
sourceLine: number;
|
|
23
|
-
|
|
24
|
-
/** Source language */
|
|
25
|
-
sourceLanguage: ESourceLanguage;
|
|
26
|
-
|
|
27
|
-
/** Whether this symbol is exported/public */
|
|
28
|
-
isExported: boolean;
|
|
29
|
-
|
|
30
|
-
/** Whether this is a declaration (not definition) */
|
|
31
|
-
isDeclaration?: boolean;
|
|
32
|
-
|
|
33
|
-
/** Function signature for overload detection (e.g., "void foo(int, float)") */
|
|
34
|
-
signature?: string;
|
|
35
|
-
|
|
36
|
-
/** Function parameters with names, types, and modifiers for header generation */
|
|
37
|
-
parameters?: IParameterSymbol[];
|
|
38
|
-
|
|
39
|
-
/** Parent namespace or class name */
|
|
40
|
-
parent?: string;
|
|
41
|
-
|
|
42
|
-
/** Access modifier for register members (rw, ro, wo, w1c, w1s) */
|
|
43
|
-
accessModifier?: string;
|
|
44
|
-
|
|
45
|
-
/** For arrays: element count. For integers: bit width */
|
|
46
|
-
size?: number;
|
|
47
|
-
|
|
48
|
-
/** Issue #379: Whether this variable is an array */
|
|
49
|
-
isArray?: boolean;
|
|
50
|
-
|
|
51
|
-
/** Issue #379: Array dimensions for extern declarations (e.g., ["4"] or ["4", "8"]) */
|
|
52
|
-
arrayDimensions?: string[];
|
|
53
|
-
|
|
54
|
-
/** Issue #288: Whether this variable is const (for extern declarations) */
|
|
55
|
-
isConst?: boolean;
|
|
56
|
-
|
|
57
|
-
/** Issue #468: Whether this variable is atomic (volatile in C) */
|
|
58
|
-
isAtomic?: boolean;
|
|
59
|
-
|
|
60
|
-
/** Issue #461: Initial value expression for const variables (for resolving external array dimensions) */
|
|
61
|
-
initialValue?: string;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export default ISymbol;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|