diff options
author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2017-04-27 15:54:03 +0000 |
---|---|---|
committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2017-04-27 15:54:03 +0000 |
commit | ee7ffd644aa145ca53dd7f5df419ccc89d073a4f (patch) | |
tree | 29a15aa80031db4573cb9564d7534782ee618525 /utils | |
parent | fed928a4c24549ca77599f9e73dc6a2517f84acc (diff) | |
download | fpc-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.pp | 1 | ||||
-rw-r--r-- | utils/fpdoc/fpclasschart.pp | 10 | ||||
-rw-r--r-- | utils/fpdoc/fpdocclasstree.pp | 38 |
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; |