git-svn-id: trunk@36320 -
@@ -4289,6 +4289,8 @@ begin
end
else if AncestorType.ClassType<>TPasClassType then
RaiseXExpectedButYFound(20170216151944,'class type',GetTypeDescription(AncestorType),aClass)
+ else if aClass=AncestorType then
+ RaiseMsg(20170525125854,nAncestorCycleDetected,sAncestorCycleDetected,[],aClass)
else
begin
AncestorEl:=TPasClassType(AncestorType);
@@ -51,7 +51,7 @@ interface
uses
Classes, SysUtils, AVL_Tree, PasTree, PScanner,
{$IFDEF VerbosePasAnalyzer}
- PasResolveEval
+ PasResolveEval,
{$ENDIF}
PasResolver;
@@ -349,6 +349,7 @@ type
Procedure TestClass;
Procedure TestClassDefaultInheritance;
Procedure TestClassTripleInheritance;
+ Procedure TestClassInheritanceCycleFail;
Procedure TestClassForward;
Procedure TestClassForwardAsAncestorFail;
Procedure TestClassForwardNotResolved;
@@ -4975,6 +4976,15 @@ begin
ParseProgram;
end;
+procedure TTestResolver.TestClassInheritanceCycleFail;
+begin
+ StartProgram(false);
+ Add([
+ 'type A = class(A)',
+ 'begin']);
+ CheckResolverException('Ancestor cycle detected',nAncestorCycleDetected);
+end;
+
procedure TTestResolver.TestClassForward;
StartProgram(false);