Răsfoiți Sursa

* write derefdata in a separate ppu entry

peter 22 ani în urmă
părinte
comite
6878c55c80

+ 21 - 1
compiler/aasmtai.pas

@@ -209,6 +209,7 @@ interface
           constructor Create;
           constructor ppuload(t:taitype;ppufile:tcompilerppufile);virtual;
           procedure ppuwrite(ppufile:tcompilerppufile);virtual;
+          procedure buildderef;virtual;
           procedure derefimpl;virtual;
        end;
 
@@ -434,6 +435,7 @@ interface
        protected
           procedure ppuloadoper(ppufile:tcompilerppufile;var o:toper);virtual;abstract;
           procedure ppuwriteoper(ppufile:tcompilerppufile;const o:toper);virtual;abstract;
+          procedure ppubuildderefoper(var o:toper);virtual;abstract;
           procedure ppuderefoper(var o:toper);virtual;abstract;
        public
           { Condition flags for instruction }
@@ -456,6 +458,7 @@ interface
           function getcopy:TLinkedListItem;override;
           constructor ppuload(t:taitype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           procedure SetCondition(const c:TAsmCond);
           procedure allocate_oper(opers:longint);
@@ -613,6 +616,11 @@ implementation
       end;
 
 
+    procedure tai.buildderef;
+      begin
+      end;
+
+
     procedure tai.derefimpl;
       begin
       end;
@@ -2006,6 +2014,15 @@ implementation
       end;
 
 
+    procedure taicpu_abstract.buildderef;
+      var
+        i : integer;
+      begin
+        for i:=0 to ops-1 do
+          ppubuildderefoper(oper[i]^);
+      end;
+
+
     procedure taicpu_abstract.derefimpl;
       var
         i : integer;
@@ -2122,7 +2139,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.45  2003-10-21 15:15:35  peter
+  Revision 1.46  2003-10-22 20:39:59  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.45  2003/10/21 15:15:35  peter
     * taicpu_abstract.oper[] changed to pointers
 
   Revision 1.44  2003/10/17 14:38:32  peter

+ 8 - 4
compiler/cclasses.pas

@@ -266,7 +266,8 @@ interface
          pos,
          used : integer;
          Next : pdynamicblock;
-         data : array[0..high(integer)-20] of byte;
+         { can't use sizeof(integer) because it crashes gdb }
+         data : array[0..1024*1024] of byte;
        end;
 
        tdynamicarray = class
@@ -1746,9 +1747,9 @@ end;
            { not found ? then increase blocks }
            if not assigned(FPosnblock) then
             begin
-              { the current FLastblock is now also fully used }
-              FLastblock^.used:=blocksize;
               repeat
+                { the current FLastblock is now also fully used }
+                FLastblock^.used:=blocksize;
                 grow;
                 FPosnblock:=FLastblock;
               until FPosnblock^.pos+blocksize>=i;
@@ -1884,7 +1885,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.26  2003-10-11 16:06:42  florian
+  Revision 1.27  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.26  2003/10/11 16:06:42  florian
     * fixed some MMX<->SSE
     * started to fix ppc, needs an overhaul
     + stabs info improve for spilling, not sure if it works correctly/completly

+ 8 - 1
compiler/fmodule.pas

@@ -97,6 +97,7 @@ interface
         islibrary     : boolean;  { if it is a library (win32 dll) }
         map           : punitmap; { mapping of all used units }
         mapsize       : longint;  { number of units in the map }
+        derefdata     : tdynamicarray;
         globalsymtable,           { pointer to the global symtable of this unit }
         localsymtable : tsymtable;{ pointer to the local symtable of this unit }
         scanner       : pointer;  { scanner object used }
@@ -381,6 +382,7 @@ implementation
         scanner:=nil;
         map:=nil;
         mapsize:=0;
+        derefdata:=TDynamicArray.Create(1024);
         globalsymtable:=nil;
         localsymtable:=nil;
         loaded_from:=LoadedFrom;
@@ -515,6 +517,8 @@ implementation
             localsymtable.free;
             localsymtable:=nil;
           end;
+        derefdata.free;
+        derefdata:=TDynamicArray.Create(1024);
         if assigned(map) then
           begin
             freemem(map);
@@ -683,7 +687,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.39  2003-10-22 15:22:33  peter
+  Revision 1.40  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.39  2003/10/22 15:22:33  peter
     * fixed unitsym-globalsymtable relation so the uses of a unit
       is counted correctly
 

+ 55 - 1
compiler/fppu.pas

@@ -69,12 +69,14 @@ interface
           procedure writesourcefiles;
           procedure writeusedunit(intf:boolean);
           procedure writelinkcontainer(var p:tlinkcontainer;id:byte;strippath:boolean);
+          procedure writederefdata;
           procedure putasmsymbol_in_idx(s:tnamedindexitem;arg:pointer);
           procedure writeasmsymbols;
           procedure readusedmacros;
           procedure readsourcefiles;
           procedure readloadunit;
           procedure readlinkcontainer(var p:tlinkcontainer);
+          procedure readderefdata;
           procedure readasmsymbols;
        end;
 
@@ -479,6 +481,27 @@ uses
       end;
 
 
+    procedure tppumodule.writederefdata;
+      var
+        len,hlen : longint;
+        buf : array[0..1023] of byte;
+      begin
+        len:=derefdata.size;
+        derefdata.seek(0);
+        while (len>0) do
+          begin
+            if len>1024 then
+              hlen:=1024
+            else
+              hlen:=len;
+            derefdata.read(buf,hlen);
+            ppufile.putdata(buf,hlen);
+            dec(len,hlen);
+          end;
+        ppufile.writeentry(ibderefdata);
+      end;
+
+
     procedure tppumodule.putasmsymbol_in_idx(s:tnamedindexitem;arg:pointer);
       begin
         if tasmsymbol(s).ppuidx<>-1 then
@@ -714,6 +737,25 @@ uses
       end;
 
 
+    procedure tppumodule.readderefdata;
+      var
+        len,hlen : longint;
+        buf : array[0..1023] of byte;
+      begin
+        len:=ppufile.entrysize;
+        while (len>0) do
+          begin
+            if len>1024 then
+              hlen:=1024
+            else
+              hlen:=len;
+            ppufile.getdata(buf,hlen);
+            derefdata.write(buf,hlen);
+            dec(len,hlen);
+          end;
+      end;
+
+
     procedure tppumodule.readasmsymbols;
       var
         labelnr,
@@ -794,6 +836,8 @@ uses
                readlinkcontainer(LinkotherStaticLibs);
              iblinkothersharedlibs :
                readlinkcontainer(LinkotherSharedLibs);
+             ibderefdata :
+               readderefdata;
              ibendinterface :
                break;
            else
@@ -914,6 +958,13 @@ uses
          writelinkcontainer(linkothersharedlibs,iblinkothersharedlibs,true);
          ppufile.do_crc:=true;
 
+         { generate and write deref data }
+         tstoredsymtable(globalsymtable).buildderef;
+         if ((flags and uf_local_browser)<>0) and
+            assigned(localsymtable) then
+           tstoredsymtable(localsymtable).buildderef;
+         writederefdata;
+
          ppufile.writeentry(ibendinterface);
 
          { write the symtable entries }
@@ -1415,7 +1466,10 @@ if modulename^='SYMSYM' then
 end.
 {
   $Log$
-  Revision 1.41  2003-10-22 17:38:25  peter
+  Revision 1.42  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.41  2003/10/22 17:38:25  peter
     * write implementation units in implementation part of the ppu
       so it doesn't confuse the unit loading
 

+ 19 - 1
compiler/nbas.pas

@@ -60,6 +60,7 @@ interface
           destructor destroy;override;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -543,6 +544,20 @@ implementation
       end;
 
 
+    procedure tasmnode.buildderef;
+      var
+        hp : tai;
+      begin
+        inherited buildderef;
+        hp:=tai(p_asm.first);
+        while assigned(hp) do
+         begin
+           hp.buildderef;
+           hp:=tai(hp.next);
+         end;
+      end;
+
+
     procedure tasmnode.derefimpl;
       var
         hp : tai;
@@ -830,7 +845,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.67  2003-10-21 18:15:16  peter
+  Revision 1.68  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.67  2003/10/21 18:15:16  peter
     * fixed check for $X- result usage
 
   Revision 1.66  2003/10/19 01:34:30  florian

+ 21 - 10
compiler/ncal.pas

@@ -114,6 +114,7 @@ interface
           destructor destroy;override;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function  getcopy : tnode;override;
           { Goes through all symbols in a class and subclasses and calls
@@ -154,7 +155,6 @@ interface
           destructor destroy;override;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
-          procedure derefimpl;override;
           function getcopy : tnode;override;
           procedure insertintolist(l : tnodelist);override;
           procedure get_paratype;
@@ -522,12 +522,6 @@ type
       end;
 
 
-    procedure tcallparanode.derefimpl;
-      begin
-        inherited derefimpl;
-      end;
-
-
     function tcallparanode.getcopy : tnode;
 
       var
@@ -971,8 +965,8 @@ type
     procedure tcallnode.ppuwrite(ppufile:tcompilerppufile);
       begin
         inherited ppuwrite(ppufile);
-        ppufile.putderef(symtableprocentry,symtableprocentryderef);
-        ppufile.putderef(procdefinition,procdefinitionderef);
+        ppufile.putderef(symtableprocentryderef);
+        ppufile.putderef(procdefinitionderef);
         ppufile.putbyte(byte(restypeset));
         ppuwritenode(ppufile,methodpointer);
         ppuwritenode(ppufile,_funcretnode);
@@ -980,6 +974,20 @@ type
       end;
 
 
+    procedure tcallnode.buildderef;
+      begin
+        inherited buildderef;
+        symtableprocentryderef.build(symtableprocentry);
+        procdefinitionderef.build(procdefinition);
+        if assigned(methodpointer) then
+          methodpointer.buildderef;
+        if assigned(_funcretnode) then
+          _funcretnode.buildderef;
+        if assigned(inlinecode) then
+          inlinecode.buildderef;
+      end;
+
+
     procedure tcallnode.derefimpl;
       begin
         inherited derefimpl;
@@ -2576,7 +2584,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.198  2003-10-21 18:17:02  peter
+  Revision 1.199  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.198  2003/10/21 18:17:02  peter
     * only search for overloaded constructors in classes
 
   Revision 1.197  2003/10/21 15:14:55  peter

+ 12 - 1
compiler/ncnv.pas

@@ -44,6 +44,7 @@ interface
           constructor create_explicit(node : tnode;const t : ttype);
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -498,6 +499,13 @@ implementation
       end;
 
 
+    procedure ttypeconvnode.buildderef;
+      begin
+        inherited buildderef;
+        totype.buildderef;
+      end;
+
+
     procedure ttypeconvnode.derefimpl;
       begin
         inherited derefimpl;
@@ -2103,7 +2111,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.124  2003-10-21 18:16:13  peter
+  Revision 1.125  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.124  2003/10/21 18:16:13  peter
     * IncompatibleTypes() added that will include unit names when
       the typenames are the same
 

+ 43 - 1
compiler/ncon.pas

@@ -40,6 +40,7 @@ interface
           constructor create(v : bestreal;const t:ttype);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -60,6 +61,7 @@ interface
           constructor create(v : tconstexprint;const t:ttype; _rangecheck : boolean);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -75,6 +77,7 @@ interface
           constructor create(v : TConstPtrUInt;const t:ttype);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -93,6 +96,7 @@ interface
           constructor createwstr(w : pcompilerwidestring);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           destructor destroy;override;
           function getcopy : tnode;override;
@@ -111,6 +115,7 @@ interface
           destructor destroy;override;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -365,6 +370,13 @@ implementation
       end;
 
 
+    procedure trealconstnode.buildderef;
+      begin
+        inherited buildderef;
+        restype.buildderef;
+      end;
+
+
     procedure trealconstnode.derefimpl;
       begin
         inherited derefimpl;
@@ -451,6 +463,13 @@ implementation
       end;
 
 
+    procedure tordconstnode.buildderef;
+      begin
+        inherited buildderef;
+        restype.buildderef;
+      end;
+
+
     procedure tordconstnode.derefimpl;
       begin
         inherited derefimpl;
@@ -529,6 +548,13 @@ implementation
       end;
 
 
+    procedure tpointerconstnode.buildderef;
+      begin
+        inherited buildderef;
+        restype.buildderef;
+      end;
+
+
     procedure tpointerconstnode.derefimpl;
       begin
         inherited derefimpl;
@@ -655,6 +681,12 @@ implementation
       end;
 
 
+    procedure tstringconstnode.buildderef;
+      begin
+        inherited buildderef;
+      end;
+
+
     procedure tstringconstnode.derefimpl;
       begin
         inherited derefimpl;
@@ -773,6 +805,13 @@ implementation
       end;
 
 
+    procedure tsetconstnode.buildderef;
+      begin
+        inherited buildderef;
+        restype.buildderef;
+      end;
+
+
     procedure tsetconstnode.derefimpl;
       begin
         inherited derefimpl;
@@ -911,7 +950,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.54  2003-10-07 18:17:44  peter
+  Revision 1.55  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.54  2003/10/07 18:17:44  peter
     * Give message that constant expr is expected when a none constant
       is passed to get_ordinal_value
 

+ 42 - 3
compiler/nflw.pas

@@ -60,6 +60,7 @@ interface
           function getcopy : tnode;override;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           procedure insertintolist(l : tnodelist);override;
           procedure printnodetree(var t:text);override;
@@ -124,6 +125,7 @@ interface
 {          constructor createintern(g:tinterngotolabel);}
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function det_resulttype:tnode;override;
@@ -141,6 +143,7 @@ interface
           constructor create(p : tlabelsym;l:tnode);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function det_resulttype:tnode;override;
@@ -154,6 +157,7 @@ interface
           constructor create(l,taddr,tframe:tnode);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           procedure insertintolist(l : tnodelist);override;
@@ -283,6 +287,16 @@ implementation
       end;
 
 
+    procedure tloopnode.buildderef;
+      begin
+        inherited buildderef;
+        if assigned(t1) then
+          t1.buildderef;
+        if assigned(t2) then
+          t2.buildderef;
+      end;
+
+
     procedure tloopnode.derefimpl;
       begin
         inherited derefimpl;
@@ -960,11 +974,18 @@ implementation
     procedure tgotonode.ppuwrite(ppufile:tcompilerppufile);
       begin
         inherited ppuwrite(ppufile);
-        ppufile.putderef(labsym,labsymderef);
+        ppufile.putderef(labsymderef);
         ppufile.putbyte(exceptionblock);
       end;
 
 
+    procedure tgotonode.buildderef;
+      begin
+        inherited buildderef;
+        labsymderef.build(labsym);
+      end;
+
+
     procedure tgotonode.derefimpl;
       begin
         inherited derefimpl;
@@ -1049,12 +1070,19 @@ implementation
     procedure tlabelnode.ppuwrite(ppufile:tcompilerppufile);
       begin
         inherited ppuwrite(ppufile);
-        ppufile.putderef(labsym,labsymderef);
+        ppufile.putderef(labsymderef);
         ppufile.putasmsymbol(labelnr);
         ppufile.putbyte(exceptionblock);
       end;
 
 
+    procedure tlabelnode.buildderef;
+      begin
+        inherited buildderef;
+        labsymderef.build(labsym);
+      end;
+
+
     procedure tlabelnode.derefimpl;
       begin
         inherited derefimpl;
@@ -1132,6 +1160,14 @@ implementation
       end;
 
 
+    procedure traisenode.buildderef;
+      begin
+        inherited buildderef;
+        if assigned(frametree) then
+          frametree.buildderef;
+      end;
+
+
     procedure traisenode.derefimpl;
       begin
         inherited derefimpl;
@@ -1431,7 +1467,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.83  2003-10-09 21:31:37  daniel
+  Revision 1.84  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.83  2003/10/09 21:31:37  daniel
     * Register allocator splitted, ans abstract now
 
   Revision 1.82  2003/10/08 19:19:45  peter

+ 32 - 4
compiler/nld.pas

@@ -44,6 +44,7 @@ interface
           constructor create_procvar(v : tsym;d:tprocdef;st : tsymtable);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           procedure set_mp(p:tnode);
           function  getcopy : tnode;override;
@@ -97,6 +98,7 @@ interface
           constructor create(t : ttype);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
@@ -112,6 +114,7 @@ interface
           constructor create(def:tstoreddef;rt:trttitype);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function  getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -319,8 +322,16 @@ implementation
     procedure tloadnode.ppuwrite(ppufile:tcompilerppufile);
       begin
         inherited ppuwrite(ppufile);
-        ppufile.putderef(symtableentry,symtableentryderef);
-        ppufile.putderef(procdef,procdefderef);
+        ppufile.putderef(symtableentryderef);
+        ppufile.putderef(procdefderef);
+      end;
+
+
+    procedure tloadnode.buildderef;
+      begin
+        inherited buildderef;
+        symtableentryderef.build(symtableentry);
+        procdefderef.build(procdef);
       end;
 
 
@@ -1122,6 +1133,13 @@ implementation
       end;
 
 
+    procedure ttypenode.buildderef;
+      begin
+        inherited buildderef;
+        restype.buildderef;
+      end;
+
+
     procedure ttypenode.derefimpl;
       begin
         inherited derefimpl;
@@ -1183,11 +1201,18 @@ implementation
     procedure trttinode.ppuwrite(ppufile:tcompilerppufile);
       begin
         inherited ppuwrite(ppufile);
-        ppufile.putderef(rttidef,rttidefderef);
+        ppufile.putderef(rttidefderef);
         ppufile.putbyte(byte(rttitype));
       end;
 
 
+    procedure trttinode.buildderef;
+      begin
+        inherited buildderef;
+        rttidefderef.build(rttidef);
+      end;
+
+
     procedure trttinode.derefimpl;
       begin
         inherited derefimpl;
@@ -1247,7 +1272,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.113  2003-10-17 14:38:32  peter
+  Revision 1.114  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.113  2003/10/17 14:38:32  peter
     * 64k registers supported
     * fixed some memory leaks
 

+ 22 - 3
compiler/nmem.pas

@@ -55,6 +55,7 @@ interface
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
           procedure mark_write;override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -76,6 +77,7 @@ interface
           constructor create(varsym : tsym;l : tnode);virtual;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
@@ -227,7 +229,7 @@ implementation
     procedure taddrnode.ppuwrite(ppufile:tcompilerppufile);
       begin
         inherited ppuwrite(ppufile);
-        ppufile.putderef(getprocvardef,getprocvardefderef);
+        ppufile.putderef(getprocvardefderef);
       end;
 
     procedure Taddrnode.mark_write;
@@ -237,6 +239,13 @@ implementation
       left.mark_write;
     end;
 
+    procedure taddrnode.buildderef;
+      begin
+        inherited buildderef;
+        getprocvardefderef.build(getprocvardef);
+      end;
+
+
     procedure taddrnode.derefimpl;
       begin
         inherited derefimpl;
@@ -517,7 +526,14 @@ implementation
     procedure tsubscriptnode.ppuwrite(ppufile:tcompilerppufile);
       begin
         inherited ppuwrite(ppufile);
-        ppufile.putderef(vs,vsderef);
+        ppufile.putderef(vsderef);
+      end;
+
+
+    procedure tsubscriptnode.buildderef;
+      begin
+        inherited buildderef;
+        vsderef.build(vs);
       end;
 
 
@@ -904,7 +920,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.66  2003-10-21 18:16:13  peter
+  Revision 1.67  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.66  2003/10/21 18:16:13  peter
     * IncompatibleTypes() added that will include unit names when
       the typenames are the same
 

+ 29 - 1
compiler/node.pas

@@ -296,6 +296,7 @@ interface
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);virtual;
           destructor destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);virtual;
+          procedure buildderef;virtual;
           procedure derefimpl;virtual;
 
           { toggles the flag }
@@ -356,6 +357,7 @@ interface
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           destructor destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           procedure concattolist(l : tlinkedlist);override;
           function ischild(p : tnode) : boolean;override;
@@ -373,6 +375,7 @@ interface
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           destructor destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           procedure concattolist(l : tlinkedlist);override;
           function ischild(p : tnode) : boolean;override;
@@ -556,6 +559,12 @@ implementation
       end;
 
 
+    procedure tnode.buildderef;
+      begin
+        resulttype.buildderef;
+      end;
+
+
     procedure tnode.derefimpl;
       begin
         resulttype.resolve;
@@ -735,6 +744,14 @@ implementation
       end;
 
 
+    procedure tunarynode.buildderef;
+      begin
+        inherited buildderef;
+        if assigned(left) then
+          left.buildderef;
+      end;
+
+
     procedure tunarynode.derefimpl;
       begin
         inherited derefimpl;
@@ -832,6 +849,14 @@ implementation
       end;
 
 
+    procedure tbinarynode.buildderef;
+      begin
+        inherited buildderef;
+        if assigned(right) then
+          right.buildderef;
+      end;
+
+
     procedure tbinarynode.derefimpl;
       begin
         inherited derefimpl;
@@ -969,7 +994,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.71  2003-10-18 15:41:26  peter
+  Revision 1.72  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.71  2003/10/18 15:41:26  peter
     * made worklists dynamic in size
 
   Revision 1.70  2003/10/17 01:22:08  florian

+ 14 - 2
compiler/nset.pas

@@ -79,6 +79,7 @@ interface
           destructor destroy;override;
           constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure derefimpl;override;
           function getcopy : tnode;override;
           procedure insertintolist(l : tnodelist);override;
@@ -508,7 +509,6 @@ implementation
       end;
 
 
-
 {*****************************************************************************
                               TCASENODE
 *****************************************************************************}
@@ -546,6 +546,15 @@ implementation
       end;
 
 
+    procedure tcasenode.buildderef;
+      begin
+        inherited buildderef;
+        if assigned(elseblock) then
+          elseblock.buildderef;
+        {ppubuildderefcaserecord(nodes);}
+      end;
+
+
     procedure tcasenode.derefimpl;
       begin
         inherited derefimpl;
@@ -686,7 +695,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.47  2003-10-09 21:31:37  daniel
+  Revision 1.48  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.47  2003/10/09 21:31:37  daniel
     * Register allocator splitted, ans abstract now
 
   Revision 1.46  2003/10/08 19:19:45  peter

+ 13 - 2
compiler/ppu.pas

@@ -41,7 +41,7 @@ type
 {$endif Test_Double_checksum}
 
 const
-  CurrentPPUVersion=37;
+  CurrentPPUVersion=38;
 
 { buffer sizes }
   maxentrysize = 1024;
@@ -77,6 +77,7 @@ const
   ibendsymtablebrowser   = 14;
   ibbeginsymtablebrowser = 15;
   ibusedmacros           = 16;
+  ibderefdata            = 17;
   {syms}
   ibtypesym       = 20;
   ibprocsym       = 21;
@@ -210,6 +211,7 @@ type
     procedure skipdata(len:integer);
     function  readentry:byte;
     function  EndOfEntry:boolean;
+    function  entrysize:longint;
     procedure getdatabuf(var b;len:integer;var res:integer);
     procedure getdata(var b;len:integer);
     function  getbyte:byte;
@@ -521,6 +523,12 @@ begin
 end;
 
 
+function tppufile.entrysize:longint;
+begin
+  entrysize:=entry.size;
+end;
+
+
 procedure tppufile.getdatabuf(var b;len:integer;var res:integer);
 begin
   if entryidx+len>entry.size then
@@ -985,7 +993,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.42  2003-09-23 17:56:05  peter
+  Revision 1.43  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.42  2003/09/23 17:56:05  peter
     * locals and paras are allocated in the code generation
     * tvarsym.localloc contains the location of para/local when
       generating code for the current procedure

+ 184 - 15
compiler/symdef.pas

@@ -76,6 +76,7 @@ interface
           function getcopy : tstoreddef;virtual;
           procedure ppuwritedef(ppufile:tcompilerppufile);
           procedure ppuwrite(ppufile:tcompilerppufile);virtual;abstract;
+          procedure buildderef;override;
           procedure deref;override;
           procedure derefimpl;override;
           function  size:longint;override;
@@ -126,6 +127,7 @@ interface
           constructor createtyped(const tt : ttype);
           constructor ppuload(ppufile:tcompilerppufile);
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           function  gettypename:string;override;
           function  getmangledparaname:string;override;
@@ -193,6 +195,7 @@ interface
           constructor createfar(const tt : ttype);
           constructor ppuload(ppufile:tcompilerppufile);
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           function  gettypename:string;override;
           { debug }
@@ -227,6 +230,7 @@ interface
           constructor ppuload(ppufile:tcompilerppufile);
           destructor destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           function  size:longint;override;
           function  alignment : longint;override;
@@ -279,6 +283,7 @@ interface
           destructor  destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
           function gettypename:string;override;
+          procedure buildderef;override;
           procedure deref;override;
           function  getparentdef:tdef;override;
           function  size : longint;override;
@@ -322,6 +327,7 @@ interface
           function  searchintf(def: tdef): longint;
           procedure addintf(def: tdef);
 
+          procedure buildderef;
           procedure deref;
           { add interface reference loaded from ppu }
           procedure addintf_deref(const d:tderef);
@@ -376,6 +382,7 @@ interface
           function stabstring : pchar;override;
           procedure concatstabto(asmlist : taasmoutput);override;
 {$endif GDB}
+          procedure buildderef;override;
           procedure deref;override;
           function size : longint;override;
           function alignment : longint;override;
@@ -440,6 +447,7 @@ interface
           constructor ppuload(ppufile:tcompilerppufile);
           destructor destroy;override;
           procedure  ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           procedure releasemem;
           function  concatpara(afterpara:tparaitem;const tt:ttype;sym : tsym;defval:tsym;vhidden:boolean):tparaitem;
@@ -460,6 +468,7 @@ interface
           constructor create(level:byte);
           constructor ppuload(ppufile:tcompilerppufile);
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           function  getsymtable(t:tgetsymtable):tsymtable;override;
           function  size : longint;override;
@@ -534,6 +543,7 @@ interface
           constructor ppuload(ppufile:tcompilerppufile);
           destructor  destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           procedure derefimpl;override;
           function  getsymtable(t:tgetsymtable):tsymtable;override;
@@ -608,6 +618,7 @@ interface
           constructor ppuload(ppufile:tcompilerppufile);
           destructor destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           function  gettypename:string;override;
           function  is_publishable : boolean;override;
@@ -634,6 +645,7 @@ interface
           constructor ppuload(ppufile:tcompilerppufile);
           destructor  destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           function  gettypename:string;override;
           function  is_publishable : boolean;override;
@@ -960,12 +972,12 @@ implementation
     procedure tstoreddef.ppuwritedef(ppufile:tcompilerppufile);
       begin
         ppufile.putword(indexnr);
-        ppufile.putderef(typesym,typesymderef);
+        ppufile.putderef(typesymderef);
         ppufile.putsmallset(defoptions);
         if df_has_rttitable in defoptions then
-         ppufile.putderef(rttitablesym,rttitablesymderef);
+         ppufile.putderef(rttitablesymderef);
         if df_has_inittable in defoptions then
-         ppufile.putderef(inittablesym,inittablesymderef);
+         ppufile.putderef(inittablesymderef);
 {$ifdef GDB}
         if globalnb = 0 then
           begin
@@ -981,6 +993,14 @@ implementation
       end;
 
 
+    procedure tstoreddef.buildderef;
+      begin
+        typesymderef.build(typesym);
+        rttitablesymderef.build(rttitablesym);
+        inittablesymderef.build(inittablesym);
+      end;
+
+
     procedure tstoreddef.deref;
       begin
         typesym:=ttypesym(typesymderef.resolve);
@@ -1560,6 +1580,13 @@ implementation
       end;
 
 
+    procedure tenumdef.buildderef;
+      begin
+        inherited buildderef;
+        basedefderef.build(basedef);
+      end;
+
+
     procedure tenumdef.deref;
       begin
         inherited deref;
@@ -1576,7 +1603,7 @@ implementation
     procedure tenumdef.ppuwrite(ppufile:tcompilerppufile);
       begin
          inherited ppuwritedef(ppufile);
-         ppufile.putderef(basedef,basedefderef);
+         ppufile.putderef(basedefderef);
          ppufile.putlongint(min);
          ppufile.putlongint(max);
          ppufile.putlongint(savesize);
@@ -2067,6 +2094,14 @@ implementation
       end;
 
 
+    procedure tfiledef.buildderef;
+      begin
+        inherited buildderef;
+        if filetyp=ft_typed then
+          typedfiletype.buildderef;
+      end;
+
+
     procedure tfiledef.deref;
       begin
         inherited deref;
@@ -2284,6 +2319,13 @@ implementation
       end;
 
 
+    procedure tpointerdef.buildderef;
+      begin
+        inherited buildderef;
+        pointertype.buildderef;
+      end;
+
+
     procedure tpointerdef.deref;
       begin
         inherited deref;
@@ -2523,6 +2565,13 @@ implementation
 {$endif GDB}
 
 
+    procedure tsetdef.buildderef;
+      begin
+        inherited buildderef;
+        elementtype.buildderef;
+      end;
+
+
     procedure tsetdef.deref;
       begin
         inherited deref;
@@ -2652,6 +2701,14 @@ implementation
       end;
 
 
+    procedure tarraydef.buildderef;
+      begin
+        inherited buildderef;
+        _elementtype.buildderef;
+        rangetype.buildderef;
+      end;
+
+
     procedure tarraydef.deref;
       begin
         inherited deref;
@@ -2966,6 +3023,19 @@ implementation
       end;
 
 
+    procedure trecorddef.buildderef;
+      var
+         oldrecsyms : tsymtable;
+      begin
+         inherited buildderef;
+         oldrecsyms:=aktrecordsymtable;
+         aktrecordsymtable:=symtable;
+         { now build the definitions }
+         tstoredsymtable(symtable).buildderef;
+         aktrecordsymtable:=oldrecsyms;
+      end;
+
+
     procedure trecorddef.deref;
       var
          oldrecsyms : tsymtable;
@@ -3223,6 +3293,26 @@ implementation
       end;
 
 
+    procedure tabstractprocdef.buildderef;
+      var
+         hp : TParaItem;
+      begin
+         inherited buildderef;
+         rettype.buildderef;
+         { parast }
+         tparasymtable(parast).buildderef;
+         { paraitems }
+         hp:=TParaItem(Para.first);
+         while assigned(hp) do
+          begin
+            hp.paratype.buildderef;
+            hp.defaultvaluederef.build(hp.defaultvalue);
+            hp.parasymderef.build(hp.parasym);
+            hp:=TParaItem(hp.next);
+          end;
+      end;
+
+
     procedure tabstractprocdef.deref;
       var
          hp : TParaItem;
@@ -3321,8 +3411,8 @@ implementation
           begin
             ppufile.putbyte(byte(hp.paratyp));
             ppufile.puttype(hp.paratype);
-            ppufile.putderef(hp.defaultvalue,hp.defaultvaluederef);
-            ppufile.putderef(hp.parasym,hp.parasymderef);
+            ppufile.putderef(hp.defaultvaluederef);
+            ppufile.putderef(hp.parasymderef);
             ppufile.putbyte(byte(hp.is_hidden));
             hp:=TParaItem(hp.next);
           end;
@@ -3611,8 +3701,8 @@ implementation
           ppufile.putstring(mangledname);
          ppufile.putword(overloadnumber);
          ppufile.putword(extnumber);
-         ppufile.putderef(_class,_classderef);
-         ppufile.putderef(procsym,procsymderef);
+         ppufile.putderef(_classderef);
+         ppufile.putderef(procsymderef);
          ppufile.putposinfo(fileinfo);
          ppufile.putsmallset(symoptions);
 
@@ -3623,7 +3713,7 @@ implementation
          { inline stuff }
          if proccalloption=pocall_inline then
           begin
-            ppufile.putderef(funcretsym,funcretsymderef);
+            ppufile.putderef(funcretsymderef);
             ppuwritenode(ppufile,code);
           end;
          ppufile.do_crc:=oldintfcrc;
@@ -3825,9 +3915,10 @@ implementation
         oldlocalsymtable:=aktlocalsymtable;
         aktparasymtable:=parast;
         aktlocalsymtable:=localst;
-      { write address of this symbol }
-        ppufile.putderef(self,d);
-      { write refs }
+        { write address of this symbol }
+        d.build(self);
+        ppufile.putderef(d);
+        { write refs }
         if assigned(lastwritten) then
           ref:=lastwritten
         else
@@ -3991,6 +4082,38 @@ implementation
 {$endif GDB}
 
 
+    procedure tprocdef.buildderef;
+      var
+        oldparasymtable,
+        oldlocalsymtable : tsymtable;
+      begin
+         oldparasymtable:=aktparasymtable;
+         oldlocalsymtable:=aktlocalsymtable;
+         aktparasymtable:=parast;
+         aktlocalsymtable:=localst;
+
+         inherited buildderef;
+         _classderef.build(_class);
+         { procsym that originaly defined this definition, should be in the
+           same symtable }
+         procsymderef.build(procsym);
+
+         { locals }
+         if assigned(localst) then
+          begin
+            tlocalsymtable(localst).buildderef;
+            funcretsymderef.build(funcretsym);
+          end;
+
+         { inline tree }
+         if (proccalloption=pocall_inline) then
+           code.buildderef;
+
+         aktparasymtable:=oldparasymtable;
+         aktlocalsymtable:=oldlocalsymtable;
+      end;
+
+
     procedure tprocdef.deref;
       var
         oldparasymtable,
@@ -4214,6 +4337,23 @@ implementation
       end;
 
 
+    procedure tprocvardef.buildderef;
+      var
+        oldparasymtable,
+        oldlocalsymtable : tsymtable;
+      begin
+        oldparasymtable:=aktparasymtable;
+        oldlocalsymtable:=aktlocalsymtable;
+        aktparasymtable:=parast;
+        aktlocalsymtable:=nil;
+
+        inherited buildderef;
+
+        aktparasymtable:=oldparasymtable;
+        aktlocalsymtable:=oldlocalsymtable;
+      end;
+
+
     procedure tprocvardef.deref;
       var
         oldparasymtable,
@@ -4532,7 +4672,7 @@ implementation
          ppufile.putlongint(size);
          ppufile.putlongint(vmt_offset);
          ppufile.putstring(objrealname^);
-         ppufile.putderef(childof,childofderef);
+         ppufile.putderef(childofderef);
          ppufile.putsmallset(objectoptions);
          if objecttype in [odt_interfacecom,odt_interfacecorba] then
            begin
@@ -4547,7 +4687,7 @@ implementation
               ppufile.putlongint(implintfcount);
               for i:=1 to implintfcount do
                 begin
-                   ppufile.putderef(implementedinterfaces.interfaces(i),implementedinterfaces.interfacesderef(i));
+                   ppufile.putderef(implementedinterfaces.interfacesderef(i));
                    ppufile.putlongint(implementedinterfaces.ioffsets(i)^);
                 end;
            end;
@@ -4566,6 +4706,21 @@ implementation
       end;
 
 
+    procedure tobjectdef.buildderef;
+      var
+         oldrecsyms : tsymtable;
+      begin
+         inherited buildderef;
+         childofderef.build(childof);
+         oldrecsyms:=aktrecordsymtable;
+         aktrecordsymtable:=symtable;
+         tstoredsymtable(symtable).buildderef;
+         aktrecordsymtable:=oldrecsyms;
+         if objecttype in [odt_class,odt_interfacecorba] then
+           implementedinterfaces.buildderef;
+      end;
+
+
     procedure tobjectdef.deref;
       var
          oldrecsyms : tsymtable;
@@ -5528,6 +5683,17 @@ implementation
           searchintf:=-1;
       end;
 
+
+    procedure timplementedinterfaces.buildderef;
+      var
+        i: longint;
+      begin
+        for i:=1 to count do
+          with timplintfentry(finterfaces.search(i)) do
+            intfderef.build(intf);
+      end;
+
+
     procedure timplementedinterfaces.deref;
       var
         i: longint;
@@ -5884,7 +6050,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.182  2003-10-21 18:14:49  peter
+  Revision 1.183  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.182  2003/10/21 18:14:49  peter
     * fix counting of parameters when loading ppu
 
   Revision 1.181  2003/10/17 15:08:34  peter

+ 11 - 26
compiler/symppu.pas

@@ -48,7 +48,7 @@ interface
          procedure putexprint(v:tconstexprint);
          procedure PutPtrUInt(v:TConstPtrUInt);
          procedure putposinfo(const p:tfileposinfo);
-         procedure putderef(s:tsymtableentry;const d:tderef);
+         procedure putderef(const d:tderef);
          procedure putsymlist(p:tsymlist);
          procedure puttype(const t:ttype);
          procedure putasmsymbol(s:tasmsymbol);
@@ -166,8 +166,7 @@ implementation
 
     procedure tcompilerppufile.getderef(var d:tderef);
       begin
-        d.len:=getbyte;
-        getdata(d.data,d.len);
+        d.dataidx:=getlongint;
       end;
 
 
@@ -332,11 +331,9 @@ implementation
       end;
 
 
-    procedure tcompilerppufile.putderef(s:tsymtableentry;const d:tderef);
+    procedure tcompilerppufile.putderef(const d:tderef);
       begin
-        d.build(s);
-        putbyte(d.len);
-        putdata(d.data,d.len);
+        putlongint(d.dataidx);
       end;
 
 
@@ -344,7 +341,7 @@ implementation
       var
         hp : psymlistitem;
       begin
-        putderef(p.procdef,p.procdefderef);
+        putderef(p.procdefderef);
         hp:=p.firstsym;
         while assigned(hp) do
          begin
@@ -353,7 +350,7 @@ implementation
              sl_call,
              sl_load,
              sl_subscript :
-               putderef(hp^.sym,hp^.symderef);
+               putderef(hp^.symderef);
              sl_vec :
                putlongint(hp^.value);
              else
@@ -367,22 +364,7 @@ implementation
 
     procedure tcompilerppufile.puttype(const t:ttype);
       begin
-        { Write symbol references when the symbol is a redefine,
-          but don't write symbol references for the current unit
-          and for the system unit }
-        if assigned(t.sym) and
-           (
-            (t.sym<>t.def.typesym) or
-            ((t.sym.owner.unitid<>0) and
-             (t.sym.owner.unitid<>1))
-           ) then
-         begin
-           putderef(t.sym,t.deref);
-         end
-        else
-         begin
-           putderef(t.def,t.deref);
-         end;
+        putderef(t.deref);
       end;
 
 
@@ -405,7 +387,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.20  2003-10-07 16:06:30  peter
+  Revision 1.21  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.20  2003/10/07 16:06:30  peter
     * tsymlist.def renamed to tsymlist.procdef
     * tsymlist.procdef is now only used to store the procdef
 

+ 93 - 6
compiler/symsym.pas

@@ -63,6 +63,7 @@ interface
           destructor destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);virtual;abstract;
           procedure writesym(ppufile:tcompilerppufile);
+          procedure buildderef;override;
           procedure deref;override;
 {$ifdef GDB}
           function  stabstring : pchar;virtual;
@@ -127,6 +128,7 @@ interface
           procedure check_forward;
           procedure unchain_overload;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           procedure addprocdef(p:tprocdef);
           procedure addprocdef_deref(const d:tderef);
@@ -160,6 +162,7 @@ interface
           constructor create(const n : string;const tt : ttype);
           constructor ppuload(ppufile:tcompilerppufile);
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           function  gettypedef:tdef;override;
           procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
@@ -186,6 +189,7 @@ interface
           constructor ppuload(ppufile:tcompilerppufile);
           destructor  destroy;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           procedure generate_mangledname;override;
           procedure set_mangledname(const s:string);
@@ -223,6 +227,7 @@ interface
           function  getsize : longint;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
           function  gettypedef:tdef;override;
+          procedure buildderef;override;
           procedure deref;override;
           procedure dooverride(overriden:tpropertysym);
 {$ifdef GDB}
@@ -239,6 +244,7 @@ interface
           constructor create(const n : string;const tt : ttype);
           constructor create_ref(const n : string;const tt : ttype;sym:tstoredsym);
           constructor ppuload(ppufile:tcompilerppufile);
+          procedure buildderef;override;
           procedure deref;override;
           function  mangledname : string;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
@@ -256,6 +262,7 @@ interface
           destructor destroy;override;
           procedure generate_mangledname;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           function  getsize:longint;
 {$ifdef GDB}
@@ -284,6 +291,7 @@ interface
           constructor ppuload(ppufile:tcompilerppufile);
           destructor  destroy;override;
           function  mangledname : string;
+          procedure buildderef;override;
           procedure deref;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
 {$ifdef GDB}
@@ -300,6 +308,7 @@ interface
           constructor create(const n : string;def : tenumdef;v : longint);
           constructor ppuload(ppufile:tcompilerppufile);
           procedure ppuwrite(ppufile:tcompilerppufile);override;
+          procedure buildderef;override;
           procedure deref;override;
           procedure order;
 {$ifdef GDB}
@@ -435,6 +444,11 @@ implementation
       end;
 
 
+    procedure tstoredsym.buildderef;
+      begin
+      end;
+
+
     procedure tstoredsym.deref;
       begin
       end;
@@ -489,7 +503,8 @@ implementation
               { write address to this symbol }
                 if not symref_written then
                   begin
-                     ppufile.putderef(self,d);
+                     d.build(self);
+                     ppufile.putderef(d);
                      symref_written:=true;
                   end;
                 ppufile.putposinfo(ref.posinfo);
@@ -795,7 +810,7 @@ implementation
                to this procsym and are in the global symtable }
              if (p^.def.procsym=self) and
                 (p^.def.owner.symtabletype in [globalsymtable,objectsymtable]) then
