Browse Source

* Reverted my changes.

daniel 27 years ago
parent
commit
401240a35e
1 changed files with 109 additions and 169 deletions
  1. 109 169
      compiler/symsym.inc

+ 109 - 169
compiler/symsym.inc

@@ -41,10 +41,13 @@
 {$ifdef UseBrowser}
 {$ifdef UseBrowser}
          defref:=nil;
          defref:=nil;
          lastwritten:=nil;
          lastwritten:=nil;
-         if make_ref then
-           add_new_ref(defref,@tokenpos);
+         refcount:=0;
+         if (cs_browser in aktswitches) and make_ref then
+          begin
+            defref:=new(pref,init(defref,@tokenpos));
+            inc(refcount);
+          end;
          lastref:=defref;
          lastref:=defref;
-         refcount:=1;
 {$endif UseBrowser}
 {$endif UseBrowser}
       end;
       end;
 
 
@@ -55,6 +58,7 @@
          right:=nil;
          right:=nil;
          setname(readstring);
          setname(readstring);
          typ:=abstractsym;
          typ:=abstractsym;
+         line_no:=0;
          if object_options then
          if object_options then
            properties:=symprop(readbyte)
            properties:=symprop(readbyte)
          else
          else
@@ -64,16 +68,10 @@
          defref:=nil;
          defref:=nil;
          lastwritten:=nil;
          lastwritten:=nil;
          refcount:=0;
          refcount:=0;
-         if (current_module^.flags and uf_uses_browser)<>0 then
-           { references do not change the ppu caracteristics      }
-           { this only save the references to variables/functions }
-           { defined in the unit what about the others            }
-           load_references;
 {$endif UseBrowser}
 {$endif UseBrowser}
 {$ifdef GDB}
 {$ifdef GDB}
          isstabwritten := false;
          isstabwritten := false;
 {$endif GDB}
 {$endif GDB}
-         line_no:=0;
       end;
       end;
 
 
 {$ifdef UseBrowser}
 {$ifdef UseBrowser}
@@ -82,98 +80,51 @@
 
 
     procedure tsym.load_references;
     procedure tsym.load_references;
       var
       var
-        fileindex : word;
-        b         : byte;
-        l,c       : longint;
+        pos : tfileposinfo;
       begin
       begin
-         b:=readentry;
-         if b=ibref then
-          begin
-            while (not ppufile^.endofentry) do
-             begin
-               fileindex:=readword;
-               l:=readlong;
-               c:=readword;
-               inc(refcount);
-               lastref:=new(pref,load(lastref,fileindex,l,c));
-               if refcount=1 then
-                defref:=lastref;
-             end;
-          end
-         else
-          Message(unit_f_ppu_read_error);
-         lastwritten:=lastref;
+        while (not ppufile^.endofentry) do
+         begin
+           readposinfo(pos);
+           inc(refcount);
+           lastref:=new(pref,init(lastref,@pos));
+           if refcount=1 then
+            defref:=lastref;
+         end;
+        lastwritten:=lastref;
       end;
       end;
 
 
     procedure tsym.write_references;
     procedure tsym.write_references;
       var
       var
-        ref : pref;
-      begin
-      { references do not change the ppu caracteristics      }
-      { this only save the references to variables/functions }
-      { defined in the unit what about the others            }
-         ppufile^.do_crc:=false;
-         if assigned(lastwritten) then
-           ref:=lastwritten
-         else
-           ref:=defref;
-         while assigned(ref) do
-           begin
-              writeposinfo(ref^.posinfo);
-              ref:=ref^.nextref;
-           end;
-         lastwritten:=lastref;
-         ppufile^.writeentry(ibref);
-         ppufile^.do_crc:=true;
-      end;
-
-
-    procedure load_external_references;
-      var b     : byte;
-          sym   : psym;
-          prdef : pdef;
-      begin
-        b:=readentry;
-        if b=ibextsymref then
+        ref   : pref;
+        prdef : pdef;
+      begin
+        if lastwritten=lastref then
+          exit;
+      { write address to this symbol }
+        writesymref(@self);
+      { write symbol refs }
+        if assigned(lastwritten) then
+          ref:=lastwritten
+        else
+          ref:=defref;
+        while assigned(ref) do
          begin
          begin
-           sym:=readsymref;
-           resolvesym(sym);
-           sym^.load_references;
+           writeposinfo(ref^.posinfo);
+           ref:=ref^.nextref;
+         end;
+        lastwritten:=lastref;
+        ppufile^.writeentry(ibsymref);
+      { when it's a procsym then write also the refs to the definition
+        due the overloading }
+        if typ=procsym then
+         begin
+           prdef:=pprocsym(@self)^.definition;
+           while assigned(prdef) do
+            begin
+              pprocdef(prdef)^.write_references;
+              prdef:=pprocdef(prdef)^.nextoverloaded;
+            end;
          end;
          end;
