fpdoc: free TPasElement instead of reference count

This commit is contained in:
mattias 2022-06-09 16:21:24 +02:00
parent eae098ae3e
commit acc8c69cf5

View File

@ -474,12 +474,7 @@ begin
end;
destructor TFPDocEngine.Destroy;
var
i: Integer;
begin
if FPackages.Count > 0 then
for i := 0 to FPackages.Count - 1 do
TPasPackage(FPackages[i]).Release{$IFDEF CheckPasTreeRefCount}('TFPDocEngine.Destroy'){$ENDIF};
FreeAndNil(FPackages);
FreeAndNil(FRootDocNode);
FreeAndNil(FRootLinkNode);
@ -567,14 +562,14 @@ var
end;
end;
function ResolvePackageModule(AName:String;out pkg:TPasPackage;out module:TPasModule;createnew:boolean):String;
function ResolvePackageModule(AName: String; out pkg: TPasPackage; out Module: TPasModule; CreateNew: boolean): String;
var
DotPos, DotPos2, i: Integer;
s: String;
HPackage: TPasPackage;
begin
pkg:=nil; module:=nil; result:='';
pkg:=nil; Module:=nil; result:='';
// Find or create package
DotPos := Pos('.', AName);
@ -595,7 +590,7 @@ var
FPackages.Add(HPackage);
end;
// Find or create module
// Find or create Module
DotPos2 := DotPos;
repeat
Inc(DotPos2);
@ -613,8 +608,10 @@ var
if not CreateNew then
exit;
Module := TPasExternalModule.Create(s, HPackage);
FOwnedElements.Add(Module);
HPackage.Modules.Add(Module);
Module.InterfaceSection := TInterfaceSection.Create('', Module);
FOwnedElements.Add(Module.InterfaceSection);
Module.PackageName:= HPackage.Name;
end;
pkg:=hpackage;
@ -674,6 +671,7 @@ var
s:= ResolvePackageModule(AName,HPackage,Module,True);
// Create node for class
Result := TPasExternalClassType.Create(s, Module.InterfaceSection);
FOwnedElements.Add(Result);
Result.ObjKind := okClass;
Module.InterfaceSection.Declarations.Add(Result);
Module.InterfaceSection.Classes.Add(Result);
@ -703,7 +701,6 @@ var
result:=TPasClassType(ResolveClassType(clname));
if assigned(result) and not (cls=result) then // save from tobject=implicit tobject
begin
result.addref{$IFDEF CheckPasTreeRefCount}('ReadContentFile.ResolveAndLinkClass'){$ENDIF};
if IsClass then
begin
cls.ancestortype:=result;
@ -745,7 +742,6 @@ var
Result := TPasAliasType(CreateElement(TPasAliasType,s,module.interfacesection,vispublic,'',0));
module.interfacesection.Declarations.Add(Result);
TPasAliasType(Result).DestType := cl2;
cl2.addref{$IFDEF CheckPasTreeRefCount}('ReadContentFile.CreateAliasType'){$ENDIF};
end
end
end;
@ -838,6 +834,7 @@ var
else
raise Exception.Create('Invalid member type: ' + s[2]);
end;
FOwnedElements.Add(Member);
CurClass.Members.Add(Member);
end;
end;
@ -1016,6 +1013,7 @@ function TFPDocEngine.CreateElement(AClass: TPTreeElement; const AName: String;
const ASourceFilename: String; ASourceLinenumber: Integer): TPasElement;
begin
Result := AClass.Create(AName, AParent);
FOwnedElements.Add(Result);
Result.Visibility := AVisibility;
if AClass.InheritsFrom(TPasModule) then
CurModule := TPasModule(Result);