Explorar o código

* fixed possible crashes with current_scanner

peter %!s(int64=23) %!d(string=hai) anos
pai
achega
87088e16fe
Modificáronse 2 ficheiros con 20 adicións e 5 borrados
  1. 11 2
      compiler/fmodule.pas
  2. 9 3
      compiler/parser.pas

+ 11 - 2
compiler/fmodule.pas

@@ -431,7 +431,13 @@ uses
         if assigned(externals) then
         if assigned(externals) then
          externals.free;
          externals.free;
         if assigned(scanner) then
         if assigned(scanner) then
-         tscannerfile(scanner).free;
+         begin
+            { also update current_scanner if it was pointing
+              to this module }
+            if current_scanner=tscannerfile(scanner) then
+             current_scanner:=nil;
+            tscannerfile(scanner).free;
+         end;
         used_units.free;
         used_units.free;
         dependent_units.free;
         dependent_units.free;
         resourcefiles.Free;
         resourcefiles.Free;
@@ -597,7 +603,10 @@ uses
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.26  2002-08-12 16:46:04  peter
+  Revision 1.27  2002-08-16 15:31:08  peter
+    * fixed possible crashes with current_scanner
+
+  Revision 1.26  2002/08/12 16:46:04  peter
     * tscannerfile is now destroyed in tmodule.reset and current_scanner
     * tscannerfile is now destroyed in tmodule.reset and current_scanner
       is updated accordingly. This removes all the loading and saving of
       is updated accordingly. This removes all the loading and saving of
       the old scanner and the invalid flag marking
       the old scanner and the invalid flag marking

+ 9 - 3
compiler/parser.pas

@@ -467,8 +467,11 @@ implementation
             tppumodule(current_module).ppufile:=nil;
             tppumodule(current_module).ppufile:=nil;
           end;
           end;
        { free scanner }
        { free scanner }
-         current_scanner.free;
-         current_scanner:=nil;
+         if assigned(current_scanner) then
+          begin
+            current_scanner.free;
+            current_scanner:=nil;
+          end;
          current_module.scanner:=nil;
          current_module.scanner:=nil;
 
 
          if (compile_level>1) then
          if (compile_level>1) then
@@ -592,7 +595,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.41  2002-08-15 19:10:35  peter
+  Revision 1.42  2002-08-16 15:31:08  peter
+    * fixed possible crashes with current_scanner
+
+  Revision 1.41  2002/08/15 19:10:35  peter
     * first things tai,tnode storing in ppu
     * first things tai,tnode storing in ppu
 
 
   Revision 1.40  2002/08/12 16:46:04  peter
   Revision 1.40  2002/08/12 16:46:04  peter