|
@@ -636,6 +636,8 @@ type
|
|
|
{ TPasArrayType }
|
|
|
|
|
|
TPasArrayType = class(TPasGenericType)
|
|
|
+ protected
|
|
|
+ procedure SetParent(const AValue: TPasElement); override;
|
|
|
public
|
|
|
destructor Destroy; override;
|
|
|
function ElementTypeName: string; override;
|
|
@@ -3132,6 +3134,28 @@ begin
|
|
|
inherited Destroy;
|
|
|
end;
|
|
|
|
|
|
+procedure TPasArrayType.SetParent(const AValue: TPasElement);
|
|
|
+var
|
|
|
+ CurArr: TPasArrayType;
|
|
|
+begin
|
|
|
+ if (AValue=nil) and (Parent<>nil) then
|
|
|
+ begin
|
|
|
+ // parent is cleared
|
|
|
+ // -> clear all references to this array (releasing loops)
|
|
|
+ CurArr:=Self;
|
|
|
+ while CurArr.ElType is TPasArrayType do
|
|
|
+ begin
|
|
|
+ if CurArr.ElType=Self then
|
|
|
+ begin
|
|
|
+ ReleaseAndNil(TPasElement(CurArr.ElType){$IFDEF CheckPasTreeRefCount},'TPasClassType.AncestorType'{$ENDIF});
|
|
|
+ break;
|
|
|
+ end;
|
|
|
+ CurArr:=TPasArrayType(CurArr.ElType);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ inherited SetParent(AValue);
|
|
|
+end;
|
|
|
+
|
|
|
destructor TPasArrayType.Destroy;
|
|
|
var
|
|
|
i: Integer;
|