Преглед изворни кода

* some memory leaks fixed (thanks to Peter for heaptrc !)

pierre пре 27 година
родитељ
комит
3048845e68

+ 8 - 2
compiler/aasm.pas

@@ -294,6 +294,7 @@ type
   { label functions }
     const
       nextlabelnr : longint = 1;
+      countlabelref : boolean = true;
     { convert label to string}
     function lab2str(l : plabel) : string;
     { make l as a new label }
@@ -793,7 +794,9 @@ uses
              else
               lab2str:=target_asm.labelprefix+tostr(l^.nb);
            end;
-         inc(l^.refcount);
+         { inside the WriteTree we must not count the refs PM }
+         if countlabelref then
+           inc(l^.refcount);
          l^.is_used:=true;
       end;
 
@@ -872,7 +875,10 @@ uses
 end.
 {
   $Log$
-  Revision 1.19  1998-10-01 20:19:11  jonas
+  Revision 1.20  1998-10-06 17:16:31  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.19  1998/10/01 20:19:11  jonas
     + ait_marker support
 
   Revision 1.18  1998/09/20 17:11:25  jonas

+ 6 - 1
compiler/ag386int.pas

@@ -558,6 +558,7 @@ ait_stab_function_name : ;
       AsmWriteLn(#9'ASSUME'#9'CS:_CODE,ES:DGROUP,DS:DGROUP,SS:DGROUP');
       AsmLn;
 
+      countlabelref:=false;
       WriteTree(externals);
     { INTEL ASM doesn't support stabs
       WriteTree(debuglist);}
@@ -567,6 +568,7 @@ ait_stab_function_name : ;
       WriteTree(consts);
       WriteTree(rttilist);
       WriteTree(bsssegment);
+      countlabelref:=true;
 
       AsmWriteLn(#9'END');
       AsmLn;
@@ -580,7 +582,10 @@ ait_stab_function_name : ;
 end.
 {
   $Log$
-  Revision 1.15  1998-10-01 20:19:06  jonas
+  Revision 1.16  1998-10-06 17:16:33  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.15  1998/10/01 20:19:06  jonas
     + ait_marker support
 
   Revision 1.14  1998/09/20 17:11:21  jonas

+ 6 - 1
compiler/ag386nsm.pas

@@ -551,6 +551,7 @@ ait_stab_function_name : ;
       AsmWriteLn('BITS 32');
       AsmLn;
 
+      countlabelref:=false;
       WriteTree(externals);
     { Nasm doesn't support stabs
       WriteTree(debuglist);}
@@ -560,6 +561,7 @@ ait_stab_function_name : ;
       WriteTree(consts);
       WriteTree(rttilist);
       WriteTree(bsssegment);
+      countlabelref:=true;
 
       AsmLn;
 {$ifdef EXTDEBUG}
@@ -571,7 +573,10 @@ ait_stab_function_name : ;
 end.
 {
   $Log$
-  Revision 1.9  1998-10-01 20:19:07  jonas
+  Revision 1.10  1998-10-06 17:16:34  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.9  1998/10/01 20:19:07  jonas
     + ait_marker support
 
   Revision 1.8  1998/09/20 17:11:22  jonas

+ 6 - 1
compiler/ag68kgas.pas

@@ -641,6 +641,7 @@ ait_stab_function_name : funcname:=pai_stab_function_name(hp)^.str;
 {$endif GDB}
       AsmStartSize:=AsmSize;
 
+      countlabelref:=false;
       { there should be nothing but externals so we don't need to process
       WriteTree(externals); }
 
@@ -653,6 +654,7 @@ ait_stab_function_name : funcname:=pai_stab_function_name(hp)^.str;
       Writetree(importssection);
       Writetree(exportssection);
       Writetree(resourcesection);
+      countlabelref:=true;
 
       AsmLn;
 {$ifdef EXTDEBUG}
@@ -664,7 +666,10 @@ ait_stab_function_name : funcname:=pai_stab_function_name(hp)^.str;
 end.
 {
   $Log$
-  Revision 1.13  1998-10-01 20:19:08  jonas
+  Revision 1.14  1998-10-06 17:16:36  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.13  1998/10/01 20:19:08  jonas
     + ait_marker support
 
   Revision 1.12  1998/09/28 16:57:09  pierre

+ 6 - 1
compiler/ag68kmit.pas

@@ -619,6 +619,7 @@ ait_stab_function_name : funcname:=pai_stab_function_name(hp)^.str;
     { to get symify to work }
       AsmWriteLn(#9'.file "'+FixFileName(n+e)+'"');
 
+      countlabelref:=false;
       { there should be nothing but externals so we don't need to process
       WriteTree(externals); }
 
@@ -631,6 +632,7 @@ ait_stab_function_name : funcname:=pai_stab_function_name(hp)^.str;
       Writetree(importssection);
       Writetree(exportssection);
       Writetree(resourcesection);
+      countlabelref:=true;
 
       AsmLn;
 {$ifdef EXTDEBUG}
@@ -642,7 +644,10 @@ ait_stab_function_name : funcname:=pai_stab_function_name(hp)^.str;
 end.
 {
   $Log$
-  Revision 1.11  1998-10-01 20:19:09  jonas
+  Revision 1.12  1998-10-06 17:16:37  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.11  1998/10/01 20:19:09  jonas
     + ait_marker support
 
   Revision 1.10  1998/09/28 16:57:11  pierre

+ 6 - 1
compiler/ag68kmot.pas

@@ -500,6 +500,7 @@ ait_labeled_instruction :
        comment(v_info,'Start writing motorola-styled assembler output for '+current_module^.mainsource^);
 {$endif}
 
+      countlabelref:=false;
       WriteTree(externals);
     { WriteTree(debuglist);}
       WriteTree(codesegment);
@@ -510,6 +511,7 @@ ait_labeled_instruction :
       Writetree(importssection);
       Writetree(exportssection);
       Writetree(resourcesection);
+      countlabelref:=true;
 
       AsmLn;
       AsmWriteLn(#9'END');
@@ -524,7 +526,10 @@ ait_labeled_instruction :
 end.
 {
   $Log$
-  Revision 1.9  1998-10-01 20:19:10  jonas
+  Revision 1.10  1998-10-06 17:16:38  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.9  1998/10/01 20:19:10  jonas
     + ait_marker support
 
   Revision 1.8  1998/09/16 01:08:08  carl

+ 8 - 1
compiler/cg386cal.pas

@@ -580,6 +580,8 @@ implementation
 {$endif SUPPORT_MMX}
                 end;
            end;
+         freelabel(truelabel);
+         freelabel(falselabel);
          truelabel:=otlabel;
          falselabel:=oflabel;
          { push from right to left }
@@ -1442,6 +1444,8 @@ implementation
           addr_correction:=-addr_correction;
           st^.foreach(correct_address);
           aktprocsym:=oldprocsym;
+          freelabel(aktexitlabel);
+          freelabel(aktexit2label);
           aktexitlabel:=oldexitlabel;
           aktexit2label:=oldexit2label;
           quickexitlabel:=oldquickexitlabel;
@@ -1453,7 +1457,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.32  1998-10-01 09:22:52  peter
+  Revision 1.33  1998-10-06 17:16:39  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.32  1998/10/01 09:22:52  peter
     * fixed value openarray
     * ungettemp of arrayconstruct
 

+ 6 - 1
compiler/cg386cnv.pas

@@ -983,6 +983,8 @@ implementation
          else
            internalerror(10061);
          end;
+         freelabel(truelabel);
+         freelabel(falselabel);
          truelabel:=oldtruelabel;
          falselabel:=oldfalselabel;
      end;
@@ -1310,7 +1312,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.26  1998-10-02 07:20:35  florian
+  Revision 1.27  1998-10-06 17:16:40  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.26  1998/10/02 07:20:35  florian
     * range checking in units doesn't work if the units are smartlinked, fixed
 
   Revision 1.25  1998/09/30 12:14:24  peter

+ 18 - 1
compiler/cg386flw.pas

@@ -97,6 +97,9 @@ implementation
          secondpass(p^.left);
          maketojumpbool(p^.left);
          emitl(A_LABEL,lbreak);
+         freelabel(lloop);
+         freelabel(lcont);
+         freelabel(lbreak);
          truelabel:=otlabel;
          falselabel:=oflabel;
 
@@ -145,6 +148,8 @@ implementation
            emitl(A_LABEL,falselabel);
          if not(assigned(p^.right)) then
            emitl(A_LABEL,truelabel);
+         freelabel(truelabel);
+         freelabel(falselabel);
          truelabel:=otlabel;
          falselabel:=oflabel;
       end;
@@ -346,6 +351,9 @@ implementation
          if temptovalue then
            ungetiftemp(temp1);
 
+         freelabel(aktcontinuelabel);
+         freelabel(aktbreaklabel);
+         freelabel(l3);
          aktcontinuelabel:=oldclabel;
          aktbreaklabel:=oldblabel;
       end;
@@ -436,6 +444,8 @@ implementation
                         end;
               end;
 do_jmp:
+              freelabel(truelabel);
+              freelabel(falselabel);
               truelabel:=otlabel;
               falselabel:=oflabel;
               emitl(A_JMP,aktexit2label);
@@ -609,6 +619,10 @@ do_jmp:
          else
            emitcall('FPC_RERAISE',true);
          emitl(A_LABEL,endexceptlabel);
+         freelabel(exceptlabel);
+         freelabel(doexceptlabel);
+         freelabel(endexceptlabel);
+         freelabel(lastonlabel);
          endexceptlabel:=oldendexceptlabel;
       end;
 
@@ -724,7 +738,10 @@ do_jmp:
 end.
 {
   $Log$
-  Revision 1.19  1998-09-28 12:13:53  peter
+  Revision 1.20  1998-10-06 17:16:42  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.19  1998/09/28 12:13:53  peter
     * fixed repeat continue until true;
 
   Revision 1.18  1998/09/26 15:03:04  florian

+ 6 - 1
compiler/cg386ld.pas

@@ -508,6 +508,8 @@ implementation
                                   newreference(p^.left^.location.reference))));
                            end;
          end;
+         freelabel(truelabel);
+         freelabel(falselabel);
          truelabel:=otlabel;
          falselabel:=oflabel;
       end;
@@ -731,7 +733,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.22  1998-10-01 09:22:53  peter
+  Revision 1.23  1998-10-06 17:16:44  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.22  1998/10/01 09:22:53  peter
     * fixed value openarray
     * ungettemp of arrayconstruct
 

+ 10 - 1
compiler/compiler.pas

@@ -120,7 +120,11 @@ begin
    exit;
 { Free memory }
   DoneSymtable;
+  DoneGlobals;
+  linker.done;
   CompilerInited:=false;
+  doneparser;
+  DoneImport;
 end;
 
 
@@ -212,13 +216,18 @@ begin
    Compile:=0
   else
    Compile:=1;
+{ no message possible after this !! }
+  DoneVerbose;
 end;
 
 
 end.
 {
   $Log$
-  Revision 1.8  1998-09-01 09:00:27  peter
+  Revision 1.9  1998-10-06 17:16:46  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.8  1998/09/01 09:00:27  peter
     - removed tempheap creation/restore
 
   Revision 1.7  1998/09/01 07:54:17  pierre

+ 7 - 2
compiler/files.pas

@@ -185,7 +185,7 @@ unit files;
   implementation
 
   uses
-    dos,verbose,systems;
+    dos,verbose,symtable,systems;
 
 {****************************************************************************
                                   TINPUTFILE
@@ -882,6 +882,8 @@ unit files;
         stringdispose(modulename);
         stringdispose(mainsource);
         stringdispose(asmprefix);
+        if assigned(symtable) then
+          dispose(punitsymtable(symtable),done);
         inherited done;
       end;
 
@@ -925,7 +927,10 @@ unit files;
 end.
 {
   $Log$
-  Revision 1.50  1998-09-30 16:43:34  peter
+  Revision 1.51  1998-10-06 17:16:47  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.50  1998/09/30 16:43:34  peter
     * fixed unit interdependency with circular uses
 
   Revision 1.49  1998/09/28 16:57:20  pierre

+ 5 - 1
compiler/hcodegen.pas

@@ -273,6 +273,7 @@ implementation
          dispose(datasegment,done);
          dispose(debuglist,done);
          dispose(externals,done);
+         dispose(internals,done);
          dispose(consts,done);
          dispose(rttilist,done);
          if assigned(importssection) then
@@ -383,7 +384,10 @@ end.
 
 {
   $Log$
-  Revision 1.17  1998-09-17 09:42:37  peter
+  Revision 1.18  1998-10-06 17:16:50  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.17  1998/09/17 09:42:37  peter
     + pass_2 for cg386
     * Message() -> CGMessage() for pass_1/pass_2
 

+ 11 - 1
compiler/import.pas

@@ -56,6 +56,7 @@ var
   importlib : pimportlib;
 
 procedure InitImport;
+procedure DoneImport;
 
 implementation
 
@@ -137,6 +138,12 @@ begin
 end;
 
 
+procedure DoneImport;
+begin
+   if assigned(importlib) then
+     dispose(importlib,done);
+end;
+
 procedure InitImport;
 begin
 {$ifdef i386}
@@ -156,7 +163,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.4  1998-09-30 12:16:47  peter
+  Revision 1.5  1998-10-06 17:16:51  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.4  1998/09/30 12:16:47  peter
     * remove extension if one is specified
 
   Revision 1.3  1998/06/04 23:51:43  peter

+ 7 - 1
compiler/link.pas

@@ -119,6 +119,9 @@ end;
 
 Destructor TLinker.Done;
 begin
+  ObjectFiles.Done;
+  SharedLibFiles.Done;
+  StaticLibFiles.Done;
 end;
 
 
@@ -502,7 +505,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.26  1998-09-29 15:23:05  peter
+  Revision 1.27  1998-10-06 17:16:52  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.26  1998/09/29 15:23:05  peter
     * remove also the end files for smartlinking
 
   Revision 1.25  1998/09/10 15:25:31  daniel

+ 10 - 1
compiler/parser.pas

@@ -29,6 +29,7 @@ unit parser;
 
     procedure compile(const filename:string;compile_system:boolean);
     procedure initparser;
+    procedure doneparser;
 
   implementation
 
@@ -76,6 +77,11 @@ unit parser;
           stacksize:=target_info.stacksize;
       end;
 
+    procedure doneparser;
+      begin
+         loaded_units.done;
+         usedunits.done;
+      end;
 
     procedure default_macros;
       var
@@ -361,7 +367,10 @@ unit parser;
 end.
 {
   $Log$
-  Revision 1.54  1998-10-05 21:33:23  peter
+  Revision 1.55  1998-10-06 17:16:53  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.54  1998/10/05 21:33:23  peter
     * fixed 161,165,166,167,168
 
   Revision 1.53  1998/09/30 16:43:36  peter

+ 5 - 1
compiler/pmodules.pas

@@ -880,6 +880,7 @@ unit pmodules;
                 end;
               consume(SEMICOLON);
             end;
+
          { global switches are read, so further changes aren't allowed }
          current_module^.in_global:=false;
          { set implementation flag }
@@ -1001,7 +1002,10 @@ unit pmodules;
 end.
 {
   $Log$
-  Revision 1.59  1998-10-05 21:33:26  peter
+  Revision 1.60  1998-10-06 17:16:54  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.59  1998/10/05 21:33:26  peter
     * fixed 161,165,166,167,168
 
   Revision 1.58  1998/09/30 16:43:37  peter

+ 6 - 1
compiler/symdef.inc

@@ -2207,6 +2207,8 @@
            dispose(parast,done);
          if assigned(localst) then
            dispose(localst,done);
+         if assigned(code) and ((options and poinline) <> 0) then
+           disposetree(ptree(code));
          if
 {$ifdef tp}
          not(use_big) and
@@ -3073,7 +3075,10 @@
 
 {
   $Log$
-  Revision 1.54  1998-10-05 21:33:28  peter
+  Revision 1.55  1998-10-06 17:16:55  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.54  1998/10/05 21:33:28  peter
     * fixed 161,165,166,167,168
 
   Revision 1.53  1998/10/05 12:48:39  pierre

+ 5 - 2
compiler/symsym.inc

@@ -1596,7 +1596,7 @@
           begin
             if definition^.sym=nil then
              definition^.sym:=@self;
-            if definition^.deftype=recorddef then
+            if (definition^.deftype=recorddef) and assigned(precdef(definition)^.symtable) then
              precdef(definition)^.symtable^.name:=stringdup('record '+name);
           end;
       end;
@@ -1719,7 +1719,10 @@
 
 {
   $Log$
-  Revision 1.49  1998-10-01 09:22:55  peter
+  Revision 1.50  1998-10-06 17:16:56  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.49  1998/10/01 09:22:55  peter
     * fixed value openarray
     * ungettemp of arrayconstruct
 

+ 11 - 1
compiler/verbose.pas

@@ -77,6 +77,7 @@ procedure Message2(w:tmsgconst;const s1,s2:string);
 procedure Message3(w:tmsgconst;const s1,s2,s3:string);
 
 procedure InitVerbose;
+procedure DoneVerbose;
 
 
 implementation
@@ -403,6 +404,12 @@ begin
   Status.MaxErrorCount:=50;
 end;
 
+procedure DoneVerbose;
+begin
+  if not(msg=nil) then
+   dispose(msg,Done);
+end;
+
 begin
 {$ifndef EXTERN_MSG}
   msg:=new(pmessage,Init(@msgtxt,ord(endmsgconst)));
@@ -413,7 +420,10 @@ end.
 
 {
   $Log$
-  Revision 1.22  1998-10-05 13:51:36  peter
+  Revision 1.23  1998-10-06 17:17:01  pierre
+    * some memory leaks fixed (thanks to Peter for heaptrc !)
+
+  Revision 1.22  1998/10/05 13:51:36  peter
     * if maxerrorcount is reached display a msg
 
   Revision 1.21  1998/09/28 16:57:30  pierre