summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2017-04-27 15:54:03 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2017-04-27 15:54:03 +0000
commitee7ffd644aa145ca53dd7f5df419ccc89d073a4f (patch)
tree29a15aa80031db4573cb9564d7534782ee618525 /utils
parentfed928a4c24549ca77599f9e73dc6a2517f84acc (diff)
downloadfpc-ee7ffd644aa145ca53dd7f5df419ccc89d073a4f.tar.gz
--- Merging r31365 into '.':
U utils/fpdoc/fpclasschart.pp C utils/fpdoc/fpdocclasstree.pp U utils/fpdoc/dglobals.pp --- Recording mergeinfo for merge of r31365 into '.': U . Summary of conflicts: Text conflicts: 1 # revisions: 31365 git-svn-id: http://svn.freepascal.org/svn/fpc/branches/fixes_3_0@35969 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'utils')
-rw-r--r--utils/fpdoc/dglobals.pp1
-rw-r--r--utils/fpdoc/fpclasschart.pp10
-rw-r--r--utils/fpdoc/fpdocclasstree.pp38
3 files changed, 32 insertions, 17 deletions
diff --git a/utils/fpdoc/dglobals.pp b/utils/fpdoc/dglobals.pp
index f4e4e2fdaf..3f06445a34 100644
--- a/utils/fpdoc/dglobals.pp
+++ b/utils/fpdoc/dglobals.pp
@@ -633,6 +633,7 @@ begin
FreeAndNil(DescrDocNames);
FreeAndNil(DescrDocs);
FreeAndNil(FAlwaysVisible);
+ FreeAndNil(FPackages);
inherited Destroy;
end;
diff --git a/utils/fpdoc/fpclasschart.pp b/utils/fpdoc/fpclasschart.pp
index a3a68f64e9..24b139decc 100644
--- a/utils/fpdoc/fpclasschart.pp
+++ b/utils/fpdoc/fpclasschart.pp
@@ -91,9 +91,6 @@ type
{ TClassTreeBuilder }
-
-
-
{ TChartFormatter }
constructor TClassChartFormatter.Create(AXML: TXMLDocument);
@@ -444,7 +441,10 @@ begin
if AClass.InheritsFrom(TPasModule) then
CurModule := TPasModule(Result);
If AClass.InheritsFrom(TPasClassType) then
+ begin
FObjects.AddObject(AName,Result);
+ // Writeln('Added : ',AName);
+ end;
end;
Constructor TClassTreeEngine.Create(AClassTree : TXMLDocument; AObjectKind : TPasObjKind);
@@ -459,6 +459,8 @@ end;
destructor TClassTreeEngine.Destroy;
begin
+ FreeAndNil(FTree);
+ FreeAndNil(FPackage);
FreeAndNil(FObjects);
inherited Destroy;
end;
@@ -545,7 +547,7 @@ begin
ParseSource(Engine,InputFiles[I],OSTarget,CPUTarget);
ACount:=ACount+Engine.Ftree.BuildTree(Engine.FObjects);
Finally
- Engine.Free;
+ FreeAndNil(Engine);
end;
end;
Case OutputFormat of
diff --git a/utils/fpdoc/fpdocclasstree.pp b/utils/fpdoc/fpdocclasstree.pp
index d383a1721f..2cfe865463 100644
--- a/utils/fpdoc/fpdocclasstree.pp
+++ b/utils/fpdoc/fpdocclasstree.pp
@@ -18,7 +18,7 @@ Type
Protected
function LookForElement(PE: TDomElement; AElement: TPasElement; NoPath : Boolean): TDomNode;
function NodeMatch(N: TDomNode; AElement: TPasElement; NoPath : Boolean): Boolean;
- Function AddToClassTree(AElement : TPasElement; ACount : Integer) : TDomElement;
+ Function AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement;
Public
Constructor Create(APackage : TPasPackage; AObjectKind : TPasObjKind = okClass);
Destructor Destroy; override;
@@ -49,6 +49,7 @@ end;
destructor TClassTreeBuilder.Destroy;
begin
+ FreeAndNil(FParentObject);
FreeAndNil(FClassTree);
Inherited;
end;
@@ -63,11 +64,9 @@ begin
AObjects.Sorted:=True;
For I:=0 to AObjects.Count-1 do
begin
- PC:=TPasClassType(AObjects.Objects[i]);
+ PC:=AObjects.Objects[i] as TPasClassType;
If (PC.ObjKind=FObjectKind) and Not PC.IsForward then
- begin
- AddToClassTree(PC as TPasElement,Result)
- end;
+ AddToClassTree(PC,Result);
end;
end;
@@ -92,7 +91,7 @@ begin
else
PN:=FPackage.Name;
S:=PN+'.'+TDomElement(N)['unit']+'.'+S;
- Result:= (CompareText(S,AElement.PathName)=0);
+ Result:=(CompareText(S,AElement.PathName)=0);
end;
end;
end;
@@ -103,6 +102,7 @@ Var
N : TDomNode;
begin
+// Writeln('Enter TClassTreeBuilderLookForElement');
Result:=PE;
While (Result<>Nil) and Not NodeMatch(Result,AElement,NoPath) do
Result:=Result.NextSibling;
@@ -119,9 +119,10 @@ begin
N:=N.NextSibling;
end;
end;
+// Writeln('Exit TClassTreeBuilderLookForElement');
end;
-Function TClassTreeBuilder.AddToClassTree(AElement : TPasElement; ACount : Integer) : TDomElement;
+Function TClassTreeBuilder.AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement;
// there are several codepaths that use uninitialized variables. (N,PE)
// I initialized them to nil to at least make failures deterministic.
Var
@@ -129,10 +130,11 @@ Var
PE : TDomElement;
M : TPasModule;
N : TDomNode;
- PF : String;
begin
- PF:=StringOfChar(' ',ACount);
+ //Writeln('Enter TClassTreeBuilder.AddToClassTree');
+ //if Assigned(AElement) then
+ //Writeln('Addtoclasstree : ',aElement.Name);
Result:=Nil; N:=Nil;PE:=NIL;
If (AElement=Nil) then
begin
@@ -154,14 +156,18 @@ begin
else
begin
PC:=AElement as TPasClassType;
- PE:=AddToClassTree(PC.AncestorType,ACount+1);
+ PE:=AddToClassTree(PC.AncestorType,ACount);
if PE=Nil then
PE:=FTreeStart;
N:=LookForElement(PE,PC,False);
end
end;
If (N<>Nil) then
+ begin
+// if Assigned(PC) then
+// Writeln(PC.Name,' already in tree');
Result:=N as TDomElement
+ end
else if AElement.Name<>'' then
begin // N=NIL, PE might be nil.
Inc(ACount);
@@ -172,9 +178,15 @@ begin
if Assigned(M) then
Result['unit']:=M.Name;
end;
- if assigned(PE) then // if not assigned, probably needs to be
- // assigned to something else.
- PE.AppendChild(Result);
+ if PE=Nil then
+ begin
+ //Writeln('PE = nil detected for ',AElement.PathName);
+ PE:=FTreeStart
+ end;
+ //Writeln('Appending to ',PE.NodeName);
+ // if not assigned, probably needs to be assigned to something else.
+ if assigned(PE) then
+ PE.AppendChild(Result);
end;
end;