|
@@ -29,7 +29,8 @@
|
|
deftype:=abstractdef;
|
|
deftype:=abstractdef;
|
|
owner := nil;
|
|
owner := nil;
|
|
next := nil;
|
|
next := nil;
|
|
- number := 0;
|
|
|
|
|
|
+ sym := nil;
|
|
|
|
+ indexnb := 0;
|
|
if registerdef then
|
|
if registerdef then
|
|
symtablestack^.registerdef(@self);
|
|
symtablestack^.registerdef(@self);
|
|
has_rtti:=false;
|
|
has_rtti:=false;
|
|
@@ -48,20 +49,19 @@
|
|
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;
|
|
- is_def_stab_written := false;
|
|
|
|
- number := 0;
|
|
|
|
|
|
+ indexnb := 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
|
|
- tdef.init;
|
|
|
|
|
|
+ inherited 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
|
|
- tdef.load;
|
|
|
|
|
|
+ inherited 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,13 +1356,11 @@
|
|
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 }
|
|
@@ -1797,14 +1795,16 @@
|
|
localst^.next:=parast;
|
|
localst^.next:=parast;
|
|
{$ifdef UseBrowser}
|
|
{$ifdef UseBrowser}
|
|
defref:=nil;
|
|
defref:=nil;
|
|
- if make_ref then
|
|
|
|
- add_new_ref(defref,@tokenpos);
|
|
|
|
- lastref:=defref;
|
|
|
|
lastwritten:=nil;
|
|
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}
|
|
{$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,10 +1821,8 @@
|
|
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;
|
|
@@ -1854,47 +1852,78 @@
|
|
localst:=nil;
|
|
localst:=nil;
|
|
forwarddef:=false;
|
|
forwarddef:=false;
|
|
{$ifdef UseBrowser}
|
|
{$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}
|
|
{$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
|
|
- fileindex:=readword;
|
|
|
|
- l:=readlong;
|
|
|
|
- c:=readword;
|
|
|
|
|
|
+ readposinfo(pos);
|
|
inc(refcount);
|
|
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;
|
|
b:=readbyte;
|
|
end;
|
|
end;
|
|
if b <> ibend then
|
|
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;
|
|
end;
|
|
|
|
|
|
|
|
+
|
|
procedure tprocdef.write_references;
|
|
procedure tprocdef.write_references;
|
|
|
|
|
|
var ref : pref;
|
|
var ref : pref;
|
|
@@ -1911,9 +1940,7 @@
|
|
while assigned(ref) do
|
|
while assigned(ref) do
|
|
begin
|
|
begin
|
|
writebyte(ibref);
|
|
writebyte(ibref);
|
|
- writeword(ref^.posinfo.fileindex);
|
|
|
|
- writelong(ref^.posinfo.line);
|
|
|
|
- writeword(ref^.posinfo.column);
|
|
|
|
|
|
+ writeposinfo(ref^.posinfo);
|
|
ref:=ref^.nextref;
|
|
ref:=ref^.nextref;
|
|
end;
|
|
end;
|
|
lastwritten:=lastref;
|
|
lastwritten:=lastref;
|
|
@@ -1937,44 +1964,34 @@
|
|
while assigned(ref) do
|
|
while assigned(ref) do
|
|
begin
|
|
begin
|
|
writebyte(ibref);
|
|
writebyte(ibref);
|
|
- writeword(ref^.posinfo.fileindex);
|
|
|
|
- writelong(ref^.posinfo.line);
|
|
|
|
- writeword(ref^.posinfo.column);
|
|
|
|
|
|
+ writeposinfo(ref^.posinfo);
|
|
ref:=ref^.nextref;
|
|
ref:=ref^.nextref;
|
|
end;
|
|
end;
|
|
lastwritten:=lastref;
|
|
lastwritten:=lastref;
|
|
writebyte(ibend);
|
|
writebyte(ibend);
|
|
- ppufile.do_crc:=true;
|
|
|
|
|
|
+ ppufile.do_crc:=false;
|
|
end;
|
|
end;
|
|
|
|
|
|
- procedure tprocdef.write_ref_to_file(var f : text);
|
|
|
|
|
|
|
|
- var ref : pref;
|
|
|
|
- i : longint;
|
|
|
|
|
|
+{$endif NEWPPU}
|
|
|
|
|
|
|
|
+ procedure tprocdef.add_to_browserlog;
|
|
begin
|
|
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;
|
|
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
|
|
@@ -1983,13 +2000,12 @@
|
|
{$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);
|
|
@@ -2019,14 +2035,9 @@
|
|
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}
|
|
@@ -2620,10 +2631,14 @@
|
|
|
|
|
|
{
|
|
{
|
|
$Log$
|
|
$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
|
|
Revision 1.9 1998/06/12 14:10:37 michael
|
|
* Fixed wrong code for ansistring
|
|
* Fixed wrong code for ansistring
|
|
@@ -2645,9 +2660,8 @@
|
|
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
|
|
|
|
-
|
|
|
|
- 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
|
|
Revision 1.3 1998/06/03 22:49:03 peter
|
|
+ wordbool,longbool
|
|
+ wordbool,longbool
|
|
@@ -2665,4 +2679,4 @@
|
|
* symtable adapted for $ifdef NEWPPU
|
|
* symtable adapted for $ifdef NEWPPU
|
|
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|