* fixed memory leaks

This commit is contained in:
peter 2000-10-14 21:52:54 +00:00
parent aad3a801bd
commit 4b17f6f0ff
14 changed files with 168 additions and 33 deletions

View File

@ -118,7 +118,11 @@ uses
{$else Delphi} {$else Delphi}
dos, dos,
{$endif Delphi} {$endif Delphi}
cobjects,globals; cobjects,globals
{$ifdef heaptrc}
,fmodule
{$endif heaptrc}
;
{**************************************************************************** {****************************************************************************
TINPUTFILE TINPUTFILE
@ -564,7 +568,10 @@ uses
end. end.
{ {
$Log$ $Log$
Revision 1.2 2000-09-24 15:06:16 peter Revision 1.3 2000-10-14 21:52:54 peter
* fixed memory leaks
Revision 1.2 2000/09/24 15:06:16 peter
* use defines.inc * use defines.inc
Revision 1.1 2000/08/27 16:11:50 peter Revision 1.1 2000/08/27 16:11:50 peter

View File

@ -702,6 +702,7 @@ implementation
secondpass(hightree); secondpass(hightree);
emit_mov_loc_ref(hightree.location,href,S_L,true); emit_mov_loc_ref(hightree.location,href,S_L,true);
hightree.free; hightree.free;
hightree:=nil;
end; end;
emitrangecheck(right,left.resulttype); emitrangecheck(right,left.resulttype);
end; end;
@ -1016,7 +1017,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.1 2000-10-14 10:14:49 peter Revision 1.2 2000-10-14 21:52:54 peter
* fixed memory leaks
Revision 1.1 2000/10/14 10:14:49 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
} }

View File

@ -55,8 +55,9 @@ implementation
globtype,globals,systems,verbose, globtype,globals,systems,verbose,
cutils,cobjects, cutils,cobjects,
aasm,cpubase,cpuasm, aasm,cpubase,cpuasm,
symconst,
{$ifdef GDB} {$ifdef GDB}
gdb,symconst, gdb,
{$endif GDB} {$endif GDB}
types, types,
ncon,nld, ncon,nld,
@ -1148,6 +1149,7 @@ implementation
secondpass(hightree); secondpass(hightree);
push_value_para(hightree,false,false,0,4); push_value_para(hightree,false,false,0,4);
hightree.free; hightree.free;
hightree:=nil;
end end
else else
begin begin
@ -1313,7 +1315,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.2 2000-10-14 10:14:50 peter Revision 1.3 2000-10-14 21:52:54 peter
* fixed memory leaks
Revision 1.2 2000/10/14 10:14:50 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.1 2000/10/01 19:58:40 peter Revision 1.1 2000/10/01 19:58:40 peter

View File

@ -44,6 +44,7 @@ interface
tasmnode = class(tnode) tasmnode = class(tnode)
p_asm : paasmoutput; p_asm : paasmoutput;
constructor create(p : paasmoutput);virtual; constructor create(p : paasmoutput);virtual;
destructor destroy;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
end; end;
@ -311,6 +312,12 @@ implementation
p_asm:=p; p_asm:=p;
end; end;
destructor tasmnode.destroy;
begin
if assigned(p_asm) then
dispose(p_asm,done);
inherited destroy;
end;
function tasmnode.pass_1 : tnode; function tasmnode.pass_1 : tnode;
begin begin
@ -327,7 +334,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.1 2000-10-14 10:14:50 peter Revision 1.2 2000-10-14 21:52:54 peter
* fixed memory leaks
Revision 1.1 2000/10/14 10:14:50 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
} }

View File

