Przeglądaj źródła

* Removed not very usefull nextglobal & previousglobal fields from
Tstoreddef, saving 78 kb of memory

daniel 21 lat temu
rodzic
commit
42f9b1b0e2
3 zmienionych plików z 65 dodań i 102 usunięć
  1. 9 5
      compiler/pmodules.pas
  2. 23 94
      compiler/symdef.pas
  3. 33 3
      compiler/symtable.pas

+ 9 - 5
compiler/pmodules.pas

@@ -924,7 +924,7 @@ implementation
          current_module.globalsymtable:=current_module.localsymtable;
          current_module.globalsymtable:=current_module.localsymtable;
          current_module.localsymtable:=nil;
          current_module.localsymtable:=nil;
 
 
-         reset_global_defs;
+         reset_all_defs;
 
 
          { number all units, so we know if a unit is used by this unit or
          { number all units, so we know if a unit is used by this unit or
            needs to be added implicitly }
            needs to be added implicitly }
@@ -982,7 +982,7 @@ implementation
            exit;
            exit;
 
 
          { reset ranges/stabs in exported definitions }
          { reset ranges/stabs in exported definitions }
-         reset_global_defs;
+         reset_all_defs;
 
 
          { All units are read, now give them a number }
          { All units are read, now give them a number }
          current_module.numberunits;
          current_module.numberunits;
@@ -1094,7 +1094,7 @@ implementation
           end;
           end;
 {$endif GDB}
 {$endif GDB}
 
 
-         reset_global_defs;
+         reset_all_defs;
 
 
          if (Errorcount=0) then
          if (Errorcount=0) then
            begin
            begin
@@ -1277,7 +1277,7 @@ implementation
            loadunits;
            loadunits;
 
 
          { reset ranges/stabs in exported definitions }
          { reset ranges/stabs in exported definitions }
-         reset_global_defs;
+         reset_all_defs;
 
 
          { All units are read, now give them a number }
          { All units are read, now give them a number }
          current_module.numberunits;
          current_module.numberunits;
@@ -1438,7 +1438,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.138  2004-02-04 22:15:15  daniel
+  Revision 1.139  2004-02-06 22:37:00  daniel
+    * Removed not very usefull nextglobal & previousglobal fields from
+      Tstoreddef, saving 78 kb of memory
+
+  Revision 1.138  2004/02/04 22:15:15  daniel
     * Rtti generation moved to ncgutil
     * Rtti generation moved to ncgutil
     * Assmtai usage of symsym removed
     * Assmtai usage of symsym removed
     * operator overloading cleanup up
     * operator overloading cleanup up

+ 23 - 94
compiler/symdef.pas

@@ -52,7 +52,9 @@ interface
 ************************************************}
 ************************************************}
 
 
        tstoreddef = class(tdef)
        tstoreddef = class(tdef)
+       protected
           typesymderef  : tderef;
           typesymderef  : tderef;
+       public
           { persistent (available across units) rtti and init tables }
           { persistent (available across units) rtti and init tables }
           rttitablesym,
           rttitablesym,
           inittablesym  : tsym; {trttisym}
           inittablesym  : tsym; {trttisym}
@@ -61,8 +63,6 @@ interface
           { local (per module) rtti and init tables }
           { local (per module) rtti and init tables }
           localrttilab  : array[trttitype] of tasmlabel;
           localrttilab  : array[trttitype] of tasmlabel;
           { linked list of global definitions }
           { linked list of global definitions }
-          nextglobal,
-          previousglobal : tstoreddef;
 {$ifdef EXTDEBUG}
 {$ifdef EXTDEBUG}
           fileinfo   : tfileposinfo;
           fileinfo   : tfileposinfo;
 {$endif}
 {$endif}
@@ -72,7 +72,7 @@ interface
 {$endif GDB}
 {$endif GDB}
           constructor create;
           constructor create;
           constructor ppuloaddef(ppufile:tcompilerppufile);
           constructor ppuloaddef(ppufile:tcompilerppufile);
-          destructor  destroy;override;
+          procedure reset;
           function getcopy : tstoreddef;virtual;
           function getcopy : tstoreddef;virtual;
           procedure ppuwritedef(ppufile:tcompilerppufile);
           procedure ppuwritedef(ppufile:tcompilerppufile);
           procedure ppuwrite(ppufile:tcompilerppufile);virtual;abstract;
           procedure ppuwrite(ppufile:tcompilerppufile);virtual;abstract;
@@ -680,10 +680,6 @@ interface
 
 
     var
     var
        aktobjectdef : tobjectdef;  { used for private functions check !! }
        aktobjectdef : tobjectdef;  { used for private functions check !! }
-
-       firstglobaldef,               { linked list of all globals defs }
-       lastglobaldef : tstoreddef;   { used to reset stabs/ranges }
-
 {$ifdef GDB}
 {$ifdef GDB}
        { for STAB debugging }
        { for STAB debugging }
        globaltypecount  : word;
        globaltypecount  : word;
