Browse Source

Avoid memory leak on macrosymtablestack

Pierre Muller 1 month ago
parent
commit
4be5e6933a
1 changed files with 12 additions and 2 deletions
  1. 12 2
      compiler/ctask.pas

+ 12 - 2
compiler/ctask.pas

@@ -85,7 +85,9 @@ procedure DoneTaskHandler;
 
 
 implementation
 implementation
 
 
-uses verbose, fppu, finput, globtype, sysutils, scanner, parser, pmodules;
+uses
+  verbose, fppu, finput, globtype, sysutils,
+  scanner, parser, pmodules, symbase;
 
 
 procedure InitTaskHandler;
 procedure InitTaskHandler;
 begin
 begin
@@ -270,7 +272,15 @@ begin
     t.RestoreState;
     t.RestoreState;
   case m.state of
   case m.state of
     ms_registered : parser.compile_module(m);
     ms_registered : parser.compile_module(m);
-    ms_compile : parser.compile_module(m);
+    ms_compile :
+      begin
+        if m=main then
+          begin
+            macrosymtablestack.clear;
+	    FreeAndNil(macrosymtablestack);
+          end;
+        parser.compile_module(m);
+      end;
     ms_compiled : if (not m.is_initial) or m.is_unit  then
     ms_compiled : if (not m.is_initial) or m.is_unit  then
                    (m as tppumodule).post_load_or_compile(m,m.compilecount>1);
                    (m as tppumodule).post_load_or_compile(m,m.compilecount>1);
     ms_compiling_wait : pmodules.proc_program_declarations(m,m.islibrary);
     ms_compiling_wait : pmodules.proc_program_declarations(m,m.islibrary);