Explorar o código

* cleanup current module status
* new set_current_module function that sets the current_module and
all related variables. Also closes scanner files if required, but
that might still need some optimization to prevent closing/opening
files too often

git-svn-id: trunk@7428 -

peter %!s(int64=18) %!d(string=hai) anos
pai
achega
e2db0a3982
Modificáronse 7 ficheiros con 48 adicións e 68 borrados
  1. 1 2
      compiler/comphook.pas
  2. 1 1
      compiler/compiler.pas
  3. 35 0
      compiler/fmodule.pas
  4. 2 21
      compiler/fppu.pas
  5. 7 27
      compiler/parser.pas
  6. 2 2
      compiler/psystem.pas
  7. 0 15
      compiler/verbose.pas

+ 1 - 2
compiler/comphook.pas

@@ -98,8 +98,7 @@ type
     use_redir,
     use_bugreport,
     use_gccoutput,
-    print_source_path,
-    compiling_current : boolean;
+    print_source_path : boolean;
   { Redirection support }
     redirfile : text;
   { Special file for bug report }

+ 1 - 1
compiler/compiler.pas

@@ -178,7 +178,7 @@ begin
 { this is needed here for the IDE
   in case of compilation failure
   at the previous compile }
-  current_module:=nil;
+  set_current_module(nil);
 { read the arguments }
   read_arguments(cmd);
 { inits which depend on arguments }

+ 35 - 0
compiler/fmodule.pas

@@ -195,6 +195,7 @@ interface
        SmartLinkOFiles   : TCmdStrList; { List of .o files which are generated,
                                           used to delete them after linking }
 
+    procedure set_current_module(p:tmodule);
     function get_module(moduleindex : longint) : tmodule;
     function get_source_file(moduleindex,fileindex : longint) : tinputfile;
     procedure addloadedunit(hp:tmodule);
@@ -218,6 +219,40 @@ implementation
                              Global Functions
 *****************************************************************************}
 
+    procedure set_current_module(p:tmodule);
+      begin
+        { save the state of the scanner }
+        if assigned(current_scanner) then
+          current_scanner.tempcloseinputfile;
+        { set new module }
+        current_module:=p;
+        { restore previous module settings }
+        Fillchar(current_filepos,0,sizeof(current_filepos));
+        if assigned(current_module) then
+          begin
+            current_asmdata:=tasmdata(current_module.asmdata);
+            { restore scanner and file positions }
+            current_scanner:=tscannerfile(current_module.scanner);
+            if assigned(current_scanner) then
+              begin
+                current_scanner.tempopeninputfile;
+                current_scanner.gettokenpos;
+                parser_current_file:=current_scanner.inputfile.name^;
+              end
+            else
+              begin
+                current_filepos.moduleindex:=current_module.unit_index;
+                parser_current_file:='';
+              end;
+          end
+        else
+          begin
+            current_asmdata:=nil;
+            current_scanner:=nil;
+          end;
+      end;
+
+
     function get_module(moduleindex : longint) : tmodule;
       var
          hp : tmodule;

+ 2 - 21
compiler/fppu.pas

@@ -1318,9 +1318,7 @@ uses
         { reset }
         do_load:=true;
         second_time:=false;
-        current_module:=self;
-        SetCompileModule(current_module);
-        Fillchar(current_filepos,0,sizeof(current_filepos));
+        set_current_module(self);
 
         { A force reload }
         if do_reload then
@@ -1353,12 +1351,6 @@ uses
 
         if do_load then
          begin
-           { we are loading a new module, save the state of the scanner
-             and reset scanner+module }
-           if assigned(current_scanner) then
-             current_scanner.tempcloseinputfile;
-           current_scanner:=nil;
-
            { loading the unit for a second time? }
            if state=ms_registered then
             state:=ms_load
@@ -1470,21 +1462,10 @@ uses
               assigned(tppumodule(old_current_module).ppufile) then
              tppumodule(old_current_module).ppufile.tempopen;
 {$endif SHORT_ON_FILE_HANDLES}
-
-           { reload old scanner }
-           current_scanner:=tscannerfile(old_current_module.scanner);
-           if assigned(current_scanner) then
-            begin
-              current_scanner.tempopeninputfile;
-              current_scanner.gettokenpos
-            end
-           else
-            fillchar(current_filepos,sizeof(current_filepos),0);
          end;
 
         { we are back, restore current_module }
-        current_module:=old_current_module;
-        SetCompileModule(current_module);
+        set_current_module(old_current_module);
       end;
 
 

+ 7 - 27
compiler/parser.pas

@@ -60,11 +60,10 @@ implementation
          testcurobject:=0;
 
          { Current compiled module/proc }
+         set_current_module(nil);
          current_module:=nil;
-         compiled_module:=nil;
          current_asmdata:=nil;
          current_procinfo:=nil;
-         SetCompileModule(nil);
 
          loaded_units:=TLinkedList.Create;
 
@@ -134,11 +133,10 @@ implementation
       begin
          { Reset current compiling info, so destroy routines can't
            reference the data that might already be destroyed }
+         set_current_module(nil);
          current_module:=nil;