-               ppufile.putderef(p^.def,p^.defderef);
+               ppufile.putderef(p^.defderef);
              p:=p^.next;
            end;
          ppufile.writeentry(ibprocsym);
@@ -835,6 +850,19 @@ implementation
       end;
 
 
+    procedure tprocsym.buildderef;
+      var
+         p : pprocdeflist;
+      begin
+         p:=pdlistfirst;
+         while assigned(p) do
+           begin
+             p^.defderef.build(p^.def);
+             p:=p^.next;
+           end;
+      end;
+
+
     procedure tprocsym.deref;
       var
          p : pprocdeflist;
@@ -1355,6 +1383,23 @@ implementation
       end;
 
 
+    procedure tpropertysym.buildderef;
+      begin
+        if (ppo_is_override in propoptions) then
+         begin
+           propoverridenderef.build(propoverriden);
+         end
+        else
+         begin
+           proptype.buildderef;
+           indextype.buildderef;
+           readaccess.buildderef;
+           writeaccess.buildderef;
+           storedaccess.buildderef;
+         end;
+      end;
+
+
     procedure tpropertysym.deref;
       begin
         if (ppo_is_override in propoptions) then
@@ -1384,7 +1429,7 @@ implementation
         inherited writesym(ppufile);
         ppufile.putsmallset(propoptions);
         if (ppo_is_override in propoptions) then