-         ibextdefref : begin
-                         prdef:=readdefref;
-                         resolvedef(prdef);
-                         if prdef^.deftype<>procdef then
-                          Message(unit_f_ppu_read_error);
-                         pprocdef(prdef)^.load_references;
-                       end;
-        else
-          Message(unit_f_ppu_read_error);
-        end;
-      end;
-
-    procedure tsym.write_external_references;
-      var ref : pref;
-          prdef : pdef;
-      begin
-         ppufile^.do_crc:=false;
-         if lastwritten=lastref then
-           exit;
-         writesymref(@self);
-         writeentry(ibextsymref);
-
-         write_references;
-
-         if typ=procsym then
-           begin
-              prdef:=pprocsym(@self)^.definition;
-              while assigned(prdef) do
-                begin
-                   pprocdef(prdef)^.write_external_references;
-                   prdef:=pprocdef(prdef)^.nextoverloaded;
-                end;
-           end;
-         ppufile^.do_crc:=true;
       end;
       end;
 
 
 {$else NEWPPU}
 {$else NEWPPU}
@@ -228,37 +179,6 @@
       end;
       end;
 
 
 
 
-    procedure load_external_references;
-
-      var b : byte;
-          sym : psym;
-          prdef : pdef;
-      begin
-         b:=readbyte;
-         while (b=ibextsymref) or (b=ibextdefref) do
-           begin
-              if b=ibextsymref then
-                begin
-                   sym:=readsymref;
-                   resolvesym(sym);
-                   sym^.load_references;
-                   b:=readbyte;
-                end
-              else
-              if b=ibextdefref then
-                begin
-                   prdef:=readdefref;
-                   resolvedef(prdef);
-                   if prdef^.deftype<>procdef then
-                    Message(unit_f_ppu_read_error);
-                   pprocdef(prdef)^.load_references;
-                   b:=readbyte;
-                end;
-           end;
-         if b <> ibend then
-           Message(unit_f_ppu_read_error);
-      end;
-
     procedure tsym.write_external_references;
     procedure tsym.write_external_references;
       var ref : pref;
       var ref : pref;
           prdef : pdef;
           prdef : pdef;
@@ -296,44 +216,48 @@
 
 
 {$endif NEWPPU}
 {$endif NEWPPU}
 
 
-    procedure tsym.write_ref_to_file(var f : text);
-
-      var ref : pref;
-         i : longint;
-
+    procedure tsym.add_to_browserlog;
+      var
+        prdef : pprocdef;
       begin
       begin
-         ref:=defref;
-         if assigned(ref) then
-           begin
-              for i:=1 to reffile_indent do
-                system.write(f,' ');
-              writeln(f,'***',name,'***');
-           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('***'+name+'***');
+           Browse.AddLogRefs(defref);
+         end;
+      { when it's a procsym then write also the refs to the definition
+        due the overloading }
+        if typ=procsym then
+         begin
+           prdef:=pprocsym(@self)^.definition;
+           while assigned(prdef) do
+            begin
+              pprocdef(prdef)^.add_to_browserlog;
+              prdef:=pprocdef(prdef)^.nextoverloaded;
+            end;
+         end;
       end;
       end;
 {$endif UseBrowser}
 {$endif UseBrowser}
 
 
-    destructor tsym.done;
 
 
+    destructor tsym.done;
       begin
       begin
 {$ifdef tp}
 {$ifdef tp}
          if not(use_big) then
          if not(use_big) then
 {$endif tp}
 {$endif tp}
            strdispose(_name);
            strdispose(_name);
-         if assigned(left) then dispose(left,done);
-         if assigned(right) then dispose(right,done);
+{$ifdef UseBrowser}
+         if assigned(defref) then
+          dispose(defref,done);
+{$endif UseBrowser}
+         if assigned(left) then
+           dispose(left,done);
+         if assigned(right) then
+           dispose(right,done);
       end;
       end;
 
 
-    destructor tsym.single_done;
 
 
+    destructor tsym.single_done;
       begin
       begin
 {$ifdef tp}
 {$ifdef tp}
          if not(use_big) then
          if not(use_big) then
@@ -348,8 +272,8 @@
          if object_options then
          if object_options then
            writebyte(byte(properties));
            writebyte(byte(properties));
 {$ifdef UseBrowser}
 {$ifdef UseBrowser}
-         if (current_module^.flags and uf_uses_browser)<>0 then
-           write_references;
+{         if cs_browser in aktswitches then
+           write_references; }
 {$endif UseBrowser}
 {$endif UseBrowser}
       end;
       end;
 
 
@@ -462,9 +386,13 @@
 ****************************************************************************}
 ****************************************************************************}
 
 
     constructor tunitsym.init(const n : string;ref : punitsymtable);
     constructor tunitsym.init(const n : string;ref : punitsymtable);
-
+      var
+        old_make_ref : boolean;
       begin
       begin
-         tsym.init(n);
+         old_make_ref:=make_ref;
+         make_ref:=false;
+         inherited init(n);
+         make_ref:=old_make_ref;
          typ:=unitsym;
          typ:=unitsym;
          unitsymtable:=ref;
          unitsymtable:=ref;
          prevsym:=ref^.unitsym;
          prevsym:=ref^.unitsym;
