* 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}
dos,
{$endif Delphi}
cobjects,globals;
cobjects,globals
{$ifdef heaptrc}
,fmodule
{$endif heaptrc}
;
{****************************************************************************
TINPUTFILE
@ -564,7 +568,10 @@ uses
end.
{
$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
Revision 1.1 2000/08/27 16:11:50 peter

View File

@ -702,6 +702,7 @@ implementation
secondpass(hightree);
emit_mov_loc_ref(hightree.location,href,S_L,true);
hightree.free;
hightree:=nil;
end;
emitrangecheck(right,left.resulttype);
end;
@ -1016,7 +1017,10 @@ begin
end.
{
$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
}

View File

@ -55,8 +55,9 @@ implementation
globtype,globals,systems,verbose,
cutils,cobjects,
aasm,cpubase,cpuasm,
symconst,
{$ifdef GDB}
gdb,symconst,
gdb,
{$endif GDB}
types,
ncon,nld,
@ -1148,6 +1149,7 @@ implementation
secondpass(hightree);
push_value_para(hightree,false,false,0,4);
hightree.free;
hightree:=nil;
end
else
begin
@ -1313,7 +1315,10 @@ implementation
end.
{
$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
Revision 1.1 2000/10/01 19:58:40 peter

View File

@ -44,6 +44,7 @@ interface
tasmnode = class(tnode)
p_asm : paasmoutput;
constructor create(p : paasmoutput);virtual;
destructor destroy;override;
function pass_1 : tnode;override;
end;
@ -311,6 +312,12 @@ implementation
p_asm:=p;
end;
destructor tasmnode.destroy;
begin
if assigned(p_asm) then
dispose(p_asm,done);
inherited destroy;
end;
function tasmnode.pass_1 : tnode;
begin
@ -327,7 +334,10 @@ begin
end.
{
$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
}

View File

@ -76,6 +76,7 @@ interface
inlineprocsym : pprocsym;
retoffset,para_offset,para_size : longint;
constructor create(callp,code : tnode);virtual;
destructor destroy;override;
function getcopy : tnode;override;
function pass_1 : tnode;override;
end;
@ -1239,6 +1240,7 @@ interface
tcallparanode(left).left);
tcallparanode(left).left:=nil;
left.free;
left:=nil;
end;
end
else
@ -1487,6 +1489,12 @@ interface
{$ENDIF NEWST}
end;
destructor tprocinlinenode.destroy;
begin
inlinetree.free;
inherited destroy;
end;
function tprocinlinenode.getcopy : tnode;
var
@ -1521,7 +1529,10 @@ begin
end.
{
$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
Revision 1.8 2000/10/01 19:48:24 peter
@ -1548,4 +1559,4 @@ end.
Revision 1.1 2000/09/20 20:52:16 florian
* initial revision
}
}

View File

@ -183,12 +183,15 @@ implementation
{split a range into p2 and p3 }
if p.left.nodetype=arrayconstructorrangen then
begin
p2:=tarrayconstructorrangenode(p.left).left.getcopy;
p3:=tarrayconstructorrangenode(p.left).right.getcopy;
p2:=tarrayconstructorrangenode(p.left).left;
p3:=tarrayconstructorrangenode(p.left).right;
tarrayconstructorrangenode(p.left).left:=nil;
tarrayconstructorrangenode(p.left).right:=nil;
end
else
begin
p2:=p.left.getcopy;
p2:=p.left;
p.left:=nil;
p3:=nil;
end;
firstpass(p2);
@ -843,8 +846,8 @@ implementation
else
hp:=genloadcallnode(pprocsym(tcallnode(left).symtableprocentry),
tcallnode(left).symtableproc);
left.free;
firstpass(hp);
left.free;
left:=hp;
aprocdef:=pprocdef(left.resulttype);
(* end
@ -1160,7 +1163,10 @@ begin
end.
{
$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
Revision 1.6 2000/10/01 19:48:24 peter
@ -1180,4 +1186,4 @@ end.
Revision 1.1 2000/09/25 15:37:14 florian
* more fixes
}
}

View File

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

View File

@ -108,6 +108,7 @@ interface
exceptsymtable : psymtable;
excepttype : pobjectdef;
constructor create(l,r:tnode);virtual;
destructor destroy;override;
function pass_1 : tnode;override;
function getcopy : tnode;override;
end;
@ -193,10 +194,8 @@ implementation
destructor tloopnode.destroy;
begin
if assigned(t1) then
t1.free;
if assigned(t2) then
t2.free;
t1.free;
t2.free;
inherited destroy;
end;
@ -881,6 +880,13 @@ implementation
excepttype:=nil;
end;
destructor tonnode.destroy;
begin
if assigned(exceptsymtable) then
dispose(exceptsymtable,done);
inherited destroy;
end;
function tonnode.getcopy : tnode;
var
@ -976,7 +982,10 @@ begin
end.
{
$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
Revision 1.5 2000/10/01 19:48:24 peter

View File

@ -91,13 +91,13 @@ interface
{$IFDEF NEWST}
withsymtables : Pcollection;
withreference : preference;
{$ELSE}
withsymtable : pwithsymtable;
tablecount : longint;
withreference:preference;
{$ENDIF NEWST}
constructor create(symtable : pwithsymtable;l,r : tnode;count : longint);virtual;
destructor destroy;override;
function getcopy : tnode;override;
function pass_1 : tnode;override;
end;
@ -423,7 +423,7 @@ implementation
{ it could also be a procvar, not only pprocsym ! }
if tcallnode(left).symtableprocentry^.typ=varsym then
hp3:=pabstractprocdef(pvarsym(tloadnode(left).symtableentry)^.vartype.def)
hp3:=pabstractprocdef(pvarsym(tcallnode(left).symtableprocentry)^.vartype.def)
else
hp3:=pabstractprocdef(pprocsym(tcallnode(left).symtableprocentry)^.definition);
@ -829,6 +829,28 @@ implementation
set_file_line(l);
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;
var
@ -882,7 +904,10 @@ implementation
end.
{
$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
Revision 1.5 2000/10/01 19:48:24 peter

View File

@ -62,9 +62,10 @@
begin
{ 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
dispose(location.reference.symbol,done);
dispose(location.reference.symbol,done);}
{$ifdef EXTDEBUG}
if firstpasscount>maxfirstpasscount then
maxfirstpasscount:=firstpasscount;
@ -264,6 +265,12 @@
left:=l;
end;
destructor tunarynode.destroy;
begin
left.free;
inherited destroy;
end;
function tunarynode.docompare(p : tnode) : boolean;
begin
@ -345,6 +352,12 @@
right:=r
end;
destructor tbinarynode.destroy;
begin
right.free;
inherited destroy;
end;
procedure tbinarynode.concattolist(l : plinkedlist);
begin
@ -489,7 +502,10 @@
{
$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
Revision 1.8 2000/10/01 19:48:24 peter

View File

@ -258,6 +258,7 @@
tunarynode = class(tparentnode)
left : tnode;
constructor create(tt : tnodetype;l : tnode);
destructor destroy;override;
procedure concattolist(l : plinkedlist);override;
function ischild(p : tnode) : boolean;override;
procedure det_resulttype;override;
@ -274,6 +275,7 @@
tbinarynode = class(tunarynode)
right : tnode;
constructor create(tt : tnodetype;l,r : tnode);
destructor destroy;override;
procedure concattolist(l : plinkedlist);override;
function ischild(p : tnode) : boolean;override;
procedure det_resulttype;override;
@ -302,7 +304,10 @@
{
$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
Revision 1.11 2000/10/01 19:48:24 peter

View File

@ -323,6 +323,8 @@ interface
begin
if assigned(Data) then
dispose(Data,done);
if assigned(relocsect) then
dispose(relocsect,done);
end;
@ -473,7 +475,11 @@ interface
sec : tsection;
begin
writetodisk;
{ free memory }
dispose(syms,done);
dispose(symtabsect,done);
dispose(strtabsect,done);
dispose(shstrtabsect,done);
for sec:=low(tsection) to high(tsection) do
if assigned(sects[sec]) then
dispose(sects[sec],done);
@ -1050,7 +1056,10 @@ interface
end.
{
$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
Revision 1.6 2000/08/27 16:11:51 peter

View File

@ -36,7 +36,7 @@ interface
implementation
uses
globtype,globals,files;
globtype,globals,fmodule;
procedure ppextra_info(p : pointer);
var pl : plongint;
@ -70,7 +70,10 @@ begin
end.
{
$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
Revision 1.2 2000/07/13 11:32:45 michael

View File

@ -874,7 +874,9 @@ implementation
if (pd^.deftype<>pointerdef) then
begin
Message1(type_e_pointer_type_expected,pd^.typename);
p.free;
p:=factor(false);
p.free;
consume(_RKLAMMER);
new_dispose_statement:=cerrornode.create;
exit;
@ -883,6 +885,7 @@ implementation
if ppointerdef(pd)^.pointertype.def^.deftype<>objectdef then
begin
Message(parser_e_pointer_to_class_expected);
p.free;
new_dispose_statement:=factor(false);
consume_all_until(_RKLAMMER);
consume(_RKLAMMER);
@ -912,6 +915,7 @@ implementation
Message(parser_e_expr_have_to_be_constructor_call)
else
Message(parser_e_expr_have_to_be_destructor_call);
p.free;
new_dispose_statement:=cerrornode.create;
end
else
@ -960,7 +964,7 @@ implementation
begin
if (tcallnode(p2).procdefinition^.proctypeoption<>potype_constructor) then
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;
end
else
@ -1254,7 +1258,10 @@ implementation
end.
{
$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
Revision 1.9 2000/10/01 19:48:25 peter