* local browser support fixed

This commit is contained in:
peter 2001-08-19 09:39:27 +00:00
parent a314a01b9d
commit 7b45b6a4a9
6 changed files with 188 additions and 228 deletions

View File

@ -375,7 +375,7 @@ implementation
symb:=tstoredsym(symt.search(upper(ss))); symb:=tstoredsym(symt.search(upper(ss)));
if not assigned(symb) then if not assigned(symb) then
begin begin
symt:=tprocsym(sym).definition.parast; symt:=tprocsym(sym).definition.localst;
sym:=tstoredsym(symt.search(ss)); sym:=tstoredsym(symt.search(ss));
if symb=nil then if symb=nil then
symb:=tstoredsym(symt.search(upper(ss))); symb:=tstoredsym(symt.search(upper(ss)));
@ -461,11 +461,6 @@ implementation
writesymtable(prdef.localst); writesymtable(prdef.localst);
end; end;
end; end;
if assigned(tprocdef(prdef).defref) then
begin
browserlog.AddLog('***'+tprocdef(prdef).name+'***');
browserlog.AddLogRefs(tprocdef(prdef).defref);
end;
prdef:=tprocdef(prdef).nextoverloaded; prdef:=tprocdef(prdef).nextoverloaded;
end; end;
end; end;
@ -519,7 +514,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.8 2001-04-18 22:01:53 peter Revision 1.9 2001-08-19 09:39:27 peter
* local browser support fixed
Revision 1.8 2001/04/18 22:01:53 peter
* registration of targets and assemblers * registration of targets and assemblers
Revision 1.7 2001/04/13 01:22:06 peter Revision 1.7 2001/04/13 01:22:06 peter

View File