@@ -627,8 +555,8 @@
 
 
     constructor tprogramsym.init(const n : string);
     constructor tprogramsym.init(const n : string);
       begin
       begin
-         tsym.init(n);
-         typ:=programsym;
+        inherited init(n);
+        typ:=programsym;
       end;
       end;
 
 
 {****************************************************************************
 {****************************************************************************
@@ -637,8 +565,8 @@
 
 
     constructor terrorsym.init;
     constructor terrorsym.init;
       begin
       begin
-         tsym.init('');
-         typ:=errorsym;
+        inherited init('');
+        typ:=errorsym;
       end;
       end;
 
 
 {****************************************************************************
 {****************************************************************************
@@ -875,15 +803,14 @@
          _mangledname:=nil;
          _mangledname:=nil;
          varspez:=vs_value;
          varspez:=vs_value;
          address:=0;
          address:=0;
-		 refs:=0;
-		 var_options:=0;
+         refs:=0;
          is_valid := 1;
          is_valid := 1;
+         var_options:=0;
          { can we load the value into a register ? }
          { can we load the value into a register ? }
          case p^.deftype of
          case p^.deftype of
         pointerdef,
         pointerdef,
            enumdef,
            enumdef,
-        procvardef :
-          var_options:=var_options or vo_regable;
+        procvardef : var_options:=var_options or vo_regable;
             orddef : case porddef(p)^.typ of
             orddef : case porddef(p)^.typ of
                        u8bit,u16bit,u32bit,
                        u8bit,u16bit,u32bit,
                        bool8bit,bool16bit,bool32bit,
                        bool8bit,bool16bit,bool32bit,
@@ -907,7 +834,8 @@
          varspez:=tvarspez(readbyte);
          varspez:=tvarspez(readbyte);
          if read_member then
          if read_member then
            address:=readlong
            address:=readlong
-         else address:=0;
+         else
+           address:=0;
          definition:=readdefref;
          definition:=readdefref;
          refs := 0;
          refs := 0;
          is_valid := 1;
          is_valid := 1;
@@ -924,7 +852,7 @@
          var_options:=var_options or vo_is_C_var;
          var_options:=var_options or vo_is_C_var;
          _mangledname:=strpnew(target_os.Cprefix+mangled);
          _mangledname:=strpnew(target_os.Cprefix+mangled);
       end;
       end;
-      
+
     constructor tvarsym.load_C;
     constructor tvarsym.load_C;
 
 
       begin
       begin
@@ -1028,7 +956,7 @@
             { the data filed is generated in parser.pas
             { the data filed is generated in parser.pas
               with a tobject_FIELDNAME variable }
               with a tobject_FIELDNAME variable }
             { this symbol can't be loaded to a register }
             { this symbol can't be loaded to a register }
-            var_options:=var_options or vo_regable;
+            var_options:=var_options and not vo_regable;
          end
          end
        else if not(read_member) then
        else if not(read_member) then
          begin
          begin
@@ -1071,7 +999,8 @@
                 if cs_debuginfo in aktswitches then
                 if cs_debuginfo in aktswitches then
                    concatstabto(bsssegment);
                    concatstabto(bsssegment);
 {$endif GDB}
 {$endif GDB}
-                if (cs_smartlink in aktswitches) then
+                if (cs_smartlink in aktswitches) or
+                   ((var_options and vo_is_c_var)<>0) then
                   bsssegment^.concat(new(pai_datablock,init_global(mangledname,l)))
                   bsssegment^.concat(new(pai_datablock,init_global(mangledname,l)))
                 else
                 else
                   bsssegment^.concat(new(pai_datablock,init(mangledname,l)));
                   bsssegment^.concat(new(pai_datablock,init(mangledname,l)));
@@ -1248,7 +1177,7 @@
          strdispose(_mangledname);
          strdispose(_mangledname);
          inherited done;
          inherited done;
       end;
       end;
-      
+
 
 
 {****************************************************************************
 {****************************************************************************
                              TTYPEDCONSTSYM
                              TTYPEDCONSTSYM
@@ -1742,10 +1671,21 @@
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.11  1998-06-15 13:31:21  daniel
+  Revision 1.12  1998-06-15 14:23:44  daniel
+
+  * Reverted my changes.
 
 
+  Revision 1.10  1998/06/13 00:10:18  peter
+    * working browser and newppu
+    * some small fixes against crashes which occured in bp7 (but not in
+      fpc?!)
 
 
-  * Fixes to make it compilable under BP again.
+  Revision 1.9  1998/06/12 16:15:35  pierre
+    * external name 'C_var';
+      export name 'intern_C_var';
+      cdecl;
+      cdecl;external;
+      are now supported only with -Sv switch
 
 
   Revision 1.8  1998/06/11 10:11:59  peter
   Revision 1.8  1998/06/11 10:11:59  peter
     * -gb works again
     * -gb works again