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
|
@@ -23,6 +23,7 @@ import TGeneratorFn from "../TGeneratorFn";
|
|
|
23
23
|
import generateScopedRegister from "./ScopedRegisterGenerator";
|
|
24
24
|
import BitmapCommentUtils from "./BitmapCommentUtils";
|
|
25
25
|
import ArrayDimensionUtils from "./ArrayDimensionUtils";
|
|
26
|
+
import QualifiedNameGenerator from "../../utils/QualifiedNameGenerator";
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* Generate initializer expression for a variable declaration.
|
|
@@ -48,7 +49,7 @@ function getScopedName(
|
|
|
48
49
|
scopeName: string,
|
|
49
50
|
): { name: string; fullName: string } {
|
|
50
51
|
const name = node.IDENTIFIER().getText();
|
|
51
|
-
return { name, fullName:
|
|
52
|
+
return { name, fullName: QualifiedNameGenerator.forMember(scopeName, name) };
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
/**
|
|
@@ -66,7 +67,7 @@ function resolveConstructorArgs(
|
|
|
66
67
|
for (const argNode of argIdentifiers) {
|
|
67
68
|
const argName = argNode.getText();
|
|
68
69
|
// Arguments must be resolved with scope prefix
|
|
69
|
-
const scopedArgName =
|
|
70
|
+
const scopedArgName = QualifiedNameGenerator.forMember(scopeName, argName);
|
|
70
71
|
|
|
71
72
|
// Check if it's const using orchestrator
|
|
72
73
|
if (!orchestrator.isConstValue(scopedArgName)) {
|
|
@@ -146,7 +147,7 @@ function generateConstructorVariable(
|
|
|
146
147
|
): string {
|
|
147
148
|
// ADR-016: All scope variables are emitted at file scope
|
|
148
149
|
const type = orchestrator.generateType(varDecl.type());
|
|
149
|
-
const fullName =
|
|
150
|
+
const fullName = QualifiedNameGenerator.forMember(scopeName, varName);
|
|
150
151
|
const prefix = isPrivate ? "static " : "";
|
|
151
152
|
|
|
152
153
|
// Validate and resolve constructor arguments
|
|
@@ -180,7 +181,7 @@ function generateRegularVariable(
|
|
|
180
181
|
|
|
181
182
|
// ADR-016: All scope variables are emitted at file scope (static-like persistence)
|
|
182
183
|
const type = orchestrator.generateType(varDecl.type());
|
|
183
|
-
const fullName =
|
|
184
|
+
const fullName = QualifiedNameGenerator.forMember(scopeName, varName);
|
|
184
185
|
// Issue #282: Add 'const' modifier for const variables
|
|
185
186
|
const constPrefix = isConst ? "const " : "";
|
|
186
187
|
const prefix = isPrivate ? "static " : "";
|
|
@@ -216,7 +217,11 @@ function generateScopeFunction(
|
|
|
216
217
|
): string[] {
|
|
217
218
|
const returnType = orchestrator.generateType(funcDecl.type());
|
|
218
219
|
const funcName = funcDecl.IDENTIFIER().getText();
|
|
219
|
-
|
|
220
|
+
// Use QualifiedNameGenerator for consistent C-style name generation
|
|
221
|
+
const fullName = QualifiedNameGenerator.forFunctionStrings(
|
|
222
|
+
scopeName,
|
|
223
|
+
funcName,
|
|
224
|
+
);
|
|
220
225
|
const prefix = isPrivate ? "static " : "";
|
|
221
226
|
|
|
222
227
|
// Issue #269: Set current function name for pass-by-value lookup
|
|
@@ -274,7 +279,11 @@ function generateEnumMembersFromAST(
|
|
|
274
279
|
for (let i = 0; i < members.length; i++) {
|
|
275
280
|
const member = members[i];
|
|
276
281
|
const memberName = member.IDENTIFIER().getText();
|
|
277
|
-
|
|
282
|
+
// Enum members use the full enum name as their "scope"
|
|
283
|
+
const fullMemberName = QualifiedNameGenerator.forMember(
|
|
284
|
+
fullName,
|
|
285
|
+
memberName,
|
|
286
|
+
);
|
|
278
287
|
|
|
279
288
|
if (member.expression()) {
|
|
280
289
|
const constValue = orchestrator.tryEvaluateConstant(member.expression()!);
|
|
@@ -421,7 +430,11 @@ function generateScopedEnumInline(
|
|
|
421
430
|
const memberEntries = Array.from(symbolMembers.entries());
|
|
422
431
|
for (let i = 0; i < memberEntries.length; i++) {
|
|
423
432
|
const [memberName, value] = memberEntries[i];
|
|
424
|
-
|
|
433
|
+
// Enum members use the full enum name as their "scope"
|
|
434
|
+
const fullMemberName = QualifiedNameGenerator.forMember(
|
|
435
|
+
fullName,
|
|
436
|
+
memberName,
|
|
437
|
+
);
|
|
425
438
|
const comma = i < memberEntries.length - 1 ? "," : "";
|
|
426
439
|
lines.push(` ${fullMemberName} = ${value}${comma}`);
|
|
427
440
|
}
|
|
@@ -500,7 +513,7 @@ function generateScopedBitmapInline(
|
|
|
500
513
|
input: IGeneratorInput,
|
|
501
514
|
): string {
|
|
502
515
|
const name = node.IDENTIFIER().getText();
|
|
503
|
-
const fullName =
|
|
516
|
+
const fullName = QualifiedNameGenerator.forMember(scopeName, name);
|
|
504
517
|
const backingType = _getBitmapBackingType(fullName, node, input);
|
|
505
518
|
|
|
506
519
|
const lines: string[] = [];
|
package/src/transpiler/output/codegen/generators/declarationGenerators/ScopedRegisterGenerator.ts
CHANGED
|
@@ -14,6 +14,7 @@ import IGeneratorState from "../IGeneratorState";
|
|
|
14
14
|
import IGeneratorOutput from "../IGeneratorOutput";
|
|
15
15
|
import IOrchestrator from "../IOrchestrator";
|
|
16
16
|
import generateRegisterMacros from "./RegisterMacroGenerator";
|
|
17
|
+
import QualifiedNameGenerator from "../../utils/QualifiedNameGenerator";
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Generate register macros with scope prefix.
|
|
@@ -26,12 +27,12 @@ const generateScopedRegister = (
|
|
|
26
27
|
orchestrator: IOrchestrator,
|
|
27
28
|
): IGeneratorOutput => {
|
|
28
29
|
const name = node.IDENTIFIER().getText();
|
|
29
|
-
const fullName =
|
|
30
|
+
const fullName = QualifiedNameGenerator.forMember(scopeName, name); // Teensy4_GPIO7
|
|
30
31
|
const baseAddress = orchestrator.generateExpression(node.expression());
|
|
31
32
|
|
|
32
33
|
// Type resolver for scoped bitmaps (e.g., GPIO7Pins -> Teensy4_GPIO7Pins)
|
|
33
34
|
const resolveType = (regType: string): string | undefined => {
|
|
34
|
-
const scopedTypeName =
|
|
35
|
+
const scopedTypeName = QualifiedNameGenerator.forMember(scopeName, regType);
|
|
35
36
|
return input.symbols?.knownBitmaps.has(scopedTypeName)
|
|
36
37
|
? scopedTypeName
|
|
37
38
|
: undefined;
|
|
@@ -17,6 +17,7 @@ import IGeneratorInput from "../IGeneratorInput";
|
|
|
17
17
|
import IGeneratorState from "../IGeneratorState";
|
|
18
18
|
import IOrchestrator from "../IOrchestrator";
|
|
19
19
|
import CallExprUtils from "./CallExprUtils";
|
|
20
|
+
import CodeGenState from "../../../../state/CodeGenState";
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Issue #304: Wrap argument with static_cast if it's a C++ enum class
|
|
@@ -80,7 +81,7 @@ const _generateCFunctionArg = (
|
|
|
80
81
|
// Issue #322: If getExpressionType returns null (e.g., for this.member),
|
|
81
82
|
// fall back to looking up the generated code in the type registry
|
|
82
83
|
if (!argType && !argCode.startsWith("&")) {
|
|
83
|
-
const typeInfo =
|
|
84
|
+
const typeInfo = CodeGenState.getVariableTypeInfo(argCode);
|
|
84
85
|
if (typeInfo) {
|
|
85
86
|
argType = typeInfo.baseType;
|
|
86
87
|
}
|
|
@@ -119,8 +120,15 @@ const _shouldPassByValue = (
|
|
|
119
120
|
funcExpr,
|
|
120
121
|
idx,
|
|
121
122
|
);
|
|
122
|
-
|
|
123
|
-
|
|
123
|
+
|
|
124
|
+
// Issue #786: For cross-file calls, check if parameter is a known primitive type.
|
|
125
|
+
// Known primitives (u8-u64, i8-i64, bool) should always be pass-by-value.
|
|
126
|
+
// This handles the case where local passByValueParams isn't populated for cross-file functions.
|
|
127
|
+
const isCrossFilePrimitive =
|
|
128
|
+
isCrossFile &&
|
|
129
|
+
CallExprUtils.isKnownPrimitiveType(targetParam.baseType) &&
|
|
130
|
+
!orchestrator.isStructType(targetParam.baseType) &&
|
|
131
|
+
!CallExprUtils.isStringType(targetParam.baseType);
|
|
124
132
|
|
|
125
133
|
// Issue #551: Unknown types (external enums, typedefs) use pass-by-value
|
|
126
134
|
const isUnknownType =
|
|
@@ -129,13 +137,13 @@ const _shouldPassByValue = (
|
|
|
129
137
|
!CallExprUtils.isStringType(targetParam.baseType) &&
|
|
130
138
|
!isFloatParam &&
|
|
131
139
|
!isEnumParam &&
|
|
132
|
-
!
|
|
140
|
+
!isCrossFilePrimitive;
|
|
133
141
|
|
|
134
142
|
return (
|
|
135
143
|
isFloatParam ||
|
|
136
144
|
isEnumParam ||
|
|
137
145
|
isPrimitivePassByValue ||
|
|
138
|
-
|
|
146
|
+
isCrossFilePrimitive ||
|
|
139
147
|
isUnknownType
|
|
140
148
|
);
|
|
141
149
|
};
|
|
@@ -259,7 +267,7 @@ const generateSafeDivMod = (
|
|
|
259
267
|
}
|
|
260
268
|
|
|
261
269
|
// Look up the type of the output parameter
|
|
262
|
-
const typeInfo =
|
|
270
|
+
const typeInfo = CodeGenState.getVariableTypeInfo(outputArgId);
|
|
263
271
|
if (!typeInfo) {
|
|
264
272
|
throw new Error(
|
|
265
273
|
`Cannot determine type of output parameter '${outputArgId}' for ${funcName}`,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import TYPE_MAP from "../../types/TYPE_MAP";
|
|
6
6
|
import IFunctionSignature from "../../types/IFunctionSignature";
|
|
7
7
|
import SymbolTable from "../../../../logic/symbols/SymbolTable";
|
|
8
|
-
import
|
|
8
|
+
import TypeResolver from "../../../../../utils/TypeResolver";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Issue #315: Small primitive types that are always passed by value.
|
|
@@ -88,12 +88,18 @@ class CallExprUtils {
|
|
|
88
88
|
if (symbolTable) {
|
|
89
89
|
const symbols = symbolTable.getOverloads(funcName);
|
|
90
90
|
for (const sym of symbols) {
|
|
91
|
-
if (sym.kind ===
|
|
91
|
+
if (sym.kind === "function" && sym.parameters?.[paramIndex]) {
|
|
92
92
|
const p = sym.parameters[paramIndex];
|
|
93
|
+
// Convert TType to string for C-Next symbols, use string directly for C/C++
|
|
94
|
+
const paramType = p.type;
|
|
95
|
+
const baseType =
|
|
96
|
+
typeof paramType === "string"
|
|
97
|
+
? paramType
|
|
98
|
+
: TypeResolver.getTypeName(paramType);
|
|
93
99
|
return {
|
|
94
100
|
param: {
|
|
95
101
|
name: p.name,
|
|
96
|
-
baseType
|
|
102
|
+
baseType,
|
|
97
103
|
isConst: p.isConst,
|
|
98
104
|
isArray: p.isArray,
|
|
99
105
|
},
|
|
@@ -27,6 +27,7 @@ import SubscriptClassifier from "../../subscript/SubscriptClassifier";
|
|
|
27
27
|
import TYPE_WIDTH from "../../types/TYPE_WIDTH";
|
|
28
28
|
import C_TYPE_WIDTH from "../../types/C_TYPE_WIDTH";
|
|
29
29
|
import TTypeInfo from "../../types/TTypeInfo";
|
|
30
|
+
import CodeGenState from "../../../../state/CodeGenState";
|
|
30
31
|
|
|
31
32
|
// ========================================================================
|
|
32
33
|
// Tracking State
|
|
@@ -67,7 +68,7 @@ const initializeTrackingState = (
|
|
|
67
68
|
: false;
|
|
68
69
|
|
|
69
70
|
const primaryBaseType = rootIdentifier
|
|
70
|
-
?
|
|
71
|
+
? CodeGenState.getVariableTypeInfo(rootIdentifier)?.baseType
|
|
71
72
|
: undefined;
|
|
72
73
|
const currentStructType =
|
|
73
74
|
primaryBaseType && orchestrator.isKnownStruct(primaryBaseType)
|
|
@@ -162,7 +163,7 @@ const generatePostfixExpression = (
|
|
|
162
163
|
}
|
|
163
164
|
|
|
164
165
|
const primaryTypeInfo = rootIdentifier
|
|
165
|
-
?
|
|
166
|
+
? CodeGenState.getVariableTypeInfo(rootIdentifier)
|
|
166
167
|
: undefined;
|
|
167
168
|
|
|
168
169
|
const tracking = initializeTrackingState(
|
|
@@ -364,7 +365,7 @@ const handleGlobalPrefix = (
|
|
|
364
365
|
}
|
|
365
366
|
|
|
366
367
|
// Issue #612: Set currentStructType for global struct variables
|
|
367
|
-
const globalTypeInfo =
|
|
368
|
+
const globalTypeInfo = CodeGenState.getVariableTypeInfo(memberName);
|
|
368
369
|
if (globalTypeInfo && orchestrator.isKnownStruct(globalTypeInfo.baseType)) {
|
|
369
370
|
tracking.currentStructType = globalTypeInfo.baseType;
|
|
370
371
|
}
|
|
@@ -396,7 +397,7 @@ const handleThisScopeLength = (
|
|
|
396
397
|
|
|
397
398
|
tracking.result = `${state.currentScope}_${memberName}`;
|
|
398
399
|
tracking.resolvedIdentifier = tracking.result;
|
|
399
|
-
const resolvedTypeInfo =
|
|
400
|
+
const resolvedTypeInfo = CodeGenState.getVariableTypeInfo(tracking.result);
|
|
400
401
|
if (
|
|
401
402
|
resolvedTypeInfo &&
|
|
402
403
|
orchestrator.isKnownStruct(resolvedTypeInfo.baseType)
|
|
@@ -422,7 +423,9 @@ const resolveStringTypeInfo = (
|
|
|
422
423
|
orchestrator: IOrchestrator,
|
|
423
424
|
): TTypeInfo | undefined => {
|
|
424
425
|
const identifier = tracking.resolvedIdentifier ?? rootIdentifier;
|
|
425
|
-
const typeInfo = identifier
|
|
426
|
+
const typeInfo = identifier
|
|
427
|
+
? CodeGenState.getVariableTypeInfo(identifier)
|
|
428
|
+
: undefined;
|
|
426
429
|
if (typeInfo?.isString) {
|
|
427
430
|
return typeInfo;
|
|
428
431
|
}
|
|
@@ -650,7 +653,7 @@ const generateLengthProperty = (
|
|
|
650
653
|
|
|
651
654
|
// Fall back to checking the current resolved identifier's type
|
|
652
655
|
const typeInfo = ctx.resolvedIdentifier
|
|
653
|
-
?
|
|
656
|
+
? CodeGenState.getVariableTypeInfo(ctx.resolvedIdentifier)
|
|
654
657
|
: undefined;
|
|
655
658
|
|
|
656
659
|
if (!typeInfo) {
|
|
@@ -931,7 +934,7 @@ const generateBitLengthProperty = (
|
|
|
931
934
|
|
|
932
935
|
// Get type info for the resolved identifier
|
|
933
936
|
const typeInfo = ctx.resolvedIdentifier
|
|
934
|
-
?
|
|
937
|
+
? CodeGenState.getVariableTypeInfo(ctx.resolvedIdentifier)
|
|
935
938
|
: undefined;
|
|
936
939
|
|
|
937
940
|
if (!typeInfo) {
|
|
@@ -1185,7 +1188,7 @@ const generateByteLengthProperty = (
|
|
|
1185
1188
|
|
|
1186
1189
|
// Get type info for the resolved identifier
|
|
1187
1190
|
const typeInfo = ctx.resolvedIdentifier
|
|
1188
|
-
?
|
|
1191
|
+
? CodeGenState.getVariableTypeInfo(ctx.resolvedIdentifier)
|
|
1189
1192
|
: undefined;
|
|
1190
1193
|
|
|
1191
1194
|
if (!typeInfo) {
|
|
@@ -1251,10 +1254,10 @@ const generateStructFieldElementCount = (
|
|
|
1251
1254
|
*/
|
|
1252
1255
|
const generateTypeInfoElementCount = (
|
|
1253
1256
|
ctx: IExplicitLengthContext,
|
|
1254
|
-
|
|
1257
|
+
_input: IGeneratorInput,
|
|
1255
1258
|
): string => {
|
|
1256
1259
|
const typeInfo = ctx.resolvedIdentifier
|
|
1257
|
-
?
|
|
1260
|
+
? CodeGenState.getVariableTypeInfo(ctx.resolvedIdentifier)
|
|
1258
1261
|
: undefined;
|
|
1259
1262
|
|
|
1260
1263
|
if (!typeInfo) {
|
|
@@ -1350,7 +1353,7 @@ const generateCharCountProperty = (
|
|
|
1350
1353
|
|
|
1351
1354
|
// Get type info
|
|
1352
1355
|
const typeInfo = ctx.resolvedIdentifier
|
|
1353
|
-
?
|
|
1356
|
+
? CodeGenState.getVariableTypeInfo(ctx.resolvedIdentifier)
|
|
1354
1357
|
: undefined;
|
|
1355
1358
|
|
|
1356
1359
|
if (!typeInfo) {
|
|
@@ -1484,7 +1487,7 @@ const tryBitmapFieldAccess = (
|
|
|
1484
1487
|
if (!ctx.rootIdentifier) {
|
|
1485
1488
|
return null;
|
|
1486
1489
|
}
|
|
1487
|
-
const typeInfo =
|
|
1490
|
+
const typeInfo = CodeGenState.getVariableTypeInfo(ctx.rootIdentifier);
|
|
1488
1491
|
if (!typeInfo?.isBitmap || !typeInfo.bitmapTypeName) {
|
|
1489
1492
|
return null;
|
|
1490
1493
|
}
|
|
@@ -1525,7 +1528,7 @@ const tryScopeMemberAccess = (
|
|
|
1525
1528
|
output.result = fullName;
|
|
1526
1529
|
output.resolvedIdentifier = fullName;
|
|
1527
1530
|
if (!input.symbols!.knownEnums.has(fullName)) {
|
|
1528
|
-
const resolvedTypeInfo =
|
|
1531
|
+
const resolvedTypeInfo = CodeGenState.getVariableTypeInfo(fullName);
|
|
1529
1532
|
if (
|
|
1530
1533
|
resolvedTypeInfo &&
|
|
1531
1534
|
orchestrator.isKnownStruct(resolvedTypeInfo.baseType)
|
|
@@ -1569,7 +1572,7 @@ const tryKnownScopeAccess = (
|
|
|
1569
1572
|
const output = initializeMemberOutput(ctx);
|
|
1570
1573
|
output.result = `${ctx.result}${orchestrator.getScopeSeparator(ctx.isCppAccessChain)}${ctx.memberName}`;
|
|
1571
1574
|
output.resolvedIdentifier = output.result;
|
|
1572
|
-
const resolvedTypeInfo =
|
|
1575
|
+
const resolvedTypeInfo = CodeGenState.getVariableTypeInfo(output.result);
|
|
1573
1576
|
if (
|
|
1574
1577
|
resolvedTypeInfo &&
|
|
1575
1578
|
orchestrator.isKnownStruct(resolvedTypeInfo.baseType)
|
|
@@ -1920,11 +1923,11 @@ const checkRegisterAccess = (
|
|
|
1920
1923
|
*/
|
|
1921
1924
|
const getIdentifierTypeInfo = (
|
|
1922
1925
|
ctx: ISubscriptAccessContext,
|
|
1923
|
-
|
|
1926
|
+
_input: IGeneratorInput,
|
|
1924
1927
|
): TTypeInfo | undefined => {
|
|
1925
1928
|
const identifierToCheck = ctx.resolvedIdentifier || ctx.rootIdentifier;
|
|
1926
1929
|
return identifierToCheck
|
|
1927
|
-
?
|
|
1930
|
+
? CodeGenState.getVariableTypeInfo(identifierToCheck)
|
|
1928
1931
|
: undefined;
|
|
1929
1932
|
};
|
|
1930
1933
|
|
package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprGenerator.test.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
2
|
import generateFunctionCall from "../CallExprGenerator";
|
|
3
3
|
import IGeneratorInput from "../../IGeneratorInput";
|
|
4
4
|
import IGeneratorState from "../../IGeneratorState";
|
|
5
5
|
import IOrchestrator from "../../IOrchestrator";
|
|
6
6
|
import * as Parser from "../../../../../logic/parser/grammar/CNextParser";
|
|
7
|
-
import
|
|
7
|
+
import CodeGenState from "../../../../../state/CodeGenState";
|
|
8
|
+
import TTypeInfo from "../../../types/TTypeInfo";
|
|
8
9
|
|
|
9
10
|
// ========================================================================
|
|
10
11
|
// Test Helpers
|
|
@@ -27,10 +28,18 @@ function createMockArgListContext(
|
|
|
27
28
|
function createMockInput(
|
|
28
29
|
overrides: Partial<IGeneratorInput> = {},
|
|
29
30
|
): IGeneratorInput {
|
|
31
|
+
// Also populate CodeGenState with the type registry entries
|
|
32
|
+
// This is needed because CallExprGenerator now uses CodeGenState directly
|
|
33
|
+
const typeRegistry =
|
|
34
|
+
(overrides.typeRegistry as Map<string, TTypeInfo>) ?? new Map();
|
|
35
|
+
for (const [name, info] of typeRegistry) {
|
|
36
|
+
CodeGenState.setVariableTypeInfo(name, info);
|
|
37
|
+
}
|
|
38
|
+
|
|
30
39
|
return {
|
|
31
40
|
symbols: null,
|
|
32
41
|
symbolTable: null,
|
|
33
|
-
typeRegistry
|
|
42
|
+
typeRegistry,
|
|
34
43
|
functionSignatures: new Map(),
|
|
35
44
|
knownFunctions: new Set(),
|
|
36
45
|
knownStructs: new Set(),
|
|
@@ -94,6 +103,11 @@ function createMockOrchestrator(
|
|
|
94
103
|
// ========================================================================
|
|
95
104
|
|
|
96
105
|
describe("CallExprGenerator", () => {
|
|
106
|
+
// Reset CodeGenState before each test to avoid state pollution
|
|
107
|
+
beforeEach(() => {
|
|
108
|
+
CodeGenState.reset();
|
|
109
|
+
});
|
|
110
|
+
|
|
97
111
|
describe("empty function call", () => {
|
|
98
112
|
it("generates call with no arguments when argCtx is null", () => {
|
|
99
113
|
const input = createMockInput();
|
|
@@ -756,13 +770,13 @@ describe("CallExprGenerator", () => {
|
|
|
756
770
|
});
|
|
757
771
|
|
|
758
772
|
describe("cross-file function calls (Issue #315)", () => {
|
|
759
|
-
it("looks up parameter info from SymbolTable
|
|
773
|
+
it("looks up parameter info from SymbolTable and passes primitives by value (Issue #786)", () => {
|
|
760
774
|
const argExprs = [createMockExpressionContext("myVal")];
|
|
761
775
|
const argCtx = createMockArgListContext(argExprs);
|
|
762
776
|
const symbolTable = {
|
|
763
777
|
getOverloads: vi.fn(() => [
|
|
764
778
|
{
|
|
765
|
-
kind:
|
|
779
|
+
kind: "function",
|
|
766
780
|
parameters: [
|
|
767
781
|
{ name: "val", type: "u32", isConst: false, isArray: false },
|
|
768
782
|
],
|
|
@@ -777,6 +791,7 @@ describe("CallExprGenerator", () => {
|
|
|
777
791
|
isCNextFunction: vi.fn(() => true),
|
|
778
792
|
isFloatType: vi.fn(() => false),
|
|
779
793
|
isParameterPassByValue: vi.fn(() => false),
|
|
794
|
+
isStructType: vi.fn(() => false),
|
|
780
795
|
});
|
|
781
796
|
|
|
782
797
|
const result = generateFunctionCall(
|
|
@@ -788,7 +803,8 @@ describe("CallExprGenerator", () => {
|
|
|
788
803
|
);
|
|
789
804
|
|
|
790
805
|
expect(symbolTable.getOverloads).toHaveBeenCalledWith("crossFileFunc");
|
|
791
|
-
|
|
806
|
+
// Issue #786: Primitive types like u32 are now passed by value for cross-file calls
|
|
807
|
+
expect(result.code).toBe("crossFileFunc(myVal)");
|
|
792
808
|
});
|
|
793
809
|
|
|
794
810
|
it("passes small primitive by value for cross-file functions", () => {
|
|
@@ -797,7 +813,7 @@ describe("CallExprGenerator", () => {
|
|
|
797
813
|
const symbolTable = {
|
|
798
814
|
getOverloads: vi.fn(() => [
|
|
799
815
|
{
|
|
800
|
-
kind:
|
|
816
|
+
kind: "function",
|
|
801
817
|
parameters: [
|
|
802
818
|
{ name: "f", type: "u8", isConst: false, isArray: false },
|
|
803
819
|
],
|
|
@@ -831,7 +847,7 @@ describe("CallExprGenerator", () => {
|
|
|
831
847
|
const argCtx = createMockArgListContext(argExprs);
|
|
832
848
|
const symbolTable = {
|
|
833
849
|
getOverloads: vi.fn(() => [
|
|
834
|
-
{ kind:
|
|
850
|
+
{ kind: "variable", parameters: undefined },
|
|
835
851
|
]),
|
|
836
852
|
};
|
|
837
853
|
const input = createMockInput({
|
package/src/transpiler/output/codegen/generators/expressions/__tests__/CallExprUtils.test.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from "vitest";
|
|
2
2
|
import CallExprUtils from "../CallExprUtils";
|
|
3
|
-
import ESymbolKind from "../../../../../../utils/types/ESymbolKind";
|
|
4
3
|
|
|
5
4
|
describe("CallExprUtils", () => {
|
|
6
5
|
describe("mapTypeToCType", () => {
|
|
@@ -166,7 +165,7 @@ describe("CallExprUtils", () => {
|
|
|
166
165
|
const symbolTable = {
|
|
167
166
|
getOverloads: vi.fn(() => [
|
|
168
167
|
{
|
|
169
|
-
kind:
|
|
168
|
+
kind: "function",
|
|
170
169
|
parameters: [
|
|
171
170
|
{ name: "val", type: "i32", isConst: true, isArray: false },
|
|
172
171
|
],
|
|
@@ -193,10 +192,7 @@ describe("CallExprUtils", () => {
|
|
|
193
192
|
|
|
194
193
|
it("skips non-function symbols in SymbolTable", () => {
|
|
195
194
|
const symbolTable = {
|
|
196
|
-
getOverloads: vi.fn(() => [
|
|
197
|
-
{ kind: ESymbolKind.Variable },
|
|
198
|
-
{ kind: ESymbolKind.Struct },
|
|
199
|
-
]),
|
|
195
|
+
getOverloads: vi.fn(() => [{ kind: "variable" }, { kind: "struct" }]),
|
|
200
196
|
};
|
|
201
197
|
|
|
202
198
|
const result = CallExprUtils.resolveTargetParam(
|
|
@@ -214,7 +210,7 @@ describe("CallExprUtils", () => {
|
|
|
214
210
|
const symbolTable = {
|
|
215
211
|
getOverloads: vi.fn(() => [
|
|
216
212
|
{
|
|
217
|
-
kind:
|
|
213
|
+
kind: "function",
|
|
218
214
|
parameters: [
|
|
219
215
|
{ name: "a", type: "u8", isConst: false, isArray: false },
|
|
220
216
|
],
|
|
@@ -243,7 +239,7 @@ describe("CallExprUtils", () => {
|
|
|
243
239
|
const symbolTable = {
|
|
244
240
|
getOverloads: vi.fn(() => [
|
|
245
241
|
{
|
|
246
|
-
kind:
|
|
242
|
+
kind: "function",
|
|
247
243
|
parameters: [
|
|
248
244
|
{ name: "remote", type: "i64", isConst: true, isArray: false },
|
|
249
245
|
],
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* - Property access (.length, .capacity, .size)
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import { describe, it, expect, vi } from "vitest";
|
|
12
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
13
13
|
import generatePostfixExpression from "../PostfixExpressionGenerator";
|
|
14
14
|
import type IGeneratorInput from "../../IGeneratorInput";
|
|
15
15
|
import type IGeneratorState from "../../IGeneratorState";
|
|
@@ -18,6 +18,7 @@ import type ICodeGenSymbols from "../../../../../types/ICodeGenSymbols";
|
|
|
18
18
|
import type TTypeInfo from "../../../types/TTypeInfo";
|
|
19
19
|
import type TParameterInfo from "../../../types/TParameterInfo";
|
|
20
20
|
import * as Parser from "../../../../../logic/parser/grammar/CNextParser";
|
|
21
|
+
import CodeGenState from "../../../../../state/CodeGenState";
|
|
21
22
|
|
|
22
23
|
// ========================================================================
|
|
23
24
|
// Test Helpers - Mock Symbols
|
|
@@ -64,10 +65,17 @@ function createMockInput(overrides?: {
|
|
|
64
65
|
symbols?: ICodeGenSymbols;
|
|
65
66
|
typeRegistry?: Map<string, TTypeInfo>;
|
|
66
67
|
}): IGeneratorInput {
|
|
68
|
+
// Also populate CodeGenState with the type registry entries
|
|
69
|
+
// This is needed because PostfixExpressionGenerator now uses CodeGenState directly
|
|
70
|
+
const typeRegistry = overrides?.typeRegistry ?? new Map<string, TTypeInfo>();
|
|
71
|
+
for (const [name, info] of typeRegistry) {
|
|
72
|
+
CodeGenState.setVariableTypeInfo(name, info);
|
|
73
|
+
}
|
|
74
|
+
|
|
67
75
|
return {
|
|
68
76
|
symbolTable: null,
|
|
69
77
|
symbols: overrides?.symbols ?? createMockSymbols(),
|
|
70
|
-
typeRegistry
|
|
78
|
+
typeRegistry,
|
|
71
79
|
functionSignatures: new Map(),
|
|
72
80
|
knownFunctions: new Set(),
|
|
73
81
|
knownStructs: new Set(),
|
|
@@ -290,6 +298,11 @@ function createMockPostfixExpressionContext(
|
|
|
290
298
|
// ========================================================================
|
|
291
299
|
|
|
292
300
|
describe("PostfixExpressionGenerator", () => {
|
|
301
|
+
// Reset CodeGenState before each test to avoid state pollution
|
|
302
|
+
beforeEach(() => {
|
|
303
|
+
CodeGenState.reset();
|
|
304
|
+
});
|
|
305
|
+
|
|
293
306
|
describe("basic expression generation", () => {
|
|
294
307
|
it("generates simple identifier", () => {
|
|
295
308
|
const ctx = createMockPostfixExpressionContext("x", []);
|