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,11 +1,16 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
1
|
+
import { describe, expect, it, beforeEach } from "vitest";
|
|
2
2
|
import parse from "./testHelpers";
|
|
3
3
|
import ScopeCollector from "../collectors/ScopeCollector";
|
|
4
|
-
import ESymbolKind from "../../../../../utils/types/ESymbolKind";
|
|
5
4
|
import ESourceLanguage from "../../../../../utils/types/ESourceLanguage";
|
|
6
|
-
import SymbolGuards from "
|
|
5
|
+
import SymbolGuards from "../../../../types/symbols/SymbolGuards";
|
|
6
|
+
import SymbolRegistry from "../../../../state/SymbolRegistry";
|
|
7
|
+
import TypeResolver from "../../../../../utils/TypeResolver";
|
|
7
8
|
|
|
8
9
|
describe("ScopeCollector", () => {
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
SymbolRegistry.reset();
|
|
12
|
+
});
|
|
13
|
+
|
|
9
14
|
describe("basic scope extraction", () => {
|
|
10
15
|
it("collects an empty scope", () => {
|
|
11
16
|
const code = `
|
|
@@ -16,7 +21,7 @@ describe("ScopeCollector", () => {
|
|
|
16
21
|
const scopeCtx = tree.declaration(0)!.scopeDeclaration()!;
|
|
17
22
|
const result = ScopeCollector.collect(scopeCtx, "test.cnx", new Set());
|
|
18
23
|
|
|
19
|
-
expect(result.scopeSymbol.kind).toBe(
|
|
24
|
+
expect(result.scopeSymbol.kind).toBe("scope");
|
|
20
25
|
expect(result.scopeSymbol.name).toBe("Motor");
|
|
21
26
|
expect(result.scopeSymbol.members).toEqual([]);
|
|
22
27
|
expect(result.scopeSymbol.sourceFile).toBe("test.cnx");
|
|
@@ -45,24 +50,23 @@ describe("ScopeCollector", () => {
|
|
|
45
50
|
|
|
46
51
|
expect(result.memberSymbols.length).toBe(2);
|
|
47
52
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
);
|
|
53
|
+
// Functions now have bare names with scope references
|
|
54
|
+
const initFunc = result.memberSymbols.find((s) => s.name === "init");
|
|
51
55
|
expect(initFunc).toBeDefined();
|
|
52
56
|
expect(SymbolGuards.isFunction(initFunc!)).toBe(true);
|
|
53
57
|
if (SymbolGuards.isFunction(initFunc!)) {
|
|
54
58
|
expect(initFunc.visibility).toBe("public");
|
|
55
59
|
expect(initFunc.isExported).toBe(true);
|
|
60
|
+
expect(initFunc.scope.name).toBe("Motor");
|
|
56
61
|
}
|
|
57
62
|
|
|
58
|
-
const updateFunc = result.memberSymbols.find(
|
|
59
|
-
(s) => s.name === "Motor_update",
|
|
60
|
-
);
|
|
63
|
+
const updateFunc = result.memberSymbols.find((s) => s.name === "update");
|
|
61
64
|
expect(updateFunc).toBeDefined();
|
|
62
65
|
expect(SymbolGuards.isFunction(updateFunc!)).toBe(true);
|
|
63
66
|
if (SymbolGuards.isFunction(updateFunc!)) {
|
|
64
67
|
expect(updateFunc.visibility).toBe("private");
|
|
65
68
|
expect(updateFunc.isExported).toBe(false);
|
|
69
|
+
expect(updateFunc.scope.name).toBe("Motor");
|
|
66
70
|
}
|
|
67
71
|
});
|
|
68
72
|
|
|
@@ -85,14 +89,14 @@ describe("ScopeCollector", () => {
|
|
|
85
89
|
|
|
86
90
|
expect(result.memberSymbols.length).toBe(2);
|
|
87
91
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
);
|
|
92
|
+
// Variables now have bare names with scope references
|
|
93
|
+
const posVar = result.memberSymbols.find((s) => s.name === "position");
|
|
91
94
|
expect(posVar).toBeDefined();
|
|
92
95
|
expect(SymbolGuards.isVariable(posVar!)).toBe(true);
|
|
93
96
|
if (SymbolGuards.isVariable(posVar!)) {
|
|
94
|
-
expect(posVar.type).toBe("u32");
|
|
97
|
+
expect(TypeResolver.getTypeName(posVar.type)).toBe("u32");
|
|
95
98
|
expect(posVar.isExported).toBe(false);
|
|
99
|
+
expect(posVar.scope.name).toBe("Motor");
|
|
96
100
|
}
|
|
97
101
|
});
|
|
98
102
|
});
|
|
@@ -114,15 +118,15 @@ describe("ScopeCollector", () => {
|
|
|
114
118
|
|
|
115
119
|
expect(result.scopeSymbol.members).toEqual(["State"]);
|
|
116
120
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
);
|
|
121
|
+
// Enum has bare name with scope reference
|
|
122
|
+
const enumSymbol = result.memberSymbols.find((s) => s.name === "State");
|
|
120
123
|
expect(enumSymbol).toBeDefined();
|
|
121
124
|
expect(SymbolGuards.isEnum(enumSymbol!)).toBe(true);
|
|
122
125
|
if (SymbolGuards.isEnum(enumSymbol!)) {
|
|
123
126
|
expect(enumSymbol.members.get("Off")).toBe(0);
|
|
124
127
|
expect(enumSymbol.members.get("Running")).toBe(1);
|
|
125
128
|
expect(enumSymbol.members.get("Error")).toBe(2);
|
|
129
|
+
expect(enumSymbol.scope.name).toBe("Motor");
|
|
126
130
|
}
|
|
127
131
|
});
|
|
128
132
|
|
|
@@ -139,14 +143,16 @@ describe("ScopeCollector", () => {
|
|
|
139
143
|
const scopeCtx = tree.declaration(0)!.scopeDeclaration()!;
|
|
140
144
|
const result = ScopeCollector.collect(scopeCtx, "test.cnx", new Set());
|
|
141
145
|
|
|
146
|
+
// Struct has bare name with scope reference
|
|
142
147
|
const structSymbol = result.memberSymbols.find(
|
|
143
|
-
(s) => s.name === "
|
|
148
|
+
(s) => s.name === "Config",
|
|
144
149
|
);
|
|
145
150
|
expect(structSymbol).toBeDefined();
|
|
146
151
|
expect(SymbolGuards.isStruct(structSymbol!)).toBe(true);
|
|
147
152
|
if (SymbolGuards.isStruct(structSymbol!)) {
|
|
148
|
-
expect(structSymbol.fields.get("maxSpeed")
|
|
149
|
-
expect(structSymbol.fields.get("acceleration")
|
|
153
|
+
expect(structSymbol.fields.get("maxSpeed")).toBeDefined();
|
|
154
|
+
expect(structSymbol.fields.get("acceleration")).toBeDefined();
|
|
155
|
+
expect(structSymbol.scope.name).toBe("Motor");
|
|
150
156
|
}
|
|
151
157
|
});
|
|
152
158
|
|
|
@@ -166,8 +172,9 @@ describe("ScopeCollector", () => {
|
|
|
166
172
|
const scopeCtx = tree.declaration(0)!.scopeDeclaration()!;
|
|
167
173
|
const result = ScopeCollector.collect(scopeCtx, "test.cnx", new Set());
|
|
168
174
|
|
|
175
|
+
// Bitmap has bare name with scope reference
|
|
169
176
|
const bitmapSymbol = result.memberSymbols.find(
|
|
170
|
-
(s) => s.name === "
|
|
177
|
+
(s) => s.name === "Status",
|
|
171
178
|
);
|
|
172
179
|
expect(bitmapSymbol).toBeDefined();
|
|
173
180
|
expect(SymbolGuards.isBitmap(bitmapSymbol!)).toBe(true);
|
|
@@ -177,6 +184,7 @@ describe("ScopeCollector", () => {
|
|
|
177
184
|
offset: 0,
|
|
178
185
|
width: 1,
|
|
179
186
|
});
|
|
187
|
+
expect(bitmapSymbol.scope.name).toBe("Motor");
|
|
180
188
|
}
|
|
181
189
|
});
|
|
182
190
|
|
|
@@ -193,15 +201,15 @@ describe("ScopeCollector", () => {
|
|
|
193
201
|
const scopeCtx = tree.declaration(0)!.scopeDeclaration()!;
|
|
194
202
|
const result = ScopeCollector.collect(scopeCtx, "test.cnx", new Set());
|
|
195
203
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
);
|
|
204
|
+
// Register has bare name with scope reference
|
|
205
|
+
const regSymbol = result.memberSymbols.find((s) => s.name === "CTRL");
|
|
199
206
|
expect(regSymbol).toBeDefined();
|
|
200
207
|
expect(SymbolGuards.isRegister(regSymbol!)).toBe(true);
|
|
201
208
|
if (SymbolGuards.isRegister(regSymbol!)) {
|
|
202
209
|
expect(regSymbol.baseAddress).toBe("0x40001000");
|
|
203
210
|
expect(regSymbol.members.get("STATUS")?.access).toBe("rw");
|
|
204
211
|
expect(regSymbol.members.get("COMMAND")?.access).toBe("wo");
|
|
212
|
+
expect(regSymbol.scope.name).toBe("Motor");
|
|
205
213
|
}
|
|
206
214
|
});
|
|
207
215
|
});
|
|
@@ -228,21 +236,18 @@ describe("ScopeCollector", () => {
|
|
|
228
236
|
expect(result.scopeSymbol.members).toEqual(["position", "init", "State"]);
|
|
229
237
|
expect(result.memberSymbols.length).toBe(3);
|
|
230
238
|
|
|
231
|
-
// Verify each type was collected correctly
|
|
232
|
-
const varSymbol = result.memberSymbols.find(
|
|
233
|
-
(s) => s.name === "Motor_position",
|
|
234
|
-
);
|
|
239
|
+
// Verify each type was collected correctly with bare names
|
|
240
|
+
const varSymbol = result.memberSymbols.find((s) => s.name === "position");
|
|
235
241
|
expect(SymbolGuards.isVariable(varSymbol!)).toBe(true);
|
|
242
|
+
expect(varSymbol!.scope.name).toBe("Motor");
|
|
236
243
|
|
|
237
|
-
const funcSymbol = result.memberSymbols.find(
|
|
238
|
-
(s) => s.name === "Motor_init",
|
|
239
|
-
);
|
|
244
|
+
const funcSymbol = result.memberSymbols.find((s) => s.name === "init");
|
|
240
245
|
expect(SymbolGuards.isFunction(funcSymbol!)).toBe(true);
|
|
246
|
+
expect(funcSymbol!.scope.name).toBe("Motor");
|
|
241
247
|
|
|
242
|
-
const enumSymbol = result.memberSymbols.find(
|
|
243
|
-
(s) => s.name === "Motor_State",
|
|
244
|
-
);
|
|
248
|
+
const enumSymbol = result.memberSymbols.find((s) => s.name === "State");
|
|
245
249
|
expect(SymbolGuards.isEnum(enumSymbol!)).toBe(true);
|
|
250
|
+
expect(enumSymbol!.scope.name).toBe("Motor");
|
|
246
251
|
});
|
|
247
252
|
});
|
|
248
253
|
|
|
@@ -261,9 +266,7 @@ describe("ScopeCollector", () => {
|
|
|
261
266
|
const knownBitmaps = new Set(["Motor_MotorFlags"]);
|
|
262
267
|
const result = ScopeCollector.collect(scopeCtx, "test.cnx", knownBitmaps);
|
|
263
268
|
|
|
264
|
-
const regSymbol = result.memberSymbols.find(
|
|
265
|
-
(s) => s.name === "Motor_CTRL",
|
|
266
|
-
);
|
|
269
|
+
const regSymbol = result.memberSymbols.find((s) => s.name === "CTRL");
|
|
267
270
|
expect(SymbolGuards.isRegister(regSymbol!)).toBe(true);
|
|
268
271
|
if (SymbolGuards.isRegister(regSymbol!)) {
|
|
269
272
|
expect(regSymbol.members.get("FLAGS")?.bitmapType).toBe(
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
1
|
+
import { describe, expect, it, beforeEach } from "vitest";
|
|
2
2
|
import parse from "./testHelpers";
|
|
3
|
+
import TestScopeUtils from "./testUtils";
|
|
3
4
|
import StructCollector from "../collectors/StructCollector";
|
|
4
|
-
import ESymbolKind from "../../../../../utils/types/ESymbolKind";
|
|
5
5
|
import ESourceLanguage from "../../../../../utils/types/ESourceLanguage";
|
|
6
|
+
import TypeResolver from "../../../../../utils/TypeResolver";
|
|
6
7
|
|
|
7
8
|
describe("StructCollector", () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
TestScopeUtils.resetGlobalScope();
|
|
11
|
+
});
|
|
12
|
+
|
|
8
13
|
describe("basic struct extraction", () => {
|
|
9
14
|
it("collects a simple struct with primitive fields", () => {
|
|
10
15
|
const code = `
|
|
@@ -15,25 +20,33 @@ describe("StructCollector", () => {
|
|
|
15
20
|
`;
|
|
16
21
|
const tree = parse(code);
|
|
17
22
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
18
|
-
const
|
|
23
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
24
|
+
const symbol = StructCollector.collect(
|
|
25
|
+
structCtx,
|
|
26
|
+
"test.cnx",
|
|
27
|
+
globalScope,
|
|
28
|
+
);
|
|
19
29
|
|
|
20
|
-
expect(symbol.kind).toBe(
|
|
30
|
+
expect(symbol.kind).toBe("struct");
|
|
21
31
|
expect(symbol.name).toBe("Point");
|
|
22
32
|
expect(symbol.sourceFile).toBe("test.cnx");
|
|
23
33
|
expect(symbol.sourceLanguage).toBe(ESourceLanguage.CNext);
|
|
24
34
|
expect(symbol.isExported).toBe(true);
|
|
35
|
+
expect(symbol.scope).toBe(globalScope);
|
|
25
36
|
|
|
26
37
|
expect(symbol.fields.size).toBe(2);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
expect(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
|
|
39
|
+
const xField = symbol.fields.get("x");
|
|
40
|
+
expect(xField).toBeDefined();
|
|
41
|
+
expect(TypeResolver.getTypeName(xField!.type)).toBe("i32");
|
|
42
|
+
expect(xField!.isArray).toBe(false);
|
|
43
|
+
expect(xField!.isConst).toBe(false);
|
|
44
|
+
|
|
45
|
+
const yField = symbol.fields.get("y");
|
|
46
|
+
expect(yField).toBeDefined();
|
|
47
|
+
expect(TypeResolver.getTypeName(yField!.type)).toBe("i32");
|
|
48
|
+
expect(yField!.isArray).toBe(false);
|
|
49
|
+
expect(yField!.isConst).toBe(false);
|
|
37
50
|
});
|
|
38
51
|
|
|
39
52
|
it("collects a struct with various primitive types", () => {
|
|
@@ -49,14 +62,31 @@ describe("StructCollector", () => {
|
|
|
49
62
|
`;
|
|
50
63
|
const tree = parse(code);
|
|
51
64
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
expect(symbol.fields.get("
|
|
65
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
66
|
+
const symbol = StructCollector.collect(
|
|
67
|
+
structCtx,
|
|
68
|
+
"test.cnx",
|
|
69
|
+
globalScope,
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
expect(TypeResolver.getTypeName(symbol.fields.get("version")!.type)).toBe(
|
|
73
|
+
"u8",
|
|
74
|
+
);
|
|
75
|
+
expect(TypeResolver.getTypeName(symbol.fields.get("flags")!.type)).toBe(
|
|
76
|
+
"u16",
|
|
77
|
+
);
|
|
78
|
+
expect(TypeResolver.getTypeName(symbol.fields.get("size")!.type)).toBe(
|
|
79
|
+
"u32",
|
|
80
|
+
);
|
|
81
|
+
expect(
|
|
82
|
+
TypeResolver.getTypeName(symbol.fields.get("timestamp")!.type),
|
|
83
|
+
).toBe("i64");
|
|
84
|
+
expect(TypeResolver.getTypeName(symbol.fields.get("scale")!.type)).toBe(
|
|
85
|
+
"f32",
|
|
86
|
+
);
|
|
87
|
+
expect(TypeResolver.getTypeName(symbol.fields.get("enabled")!.type)).toBe(
|
|
88
|
+
"bool",
|
|
89
|
+
);
|
|
60
90
|
});
|
|
61
91
|
});
|
|
62
92
|
|
|
@@ -69,10 +99,15 @@ describe("StructCollector", () => {
|
|
|
69
99
|
`;
|
|
70
100
|
const tree = parse(code);
|
|
71
101
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
72
|
-
const
|
|
102
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
103
|
+
const symbol = StructCollector.collect(
|
|
104
|
+
structCtx,
|
|
105
|
+
"test.cnx",
|
|
106
|
+
globalScope,
|
|
107
|
+
);
|
|
73
108
|
|
|
74
109
|
const field = symbol.fields.get("data");
|
|
75
|
-
expect(field
|
|
110
|
+
expect(TypeResolver.getTypeName(field!.type)).toBe("u8");
|
|
76
111
|
expect(field?.isArray).toBe(true);
|
|
77
112
|
expect(field?.dimensions).toEqual([256]);
|
|
78
113
|
});
|
|
@@ -85,10 +120,15 @@ describe("StructCollector", () => {
|
|
|
85
120
|
`;
|
|
86
121
|
const tree = parse(code);
|
|
87
122
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
88
|
-
const
|
|
123
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
124
|
+
const symbol = StructCollector.collect(
|
|
125
|
+
structCtx,
|
|
126
|
+
"test.cnx",
|
|
127
|
+
globalScope,
|
|
128
|
+
);
|
|
89
129
|
|
|
90
130
|
const field = symbol.fields.get("values");
|
|
91
|
-
expect(field
|
|
131
|
+
expect(TypeResolver.getTypeName(field!.type)).toBe("f32");
|
|
92
132
|
expect(field?.isArray).toBe(true);
|
|
93
133
|
expect(field?.dimensions).toEqual([4, 4]);
|
|
94
134
|
});
|
|
@@ -102,10 +142,11 @@ describe("StructCollector", () => {
|
|
|
102
142
|
const tree = parse(code);
|
|
103
143
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
104
144
|
const constValues = new Map<string, number>([["BUFFER_SIZE", 256]]);
|
|
145
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
105
146
|
const symbol = StructCollector.collect(
|
|
106
147
|
structCtx,
|
|
107
148
|
"test.cnx",
|
|
108
|
-
|
|
149
|
+
globalScope,
|
|
109
150
|
constValues,
|
|
110
151
|
);
|
|
111
152
|
|
|
@@ -126,10 +167,11 @@ describe("StructCollector", () => {
|
|
|
126
167
|
["ROWS", 4],
|
|
127
168
|
["COLS", 3],
|
|
128
169
|
]);
|
|
170
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
129
171
|
const symbol = StructCollector.collect(
|
|
130
172
|
structCtx,
|
|
131
173
|
"test.cnx",
|
|
132
|
-
|
|
174
|
+
globalScope,
|
|
133
175
|
constValues,
|
|
134
176
|
);
|
|
135
177
|
|
|
@@ -147,10 +189,11 @@ describe("StructCollector", () => {
|
|
|
147
189
|
const tree = parse(code);
|
|
148
190
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
149
191
|
const constValues = new Map<string, number>([["HEX_SIZE", 16]]);
|
|
192
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
150
193
|
const symbol = StructCollector.collect(
|
|
151
194
|
structCtx,
|
|
152
195
|
"test.cnx",
|
|
153
|
-
|
|
196
|
+
globalScope,
|
|
154
197
|
constValues,
|
|
155
198
|
);
|
|
156
199
|
|
|
@@ -169,11 +212,16 @@ describe("StructCollector", () => {
|
|
|
169
212
|
`;
|
|
170
213
|
const tree = parse(code);
|
|
171
214
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
172
|
-
const
|
|
215
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
216
|
+
const symbol = StructCollector.collect(
|
|
217
|
+
structCtx,
|
|
218
|
+
"test.cnx",
|
|
219
|
+
globalScope,
|
|
220
|
+
);
|
|
173
221
|
|
|
174
222
|
const field = symbol.fields.get("name");
|
|
175
223
|
// Issue #139: Type includes capacity for string validation in CodeGenerator
|
|
176
|
-
expect(field
|
|
224
|
+
expect(TypeResolver.getTypeName(field!.type)).toBe("string<32>");
|
|
177
225
|
expect(field?.isArray).toBe(true);
|
|
178
226
|
expect(field?.dimensions).toEqual([33]); // 32 + 1 for null terminator
|
|
179
227
|
});
|
|
@@ -186,11 +234,16 @@ describe("StructCollector", () => {
|
|
|
186
234
|
`;
|
|
187
235
|
const tree = parse(code);
|
|
188
236
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
189
|
-
const
|
|
237
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
238
|
+
const symbol = StructCollector.collect(
|
|
239
|
+
structCtx,
|
|
240
|
+
"test.cnx",
|
|
241
|
+
globalScope,
|
|
242
|
+
);
|
|
190
243
|
|
|
191
244
|
const field = symbol.fields.get("items");
|
|
192
245
|
// Issue #139: Type includes capacity for string validation in CodeGenerator
|
|
193
|
-
expect(field
|
|
246
|
+
expect(TypeResolver.getTypeName(field!.type)).toBe("string<16>");
|
|
194
247
|
expect(field?.isArray).toBe(true);
|
|
195
248
|
expect(field?.dimensions).toEqual([5, 17]); // [5] array, then 16+1 for string
|
|
196
249
|
});
|
|
@@ -204,15 +257,16 @@ describe("StructCollector", () => {
|
|
|
204
257
|
const tree = parse(code);
|
|
205
258
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
206
259
|
const constValues = new Map<string, number>([["MAX_NAMES", 3]]);
|
|
260
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
207
261
|
const symbol = StructCollector.collect(
|
|
208
262
|
structCtx,
|
|
209
263
|
"test.cnx",
|
|
210
|
-
|
|
264
|
+
globalScope,
|
|
211
265
|
constValues,
|
|
212
266
|
);
|
|
213
267
|
|
|
214
268
|
const field = symbol.fields.get("items");
|
|
215
|
-
expect(field
|
|
269
|
+
expect(TypeResolver.getTypeName(field!.type)).toBe("string<16>");
|
|
216
270
|
expect(field?.isArray).toBe(true);
|
|
217
271
|
expect(field?.dimensions).toEqual([3, 17]); // [3] from const, then 16+1 for string
|
|
218
272
|
});
|
|
@@ -230,7 +284,12 @@ describe("StructCollector", () => {
|
|
|
230
284
|
`;
|
|
231
285
|
const tree = parse(code);
|
|
232
286
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
233
|
-
const
|
|
287
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
288
|
+
const symbol = StructCollector.collect(
|
|
289
|
+
structCtx,
|
|
290
|
+
"test.cnx",
|
|
291
|
+
globalScope,
|
|
292
|
+
);
|
|
234
293
|
|
|
235
294
|
expect(symbol.fields.get("maxSize")?.isConst).toBe(false);
|
|
236
295
|
expect(symbol.fields.get("currentSize")?.isConst).toBe(false);
|
|
@@ -247,15 +306,24 @@ describe("StructCollector", () => {
|
|
|
247
306
|
`;
|
|
248
307
|
const tree = parse(code);
|
|
249
308
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
250
|
-
const
|
|
309
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
310
|
+
const symbol = StructCollector.collect(
|
|
311
|
+
structCtx,
|
|
312
|
+
"test.cnx",
|
|
313
|
+
globalScope,
|
|
314
|
+
);
|
|
251
315
|
|
|
252
|
-
expect(symbol.fields.get("start")
|
|
253
|
-
|
|
316
|
+
expect(TypeResolver.getTypeName(symbol.fields.get("start")!.type)).toBe(
|
|
317
|
+
"Point",
|
|
318
|
+
);
|
|
319
|
+
expect(TypeResolver.getTypeName(symbol.fields.get("end")!.type)).toBe(
|
|
320
|
+
"Point",
|
|
321
|
+
);
|
|
254
322
|
});
|
|
255
323
|
});
|
|
256
324
|
|
|
257
325
|
describe("scoped structs", () => {
|
|
258
|
-
it("
|
|
326
|
+
it("uses scope reference properly", () => {
|
|
259
327
|
const code = `
|
|
260
328
|
struct Config {
|
|
261
329
|
u32 value;
|
|
@@ -263,9 +331,16 @@ describe("StructCollector", () => {
|
|
|
263
331
|
`;
|
|
264
332
|
const tree = parse(code);
|
|
265
333
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
266
|
-
const
|
|
334
|
+
const motorScope = TestScopeUtils.createMockScope("Motor");
|
|
335
|
+
const symbol = StructCollector.collect(
|
|
336
|
+
structCtx,
|
|
337
|
+
"motor.cnx",
|
|
338
|
+
motorScope,
|
|
339
|
+
);
|
|
267
340
|
|
|
268
|
-
expect(symbol.name).toBe("
|
|
341
|
+
expect(symbol.name).toBe("Config");
|
|
342
|
+
expect(symbol.scope).toBe(motorScope);
|
|
343
|
+
expect(symbol.scope.name).toBe("Motor");
|
|
269
344
|
});
|
|
270
345
|
|
|
271
346
|
it("resolves this.Type references within scope", () => {
|
|
@@ -278,9 +353,15 @@ describe("StructCollector", () => {
|
|
|
278
353
|
`;
|
|
279
354
|
const tree = parse(code);
|
|
280
355
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
281
|
-
const
|
|
356
|
+
const motorScope = TestScopeUtils.createMockScope("Motor");
|
|
357
|
+
const symbol = StructCollector.collect(
|
|
358
|
+
structCtx,
|
|
359
|
+
"motor.cnx",
|
|
360
|
+
motorScope,
|
|
361
|
+
);
|
|
282
362
|
|
|
283
|
-
expect(symbol.name).toBe("
|
|
363
|
+
expect(symbol.name).toBe("Container");
|
|
364
|
+
expect(symbol.scope.name).toBe("Motor");
|
|
284
365
|
});
|
|
285
366
|
});
|
|
286
367
|
|
|
@@ -294,7 +375,12 @@ describe("StructCollector", () => {
|
|
|
294
375
|
`;
|
|
295
376
|
const tree = parse(code);
|
|
296
377
|
const structCtx = tree.declaration(0)!.structDeclaration()!;
|
|
297
|
-
const
|
|
378
|
+
const globalScope = TestScopeUtils.getGlobalScope();
|
|
379
|
+
const symbol = StructCollector.collect(
|
|
380
|
+
structCtx,
|
|
381
|
+
"test.cnx",
|
|
382
|
+
globalScope,
|
|
383
|
+
);
|
|
298
384
|
|
|
299
385
|
expect(symbol.sourceLine).toBe(3);
|
|
300
386
|
});
|