@ -76,6 +76,7 @@ interface
inlineprocsym : pprocsym; inlineprocsym : pprocsym;
retoffset,para_offset,para_size : longint; retoffset,para_offset,para_size : longint;
constructor create(callp,code : tnode);virtual; constructor create(callp,code : tnode);virtual;
destructor destroy;override;
function getcopy : tnode;override; function getcopy : tnode;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
end; end;
@ -1239,6 +1240,7 @@ interface
tcallparanode(left).left); tcallparanode(left).left);
tcallparanode(left).left:=nil; tcallparanode(left).left:=nil;
left.free; left.free;
left:=nil;
end; end;
end end
else else
@ -1487,6 +1489,12 @@ interface
{$ENDIF NEWST} {$ENDIF NEWST}
end; end;
destructor tprocinlinenode.destroy;
begin
inlinetree.free;
inherited destroy;
end;
function tprocinlinenode.getcopy : tnode; function tprocinlinenode.getcopy : tnode;
var var
@ -1521,7 +1529,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.9 2000-10-14 10:14:50 peter Revision 1.10 2000-10-14 21:52:55 peter
* fixed memory leaks
Revision 1.9 2000/10/14 10:14:50 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.8 2000/10/01 19:48:24 peter Revision 1.8 2000/10/01 19:48:24 peter

View File