-         compiled_module:=nil;
          current_procinfo:=nil;
          current_asmdata:=nil;
-         SetCompileModule(nil);
 
          { unload units }
          if assigned(loaded_units) then
@@ -183,7 +181,7 @@ implementation
       begin
          new(preprocfile,init('pre'));
        { initialize a module }
-         current_module:=new(pmodule,init(filename,false));
+         set_current_module(new(pmodule,init(filename,false)));
 
          macrosymtablestack:= initialmacrosymtable;
          current_module.localmacrosymtable:= tmacrosymtable.create(false);
@@ -275,7 +273,7 @@ implementation
           oldparse_only  : boolean;
         { akt.. things }
           oldcurrent_filepos      : tfileposinfo;
-          old_compiled_module : tmodule;
+          old_current_module : tmodule;
           oldcurrent_procinfo : tprocinfo;
           old_settings : tsettings;
           oldsourcecodepage : tcodepagestring;
@@ -293,7 +291,7 @@ implementation
          new(olddata);
          with olddata^ do
           begin
-            old_compiled_module:=compiled_module;
+            old_current_module:=current_module;
           { save symtable state }
             oldsymtablestack:=symtablestack;
             oldmacrosymtablestack:=macrosymtablestack;
@@ -343,7 +341,7 @@ implementation
            begin
              if assigned(current_module) then
                internalerror(200501158);
-             current_module:=tppumodule.create(nil,filename,'',false);
+             set_current_module(tppumodule.create(nil,filename,'',false));
              addloadedunit(current_module);
              main_module:=current_module;
              current_module.state:=ms_compile;
@@ -352,11 +350,6 @@ implementation
                 (current_module.state in [ms_compile,ms_second_compile])) then
            internalerror(200212281);
 
-         { Set the module to use for verbose }
-         compiled_module:=current_module;
-         SetCompileModule(current_module);
-         Fillchar(current_filepos,0,sizeof(current_filepos));
-
          { Load current state from the init values }
          current_settings:=init_settings;
 
@@ -457,18 +450,6 @@ implementation
                 block_type:=old_block_type;
                 { restore cg }
                 parse_only:=oldparse_only;
-                { asm data }
-                if assigned(old_compiled_module) then
-                  current_asmdata:=tasmdata(old_compiled_module.asmdata)
-                else
-                  current_asmdata:=nil;
-                { restore previous scanner }
-                if assigned(old_compiled_module) then
-                  current_scanner:=tscannerfile(old_compiled_module.scanner)
-                else
-                  current_scanner:=nil;
-                if assigned(current_scanner) then
-                  parser_current_file:=current_scanner.inputfile.name^;
                 { restore symtable state }
                 symtablestack:=oldsymtablestack;
                 macrosymtablestack:=oldmacrosymtablestack;
@@ -508,8 +489,7 @@ implementation
                end;
              end;
            dec(compile_level);
-           compiled_module:=olddata^.old_compiled_module;
-           SetCompileModule(compiled_module);
+           set_current_module(olddata^.old_current_module);
 
            dispose(olddata);
          end;

+ 2 - 2
compiler/psystem.pas

@@ -348,7 +348,7 @@ implementation
           pbestrealtype:=@s64floattype;
 
         oldcurrentmodule:=current_module;
-        current_module:=nil;
+        set_current_module(nil);
         loadtype('byte',u8inttype);
         loadtype('shortint',s8inttype);
         loadtype('word',u16inttype);
@@ -399,7 +399,7 @@ implementation
         ptruinttype:=u32inttype;
         ptrsinttype:=s32inttype;
 {$endif cpu64bit}
-        current_module:=oldcurrentmodule;
+        set_current_module(oldcurrentmodule);
       end;
 
 

+ 0 - 15
compiler/verbose.pas

@@ -79,7 +79,6 @@ interface
     procedure PrepareReport;
 
     function  CheckVerbosity(v:longint):boolean;
-    procedure SetCompileModule(p:tmodulebase);
     procedure ShowStatus;
     function  ErrorCount:longint;
     procedure SetErrorFlags(const s:string);
@@ -120,9 +119,6 @@ implementation
     uses
       comphook,fmodule;
 
-var
-  compiling_module : tmodulebase;
-
 
 {****************************************************************************
                        Extra Handlers for default compiler
@@ -367,12 +363,6 @@ var
       end;
 
 
-    procedure SetCompileModule(p:tmodulebase);
-      begin
-        compiling_module:=p;
-      end;
-
-
     var
       lastfileidx,
       lastmoduleidx : longint;
@@ -403,9 +393,6 @@ var
              lastfileidx:=0;
            lastmoduleidx:=module.unit_index;
          end;
-        status.compiling_current:=assigned(compiling_module) and
-                                  (module=compiling_module) and
-                                  (compiling_module.state in [ms_compile,ms_second_compile]);
       end;
 
 
@@ -871,8 +858,6 @@ end;
         status.currentmodule:='';
         status.currentsource:='';
         status.currentsourcepath:='';
-        status.compiling_current:=false;
-        compiling_module:=nil;
         { Register internalerrorproc for cutils/cclasses }
         internalerrorproc:=@internalerror;
       end;