Browse Source

* Reverted my changes.

daniel 27 years ago
parent
commit
4035b254df
1 changed files with 96 additions and 82 deletions
  1. 96 82
      compiler/symdef.inc

+ 96 - 82
compiler/symdef.inc

@@ -29,7 +29,8 @@
          deftype:=abstractdef;
          owner := nil;
          next := nil;
-         number := 0;
+         sym := nil;
+         indexnb := 0;
          if registerdef then
            symtablestack^.registerdef(@self);
          has_rtti:=false;
@@ -48,20 +49,19 @@
            end;
          lastglobaldef := @self;
          nextglobal := nil;
-         sym := nil;
 {$endif GDB}
       end;
 
     constructor tdef.load;
       begin
-{$ifdef GDB}
          deftype:=abstractdef;
-         is_def_stab_written := false;
-         number := 0;
+         indexnb := 0;
          sym := nil;
          owner := nil;
          next := nil;
          has_rtti:=false;
+{$ifdef GDB}
+         is_def_stab_written := false;
          globalnb := 0;
          if assigned(lastglobaldef) then
            begin
@@ -580,7 +580,7 @@
 
     constructor torddef.init(t : tbasetype;v,b : longint);
       begin
-         tdef.init;
+         inherited init;
          deftype:=orddef;
          low:=v;
          high:=b;
@@ -590,7 +590,7 @@
 
     constructor torddef.load;
       begin
-         tdef.load;
+         inherited load;
          deftype:=orddef;
          typ:=tbasetype(readbyte);
          low:=readlong;
@@ -910,7 +910,7 @@
           _private : array[1..26] of byte;
           userdata : array[1..16] of byte;
           name : string[79 or 255 for linux]; }
-{$ifdef i386}   
+{$ifdef i386}
 
       if (target_info.target=target_GO32V1) or
          (target_info.target=target_GO32V2) then
@@ -1356,13 +1356,11 @@
       end;
 
     function tarraydef.needs_rtti : boolean;
-
       begin
          needs_rtti:=definition^.needs_rtti;
       end;
 
     procedure tarraydef.generate_rtti;
-
       begin
          { first, generate the rtti of the element type, else we get mixed }
          { up because the rtti would be mixed                              }
@@ -1797,14 +1795,16 @@
          localst^.next:=parast;
 {$ifdef UseBrowser}
          defref:=nil;
-         if make_ref then
-           add_new_ref(defref,@tokenpos);
-         lastref:=defref;
          lastwritten:=nil;
-         refcount:=1;
+         refcount:=0;
+         if (cs_browser in aktswitches) and make_ref then
+          begin
+            defref:=new(pref,init(defref,@tokenpos));
+            inc(refcount);
+          end;
+         lastref:=defref;
 {$endif UseBrowser}
-
-         { first, we assume, that all registers are used }
+       { first, we assume, that all registers are used }
 {$ifdef i386}
          usedregisters:=$ff;
 {$endif i386}
@@ -1821,10 +1821,8 @@
       end;
 
     constructor tprocdef.load;
-
       var
          s : string;
-
       begin
          { deftype:=procdef; this is at the wrong place !! }
          inherited load;
@@ -1854,47 +1852,78 @@
          localst:=nil;
          forwarddef:=false;
 {$ifdef UseBrowser}
-         if (current_module^.flags and uf_uses_browser)<>0 then
-           load_references
-         else
-           begin
-              lastref:=nil;
-              lastwritten:=nil;
-              defref:=nil;
-              refcount:=0;
-           end;
+         lastref:=nil;
+         lastwritten:=nil;
+         defref:=nil;
+         refcount:=0;
+         if (current_module^.flags and uf_has_browser)<>0 then
+           load_references;
 {$endif UseBrowser}
       end;
 
 {$ifdef UseBrowser}
+
+{$ifdef NEWPPU}
+
     procedure tprocdef.load_references;
+      var
+        pos : tfileposinfo;
+      begin
+        while (not ppufile^.endofentry) do
+         begin
+           readposinfo(pos);
+           inc(refcount);
+           lastref:=new(pref,init(lastref,@pos));
+           if refcount=1 then
+            defref:=lastref;
+         end;
+      end;
 
-      var fileindex : word;
-          b : byte;
-          l,c : longint;
 
+    procedure tprocdef.write_references;
+      var
+        ref : pref;
+      begin
+        if lastwritten=lastref then
+          exit;
+      { write address of this symbol }
+        writedefref(@self);
+      { write refs }
+        if assigned(lastwritten) then
+          ref:=lastwritten
+        else
+          ref:=defref;
+        while assigned(ref) do
+          begin
+             writeposinfo(ref^.posinfo);
+             ref:=ref^.nextref;
+          end;
+        ppufile^.writeentry(ibdefref);
+        lastwritten:=lastref;
+      end;
+
+{$else NEWPPU}
+
+    procedure tprocdef.load_references;
+      var
+        pos : tfileposinfo;
+        b   : byte;
       begin
          b:=readbyte;
