* Reverted my changes.

This commit is contained in:
daniel 1998-06-15 14:23:44 +00:00
parent c359ca7094
commit 401240a35e

View File

@ -41,10 +41,13 @@
{$ifdef UseBrowser} {$ifdef UseBrowser}
defref:=nil; defref:=nil;
lastwritten:=nil; lastwritten:=nil;
if make_ref then refcount:=0;
add_new_ref(defref,@tokenpos); 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; pos : tfileposinfo;
b : byte;
l,c : longint;
begin begin
b:=readentry; while (not ppufile^.endofentry) do
if b=ibref then begin
begin readposinfo(pos);
while (not ppufile^.endofentry) do inc(refcount);
begin lastref:=new(pref,init(lastref,@pos));
fileindex:=readword; if refcount=1 then
l:=readlong; defref:=lastref;
c:=readword; end;
inc(refcount); lastwritten:=lastref;
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; ref : pref;
prdef : pdef;
begin begin
{ references do not change the ppu caracteristics } if lastwritten=lastref then
{ this only save the references to variables/functions } exit;
{ defined in the unit what about the others } { write address to this symbol }
ppufile^.do_crc:=false; writesymref(@self);
if assigned(lastwritten) then { write symbol refs }
ref:=lastwritten if assigned(lastwritten) then
else ref:=lastwritten
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
sym:=readsymref;
resolvesym(sym);
sym^.load_references;
end;
ibextdefref : begin
prdef:=readdefref;
resolvedef(prdef);
if prdef^.deftype<>procdef then
Message(unit_f_ppu_read_error);
pprocdef(prdef)^.load_references;
end;
else else
Message(unit_f_ppu_read_error); ref:=defref;
end; while assigned(ref) do
end; begin
writeposinfo(ref^.posinfo);
procedure tsym.write_external_references; ref:=ref^.nextref;
var ref : pref; end;
prdef : pdef; lastwritten:=lastref;
begin ppufile^.writeentry(ibsymref);
ppufile^.do_crc:=false; { when it's a procsym then write also the refs to the definition
if lastwritten=lastref then due the overloading }
exit; if typ=procsym then
writesymref(@self); begin
writeentry(ibextsymref); prdef:=pprocsym(@self)^.definition;
while assigned(prdef) do
write_references; begin
pprocdef(prdef)^.write_references;
if typ=procsym then prdef:=pprocdef(prdef)^.nextoverloaded;
begin end;
prdef:=pprocsym(@self)^.definition; end;
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); procedure tsym.add_to_browserlog;
var
var ref : pref; prdef : pprocdef;
i : longint;
begin begin
ref:=defref; if assigned(defref) then
if assigned(ref) then begin
begin Browse.AddLog('***'+name+'***');
for i:=1 to reffile_indent do Browse.AddLogRefs(defref);
system.write(f,' '); end;
writeln(f,'***',name,'***'); { when it's a procsym then write also the refs to the definition
end; due the overloading }
inc(reffile_indent,2); if typ=procsym then
while assigned(ref) do begin
begin prdef:=pprocsym(@self)^.definition;
for i:=1 to reffile_indent do while assigned(prdef) do
system.write(f,' '); begin
writeln(f,ref^.get_file_line); pprocdef(prdef)^.add_to_browserlog;
ref:=ref^.nextref; prdef:=pprocdef(prdef)^.nextoverloaded;
end; end;
dec(reffile_indent,2); 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); {$ifdef UseBrowser}
if assigned(right) then dispose(right,done); 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 { if cs_browser in aktswitches then
write_references; 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); inherited init(n);
typ:=programsym; typ:=programsym;
end; end;
{**************************************************************************** {****************************************************************************
@ -637,8 +565,8 @@
constructor terrorsym.init; constructor terrorsym.init;
begin begin
tsym.init(''); inherited init('');
typ:=errorsym; typ:=errorsym;
end; end;
{**************************************************************************** {****************************************************************************
@ -875,15 +803,14 @@
_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 : procvardef : var_options:=var_options or vo_regable;
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.
* Fixes to make it compilable under BP again. 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.8 1998/06/11 10:11:59 peter Revision 1.8 1998/06/11 10:11:59 peter
* -gb works again * -gb works again