Skip to content

Commit d526c2e

Browse files
committed
Fix type resolution failures on class reference constructors
1 parent 87d6f98 commit d526c2e

File tree

4 files changed

+6
-1
lines changed

4 files changed

+6
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515

1616
- Name resolution failures on generic routine invocations where later type parameters are constrained by earlier type parameters.
1717
- Type resolution failures on `as` casts where the type is returned from a routine invocation.
18+
- Inaccurate type resolution when calling a constructor on a class reference type.
1819

1920
## [1.16.0] - 2025-05-09
2021

delphi-frontend/src/main/java/au/com/integradev/delphi/symbol/resolve/NameResolver.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,6 +1113,9 @@ private void resolveReturnType(Invocable invocable, List<InvocationArgument> arg
11131113
returnType = ((IntrinsicReturnType) returnType).getReturnType(argumentTypes);
11141114
}
11151115
updateType(returnType);
1116+
} else if (currentType.isClassReference()) {
1117+
// Calling the constructor on a class reference type returns an instance of that class
1118+
updateType(((ClassReferenceType) currentType).classType());
11161119
}
11171120
}
11181121

delphi-frontend/src/test/java/au/com/integradev/delphi/executor/DelphiSymbolTableExecutorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ void testClassReferenceArgumentResolution() {
458458
@Test
459459
void testClassReferenceConstructorTypeResolution() {
460460
execute("classReferences/ConstructorTypeResolution.pas");
461-
verifyUsages(15, 10, reference(22, 2));
461+
verifyUsages(15, 10, reference(22, 2), reference(23, 2));
462462
verifyUsages(8, 16, reference(22, 11));
463463
}
464464

delphi-frontend/src/test/resources/au/com/integradev/delphi/symbol/classReferences/ConstructorTypeResolution.pas

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ procedure Proc(Obj: TObject);
2020
procedure Test(Bar: Boolean; Baz: TMetaFoo);
2121
begin
2222
Proc(Baz.Create(Bar));
23+
Proc(TMetaFoo.Create(Bar));
2324
end;
2425

2526
end.

0 commit comments

Comments
 (0)