-         refcount:=0;
-         lastref:=nil;
-         lastwritten:=nil;
-         defref:=nil;
          while b=ibref do
            begin
-              fileindex:=readword;
-              l:=readlong;
-              c:=readword;
+              readposinfo(pos);
               inc(refcount);
-              lastref:=new(pref,load(lastref,fileindex,l,c));
-              if refcount=1 then defref:=lastref;
+              lastref:=new(pref,init(lastref,@pos));
+              if refcount=1 then
+                defref:=lastref;
               b:=readbyte;
            end;
           if b <> ibend then
-         { Message(unit_f_ppu_read);
-          message disappeared ?? }
-            Comment(V_fatal,'error in load_reference');
+           Comment(V_fatal,'error in load_reference');
       end;
 
+
     procedure tprocdef.write_references;
 
       var ref : pref;
@@ -1911,9 +1940,7 @@
          while assigned(ref) do
            begin
               writebyte(ibref);
-              writeword(ref^.posinfo.fileindex);
-              writelong(ref^.posinfo.line);
-              writeword(ref^.posinfo.column);
+              writeposinfo(ref^.posinfo);
               ref:=ref^.nextref;
            end;
          lastwritten:=lastref;
@@ -1937,44 +1964,34 @@
          while assigned(ref) do
            begin
               writebyte(ibref);
-              writeword(ref^.posinfo.fileindex);
-              writelong(ref^.posinfo.line);
-              writeword(ref^.posinfo.column);
+              writeposinfo(ref^.posinfo);
               ref:=ref^.nextref;
            end;
          lastwritten:=lastref;
          writebyte(ibend);
-         ppufile.do_crc:=true;
+         ppufile.do_crc:=false;
       end;
 
-    procedure tprocdef.write_ref_to_file(var f : text);
 
-      var ref : pref;
-         i : longint;
+{$endif NEWPPU}
 
+    procedure tprocdef.add_to_browserlog;
       begin
-         ref:=defref;
-         if assigned(ref) then
-           begin
-              for i:=1 to reffile_indent do
-                system.write(f,' ');
-              writeln(f,'***',mangledname);
-           end;
-         inc(reffile_indent,2);
-         while assigned(ref) do
-           begin
-              for i:=1 to reffile_indent do
-                system.write(f,' ');
-              writeln(f,ref^.get_file_line);
-              ref:=ref^.nextref;
-           end;
-         dec(reffile_indent,2);
+         if assigned(defref) then
+          begin
+            Browse.AddLog('***'+mangledname);
+            Browse.AddLogRefs(defref);
+          end;
       end;
+
 {$endif UseBrowser}
 
     destructor tprocdef.done;
-
       begin
+{$ifdef UseBrowser}
+         if assigned(defref) then
+           dispose(defref,done);
+{$endif UseBrowser}
          if assigned(parast) then
            dispose(parast,done);
          if assigned(localst) then
@@ -1983,13 +2000,12 @@
 {$ifdef tp}
          not(use_big) and
 {$endif}
-         assigned(_mangledname) then
+           assigned(_mangledname) then
            strdispose(_mangledname);
          inherited done;
       end;
 
     procedure tprocdef.write;
-
       begin
 {$ifndef NEWPPU}
          writebyte(ibprocdef);
@@ -2019,14 +2035,9 @@
                writeptree(ptree(code));
                }
            end;
-           
 {$ifdef NEWPPU}
          ppufile^.writeentry(ibprocdef);
 {$endif}
-{$ifdef UseBrowser}
-         if (current_module^.flags and uf_uses_browser)<>0 then
-           write_references;
-{$endif UseBrowser}
       end;
 
 {$ifdef GDB}
@@ -2620,10 +2631,14 @@
 
 {
   $Log$
-  Revision 1.11  1998-06-15 13:31:20  daniel
+  Revision 1.12  1998-06-15 14:30:12  daniel
 
+  * Reverted my changes.
 
-  * Fixes to make it compilable under BP again.
+  Revision 1.10  1998/06/13 00:10:16  peter
+    * working browser and newppu
+    * some small fixes against crashes which occured in bp7 (but not in
+      fpc?!)
 
   Revision 1.9  1998/06/12 14:10:37  michael
   * Fixed wrong code for ansistring
@@ -2645,9 +2660,8 @@
       for win32
 
   Revision 1.4  1998/06/04 09:55:45  pierre
-    * demangled name of procsym reworked to become independant of the mangling scheme
-
-  Come test_funcret improvements (not yet working)S: ----------------------------------------------------------------------
+    * demangled name of procsym reworked to become independant of the mangling
+      scheme
 
   Revision 1.3  1998/06/03 22:49:03  peter
     + wordbool,longbool
@@ -2665,4 +2679,4 @@
     * symtable adapted for $ifdef NEWPPU
 
 }
-  
+