浏览代码

fpdoc: free TPasElement instead of reference count

mattias 3 年之前
父节点
当前提交
acc8c69cf5
共有 1 个文件被更改,包括 8 次插入10 次删除
  1. 8 10
      utils/fpdoc/dglobals.pp

+ 8 - 10
utils/fpdoc/dglobals.pp

@@ -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);