@ -183,12 +183,15 @@ implementation
{split a range into p2 and p3 } {split a range into p2 and p3 }
if p.left.nodetype=arrayconstructorrangen then if p.left.nodetype=arrayconstructorrangen then
begin begin
p2:=tarrayconstructorrangenode(p.left).left.getcopy; p2:=tarrayconstructorrangenode(p.left).left;
p3:=tarrayconstructorrangenode(p.left).right.getcopy; p3:=tarrayconstructorrangenode(p.left).right;
tarrayconstructorrangenode(p.left).left:=nil;
tarrayconstructorrangenode(p.left).right:=nil;
end end
else else
begin begin
p2:=p.left.getcopy; p2:=p.left;
p.left:=nil;
p3:=nil; p3:=nil;
end; end;
firstpass(p2); firstpass(p2);
@ -843,8 +846,8 @@ implementation
else else
hp:=genloadcallnode(pprocsym(tcallnode(left).symtableprocentry), hp:=genloadcallnode(pprocsym(tcallnode(left).symtableprocentry),
tcallnode(left).symtableproc); tcallnode(left).symtableproc);
left.free;
firstpass(hp); firstpass(hp);
left.free;
left:=hp; left:=hp;
aprocdef:=pprocdef(left.resulttype); aprocdef:=pprocdef(left.resulttype);
(* end (* end
@ -1160,7 +1163,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.7 2000-10-14 10:14:50 peter Revision 1.8 2000-10-14 21:52:55 peter
* fixed memory leaks
Revision 1.7 2000/10/14 10:14:50 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.6 2000/10/01 19:48:24 peter Revision 1.6 2000/10/01 19:48:24 peter

View File

@ -66,6 +66,7 @@ interface
stringtype : tstringtype; stringtype : tstringtype;
constructor createstr(const s : string;st:tstringtype);virtual; constructor createstr(const s : string;st:tstringtype);virtual;
constructor createpchar(s : pchar;l : longint);virtual; constructor createpchar(s : pchar;l : longint);virtual;
destructor destroy;override;
function getcopy : tnode;override; function getcopy : tnode;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
function getpcharcopy : pchar; function getpcharcopy : pchar;
@ -75,6 +76,7 @@ interface
value_set : pconstset; value_set : pconstset;
lab_set : pasmlabel; lab_set : pasmlabel;
constructor create(s : pconstset;settype : psetdef);virtual; constructor create(s : pconstset;settype : psetdef);virtual;
destructor destroy;override;
function getcopy : tnode;override; function getcopy : tnode;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
end; end;
@ -124,7 +126,7 @@ interface
implementation implementation
uses uses
cobjects,verbose,globals,systems, cutils,cobjects,verbose,globals,systems,
types,hcodegen,pass_1,cpubase,nld; types,hcodegen,pass_1,cpubase,nld;
function genordinalconstnode(v : tconstexprint;def : pdef) : tordconstnode; function genordinalconstnode(v : tconstexprint;def : pdef) : tordconstnode;
@ -500,6 +502,12 @@ implementation
lab_str:=nil; lab_str:=nil;
end; end;
destructor tstringconstnode.destroy;
begin
ansistringdispose(value_str,len);
inherited destroy;
end;
function tstringconstnode.getcopy : tnode; function tstringconstnode.getcopy : tnode;
var var
@ -561,6 +569,13 @@ implementation
value_set:=nil; value_set:=nil;
end; end;
destructor tsetconstnode.destroy;
begin
if assigned(value_set) then
dispose(value_set);
inherited destroy;
end;
function tsetconstnode.getcopy : tnode; function tsetconstnode.getcopy : tnode;
var var
@ -613,7 +628,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.8 2000-10-14 10:14:50 peter Revision 1.9 2000-10-14 21:52:55 peter
* fixed memory leaks
Revision 1.8 2000/10/14 10:14:50 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.7 2000/09/28 19:49:52 florian Revision 1.7 2000/09/28 19:49:52 florian

View File

@ -108,6 +108,7 @@ interface
exceptsymtable : psymtable; exceptsymtable : psymtable;
excepttype : pobjectdef; excepttype : pobjectdef;
constructor create(l,r:tnode);virtual; constructor create(l,r:tnode);virtual;
destructor destroy;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
function getcopy : tnode;override; function getcopy : tnode;override;
end; end;
@ -193,9 +194,7 @@ implementation
destructor tloopnode.destroy; destructor tloopnode.destroy;
begin begin
if assigned(t1) then
t1.free; t1.free;
if assigned(t2) then
t2.free; t2.free;
inherited destroy; inherited destroy;
end; end;
@ -881,6 +880,13 @@ implementation
excepttype:=nil; excepttype:=nil;
end; end;
destructor tonnode.destroy;
begin
if assigned(exceptsymtable) then
dispose(exceptsymtable,done);
inherited destroy;
end;
function tonnode.getcopy : tnode; function tonnode.getcopy : tnode;
var var
@ -976,7 +982,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.6 2000-10-14 10:14:50 peter Revision 1.7 2000-10-14 21:52:55 peter
* fixed memory leaks
Revision 1.6 2000/10/14 10:14:50 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.5 2000/10/01 19:48:24 peter Revision 1.5 2000/10/01 19:48:24 peter

View File

@ -91,13 +91,13 @@ interface
{$IFDEF NEWST} {$IFDEF NEWST}
withsymtables : Pcollection; withsymtables : Pcollection;
withreference : preference; withreference : preference;
{$ELSE} {$ELSE}
withsymtable : pwithsymtable; withsymtable : pwithsymtable;
tablecount : longint; tablecount : longint;
withreference:preference; withreference:preference;
{$ENDIF NEWST} {$ENDIF NEWST}
constructor create(symtable : pwithsymtable;l,r : tnode;count : longint);virtual; constructor create(symtable : pwithsymtable;l,r : tnode;count : longint);virtual;
destructor destroy;override;
function getcopy : tnode;override; function getcopy : tnode;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
end; end;
@ -423,7 +423,7 @@ implementation
{ it could also be a procvar, not only pprocsym ! } { it could also be a procvar, not only pprocsym ! }
if tcallnode(left).symtableprocentry^.typ=varsym then if tcallnode(left).symtableprocentry^.typ=varsym then
hp3:=pabstractprocdef(pvarsym(tloadnode(left).symtableentry)^.vartype.def) hp3:=pabstractprocdef(pvarsym(tcallnode(left).symtableprocentry)^.vartype.def)
else else
hp3:=pabstractprocdef(pprocsym(tcallnode(left).symtableprocentry)^.definition); hp3:=pabstractprocdef(pprocsym(tcallnode(left).symtableprocentry)^.definition);
@ -829,6 +829,28 @@ implementation
set_file_line(l); set_file_line(l);
end; end;
destructor twithnode.destroy;
var
symt : psymtable;
i : longint;
begin
{$IFDEF NEWST}
dispose(withsymtables,done);
{$ELSE}
symt:=withsymtable;
for i:=1 to tablecount do
begin
if assigned(symt) then
begin
withsymtable:=pwithsymtable(symt^.next);
dispose(symt,done);
end;
symt:=withsymtable;
end;
{$ENDIF NEWST}
inherited destroy;
end;
function twithnode.getcopy : tnode; function twithnode.getcopy : tnode;
var var
@ -882,7 +904,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.6 2000-10-14 10:14:51 peter Revision 1.7 2000-10-14 21:52:55 peter
* fixed memory leaks
Revision 1.6 2000/10/14 10:14:51 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.5 2000/10/01 19:48:24 peter Revision 1.5 2000/10/01 19:48:24 peter

View File

@ -62,9 +62,10 @@
begin begin
{ reference info } { reference info }
if (location.loc in [LOC_MEM,LOC_REFERENCE]) and {if (location.loc in [LOC_MEM,LOC_REFERENCE]) and
assigned(location.reference.symbol) then assigned(location.reference.symbol) then
dispose(location.reference.symbol,done); dispose(location.reference.symbol,done);}
{$ifdef EXTDEBUG} {$ifdef EXTDEBUG}
if firstpasscount>maxfirstpasscount then if firstpasscount>maxfirstpasscount then
maxfirstpasscount:=firstpasscount; maxfirstpasscount:=firstpasscount;
@ -264,6 +265,12 @@
left:=l; left:=l;
end; end;
destructor tunarynode.destroy;
begin
left.free;
inherited destroy;
end;
function tunarynode.docompare(p : tnode) : boolean; function tunarynode.docompare(p : tnode) : boolean;
begin begin
@ -345,6 +352,12 @@
right:=r right:=r
end; end;
destructor tbinarynode.destroy;
begin
right.free;
inherited destroy;
end;
procedure tbinarynode.concattolist(l : plinkedlist); procedure tbinarynode.concattolist(l : plinkedlist);
begin begin
@ -489,7 +502,10 @@
{ {
$Log$ $Log$
Revision 1.9 2000-10-14 10:14:51 peter Revision 1.10 2000-10-14 21:52:55 peter
* fixed memory leaks
Revision 1.9 2000/10/14 10:14:51 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.8 2000/10/01 19:48:24 peter Revision 1.8 2000/10/01 19:48:24 peter

View File

@ -258,6 +258,7 @@
tunarynode = class(tparentnode) tunarynode = class(tparentnode)
left : tnode; left : tnode;
constructor create(tt : tnodetype;l : tnode); constructor create(tt : tnodetype;l : tnode);
destructor destroy;override;
procedure concattolist(l : plinkedlist);override; procedure concattolist(l : plinkedlist);override;
function ischild(p : tnode) : boolean;override; function ischild(p : tnode) : boolean;override;
procedure det_resulttype;override; procedure det_resulttype;override;
@ -274,6 +275,7 @@
tbinarynode = class(tunarynode) tbinarynode = class(tunarynode)
right : tnode; right : tnode;
constructor create(tt : tnodetype;l,r : tnode); constructor create(tt : tnodetype;l,r : tnode);
destructor destroy;override;
procedure concattolist(l : plinkedlist);override; procedure concattolist(l : plinkedlist);override;
function ischild(p : tnode) : boolean;override; function ischild(p : tnode) : boolean;override;
procedure det_resulttype;override; procedure det_resulttype;override;
@ -302,7 +304,10 @@
{ {
$Log$ $Log$
Revision 1.12 2000-10-14 10:14:51 peter Revision 1.13 2000-10-14 21:52:55 peter
* fixed memory leaks
Revision 1.12 2000/10/14 10:14:51 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.11 2000/10/01 19:48:24 peter Revision 1.11 2000/10/01 19:48:24 peter

View File

@ -323,6 +323,8 @@ interface
begin begin
if assigned(Data) then if assigned(Data) then
dispose(Data,done); dispose(Data,done);
if assigned(relocsect) then
dispose(relocsect,done);
end; end;
@ -473,7 +475,11 @@ interface
sec : tsection; sec : tsection;
begin begin
writetodisk; writetodisk;
{ free memory }
dispose(syms,done); dispose(syms,done);
dispose(symtabsect,done);
dispose(strtabsect,done);
dispose(shstrtabsect,done);
for sec:=low(tsection) to high(tsection) do for sec:=low(tsection) to high(tsection) do
if assigned(sects[sec]) then if assigned(sects[sec]) then
dispose(sects[sec],done); dispose(sects[sec],done);
@ -1050,7 +1056,10 @@ interface
end. end.
{ {
$Log$ $Log$
Revision 1.7 2000-09-24 15:06:20 peter Revision 1.8 2000-10-14 21:52:55 peter
* fixed memory leaks
Revision 1.7 2000/09/24 15:06:20 peter
* use defines.inc * use defines.inc
Revision 1.6 2000/08/27 16:11:51 peter Revision 1.6 2000/08/27 16:11:51 peter

View File

@ -36,7 +36,7 @@ interface
implementation implementation
uses uses
globtype,globals,files; globtype,globals,fmodule;
procedure ppextra_info(p : pointer); procedure ppextra_info(p : pointer);
var pl : plongint; var pl : plongint;
@ -70,7 +70,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.3 2000-09-24 15:06:24 peter Revision 1.4 2000-10-14 21:52:56 peter
* fixed memory leaks
Revision 1.3 2000/09/24 15:06:24 peter
* use defines.inc * use defines.inc
Revision 1.2 2000/07/13 11:32:45 michael Revision 1.2 2000/07/13 11:32:45 michael

View File

@ -874,7 +874,9 @@ implementation
if (pd^.deftype<>pointerdef) then if (pd^.deftype<>pointerdef) then
begin begin
Message1(type_e_pointer_type_expected,pd^.typename); Message1(type_e_pointer_type_expected,pd^.typename);
p.free;
p:=factor(false); p:=factor(false);
p.free;
consume(_RKLAMMER); consume(_RKLAMMER);
new_dispose_statement:=cerrornode.create; new_dispose_statement:=cerrornode.create;
exit; exit;
@ -883,6 +885,7 @@ implementation
if ppointerdef(pd)^.pointertype.def^.deftype<>objectdef then if ppointerdef(pd)^.pointertype.def^.deftype<>objectdef then
begin begin
Message(parser_e_pointer_to_class_expected); Message(parser_e_pointer_to_class_expected);
p.free;
new_dispose_statement:=factor(false); new_dispose_statement:=factor(false);
consume_all_until(_RKLAMMER); consume_all_until(_RKLAMMER);
consume(_RKLAMMER); consume(_RKLAMMER);
@ -912,6 +915,7 @@ implementation
Message(parser_e_expr_have_to_be_constructor_call) Message(parser_e_expr_have_to_be_constructor_call)
else else
Message(parser_e_expr_have_to_be_destructor_call); Message(parser_e_expr_have_to_be_destructor_call);
p.free;
new_dispose_statement:=cerrornode.create; new_dispose_statement:=cerrornode.create;
end end
else else
@ -960,7 +964,7 @@ implementation
begin begin
if (tcallnode(p2).procdefinition^.proctypeoption<>potype_constructor) then if (tcallnode(p2).procdefinition^.proctypeoption<>potype_constructor) then
Message(parser_e_expr_have_to_be_constructor_call); Message(parser_e_expr_have_to_be_constructor_call);
p2:=cassignmentnode.create(p.getcopy,cnewnode.create(p2)); p2:=cassignmentnode.create(p,cnewnode.create(p2));
tassignmentnode(p2).right.resulttype:=pd2; tassignmentnode(p2).right.resulttype:=pd2;
end end
else else
@ -1254,7 +1258,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.10 2000-10-14 10:14:52 peter Revision 1.11 2000-10-14 21:52:56 peter
* fixed memory leaks
Revision 1.10 2000/10/14 10:14:52 peter
* moehrendorf oct 2000 rewrite * moehrendorf oct 2000 rewrite
Revision 1.9 2000/10/01 19:48:25 peter Revision 1.9 2000/10/01 19:48:25 peter