@ -303,8 +303,8 @@ uses
if not onlysource then if not onlysource then
begin begin
fnd:=PPUSearchPath('.'); fnd:=PPUSearchPath('.');
if (not fnd) and (current_module.outputpath^<>'') then if (not fnd) and (outputpath^<>'') then
fnd:=PPUSearchPath(current_module.outputpath^); fnd:=PPUSearchPath(outputpath^);
end; end;
if (not fnd) and (fn<>'') then if (not fnd) and (fn<>'') then
begin begin
@ -330,7 +330,7 @@ uses
if (not fnd) then if (not fnd) then
fnd:=SourceSearchPath('.'); fnd:=SourceSearchPath('.');
if (not fnd) then if (not fnd) then
fnd:=SearchPathList(current_module.LocalUnitSearchPath); fnd:=SearchPathList(LocalUnitSearchPath);
if (not fnd) then if (not fnd) then
fnd:=SearchPathList(UnitSearchPath); fnd:=SearchPathList(UnitSearchPath);
@ -341,7 +341,7 @@ uses
filename:=copy(filename,1,8); filename:=copy(filename,1,8);
fnd:=SearchPath('.'); fnd:=SearchPath('.');
if (not fnd) then if (not fnd) then
fnd:=SearchPathList(current_module.LocalUnitSearchPath); fnd:=SearchPathList(LocalUnitSearchPath);
if not fnd then if not fnd then
fnd:=SearchPathList(UnitSearchPath); fnd:=SearchPathList(UnitSearchPath);
end; end;
@ -686,22 +686,22 @@ uses
end; end;
{ load browser } { load browser }
if (current_module.flags and uf_has_browser)<>0 then if (flags and uf_has_browser)<>0 then
begin begin
tstoredsymtable(globalsymtable).load_browser(ppufile); tstoredsymtable(globalsymtable).load_references(ppufile,true);
unitindex:=1; unitindex:=1;
while assigned(map^[unitindex]) do while assigned(map^[unitindex]) do
begin begin
{ each unit wrote one browser entry } { each unit wrote one browser entry }
tstoredsymtable(globalsymtable).load_browser(ppufile); tstoredsymtable(globalsymtable).load_references(ppufile,false);
inc(unitindex); inc(unitindex);
end; end;
b:=ppufile.readentry; b:=ppufile.readentry;
if b<>ibendbrowser then if b<>ibendbrowser then
Message1(unit_f_ppu_invalid_entry,tostr(b)); Message1(unit_f_ppu_invalid_entry,tostr(b));
end; end;
if ((current_module.flags and uf_local_browser)<>0) then if ((flags and uf_local_browser)<>0) then
tstaticsymtable(current_module.localsymtable).load_browser(ppufile); tstaticsymtable(localsymtable).load_references(ppufile,true);
end; end;
@ -772,18 +772,18 @@ uses
{ write all browser section } { write all browser section }
if (flags and uf_has_browser)<>0 then if (flags and uf_has_browser)<>0 then
begin begin
tstoredsymtable(globalsymtable).write_browser(ppufile); tstoredsymtable(globalsymtable).write_references(ppufile,true);
pu:=tused_unit(used_units.first); pu:=tused_unit(used_units.first);
while assigned(pu) do while assigned(pu) do
begin begin
tstoredsymtable(pu.u.globalsymtable).write_browser(ppufile); tstoredsymtable(pu.u.globalsymtable).write_references(ppufile,false);
pu:=tused_unit(pu.next); pu:=tused_unit(pu.next);
end; end;
ppufile.writeentry(ibendbrowser); ppufile.writeentry(ibendbrowser);
end; end;
if ((flags and uf_local_browser)<>0) and if ((flags and uf_local_browser)<>0) and
assigned(localsymtable) then assigned(localsymtable) then
tstaticsymtable(localsymtable).write_browser(ppufile); tstaticsymtable(localsymtable).write_references(ppufile,true);
{ the last entry ibend is written automaticly } { the last entry ibend is written automaticly }
@ -1180,7 +1180,10 @@ uses
end. end.
{ {
$Log$ $Log$
Revision 1.9 2001-06-18 20:36:23 peter Revision 1.10 2001-08-19 09:39:27 peter
* local browser support fixed
Revision 1.9 2001/06/18 20:36:23 peter
* -Ur switch (merged) * -Ur switch (merged)
* masm fixes (merged) * masm fixes (merged)
* quoted filenames for go32v2 and win32 * quoted filenames for go32v2 and win32

View File

@ -70,7 +70,6 @@ interface
function size:longint;override; function size:longint;override;
function alignment:longint;override; function alignment:longint;override;
function is_publishable : boolean;override; function is_publishable : boolean;override;
function is_in_current : boolean;
{ debug } { debug }
{$ifdef GDB} {$ifdef GDB}
function stabstring : pchar;virtual; function stabstring : pchar;virtual;
@ -540,8 +539,8 @@ interface
function haspara:boolean; function haspara:boolean;
function mangledname : string; function mangledname : string;
procedure setmangledname(const s : string); procedure setmangledname(const s : string);
procedure load_references(ppufile:tcompilerppufile); procedure load_references(ppufile:tcompilerppufile;locals:boolean);
function write_references(ppufile:tcompilerppufile) : boolean; function write_references(ppufile:tcompilerppufile;locals:boolean):boolean;
function fullprocname:string; function fullprocname:string;
function fullprocnamewithret:string; function fullprocnamewithret:string;
function cplusplusmangledname : string; function cplusplusmangledname : string;
@ -701,6 +700,7 @@ interface
pbestrealtype : ^ttype = @s64floattype; pbestrealtype : ^ttype = @s64floattype;
{$endif} {$endif}
{$ifdef GDB} {$ifdef GDB}
{ GDB Helpers } { GDB Helpers }
function typeglobalnumber(const s : string) : string; function typeglobalnumber(const s : string) : string;
@ -742,6 +742,7 @@ implementation
gendef gendef
; ;
{**************************************************************************** {****************************************************************************
Helpers Helpers
****************************************************************************} ****************************************************************************}
@ -855,33 +856,6 @@ implementation
end; end;
function tstoreddef.is_in_current : boolean;
var
p : tsymtable;
begin
p:=owner;
is_in_current:=false;
while assigned(p) do
begin
if (p=tsymtable(current_module.globalsymtable)) or (p=tsymtable(current_module.localsymtable))
or (p.symtabletype in [globalsymtable,staticsymtable]) then
begin
is_in_current:=true;
exit;
end
else if p.symtabletype in [localsymtable,parasymtable,objectsymtable] then
begin
if assigned(p.defowner) then
p:=tobjectdef(p.defowner).owner
else
exit;
end
else
exit;
end;
end;
procedure tstoreddef.writedef(ppufile:tcompilerppufile); procedure tstoreddef.writedef(ppufile:tcompilerppufile);
begin begin
ppufile.putword(indexnr); ppufile.putword(indexnr);
@ -3515,9 +3489,10 @@ implementation
end; end;
tparasymtable(parast).write(ppufile); tparasymtable(parast).write(ppufile);
{ save localsymtable for inline procedures, this has no influence { save localsymtable for inline procedures or when local
on the crc } browser info is requested, this has no influence on the crc }
if (pocall_inline in proccalloptions) then if (pocall_inline in proccalloptions) or
((current_module.flags and uf_local_browser)<>0) then
begin begin
oldintfcrc:=ppufile.do_crc; oldintfcrc:=ppufile.do_crc;
ppufile.do_crc:=false; ppufile.do_crc:=false;
@ -3568,9 +3543,7 @@ implementation
end; end;
end; end;
Const local_symtable_index : longint = $8001; procedure tprocdef.load_references(ppufile:tcompilerppufile;locals:boolean);
procedure tprocdef.load_references(ppufile:tcompilerppufile);
var var
pos : tfileposinfo; pos : tfileposinfo;
oldsymtablestack, oldsymtablestack,
@ -3589,43 +3562,28 @@ Const local_symtable_index : longint = $8001;
end; end;
if move_last then if move_last then
lastwritten:=lastref; lastwritten:=lastref;
if ((current_module.flags and uf_local_browser)<>0) if ((current_module.flags and uf_local_browser)<>0) and
and is_in_current then locals then
begin begin
oldsymtablestack:=symtablestack; tparasymtable(parast).load_references(ppufile,locals);
st:=aktlocalsymtable; tlocalsymtable(localst).load_references(ppufile,locals);
parast:=tparasymtable.create;
tparasymtable(parast).load(ppufile);
parast.defowner:=self;
aktlocalsymtable:=parast;
tparasymtable(parast).deref;
parast.next:=owner;
tparasymtable(parast).load_browser(ppufile);
aktlocalsymtable:=st;
localst:=tlocalsymtable.create;
tlocalsymtable(localst).load(ppufile);
localst.defowner:=self;
aktlocalsymtable:=localst;
symtablestack:=parast;
tlocalsymtable(localst).deref;
localst.next:=parast;
tlocalsymtable(localst).load_browser(ppufile);
aktlocalsymtable:=st;
symtablestack:=oldsymtablestack;
end; end;
end; end;
function tprocdef.write_references(ppufile:tcompilerppufile) : boolean; Const
local_symtable_index : longint = $8001;
function tprocdef.write_references(ppufile:tcompilerppufile;locals:boolean):boolean;
var var
ref : tref; ref : tref;
st : tsymtable;
pdo : tobjectdef; pdo : tobjectdef;
move_last : boolean; move_last : boolean;
begin begin
move_last:=lastwritten=lastref; move_last:=lastwritten=lastref;
if move_last and (((current_module.flags and uf_local_browser)=0) if move_last and
or not is_in_current) then (((current_module.flags and uf_local_browser)=0) or
not locals) then
exit; exit;
{ write address of this symbol } { write address of this symbol }
ppufile.putderef(self); ppufile.putderef(self);
@ -3651,8 +3609,8 @@ Const local_symtable_index : longint = $8001;
end; end;
ppufile.writeentry(ibdefref); ppufile.writeentry(ibdefref);
write_references:=true; write_references:=true;
if ((current_module.flags and uf_local_browser)<>0) if ((current_module.flags and uf_local_browser)<>0) and
and is_in_current then locals then
begin begin
pdo:=_class; pdo:=_class;
if (owner.symtabletype<>localsymtable) then if (owner.symtabletype<>localsymtable) then
@ -3665,27 +3623,12 @@ Const local_symtable_index : longint = $8001;
end; end;
pdo:=pdo.childof; pdo:=pdo.childof;
end; end;
{ we need TESTLOCALBROWSER para and local symtables
PPU files are then easier to read PM }
if not assigned(parast) then
parast:=tparasymtable.create;
parast.defowner:=self;
st:=aktlocalsymtable;
aktlocalsymtable:=parast;
tstoredsymtable(parast).write(ppufile);
parast.unitid:=local_symtable_index; parast.unitid:=local_symtable_index;
inc(local_symtable_index); inc(local_symtable_index);
tstoredsymtable(parast).write_browser(ppufile);
if not assigned(localst) then
localst:=tlocalsymtable.create;
localst.defowner:=self;
aktlocalsymtable:=localst;
tstoredsymtable(localst).write(ppufile);
localst.unitid:=local_symtable_index; localst.unitid:=local_symtable_index;
inc(local_symtable_index); inc(local_symtable_index);
tstoredsymtable(localst).write_browser(ppufile); tstoredsymtable(parast).write_references(ppufile,locals);
aktlocalsymtable:=st; tstoredsymtable(localst).write_references(ppufile,locals);
{ decrement for } { decrement for }
local_symtable_index:=local_symtable_index-2; local_symtable_index:=local_symtable_index-2;
pdo:=_class; pdo:=_class;
@ -5546,8 +5489,8 @@ Const local_symtable_index : longint = $8001;
end. end.
{ {
$Log$ $Log$
Revision 1.42 2001-08-12 22:09:40 peter Revision 1.43 2001-08-19 09:39:27 peter
* write also dynamicarray flag to ppu * local browser support fixed
Revision 1.41 2001/08/12 20:04:33 peter Revision 1.41 2001/08/12 20:04:33 peter
* fpu_used=0 when simplify_ppu is used * fpu_used=0 when simplify_ppu is used

View File

@ -64,8 +64,8 @@ interface
function stabstring : pchar;virtual; function stabstring : pchar;virtual;
procedure concatstabto(asmlist : taasmoutput);virtual; procedure concatstabto(asmlist : taasmoutput);virtual;
{$endif GDB} {$endif GDB}
procedure load_references(ppufile:tcompilerppufile);virtual; procedure load_references(ppufile:tcompilerppufile;locals:boolean);virtual;
function write_references(ppufile:tcompilerppufile) : boolean;virtual; function write_references(ppufile:tcompilerppufile;locals:boolean):boolean;virtual;
end; end;
tlabelsym = class(tstoredsym) tlabelsym = class(tstoredsym)
@ -115,8 +115,8 @@ interface
procedure order_overloaded; procedure order_overloaded;
procedure write(ppufile:tcompilerppufile);override; procedure write(ppufile:tcompilerppufile);override;
procedure deref;override; procedure deref;override;
procedure load_references(ppufile:tcompilerppufile);override; procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
function write_references(ppufile:tcompilerppufile) : boolean;override; function write_references(ppufile:tcompilerppufile;locals:boolean):boolean;override;
{$ifdef GDB} {$ifdef GDB}
function stabstring : pchar;override; function stabstring : pchar;override;
procedure concatstabto(asmlist : taasmoutput);override; procedure concatstabto(asmlist : taasmoutput);override;
@ -133,8 +133,8 @@ interface
procedure write(ppufile:tcompilerppufile);override; procedure write(ppufile:tcompilerppufile);override;
procedure deref;override; procedure deref;override;
function gettypedef:tdef;override; function gettypedef:tdef;override;
procedure load_references(ppufile:tcompilerppufile);override; procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
function write_references(ppufile:tcompilerppufile) : boolean;override; function write_references(ppufile:tcompilerppufile;locals:boolean):boolean;override;
{$ifdef GDB} {$ifdef GDB}
function stabstring : pchar;override; function stabstring : pchar;override;
procedure concatstabto(asmlist : taasmoutput);override; procedure concatstabto(asmlist : taasmoutput);override;
@ -394,7 +394,7 @@ implementation
end; end;
procedure tstoredsym.load_references(ppufile:tcompilerppufile); procedure tstoredsym.load_references(ppufile:tcompilerppufile;locals:boolean);
var var
pos : tfileposinfo; pos : tfileposinfo;
move_last : boolean; move_last : boolean;
@ -418,7 +418,7 @@ implementation
interface parsing of other units PM interface parsing of other units PM
moduleindex must be checked !! } moduleindex must be checked !! }
function tstoredsym.write_references(ppufile:tcompilerppufile) : boolean; function tstoredsym.write_references(ppufile:tcompilerppufile;locals:boolean):boolean;
var var
ref : tref; ref : tref;
symref_written,move_last : boolean; symref_written,move_last : boolean;
@ -783,12 +783,12 @@ implementation
end; end;
procedure tprocsym.load_references(ppufile:tcompilerppufile); procedure tprocsym.load_references(ppufile:tcompilerppufile;locals:boolean);
(*var (*var
prdef,prdef2 : tprocdef; prdef,prdef2 : tprocdef;
b : byte; *) b : byte; *)
begin begin
inherited load_references(ppufile); inherited load_references(ppufile,locals);
(*prdef:=definition; (*prdef:=definition;
done in tsymtable.load_browser (PM) done in tsymtable.load_browser (PM)
{ take care about operators !! } { take care about operators !! }
@ -807,18 +807,18 @@ implementation
end; *) end; *)
end; end;
function tprocsym.write_references(ppufile:tcompilerppufile) : boolean; function tprocsym.write_references(ppufile:tcompilerppufile;locals:boolean) : boolean;
var var
prdef : tprocdef; prdef : tprocdef;
begin begin
write_references:=false; write_references:=false;
if not inherited write_references(ppufile) then if not inherited write_references(ppufile,locals) then
exit; exit;
write_references:=true; write_references:=true;
prdef:=definition; prdef:=definition;
while assigned(prdef) and (prdef.owner=definition.owner) do while assigned(prdef) and (prdef.owner=definition.owner) do
begin begin
prdef.write_references(ppufile); prdef.write_references(ppufile,locals);
prdef:=prdef.nextoverloaded; prdef:=prdef.nextoverloaded;
end; end;
end; end;
@ -1428,7 +1428,7 @@ implementation
varstate:=vs_declared; varstate:=vs_declared;
varalign:=size_2_align(l); varalign:=size_2_align(l);
varalign:=used_align(varalign,aktalignment.localalignmin,aktalignment.localalignmax); varalign:=used_align(varalign,aktalignment.localalignmin,aktalignment.localalignmax);
address:=align(owner.datasize,varalign)+l; address:=align(owner.datasize+l,varalign);
owner.datasize:=address; owner.datasize:=address;
end; end;
staticsymtable : staticsymtable :
@ -2142,33 +2142,34 @@ implementation
end; end;
procedure ttypesym.load_references(ppufile:tcompilerppufile); procedure ttypesym.load_references(ppufile:tcompilerppufile;locals:boolean);
begin begin
inherited load_references(ppufile); inherited load_references(ppufile,locals);
if (restype.def.deftype=recorddef) then if (restype.def.deftype=recorddef) then
tstoredsymtable(trecorddef(restype.def).symtable).load_browser(ppufile); tstoredsymtable(trecorddef(restype.def).symtable).load_references(ppufile,locals);
if (restype.def.deftype=objectdef) then if (restype.def.deftype=objectdef) then
tstoredsymtable(tobjectdef(restype.def).symtable).load_browser(ppufile); tstoredsymtable(tobjectdef(restype.def).symtable).load_references(ppufile,locals);
end; end;
function ttypesym.write_references(ppufile:tcompilerppufile) : boolean; function ttypesym.write_references(ppufile:tcompilerppufile;locals:boolean):boolean;
begin begin
if not inherited write_references(ppufile) then if not inherited write_references(ppufile,locals) then
begin
{ write address of this symbol if record or object { write address of this symbol if record or object
even if no real refs are there even if no real refs are there
because we need it for the symtable } because we need it for the symtable }
if (restype.def.deftype=recorddef) or if (restype.def.deftype in [recorddef,objectdef]) then
(restype.def.deftype=objectdef) then begin
begin ppufile.putderef(self);
ppufile.putderef(self); ppufile.writeentry(ibsymref);
ppufile.writeentry(ibsymref); end;
end; end;
write_references:=true; write_references:=true;
if (restype.def.deftype=recorddef) then if (restype.def.deftype=recorddef) then
tstoredsymtable(trecorddef(restype.def).symtable).write_browser(ppufile); tstoredsymtable(trecorddef(restype.def).symtable).write_references(ppufile,locals);
if (restype.def.deftype=objectdef) then if (restype.def.deftype=objectdef) then
tstoredsymtable(tobjectdef(restype.def).symtable).write_browser(ppufile); tstoredsymtable(tobjectdef(restype.def).symtable).write_references(ppufile,locals);
end; end;
@ -2239,8 +2240,8 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.17 2001-08-12 22:11:52 peter Revision 1.18 2001-08-19 09:39:28 peter
* errordef.typesym is not updated anymore * local browser support fixed
Revision 1.16 2001/08/12 20:00:26 peter Revision 1.16 2001/08/12 20:00:26 peter
* don't write fpuregable for varoptions * don't write fpuregable for varoptions

View File

@ -70,8 +70,8 @@ interface
{ load/write } { load/write }
procedure load(ppufile:tcompilerppufile);virtual; procedure load(ppufile:tcompilerppufile);virtual;
procedure write(ppufile:tcompilerppufile);virtual; procedure write(ppufile:tcompilerppufile);virtual;
procedure load_browser(ppufile:tcompilerppufile);virtual; procedure load_references(ppufile:tcompilerppufile;locals:boolean);virtual;
procedure write_browser(ppufile:tcompilerppufile);virtual; procedure write_references(ppufile:tcompilerppufile;locals:boolean);virtual;
procedure deref;virtual; procedure deref;virtual;
procedure derefimpl;virtual; procedure derefimpl;virtual;
procedure insert(sym : tsymentry);override; procedure insert(sym : tsymentry);override;
@ -97,8 +97,8 @@ interface
public public
procedure load(ppufile:tcompilerppufile);override; procedure load(ppufile:tcompilerppufile);override;
procedure write(ppufile:tcompilerppufile);override; procedure write(ppufile:tcompilerppufile);override;
procedure load_browser(ppufile:tcompilerppufile);override; procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
procedure write_browser(ppufile:tcompilerppufile);override; procedure write_references(ppufile:tcompilerppufile;locals:boolean);override;
end; end;
trecordsymtable = class(tabstractrecordsymtable) trecordsymtable = class(tabstractrecordsymtable)
@ -117,8 +117,8 @@ interface
public public
procedure load(ppufile:tcompilerppufile);override; procedure load(ppufile:tcompilerppufile);override;
procedure write(ppufile:tcompilerppufile);override; procedure write(ppufile:tcompilerppufile);override;
procedure load_browser(ppufile:tcompilerppufile);override; procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
procedure write_browser(ppufile:tcompilerppufile);override; procedure write_references(ppufile:tcompilerppufile;locals:boolean);override;
end; end;
tlocalsymtable = class(tabstractlocalsymtable) tlocalsymtable = class(tabstractlocalsymtable)
@ -168,8 +168,8 @@ interface
constructor create(const n : string); constructor create(const n : string);
procedure load(ppufile:tcompilerppufile);override; procedure load(ppufile:tcompilerppufile);override;
procedure write(ppufile:tcompilerppufile);override; procedure write(ppufile:tcompilerppufile);override;
procedure load_browser(ppufile:tcompilerppufile);override; procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
procedure write_browser(ppufile:tcompilerppufile);override; procedure write_references(ppufile:tcompilerppufile;locals:boolean);override;
procedure insert(sym : tsymentry);override; procedure insert(sym : tsymentry);override;
end; end;
@ -435,7 +435,7 @@ implementation
end; end;
procedure tstoredsymtable.load_browser(ppufile:tcompilerppufile); procedure tstoredsymtable.load_references(ppufile:tcompilerppufile;locals:boolean);
var var
b : byte; b : byte;
sym : tstoredsym; sym : tstoredsym;
@ -452,7 +452,7 @@ implementation
sym:=tstoredsym(ppufile.getderef); sym:=tstoredsym(ppufile.getderef);
resolvesym(tsym(sym)); resolvesym(tsym(sym));
if assigned(sym) then if assigned(sym) then
sym.load_references(ppufile); sym.load_references(ppufile,locals);
end; end;
ibdefref : ibdefref :
begin begin
@ -462,7 +462,7 @@ implementation
begin begin
if prdef.deftype<>procdef then if prdef.deftype<>procdef then
Message(unit_f_ppu_read_error); Message(unit_f_ppu_read_error);
tprocdef(prdef).load_references(ppufile); tprocdef(prdef).load_references(ppufile,locals);
end; end;
end; end;
ibendsymtablebrowser : ibendsymtablebrowser :
@ -474,16 +474,16 @@ implementation
end; end;
procedure tstoredsymtable.write_browser(ppufile:tcompilerppufile); procedure tstoredsymtable.write_references(ppufile:tcompilerppufile;locals:boolean);
var var
pd : tstoredsym; pd : tstoredsym;
begin begin
ppufile.writeentry(ibbeginsymtablebrowser); ppufile.writeentry(ibbeginsymtablebrowser);
{ foreach is used to write all symbols } { write all symbols }
pd:=tstoredsym(symindex.first); pd:=tstoredsym(symindex.first);
while assigned(pd) do while assigned(pd) do
begin begin
pd.write_references(ppufile); pd.write_references(ppufile,locals);
pd:=tstoredsym(pd.indexnext); pd:=tstoredsym(pd.indexnext);
end; end;
ppufile.writeentry(ibendsymtablebrowser); ppufile.writeentry(ibendsymtablebrowser);
@ -985,6 +985,15 @@ implementation
{$endif} {$endif}
{ returns true, if p contains data which needs init/final code }
function tstoredsymtable.needs_init_final : boolean;
begin
b_needs_init_final:=false;
foreach({$ifdef FPCPROCVAR}@{$endif}_needs_init_final);
needs_init_final:=b_needs_init_final;
end;
{**************************************************************************** {****************************************************************************
TAbstractRecordSymtable TAbstractRecordSymtable
****************************************************************************} ****************************************************************************}
@ -1022,27 +1031,27 @@ implementation
end; end;
procedure tabstractrecordsymtable.load_browser(ppufile:tcompilerppufile); procedure tabstractrecordsymtable.load_references(ppufile:tcompilerppufile;locals:boolean);
var var
storesymtable : tsymtable; storesymtable : tsymtable;
begin begin
storesymtable:=aktrecordsymtable; storesymtable:=aktrecordsymtable;
aktrecordsymtable:=self; aktrecordsymtable:=self;
inherited load_browser(ppufile); inherited load_references(ppufile,locals);
aktrecordsymtable:=storesymtable; aktrecordsymtable:=storesymtable;
end; end;
procedure tabstractrecordsymtable.write_browser(ppufile:tcompilerppufile); procedure tabstractrecordsymtable.write_references(ppufile:tcompilerppufile;locals:boolean);
var var
storesymtable : tsymtable; storesymtable : tsymtable;
begin begin
storesymtable:=aktrecordsymtable; storesymtable:=aktrecordsymtable;
aktrecordsymtable:=self; aktrecordsymtable:=self;
inherited write_browser(ppufile); inherited write_references(ppufile,locals);
aktrecordsymtable:=storesymtable; aktrecordsymtable:=storesymtable;
end; end;
@ -1059,16 +1068,6 @@ implementation
end; end;
{ returns true, if p contains data which needs init/final code }
function tstoredsymtable.needs_init_final : boolean;
begin
b_needs_init_final:=false;
foreach({$ifdef FPCPROCVAR}@{$endif}_needs_init_final);
needs_init_final:=b_needs_init_final;
end;
{**************************************************************************** {****************************************************************************
TRecordSymtable TRecordSymtable
****************************************************************************} ****************************************************************************}
@ -1199,27 +1198,27 @@ implementation
end; end;
procedure tabstractlocalsymtable.load_browser(ppufile:tcompilerppufile); procedure tabstractlocalsymtable.load_references(ppufile:tcompilerppufile;locals:boolean);
var var
storesymtable : tsymtable; storesymtable : tsymtable;
begin begin
storesymtable:=aktlocalsymtable; storesymtable:=aktlocalsymtable;
aktlocalsymtable:=self; aktlocalsymtable:=self;
inherited load_browser(ppufile); inherited load_references(ppufile,locals);
aktlocalsymtable:=storesymtable; aktlocalsymtable:=storesymtable;
end; end;
procedure tabstractlocalsymtable.write_browser(ppufile:tcompilerppufile); procedure tabstractlocalsymtable.write_references(ppufile:tcompilerppufile;locals:boolean);
var var
storesymtable : tsymtable; storesymtable : tsymtable;
begin begin
storesymtable:=aktlocalsymtable; storesymtable:=aktlocalsymtable;
aktlocalsymtable:=self; aktlocalsymtable:=self;
inherited load_browser(ppufile); inherited write_references(ppufile,locals);
aktlocalsymtable:=storesymtable; aktlocalsymtable:=storesymtable;
end; end;
@ -1472,19 +1471,19 @@ implementation
end; end;
procedure tstaticsymtable.load_browser(ppufile:tcompilerppufile); procedure tstaticsymtable.load_references(ppufile:tcompilerppufile;locals:boolean);
begin begin
aktstaticsymtable:=self; aktstaticsymtable:=self;
inherited load_browser(ppufile); inherited load_references(ppufile,locals);
end; end;
procedure tstaticsymtable.write_browser(ppufile:tcompilerppufile); procedure tstaticsymtable.write_references(ppufile:tcompilerppufile;locals:boolean);
begin begin
aktstaticsymtable:=self; aktstaticsymtable:=self;
inherited write_browser(ppufile); inherited write_references(ppufile,locals);
end; end;
@ -2072,7 +2071,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.40 2001-08-06 21:40:49 peter Revision 1.41 2001-08-19 09:39:29 peter
* local browser support fixed
Revision 1.40 2001/08/06 21:40:49 peter
* funcret moved from tprocinfo to tprocdef * funcret moved from tprocinfo to tprocdef
Revision 1.39 2001/07/29 22:12:58 peter Revision 1.39 2001/07/29 22:12:58 peter

View File

@ -48,6 +48,7 @@ var
ppufile : tppufile; ppufile : tppufile;
space : string; space : string;
read_member : boolean; read_member : boolean;
unitindex : longint;
verbose : longint; verbose : longint;
{**************************************************************************** {****************************************************************************
@ -344,7 +345,7 @@ begin
end; end;
procedure read_abstract_proc_def; { Read abstract procdef and return if inline procdef }
type type
tproccalloption=(pocall_none, tproccalloption=(pocall_none,
pocall_clearstack, { Use IBM flat calling convention. (Used by GCC.) } pocall_clearstack, { Use IBM flat calling convention. (Used by GCC.) }
@ -390,6 +391,7 @@ type
po_varargs { printf like arguments } po_varargs { printf like arguments }
); );
tprocoptions=set of tprocoption; tprocoptions=set of tprocoption;
function read_abstract_proc_def:tproccalloptions;
type type
tproccallopt=record tproccallopt=record
mask : tproccalloption; mask : tproccalloption;
@ -477,6 +479,7 @@ begin
writeln; writeln;
end; end;
ppufile.getsmallset(proccalloptions); ppufile.getsmallset(proccalloptions);
read_abstract_proc_def:=proccalloptions;
if proccalloptions<>[] then if proccalloptions<>[] then
begin begin
write(space,' CallOptions : '); write(space,' CallOptions : ');
@ -862,6 +865,7 @@ var
oldread_member : boolean; oldread_member : boolean;
totaldefs,l,j, totaldefs,l,j,
defcnt : longint; defcnt : longint;
calloption : tproccalloptions;
begin begin
defcnt:=0; defcnt:=0;
with ppufile do with ppufile do
@ -934,12 +938,13 @@ begin
readtype; readtype;
writeln(space,' Range : ',getlongint,' to ',getlongint); writeln(space,' Range : ',getlongint,' to ',getlongint);
writeln(space,' Is Constructor : ',(getbyte<>0)); writeln(space,' Is Constructor : ',(getbyte<>0));
writeln(space,' Is Dynamic : ',(getbyte<>0));
end; end;
ibprocdef : ibprocdef :
begin begin
readcommondef('Procedure definition'); readcommondef('Procedure definition');
read_abstract_proc_def; calloption:=read_abstract_proc_def;
writeln(space,' Used Register : ',getbyte); writeln(space,' Used Register : ',getbyte);
writeln(space,' Mangled name : ',getstring); writeln(space,' Mangled name : ',getstring);
writeln(space,' Number : ',getlongint); writeln(space,' Number : ',getlongint);
@ -949,13 +954,22 @@ begin
readdefref; readdefref;
write (space,' File Pos : '); write (space,' File Pos : ');
readposinfo; readposinfo;
if (pocall_inline in calloption) then
begin
write (space,' FuncretSym : ');
readdefref;
end;
space:=' '+space; space:=' '+space;
{ parast } { parast }
readdefinitions(false); readdefinitions(false);
readsymbols; readsymbols;
{ localst } { localst }
{readdefinitions(false); if (pocall_inline in calloption) or
readsymbols;} ((ppufile.header.flags and uf_local_browser) <> 0) then
begin
readdefinitions(false);
readsymbols;
end;
delete(space,1,4); delete(space,1,4);
end; end;
@ -1276,50 +1290,49 @@ begin
repeat repeat
b:=readentry; b:=readentry;
case b of case b of
ibbeginsymtablebrowser : ibbeginsymtablebrowser :
{ here we must read object and record symtables !! } begin
begin { here we must read object and record symtables !! }
indent:=indent+' '; indent:=indent+' ';
Writeln(indent,'Record/Object symtable'); Writeln(indent,'Record/Object symtable');
readbrowser; readbrowser;
Indent:=Copy(Indent,1,Length(Indent)-2); Indent:=Copy(Indent,1,Length(Indent)-2);
end; end;
ibsymref : begin ibsymref :
readsymref; begin
readref; readsymref;
end; readref;
ibdefref : begin end;
readdefref; ibdefref :
readref; begin
if (ppufile.header.flags and uf_local_browser)<>0 then readdefref;
begin readref;
{ parast and localst } if ((ppufile.header.flags and uf_local_browser)<>0) and
indent:=indent+' '; (UnitIndex=0) then
Writeln(indent,'Parasymtable for function'); begin
readdefinitions(false); { parast and localst }
readsymbols; indent:=indent+' ';
b:=ppufile.readentry; b:=ppufile.readentry;
if b=ibbeginsymtablebrowser then if b=ibbeginsymtablebrowser then
readbrowser; readbrowser;
Writeln(indent,'Localsymtable for function'); b:=ppufile.readentry;
readdefinitions(false); if b=ibbeginsymtablebrowser then
readsymbols; readbrowser;
b:=ppufile.readentry; Indent:=Copy(Indent,1,Length(Indent)-2);
if b=ibbeginsymtablebrowser then end;
readbrowser; end;
Indent:=Copy(Indent,1,Length(Indent)-2); iberror :
end; begin
end; Writeln('Error in PPU');
iberror : begin exit;
Writeln('Error in PPU'); end;
exit; ibendsymtablebrowser :
end; break;
ibendsymtablebrowser : break; else
else begin
begin WriteLn('!! Skipping unsupported PPU Entry in Browser: ',b);
WriteLn('!! Skipping unsupported PPU Entry in Browser: ',b); Halt;
Halt; end;
end;
end; end;
until false; until false;
end; end;
@ -1332,7 +1345,7 @@ end;
procedure dofile (filename : string); procedure dofile (filename : string);
var var
b,unitindex : byte; b : byte;
begin begin
{ reset } { reset }
space:=''; space:='';
@ -1468,13 +1481,10 @@ begin
Writeln; Writeln;
Writeln('Static browser section'); Writeln('Static browser section');
Writeln('---------------'); Writeln('---------------');
UnitIndex:=0;
b:=ppufile.readentry; b:=ppufile.readentry;
if b=ibbeginsymtablebrowser then if b=ibbeginsymtablebrowser then
begin readbrowser
Writeln('Unit ',UnitIndex);
readbrowser;
Inc(UnitIndex);
end
else else
Writeln('Wrong end browser entry ',b,' should be ',ibendbrowser); Writeln('Wrong end browser entry ',b,' should be ',ibendbrowser);
end; end;
@ -1550,7 +1560,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.5 2001-06-29 19:42:18 peter Revision 1.6 2001-08-19 09:39:29 peter
* local browser support fixed
Revision 1.5 2001/06/29 19:42:18 peter
* new flags added * new flags added
Revision 1.4 2001/06/04 11:53:15 peter Revision 1.4 2001/06/04 11:53:15 peter