diff --git a/compiler/finput.pas b/compiler/finput.pas index 76ec3ff4a7..b325f2fa03 100644 --- a/compiler/finput.pas +++ b/compiler/finput.pas @@ -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 diff --git a/compiler/n386mem.pas b/compiler/n386mem.pas index 4e6c3991f7..df1d207e91 100644 --- a/compiler/n386mem.pas +++ b/compiler/n386mem.pas @@ -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 } \ No newline at end of file diff --git a/compiler/n386util.pas b/compiler/n386util.pas index 0ad16af9b7..51d9e0c600 100644 --- a/compiler/n386util.pas +++ b/compiler/n386util.pas @@ -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 diff --git a/compiler/nbas.pas b/compiler/nbas.pas index be798aef89..13c0ec3c97 100644 --- a/compiler/nbas.pas +++ b/compiler/nbas.pas @@ -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 } \ No newline at end of file diff --git a/compiler/ncal.pas b/compiler/ncal.pas index c0ad82fa56..a20344e6ed 100644 --- a/compiler/ncal.pas +++ b/compiler/ncal.pas @@ -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 -} +} \ No newline at end of file diff --git a/compiler/ncnv.pas b/compiler/ncnv.pas index 56d2b66478..24985256db 100644 --- a/compiler/ncnv.pas +++ b/compiler/ncnv.pas @@ -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 -} +} \ No newline at end of file diff --git a/compiler/ncon.pas b/compiler/ncon.pas index a892b1b7c5..1c605b371c 100644 --- a/compiler/ncon.pas +++ b/compiler/ncon.pas @@ -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 diff --git a/compiler/nflw.pas b/compiler/nflw.pas index 8ace0cc356..477c6aac51 100644 --- a/compiler/nflw.pas +++ b/compiler/nflw.pas @@ -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 diff --git a/compiler/nmem.pas b/compiler/nmem.pas index df3f56ff29..19f1023b12 100644 --- a/compiler/nmem.pas +++ b/compiler/nmem.pas @@ -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 diff --git a/compiler/node.inc b/compiler/node.inc index d3e381a437..8a3aebfe89 100644 --- a/compiler/node.inc +++ b/compiler/node.inc @@ -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 diff --git a/compiler/nodeh.inc b/compiler/nodeh.inc index 7f899a0873..cd51e58d26 100644 --- a/compiler/nodeh.inc +++ b/compiler/nodeh.inc @@ -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 diff --git a/compiler/og386elf.pas b/compiler/og386elf.pas index 372481647f..ae75377d8a 100644 --- a/compiler/og386elf.pas +++ b/compiler/og386elf.pas @@ -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 diff --git a/compiler/ppheap.pas b/compiler/ppheap.pas index 04285b7864..c473a8f93f 100644 --- a/compiler/ppheap.pas +++ b/compiler/ppheap.pas @@ -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 diff --git a/compiler/pstatmnt.pas b/compiler/pstatmnt.pas index 87ad4afa7c..f015c4f82d 100644 --- a/compiler/pstatmnt.pas +++ b/compiler/pstatmnt.pas @@ -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