@@ -793,8 +789,6 @@ interface
     function is_cppclass(def: tdef): boolean;
     function is_cppclass(def: tdef): boolean;
     function is_class_or_interface(def: tdef): boolean;
     function is_class_or_interface(def: tdef): boolean;
 
 
-    procedure reset_global_defs;
-
 
 
 implementation
 implementation
 
 
@@ -923,18 +917,6 @@ implementation
          is_def_stab_written := not_written;
          is_def_stab_written := not_written;
          globalnb := 0;
          globalnb := 0;
 {$endif GDB}
 {$endif GDB}
-         if assigned(lastglobaldef) then
-           begin
-              lastglobaldef.nextglobal := self;
-              previousglobal:=lastglobaldef;
-           end
-         else
-           begin
-              firstglobaldef := self;
-              previousglobal := nil;
-           end;
-         lastglobaldef := self;
-         nextglobal := nil;
          fillchar(localrttilab,sizeof(localrttilab),0);
          fillchar(localrttilab,sizeof(localrttilab),0);
       end;
       end;
 
 
@@ -949,18 +931,6 @@ implementation
          is_def_stab_written := not_written;
          is_def_stab_written := not_written;
          globalnb := 0;
          globalnb := 0;
 {$endif GDB}
 {$endif GDB}
-         if assigned(lastglobaldef) then
-           begin
-              lastglobaldef.nextglobal := self;
-              previousglobal:=lastglobaldef;
-           end
-         else
-           begin
-              firstglobaldef := self;
-              previousglobal:=nil;
-           end;
-         lastglobaldef := self;
-         nextglobal := nil;
          fillchar(localrttilab,sizeof(localrttilab),0);
          fillchar(localrttilab,sizeof(localrttilab),0);
       { load }
       { load }
          indexnr:=ppufile.getword;
          indexnr:=ppufile.getword;
@@ -973,32 +943,21 @@ implementation
       end;
       end;
 
 
 
 
-    destructor tstoreddef.destroy;
-      begin
-         { first element  ? }
-         if not(assigned(previousglobal)) then
-           begin
-              firstglobaldef := nextglobal;
-              if assigned(firstglobaldef) then
-                firstglobaldef.previousglobal:=nil;
-           end
-         else
-           begin
-              { remove reference in the element before }
-              previousglobal.nextglobal:=nextglobal;
-           end;
-         { last element ? }
-         if not(assigned(nextglobal)) then
-           begin
-              lastglobaldef := previousglobal;
-              if assigned(lastglobaldef) then
-                lastglobaldef.nextglobal:=nil;
-           end
-         else
-           nextglobal.previousglobal:=previousglobal;
-         previousglobal:=nil;
-         nextglobal:=nil;
-      end;
+    procedure Tstoreddef.reset;
+
+    begin    
+{$ifdef GDB}
+      if assigned(typesym) then
+        ttypesym(typesym).isusedinstab:=false;
+      is_def_stab_written:=not_written;
+{$endif GDB}
+      if assigned(rttitablesym) then
+        trttisym(rttitablesym).lab := nil;
+      if assigned(inittablesym) then
+        trttisym(inittablesym).lab := nil;
+      localrttilab[initrtti]:=nil;
+      localrttilab[fullrtti]:=nil;
+    end;
 
 
     function tstoreddef.getcopy : tstoreddef;
     function tstoreddef.getcopy : tstoreddef;
       begin
       begin
@@ -6058,40 +6017,6 @@ implementation
                            Definition Helpers
                            Definition Helpers
 ****************************************************************************}
 ****************************************************************************}
 
 
-   procedure reset_global_defs;
-     var
-       def     : tstoreddef;
-{$ifdef debug}
-       prevdef : tstoreddef;
-{$endif debug}
-     begin
-{$ifdef debug}
-        prevdef:=nil;
-{$endif debug}
-{$ifdef GDB}
-        pglobaltypecount:=@globaltypecount;
-{$endif GDB}
-        def:=firstglobaldef;
-        while assigned(def) do
-          begin
-{$ifdef GDB}
-            if assigned(def.typesym) then
-              ttypesym(def.typesym).isusedinstab:=false;
-            def.is_def_stab_written:=not_written;
-{$endif GDB}
-            if assigned(def.rttitablesym) then
-              trttisym(def.rttitablesym).lab := nil;
-            if assigned(def.inittablesym) then
-              trttisym(def.inittablesym).lab := nil;
-            def.localrttilab[initrtti]:=nil;
-            def.localrttilab[fullrtti]:=nil;
-{$ifdef debug}
-            prevdef:=def;
-{$endif debug}
-            def:=def.nextglobal;
-          end;
-     end;
-
     function is_interfacecom(def: tdef): boolean;
     function is_interfacecom(def: tdef): boolean;
       begin
       begin
         is_interfacecom:=
         is_interfacecom:=