-         ppufile.putderef(propoverriden,propoverridenderef)
+         ppufile.putderef(propoverridenderef)
         else
          begin
            ppufile.puttype(proptype);
@@ -1502,6 +1547,13 @@ implementation
       end;
 
 
+    procedure tabsolutesym.buildderef;
+      begin
+        { inheritance of varsym.deref ! }
+        vartype.buildderef;
+      end;
+
+
     procedure tabsolutesym.deref;
       var
         srsym : tsym;
@@ -1616,6 +1668,12 @@ implementation
       end;
 
 
+    procedure tvarsym.buildderef;
+      begin
+        vartype.buildderef;
+      end;
+
+
     procedure tvarsym.deref;
       begin
         vartype.resolve;
@@ -1948,6 +2006,12 @@ implementation
       end;
 
 
+    procedure ttypedconstsym.buildderef;
+      begin
+        typedconsttype.buildderef;
+      end;
+
+
     procedure ttypedconstsym.deref;
       begin
         typedconsttype.resolve;
@@ -2143,6 +2207,13 @@ implementation
       end;
 
 
+    procedure tconstsym.buildderef;
+      begin
+        if consttyp in [constord,constpointer,constset] then
+         consttype.buildderef;
+      end;
+
+
     procedure tconstsym.deref;
       begin
         if consttyp in [constord,constpointer,constset] then
