mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-06 16:50:38 +01:00
* write derefdata in a separate ppu entry
This commit is contained in:
parent
28c96ab8e2
commit
6878c55c80
@ -209,6 +209,7 @@ interface
|
||||
constructor Create;
|
||||
constructor ppuload(t:taitype;ppufile:tcompilerppufile);virtual;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);virtual;
|
||||
procedure buildderef;virtual;
|
||||
procedure derefimpl;virtual;
|
||||
end;
|
||||
|
||||
@ -434,6 +435,7 @@ interface
|
||||
protected
|
||||
procedure ppuloadoper(ppufile:tcompilerppufile;var o:toper);virtual;abstract;
|
||||
procedure ppuwriteoper(ppufile:tcompilerppufile;const o:toper);virtual;abstract;
|
||||
procedure ppubuildderefoper(var o:toper);virtual;abstract;
|
||||
procedure ppuderefoper(var o:toper);virtual;abstract;
|
||||
public
|
||||
{ Condition flags for instruction }
|
||||
@ -456,6 +458,7 @@ interface
|
||||
function getcopy:TLinkedListItem;override;
|
||||
constructor ppuload(t:taitype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
procedure SetCondition(const c:TAsmCond);
|
||||
procedure allocate_oper(opers:longint);
|
||||
@ -613,6 +616,11 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tai.buildderef;
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tai.derefimpl;
|
||||
begin
|
||||
end;
|
||||
@ -2006,6 +2014,15 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure taicpu_abstract.buildderef;
|
||||
var
|
||||
i : integer;
|
||||
begin
|
||||
for i:=0 to ops-1 do
|
||||
ppubuildderefoper(oper[i]^);
|
||||
end;
|
||||
|
||||
|
||||
procedure taicpu_abstract.derefimpl;
|
||||
var
|
||||
i : integer;
|
||||
@ -2122,7 +2139,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.45 2003-10-21 15:15:35 peter
|
||||
Revision 1.46 2003-10-22 20:39:59 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.45 2003/10/21 15:15:35 peter
|
||||
* taicpu_abstract.oper[] changed to pointers
|
||||
|
||||
Revision 1.44 2003/10/17 14:38:32 peter
|
||||
|
||||
@ -266,7 +266,8 @@ interface
|
||||
pos,
|
||||
used : integer;
|
||||
Next : pdynamicblock;
|
||||
data : array[0..high(integer)-20] of byte;
|
||||
{ can't use sizeof(integer) because it crashes gdb }
|
||||
data : array[0..1024*1024] of byte;
|
||||
end;
|
||||
|
||||
tdynamicarray = class
|
||||
@ -1746,9 +1747,9 @@ end;
|
||||
{ not found ? then increase blocks }
|
||||
if not assigned(FPosnblock) then
|
||||
begin
|
||||
{ the current FLastblock is now also fully used }
|
||||
FLastblock^.used:=blocksize;
|
||||
repeat
|
||||
{ the current FLastblock is now also fully used }
|
||||
FLastblock^.used:=blocksize;
|
||||
grow;
|
||||
FPosnblock:=FLastblock;
|
||||
until FPosnblock^.pos+blocksize>=i;
|
||||
@ -1884,7 +1885,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.26 2003-10-11 16:06:42 florian
|
||||
Revision 1.27 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.26 2003/10/11 16:06:42 florian
|
||||
* fixed some MMX<->SSE
|
||||
* started to fix ppc, needs an overhaul
|
||||
+ stabs info improve for spilling, not sure if it works correctly/completly
|
||||
|
||||
@ -97,6 +97,7 @@ interface
|
||||
islibrary : boolean; { if it is a library (win32 dll) }
|
||||
map : punitmap; { mapping of all used units }
|
||||
mapsize : longint; { number of units in the map }
|
||||
derefdata : tdynamicarray;
|
||||
globalsymtable, { pointer to the global symtable of this unit }
|
||||
localsymtable : tsymtable;{ pointer to the local symtable of this unit }
|
||||
scanner : pointer; { scanner object used }
|
||||
@ -381,6 +382,7 @@ implementation
|
||||
scanner:=nil;
|
||||
map:=nil;
|
||||
mapsize:=0;
|
||||
derefdata:=TDynamicArray.Create(1024);
|
||||
globalsymtable:=nil;
|
||||
localsymtable:=nil;
|
||||
loaded_from:=LoadedFrom;
|
||||
@ -515,6 +517,8 @@ implementation
|
||||
localsymtable.free;
|
||||
localsymtable:=nil;
|
||||
end;
|
||||
derefdata.free;
|
||||
derefdata:=TDynamicArray.Create(1024);
|
||||
if assigned(map) then
|
||||
begin
|
||||
freemem(map);
|
||||
@ -683,7 +687,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.39 2003-10-22 15:22:33 peter
|
||||
Revision 1.40 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.39 2003/10/22 15:22:33 peter
|
||||
* fixed unitsym-globalsymtable relation so the uses of a unit
|
||||
is counted correctly
|
||||
|
||||
|
||||
@ -69,12 +69,14 @@ interface
|
||||
procedure writesourcefiles;
|
||||
procedure writeusedunit(intf:boolean);
|
||||
procedure writelinkcontainer(var p:tlinkcontainer;id:byte;strippath:boolean);
|
||||
procedure writederefdata;
|
||||
procedure putasmsymbol_in_idx(s:tnamedindexitem;arg:pointer);
|
||||
procedure writeasmsymbols;
|
||||
procedure readusedmacros;
|
||||
procedure readsourcefiles;
|
||||
procedure readloadunit;
|
||||
procedure readlinkcontainer(var p:tlinkcontainer);
|
||||
procedure readderefdata;
|
||||
procedure readasmsymbols;
|
||||
end;
|
||||
|
||||
@ -479,6 +481,27 @@ uses
|
||||
end;
|
||||
|
||||
|
||||
procedure tppumodule.writederefdata;
|
||||
var
|
||||
len,hlen : longint;
|
||||
buf : array[0..1023] of byte;
|
||||
begin
|
||||
len:=derefdata.size;
|
||||
derefdata.seek(0);
|
||||
while (len>0) do
|
||||
begin
|
||||
if len>1024 then
|
||||
hlen:=1024
|
||||
else
|
||||
hlen:=len;
|
||||
derefdata.read(buf,hlen);
|
||||
ppufile.putdata(buf,hlen);
|
||||
dec(len,hlen);
|
||||
end;
|
||||
ppufile.writeentry(ibderefdata);
|
||||
end;
|
||||
|
||||
|
||||
procedure tppumodule.putasmsymbol_in_idx(s:tnamedindexitem;arg:pointer);
|
||||
begin
|
||||
if tasmsymbol(s).ppuidx<>-1 then
|
||||
@ -714,6 +737,25 @@ uses
|
||||
end;
|
||||
|
||||
|
||||
procedure tppumodule.readderefdata;
|
||||
var
|
||||
len,hlen : longint;
|
||||
buf : array[0..1023] of byte;
|
||||
begin
|
||||
len:=ppufile.entrysize;
|
||||
while (len>0) do
|
||||
begin
|
||||
if len>1024 then
|
||||
hlen:=1024
|
||||
else
|
||||
hlen:=len;
|
||||
ppufile.getdata(buf,hlen);
|
||||
derefdata.write(buf,hlen);
|
||||
dec(len,hlen);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure tppumodule.readasmsymbols;
|
||||
var
|
||||
labelnr,
|
||||
@ -794,6 +836,8 @@ uses
|
||||
readlinkcontainer(LinkotherStaticLibs);
|
||||
iblinkothersharedlibs :
|
||||
readlinkcontainer(LinkotherSharedLibs);
|
||||
ibderefdata :
|
||||
readderefdata;
|
||||
ibendinterface :
|
||||
break;
|
||||
else
|
||||
@ -914,6 +958,13 @@ uses
|
||||
writelinkcontainer(linkothersharedlibs,iblinkothersharedlibs,true);
|
||||
ppufile.do_crc:=true;
|
||||
|
||||
{ generate and write deref data }
|
||||
tstoredsymtable(globalsymtable).buildderef;
|
||||
if ((flags and uf_local_browser)<>0) and
|
||||
assigned(localsymtable) then
|
||||
tstoredsymtable(localsymtable).buildderef;
|
||||
writederefdata;
|
||||
|
||||
ppufile.writeentry(ibendinterface);
|
||||
|
||||
{ write the symtable entries }
|
||||
@ -1415,7 +1466,10 @@ if modulename^='SYMSYM' then
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.41 2003-10-22 17:38:25 peter
|
||||
Revision 1.42 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.41 2003/10/22 17:38:25 peter
|
||||
* write implementation units in implementation part of the ppu
|
||||
so it doesn't confuse the unit loading
|
||||
|
||||
|
||||
@ -60,6 +60,7 @@ interface
|
||||
destructor destroy;override;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -543,6 +544,20 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tasmnode.buildderef;
|
||||
var
|
||||
hp : tai;
|
||||
begin
|
||||
inherited buildderef;
|
||||
hp:=tai(p_asm.first);
|
||||
while assigned(hp) do
|
||||
begin
|
||||
hp.buildderef;
|
||||
hp:=tai(hp.next);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure tasmnode.derefimpl;
|
||||
var
|
||||
hp : tai;
|
||||
@ -830,7 +845,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.67 2003-10-21 18:15:16 peter
|
||||
Revision 1.68 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.67 2003/10/21 18:15:16 peter
|
||||
* fixed check for $X- result usage
|
||||
|
||||
Revision 1.66 2003/10/19 01:34:30 florian
|
||||
|
||||
@ -114,6 +114,7 @@ interface
|
||||
destructor destroy;override;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
{ Goes through all symbols in a class and subclasses and calls
|
||||
@ -154,7 +155,6 @@ interface
|
||||
destructor destroy;override;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
procedure insertintolist(l : tnodelist);override;
|
||||
procedure get_paratype;
|
||||
@ -522,12 +522,6 @@ type
|
||||
end;
|
||||
|
||||
|
||||
procedure tcallparanode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
end;
|
||||
|
||||
|
||||
function tcallparanode.getcopy : tnode;
|
||||
|
||||
var
|
||||
@ -971,8 +965,8 @@ type
|
||||
procedure tcallnode.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited ppuwrite(ppufile);
|
||||
ppufile.putderef(symtableprocentry,symtableprocentryderef);
|
||||
ppufile.putderef(procdefinition,procdefinitionderef);
|
||||
ppufile.putderef(symtableprocentryderef);
|
||||
ppufile.putderef(procdefinitionderef);
|
||||
ppufile.putbyte(byte(restypeset));
|
||||
ppuwritenode(ppufile,methodpointer);
|
||||
ppuwritenode(ppufile,_funcretnode);
|
||||
@ -980,6 +974,20 @@ type
|
||||
end;
|
||||
|
||||
|
||||
procedure tcallnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
symtableprocentryderef.build(symtableprocentry);
|
||||
procdefinitionderef.build(procdefinition);
|
||||
if assigned(methodpointer) then
|
||||
methodpointer.buildderef;
|
||||
if assigned(_funcretnode) then
|
||||
_funcretnode.buildderef;
|
||||
if assigned(inlinecode) then
|
||||
inlinecode.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tcallnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -2576,7 +2584,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.198 2003-10-21 18:17:02 peter
|
||||
Revision 1.199 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.198 2003/10/21 18:17:02 peter
|
||||
* only search for overloaded constructors in classes
|
||||
|
||||
Revision 1.197 2003/10/21 15:14:55 peter
|
||||
|
||||
@ -44,6 +44,7 @@ interface
|
||||
constructor create_explicit(node : tnode;const t : ttype);
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -498,6 +499,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure ttypeconvnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
totype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure ttypeconvnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -2103,7 +2111,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.124 2003-10-21 18:16:13 peter
|
||||
Revision 1.125 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.124 2003/10/21 18:16:13 peter
|
||||
* IncompatibleTypes() added that will include unit names when
|
||||
the typenames are the same
|
||||
|
||||
|
||||
@ -40,6 +40,7 @@ interface
|
||||
constructor create(v : bestreal;const t:ttype);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -60,6 +61,7 @@ interface
|
||||
constructor create(v : tconstexprint;const t:ttype; _rangecheck : boolean);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -75,6 +77,7 @@ interface
|
||||
constructor create(v : TConstPtrUInt;const t:ttype);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -93,6 +96,7 @@ interface
|
||||
constructor createwstr(w : pcompilerwidestring);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
destructor destroy;override;
|
||||
function getcopy : tnode;override;
|
||||
@ -111,6 +115,7 @@ interface
|
||||
destructor destroy;override;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -365,6 +370,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure trealconstnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
restype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure trealconstnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -451,6 +463,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tordconstnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
restype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tordconstnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -529,6 +548,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tpointerconstnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
restype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tpointerconstnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -655,6 +681,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tstringconstnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tstringconstnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -773,6 +805,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tsetconstnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
restype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tsetconstnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -911,7 +950,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.54 2003-10-07 18:17:44 peter
|
||||
Revision 1.55 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.54 2003/10/07 18:17:44 peter
|
||||
* Give message that constant expr is expected when a none constant
|
||||
is passed to get_ordinal_value
|
||||
|
||||
|
||||
@ -60,6 +60,7 @@ interface
|
||||
function getcopy : tnode;override;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
procedure insertintolist(l : tnodelist);override;
|
||||
procedure printnodetree(var t:text);override;
|
||||
@ -124,6 +125,7 @@ interface
|
||||
{ constructor createintern(g:tinterngotolabel);}
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function det_resulttype:tnode;override;
|
||||
@ -141,6 +143,7 @@ interface
|
||||
constructor create(p : tlabelsym;l:tnode);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function det_resulttype:tnode;override;
|
||||
@ -154,6 +157,7 @@ interface
|
||||
constructor create(l,taddr,tframe:tnode);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
procedure insertintolist(l : tnodelist);override;
|
||||
@ -283,6 +287,16 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tloopnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
if assigned(t1) then
|
||||
t1.buildderef;
|
||||
if assigned(t2) then
|
||||
t2.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tloopnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -960,11 +974,18 @@ implementation
|
||||
procedure tgotonode.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited ppuwrite(ppufile);
|
||||
ppufile.putderef(labsym,labsymderef);
|
||||
ppufile.putderef(labsymderef);
|
||||
ppufile.putbyte(exceptionblock);
|
||||
end;
|
||||
|
||||
|
||||
procedure tgotonode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
labsymderef.build(labsym);
|
||||
end;
|
||||
|
||||
|
||||
procedure tgotonode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -1049,12 +1070,19 @@ implementation
|
||||
procedure tlabelnode.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited ppuwrite(ppufile);
|
||||
ppufile.putderef(labsym,labsymderef);
|
||||
ppufile.putderef(labsymderef);
|
||||
ppufile.putasmsymbol(labelnr);
|
||||
ppufile.putbyte(exceptionblock);
|
||||
end;
|
||||
|
||||
|
||||
procedure tlabelnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
labsymderef.build(labsym);
|
||||
end;
|
||||
|
||||
|
||||
procedure tlabelnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -1132,6 +1160,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure traisenode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
if assigned(frametree) then
|
||||
frametree.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure traisenode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -1431,7 +1467,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.83 2003-10-09 21:31:37 daniel
|
||||
Revision 1.84 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.83 2003/10/09 21:31:37 daniel
|
||||
* Register allocator splitted, ans abstract now
|
||||
|
||||
Revision 1.82 2003/10/08 19:19:45 peter
|
||||
|
||||
@ -44,6 +44,7 @@ interface
|
||||
constructor create_procvar(v : tsym;d:tprocdef;st : tsymtable);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
procedure set_mp(p:tnode);
|
||||
function getcopy : tnode;override;
|
||||
@ -97,6 +98,7 @@ interface
|
||||
constructor create(t : ttype);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function pass_1 : tnode;override;
|
||||
function det_resulttype:tnode;override;
|
||||
@ -112,6 +114,7 @@ interface
|
||||
constructor create(def:tstoreddef;rt:trttitype);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -319,8 +322,16 @@ implementation
|
||||
procedure tloadnode.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited ppuwrite(ppufile);
|
||||
ppufile.putderef(symtableentry,symtableentryderef);
|
||||
ppufile.putderef(procdef,procdefderef);
|
||||
ppufile.putderef(symtableentryderef);
|
||||
ppufile.putderef(procdefderef);
|
||||
end;
|
||||
|
||||
|
||||
procedure tloadnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
symtableentryderef.build(symtableentry);
|
||||
procdefderef.build(procdef);
|
||||
end;
|
||||
|
||||
|
||||
@ -1122,6 +1133,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure ttypenode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
restype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure ttypenode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -1183,11 +1201,18 @@ implementation
|
||||
procedure trttinode.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited ppuwrite(ppufile);
|
||||
ppufile.putderef(rttidef,rttidefderef);
|
||||
ppufile.putderef(rttidefderef);
|
||||
ppufile.putbyte(byte(rttitype));
|
||||
end;
|
||||
|
||||
|
||||
procedure trttinode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
rttidefderef.build(rttidef);
|
||||
end;
|
||||
|
||||
|
||||
procedure trttinode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -1247,7 +1272,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.113 2003-10-17 14:38:32 peter
|
||||
Revision 1.114 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.113 2003/10/17 14:38:32 peter
|
||||
* 64k registers supported
|
||||
* fixed some memory leaks
|
||||
|
||||
|
||||
@ -55,6 +55,7 @@ interface
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure mark_write;override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -76,6 +77,7 @@ interface
|
||||
constructor create(varsym : tsym;l : tnode);virtual;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
function pass_1 : tnode;override;
|
||||
@ -227,7 +229,7 @@ implementation
|
||||
procedure taddrnode.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited ppuwrite(ppufile);
|
||||
ppufile.putderef(getprocvardef,getprocvardefderef);
|
||||
ppufile.putderef(getprocvardefderef);
|
||||
end;
|
||||
|
||||
procedure Taddrnode.mark_write;
|
||||
@ -237,6 +239,13 @@ implementation
|
||||
left.mark_write;
|
||||
end;
|
||||
|
||||
procedure taddrnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
getprocvardefderef.build(getprocvardef);
|
||||
end;
|
||||
|
||||
|
||||
procedure taddrnode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -517,7 +526,14 @@ implementation
|
||||
procedure tsubscriptnode.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited ppuwrite(ppufile);
|
||||
ppufile.putderef(vs,vsderef);
|
||||
ppufile.putderef(vsderef);
|
||||
end;
|
||||
|
||||
|
||||
procedure tsubscriptnode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
vsderef.build(vs);
|
||||
end;
|
||||
|
||||
|
||||
@ -904,7 +920,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.66 2003-10-21 18:16:13 peter
|
||||
Revision 1.67 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.66 2003/10/21 18:16:13 peter
|
||||
* IncompatibleTypes() added that will include unit names when
|
||||
the typenames are the same
|
||||
|
||||
|
||||
@ -296,6 +296,7 @@ interface
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);virtual;
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);virtual;
|
||||
procedure buildderef;virtual;
|
||||
procedure derefimpl;virtual;
|
||||
|
||||
{ toggles the flag }
|
||||
@ -356,6 +357,7 @@ interface
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
procedure concattolist(l : tlinkedlist);override;
|
||||
function ischild(p : tnode) : boolean;override;
|
||||
@ -373,6 +375,7 @@ interface
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
procedure concattolist(l : tlinkedlist);override;
|
||||
function ischild(p : tnode) : boolean;override;
|
||||
@ -556,6 +559,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tnode.buildderef;
|
||||
begin
|
||||
resulttype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tnode.derefimpl;
|
||||
begin
|
||||
resulttype.resolve;
|
||||
@ -735,6 +744,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tunarynode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
if assigned(left) then
|
||||
left.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tunarynode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -832,6 +849,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tbinarynode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
if assigned(right) then
|
||||
right.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tbinarynode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -969,7 +994,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.71 2003-10-18 15:41:26 peter
|
||||
Revision 1.72 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.71 2003/10/18 15:41:26 peter
|
||||
* made worklists dynamic in size
|
||||
|
||||
Revision 1.70 2003/10/17 01:22:08 florian
|
||||
|
||||
@ -79,6 +79,7 @@ interface
|
||||
destructor destroy;override;
|
||||
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure derefimpl;override;
|
||||
function getcopy : tnode;override;
|
||||
procedure insertintolist(l : tnodelist);override;
|
||||
@ -508,7 +509,6 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
TCASENODE
|
||||
*****************************************************************************}
|
||||
@ -546,6 +546,15 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tcasenode.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
if assigned(elseblock) then
|
||||
elseblock.buildderef;
|
||||
{ppubuildderefcaserecord(nodes);}
|
||||
end;
|
||||
|
||||
|
||||
procedure tcasenode.derefimpl;
|
||||
begin
|
||||
inherited derefimpl;
|
||||
@ -686,7 +695,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.47 2003-10-09 21:31:37 daniel
|
||||
Revision 1.48 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.47 2003/10/09 21:31:37 daniel
|
||||
* Register allocator splitted, ans abstract now
|
||||
|
||||
Revision 1.46 2003/10/08 19:19:45 peter
|
||||
|
||||
@ -41,7 +41,7 @@ type
|
||||
{$endif Test_Double_checksum}
|
||||
|
||||
const
|
||||
CurrentPPUVersion=37;
|
||||
CurrentPPUVersion=38;
|
||||
|
||||
{ buffer sizes }
|
||||
maxentrysize = 1024;
|
||||
@ -77,6 +77,7 @@ const
|
||||
ibendsymtablebrowser = 14;
|
||||
ibbeginsymtablebrowser = 15;
|
||||
ibusedmacros = 16;
|
||||
ibderefdata = 17;
|
||||
{syms}
|
||||
ibtypesym = 20;
|
||||
ibprocsym = 21;
|
||||
@ -210,6 +211,7 @@ type
|
||||
procedure skipdata(len:integer);
|
||||
function readentry:byte;
|
||||
function EndOfEntry:boolean;
|
||||
function entrysize:longint;
|
||||
procedure getdatabuf(var b;len:integer;var res:integer);
|
||||
procedure getdata(var b;len:integer);
|
||||
function getbyte:byte;
|
||||
@ -521,6 +523,12 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
function tppufile.entrysize:longint;
|
||||
begin
|
||||
entrysize:=entry.size;
|
||||
end;
|
||||
|
||||
|
||||
procedure tppufile.getdatabuf(var b;len:integer;var res:integer);
|
||||
begin
|
||||
if entryidx+len>entry.size then
|
||||
@ -985,7 +993,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.42 2003-09-23 17:56:05 peter
|
||||
Revision 1.43 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.42 2003/09/23 17:56:05 peter
|
||||
* locals and paras are allocated in the code generation
|
||||
* tvarsym.localloc contains the location of para/local when
|
||||
generating code for the current procedure
|
||||
|
||||
@ -76,6 +76,7 @@ interface
|
||||
function getcopy : tstoreddef;virtual;
|
||||
procedure ppuwritedef(ppufile:tcompilerppufile);
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);virtual;abstract;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
procedure derefimpl;override;
|
||||
function size:longint;override;
|
||||
@ -126,6 +127,7 @@ interface
|
||||
constructor createtyped(const tt : ttype);
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function gettypename:string;override;
|
||||
function getmangledparaname:string;override;
|
||||
@ -193,6 +195,7 @@ interface
|
||||
constructor createfar(const tt : ttype);
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function gettypename:string;override;
|
||||
{ debug }
|
||||
@ -227,6 +230,7 @@ interface
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function size:longint;override;
|
||||
function alignment : longint;override;
|
||||
@ -279,6 +283,7 @@ interface
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
function gettypename:string;override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function getparentdef:tdef;override;
|
||||
function size : longint;override;
|
||||
@ -322,6 +327,7 @@ interface
|
||||
function searchintf(def: tdef): longint;
|
||||
procedure addintf(def: tdef);
|
||||
|
||||
procedure buildderef;
|
||||
procedure deref;
|
||||
{ add interface reference loaded from ppu }
|
||||
procedure addintf_deref(const d:tderef);
|
||||
@ -376,6 +382,7 @@ interface
|
||||
function stabstring : pchar;override;
|
||||
procedure concatstabto(asmlist : taasmoutput);override;
|
||||
{$endif GDB}
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function size : longint;override;
|
||||
function alignment : longint;override;
|
||||
@ -440,6 +447,7 @@ interface
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
procedure releasemem;
|
||||
function concatpara(afterpara:tparaitem;const tt:ttype;sym : tsym;defval:tsym;vhidden:boolean):tparaitem;
|
||||
@ -460,6 +468,7 @@ interface
|
||||
constructor create(level:byte);
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function getsymtable(t:tgetsymtable):tsymtable;override;
|
||||
function size : longint;override;
|
||||
@ -534,6 +543,7 @@ interface
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
procedure derefimpl;override;
|
||||
function getsymtable(t:tgetsymtable):tsymtable;override;
|
||||
@ -608,6 +618,7 @@ interface
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function gettypename:string;override;
|
||||
function is_publishable : boolean;override;
|
||||
@ -634,6 +645,7 @@ interface
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function gettypename:string;override;
|
||||
function is_publishable : boolean;override;
|
||||
@ -960,12 +972,12 @@ implementation
|
||||
procedure tstoreddef.ppuwritedef(ppufile:tcompilerppufile);
|
||||
begin
|
||||
ppufile.putword(indexnr);
|
||||
ppufile.putderef(typesym,typesymderef);
|
||||
ppufile.putderef(typesymderef);
|
||||
ppufile.putsmallset(defoptions);
|
||||
if df_has_rttitable in defoptions then
|
||||
ppufile.putderef(rttitablesym,rttitablesymderef);
|
||||
ppufile.putderef(rttitablesymderef);
|
||||
if df_has_inittable in defoptions then
|
||||
ppufile.putderef(inittablesym,inittablesymderef);
|
||||
ppufile.putderef(inittablesymderef);
|
||||
{$ifdef GDB}
|
||||
if globalnb = 0 then
|
||||
begin
|
||||
@ -981,6 +993,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tstoreddef.buildderef;
|
||||
begin
|
||||
typesymderef.build(typesym);
|
||||
rttitablesymderef.build(rttitablesym);
|
||||
inittablesymderef.build(inittablesym);
|
||||
end;
|
||||
|
||||
|
||||
procedure tstoreddef.deref;
|
||||
begin
|
||||
typesym:=ttypesym(typesymderef.resolve);
|
||||
@ -1560,6 +1580,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tenumdef.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
basedefderef.build(basedef);
|
||||
end;
|
||||
|
||||
|
||||
procedure tenumdef.deref;
|
||||
begin
|
||||
inherited deref;
|
||||
@ -1576,7 +1603,7 @@ implementation
|
||||
procedure tenumdef.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited ppuwritedef(ppufile);
|
||||
ppufile.putderef(basedef,basedefderef);
|
||||
ppufile.putderef(basedefderef);
|
||||
ppufile.putlongint(min);
|
||||
ppufile.putlongint(max);
|
||||
ppufile.putlongint(savesize);
|
||||
@ -2067,6 +2094,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tfiledef.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
if filetyp=ft_typed then
|
||||
typedfiletype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tfiledef.deref;
|
||||
begin
|
||||
inherited deref;
|
||||
@ -2284,6 +2319,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tpointerdef.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
pointertype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tpointerdef.deref;
|
||||
begin
|
||||
inherited deref;
|
||||
@ -2523,6 +2565,13 @@ implementation
|
||||
{$endif GDB}
|
||||
|
||||
|
||||
procedure tsetdef.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
elementtype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tsetdef.deref;
|
||||
begin
|
||||
inherited deref;
|
||||
@ -2652,6 +2701,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tarraydef.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
_elementtype.buildderef;
|
||||
rangetype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tarraydef.deref;
|
||||
begin
|
||||
inherited deref;
|
||||
@ -2966,6 +3023,19 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure trecorddef.buildderef;
|
||||
var
|
||||
oldrecsyms : tsymtable;
|
||||
begin
|
||||
inherited buildderef;
|
||||
oldrecsyms:=aktrecordsymtable;
|
||||
aktrecordsymtable:=symtable;
|
||||
{ now build the definitions }
|
||||
tstoredsymtable(symtable).buildderef;
|
||||
aktrecordsymtable:=oldrecsyms;
|
||||
end;
|
||||
|
||||
|
||||
procedure trecorddef.deref;
|
||||
var
|
||||
oldrecsyms : tsymtable;
|
||||
@ -3223,6 +3293,26 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tabstractprocdef.buildderef;
|
||||
var
|
||||
hp : TParaItem;
|
||||
begin
|
||||
inherited buildderef;
|
||||
rettype.buildderef;
|
||||
{ parast }
|
||||
tparasymtable(parast).buildderef;
|
||||
{ paraitems }
|
||||
hp:=TParaItem(Para.first);
|
||||
while assigned(hp) do
|
||||
begin
|
||||
hp.paratype.buildderef;
|
||||
hp.defaultvaluederef.build(hp.defaultvalue);
|
||||
hp.parasymderef.build(hp.parasym);
|
||||
hp:=TParaItem(hp.next);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure tabstractprocdef.deref;
|
||||
var
|
||||
hp : TParaItem;
|
||||
@ -3321,8 +3411,8 @@ implementation
|
||||
begin
|
||||
ppufile.putbyte(byte(hp.paratyp));
|
||||
ppufile.puttype(hp.paratype);
|
||||
ppufile.putderef(hp.defaultvalue,hp.defaultvaluederef);
|
||||
ppufile.putderef(hp.parasym,hp.parasymderef);
|
||||
ppufile.putderef(hp.defaultvaluederef);
|
||||
ppufile.putderef(hp.parasymderef);
|
||||
ppufile.putbyte(byte(hp.is_hidden));
|
||||
hp:=TParaItem(hp.next);
|
||||
end;
|
||||
@ -3611,8 +3701,8 @@ implementation
|
||||
ppufile.putstring(mangledname);
|
||||
ppufile.putword(overloadnumber);
|
||||
ppufile.putword(extnumber);
|
||||
ppufile.putderef(_class,_classderef);
|
||||
ppufile.putderef(procsym,procsymderef);
|
||||
ppufile.putderef(_classderef);
|
||||
ppufile.putderef(procsymderef);
|
||||
ppufile.putposinfo(fileinfo);
|
||||
ppufile.putsmallset(symoptions);
|
||||
|
||||
@ -3623,7 +3713,7 @@ implementation
|
||||
{ inline stuff }
|
||||
if proccalloption=pocall_inline then
|
||||
begin
|
||||
ppufile.putderef(funcretsym,funcretsymderef);
|
||||
ppufile.putderef(funcretsymderef);
|
||||
ppuwritenode(ppufile,code);
|
||||
end;
|
||||
ppufile.do_crc:=oldintfcrc;
|
||||
@ -3825,9 +3915,10 @@ implementation
|
||||
oldlocalsymtable:=aktlocalsymtable;
|
||||
aktparasymtable:=parast;
|
||||
aktlocalsymtable:=localst;
|
||||
{ write address of this symbol }
|
||||
ppufile.putderef(self,d);
|
||||
{ write refs }
|
||||
{ write address of this symbol }
|
||||
d.build(self);
|
||||
ppufile.putderef(d);
|
||||
{ write refs }
|
||||
if assigned(lastwritten) then
|
||||
ref:=lastwritten
|
||||
else
|
||||
@ -3991,6 +4082,38 @@ implementation
|
||||
{$endif GDB}
|
||||
|
||||
|
||||
procedure tprocdef.buildderef;
|
||||
var
|
||||
oldparasymtable,
|
||||
oldlocalsymtable : tsymtable;
|
||||
begin
|
||||
oldparasymtable:=aktparasymtable;
|
||||
oldlocalsymtable:=aktlocalsymtable;
|
||||
aktparasymtable:=parast;
|
||||
aktlocalsymtable:=localst;
|
||||
|
||||
inherited buildderef;
|
||||
_classderef.build(_class);
|
||||
{ procsym that originaly defined this definition, should be in the
|
||||
same symtable }
|
||||
procsymderef.build(procsym);
|
||||
|
||||
{ locals }
|
||||
if assigned(localst) then
|
||||
begin
|
||||
tlocalsymtable(localst).buildderef;
|
||||
funcretsymderef.build(funcretsym);
|
||||
end;
|
||||
|
||||
{ inline tree }
|
||||
if (proccalloption=pocall_inline) then
|
||||
code.buildderef;
|
||||
|
||||
aktparasymtable:=oldparasymtable;
|
||||
aktlocalsymtable:=oldlocalsymtable;
|
||||
end;
|
||||
|
||||
|
||||
procedure tprocdef.deref;
|
||||
var
|
||||
oldparasymtable,
|
||||
@ -4214,6 +4337,23 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tprocvardef.buildderef;
|
||||
var
|
||||
oldparasymtable,
|
||||
oldlocalsymtable : tsymtable;
|
||||
begin
|
||||
oldparasymtable:=aktparasymtable;
|
||||
oldlocalsymtable:=aktlocalsymtable;
|
||||
aktparasymtable:=parast;
|
||||
aktlocalsymtable:=nil;
|
||||
|
||||
inherited buildderef;
|
||||
|
||||
aktparasymtable:=oldparasymtable;
|
||||
aktlocalsymtable:=oldlocalsymtable;
|
||||
end;
|
||||
|
||||
|
||||
procedure tprocvardef.deref;
|
||||
var
|
||||
oldparasymtable,
|
||||
@ -4532,7 +4672,7 @@ implementation
|
||||
ppufile.putlongint(size);
|
||||
ppufile.putlongint(vmt_offset);
|
||||
ppufile.putstring(objrealname^);
|
||||
ppufile.putderef(childof,childofderef);
|
||||
ppufile.putderef(childofderef);
|
||||
ppufile.putsmallset(objectoptions);
|
||||
if objecttype in [odt_interfacecom,odt_interfacecorba] then
|
||||
begin
|
||||
@ -4547,7 +4687,7 @@ implementation
|
||||
ppufile.putlongint(implintfcount);
|
||||
for i:=1 to implintfcount do
|
||||
begin
|
||||
ppufile.putderef(implementedinterfaces.interfaces(i),implementedinterfaces.interfacesderef(i));
|
||||
ppufile.putderef(implementedinterfaces.interfacesderef(i));
|
||||
ppufile.putlongint(implementedinterfaces.ioffsets(i)^);
|
||||
end;
|
||||
end;
|
||||
@ -4566,6 +4706,21 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tobjectdef.buildderef;
|
||||
var
|
||||
oldrecsyms : tsymtable;
|
||||
begin
|
||||
inherited buildderef;
|
||||
childofderef.build(childof);
|
||||
oldrecsyms:=aktrecordsymtable;
|
||||
aktrecordsymtable:=symtable;
|
||||
tstoredsymtable(symtable).buildderef;
|
||||
aktrecordsymtable:=oldrecsyms;
|
||||
if objecttype in [odt_class,odt_interfacecorba] then
|
||||
implementedinterfaces.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tobjectdef.deref;
|
||||
var
|
||||
oldrecsyms : tsymtable;
|
||||
@ -5528,6 +5683,17 @@ implementation
|
||||
searchintf:=-1;
|
||||
end;
|
||||
|
||||
|
||||
procedure timplementedinterfaces.buildderef;
|
||||
var
|
||||
i: longint;
|
||||
begin
|
||||
for i:=1 to count do
|
||||
with timplintfentry(finterfaces.search(i)) do
|
||||
intfderef.build(intf);
|
||||
end;
|
||||
|
||||
|
||||
procedure timplementedinterfaces.deref;
|
||||
var
|
||||
i: longint;
|
||||
@ -5884,7 +6050,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.182 2003-10-21 18:14:49 peter
|
||||
Revision 1.183 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.182 2003/10/21 18:14:49 peter
|
||||
* fix counting of parameters when loading ppu
|
||||
|
||||
Revision 1.181 2003/10/17 15:08:34 peter
|
||||
|
||||
@ -48,7 +48,7 @@ interface
|
||||
procedure putexprint(v:tconstexprint);
|
||||
procedure PutPtrUInt(v:TConstPtrUInt);
|
||||
procedure putposinfo(const p:tfileposinfo);
|
||||
procedure putderef(s:tsymtableentry;const d:tderef);
|
||||
procedure putderef(const d:tderef);
|
||||
procedure putsymlist(p:tsymlist);
|
||||
procedure puttype(const t:ttype);
|
||||
procedure putasmsymbol(s:tasmsymbol);
|
||||
@ -166,8 +166,7 @@ implementation
|
||||
|
||||
procedure tcompilerppufile.getderef(var d:tderef);
|
||||
begin
|
||||
d.len:=getbyte;
|
||||
getdata(d.data,d.len);
|
||||
d.dataidx:=getlongint;
|
||||
end;
|
||||
|
||||
|
||||
@ -332,11 +331,9 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tcompilerppufile.putderef(s:tsymtableentry;const d:tderef);
|
||||
procedure tcompilerppufile.putderef(const d:tderef);
|
||||
begin
|
||||
d.build(s);
|
||||
putbyte(d.len);
|
||||
putdata(d.data,d.len);
|
||||
putlongint(d.dataidx);
|
||||
end;
|
||||
|
||||
|
||||
@ -344,7 +341,7 @@ implementation
|
||||
var
|
||||
hp : psymlistitem;
|
||||
begin
|
||||
putderef(p.procdef,p.procdefderef);
|
||||
putderef(p.procdefderef);
|
||||
hp:=p.firstsym;
|
||||
while assigned(hp) do
|
||||
begin
|
||||
@ -353,7 +350,7 @@ implementation
|
||||
sl_call,
|
||||
sl_load,
|
||||
sl_subscript :
|
||||
putderef(hp^.sym,hp^.symderef);
|
||||
putderef(hp^.symderef);
|
||||
sl_vec :
|
||||
putlongint(hp^.value);
|
||||
else
|
||||
@ -367,22 +364,7 @@ implementation
|
||||
|
||||
procedure tcompilerppufile.puttype(const t:ttype);
|
||||
begin
|
||||
{ Write symbol references when the symbol is a redefine,
|
||||
but don't write symbol references for the current unit
|
||||
and for the system unit }
|
||||
if assigned(t.sym) and
|
||||
(
|
||||
(t.sym<>t.def.typesym) or
|
||||
((t.sym.owner.unitid<>0) and
|
||||
(t.sym.owner.unitid<>1))
|
||||
) then
|
||||
begin
|
||||
putderef(t.sym,t.deref);
|
||||
end
|
||||
else
|
||||
begin
|
||||
putderef(t.def,t.deref);
|
||||
end;
|
||||
putderef(t.deref);
|
||||
end;
|
||||
|
||||
|
||||
@ -405,7 +387,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.20 2003-10-07 16:06:30 peter
|
||||
Revision 1.21 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.20 2003/10/07 16:06:30 peter
|
||||
* tsymlist.def renamed to tsymlist.procdef
|
||||
* tsymlist.procdef is now only used to store the procdef
|
||||
|
||||
|
||||
@ -63,6 +63,7 @@ interface
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);virtual;abstract;
|
||||
procedure writesym(ppufile:tcompilerppufile);
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
{$ifdef GDB}
|
||||
function stabstring : pchar;virtual;
|
||||
@ -127,6 +128,7 @@ interface
|
||||
procedure check_forward;
|
||||
procedure unchain_overload;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
procedure addprocdef(p:tprocdef);
|
||||
procedure addprocdef_deref(const d:tderef);
|
||||
@ -160,6 +162,7 @@ interface
|
||||
constructor create(const n : string;const tt : ttype);
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function gettypedef:tdef;override;
|
||||
procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
|
||||
@ -186,6 +189,7 @@ interface
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
destructor destroy;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
procedure generate_mangledname;override;
|
||||
procedure set_mangledname(const s:string);
|
||||
@ -223,6 +227,7 @@ interface
|
||||
function getsize : longint;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
function gettypedef:tdef;override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
procedure dooverride(overriden:tpropertysym);
|
||||
{$ifdef GDB}
|
||||
@ -239,6 +244,7 @@ interface
|
||||
constructor create(const n : string;const tt : ttype);
|
||||
constructor create_ref(const n : string;const tt : ttype;sym:tstoredsym);
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function mangledname : string;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
@ -256,6 +262,7 @@ interface
|
||||
destructor destroy;override;
|
||||
procedure generate_mangledname;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
function getsize:longint;
|
||||
{$ifdef GDB}
|
||||
@ -284,6 +291,7 @@ interface
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
destructor destroy;override;
|
||||
function mangledname : string;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
{$ifdef GDB}
|
||||
@ -300,6 +308,7 @@ interface
|
||||
constructor create(const n : string;def : tenumdef;v : longint);
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
procedure deref;override;
|
||||
procedure order;
|
||||
{$ifdef GDB}
|
||||
@ -435,6 +444,11 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tstoredsym.buildderef;
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tstoredsym.deref;
|
||||
begin
|
||||
end;
|
||||
@ -489,7 +503,8 @@ implementation
|
||||
{ write address to this symbol }
|
||||
if not symref_written then
|
||||
begin
|
||||
ppufile.putderef(self,d);
|
||||
d.build(self);
|
||||
ppufile.putderef(d);
|
||||
symref_written:=true;
|
||||
end;
|
||||
ppufile.putposinfo(ref.posinfo);
|
||||
@ -795,7 +810,7 @@ implementation
|
||||
to this procsym and are in the global symtable }
|
||||
if (p^.def.procsym=self) and
|
||||
(p^.def.owner.symtabletype in [globalsymtable,objectsymtable]) then
|
||||
ppufile.putderef(p^.def,p^.defderef);
|
||||
ppufile.putderef(p^.defderef);
|
||||
p:=p^.next;
|
||||
end;
|
||||
ppufile.writeentry(ibprocsym);
|
||||
@ -835,6 +850,19 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tprocsym.buildderef;
|
||||
var
|
||||
p : pprocdeflist;
|
||||
begin
|
||||
p:=pdlistfirst;
|
||||
while assigned(p) do
|
||||
begin
|
||||
p^.defderef.build(p^.def);
|
||||
p:=p^.next;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure tprocsym.deref;
|
||||
var
|
||||
p : pprocdeflist;
|
||||
@ -1355,6 +1383,23 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tpropertysym.buildderef;
|
||||
begin
|
||||
if (ppo_is_override in propoptions) then
|
||||
begin
|
||||
propoverridenderef.build(propoverriden);
|
||||
end
|
||||
else
|
||||
begin
|
||||
proptype.buildderef;
|
||||
indextype.buildderef;
|
||||
readaccess.buildderef;
|
||||
writeaccess.buildderef;
|
||||
storedaccess.buildderef;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure tpropertysym.deref;
|
||||
begin
|
||||
if (ppo_is_override in propoptions) then
|
||||
@ -1384,7 +1429,7 @@ implementation
|
||||
inherited writesym(ppufile);
|
||||
ppufile.putsmallset(propoptions);
|
||||
if (ppo_is_override in propoptions) then
|
||||
ppufile.putderef(propoverriden,propoverridenderef)
|
||||
ppufile.putderef(propoverridenderef)
|
||||
else
|
||||
begin
|
||||
ppufile.puttype(proptype);
|
||||
@ -1502,6 +1547,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tabsolutesym.buildderef;
|
||||
begin
|
||||
{ inheritance of varsym.deref ! }
|
||||
vartype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tabsolutesym.deref;
|
||||
var
|
||||
srsym : tsym;
|
||||
@ -1616,6 +1668,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tvarsym.buildderef;
|
||||
begin
|
||||
vartype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tvarsym.deref;
|
||||
begin
|
||||
vartype.resolve;
|
||||
@ -1948,6 +2006,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure ttypedconstsym.buildderef;
|
||||
begin
|
||||
typedconsttype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure ttypedconstsym.deref;
|
||||
begin
|
||||
typedconsttype.resolve;
|
||||
@ -2143,6 +2207,13 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tconstsym.buildderef;
|
||||
begin
|
||||
if consttyp in [constord,constpointer,constset] then
|
||||
consttype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure tconstsym.deref;
|
||||
begin
|
||||
if consttyp in [constord,constpointer,constset] then
|
||||
@ -2266,6 +2337,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tenumsym.buildderef;
|
||||
begin
|
||||
definitionderef.build(definition);
|
||||
end;
|
||||
|
||||
|
||||
procedure tenumsym.deref;
|
||||
begin
|
||||
definition:=tenumdef(definitionderef.resolve);
|
||||
@ -2303,7 +2380,7 @@ implementation
|
||||
procedure tenumsym.ppuwrite(ppufile:tcompilerppufile);
|
||||
begin
|
||||
inherited writesym(ppufile);
|
||||
ppufile.putderef(definition,definitionderef);
|
||||
ppufile.putderef(definitionderef);
|
||||
ppufile.putlongint(value);
|
||||
ppufile.writeentry(ibenumsym);
|
||||
end;
|
||||
@ -2355,6 +2432,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure ttypesym.buildderef;
|
||||
begin
|
||||
restype.buildderef;
|
||||
end;
|
||||
|
||||
|
||||
procedure ttypesym.deref;
|
||||
begin
|
||||
restype.resolve;
|
||||
@ -2391,7 +2474,8 @@ implementation
|
||||
because we need it for the symtable }
|
||||
if (restype.def.deftype in [recorddef,objectdef]) then
|
||||
begin
|
||||
ppufile.putderef(self,d);
|
||||
d.build(self);
|
||||
ppufile.putderef(d);
|
||||
ppufile.writeentry(ibsymref);
|
||||
end;
|
||||
end;
|
||||
@ -2605,7 +2689,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.129 2003-10-22 15:22:33 peter
|
||||
Revision 1.130 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.129 2003/10/22 15:22:33 peter
|
||||
* fixed unitsym-globalsymtable relation so the uses of a unit
|
||||
is counted correctly
|
||||
|
||||
|
||||
@ -70,6 +70,7 @@ interface
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);virtual;
|
||||
procedure load_references(ppufile:tcompilerppufile;locals:boolean);virtual;
|
||||
procedure write_references(ppufile:tcompilerppufile;locals:boolean);virtual;
|
||||
procedure buildderef;virtual;
|
||||
procedure deref;virtual;
|
||||
procedure derefimpl;virtual;
|
||||
procedure insert(sym : tsymentry);override;
|
||||
@ -471,6 +472,28 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tstoredsymtable.buildderef;
|
||||
var
|
||||
hp : tdef;
|
||||
hs : tsym;
|
||||
begin
|
||||
{ interface definitions }
|
||||
hp:=tdef(defindex.first);
|
||||
while assigned(hp) do
|
||||
begin
|
||||
hp.buildderef;
|
||||
hp:=tdef(hp.indexnext);
|
||||
end;
|
||||
{ interface symbols }
|
||||
hs:=tsym(symindex.first);
|
||||
while assigned(hs) do
|
||||
begin
|
||||
hs.buildderef;
|
||||
hs:=tsym(hs.indexnext);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure tstoredsymtable.deref;
|
||||
var
|
||||
hp : tdef;
|
||||
@ -2259,7 +2282,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.118 2003-10-22 15:22:33 peter
|
||||
Revision 1.119 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.118 2003/10/22 15:22:33 peter
|
||||
* fixed unitsym-globalsymtable relation so the uses of a unit
|
||||
is counted correctly
|
||||
|
||||
|
||||
@ -70,6 +70,7 @@ interface
|
||||
typesym : tsym; { which type the definition was generated this def }
|
||||
defoptions : tdefoptions;
|
||||
constructor create;
|
||||
procedure buildderef;virtual;abstract;
|
||||
procedure deref;virtual;abstract;
|
||||
procedure derefimpl;virtual;abstract;
|
||||
function typename:string;
|
||||
@ -96,6 +97,7 @@ interface
|
||||
constructor create(const n : string);
|
||||
destructor destroy;override;
|
||||
function realname:string;
|
||||
procedure buildderef;virtual;abstract;
|
||||
procedure deref;virtual;abstract;
|
||||
function gettypedef:tdef;virtual;
|
||||
end;
|
||||
@ -104,16 +106,12 @@ interface
|
||||
TDeref
|
||||
************************************************}
|
||||
|
||||
tderefdata = array[0..31] of byte;
|
||||
|
||||
tderef = object
|
||||
len : longint;
|
||||
data : tderefdata;
|
||||
dataidx : longint;
|
||||
procedure reset;
|
||||
procedure setdata(l:longint;var d);
|
||||
procedure build(s:tsymtableentry);
|
||||
function resolve:tsymtableentry;
|
||||
end;
|
||||
function resolve:tsymtableentry;
|
||||
end;
|
||||
|
||||
{************************************************
|
||||
TType
|
||||
@ -127,6 +125,7 @@ interface
|
||||
procedure setdef(p:tdef);
|
||||
procedure setsym(p:tsym);
|
||||
procedure resolve;
|
||||
procedure buildderef;
|
||||
end;
|
||||
|
||||
{************************************************
|
||||
@ -156,6 +155,7 @@ interface
|
||||
procedure clear;
|
||||
function getcopy:tsymlist;
|
||||
procedure resolve;
|
||||
procedure buildderef;
|
||||
end;
|
||||
|
||||
|
||||
@ -360,6 +360,23 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure ttype.buildderef;
|
||||
begin
|
||||
{ Write symbol references when the symbol is a redefine,
|
||||
but don't write symbol references for the current unit
|
||||
and for the system unit }
|
||||
if assigned(sym) and
|
||||
(
|
||||
(sym<>def.typesym) or
|
||||
((sym.owner.unitid<>0) and
|
||||
(sym.owner.unitid<>1))
|
||||
) then
|
||||
deref.build(sym)
|
||||
else
|
||||
deref.build(def);
|
||||
end;
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
TSymList
|
||||
****************************************************************************}
|
||||
@ -495,6 +512,29 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tsymlist.buildderef;
|
||||
var
|
||||
hp : psymlistitem;
|
||||
begin
|
||||
procdefderef.build(procdef);
|
||||
hp:=firstsym;
|
||||
while assigned(hp) do
|
||||
begin
|
||||
case hp^.sltype of
|
||||
sl_call,
|
||||
sl_load,
|
||||
sl_subscript :
|
||||
hp^.symderef.build(hp^.sym);
|
||||
sl_vec :
|
||||
;
|
||||
else
|
||||
internalerror(200110205);
|
||||
end;
|
||||
hp:=hp^.next;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
Tderef
|
||||
****************************************************************************}
|
||||
@ -502,20 +542,14 @@ implementation
|
||||
|
||||
procedure tderef.reset;
|
||||
begin
|
||||
len:=0;
|
||||
end;
|
||||
|
||||
|
||||
procedure tderef.setdata(l:longint;var d);
|
||||
begin
|
||||
len:=l;
|
||||
if l>sizeof(tderefdata) then
|
||||
internalerror(200306068);
|
||||
move(d,data,len);
|
||||
dataidx:=-1;
|
||||
end;
|
||||
|
||||
|
||||
procedure tderef.build(s:tsymtableentry);
|
||||
var
|
||||
len : byte;
|
||||
data : array[0..255] of byte;
|
||||
|
||||
function is_child(currdef,ownerdef:tdef):boolean;
|
||||
begin
|
||||
@ -588,7 +622,7 @@ implementation
|
||||
else
|
||||
internalerror(200306065);
|
||||
end;
|
||||
if len+3>sizeof(tderefdata) then
|
||||
if len>252 then
|
||||
internalerror(200306062);
|
||||
end;
|
||||
|
||||
@ -649,7 +683,8 @@ implementation
|
||||
end;
|
||||
|
||||
begin
|
||||
len:=0;
|
||||
{ skip length byte }
|
||||
len:=1;
|
||||
if assigned(s) then
|
||||
begin
|
||||
{ Static symtable of current unit ? }
|
||||
@ -712,6 +747,11 @@ implementation
|
||||
data[len]:=0;
|
||||
inc(len);
|
||||
end;
|
||||
{ store data length in first byte }
|
||||
data[0]:=len-1;
|
||||
{ store index and write to derefdata }
|
||||
dataidx:=current_module.derefdata.size;
|
||||
current_module.derefdata.write(data,len);
|
||||
end;
|
||||
|
||||
|
||||
@ -723,11 +763,23 @@ implementation
|
||||
st : tsymtable;
|
||||
idx : word;
|
||||
i : longint;
|
||||
len : byte;
|
||||
data : array[0..255] of byte;
|
||||
begin
|
||||
result:=nil;
|
||||
{ not initialized }
|
||||
if len=0 then
|
||||
if dataidx=-1 then
|
||||
internalerror(200306067);
|
||||
{ read data }
|
||||
current_module.derefdata.seek(dataidx);
|
||||
if current_module.derefdata.read(len,1)<>1 then
|
||||
internalerror(200310221);
|
||||
if len>0 then
|
||||
begin
|
||||
if current_module.derefdata.read(data,len)<>len then
|
||||
internalerror(200310222);
|
||||
end;
|
||||
{ process data }
|
||||
st:=nil;
|
||||
i:=0;
|
||||
while (i<len) do
|
||||
@ -862,7 +914,10 @@ finalization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.30 2003-10-22 15:22:33 peter
|
||||
Revision 1.31 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.30 2003/10/22 15:22:33 peter
|
||||
* fixed unitsym-globalsymtable relation so the uses of a unit
|
||||
is counted correctly
|
||||
|
||||
|
||||
@ -30,7 +30,7 @@ uses
|
||||
const
|
||||
Version = 'Version 1.10';
|
||||
Title = 'PPU-Analyser';
|
||||
Copyright = 'Copyright (c) 1998-2002 by the Free Pascal Development Team';
|
||||
Copyright = 'Copyright (c) 1998-2003 by the Free Pascal Development Team';
|
||||
|
||||
{ verbosity }
|
||||
v_none = $0;
|
||||
@ -59,8 +59,11 @@ var
|
||||
ppufile : tppufile;
|
||||
space : string;
|
||||
read_member : boolean;
|
||||
unitnumber,
|
||||
unitindex : longint;
|
||||
verbose : longint;
|
||||
derefdata : pbyte;
|
||||
derefdatalen : longint;
|
||||
|
||||
{****************************************************************************
|
||||
Helper Routines
|
||||
@ -344,6 +347,35 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
procedure ReadLoadUnit;
|
||||
var
|
||||
ucrc,uintfcrc : longint;
|
||||
begin
|
||||
while not ppufile.EndOfEntry do
|
||||
begin
|
||||
inc(unitnumber);
|
||||
write('Uses unit: ',ppufile.getstring,' (Number: ',unitnumber,')');
|
||||
ucrc:=ppufile.getlongint;
|
||||
uintfcrc:=ppufile.getlongint;
|
||||
write(' (Crc: ',hexstr(ucrc,8),', IntfcCrc: ',hexstr(uintfcrc,8),')');
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
Procedure ReadDerefdata;
|
||||
begin
|
||||
derefdatalen:=ppufile.entrysize;
|
||||
if derefdatalen=0 then
|
||||
begin
|
||||
writeln('!! Error: derefdatalen=0');
|
||||
exit;
|
||||
end;
|
||||
Writeln('Derefdata length: ',derefdatalen);
|
||||
derefdata:=allocmem(derefdatalen);
|
||||
ppufile.getdata(derefdata^,derefdatalen);
|
||||
end;
|
||||
|
||||
|
||||
Procedure ReadRef;
|
||||
begin
|
||||
if (verbose and v_browser)=0 then
|
||||
@ -454,40 +486,50 @@ var
|
||||
b : tdereftype;
|
||||
first : boolean;
|
||||
idx : word;
|
||||
typ,
|
||||
i,n : byte;
|
||||
s : string;
|
||||
pdata : pbyte;
|
||||
begin
|
||||
if not assigned(derefdata) then
|
||||
exit;
|
||||
first:=true;
|
||||
idx:=ppufile.getlongint;
|
||||
if (idx>derefdatalen) then
|
||||
begin
|
||||
writeln('!! Error: Deref idx ',idx,' > ',derefdatalen);
|
||||
exit;
|
||||
end;
|
||||
write('(',idx,') ');
|
||||
pdata:=@derefdata[idx];
|
||||
i:=0;
|
||||
n:=ppufile.getbyte;
|
||||
n:=pdata[i];
|
||||
inc(i);
|
||||
if n<1 then
|
||||
begin
|
||||
writeln('!! Error, deref len < 1');
|
||||
exit;
|
||||
end;
|
||||
begin
|
||||
writeln('!! Error: Deref len < 1');
|
||||
exit;
|
||||
end;
|
||||
while (i<n) do
|
||||
begin
|
||||
if not first then
|
||||
write(', ')
|
||||
else
|
||||
first:=false;
|
||||
b:=tdereftype(ppufile.getbyte);
|
||||
b:=tdereftype(pdata[i]);
|
||||
inc(i);
|
||||
case b of
|
||||
deref_nil :
|
||||
write('Nil');
|
||||
deref_def :
|
||||
begin
|
||||
idx:=ppufile.getbyte shl 8;
|
||||
idx:=idx or ppufile.getbyte;
|
||||
idx:=pdata[i] shl 8;
|
||||
idx:=idx or pdata[i+1];
|
||||
inc(i,2);
|
||||
write('Definition ',idx);
|
||||
end;
|
||||
deref_sym :
|
||||
begin
|
||||
idx:=ppufile.getbyte shl 8;
|
||||
idx:=idx or ppufile.getbyte;
|
||||
idx:=pdata[i] shl 8;
|
||||
idx:=idx or pdata[i+1];
|
||||
inc(i,2);
|
||||
write('Symbol ',idx);
|
||||
end;
|
||||
@ -503,8 +545,8 @@ begin
|
||||
write('AktPara');
|
||||
deref_unit :
|
||||
begin
|
||||
idx:=ppufile.getbyte shl 8;
|
||||
idx:=idx or ppufile.getbyte;
|
||||
idx:=pdata[i] shl 8;
|
||||
idx:=idx or pdata[i+1];
|
||||
inc(i,2);
|
||||
write('Unit ',idx);
|
||||
end;
|
||||
@ -1127,80 +1169,6 @@ end;
|
||||
Read defintions Part
|
||||
****************************************************************************}
|
||||
|
||||
procedure getusedregisters_i386;
|
||||
type
|
||||
tregister = (R_NO,
|
||||
R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
|
||||
R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
|
||||
R_AL,R_CL,R_DL,R_BL,R_AH,R_CH,R_BH,R_DH,
|
||||
R_CS,R_DS,R_ES,R_SS,R_FS,R_GS,
|
||||
R_ST,R_ST0,R_ST1,R_ST2,R_ST3,R_ST4,R_ST5,R_ST6,R_ST7,
|
||||
R_DR0,R_DR1,R_DR2,R_DR3,R_DR6,R_DR7,
|
||||
R_CR0,R_CR2,R_CR3,R_CR4,
|
||||
R_TR3,R_TR4,R_TR5,R_TR6,R_TR7,
|
||||
R_MM0,R_MM1,R_MM2,R_MM3,R_MM4,R_MM5,R_MM6,R_MM7,
|
||||
R_XMM0,R_XMM1,R_XMM2,R_XMM3,R_XMM4,R_XMM5,R_XMM6,R_XMM7
|
||||
);
|
||||
tregisterset = set of tregister;
|
||||
reg2strtable = array[tregister] of string[6];
|
||||
const
|
||||
std_reg2str : reg2strtable = ('',
|
||||
'eax','ecx','edx','ebx','esp','ebp','esi','edi',
|
||||
'ax','cx','dx','bx','sp','bp','si','di',
|
||||
'al','cl','dl','bl','ah','ch','bh','dh',
|
||||
'cs','ds','es','ss','fs','gs',
|
||||
'st','st(0)','st(1)','st(2)','st(3)','st(4)','st(5)','st(6)','st(7)',
|
||||
'dr0','dr1','dr2','dr3','dr6','dr7',
|
||||
'cr0','cr2','cr3','cr4',
|
||||
'tr3','tr4','tr5','tr6','tr7',
|
||||
'mm0','mm1','mm2','mm3','mm4','mm5','mm6','mm7',
|
||||
'xmm0','xmm1','xmm2','xmm3','xmm4','xmm5','xmm6','xmm7'
|
||||
);
|
||||
firstsaveintreg = R_EAX;
|
||||
lastsaveintreg = R_EBX;
|
||||
firstsavefpureg = R_NO;
|
||||
lastsavefpureg = R_NO;
|
||||
firstsavemmreg = R_MM0;
|
||||
lastsavemmreg = R_MM7;
|
||||
var
|
||||
regs: tregisterset;
|
||||
r: tregister;
|
||||
first: boolean;
|
||||
begin
|
||||
first := true;
|
||||
ppufile.getnormalset(regs);
|
||||
for r := firstsaveintreg to lastsaveintreg do
|
||||
if r in regs then
|
||||
begin
|
||||
if not first then
|
||||
write(', ')
|
||||
else
|
||||
first := false;
|
||||
write(std_reg2str[r])
|
||||
end;
|
||||
if (firstsavefpureg <> R_NO) then
|
||||
for r := firstsavefpureg to lastsavefpureg do
|
||||
if r in regs then
|
||||
begin
|
||||
if not first then
|
||||
write(', ')
|
||||
else
|
||||
first := false;
|
||||
write(std_reg2str[r])
|
||||
end;
|
||||
if (firstsavemmreg <> R_NO) then
|
||||
for r := firstsavemmreg to lastsavemmreg do
|
||||
if r in regs then
|
||||
begin
|
||||
if not first then
|
||||
write(', ')
|
||||
else
|
||||
first := false;
|
||||
write(std_reg2str[r])
|
||||
end;
|
||||
writeln;
|
||||
end;
|
||||
|
||||
procedure readdefinitions(start_read : boolean);
|
||||
type
|
||||
tsettype = (normset,smallset,varset);
|
||||
@ -1218,13 +1186,15 @@ type
|
||||
odt_interfacecorba,
|
||||
odt_cppclass
|
||||
);
|
||||
tvarianttype = (
|
||||
vt_normalvariant,vt_olevariant
|
||||
);
|
||||
var
|
||||
b : byte;
|
||||
oldread_member : boolean;
|
||||
totaldefs,l,j,
|
||||
defcnt : longint;
|
||||
calloption : tproccalloption;
|
||||
regs : set of char;
|
||||
begin
|
||||
defcnt:=0;
|
||||
with ppufile do
|
||||
@ -1303,23 +1273,6 @@ begin
|
||||
begin
|
||||
readcommondef('Procedure definition');
|
||||
calloption:=read_abstract_proc_def;
|
||||
write (space,' Used IntRegs : ');
|
||||
getnormalset(regs);
|
||||
writeln('<not yet implemented>');
|
||||
write (space,' Used OtherRegs : ');
|
||||
getnormalset(regs);
|
||||
writeln('<not yet implemented>');
|
||||
{$ifdef OLDRA}
|
||||
case ttargetcpu(header.cpu) of
|
||||
i386 :
|
||||
getusedregisters_i386
|
||||
else
|
||||
begin
|
||||
getnormalset(regs);
|
||||
writeln('<not yet implemented>');
|
||||
end;
|
||||
end;
|
||||
{$endif OLDRA}
|
||||
if (getbyte<>0) then
|
||||
writeln(space,' Mangled name : ',getstring);
|
||||
writeln(space,' Overload Number : ',getword);
|
||||
@ -1500,10 +1453,20 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
ibvariantdef :
|
||||
begin
|
||||
readcommondef('Variant definition');
|
||||
write (space,' Varianttype : ');
|
||||
b:=getbyte;
|
||||
case tvarianttype(b) of
|
||||
vt_normalvariant :
|
||||
writeln('Normal');
|
||||
vt_olevariant :
|
||||
writeln('OLE');
|
||||
else
|
||||
writeln('!! Warning: Invalid varianttype ',b);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
iberror :
|
||||
@ -1534,9 +1497,7 @@ end;
|
||||
procedure readinterface;
|
||||
var
|
||||
b : byte;
|
||||
sourcenumber,
|
||||
unitnumber : word;
|
||||
ucrc,uintfcrc : longint;
|
||||
sourcenumber : longint;
|
||||
begin
|
||||
with ppufile do
|
||||
begin
|
||||
@ -1574,22 +1535,9 @@ begin
|
||||
writeln;
|
||||
end;
|
||||
end;
|
||||
|
||||
ibloadunit :
|
||||
begin
|
||||
unitnumber:=1;
|
||||
while not EndOfEntry do
|
||||
begin
|
||||
write('Uses unit: ',getstring,' (Number: ',unitnumber,')');
|
||||
ucrc:=getlongint;
|
||||
uintfcrc:=getlongint;
|
||||
write(' (Crc: ',hexstr(ucrc,8),', IntfcCrc: ',hexstr(uintfcrc,8),')');
|
||||
if getbyte<>0 then
|
||||
writeln(' (interface)')
|
||||
else
|
||||
writeln(' (implementation)');
|
||||
inc(unitnumber);
|
||||
end;
|
||||
end;
|
||||
ReadLoadUnit;
|
||||
|
||||
iblinkunitofiles :
|
||||
ReadLinkContainer('Link unit object file: ');
|
||||
@ -1609,6 +1557,9 @@ begin
|
||||
iblinkothersharedlibs :
|
||||
ReadLinkContainer('Link other shared lib: ');
|
||||
|
||||
ibderefdata :
|
||||
ReadDerefData;
|
||||
|
||||
iberror :
|
||||
begin
|
||||
Writeln('Error in PPU');
|
||||
@ -1643,6 +1594,9 @@ begin
|
||||
ibasmsymbols :
|
||||
ReadAsmSymbols;
|
||||
|
||||
ibloadunit :
|
||||
ReadLoadUnit;
|
||||
|
||||
iberror :
|
||||
begin
|
||||
Writeln('Error in PPU');
|
||||
@ -1945,7 +1899,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.46 2003-07-02 22:18:04 peter
|
||||
Revision 1.47 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.46 2003/07/02 22:18:04 peter
|
||||
* paraloc splitted in callerparaloc,calleeparaloc
|
||||
* sparc calling convention updates
|
||||
|
||||
|
||||
@ -210,6 +210,7 @@ interface
|
||||
protected
|
||||
procedure ppuloadoper(ppufile:tcompilerppufile;var o:toper);override;
|
||||
procedure ppuwriteoper(ppufile:tcompilerppufile;const o:toper);override;
|
||||
procedure ppubuildderefoper(var o:toper);override;
|
||||
procedure ppuderefoper(var o:toper);override;
|
||||
private
|
||||
{ next fields are filled in pass1, so pass2 is faster }
|
||||
@ -799,13 +800,22 @@ implementation
|
||||
end;
|
||||
top_local :
|
||||
begin
|
||||
ppufile.putderef(tvarsym(o.localsym),o.localsymderef);
|
||||
ppufile.putderef(o.localsymderef);
|
||||
ppufile.putlongint(longint(o.localsymofs));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure taicpu.ppubuildderefoper(var o:toper);
|
||||
begin
|
||||
case o.typ of
|
||||
top_local :
|
||||
o.localsymderef.build(tvarsym(o.localsym));
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure taicpu.ppuderefoper(var o:toper);
|
||||
begin
|
||||
case o.typ of
|
||||
@ -2318,7 +2328,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.33 2003-10-21 15:15:36 peter
|
||||
Revision 1.34 2003-10-22 20:40:00 peter
|
||||
* write derefdata in a separate ppu entry
|
||||
|
||||
Revision 1.33 2003/10/21 15:15:36 peter
|
||||
* taicpu_abstract.oper[] changed to pointers
|
||||
|
||||
Revision 1.32 2003/10/17 14:38:32 peter
|
||||
|
||||
Loading…
Reference in New Issue
Block a user