@@ -6152,7 +6077,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.215  2004-02-05 01:24:08  florian
+  Revision 1.216  2004-02-06 22:37:00  daniel
+    * Removed not very usefull nextglobal & previousglobal fields from
+      Tstoreddef, saving 78 kb of memory
+
+  Revision 1.215  2004/02/05 01:24:08  florian
     * several fixes to compile x86-64 system
     * several fixes to compile x86-64 system
 
 
   Revision 1.214  2004/02/03 22:32:54  peter
   Revision 1.214  2004/02/03 22:32:54  peter

+ 33 - 3
compiler/symtable.pas

@@ -62,6 +62,7 @@ interface
           procedure unchain_overloads(p : TNamedIndexItem;arg:pointer);
           procedure unchain_overloads(p : TNamedIndexItem;arg:pointer);
           procedure loaddefs(ppufile:tcompilerppufile);
           procedure loaddefs(ppufile:tcompilerppufile);
           procedure loadsyms(ppufile:tcompilerppufile);
           procedure loadsyms(ppufile:tcompilerppufile);
+          procedure reset_def(def:Tnamedindexitem;arg:pointer);
           procedure writedefs(ppufile:tcompilerppufile);
           procedure writedefs(ppufile:tcompilerppufile);
           procedure writesyms(ppufile:tcompilerppufile);
           procedure writesyms(ppufile:tcompilerppufile);
        public
        public
@@ -75,6 +76,7 @@ interface
           procedure deref;virtual;
           procedure deref;virtual;
           procedure derefimpl;virtual;
           procedure derefimpl;virtual;
           procedure insert(sym : tsymentry);override;
           procedure insert(sym : tsymentry);override;
+          procedure reset_all_defs;virtual;
           function  speedsearch(const s : stringid;speedvalue : cardinal) : tsymentry;override;
           function  speedsearch(const s : stringid;speedvalue : cardinal) : tsymentry;override;
           procedure allsymbolsused;
           procedure allsymbolsused;
           procedure allprivatesused;
           procedure allprivatesused;
@@ -216,6 +218,8 @@ interface
     procedure search_class_overloads(aprocsym : tprocsym);
     procedure search_class_overloads(aprocsym : tprocsym);
     function search_default_property(pd : tobjectdef) : tpropertysym;
     function search_default_property(pd : tobjectdef) : tpropertysym;
 
 
+    procedure reset_all_defs;
+
 {*** symtable stack ***}
 {*** symtable stack ***}
 {$ifdef DEBUG}
 {$ifdef DEBUG}
     procedure test_symtablestack;
     procedure test_symtablestack;
@@ -840,6 +844,18 @@ implementation
           Tstoredsym(p).isstabwritten:=false;
           Tstoredsym(p).isstabwritten:=false;
       end;
       end;
 
 
+    procedure Tstoredsymtable.reset_def(def:Tnamedindexitem;arg:pointer);
+
+    begin
+      Tstoreddef(def).reset;
+    end;
+
+    procedure Tstoredsymtable.reset_all_defs;
+
+    begin
+      defindex.foreach(@reset_def,nil);
+    end;
+
     procedure TStoredSymtable.concattypestab(p : TNamedIndexItem;arg:pointer);
     procedure TStoredSymtable.concattypestab(p : TNamedIndexItem;arg:pointer);
 
 
     var stabstr:Pchar;
     var stabstr:Pchar;
@@ -2142,6 +2158,18 @@ implementation
         search_class_member:=nil;
         search_class_member:=nil;
       end;
       end;
 
 
+    procedure reset_all_defs;
+
+    var st:Tsymtable;
+
+    begin
+      st:=symtablestack;
+      while st<>nil do
+        begin
+          Tstoredsymtable(st).reset_all_defs;
+          st:=st.next;
+        end;
+    end;
 
 
 {*****************************************************************************
 {*****************************************************************************
                             Definition Helpers
                             Definition Helpers
@@ -2350,8 +2378,6 @@ implementation
         symtablestack:=nil;
         symtablestack:=nil;
         systemunit:=nil;
         systemunit:=nil;
 {$ifdef GDB}
 {$ifdef GDB}
-        firstglobaldef:=nil;
-        lastglobaldef:=nil;
         globaltypecount:=1;
         globaltypecount:=1;
         pglobaltypecount:=@globaltypecount;
         pglobaltypecount:=@globaltypecount;
 {$endif GDB}
 {$endif GDB}
@@ -2380,7 +2406,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.134  2004-02-04 22:15:16  daniel
+  Revision 1.135  2004-02-06 22:37:00  daniel
+    * Removed not very usefull nextglobal & previousglobal fields from
+      Tstoreddef, saving 78 kb of memory
+
+  Revision 1.134  2004/02/04 22:15:16  daniel
     * Rtti generation moved to ncgutil
     * Rtti generation moved to ncgutil
     * Assmtai usage of symsym removed
     * Assmtai usage of symsym removed
     * operator overloading cleanup up
     * operator overloading cleanup up