@@ -2266,6 +2337,12 @@ implementation
       end;
 
 
+    procedure tenumsym.buildderef;
+      begin
+         definitionderef.build(definition);
+      end;
+
+
     procedure tenumsym.deref;
       begin
          definition:=tenumdef(definitionderef.resolve);
@@ -2303,7 +2380,7 @@ implementation
     procedure tenumsym.ppuwrite(ppufile:tcompilerppufile);
       begin
          inherited writesym(ppufile);
-         ppufile.putderef(definition,definitionderef);
+         ppufile.putderef(definitionderef);
          ppufile.putlongint(value);
          ppufile.writeentry(ibenumsym);
       end;
@@ -2355,6 +2432,12 @@ implementation
       end;
 
 
+    procedure ttypesym.buildderef;
+      begin
+         restype.buildderef;
+      end;
+
+
     procedure ttypesym.deref;
       begin
          restype.resolve;
@@ -2391,7 +2474,8 @@ implementation
            because we need it for the symtable }
            if (restype.def.deftype in [recorddef,objectdef]) then
             begin
-              ppufile.putderef(self,d);
+              d.build(self);
+              ppufile.putderef(d);
               ppufile.writeentry(ibsymref);
             end;
          end;
@@ -2605,7 +2689,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.129  2003-10-22 15:22:33  peter
+  Revision 1.130  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.129  2003/10/22 15:22:33  peter
     * fixed unitsym-globalsymtable relation so the uses of a unit
       is counted correctly
 

