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