mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-22 14:49:10 +02:00
* unit mapping rewrite
* new derefmap added
This commit is contained in:
parent
66d9ada975
commit
8d251e8506
@ -81,10 +81,20 @@ interface
|
|||||||
|
|
||||||
tunitmaprec = record
|
tunitmaprec = record
|
||||||
u : tmodule;
|
u : tmodule;
|
||||||
unitsym : tunitsym;
|
{ number of references }
|
||||||
|
refs : longint;
|
||||||
|
{ index in the derefmap }
|
||||||
|
derefidx : longint;
|
||||||
end;
|
end;
|
||||||
punitmap = ^tunitmaprec;
|
punitmap = ^tunitmaprec;
|
||||||
|
|
||||||
|
tderefmaprec = record
|
||||||
|
u : tmodule;
|
||||||
|
{ modulename, used during ppu load }
|
||||||
|
modulename : pstring;
|
||||||
|
end;
|
||||||
|
pderefmap = ^tderefmaprec;
|
||||||
|
|
||||||
tmodule = class(tmodulebase)
|
tmodule = class(tmodulebase)
|
||||||
do_reload, { force reloading of the unit }
|
do_reload, { force reloading of the unit }
|
||||||
do_compile, { need to compile the sources }
|
do_compile, { need to compile the sources }
|
||||||
@ -102,8 +112,12 @@ interface
|
|||||||
interface_crc : cardinal;
|
interface_crc : cardinal;
|
||||||
flags : cardinal; { the PPU flags }
|
flags : cardinal; { the PPU flags }
|
||||||
islibrary : boolean; { if it is a library (win32 dll) }
|
islibrary : boolean; { if it is a library (win32 dll) }
|
||||||
map : punitmap; { mapping of all used units }
|
moduleid : longint;
|
||||||
mapsize : longint; { number of units in the map }
|
unitmap : punitmap; { mapping of all used units }
|
||||||
|
unitmapsize : longint; { number of units in the map }
|
||||||
|
derefmap : pderefmap; { mapping of all units needed for deref }
|
||||||
|
derefmapcnt : longint; { number of units in the map }
|
||||||
|
derefmapsize : longint; { number of units in the map }
|
||||||
derefdataintflen : longint;
|
derefdataintflen : longint;
|
||||||
derefdata : tdynamicarray;
|
derefdata : tdynamicarray;
|
||||||
globalsymtable, { pointer to the global symtable of this unit }
|
globalsymtable, { pointer to the global symtable of this unit }
|
||||||
@ -145,7 +159,9 @@ interface
|
|||||||
procedure adddependency(callermodule:tmodule);
|
procedure adddependency(callermodule:tmodule);
|
||||||
procedure flagdependent(callermodule:tmodule);
|
procedure flagdependent(callermodule:tmodule);
|
||||||
function addusedunit(hp:tmodule;inuses:boolean;usym:tunitsym):tused_unit;
|
function addusedunit(hp:tmodule;inuses:boolean;usym:tunitsym):tused_unit;
|
||||||
procedure numberunits;
|
procedure updatemaps;
|
||||||
|
function derefidx_unit(id:longint):longint;
|
||||||
|
function resolve_unit(id:longint):tmodule;
|
||||||
procedure allunitsused;
|
procedure allunitsused;
|
||||||
procedure setmodulename(const s:string);
|
procedure setmodulename(const s:string);
|
||||||
end;
|
end;
|
||||||
@ -175,6 +191,7 @@ interface
|
|||||||
used to delete them after linking }
|
used to delete them after linking }
|
||||||
|
|
||||||
function get_source_file(moduleindex,fileindex : longint) : tinputfile;
|
function get_source_file(moduleindex,fileindex : longint) : tinputfile;
|
||||||
|
procedure addloadedunit(hp:tmodule);
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -187,7 +204,7 @@ implementation
|
|||||||
dos,
|
dos,
|
||||||
{$ENDIF USE_SYSUTILS}
|
{$ENDIF USE_SYSUTILS}
|
||||||
verbose,systems,
|
verbose,systems,
|
||||||
scanner,
|
scanner,ppu,
|
||||||
procinfo;
|
procinfo;
|
||||||
|
|
||||||
|
|
||||||
@ -209,6 +226,13 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure addloadedunit(hp:tmodule);
|
||||||
|
begin
|
||||||
|
hp.moduleid:=loaded_units.count;
|
||||||
|
loaded_units.concat(hp);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{****************************************************************************
|
{****************************************************************************
|
||||||
TLinkContainerItem
|
TLinkContainerItem
|
||||||
****************************************************************************}
|
****************************************************************************}
|
||||||
@ -393,8 +417,11 @@ implementation
|
|||||||
interface_crc:=0;
|
interface_crc:=0;
|
||||||
flags:=0;
|
flags:=0;
|
||||||
scanner:=nil;
|
scanner:=nil;
|
||||||
map:=nil;
|
unitmap:=nil;
|
||||||
mapsize:=0;
|
unitmapsize:=0;
|
||||||
|
derefmap:=nil;
|
||||||
|
derefmapsize:=0;
|
||||||
|
derefmapcnt:=0;
|
||||||
derefdata:=TDynamicArray.Create(1024);
|
derefdata:=TDynamicArray.Create(1024);
|
||||||
derefdataintflen:=0;
|
derefdataintflen:=0;
|
||||||
globalsymtable:=nil;
|
globalsymtable:=nil;
|
||||||
@ -429,9 +456,17 @@ implementation
|
|||||||
{$ifdef MEMDEBUG}
|
{$ifdef MEMDEBUG}
|
||||||
d : tmemdebug;
|
d : tmemdebug;
|
||||||
{$endif}
|
{$endif}
|
||||||
|
i : longint;
|
||||||
hpi : tprocinfo;
|
hpi : tprocinfo;
|
||||||
begin
|
begin
|
||||||
dispose(map);
|
if assigned(unitmap) then
|
||||||
|
freemem(unitmap);
|
||||||
|
if assigned(derefmap) then
|
||||||
|
begin
|
||||||
|
for i:=0 to derefmapcnt-1 do
|
||||||
|
stringdispose(derefmap[i].modulename);
|
||||||
|
freemem(derefmap);
|
||||||
|
end;
|
||||||
if assigned(imports) then
|
if assigned(imports) then
|
||||||
imports.free;
|
imports.free;
|
||||||
if assigned(_exports) then
|
if assigned(_exports) then
|
||||||
@ -512,6 +547,7 @@ implementation
|
|||||||
procedure tmodule.reset;
|
procedure tmodule.reset;
|
||||||
var
|
var
|
||||||
hpi : tprocinfo;
|
hpi : tprocinfo;
|
||||||
|
i : longint;
|
||||||
begin
|
begin
|
||||||
if assigned(scanner) then
|
if assigned(scanner) then
|
||||||
begin
|
begin
|
||||||
@ -556,13 +592,22 @@ implementation
|
|||||||
end;
|
end;
|
||||||
derefdata.free;
|
derefdata.free;
|
||||||
derefdata:=TDynamicArray.Create(1024);
|
derefdata:=TDynamicArray.Create(1024);
|
||||||
if assigned(map) then
|
if assigned(unitmap) then
|
||||||
begin
|
begin
|
||||||
freemem(map);
|
freemem(unitmap);
|
||||||
map:=nil;
|
unitmap:=nil;
|
||||||
end;
|
end;
|
||||||
|
if assigned(derefmap) then
|
||||||
|
begin
|
||||||
|
for i:=0 to derefmapcnt-1 do
|
||||||
|
stringdispose(derefmap[i].modulename);
|
||||||
|
freemem(derefmap);
|
||||||
|
derefmap:=nil;
|
||||||
|
end;
|
||||||
|
unitmapsize:=0;
|
||||||
|
derefmapsize:=0;
|
||||||
|
derefmapcnt:=0;
|
||||||
derefdataintflen:=0;
|
derefdataintflen:=0;
|
||||||
mapsize:=0;
|
|
||||||
sourcefiles.free;
|
sourcefiles.free;
|
||||||
sourcefiles:=tinputfilemanager.create;
|
sourcefiles:=tinputfilemanager.create;
|
||||||
librarydata.free;
|
librarydata.free;
|
||||||
@ -665,55 +710,110 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tmodule.numberunits;
|
procedure tmodule.updatemaps;
|
||||||
var
|
var
|
||||||
pu : tused_unit;
|
oldmapsize : longint;
|
||||||
hp : tmodule;
|
hp : tmodule;
|
||||||
i : integer;
|
i : longint;
|
||||||
begin
|
begin
|
||||||
{ Reset all numbers to -1 }
|
{ Extend unitmap }
|
||||||
|
oldmapsize:=unitmapsize;
|
||||||
|
unitmapsize:=loaded_units.count;
|
||||||
|
reallocmem(unitmap,unitmapsize*sizeof(tunitmaprec));
|
||||||
|
fillchar(unitmap[oldmapsize],(unitmapsize-oldmapsize)*sizeof(tunitmaprec),0);
|
||||||
|
|
||||||
|
{ Extend Derefmap }
|
||||||
|
oldmapsize:=derefmapsize;
|
||||||
|
derefmapsize:=loaded_units.count;
|
||||||
|
reallocmem(derefmap,derefmapsize*sizeof(tderefmaprec));
|
||||||
|
fillchar(derefmap[oldmapsize],(derefmapsize-oldmapsize)*sizeof(tderefmaprec),0);
|
||||||
|
|
||||||
|
{ Add all units to unitmap }
|
||||||
|
hp:=tmodule(loaded_units.first);
|
||||||
|
i:=0;
|
||||||
|
while assigned(hp) do
|
||||||
|
begin
|
||||||
|
if hp.moduleid>=unitmapsize then
|
||||||
|
internalerror(200501151);
|
||||||
|
{ Verify old entries }
|
||||||
|
if (i<oldmapsize) then
|
||||||
|
begin
|
||||||
|
if (hp.moduleid<>i) or
|
||||||
|
(unitmap[hp.moduleid].u<>hp) then
|
||||||
|
internalerror(200501156);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
unitmap[hp.moduleid].u:=hp;
|
||||||
|
unitmap[hp.moduleid].derefidx:=-1;
|
||||||
|
end;
|
||||||
|
inc(i);
|
||||||
|
hp:=tmodule(hp.next);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function tmodule.derefidx_unit(id:longint):longint;
|
||||||
|
begin
|
||||||
|
if id>=unitmapsize then
|
||||||
|
internalerror(2005011511);
|
||||||
|
if unitmap[id].derefidx=-1 then
|
||||||
|
begin
|
||||||
|
unitmap[id].derefidx:=derefmapcnt;
|
||||||
|
inc(derefmapcnt);
|
||||||
|
derefmap[unitmap[id].derefidx].u:=unitmap[id].u;
|
||||||
|
end;
|
||||||
|
if unitmap[id].derefidx>=derefmapsize then
|
||||||
|
internalerror(2005011514);
|
||||||
|
result:=unitmap[id].derefidx;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function tmodule.resolve_unit(id:longint):tmodule;
|
||||||
|
var
|
||||||
|
hp : tmodule;
|
||||||
|
begin
|
||||||
|
if id>=derefmapsize then
|
||||||
|
internalerror(200306231);
|
||||||
|
result:=derefmap[id].u;
|
||||||
|
if not assigned(result) then
|
||||||
|
begin
|
||||||
|
if not assigned(derefmap[id].modulename) or
|
||||||
|
(derefmap[id].modulename^='') then
|
||||||
|
internalerror(200501159);
|
||||||
hp:=tmodule(loaded_units.first);
|
hp:=tmodule(loaded_units.first);
|
||||||
while assigned(hp) do
|
while assigned(hp) do
|
||||||
begin
|
begin
|
||||||
if assigned(hp.globalsymtable) then
|
if hp.modulename^=derefmap[id].modulename^ then
|
||||||
hp.globalsymtable.unitid:=$ffff;
|
break;
|
||||||
hp:=tmodule(hp.next);
|
hp:=tmodule(hp.next);
|
||||||
end;
|
end;
|
||||||
{ Allocate map }
|
if not assigned(hp) then
|
||||||
mapsize:=used_units.count+1;
|
internalerror(2005011510);
|
||||||
reallocmem(map,mapsize*sizeof(tunitmaprec));
|
derefmap[id].u:=hp;
|
||||||
{ Our own symtable gets unitid 0, for a program there is
|
result:=hp;
|
||||||
no globalsymtable }
|
|
||||||
if assigned(globalsymtable) then
|
|
||||||
globalsymtable.unitid:=0;
|
|
||||||
map[0].u:=self;
|
|
||||||
map[0].unitsym:=nil;
|
|
||||||
{ number units and map }
|
|
||||||
i:=1;
|
|
||||||
pu:=tused_unit(used_units.first);
|
|
||||||
while assigned(pu) do
|
|
||||||
begin
|
|
||||||
if assigned(pu.u.globalsymtable) then
|
|
||||||
begin
|
|
||||||
tsymtable(pu.u.globalsymtable).unitid:=i;
|
|
||||||
map[i].u:=pu.u;
|
|
||||||
map[i].unitsym:=pu.unitsym;
|
|
||||||
inc(i);
|
|
||||||
end;
|
|
||||||
pu:=tused_unit(pu.next);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tmodule.allunitsused;
|
procedure tmodule.allunitsused;
|
||||||
var
|
var
|
||||||
i : longint;
|
pu : tused_unit;
|
||||||
begin
|
begin
|
||||||
for i:=0 to mapsize-1 do
|
pu:=tused_unit(used_units.first);
|
||||||
|
while assigned(pu) do
|
||||||
begin
|
begin
|
||||||
if assigned(map[i].unitsym) and
|
if assigned(pu.u.globalsymtable) then
|
||||||
(map[i].unitsym.refs=0) then
|
begin
|
||||||
MessagePos2(map[i].unitsym.fileinfo,sym_n_unit_not_used,map[i].u.realmodulename^,realmodulename^);
|
if unitmap[pu.u.moduleid].u<>pu.u then
|
||||||
|
internalerror(200501157);
|
||||||
|
{ Give a note when the unit is not referenced, skip
|
||||||
|
this is for units with an initialization/finalization }
|
||||||
|
if (unitmap[pu.u.moduleid].refs=0) and
|
||||||
|
((pu.u.flags and (uf_init or uf_finalize))=0) then
|
||||||
|
CGMessagePos2(pu.unitsym.fileinfo,sym_n_unit_not_used,pu.u.realmodulename^,realmodulename^);
|
||||||
|
end;
|
||||||
|
pu:=tused_unit(pu.next);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -732,7 +832,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.51 2005-01-09 20:24:43 olle
|
Revision 1.52 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.51 2005/01/09 20:24:43 olle
|
||||||
* rework of macro subsystem
|
* rework of macro subsystem
|
||||||
+ exportable macros for mode macpas
|
+ exportable macros for mode macpas
|
||||||
|
|
||||||
|
@ -67,12 +67,14 @@ interface
|
|||||||
procedure writesourcefiles;
|
procedure writesourcefiles;
|
||||||
procedure writeusedunit(intf:boolean);
|
procedure writeusedunit(intf:boolean);
|
||||||
procedure writelinkcontainer(var p:tlinkcontainer;id:byte;strippath:boolean);
|
procedure writelinkcontainer(var p:tlinkcontainer;id:byte;strippath:boolean);
|
||||||
|
procedure writederefmap;
|
||||||
procedure writederefdata;
|
procedure writederefdata;
|
||||||
procedure putasmsymbol_in_idx(s:tnamedindexitem;arg:pointer);
|
procedure putasmsymbol_in_idx(s:tnamedindexitem;arg:pointer);
|
||||||
procedure writeasmsymbols;
|
procedure writeasmsymbols;
|
||||||
procedure readsourcefiles;
|
procedure readsourcefiles;
|
||||||
procedure readloadunit;
|
procedure readloadunit;
|
||||||
procedure readlinkcontainer(var p:tlinkcontainer);
|
procedure readlinkcontainer(var p:tlinkcontainer);
|
||||||
|
procedure readderefmap;
|
||||||
procedure readderefdata;
|
procedure readderefdata;
|
||||||
procedure readasmsymbols;
|
procedure readasmsymbols;
|
||||||
{$IFDEF MACRO_DIFF_HINT}
|
{$IFDEF MACRO_DIFF_HINT}
|
||||||
@ -462,8 +464,6 @@ uses
|
|||||||
hp : tused_unit;
|
hp : tused_unit;
|
||||||
oldcrc : boolean;
|
oldcrc : boolean;
|
||||||
begin
|
begin
|
||||||
{ renumber the units for derefence writing }
|
|
||||||
numberunits;
|
|
||||||
{ write a reference for each used unit }
|
{ write a reference for each used unit }
|
||||||
hp:=tused_unit(used_units.first);
|
hp:=tused_unit(used_units.first);
|
||||||
while assigned(hp) do
|
while assigned(hp) do
|
||||||
@ -508,6 +508,27 @@ uses
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tppumodule.writederefmap;
|
||||||
|
var
|
||||||
|
i : longint;
|
||||||
|
oldcrc : boolean;
|
||||||
|
begin
|
||||||
|
{ This does not influence crc }
|
||||||
|
oldcrc:=ppufile.do_crc;
|
||||||
|
ppufile.do_crc:=false;
|
||||||
|
{ The unit map used for resolving }
|
||||||
|
ppufile.putlongint(derefmapcnt);
|
||||||
|
for i:=0 to derefmapcnt-1 do
|
||||||
|
begin
|
||||||
|
if not assigned(derefmap[i].u) then
|
||||||
|
internalerror(2005011512);
|
||||||
|
ppufile.putstring(derefmap[i].u.modulename^)
|
||||||
|
end;
|
||||||
|
ppufile.writeentry(ibderefmap);
|
||||||
|
ppufile.do_crc:=oldcrc;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tppumodule.writederefdata;
|
procedure tppumodule.writederefdata;
|
||||||
var
|
var
|
||||||
oldcrc : boolean;
|
oldcrc : boolean;
|
||||||
@ -797,6 +818,19 @@ uses
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tppumodule.readderefmap;
|
||||||
|
var
|
||||||
|
i : longint;
|
||||||
|
begin
|
||||||
|
{ Load unit map used for resolving }
|
||||||
|
derefmapsize:=ppufile.getlongint;
|
||||||
|
getmem(derefmap,derefmapsize*sizeof(tderefmaprec));
|
||||||
|
fillchar(derefmap^,derefmapsize*sizeof(tderefmaprec),0);
|
||||||
|
for i:=0 to derefmapsize-1 do
|
||||||
|
derefmap[i].modulename:=stringdup(ppufile.getstring);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tppumodule.readderefdata;
|
procedure tppumodule.readderefdata;
|
||||||
var
|
var
|
||||||
len,hlen : longint;
|
len,hlen : longint;
|
||||||
@ -898,6 +932,8 @@ uses
|
|||||||
readlinkcontainer(LinkotherStaticLibs);
|
readlinkcontainer(LinkotherStaticLibs);
|
||||||
iblinkothersharedlibs :
|
iblinkothersharedlibs :
|
||||||
readlinkcontainer(LinkotherSharedLibs);
|
readlinkcontainer(LinkotherSharedLibs);
|
||||||
|
ibderefmap :
|
||||||
|
readderefmap;
|
||||||
ibderefdata :
|
ibderefdata :
|
||||||
readderefdata;
|
readderefdata;
|
||||||
ibendinterface :
|
ibendinterface :
|
||||||
@ -941,7 +977,7 @@ uses
|
|||||||
if (flags and uf_has_browser)<>0 then
|
if (flags and uf_has_browser)<>0 then
|
||||||
begin
|
begin
|
||||||
tstoredsymtable(globalsymtable).load_references(ppufile,true);
|
tstoredsymtable(globalsymtable).load_references(ppufile,true);
|
||||||
for i:=0 to mapsize-1 do
|
for i:=0 to unitmapsize-1 do
|
||||||
tstoredsymtable(globalsymtable).load_references(ppufile,false);
|
tstoredsymtable(globalsymtable).load_references(ppufile,false);
|
||||||
b:=ppufile.readentry;
|
b:=ppufile.readentry;
|
||||||
if b<>ibendbrowser then
|
if b<>ibendbrowser then
|
||||||
@ -1023,6 +1059,7 @@ uses
|
|||||||
tstoredsymtable(localsymtable).buildderef;
|
tstoredsymtable(localsymtable).buildderef;
|
||||||
tstoredsymtable(localsymtable).buildderefimpl;
|
tstoredsymtable(localsymtable).buildderefimpl;
|
||||||
end;
|
end;
|
||||||
|
writederefmap;
|
||||||
writederefdata;
|
writederefdata;
|
||||||
|
|
||||||
ppufile.writeentry(ibendinterface);
|
ppufile.writeentry(ibendinterface);
|
||||||
@ -1130,6 +1167,7 @@ uses
|
|||||||
derefdata.reset;
|
derefdata.reset;
|
||||||
tstoredsymtable(globalsymtable).buildderef;
|
tstoredsymtable(globalsymtable).buildderef;
|
||||||
derefdataintflen:=derefdata.size;
|
derefdataintflen:=derefdata.size;
|
||||||
|
writederefmap;
|
||||||
writederefdata;
|
writederefdata;
|
||||||
|
|
||||||
ppufile.writeentry(ibendinterface);
|
ppufile.writeentry(ibendinterface);
|
||||||
@ -1227,12 +1265,11 @@ uses
|
|||||||
end;
|
end;
|
||||||
pu:=tused_unit(pu.next);
|
pu:=tused_unit(pu.next);
|
||||||
end;
|
end;
|
||||||
numberunits;
|
|
||||||
|
|
||||||
{ ok, now load the interface of this unit }
|
{ ok, now load the interface of this unit }
|
||||||
if current_module<>self then
|
if current_module<>self then
|
||||||
internalerror(200208187);
|
internalerror(200208187);
|
||||||
globalsymtable:=tglobalsymtable.create(modulename^);
|
globalsymtable:=tglobalsymtable.create(modulename^,moduleid);
|
||||||
tstoredsymtable(globalsymtable).ppuload(ppufile);
|
tstoredsymtable(globalsymtable).ppuload(ppufile);
|
||||||
|
|
||||||
if ppufile.readentry<>ibexportedmacros then
|
if ppufile.readentry<>ibexportedmacros then
|
||||||
@ -1273,12 +1310,11 @@ uses
|
|||||||
end;
|
end;
|
||||||
pu:=tused_unit(pu.next);
|
pu:=tused_unit(pu.next);
|
||||||
end;
|
end;
|
||||||
numberunits;
|
|
||||||
|
|
||||||
{ load implementation symtable }
|
{ load implementation symtable }
|
||||||
if (flags and uf_local_symtable)<>0 then
|
if (flags and uf_local_symtable)<>0 then
|
||||||
begin
|
begin
|
||||||
localsymtable:=tstaticsymtable.create(modulename^);
|
localsymtable:=tstaticsymtable.create(modulename^,moduleid);
|
||||||
tstaticsymtable(localsymtable).ppuload(ppufile);
|
tstaticsymtable(localsymtable).ppuload(ppufile);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1566,7 +1602,7 @@ uses
|
|||||||
Message1(unit_u_registering_new_unit,Upper(s));
|
Message1(unit_u_registering_new_unit,Upper(s));
|
||||||
hp:=tppumodule.create(callermodule,s,fn,true);
|
hp:=tppumodule.create(callermodule,s,fn,true);
|
||||||
hp.loaded_from:=callermodule;
|
hp.loaded_from:=callermodule;
|
||||||
loaded_units.insert(hp);
|
addloadedunit(hp);
|
||||||
end;
|
end;
|
||||||
{ return }
|
{ return }
|
||||||
registerunit:=hp;
|
registerunit:=hp;
|
||||||
@ -1575,7 +1611,11 @@ uses
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.65 2005-01-10 21:02:35 olle
|
Revision 1.66 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.65 2005/01/10 21:02:35 olle
|
||||||
- disabled macro diff message
|
- disabled macro diff message
|
||||||
|
|
||||||
Revision 1.64 2005/01/09 20:24:43 olle
|
Revision 1.64 2005/01/09 20:24:43 olle
|
||||||
|
@ -1337,7 +1337,7 @@ implementation
|
|||||||
if assigned(st) and
|
if assigned(st) and
|
||||||
(st.symtabletype=objectsymtable) and
|
(st.symtabletype=objectsymtable) and
|
||||||
(st.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(st.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(st.defowner.owner.unitid=0) then
|
st.defowner.owner.iscurrentunit then
|
||||||
topclassh:=tobjectdef(st.defowner)
|
topclassh:=tobjectdef(st.defowner)
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -1986,7 +1986,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.109 2005-01-19 20:53:27 florian
|
Revision 1.110 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.109 2005/01/19 20:53:27 florian
|
||||||
* tmypointer(12435)^ is an l-value
|
* tmypointer(12435)^ is an l-value
|
||||||
|
|
||||||
Revision 1.108 2005/01/10 22:10:26 peter
|
Revision 1.108 2005/01/10 22:10:26 peter
|
||||||
|
@ -387,7 +387,8 @@ Unit Ra386int;
|
|||||||
searchsym(actasmpattern,srsym,srsymtable);
|
searchsym(actasmpattern,srsym,srsymtable);
|
||||||
if assigned(srsym) and
|
if assigned(srsym) and
|
||||||
(srsym.typ=unitsym) and
|
(srsym.typ=unitsym) and
|
||||||
(srsym.owner.unitid=0) then
|
(srsym.owner.symtabletype in [staticsymtable,globalsymtable]) and
|
||||||
|
srsym.owner.iscurrentunit then
|
||||||
begin
|
begin
|
||||||
{ Add . to create System.Identifier }
|
{ Add . to create System.Identifier }
|
||||||
actasmpattern:=actasmpattern+c;
|
actasmpattern:=actasmpattern+c;
|
||||||
@ -2035,7 +2036,11 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.84 2005-01-19 20:21:51 peter
|
Revision 1.85 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.84 2005/01/19 20:21:51 peter
|
||||||
* support labels in references
|
* support labels in references
|
||||||
|
|
||||||
Revision 1.83 2004/12/22 17:09:55 peter
|
Revision 1.83 2004/12/22 17:09:55 peter
|
||||||
|
@ -2180,7 +2180,8 @@ type
|
|||||||
if (st.symtabletype=objectsymtable) then
|
if (st.symtabletype=objectsymtable) then
|
||||||
st:=st.defowner.owner;
|
st:=st.defowner.owner;
|
||||||
if (pi_uses_static_symtable in tprocdef(procdefinition).inlininginfo^.flags) and
|
if (pi_uses_static_symtable in tprocdef(procdefinition).inlininginfo^.flags) and
|
||||||
(st.unitid<>0) then
|
(st.symtabletype=globalsymtable) and
|
||||||
|
(not st.iscurrentunit) then
|
||||||
begin
|
begin
|
||||||
Comment(V_lineinfo+V_Debug,'Not inlining "'+tprocdef(procdefinition).procsym.realname+'", references static symtable');
|
Comment(V_lineinfo+V_Debug,'Not inlining "'+tprocdef(procdefinition).procsym.realname+'", references static symtable');
|
||||||
end
|
end
|
||||||
@ -2495,7 +2496,11 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.275 2005-01-04 16:36:31 peter
|
Revision 1.276 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.275 2005/01/04 16:36:31 peter
|
||||||
* fix aftercosntruction calls, vmt=1 is used to indicate that
|
* fix aftercosntruction calls, vmt=1 is used to indicate that
|
||||||
afterconstruction needs to be called
|
afterconstruction needs to be called
|
||||||
* only accept resourcestring when objpas is loaded
|
* only accept resourcestring when objpas is loaded
|
||||||
|
@ -460,19 +460,20 @@ implementation
|
|||||||
exceptblockcounter:=0;
|
exceptblockcounter:=0;
|
||||||
aktmaxfpuregisters:=-1;
|
aktmaxfpuregisters:=-1;
|
||||||
{ reset the unit or create a new program }
|
{ reset the unit or create a new program }
|
||||||
if not assigned(current_module) then
|
{ a unit compiled at command line must be inside the loaded_unit list }
|
||||||
|
if (compile_level=1) then
|
||||||
begin
|
begin
|
||||||
|
if assigned(current_module) then
|
||||||
|
internalerror(200501158);
|
||||||
current_module:=tppumodule.create(nil,filename,'',false);
|
current_module:=tppumodule.create(nil,filename,'',false);
|
||||||
|
addloadedunit(current_module);
|
||||||
main_module:=current_module;
|
main_module:=current_module;
|
||||||
current_module.state:=ms_compile;
|
current_module.state:=ms_compile;
|
||||||
end;
|
end;
|
||||||
if not(current_module.state in [ms_compile,ms_second_compile]) then
|
if not(assigned(current_module) and
|
||||||
|
(current_module.state in [ms_compile,ms_second_compile])) then
|
||||||
internalerror(200212281);
|
internalerror(200212281);
|
||||||
|
|
||||||
{ a unit compiled at command line must be inside the loaded_unit list }
|
|
||||||
if (compile_level=1) then
|
|
||||||
loaded_units.insert(current_module);
|
|
||||||
|
|
||||||
{ Set the module to use for verbose }
|
{ Set the module to use for verbose }
|
||||||
compiled_module:=current_module;
|
compiled_module:=current_module;
|
||||||
SetCompileModule(current_module);
|
SetCompileModule(current_module);
|
||||||
@ -699,7 +700,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.69 2005-01-09 20:24:43 olle
|
Revision 1.70 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.69 2005/01/09 20:24:43 olle
|
||||||
* rework of macro subsystem
|
* rework of macro subsystem
|
||||||
+ exportable macros for mode macpas
|
+ exportable macros for mode macpas
|
||||||
|
|
||||||
|
@ -209,9 +209,11 @@ implementation
|
|||||||
begin
|
begin
|
||||||
if (srsym.typ=unitsym) then
|
if (srsym.typ=unitsym) then
|
||||||
begin
|
begin
|
||||||
|
if not(srsym.owner.symtabletype in [staticsymtable,globalsymtable]) then
|
||||||
|
internalerror(200501154);
|
||||||
{ only allow unit.symbol access if the name was
|
{ only allow unit.symbol access if the name was
|
||||||
found in the current module }
|
found in the current module }
|
||||||
if srsym.owner.unitid=0 then
|
if srsym.owner.iscurrentunit then
|
||||||
begin
|
begin
|
||||||
consume(_ID);
|
consume(_ID);
|
||||||
consume(_POINT);
|
consume(_POINT);
|
||||||
@ -271,7 +273,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.29 2004-08-08 12:06:38 florian
|
Revision 1.30 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.29 2004/08/08 12:06:38 florian
|
||||||
* finally is an "endtoken" as well
|
* finally is an "endtoken" as well
|
||||||
|
|
||||||
Revision 1.28 2004/06/20 08:55:30 florian
|
Revision 1.28 2004/06/20 08:55:30 florian
|
||||||
|
@ -734,7 +734,7 @@ implementation
|
|||||||
not assigned(srsym) and
|
not assigned(srsym) and
|
||||||
(symtablestack.symtabletype=staticsymtable) and
|
(symtablestack.symtabletype=staticsymtable) and
|
||||||
assigned(symtablestack.next) and
|
assigned(symtablestack.next) and
|
||||||
(symtablestack.next.unitid=0) then
|
(symtablestack.next.iscurrentunit) then
|
||||||
begin
|
begin
|
||||||
{ The procedure we prepare for is in the implementation
|
{ The procedure we prepare for is in the implementation
|
||||||
part of the unit we compile. It is also possible that we
|
part of the unit we compile. It is also possible that we
|
||||||
@ -2408,7 +2408,11 @@ const
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.225 2005-01-06 02:13:03 karoly
|
Revision 1.226 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.225 2005/01/06 02:13:03 karoly
|
||||||
* more SysV call support stuff for MorphOS
|
* more SysV call support stuff for MorphOS
|
||||||
|
|
||||||
Revision 1.224 2005/01/05 02:31:06 karoly
|
Revision 1.224 2005/01/05 02:31:06 karoly
|
||||||
|
@ -567,11 +567,6 @@ implementation
|
|||||||
pu.interface_checksum:=pu.u.interface_crc;
|
pu.interface_checksum:=pu.u.interface_crc;
|
||||||
{ connect unitsym to the globalsymtable of the unit }
|
{ connect unitsym to the globalsymtable of the unit }
|
||||||
pu.unitsym.unitsymtable:=pu.u.globalsymtable;
|
pu.unitsym.unitsymtable:=pu.u.globalsymtable;
|
||||||
{ increase refs of the unitsym when the unit contains
|
|
||||||
initialization/finalization code so it doesn't trigger
|
|
||||||
the unit not used hint }
|
|
||||||
if (pu.u.flags and (uf_init or uf_finalize))<>0 then
|
|
||||||
inc(pu.unitsym.refs);
|
|
||||||
end;
|
end;
|
||||||
pu:=tused_unit(pu.next);
|
pu:=tused_unit(pu.next);
|
||||||
end;
|
end;
|
||||||
@ -700,7 +695,7 @@ implementation
|
|||||||
begin
|
begin
|
||||||
debugList.concat(tai_comment.Create(strpnew('EINCL of global '+
|
debugList.concat(tai_comment.Create(strpnew('EINCL of global '+
|
||||||
tglobalsymtable(current_module.globalsymtable).name^+' has index '+
|
tglobalsymtable(current_module.globalsymtable).name^+' has index '+
|
||||||
tostr(tglobalsymtable(current_module.globalsymtable).unitid))));
|
tostr(tglobalsymtable(current_module.globalsymtable).moduleid))));
|
||||||
debugList.concat(Tai_stabs.Create(strpnew('"'+
|
debugList.concat(Tai_stabs.Create(strpnew('"'+
|
||||||
tglobalsymtable(current_module.globalsymtable).name^+'",'+
|
tglobalsymtable(current_module.globalsymtable).name^+'",'+
|
||||||
tostr(N_EINCL)+',0,0,0')));
|
tostr(N_EINCL)+',0,0,0')));
|
||||||
@ -995,7 +990,7 @@ implementation
|
|||||||
parse_only:=true;
|
parse_only:=true;
|
||||||
|
|
||||||
{ generate now the global symboltable }
|
{ generate now the global symboltable }
|
||||||
st:=tglobalsymtable.create(current_module.modulename^);
|
st:=tglobalsymtable.create(current_module.modulename^,current_module.moduleid);
|
||||||
refsymtable:=st;
|
refsymtable:=st;
|
||||||
unitst:=tglobalsymtable(st);
|
unitst:=tglobalsymtable(st);
|
||||||
{ define first as local to overcome dependency conflicts }
|
{ define first as local to overcome dependency conflicts }
|
||||||
@ -1057,7 +1052,7 @@ implementation
|
|||||||
|
|
||||||
{ number all units, so we know if a unit is used by this unit or
|
{ number all units, so we know if a unit is used by this unit or
|
||||||
needs to be added implicitly }
|
needs to be added implicitly }
|
||||||
current_module.numberunits;
|
current_module.updatemaps;
|
||||||
|
|
||||||
{ ... parse the declarations }
|
{ ... parse the declarations }
|
||||||
Message1(parser_u_parsing_interface,current_module.realmodulename^);
|
Message1(parser_u_parsing_interface,current_module.realmodulename^);
|
||||||
@ -1091,7 +1086,7 @@ implementation
|
|||||||
parse_only:=false;
|
parse_only:=false;
|
||||||
|
|
||||||
{ generates static symbol table }
|
{ generates static symbol table }
|
||||||
st:=tstaticsymtable.create(current_module.modulename^);
|
st:=tstaticsymtable.create(current_module.modulename^,current_module.moduleid);
|
||||||
current_module.localsymtable:=st;
|
current_module.localsymtable:=st;
|
||||||
|
|
||||||
{ Swap the positions of the local and global macro sym table}
|
{ Swap the positions of the local and global macro sym table}
|
||||||
@ -1126,7 +1121,7 @@ implementation
|
|||||||
reset_all_defs;
|
reset_all_defs;
|
||||||
|
|
||||||
{ All units are read, now give them a number }
|
{ All units are read, now give them a number }
|
||||||
current_module.numberunits;
|
current_module.updatemaps;
|
||||||
|
|
||||||
{ now we can change refsymtable }
|
{ now we can change refsymtable }
|
||||||
refsymtable:=st;
|
refsymtable:=st;
|
||||||
@ -1390,7 +1385,7 @@ implementation
|
|||||||
|
|
||||||
{ insert after the unit symbol tables the static symbol table }
|
{ insert after the unit symbol tables the static symbol table }
|
||||||
{ of the program }
|
{ of the program }
|
||||||
st:=tstaticsymtable.create(current_module.modulename^);;
|
st:=tstaticsymtable.create(current_module.modulename^,current_module.moduleid);
|
||||||
current_module.localsymtable:=st;
|
current_module.localsymtable:=st;
|
||||||
refsymtable:=st;
|
refsymtable:=st;
|
||||||
|
|
||||||
@ -1410,7 +1405,7 @@ implementation
|
|||||||
reset_all_defs;
|
reset_all_defs;
|
||||||
|
|
||||||
{ All units are read, now give them a number }
|
{ All units are read, now give them a number }
|
||||||
current_module.numberunits;
|
current_module.updatemaps;
|
||||||
|
|
||||||
{Insert the name of the main program into the symbol table.}
|
{Insert the name of the main program into the symbol table.}
|
||||||
if current_module.realmodulename^<>'' then
|
if current_module.realmodulename^<>'' then
|
||||||
@ -1600,7 +1595,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.179 2005-01-09 20:24:43 olle
|
Revision 1.180 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.179 2005/01/09 20:24:43 olle
|
||||||
* rework of macro subsystem
|
* rework of macro subsystem
|
||||||
+ exportable macros for mode macpas
|
+ exportable macros for mode macpas
|
||||||
|
|
||||||
|
@ -58,9 +58,11 @@ unit nppcld;
|
|||||||
system_powerpc_darwin:
|
system_powerpc_darwin:
|
||||||
begin
|
begin
|
||||||
if (symtableentry.typ = procsym) and
|
if (symtableentry.typ = procsym) and
|
||||||
not assigned(left) and
|
(tprocsym(symtableentry).owner.symtabletype in [staticsymtable,globalsymtable]) and
|
||||||
((tprocsym(symtableentry).owner.unitid<>0) or
|
(
|
||||||
(po_external in tprocsym(symtableentry).procdef[1].procoptions)) then
|
(not tabstractunitsymtable(tprocsym(symtableentry).owner).iscurrentmodule) or
|
||||||
|
(po_external in tprocsym(symtableentry).procdef[1].procoptions)
|
||||||
|
) then
|
||||||
begin
|
begin
|
||||||
l:=objectlibrary.getasmsymbol('L'+tprocsym(symtableentry).procdef[1].mangledname+'$non_lazy_ptr');
|
l:=objectlibrary.getasmsymbol('L'+tprocsym(symtableentry).procdef[1].mangledname+'$non_lazy_ptr');
|
||||||
if not(assigned(l)) then
|
if not(assigned(l)) then
|
||||||
@ -90,8 +92,9 @@ unit nppcld;
|
|||||||
case target_info.system of
|
case target_info.system of
|
||||||
system_powerpc_darwin:
|
system_powerpc_darwin:
|
||||||
begin
|
begin
|
||||||
if (tglobalvarsym(symtableentry).owner.unitid<>0) or
|
if (vo_is_dll_var in tglobalvarsym(symtableentry).varoptions) and
|
||||||
(vo_is_dll_var in tglobalvarsym(symtableentry).varoptions) then
|
(tglobalvarsym(symtableentry).owner.symtabletype in [staticsymtable,globalsymtable]) and
|
||||||
|
not(tabstractunitsymtable(tglobalvarsym(symtableentry).owner).iscurrentmodule) then
|
||||||
begin
|
begin
|
||||||
l:=objectlibrary.getasmsymbol('L'+tglobalvarsym(symtableentry).mangledname+'$non_lazy_ptr');
|
l:=objectlibrary.getasmsymbol('L'+tglobalvarsym(symtableentry).mangledname+'$non_lazy_ptr');
|
||||||
if not(assigned(l)) then
|
if not(assigned(l)) then
|
||||||
@ -122,7 +125,11 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.5 2004-11-11 19:31:33 peter
|
Revision 1.6 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.5 2004/11/11 19:31:33 peter
|
||||||
* fixed compile of powerpc,sparc,arm
|
* fixed compile of powerpc,sparc,arm
|
||||||
|
|
||||||
Revision 1.4 2004/07/19 12:45:43 jonas
|
Revision 1.4 2004/07/19 12:45:43 jonas
|
||||||
|
@ -44,7 +44,7 @@ type
|
|||||||
{$endif Test_Double_checksum}
|
{$endif Test_Double_checksum}
|
||||||
|
|
||||||
const
|
const
|
||||||
CurrentPPUVersion=47;
|
CurrentPPUVersion=48;
|
||||||
|
|
||||||
{ buffer sizes }
|
{ buffer sizes }
|
||||||
maxentrysize = 1024;
|
maxentrysize = 1024;
|
||||||
@ -84,6 +84,7 @@ const
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
ibderefdata = 17;
|
ibderefdata = 17;
|
||||||
ibexportedmacros = 18;
|
ibexportedmacros = 18;
|
||||||
|
ibderefmap = 19;
|
||||||
{syms}
|
{syms}
|
||||||
ibtypesym = 20;
|
ibtypesym = 20;
|
||||||
ibprocsym = 21;
|
ibprocsym = 21;
|
||||||
@ -1059,7 +1060,11 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.61 2005-01-09 20:24:43 olle
|
Revision 1.62 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.61 2005/01/09 20:24:43 olle
|
||||||
* rework of macro subsystem
|
* rework of macro subsystem
|
||||||
+ exportable macros for mode macpas
|
+ exportable macros for mode macpas
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ implementation
|
|||||||
uses
|
uses
|
||||||
globals,globtype,verbose,
|
globals,globtype,verbose,
|
||||||
symconst,symtype,symsym,symdef,symtable,
|
symconst,symtype,symsym,symdef,symtable,
|
||||||
aasmtai,aasmcpu,ncgutil,
|
aasmtai,aasmcpu,ncgutil,fmodule,
|
||||||
{$ifdef GDB}
|
{$ifdef GDB}
|
||||||
gdb,
|
gdb,
|
||||||
{$endif GDB}
|
{$endif GDB}
|
||||||
@ -255,7 +255,11 @@ implementation
|
|||||||
t:=ttypesym(srsym).restype;
|
t:=ttypesym(srsym).restype;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
oldcurrentmodule : tmodule;
|
||||||
begin
|
begin
|
||||||
|
oldcurrentmodule:=current_module;
|
||||||
|
current_module:=nil;
|
||||||
loadtype('byte',u8inttype);
|
loadtype('byte',u8inttype);
|
||||||
loadtype('shortint',s8inttype);
|
loadtype('shortint',s8inttype);
|
||||||
loadtype('word',u16inttype);
|
loadtype('word',u16inttype);
|
||||||
@ -305,6 +309,7 @@ implementation
|
|||||||
sinttype:=s32inttype;
|
sinttype:=s32inttype;
|
||||||
ptrinttype:=u32inttype;
|
ptrinttype:=u32inttype;
|
||||||
{$endif cpu64bit}
|
{$endif cpu64bit}
|
||||||
|
current_module:=oldcurrentmodule;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -537,7 +542,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.75 2004-12-07 16:11:52 peter
|
Revision 1.76 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.75 2004/12/07 16:11:52 peter
|
||||||
* set vo_explicit_paraloc flag
|
* set vo_explicit_paraloc flag
|
||||||
|
|
||||||
Revision 1.74 2004/12/07 13:52:54 michael
|
Revision 1.74 2004/12/07 13:52:54 michael
|
||||||
|
@ -111,7 +111,11 @@ implementation
|
|||||||
begin
|
begin
|
||||||
is_unit_specific:=true;
|
is_unit_specific:=true;
|
||||||
consume(_POINT);
|
consume(_POINT);
|
||||||
if srsym.owner.unitid=0 then
|
if not(srsym.owner.symtabletype in [staticsymtable,globalsymtable]) then
|
||||||
|
internalerror(200501155);
|
||||||
|
{ only allow unit.symbol access if the name was
|
||||||
|
found in the current module }
|
||||||
|
if srsym.owner.iscurrentunit then
|
||||||
begin
|
begin
|
||||||
srsym:=searchsymonlyin(tunitsym(srsym).unitsymtable,pattern);
|
srsym:=searchsymonlyin(tunitsym(srsym).unitsymtable,pattern);
|
||||||
pos:=akttokenpos;
|
pos:=akttokenpos;
|
||||||
@ -166,9 +170,12 @@ implementation
|
|||||||
they can be refered from the parameters and symbols are not
|
they can be refered from the parameters and symbols are not
|
||||||
loaded at that time. Only write the definition when the
|
loaded at that time. Only write the definition when the
|
||||||
symbol is the real owner of the definition (not a redefine) }
|
symbol is the real owner of the definition (not a redefine) }
|
||||||
if (ttypesym(srsym).owner.unitid=0) and
|
if (ttypesym(srsym).owner.symtabletype in [staticsymtable,globalsymtable]) and
|
||||||
((ttypesym(srsym).restype.def.typesym=nil) or
|
ttypesym(srsym).owner.iscurrentunit and
|
||||||
(srsym=ttypesym(srsym).restype.def.typesym)) then
|
(
|
||||||
|
(ttypesym(srsym).restype.def.typesym=nil) or
|
||||||
|
(srsym=ttypesym(srsym).restype.def.typesym)
|
||||||
|
) then
|
||||||
tt.setdef(ttypesym(srsym).restype.def)
|
tt.setdef(ttypesym(srsym).restype.def)
|
||||||
else
|
else
|
||||||
tt.setsym(srsym);
|
tt.setsym(srsym);
|
||||||
@ -659,7 +666,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.72 2005-01-04 16:39:12 peter
|
Revision 1.73 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.72 2005/01/04 16:39:12 peter
|
||||||
* allow enum with jumps as array index in delphi mode
|
* allow enum with jumps as array index in delphi mode
|
||||||
|
|
||||||
Revision 1.71 2004/11/16 20:32:41 peter
|
Revision 1.71 2004/11/16 20:32:41 peter
|
||||||
|
@ -371,7 +371,8 @@ unit raatt;
|
|||||||
searchsym(actasmpattern,srsym,srsymtable);
|
searchsym(actasmpattern,srsym,srsymtable);
|
||||||
if assigned(srsym) and
|
if assigned(srsym) and
|
||||||
(srsym.typ=unitsym) and
|
(srsym.typ=unitsym) and
|
||||||
(srsym.owner.unitid=0) then
|
(srsym.owner.symtabletype in [staticsymtable,globalsymtable]) and
|
||||||
|
srsym.owner.iscurrentunit then
|
||||||
begin
|
begin
|
||||||
actasmpattern:=actasmpattern+c;
|
actasmpattern:=actasmpattern+c;
|
||||||
c:=current_scanner.asmgetchar;
|
c:=current_scanner.asmgetchar;
|
||||||
@ -1522,7 +1523,11 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.16 2004-12-22 17:09:55 peter
|
Revision 1.17 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.16 2004/12/22 17:09:55 peter
|
||||||
* support sizeof()
|
* support sizeof()
|
||||||
* fix typecasting a constant like dword(4)
|
* fix typecasting a constant like dword(4)
|
||||||
|
|
||||||
|
@ -1211,7 +1211,8 @@ begin
|
|||||||
if assigned(srsym) then
|
if assigned(srsym) then
|
||||||
begin
|
begin
|
||||||
if (srsym.typ=unitsym) and
|
if (srsym.typ=unitsym) and
|
||||||
(srsym.owner.unitid=0) then
|
(srsym.owner.symtabletype in [staticsymtable,globalsymtable]) and
|
||||||
|
srsym.owner.iscurrentunit then
|
||||||
srsym:=searchsymonlyin(tunitsym(srsym).unitsymtable,Copy(s,i+1,255))
|
srsym:=searchsymonlyin(tunitsym(srsym).unitsymtable,Copy(s,i+1,255))
|
||||||
else
|
else
|
||||||
srsym:=nil;
|
srsym:=nil;
|
||||||
@ -1625,7 +1626,11 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.100 2005-01-05 15:22:39 florian
|
Revision 1.101 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.100 2005/01/05 15:22:39 florian
|
||||||
* added support of shifter ops in arm inline assembler
|
* added support of shifter ops in arm inline assembler
|
||||||
|
|
||||||
Revision 1.99 2004/12/22 17:09:55 peter
|
Revision 1.99 2004/12/22 17:09:55 peter
|
||||||
|
@ -103,10 +103,9 @@ interface
|
|||||||
next : tsymtable;
|
next : tsymtable;
|
||||||
defowner : tdefentry; { for records and objects }
|
defowner : tdefentry; { for records and objects }
|
||||||
symtabletype : tsymtabletype;
|
symtabletype : tsymtabletype;
|
||||||
{ each symtable gets a number }
|
|
||||||
unitid : word;
|
|
||||||
{ level of symtable, used for nested procedures }
|
{ level of symtable, used for nested procedures }
|
||||||
symtablelevel : byte;
|
symtablelevel : byte;
|
||||||
|
moduleid : longint;
|
||||||
refcount : integer;
|
refcount : integer;
|
||||||
constructor Create(const s:string);
|
constructor Create(const s:string);
|
||||||
destructor destroy;override;
|
destructor destroy;override;
|
||||||
@ -123,6 +122,7 @@ interface
|
|||||||
function search(const s : stringid) : tsymentry;
|
function search(const s : stringid) : tsymentry;
|
||||||
function speedsearch(const s : stringid;speedvalue : cardinal) : tsymentry;virtual;
|
function speedsearch(const s : stringid;speedvalue : cardinal) : tsymentry;virtual;
|
||||||
procedure registerdef(p : tdefentry);
|
procedure registerdef(p : tdefentry);
|
||||||
|
function iscurrentunit:boolean;virtual;
|
||||||
{$ifdef EXTDEBUG}
|
{$ifdef EXTDEBUG}
|
||||||
procedure dump;
|
procedure dump;
|
||||||
{$endif EXTDEBUG}
|
{$endif EXTDEBUG}
|
||||||
@ -178,7 +178,6 @@ implementation
|
|||||||
defindex:=TIndexArray.create(indexgrowsize);
|
defindex:=TIndexArray.create(indexgrowsize);
|
||||||
symsearch:=tdictionary.create;
|
symsearch:=tdictionary.create;
|
||||||
symsearch.noclear:=true;
|
symsearch.noclear:=true;
|
||||||
unitid:=0;
|
|
||||||
refcount:=1;
|
refcount:=1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -242,6 +241,12 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function tsymtable.iscurrentunit:boolean;
|
||||||
|
begin
|
||||||
|
result:=false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tsymtable.foreach(proc2call : tnamedindexcallback;arg:pointer);
|
procedure tsymtable.foreach(proc2call : tnamedindexcallback;arg:pointer);
|
||||||
begin
|
begin
|
||||||
symindex.foreach(proc2call,arg);
|
symindex.foreach(proc2call,arg);
|
||||||
@ -345,7 +350,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.24 2005-01-09 20:24:43 olle
|
Revision 1.25 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.24 2005/01/09 20:24:43 olle
|
||||||
* rework of macro subsystem
|
* rework of macro subsystem
|
||||||
+ exportable macros for mode macpas
|
+ exportable macros for mode macpas
|
||||||
|
|
||||||
|
@ -1132,8 +1132,9 @@ implementation
|
|||||||
end;
|
end;
|
||||||
if (cs_gdb_dbx in aktglobalswitches) and
|
if (cs_gdb_dbx in aktglobalswitches) and
|
||||||
assigned(typesym) and
|
assigned(typesym) and
|
||||||
(ttypesym(typesym).owner.unitid<>0) then
|
(ttypesym(typesym).owner.symtabletype in [staticsymtable,globalsymtable]) and
|
||||||
result:='('+tostr(ttypesym(typesym).owner.unitid)+','+tostr(tstoreddef(ttypesym(typesym).restype.def).globalnb)+')'
|
(ttypesym(typesym).owner.iscurrentunit) then
|
||||||
|
result:='('+tostr(tabstractunitsymtable(ttypesym(typesym).owner).moduleid)+','+tostr(tstoreddef(ttypesym(typesym).restype.def).globalnb)+')'
|
||||||
else
|
else
|
||||||
result:=tostr(globalnb);
|
result:=tostr(globalnb);
|
||||||
end;
|
end;
|
||||||
@ -3315,7 +3316,7 @@ implementation
|
|||||||
{ now dereference the definitions }
|
{ now dereference the definitions }
|
||||||
tstoredsymtable(symtable).deref;
|
tstoredsymtable(symtable).deref;
|
||||||
aktrecordsymtable:=oldrecsyms;
|
aktrecordsymtable:=oldrecsyms;
|
||||||
{ assign TGUID? load only from system unit (unitid=1) }
|
{ assign TGUID? load only from system unit }
|
||||||
if not(assigned(rec_tguid)) and
|
if not(assigned(rec_tguid)) and
|
||||||
(upper(typename)='TGUID') and
|
(upper(typename)='TGUID') and
|
||||||
assigned(owner) and
|
assigned(owner) and
|
||||||
@ -3837,6 +3838,8 @@ implementation
|
|||||||
{$ifdef GDB}
|
{$ifdef GDB}
|
||||||
isstabwritten := false;
|
isstabwritten := false;
|
||||||
{$endif GDB}
|
{$endif GDB}
|
||||||
|
{ Disable po_has_inlining until the derefimpl is done }
|
||||||
|
exclude(procoptions,po_has_inlininginfo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -4034,7 +4037,7 @@ implementation
|
|||||||
module as they are defined }
|
module as they are defined }
|
||||||
if (sp_private in symoptions) and
|
if (sp_private in symoptions) and
|
||||||
(owner.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(owner.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(owner.defowner.owner.unitid<>0) then
|
not(owner.defowner.owner.iscurrentunit) then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
{ protected symbols are vissible in the module that defines them and
|
{ protected symbols are vissible in the module that defines them and
|
||||||
@ -4044,11 +4047,12 @@ implementation
|
|||||||
(
|
(
|
||||||
(
|
(
|
||||||
(owner.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(owner.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(owner.defowner.owner.unitid<>0)
|
not(owner.defowner.owner.iscurrentunit)
|
||||||
) and
|
) and
|
||||||
not(
|
not(
|
||||||
assigned(currobjdef) and
|
assigned(currobjdef) and
|
||||||
(currobjdef.owner.unitid=0) and
|
(currobjdef.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
|
(currobjdef.owner.iscurrentunit) and
|
||||||
currobjdef.is_related(tobjectdef(owner.defowner))
|
currobjdef.is_related(tobjectdef(owner.defowner))
|
||||||
)
|
)
|
||||||
) then
|
) then
|
||||||
@ -4155,6 +4159,7 @@ implementation
|
|||||||
end;
|
end;
|
||||||
ppufile.writeentry(ibdefref);
|
ppufile.writeentry(ibdefref);
|
||||||
write_references:=true;
|
write_references:=true;
|
||||||
|
{$ifdef supportbrowser}
|
||||||
if ((current_module.flags and uf_local_browser)<>0) and
|
if ((current_module.flags and uf_local_browser)<>0) and
|
||||||
assigned(localst) and
|
assigned(localst) and
|
||||||
locals then
|
locals then
|
||||||
@ -4165,14 +4170,14 @@ implementation
|
|||||||
begin
|
begin
|
||||||
if pdo.symtable<>aktrecordsymtable then
|
if pdo.symtable<>aktrecordsymtable then
|
||||||
begin
|
begin
|
||||||
pdo.symtable.unitid:=local_symtable_index;
|
pdo.symtable.moduleid:=local_symtable_index;
|
||||||
inc(local_symtable_index);
|
inc(local_symtable_index);
|
||||||
end;
|
end;
|
||||||
pdo:=pdo.childof;
|
pdo:=pdo.childof;
|
||||||
end;
|
end;
|
||||||
parast.unitid:=local_symtable_index;
|
parast.moduleid:=local_symtable_index;
|
||||||
inc(local_symtable_index);
|
inc(local_symtable_index);
|
||||||
localst.unitid:=local_symtable_index;
|
localst.moduleid:=local_symtable_index;
|
||||||
inc(local_symtable_index);
|
inc(local_symtable_index);
|
||||||
tstoredsymtable(parast).write_references(ppufile,locals);
|
tstoredsymtable(parast).write_references(ppufile,locals);
|
||||||
tstoredsymtable(localst).write_references(ppufile,locals);
|
tstoredsymtable(localst).write_references(ppufile,locals);
|
||||||
@ -4187,6 +4192,7 @@ implementation
|
|||||||
pdo:=pdo.childof;
|
pdo:=pdo.childof;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
{$endif supportbrowser}
|
||||||
aktparasymtable:=oldparasymtable;
|
aktparasymtable:=oldparasymtable;
|
||||||
aktlocalsymtable:=oldlocalsymtable;
|
aktlocalsymtable:=oldlocalsymtable;
|
||||||
end;
|
end;
|
||||||
@ -4303,6 +4309,12 @@ implementation
|
|||||||
|
|
||||||
inherited buildderefimpl;
|
inherited buildderefimpl;
|
||||||
|
|
||||||
|
{ Enable has_inlininginfo when the inlininginfo
|
||||||
|
structure is available. The has_inlininginfo was disabled
|
||||||
|
after the load, since the data was invalid }
|
||||||
|
if assigned(inlininginfo) then
|
||||||
|
include(procoptions,po_has_inlininginfo);
|
||||||
|
|
||||||
{ Locals }
|
{ Locals }
|
||||||
if assigned(localst) and
|
if assigned(localst) and
|
||||||
((po_has_inlininginfo in procoptions) or
|
((po_has_inlininginfo in procoptions) or
|
||||||
@ -4566,7 +4578,7 @@ implementation
|
|||||||
|
|
||||||
function tprocvardef.getcopy : tstoreddef;
|
function tprocvardef.getcopy : tstoreddef;
|
||||||
begin
|
begin
|
||||||
{
|
(*
|
||||||
{ saves a definition to the return type }
|
{ saves a definition to the return type }
|
||||||
rettype : ttype;
|
rettype : ttype;
|
||||||
parast : tsymtable;
|
parast : tsymtable;
|
||||||
@ -4588,7 +4600,7 @@ implementation
|
|||||||
constructor create(level:byte);
|
constructor create(level:byte);
|
||||||
constructor ppuload(ppufile:tcompilerppufile);
|
constructor ppuload(ppufile:tcompilerppufile);
|
||||||
function getcopy : tstoreddef;override;
|
function getcopy : tstoreddef;override;
|
||||||
}
|
*)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -4959,7 +4971,7 @@ implementation
|
|||||||
function tobjectdef.getcopy : tstoreddef;
|
function tobjectdef.getcopy : tstoreddef;
|
||||||
begin
|
begin
|
||||||
result:=inherited getcopy;
|
result:=inherited getcopy;
|
||||||
{
|
(*
|
||||||
result:=tobjectdef.create(objecttype,objname^,childof);
|
result:=tobjectdef.create(objecttype,objname^,childof);
|
||||||
childofderef : tderef;
|
childofderef : tderef;
|
||||||
objname,
|
objname,
|
||||||
@ -4977,7 +4989,7 @@ implementation
|
|||||||
lastvtableindex: longint;
|
lastvtableindex: longint;
|
||||||
{ store implemented interfaces defs and name mappings }
|
{ store implemented interfaces defs and name mappings }
|
||||||
implementedinterfaces: timplementedinterfaces;
|
implementedinterfaces: timplementedinterfaces;
|
||||||
}
|
*)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -6355,7 +6367,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.289 2005-01-16 14:47:26 florian
|
Revision 1.290 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.289 2005/01/16 14:47:26 florian
|
||||||
* typeinfo in typedata is now aligned
|
* typeinfo in typedata is now aligned
|
||||||
|
|
||||||
Revision 1.288 2005/01/09 15:05:29 peter
|
Revision 1.288 2005/01/09 15:05:29 peter
|
||||||
|
@ -138,16 +138,17 @@ interface
|
|||||||
prev_dbx_counter : plongint;
|
prev_dbx_counter : plongint;
|
||||||
dbx_count_ok : boolean;
|
dbx_count_ok : boolean;
|
||||||
{$endif GDB}
|
{$endif GDB}
|
||||||
constructor create(const n : string);
|
constructor create(const n : string;id:word);
|
||||||
{$ifdef GDB}
|
{$ifdef GDB}
|
||||||
procedure concattypestabto(asmlist : taasmoutput);
|
procedure concattypestabto(asmlist : taasmoutput);
|
||||||
{$endif GDB}
|
{$endif GDB}
|
||||||
|
function iscurrentunit:boolean;override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
tglobalsymtable = class(tabstractunitsymtable)
|
tglobalsymtable = class(tabstractunitsymtable)
|
||||||
public
|
public
|
||||||
unittypecount : word;
|
unittypecount : word;
|
||||||
constructor create(const n : string);
|
constructor create(const n : string;id:word);
|
||||||
procedure ppuload(ppufile:tcompilerppufile);override;
|
procedure ppuload(ppufile:tcompilerppufile);override;
|
||||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||||
procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
|
procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
|
||||||
@ -160,7 +161,7 @@ interface
|
|||||||
|
|
||||||
tstaticsymtable = class(tabstractunitsymtable)
|
tstaticsymtable = class(tabstractunitsymtable)
|
||||||
public
|
public
|
||||||
constructor create(const n : string);
|
constructor create(const n : string;id:word);
|
||||||
procedure ppuload(ppufile:tcompilerppufile);override;
|
procedure ppuload(ppufile:tcompilerppufile);override;
|
||||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||||
procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
|
procedure load_references(ppufile:tcompilerppufile;locals:boolean);override;
|
||||||
@ -591,7 +592,9 @@ implementation
|
|||||||
st:=findunitsymtable(sym.owner);
|
st:=findunitsymtable(sym.owner);
|
||||||
with tsym(sym).fileinfo do
|
with tsym(sym).fileinfo do
|
||||||
begin
|
begin
|
||||||
if assigned(st) and (st.unitid<>0) then
|
if assigned(st) and
|
||||||
|
(st.symtabletype=globalsymtable) and
|
||||||
|
(not st.iscurrentunit) then
|
||||||
Message2(sym_h_duplicate_id_where,'unit '+st.name^,tostr(line))
|
Message2(sym_h_duplicate_id_where,'unit '+st.name^,tostr(line))
|
||||||
else
|
else
|
||||||
Message2(sym_h_duplicate_id_where,current_module.sourcefiles.get_file_name(fileindex),tostr(line));
|
Message2(sym_h_duplicate_id_where,current_module.sourcefiles.get_file_name(fileindex),tostr(line));
|
||||||
@ -661,19 +664,14 @@ implementation
|
|||||||
Message(sym_e_only_static_in_static);
|
Message(sym_e_only_static_in_static);
|
||||||
|
|
||||||
{ unit uses count }
|
{ unit uses count }
|
||||||
if (unitid<>0) and
|
if assigned(current_module) and
|
||||||
(symtabletype = globalsymtable) and
|
(symtabletype=globalsymtable) then
|
||||||
assigned(current_module) and
|
begin
|
||||||
(unitid<current_module.mapsize) and
|
if tglobalsymtable(self).moduleid>current_module.unitmapsize then
|
||||||
assigned(current_module.map[unitid].unitsym) then
|
internalerror(200501152);
|
||||||
inc(current_module.map[unitid].unitsym.refs);
|
inc(current_module.unitmap[tglobalsymtable(self).moduleid].refs);
|
||||||
|
end;
|
||||||
|
|
||||||
{ unitsym are only loaded for browsing PM }
|
|
||||||
{ this was buggy anyway because we could use }
|
|
||||||
{ unitsyms from other units in _USES !! }
|
|
||||||
{if (symtabletype=unitsymtable) and (hp.typ=unitsym) and
|
|
||||||
assigned(current_module) and (current_module.globalsymtable<>.load) then
|
|
||||||
hp:=nil;}
|
|
||||||
if make_ref and (cs_browser in aktmoduleswitches) then
|
if make_ref and (cs_browser in aktmoduleswitches) then
|
||||||
begin
|
begin
|
||||||
newref:=tref.create(hp.lastref,@akttokenpos);
|
newref:=tref.create(hp.lastref,@akttokenpos);
|
||||||
@ -1344,9 +1342,10 @@ implementation
|
|||||||
TAbstractUnitSymtable
|
TAbstractUnitSymtable
|
||||||
****************************************************************************}
|
****************************************************************************}
|
||||||
|
|
||||||
constructor tabstractunitsymtable.create(const n : string);
|
constructor tabstractunitsymtable.create(const n : string;id:word);
|
||||||
begin
|
begin
|
||||||
inherited create(n);
|
inherited create(n);
|
||||||
|
moduleid:=id;
|
||||||
symsearch.usehash;
|
symsearch.usehash;
|
||||||
{$ifdef GDB}
|
{$ifdef GDB}
|
||||||
{ reset GDB things }
|
{ reset GDB things }
|
||||||
@ -1357,6 +1356,16 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function tabstractunitsymtable.iscurrentunit:boolean;
|
||||||
|
begin
|
||||||
|
result:=assigned(current_module) and
|
||||||
|
(
|
||||||
|
(current_module.globalsymtable=self) or
|
||||||
|
(current_module.localsymtable=self)
|
||||||
|
);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{$ifdef GDB}
|
{$ifdef GDB}
|
||||||
procedure tabstractunitsymtable.concattypestabto(asmlist : taasmoutput);
|
procedure tabstractunitsymtable.concattypestabto(asmlist : taasmoutput);
|
||||||
|
|
||||||
@ -1368,7 +1377,7 @@ implementation
|
|||||||
while assigned(p) do
|
while assigned(p) do
|
||||||
begin
|
begin
|
||||||
{ also insert local types for the current unit }
|
{ also insert local types for the current unit }
|
||||||
if (unitid=0) then
|
if iscurrentunit then
|
||||||
begin
|
begin
|
||||||
case p.deftype of
|
case p.deftype of
|
||||||
procdef :
|
procdef :
|
||||||
@ -1390,23 +1399,23 @@ implementation
|
|||||||
begin
|
begin
|
||||||
if not assigned(name) then
|
if not assigned(name) then
|
||||||
name := stringdup('Main_program');
|
name := stringdup('Main_program');
|
||||||
asmList.concat(tai_comment.Create(strpnew('Begin unit '+name^+' has index '+tostr(unitid))));
|
asmList.concat(tai_comment.Create(strpnew('Begin unit '+name^+' has index '+tostr(moduleid))));
|
||||||
if cs_gdb_dbx in aktglobalswitches then
|
if cs_gdb_dbx in aktglobalswitches then
|
||||||
begin
|
begin
|
||||||
if dbx_count_ok then
|
if dbx_count_ok then
|
||||||
begin
|
begin
|
||||||
asmList.concat(tai_comment.Create(strpnew('"repeated" unit '+name^
|
asmList.concat(tai_comment.Create(strpnew('"repeated" unit '+name^
|
||||||
+' has index '+tostr(unitid)+' dbx count = '+tostr(dbx_count))));
|
+' has index '+tostr(moduleid)+' dbx count = '+tostr(dbx_count))));
|
||||||
asmList.concat(Tai_stabs.Create(strpnew('"'+name^+'",'
|
asmList.concat(Tai_stabs.Create(strpnew('"'+name^+'",'
|
||||||
+tostr(N_EXCL)+',0,0,'+tostr(dbx_count))));
|
+tostr(N_EXCL)+',0,0,'+tostr(dbx_count))));
|
||||||
exit;
|
exit;
|
||||||
end
|
end
|
||||||
else if (current_module.globalsymtable<>self) then
|
else if not iscurrentunit then
|
||||||
begin
|
begin
|
||||||
prev_dbx_count := dbx_counter;
|
prev_dbx_count := dbx_counter;
|
||||||
dbx_counter := nil;
|
dbx_counter := nil;
|
||||||
do_count_dbx:=false;
|
do_count_dbx:=false;
|
||||||
if (symtabletype = globalsymtable) and (unitid<>0) then
|
if (symtabletype = globalsymtable) then
|
||||||
asmList.concat(Tai_stabs.Create(strpnew('"'+name^+'",'+tostr(N_BINCL)+',0,0,0')));
|
asmList.concat(Tai_stabs.Create(strpnew('"'+name^+'",'+tostr(N_BINCL)+',0,0,0')));
|
||||||
dbx_counter := @dbx_count;
|
dbx_counter := @dbx_count;
|
||||||
dbx_count:=0;
|
dbx_count:=0;
|
||||||
@ -1421,7 +1430,7 @@ implementation
|
|||||||
|
|
||||||
if cs_gdb_dbx in aktglobalswitches then
|
if cs_gdb_dbx in aktglobalswitches then
|
||||||
begin
|
begin
|
||||||
if (current_module.globalsymtable<>self) then
|
if not iscurrentunit then
|
||||||
begin
|
begin
|
||||||
dbx_counter := prev_dbx_count;
|
dbx_counter := prev_dbx_count;
|
||||||
do_count_dbx:=false;
|
do_count_dbx:=false;
|
||||||
@ -1431,7 +1440,7 @@ implementation
|
|||||||
dbx_count_ok := {true}false;
|
dbx_count_ok := {true}false;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
asmList.concat(tai_comment.Create(strpnew('End unit '+name^+' has index '+tostr(unitid))));
|
asmList.concat(tai_comment.Create(strpnew('End unit '+name^+' has index '+tostr(moduleid))));
|
||||||
end;
|
end;
|
||||||
{$endif GDB}
|
{$endif GDB}
|
||||||
|
|
||||||
@ -1440,9 +1449,9 @@ implementation
|
|||||||
TStaticSymtable
|
TStaticSymtable
|
||||||
****************************************************************************}
|
****************************************************************************}
|
||||||
|
|
||||||
constructor tstaticsymtable.create(const n : string);
|
constructor tstaticsymtable.create(const n : string;id:word);
|
||||||
begin
|
begin
|
||||||
inherited create(n);
|
inherited create(n,id);
|
||||||
symtabletype:=staticsymtable;
|
symtabletype:=staticsymtable;
|
||||||
symtablelevel:=main_program_level;
|
symtablelevel:=main_program_level;
|
||||||
end;
|
end;
|
||||||
@ -1487,7 +1496,8 @@ implementation
|
|||||||
begin
|
begin
|
||||||
{ also check the global symtable }
|
{ also check the global symtable }
|
||||||
if assigned(next) and
|
if assigned(next) and
|
||||||
(next.unitid=0) then
|
(next.symtabletype=globalsymtable) and
|
||||||
|
(next.iscurrentunit) then
|
||||||
begin
|
begin
|
||||||
hsym:=tsym(next.search(sym.name));
|
hsym:=tsym(next.search(sym.name));
|
||||||
if assigned(hsym) then
|
if assigned(hsym) then
|
||||||
@ -1511,20 +1521,19 @@ implementation
|
|||||||
TGlobalSymtable
|
TGlobalSymtable
|
||||||
****************************************************************************}
|
****************************************************************************}
|
||||||
|
|
||||||
constructor tglobalsymtable.create(const n : string);
|
constructor tglobalsymtable.create(const n : string;id:word);
|
||||||
begin
|
begin
|
||||||
inherited create(n);
|
inherited create(n,id);
|
||||||
symtabletype:=globalsymtable;
|
symtabletype:=globalsymtable;
|
||||||
symtablelevel:=main_program_level;
|
symtablelevel:=main_program_level;
|
||||||
unitid:=0;
|
|
||||||
{$ifdef GDB}
|
{$ifdef GDB}
|
||||||
if cs_gdb_dbx in aktglobalswitches then
|
if cs_gdb_dbx in aktglobalswitches then
|
||||||
begin
|
begin
|
||||||
dbx_count := 0;
|
dbx_count := 0;
|
||||||
unittypecount:=1;
|
unittypecount:=1;
|
||||||
pglobaltypecount := @unittypecount;
|
pglobaltypecount := @unittypecount;
|
||||||
{unitid:=current_module.unitcount;}
|
{moduleid:=current_module.unitcount;}
|
||||||
{debugList.concat(tai_comment.Create(strpnew('Global '+name^+' has index '+tostr(unitid))));
|
{debugList.concat(tai_comment.Create(strpnew('Global '+name^+' has index '+tostr(moduleid))));
|
||||||
debugList.concat(Tai_stabs.Create(strpnew('"'+name^+'",'+tostr(N_BINCL)+',0,0,0')));}
|
debugList.concat(Tai_stabs.Create(strpnew('"'+name^+'",'+tostr(N_BINCL)+',0,0,0')));}
|
||||||
{inc(current_module.unitcount);}
|
{inc(current_module.unitcount);}
|
||||||
{ we can't use dbx_vcount, because we don't know
|
{ we can't use dbx_vcount, because we don't know
|
||||||
@ -1624,24 +1633,6 @@ implementation
|
|||||||
var
|
var
|
||||||
hsym : tsym;
|
hsym : tsym;
|
||||||
begin
|
begin
|
||||||
{ also check the global symtable }
|
|
||||||
if assigned(next) and
|
|
||||||
(next.unitid=0) then
|
|
||||||
begin
|
|
||||||
hsym:=tsym(next.search(sym.name));
|
|
||||||
if assigned(hsym) then
|
|
||||||
begin
|
|
||||||
{ Delphi you can have a symbol with the same name as the
|
|
||||||
unit, the unit can then not be accessed anymore using
|
|
||||||
<unit>.<id>, so we can hide the symbol }
|
|
||||||
if (m_duplicate_names in aktmodeswitches) and
|
|
||||||
(hsym.typ=symconst.unitsym) then
|
|
||||||
hsym.owner.rename(hsym.name,'hidden'+hsym.name)
|
|
||||||
else
|
|
||||||
DuplicateSym(sym,hsym);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
hsym:=tsym(search(sym.name));
|
hsym:=tsym(search(sym.name));
|
||||||
if assigned(hsym) then
|
if assigned(hsym) then
|
||||||
begin
|
begin
|
||||||
@ -1834,7 +1825,7 @@ implementation
|
|||||||
assigned(srsymtable.defowner) and
|
assigned(srsymtable.defowner) and
|
||||||
(srsymtable.defowner.deftype=objectdef) and
|
(srsymtable.defowner.deftype=objectdef) and
|
||||||
(srsymtable.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(srsymtable.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(srsymtable.defowner.owner.unitid=0) then
|
(srsymtable.defowner.owner.iscurrentunit) then
|
||||||
topclass:=tobjectdef(srsymtable.defowner)
|
topclass:=tobjectdef(srsymtable.defowner)
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -1904,7 +1895,8 @@ implementation
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
{ also check in the local symtbale if it exists }
|
{ also check in the local symtbale if it exists }
|
||||||
if (p=tsymtable(current_module.globalsymtable)) then
|
if (p.symtabletype=globalsymtable) and
|
||||||
|
(p.iscurrentunit) then
|
||||||
begin
|
begin
|
||||||
srsym:=tsym(current_module.localsymtable.search(s));
|
srsym:=tsym(current_module.localsymtable.search(s));
|
||||||
if assigned(srsym) then
|
if assigned(srsym) then
|
||||||
@ -1931,7 +1923,7 @@ implementation
|
|||||||
units. At least kylix supports it this way (PFV) }
|
units. At least kylix supports it this way (PFV) }
|
||||||
if assigned(classh) and
|
if assigned(classh) and
|
||||||
(classh.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(classh.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(classh.owner.unitid=0) then
|
classh.owner.iscurrentunit then
|
||||||
topclassh:=classh
|
topclassh:=classh
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -1965,7 +1957,7 @@ implementation
|
|||||||
units. At least kylix supports it this way (PFV) }
|
units. At least kylix supports it this way (PFV) }
|
||||||
if assigned(classh) and
|
if assigned(classh) and
|
||||||
(classh.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(classh.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(classh.owner.unitid=0) then
|
classh.owner.iscurrentunit then
|
||||||
topclassh:=classh
|
topclassh:=classh
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -2016,7 +2008,7 @@ implementation
|
|||||||
units. At least kylix supports it this way (PFV) }
|
units. At least kylix supports it this way (PFV) }
|
||||||
if assigned(classh) and
|
if assigned(classh) and
|
||||||
(classh.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(classh.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(classh.owner.unitid=0) then
|
classh.owner.iscurrentunit then
|
||||||
topclassh:=classh
|
topclassh:=classh
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -2471,7 +2463,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.168 2005-01-09 20:24:43 olle
|
Revision 1.169 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.168 2005/01/09 20:24:43 olle
|
||||||
* rework of macro subsystem
|
* rework of macro subsystem
|
||||||
+ exportable macros for mode macpas
|
+ exportable macros for mode macpas
|
||||||
|
|
||||||
|
@ -479,7 +479,7 @@ implementation
|
|||||||
if (sp_private in symoptions) and
|
if (sp_private in symoptions) and
|
||||||
assigned(owner.defowner) and
|
assigned(owner.defowner) and
|
||||||
(owner.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(owner.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(owner.defowner.owner.unitid<>0) then
|
(not owner.defowner.owner.iscurrentunit) then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
{ protected symbols are vissible in the module that defines them and
|
{ protected symbols are vissible in the module that defines them and
|
||||||
@ -489,7 +489,7 @@ implementation
|
|||||||
(
|
(
|
||||||
assigned(owner.defowner) and
|
assigned(owner.defowner) and
|
||||||
(owner.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
(owner.defowner.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
(owner.defowner.owner.unitid<>0)
|
(not owner.defowner.owner.iscurrentunit)
|
||||||
) and
|
) and
|
||||||
not(
|
not(
|
||||||
assigned(currobjdef) {and
|
assigned(currobjdef) {and
|
||||||
@ -595,8 +595,10 @@ implementation
|
|||||||
if assigned(sym) and
|
if assigned(sym) and
|
||||||
(
|
(
|
||||||
(sym<>def.typesym) or
|
(sym<>def.typesym) or
|
||||||
((sym.owner.unitid<>0) and
|
(
|
||||||
(sym.owner.unitid<>1))
|
not((sym.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||||
|
sym.owner.iscurrentunit)
|
||||||
|
)
|
||||||
) then
|
) then
|
||||||
deref.build(sym)
|
deref.build(sym)
|
||||||
else
|
else
|
||||||
@ -811,33 +813,33 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure addowner(s:tsymtableentry);
|
procedure addowner(s:tsymtableentry);
|
||||||
|
var
|
||||||
|
idx : longint;
|
||||||
begin
|
begin
|
||||||
if not assigned(s.owner) then
|
if not assigned(s.owner) then
|
||||||
internalerror(200306063);
|
internalerror(200306063);
|
||||||
case s.owner.symtabletype of
|
case s.owner.symtabletype of
|
||||||
globalsymtable :
|
globalsymtable :
|
||||||
begin
|
begin
|
||||||
if s.owner.unitid=0 then
|
if s.owner.iscurrentunit then
|
||||||
begin
|
begin
|
||||||
data[len]:=ord(deref_aktglobal);
|
data[len]:=ord(deref_aktglobal);
|
||||||
inc(len);
|
inc(len);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
{ check if the unit is available in the uses
|
{ register that the unit is needed for resolving }
|
||||||
clause, else it's an error }
|
idx:=current_module.derefidx_unit(s.owner.moduleid);
|
||||||
if s.owner.unitid=$ffff then
|
|
||||||
internalerror(200306063);
|
|
||||||
data[len]:=ord(deref_unit);
|
data[len]:=ord(deref_unit);
|
||||||
data[len+1]:=s.owner.unitid shr 8;
|
data[len+1]:=idx shr 8;
|
||||||
data[len+2]:=s.owner.unitid and $ff;
|
data[len+2]:=idx and $ff;
|
||||||
inc(len,3);
|
inc(len,3);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
staticsymtable :
|
staticsymtable :
|
||||||
begin
|
begin
|
||||||
{ only references to the current static symtable are allowed }
|
{ only references to the current static symtable are allowed }
|
||||||
if s.owner<>current_module.localsymtable then
|
if not s.owner.iscurrentunit then
|
||||||
internalerror(200306233);
|
internalerror(200306233);
|
||||||
data[len]:=ord(deref_aktstatic);
|
data[len]:=ord(deref_aktstatic);
|
||||||
inc(len);
|
inc(len);
|
||||||
@ -893,12 +895,11 @@ implementation
|
|||||||
while (currdef<>ownerdef) do
|
while (currdef<>ownerdef) do
|
||||||
begin
|
begin
|
||||||
nextdef:=currdef.getparentdef;
|
nextdef:=currdef.getparentdef;
|
||||||
{ objects are only allowed in globalsymtable,staticsymtable this check is
|
{ objects are only allowed in globalsymtable,staticsymtable }
|
||||||
needed because we need the unitid }
|
|
||||||
if not(nextdef.owner.symtabletype in [globalsymtable,staticsymtable]) then
|
if not(nextdef.owner.symtabletype in [globalsymtable,staticsymtable]) then
|
||||||
internalerror(200306187);
|
internalerror(200306187);
|
||||||
{ Next parent is in a different unit, then stop }
|
{ Next parent is in a different unit, then stop }
|
||||||
if nextdef.owner.unitid<>0 then
|
if not(nextdef.owner.iscurrentunit) then
|
||||||
break;
|
break;
|
||||||
currdef:=nextdef;
|
currdef:=nextdef;
|
||||||
end;
|
end;
|
||||||
@ -940,14 +941,14 @@ implementation
|
|||||||
begin
|
begin
|
||||||
{ Static symtable of current unit ? }
|
{ Static symtable of current unit ? }
|
||||||
if (s.owner.symtabletype=staticsymtable) and
|
if (s.owner.symtabletype=staticsymtable) and
|
||||||
(s.owner.unitid=0) then
|
s.owner.iscurrentunit then
|
||||||
begin
|
begin
|
||||||
data[len]:=ord(deref_aktstatic);
|
data[len]:=ord(deref_aktstatic);
|
||||||
inc(len);
|
inc(len);
|
||||||
end
|
end
|
||||||
{ Global symtable of current unit ? }
|
{ Global symtable of current unit ? }
|
||||||
else if (s.owner.symtabletype=globalsymtable) and
|
else if (s.owner.symtabletype=globalsymtable) and
|
||||||
(s.owner.unitid=0) then
|
s.owner.iscurrentunit then
|
||||||
begin
|
begin
|
||||||
data[len]:=ord(deref_aktglobal);
|
data[len]:=ord(deref_aktglobal);
|
||||||
inc(len);
|
inc(len);
|
||||||
@ -1075,11 +1076,7 @@ implementation
|
|||||||
begin
|
begin
|
||||||
idx:=(data[i] shl 8) or data[i+1];
|
idx:=(data[i] shl 8) or data[i+1];
|
||||||
inc(i,2);
|
inc(i,2);
|
||||||
if idx>current_module.mapsize then
|
pm:=current_module.resolve_unit(idx);
|
||||||
internalerror(200306231);
|
|
||||||
pm:=current_module.map[idx].u;
|
|
||||||
if not assigned(pm) then
|
|
||||||
internalerror(200212273);
|
|
||||||
st:=pm.globalsymtable;
|
st:=pm.globalsymtable;
|
||||||
end;
|
end;
|
||||||
deref_local :
|
deref_local :
|
||||||
@ -1457,7 +1454,11 @@ finalization
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.49 2004-12-15 21:09:06 peter
|
Revision 1.50 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.49 2004/12/15 21:09:06 peter
|
||||||
* 64bit typecast
|
* 64bit typecast
|
||||||
|
|
||||||
Revision 1.48 2004/11/15 23:35:31 peter
|
Revision 1.48 2004/11/15 23:35:31 peter
|
||||||
|
@ -28,9 +28,9 @@ uses
|
|||||||
ppu;
|
ppu;
|
||||||
|
|
||||||
const
|
const
|
||||||
Version = 'Version 1.10';
|
Version = 'Version 1.9.8';
|
||||||
Title = 'PPU-Analyser';
|
Title = 'PPU-Analyser';
|
||||||
Copyright = 'Copyright (c) 1998-2003 by the Free Pascal Development Team';
|
Copyright = 'Copyright (c) 1998-2005 by the Free Pascal Development Team';
|
||||||
|
|
||||||
{ verbosity }
|
{ verbosity }
|
||||||
v_none = $0;
|
v_none = $0;
|
||||||
@ -76,7 +76,6 @@ type
|
|||||||
var
|
var
|
||||||
ppufile : tppufile;
|
ppufile : tppufile;
|
||||||
space : string;
|
space : string;
|
||||||
unitnumber,
|
|
||||||
unitindex : longint;
|
unitindex : longint;
|
||||||
verbose : longint;
|
verbose : longint;
|
||||||
derefdata : pbyte;
|
derefdata : pbyte;
|
||||||
@ -391,8 +390,7 @@ var
|
|||||||
begin
|
begin
|
||||||
while not ppufile.EndOfEntry do
|
while not ppufile.EndOfEntry do
|
||||||
begin
|
begin
|
||||||
inc(unitnumber);
|
write('Uses unit: ',ppufile.getstring);
|
||||||
write('Uses unit: ',ppufile.getstring,' (Number: ',unitnumber,')');
|
|
||||||
ucrc:=cardinal(ppufile.getlongint);
|
ucrc:=cardinal(ppufile.getlongint);
|
||||||
uintfcrc:=cardinal(ppufile.getlongint);
|
uintfcrc:=cardinal(ppufile.getlongint);
|
||||||
writeln(' (Crc: ',hexstr(ucrc,8),', IntfcCrc: ',hexstr(uintfcrc,8),')');
|
writeln(' (Crc: ',hexstr(ucrc,8),', IntfcCrc: ',hexstr(uintfcrc,8),')');
|
||||||
@ -400,6 +398,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Procedure ReadDerefmap;
|
||||||
|
var
|
||||||
|
i,mapsize : longint;
|
||||||
|
begin
|
||||||
|
mapsize:=ppufile.getword;
|
||||||
|
writeln('DerefMapsize: ',mapsize);
|
||||||
|
for i:=0 to mapsize-1 do
|
||||||
|
writeln('DerefMap[',i,'] = ',ppufile.getstring);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
Procedure ReadDerefdata;
|
Procedure ReadDerefdata;
|
||||||
begin
|
begin
|
||||||
derefdatalen:=ppufile.entrysize;
|
derefdatalen:=ppufile.entrysize;
|
||||||
@ -1764,6 +1773,9 @@ begin
|
|||||||
ibderefdata :
|
ibderefdata :
|
||||||
ReadDerefData;
|
ReadDerefData;
|
||||||
|
|
||||||
|
ibderefmap :
|
||||||
|
ReadDerefMap;
|
||||||
|
|
||||||
iberror :
|
iberror :
|
||||||
begin
|
begin
|
||||||
Writeln('Error in PPU');
|
Writeln('Error in PPU');
|
||||||
@ -2132,7 +2144,11 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.64 2005-01-09 20:24:43 olle
|
Revision 1.65 2005-01-19 22:19:41 peter
|
||||||
|
* unit mapping rewrite
|
||||||
|
* new derefmap added
|
||||||
|
|
||||||
|
Revision 1.64 2005/01/09 20:24:43 olle
|
||||||
* rework of macro subsystem
|
* rework of macro subsystem
|
||||||
+ exportable macros for mode macpas
|
+ exportable macros for mode macpas
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user