Browse Source

* Fixes to make it compilable under BP again.

daniel 27 years ago
parent
commit
d9445e22e9
2 changed files with 255 additions and 201 deletions
  1. 84 94
      compiler/symdef.inc
  2. 171 107
      compiler/symsym.inc

+ 84 - 94
compiler/symdef.inc

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

+ 171 - 107
compiler/symsym.inc

@@ -41,13 +41,10 @@
 {$ifdef UseBrowser}
 {$ifdef UseBrowser}
          defref:=nil;
          defref:=nil;
          lastwritten:=nil;
          lastwritten:=nil;
-         refcount:=0;
-         if (cs_browser in aktswitches) and make_ref then
-          begin
-            defref:=new(pref,init(defref,@tokenpos));
-            inc(refcount);
-          end;
+         if make_ref then
+           add_new_ref(defref,@tokenpos);
          lastref:=defref;
          lastref:=defref;
+         refcount:=1;
 {$endif UseBrowser}
 {$endif UseBrowser}
       end;
       end;
 
 
@@ -58,7 +55,6 @@
          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
@@ -68,10 +64,16 @@
          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}
@@ -80,51 +82,98 @@
 
 
     procedure tsym.load_references;
     procedure tsym.load_references;
       var
       var
-        pos : tfileposinfo;
+        fileindex : word;
+        b         : byte;
+        l,c       : longint;
       begin
       begin
-        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;
+         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;
       end;
       end;
 
 
     procedure tsym.write_references;
     procedure tsym.write_references;
       var
       var
-        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
-           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
+        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
          begin
          begin
-           prdef:=pprocsym(@self)^.definition;
-           while assigned(prdef) do
-            begin
-              pprocdef(prdef)^.write_references;
-              prdef:=pprocdef(prdef)^.nextoverloaded;
-            end;
+           sym:=readsymref;
+           resolvesym(sym);
+           sym^.load_references;
          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}
@@ -179,6 +228,37 @@
       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;
@@ -216,48 +296,44 @@
 
 
 {$endif NEWPPU}
 {$endif NEWPPU}
 
 
-    procedure tsym.add_to_browserlog;
-      var
-        prdef : pprocdef;
+    procedure tsym.write_ref_to_file(var f : text);
+
+      var ref : pref;
+         i : longint;
+
       begin
       begin
-        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;
+         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);
       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);
-{$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);
+         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
@@ -272,8 +348,8 @@
          if object_options then
          if object_options then
            writebyte(byte(properties));
            writebyte(byte(properties));
 {$ifdef UseBrowser}
 {$ifdef UseBrowser}
-{         if cs_browser in aktswitches then
-           write_references; }
+         if (current_module^.flags and uf_uses_browser)<>0 then
+           write_references;
 {$endif UseBrowser}
 {$endif UseBrowser}
       end;
       end;
 
 
@@ -386,13 +462,9 @@
 ****************************************************************************}
 ****************************************************************************}
 
 
     constructor tunitsym.init(const n : string;ref : punitsymtable);
     constructor tunitsym.init(const n : string;ref : punitsymtable);
-      var
-        old_make_ref : boolean;
+
       begin
       begin
-         old_make_ref:=make_ref;
-         make_ref:=false;
-         inherited init(n);
-         make_ref:=old_make_ref;
+         tsym.init(n);
          typ:=unitsym;
          typ:=unitsym;
          unitsymtable:=ref;
          unitsymtable:=ref;
          prevsym:=ref^.unitsym;
          prevsym:=ref^.unitsym;
@@ -555,8 +627,8 @@
 
 
     constructor tprogramsym.init(const n : string);
     constructor tprogramsym.init(const n : string);
       begin
       begin
-        inherited init(n);
-        typ:=programsym;
+         tsym.init(n);
+         typ:=programsym;
       end;
       end;
 
 
 {****************************************************************************
 {****************************************************************************
@@ -565,8 +637,8 @@
 
 
     constructor terrorsym.init;
     constructor terrorsym.init;
       begin
       begin
-        inherited init('');
-        typ:=errorsym;
+         tsym.init('');
+         typ:=errorsym;
       end;
       end;
 
 
 {****************************************************************************
 {****************************************************************************
@@ -803,14 +875,15 @@
          _mangledname:=nil;
          _mangledname:=nil;
          varspez:=vs_value;
          varspez:=vs_value;
          address:=0;
          address:=0;
-         refs:=0;
+		 refs:=0;
+		 var_options:=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,
@@ -834,8 +907,7 @@
          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;
@@ -852,7 +924,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
@@ -956,7 +1028,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 and not vo_regable;
+            var_options:=var_options or vo_regable;
          end
          end
        else if not(read_member) then
        else if not(read_member) then
          begin
          begin
@@ -999,8 +1071,7 @@
                 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) or
-                   ((var_options and vo_is_c_var)<>0) then
+                if (cs_smartlink in aktswitches) 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)));
@@ -1177,7 +1248,7 @@
          strdispose(_mangledname);
          strdispose(_mangledname);
          inherited done;
          inherited done;
       end;
       end;
-
+      
 
 
 {****************************************************************************
 {****************************************************************************
                              TTYPEDCONSTSYM
                              TTYPEDCONSTSYM
@@ -1671,17 +1742,10 @@
 
 
 {
 {
   $Log$
   $Log$
-  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?!)
-
-  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.11  1998-06-15 13:31:21  daniel
+
+
+  * Fixes to make it compilable under BP again.
 
 
   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