+ 27 - 1
compiler/symtable.pas

@@ -70,6 +70,7 @@ interface
           procedure ppuwrite(ppufile:tcompilerppufile);virtual;
           procedure load_references(ppufile:tcompilerppufile;locals:boolean);virtual;
           procedure write_references(ppufile:tcompilerppufile;locals:boolean);virtual;
+          procedure buildderef;virtual;
           procedure deref;virtual;
           procedure derefimpl;virtual;
           procedure insert(sym : tsymentry);override;
@@ -471,6 +472,28 @@ implementation
       end;
 
 
+    procedure tstoredsymtable.buildderef;
+      var
+        hp : tdef;
+        hs : tsym;
+      begin
+        { interface definitions }
+        hp:=tdef(defindex.first);
+        while assigned(hp) do
+         begin
+           hp.buildderef;
+           hp:=tdef(hp.indexnext);
+         end;
+        { interface symbols }
+        hs:=tsym(symindex.first);
+        while assigned(hs) do
+         begin
+           hs.buildderef;
+           hs:=tsym(hs.indexnext);
+         end;
+      end;
+
+
     procedure tstoredsymtable.deref;
       var
         hp : tdef;
@@ -2259,7 +2282,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.118  2003-10-22 15:22:33  peter
+  Revision 1.119  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.118  2003/10/22 15:22:33  peter
     * fixed unitsym-globalsymtable relation so the uses of a unit
       is counted correctly
 

