* memleak fixes (merged)

This commit is contained in:
peter 2001-03-25 12:28:22 +00:00
parent 565bfe20a9
commit f05b078507
2 changed files with 67 additions and 15 deletions

View File

@ -263,6 +263,9 @@ implementation
uses
Dos,Drivers,{Views,App,}{$ifndef FPC}strings,{$endif}
{$ifdef DEBUG}
verbose,
{$endif DEBUG}
WUtils,
aasm,globtype,globals,finput,fmodule,comphook;
@ -411,6 +414,7 @@ end;
procedure TSymbolCollection.Insert(Item: Pointer);
begin
TCollection.Insert(Item);
end;
@ -792,7 +796,7 @@ begin
if assigned(Name) then
DisposeStr(Name);
{ if assigned(Params) then
DisposeStr(Params);
DisposeStr(Params); in TypeNames
if assigned(VType) then
DisposeStr(VType);
if assigned(DType) then
@ -812,7 +816,6 @@ begin
S.Read(RelatedTypeID, SizeOf(RelatedTypeID));
S.Read(Flags, SizeOf(Flags));
Name:=S.ReadStr;
Params:=S.ReadStr;
if (Flags and sfHasMemInfo)<>0 then
begin
S.Read(MI,SizeOf(MI));
@ -829,7 +832,7 @@ begin
{ --- items needing fixup --- }
S.Read(DType, SizeOf(DType));
S.Read(VType, SizeOf(VType));
{S.Read(Ancestor, SizeOf(Ancestor));}
S.Read(Params, SizeOf(Params));
end;
procedure TSymbol.Store(var S: TStream);
@ -840,7 +843,6 @@ begin
S.Write(RelatedTypeID, SizeOf(RelatedTypeID));
S.Write(Flags, SizeOf(Flags));
S.WriteStr(Name);
S.WriteStr(Params);
if (Flags and sfHasMemInfo)<>0 then
S.Write(MemInfo^,SizeOf(MemInfo^));
@ -855,7 +857,7 @@ begin
{ --- items needing fixup --- }
S.Write(DType, SizeOf(DType));
S.Write(VType, SizeOf(VType));
{S.Write(Ancestor, SizeOf(Ancestor));}
S.Write(Params, SizeOf(Params));
end;
constructor TExport.Init(const AName: string; AIndex: longint; ASymbol: PSymbol);
@ -1083,10 +1085,10 @@ end;
destructor TSourceFile.Done;
begin
inherited Done;
if assigned(SourceFileName) then DisposeStr(SourceFileName);
if assigned(ObjFileName) then DisposeStr(ObjFileName);
if assigned(PPUFileName) then DisposeStr(PPUFileName);
inherited Done;
end;
function TSourceFile.GetSourceFilename: string;
@ -1568,7 +1570,15 @@ end;
Ref:=Ref^.nextref;
end;
if Assigned(Symbol) then
Owner^.Insert(Symbol);
begin
if not Owner^.Search(Symbol,J) then
Owner^.Insert(Symbol)
else
begin
Dispose(Symbol,done);
Symbol:=nil;
end;
end;
sym:=pstoredsym(sym^.indexnext);
end;
end;
@ -1769,7 +1779,8 @@ begin
Dispose(D,Done);
{ --- Build object tree --- }
if assigned(ObjectTree) then Dispose(ObjectTree, Done);
if assigned(ObjectTree) then
Dispose(ObjectTree, Done);
New(ObjectsSymbol, InitName('Objects'));
ObjectTree:=ObjectsSymbol;
@ -1823,7 +1834,10 @@ var m: tmodule;
source: string;
begin
if Assigned(SourceFiles) then
begin Dispose(SourceFiles, Done); SourceFiles:=nil; end;
begin
Dispose(SourceFiles, Done);
SourceFiles:=nil;
end;
if assigned(loaded_units.first) then
begin
New(SourceFiles, Init(50,10));
@ -1872,6 +1886,16 @@ procedure browcol_exit;
begin
exitproc:=oldexit;
DisposeBrowserCol;
if Assigned(SourceFiles) then
begin
Dispose(SourceFiles, Done);
SourceFiles:=nil;
end;
if assigned(ObjectTree) then
begin
Dispose(ObjectTree, Done);
ObjectTree:=nil;
end;
end;
@ -1952,8 +1976,19 @@ end;
function TPointerDictionary.AddPtr(PtrValue, DataPtr: pointer): PPointerXRef;
var P: PPointerXRef;
begin
P:=NewPointerXRef(PtrValue,DataPtr);
Insert(P);
P:=SearchXRef(PtrValue);
if P=nil then
begin
P:=NewPointerXRef(PtrValue,DataPtr);
Insert(P);
{$ifdef DEBUG}
end
else
begin
if P^.DataPtr<>DataPtr then
InternalError(987654);
{$endif DEBUG}
end;
AddPtr:=P;
end;
@ -1992,7 +2027,7 @@ var PD: PPointerDictionary;
begin
PD^.Resolve(P^.DType);
PD^.Resolve(P^.VType);
{PD^.Resolve(P^.Ancestor);}
PD^.Resolve(P^.Params);
if Assigned(P^.References) then
with P^.References^ do
for I:=0 to Count-1 do
@ -2092,7 +2127,10 @@ begin
end.
{
$Log$
Revision 1.15 2001-01-12 19:21:32 peter
Revision 1.16 2001-03-25 12:28:22 peter
* memleak fixes (merged)
Revision 1.15 2001/01/12 19:21:32 peter
* compiles again
Revision 1.14 2000/12/25 00:07:25 peter

View File

@ -73,6 +73,7 @@ interface
Tdictionary=object
noclear : boolean;
replace_existing : boolean;
delete_doubles : boolean;
constructor init;
destructor done;virtual;
procedure usehash;
@ -307,6 +308,7 @@ end;
hasharray:=nil;
noclear:=false;
replace_existing:=false;
delete_doubles:=false;
end;
@ -555,11 +557,20 @@ end;
begin
newnode^.left:=currnode^.left;
newnode^.right:=currnode^.right;
if delete_doubles then
begin
currnode^.left:=nil;
currnode^.right:=nil;
dispose(currnode,done);
end;
currnode:=newnode;
insertnode:=newnode;
end
else
insertnode:=currnode;
begin
insertnode:=currnode;
dispose(newnode,done);
end;
end;
end;
end;
@ -903,7 +914,10 @@ end;
end.
{
$Log$
Revision 1.22 2000-12-25 00:07:25 peter
Revision 1.23 2001-03-25 12:28:22 peter
* memleak fixes (merged)
Revision 1.22 2000/12/25 00:07:25 peter
+ new tlinkedlist class (merge of old tstringqueue,tcontainer and
tlinkedlist objects)