+ 76 - 21
compiler/symtype.pas

@@ -70,6 +70,7 @@ interface
          typesym    : tsym;  { which type the definition was generated this def }
          defoptions : tdefoptions;
          constructor create;
+         procedure buildderef;virtual;abstract;
          procedure deref;virtual;abstract;
          procedure derefimpl;virtual;abstract;
          function  typename:string;
@@ -96,6 +97,7 @@ interface
          constructor create(const n : string);
          destructor destroy;override;
          function  realname:string;
+         procedure buildderef;virtual;abstract;
          procedure deref;virtual;abstract;
          function  gettypedef:tdef;virtual;
       end;
@@ -104,16 +106,12 @@ interface
                    TDeref
 ************************************************}
 
-      tderefdata = array[0..31] of byte;
-
       tderef = object
-        len  : longint;
-        data : tderefdata;
+        dataidx : longint;
         procedure reset;
-        procedure setdata(l:longint;var d);
         procedure build(s:tsymtableentry);
-        function resolve:tsymtableentry;
-      end;
+        function  resolve:tsymtableentry;
+     end;
 
 {************************************************
                    TType
@@ -127,6 +125,7 @@ interface
         procedure setdef(p:tdef);
         procedure setsym(p:tsym);
         procedure resolve;
+        procedure buildderef;
       end;
 
 {************************************************
@@ -156,6 +155,7 @@ interface
         procedure clear;
         function  getcopy:tsymlist;
         procedure resolve;
+        procedure buildderef;
       end;
 
 
@@ -360,6 +360,23 @@ implementation
       end;
 
 
+    procedure ttype.buildderef;
+      begin
+        { Write symbol references when the symbol is a redefine,
+          but don't write symbol references for the current unit
+          and for the system unit }
+        if assigned(sym) and
+           (
+            (sym<>def.typesym) or
+            ((sym.owner.unitid<>0) and
+             (sym.owner.unitid<>1))
+           ) then
+          deref.build(sym)
+        else
+          deref.build(def);
+      end;
+
+
 {****************************************************************************
                                  TSymList
 ****************************************************************************}
@@ -495,6 +512,29 @@ implementation
       end;
 
 
+    procedure tsymlist.buildderef;
+      var
+        hp : psymlistitem;
+      begin
+        procdefderef.build(procdef);
+        hp:=firstsym;
+        while assigned(hp) do
+         begin
+           case hp^.sltype of
+             sl_call,
+             sl_load,
+             sl_subscript :
+               hp^.symderef.build(hp^.sym);
+             sl_vec :
+               ;
+             else
+              internalerror(200110205);
+           end;
+           hp:=hp^.next;
+         end;
+      end;
+
+
 {****************************************************************************
                                 Tderef
 ****************************************************************************}
@@ -502,20 +542,14 @@ implementation
 
     procedure tderef.reset;
       begin
-        len:=0;
-      end;
-
-
-    procedure tderef.setdata(l:longint;var d);
-      begin
-        len:=l;
-        if l>sizeof(tderefdata) then
-          internalerror(200306068);
-        move(d,data,len);
+        dataidx:=-1;
       end;
 
 
     procedure tderef.build(s:tsymtableentry);
+      var
+        len  : byte;
+        data : array[0..255] of byte;
 
         function is_child(currdef,ownerdef:tdef):boolean;
         begin
@@ -588,7 +622,7 @@ implementation
             else
               internalerror(200306065);
           end;
-          if len+3>sizeof(tderefdata) then
+          if len>252 then
             internalerror(200306062);
         end;
 
@@ -649,7 +683,8 @@ implementation
         end;
 
       begin
-        len:=0;
+        { skip length byte }
+        len:=1;
         if assigned(s) then
          begin
            { Static symtable of current unit ? }
@@ -712,6 +747,11 @@ implementation
            data[len]:=0;
            inc(len);
          end;
+        { store data length in first byte }
+        data[0]:=len-1;
+        { store index and write to derefdata }
+        dataidx:=current_module.derefdata.size;
+        current_module.derefdata.write(data,len);
       end;
 
 
@@ -723,11 +763,23 @@ implementation
         st     : tsymtable;
         idx    : word;
         i      : longint;
+        len    : byte;
+        data   : array[0..255] of byte;
       begin
         result:=nil;
         { not initialized }
-        if len=0 then
+        if dataidx=-1 then
           internalerror(200306067);
+        { read data }
+        current_module.derefdata.seek(dataidx);
+        if current_module.derefdata.read(len,1)<>1 then
+          internalerror(200310221);
+        if len>0 then
+          begin
+            if current_module.derefdata.read(data,len)<>len then
+              internalerror(200310222);
+          end;
+        { process data }
         st:=nil;
         i:=0;
         while (i<len) do
@@ -862,7 +914,10 @@ finalization
 end.
 {
   $Log$
-  Revision 1.30  2003-10-22 15:22:33  peter
+  Revision 1.31  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.30  2003/10/22 15:22:33  peter
     * fixed unitsym-globalsymtable relation so the uses of a unit
       is counted correctly
 

+ 84 - 127
compiler/utils/ppudump.pp

@@ -30,7 +30,7 @@ uses
 const
   Version   = 'Version 1.10';
   Title     = 'PPU-Analyser';
-  Copyright = 'Copyright (c) 1998-2002 by the Free Pascal Development Team';
+  Copyright = 'Copyright (c) 1998-2003 by the Free Pascal Development Team';
 
 { verbosity }
   v_none           = $0;
@@ -59,8 +59,11 @@ var
   ppufile     : tppufile;
   space       : string;
   read_member : boolean;
+  unitnumber,
   unitindex   : longint;
   verbose     : longint;
+  derefdata   : pbyte;
+  derefdatalen : longint;
 
 {****************************************************************************
                           Helper Routines
@@ -344,6 +347,35 @@ begin
 end;
 
 
+procedure ReadLoadUnit;
+var
+  ucrc,uintfcrc : longint;
+begin
+  while not ppufile.EndOfEntry do
+    begin
+      inc(unitnumber);
+      write('Uses unit: ',ppufile.getstring,' (Number: ',unitnumber,')');
+      ucrc:=ppufile.getlongint;
+      uintfcrc:=ppufile.getlongint;
+      write(' (Crc: ',hexstr(ucrc,8),', IntfcCrc: ',hexstr(uintfcrc,8),')');
+    end;
+end;
+
+
+Procedure ReadDerefdata;
+begin
+  derefdatalen:=ppufile.entrysize;
+  if derefdatalen=0 then
+    begin
+      writeln('!! Error: derefdatalen=0');
+      exit;
+    end;
+  Writeln('Derefdata length: ',derefdatalen);
+  derefdata:=allocmem(derefdatalen);
+  ppufile.getdata(derefdata^,derefdatalen);
+end;
+
+
 Procedure ReadRef;
 begin
   if (verbose and v_browser)=0 then
@@ -454,40 +486,50 @@ var
   b : tdereftype;
   first : boolean;
   idx : word;
-  typ,
   i,n : byte;
-  s : string;
+  pdata : pbyte;
 begin
+  if not assigned(derefdata) then
+    exit;
   first:=true;
+  idx:=ppufile.getlongint;
+  if (idx>derefdatalen) then
+    begin
+      writeln('!! Error: Deref idx ',idx,' > ',derefdatalen);
+      exit;
+    end;
+  write('(',idx,') ');
+  pdata:=@derefdata[idx];
   i:=0;
-  n:=ppufile.getbyte;
+  n:=pdata[i];
+  inc(i);
   if n<1 then
-   begin
-     writeln('!! Error, deref len < 1');
-     exit;
-   end;
+    begin
+      writeln('!! Error: Deref len < 1');
+      exit;
+    end;
   while (i<n) do
    begin
      if not first then
       write(', ')
      else
       first:=false;
-     b:=tdereftype(ppufile.getbyte);
+     b:=tdereftype(pdata[i]);
      inc(i);
      case b of
        deref_nil :
          write('Nil');
        deref_def :
          begin
-           idx:=ppufile.getbyte shl 8;
-           idx:=idx or ppufile.getbyte;
+           idx:=pdata[i] shl 8;
+           idx:=idx or pdata[i+1];
            inc(i,2);
            write('Definition ',idx);
          end;
        deref_sym :
          begin
-           idx:=ppufile.getbyte shl 8;
-           idx:=idx or ppufile.getbyte;
+           idx:=pdata[i] shl 8;
+           idx:=idx or pdata[i+1];
            inc(i,2);
            write('Symbol ',idx);
          end;
@@ -503,8 +545,8 @@ begin
          write('AktPara');
        deref_unit :
          begin
-           idx:=ppufile.getbyte shl 8;
-           idx:=idx or ppufile.getbyte;
+           idx:=pdata[i] shl 8;
+           idx:=idx or pdata[i+1];
            inc(i,2);
            write('Unit ',idx);
          end;
@@ -1127,80 +1169,6 @@ end;
                          Read defintions Part
 ****************************************************************************}
 
-procedure getusedregisters_i386;
-type
-  tregister = (R_NO,
-    R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
-    R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
-    R_AL,R_CL,R_DL,R_BL,R_AH,R_CH,R_BH,R_DH,
-    R_CS,R_DS,R_ES,R_SS,R_FS,R_GS,
-    R_ST,R_ST0,R_ST1,R_ST2,R_ST3,R_ST4,R_ST5,R_ST6,R_ST7,
-    R_DR0,R_DR1,R_DR2,R_DR3,R_DR6,R_DR7,
-    R_CR0,R_CR2,R_CR3,R_CR4,
-    R_TR3,R_TR4,R_TR5,R_TR6,R_TR7,
-    R_MM0,R_MM1,R_MM2,R_MM3,R_MM4,R_MM5,R_MM6,R_MM7,
-    R_XMM0,R_XMM1,R_XMM2,R_XMM3,R_XMM4,R_XMM5,R_XMM6,R_XMM7
-  );
-  tregisterset = set of tregister;
-  reg2strtable = array[tregister] of string[6];
-const
-  std_reg2str : reg2strtable = ('',
-    'eax','ecx','edx','ebx','esp','ebp','esi','edi',
-    'ax','cx','dx','bx','sp','bp','si','di',
-    'al','cl','dl','bl','ah','ch','bh','dh',
-    'cs','ds','es','ss','fs','gs',
-    'st','st(0)','st(1)','st(2)','st(3)','st(4)','st(5)','st(6)','st(7)',
-    'dr0','dr1','dr2','dr3','dr6','dr7',
-    'cr0','cr2','cr3','cr4',
-    'tr3','tr4','tr5','tr6','tr7',
-    'mm0','mm1','mm2','mm3','mm4','mm5','mm6','mm7',
-    'xmm0','xmm1','xmm2','xmm3','xmm4','xmm5','xmm6','xmm7'
-  );
-  firstsaveintreg = R_EAX;
-  lastsaveintreg = R_EBX;
-  firstsavefpureg = R_NO;
-  lastsavefpureg = R_NO;
-  firstsavemmreg = R_MM0;
-  lastsavemmreg = R_MM7;
-var
-  regs: tregisterset;
-  r: tregister;
-  first: boolean;
-begin
-  first := true;
-  ppufile.getnormalset(regs);
-  for r := firstsaveintreg to lastsaveintreg do
-    if r in regs then
-      begin
-        if not first then
-          write(', ')
-        else
-          first := false;
-        write(std_reg2str[r])
-      end;
-  if (firstsavefpureg <> R_NO) then
-    for r := firstsavefpureg to lastsavefpureg do
-      if r in regs then
-        begin
-          if not first then
-            write(', ')
-          else
-            first := false;
-          write(std_reg2str[r])
-        end;
-  if (firstsavemmreg <> R_NO) then
-    for r := firstsavemmreg to lastsavemmreg do
-      if r in regs then
-        begin
-          if not first then
-            write(', ')
-          else
-            first := false;
-          write(std_reg2str[r])
-        end;
-  writeln;
-end;
-
 procedure readdefinitions(start_read : boolean);
 type
   tsettype  = (normset,smallset,varset);
@@ -1218,13 +1186,15 @@ type
     odt_interfacecorba,
     odt_cppclass
   );
+  tvarianttype = (
+    vt_normalvariant,vt_olevariant
+  );
 var
   b : byte;
   oldread_member : boolean;
   totaldefs,l,j,
   defcnt : longint;
   calloption : tproccalloption;
-  regs : set of char;
 begin
   defcnt:=0;
   with ppufile do
@@ -1303,23 +1273,6 @@ begin
            begin
              readcommondef('Procedure definition');
              calloption:=read_abstract_proc_def;
-             write  (space,'     Used IntRegs : ');
-             getnormalset(regs);
-             writeln('<not yet implemented>');
-             write  (space,'   Used OtherRegs : ');
-             getnormalset(regs);
-             writeln('<not yet implemented>');
-{$ifdef OLDRA}
-             case ttargetcpu(header.cpu) of
-               i386 :
-                 getusedregisters_i386
-               else
-                 begin
-                   getnormalset(regs);
-                   writeln('<not yet implemented>');
-                 end;
-             end;
-{$endif OLDRA}
              if (getbyte<>0) then
                writeln(space,'     Mangled name : ',getstring);
              writeln(space,'  Overload Number : ',getword);
@@ -1500,10 +1453,20 @@ begin
              end;
            end;
 
-
          ibvariantdef :
            begin
              readcommondef('Variant definition');
+             write  (space,'      Varianttype : ');
+             b:=getbyte;
+             case tvarianttype(b) of
+               vt_normalvariant :
+                 writeln('Normal');
+               vt_olevariant :
+                 writeln('OLE');
+               else
+                 writeln('!! Warning: Invalid varianttype ',b);
+             end;
+
            end;
 
          iberror :
@@ -1534,9 +1497,7 @@ end;
 procedure readinterface;
 var
   b : byte;
-  sourcenumber,
-  unitnumber : word;
-  ucrc,uintfcrc : longint;
+  sourcenumber : longint;
 begin
   with ppufile do
    begin
@@ -1574,22 +1535,9 @@ begin
                   writeln;
               end;
            end;
+
          ibloadunit :
-           begin
-             unitnumber:=1;
-             while not EndOfEntry do
-              begin
-                write('Uses unit: ',getstring,' (Number: ',unitnumber,')');
-                ucrc:=getlongint;
-                uintfcrc:=getlongint;
-                write(' (Crc: ',hexstr(ucrc,8),', IntfcCrc: ',hexstr(uintfcrc,8),')');
-                if getbyte<>0 then
-                 writeln(' (interface)')
-                else
-                 writeln(' (implementation)');
-                inc(unitnumber);
-              end;
-           end;
+           ReadLoadUnit;
 
          iblinkunitofiles :
            ReadLinkContainer('Link unit object file: ');
@@ -1609,6 +1557,9 @@ begin
          iblinkothersharedlibs :
            ReadLinkContainer('Link other shared lib: ');
 
+         ibderefdata :
+           ReadDerefData;
+
          iberror :
            begin
              Writeln('Error in PPU');
@@ -1643,6 +1594,9 @@ begin
          ibasmsymbols :
            ReadAsmSymbols;
 
+         ibloadunit :
+           ReadLoadUnit;
+
          iberror :
            begin
              Writeln('Error in PPU');
@@ -1945,7 +1899,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.46  2003-07-02 22:18:04  peter
+  Revision 1.47  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.46  2003/07/02 22:18:04  peter
     * paraloc splitted in callerparaloc,calleeparaloc
     * sparc calling convention updates
 

+ 15 - 2
compiler/x86/aasmcpu.pas

@@ -210,6 +210,7 @@ interface
       protected
          procedure ppuloadoper(ppufile:tcompilerppufile;var o:toper);override;
          procedure ppuwriteoper(ppufile:tcompilerppufile;const o:toper);override;
+         procedure ppubuildderefoper(var o:toper);override;
          procedure ppuderefoper(var o:toper);override;
       private
          { next fields are filled in pass1, so pass2 is faster }
@@ -799,13 +800,22 @@ implementation
             end;
           top_local :
             begin
-              ppufile.putderef(tvarsym(o.localsym),o.localsymderef);
+              ppufile.putderef(o.localsymderef);
               ppufile.putlongint(longint(o.localsymofs));
             end;
         end;
       end;
 
 
+    procedure taicpu.ppubuildderefoper(var o:toper);
+      begin
+        case o.typ of
+          top_local :
+            o.localsymderef.build(tvarsym(o.localsym));
+        end;
+      end;
+
+
     procedure taicpu.ppuderefoper(var o:toper);
       begin
         case o.typ of
@@ -2318,7 +2328,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.33  2003-10-21 15:15:36  peter
+  Revision 1.34  2003-10-22 20:40:00  peter
+    * write derefdata in a separate ppu entry
+
+  Revision 1.33  2003/10/21 15:15:36  peter
     * taicpu_abstract.oper[] changed to pointers
 
   Revision 1.32  2003/10/17 14:38:32  peter