* set vo_explicit_paraloc flag

This commit is contained in:
peter 2004-12-07 16:11:52 +00:00
parent a266052fd9
commit 78c2af7b3c
7 changed files with 82 additions and 79 deletions

View File

@ -990,7 +990,7 @@ type
for i:=0 to varargsparas.count-1 do
begin
hp:=tparavarsym(varargsparas[i]);
hpn:=tparavarsym.create(hp.realname,hp.paranr,hp.varspez,hp.vartype);
hpn:=tparavarsym.create(hp.realname,hp.paranr,hp.varspez,hp.vartype,[]);
n.varargsparas.add(hpn);
end;
end
@ -1410,7 +1410,7 @@ type
begin
if cpf_varargs_para in pt.callparaflags then
begin
varargspara:=tparavarsym.create('va'+tostr(i),i,vs_value,pt.resulttype);
varargspara:=tparavarsym.create('va'+tostr(i),i,vs_value,pt.resulttype,[]);
dec(i);
{ varargspara is left-right, use insert
instead of concat }
@ -2432,7 +2432,10 @@ begin
end.
{
$Log$
Revision 1.268 2004-12-05 12:28:11 peter
Revision 1.269 2004-12-07 16:11:52 peter
* set vo_explicit_paraloc flag
Revision 1.268 2004/12/05 12:28:11 peter
* procvar handling for tp procvar mode fixed
* proc to procvar moved from addrnode to typeconvnode
* inlininginfo is now allocated only for inline routines that

View File

@ -1090,8 +1090,7 @@ implementation
exit;
with tparavarsym(p) do
begin
vs:=tparavarsym.create(realname,paranr,varspez,vartype);
vs.varoptions:=varoptions;
vs:=tparavarsym.create(realname,paranr,varspez,vartype,varoptions);
vs.defaultconstsym:=defaultconstsym;
newparast.insert(vs);
end;
@ -2498,7 +2497,10 @@ begin
end.
{
$Log$
Revision 1.166 2004-12-05 12:28:11 peter
Revision 1.167 2004-12-07 16:11:52 peter
* set vo_explicit_paraloc flag
Revision 1.166 2004/12/05 12:28:11 peter
* procvar handling for tp procvar mode fixed
* proc to procvar moved from addrnode to typeconvnode
* inlininginfo is now allocated only for inline routines that

View File

@ -105,9 +105,7 @@ implementation
else
paranr:=paranr_result;
{ Generate result variable accessing function result }
vs:=tparavarsym.create('$result',paranr,vs_var,pd.rettype);
include(vs.varoptions,vo_is_funcret);
include(vs.varoptions,vo_is_hidden_para);
vs:=tparavarsym.create('$result',paranr,vs_var,pd.rettype,[vo_is_funcret,vo_is_hidden_para]);
pd.parast.insert(vs);
{ Store the this symbol as funcretsym for procedures }
if pd.deftype=procdef then
@ -132,9 +130,7 @@ implementation
{ Generate result variable accessing function result, it
can't be put in a register since it must be accessable
from the framepointer }
vs:=tparavarsym.create('$parentfp',paranr_parentfp,vs_var,voidpointertype);
include(vs.varoptions,vo_is_parentfp);
include(vs.varoptions,vo_is_hidden_para);
vs:=tparavarsym.create('$parentfp',paranr_parentfp,vs_var,voidpointertype,[vo_is_parentfp,vo_is_hidden_para]);
vs.varregable:=vr_none;
pd.parast.insert(vs);
@ -155,9 +151,7 @@ implementation
begin
{ Generate self variable }
tt:=voidpointertype;
vs:=tparavarsym.create('$self',paranr_self,vs_value,tt);
include(vs.varoptions,vo_is_self);
include(vs.varoptions,vo_is_hidden_para);
vs:=tparavarsym.create('$self',paranr_self,vs_value,tt,[vo_is_self,vo_is_hidden_para]);
pd.parast.insert(vs);
end
else
@ -175,9 +169,7 @@ implementation
{ can't use classrefdef as type because inheriting
will then always file because of a type mismatch }
tt:=voidpointertype;
vs:=tparavarsym.create('$vmt',paranr_vmt,vs_value,tt);
include(vs.varoptions,vo_is_vmt);
include(vs.varoptions,vo_is_hidden_para);
vs:=tparavarsym.create('$vmt',paranr_vmt,vs_value,tt,[vo_is_vmt,vo_is_hidden_para]);
pd.parast.insert(vs);
end;
@ -197,9 +189,7 @@ implementation
vsp:=vs_var;
tt.setdef(tprocdef(pd)._class);
end;
vs:=tparavarsym.create('$self',paranr_self,vsp,tt);
include(vs.varoptions,vo_is_self);
include(vs.varoptions,vo_is_hidden_para);
vs:=tparavarsym.create('$self',paranr_self,vsp,tt,[vo_is_self,vo_is_hidden_para]);
pd.parast.insert(vs);
akttokenpos:=storepos;
@ -230,8 +220,7 @@ implementation
when it is returning in a register }
if not paramanager.ret_in_param(pd.rettype.def,pd.proccalloption) then
begin
vs:=tlocalvarsym.create('$result',vs_value,pd.rettype);
include(vs.varoptions,vo_is_funcret);
vs:=tlocalvarsym.create('$result',vs_value,pd.rettype,[vo_is_funcret]);
pd.localst.insert(vs);
pd.funcretsym:=vs;
end;
@ -285,9 +274,7 @@ implementation
{ needs high parameter ? }
if paramanager.push_high_param(varspez,vartype.def,pd.proccalloption) then
begin
hvs:=tparavarsym.create('$high'+name,paranr+1,vs_const,sinttype);
include(hvs.varoptions,vo_is_high_para);
include(hvs.varoptions,vo_is_hidden_para);
hvs:=tparavarsym.create('$high'+name,paranr+1,vs_const,sinttype,[vo_is_high_para,vo_is_hidden_para]);
owner.insert(hvs);
end
else
@ -451,7 +438,7 @@ implementation
sc.reset;
repeat
inc(paranr);
vs:=tparavarsym.create(orgpattern,paranr*10,varspez,generrortype);
vs:=tparavarsym.create(orgpattern,paranr*10,varspez,generrortype,[]);
currparast.insert(vs);
if assigned(vs.owner) then
sc.insert(vs)
@ -586,6 +573,7 @@ implementation
if (paranr>1) and not(explicit_paraloc) then
Message(parser_e_paraloc_all_paras);
explicit_paraloc:=true;
include(vs.varoptions,vo_has_explicit_paraloc);
if not(paramanager.parseparaloc(vs,upper(locationstr))) then
message(parser_e_illegal_explicit_paraloc);
end
@ -1228,9 +1216,7 @@ begin
) then
begin
tprocdef(pd).libsym:=sym;
vs:=tparavarsym.create('$syscalllib',paranr_syscall,vs_value,tabstractvarsym(sym).vartype);
include(vs.varoptions,vo_is_syscall_lib);
include(vs.varoptions,vo_is_hidden_para);
vs:=tparavarsym.create('$syscalllib',paranr_syscall,vs_value,tabstractvarsym(sym).vartype,[vo_is_syscall_lib,vo_is_hidden_para,vo_has_explicit_paraloc]);
paramanager.parseparaloc(vs,'A6');
pd.parast.insert(vs);
end
@ -2358,7 +2344,10 @@ const
end.
{
$Log$
Revision 1.217 2004-12-05 12:28:11 peter
Revision 1.218 2004-12-07 16:11:52 peter
* set vo_explicit_paraloc flag
Revision 1.217 2004/12/05 12:28:11 peter
* procvar handling for tp procvar mode fixed
* proc to procvar moved from addrnode to typeconvnode
* inlininginfo is now allocated only for inline routines that

View File

@ -278,7 +278,7 @@ implementation
sc.reset;
repeat
inc(paranr);
hreadparavs:=tparavarsym.create(orgpattern,10*paranr,varspez,generrortype);
hreadparavs:=tparavarsym.create(orgpattern,10*paranr,varspez,generrortype,[]);
readprocdef.parast.insert(hreadparavs);
sc.insert(hreadparavs);
consume(_ID);
@ -309,7 +309,7 @@ implementation
begin
hreadparavs.vartype:=tt;
{ also update the writeprocdef }
hparavs:=tparavarsym.create(hreadparavs.realname,hreadparavs.paranr,vs_value,tt);
hparavs:=tparavarsym.create(hreadparavs.realname,hreadparavs.paranr,vs_value,tt,[]);
writeprocdef.parast.insert(hparavs);
hreadparavs:=tparavarsym(hreadparavs.listnext);
end;
@ -357,9 +357,9 @@ implementation
include(p.propoptions,ppo_indexed);
{ concat a longint to the para templates }
inc(paranr);
hparavs:=tparavarsym.create('$index',10*paranr,vs_value,p.indextype);
hparavs:=tparavarsym.create('$index',10*paranr,vs_value,p.indextype,[]);
readprocdef.parast.insert(hparavs);
hparavs:=tparavarsym.create('$index',10*paranr,vs_value,p.indextype);
hparavs:=tparavarsym.create('$index',10*paranr,vs_value,p.indextype,[]);
writeprocdef.parast.insert(hparavs);
pt.free;
end;
@ -438,7 +438,7 @@ implementation
of the of the property }
writeprocdef.rettype:=voidtype;
inc(paranr);
hparavs:=tparavarsym.create('$value',10*paranr,vs_value,p.proptype);
hparavs:=tparavarsym.create('$value',10*paranr,vs_value,p.proptype,[]);
writeprocdef.parast.insert(hparavs);
{ Insert hidden parameters }
handle_calling_convention(writeprocdef);
@ -611,7 +611,7 @@ implementation
if (symtablestack.symtabletype=objectsymtable) and
(sp_static in current_object_option) then
begin
hstaticvs:=tglobalvarsym.create('$'+lower(symtablestack.name^)+'_'+vs.name,vs_value,tt);
hstaticvs:=tglobalvarsym.create('$'+lower(symtablestack.name^)+'_'+vs.name,vs_value,tt,[]);
symtablestack.defowner.owner.insert(hstaticvs);
insertbssdata(hstaticvs);
end
@ -725,13 +725,13 @@ implementation
repeat
case symtablestack.symtabletype of
localsymtable :
vs:=tlocalvarsym.create(orgpattern,vs_value,generrortype);
vs:=tlocalvarsym.create(orgpattern,vs_value,generrortype,[]);
staticsymtable,
globalsymtable :
vs:=tglobalvarsym.create(orgpattern,vs_value,generrortype);
vs:=tglobalvarsym.create(orgpattern,vs_value,generrortype,[]);
recordsymtable,
objectsymtable :
vs:=tfieldvarsym.create(orgpattern,vs_value,generrortype);
vs:=tfieldvarsym.create(orgpattern,vs_value,generrortype,[]);
else
internalerror(200411064);
end;
@ -1206,7 +1206,7 @@ implementation
symtablestack:=symtablestack.next;
read_type(casetype,'',true);
symtablestack:=oldsymtablestack;
fieldvs:=tfieldvarsym.create(sorg,vs_value,casetype);
fieldvs:=tfieldvarsym.create(sorg,vs_value,casetype,[]);
tabstractrecordsymtable(symtablestack).insertfield(fieldvs,true);
end;
if not(is_ordinal(casetype.def))
@ -1265,7 +1265,7 @@ implementation
unionsymtable.fieldalignment:=maxalignment;
uniontype.def:=uniondef;
uniontype.sym:=nil;
UnionSym:=tfieldvarsym.create('$case',vs_value,uniontype);
UnionSym:=tfieldvarsym.create('$case',vs_value,uniontype,[]);
symtablestack:=symtablestack.next;
unionsymtable.addalignmentpadding;
{$ifdef powerpc}
@ -1306,7 +1306,10 @@ implementation
end.
{
$Log$
Revision 1.86 2004-11-29 18:50:15 peter
Revision 1.87 2004-12-07 16:11:52 peter
* set vo_explicit_paraloc flag
Revision 1.86 2004/11/29 18:50:15 peter
* os2 fixes for import
* asmsymtype support for intel reader

View File

@ -696,11 +696,11 @@ implementation
is_class(ttypesym(srsym).restype.def) then
begin
ot:=ttypesym(srsym).restype;
sym:=tlocalvarsym.create(objrealname,vs_value,ot);
sym:=tlocalvarsym.create(objrealname,vs_value,ot,[]);
end
else
begin
sym:=tlocalvarsym.create(objrealname,vs_value,generrortype);
sym:=tlocalvarsym.create(objrealname,vs_value,generrortype,[]);
if (srsym.typ=typesym) then
Message1(type_e_class_type_expected,ttypesym(srsym).restype.def.typename)
else
@ -1147,7 +1147,10 @@ implementation
end.
{
$Log$
Revision 1.147 2004-12-05 12:28:11 peter
Revision 1.148 2004-12-07 16:11:52 peter
* set vo_explicit_paraloc flag
Revision 1.147 2004/12/05 12:28:11 peter
* procvar handling for tp procvar mode fixed
* proc to procvar moved from addrnode to typeconvnode
* inlininginfo is now allocated only for inline routines that

View File

@ -216,12 +216,12 @@ implementation
hrecst:=trecordsymtable.create(aktpackrecords);
vmttype.setdef(trecorddef.create(hrecst));
pvmttype.setdef(tpointerdef.create(vmttype));
hrecst.insertfield(tfieldvarsym.create('$parent',vs_value,pvmttype),true);
hrecst.insertfield(tfieldvarsym.create('$length',vs_value,s32inttype),true);
hrecst.insertfield(tfieldvarsym.create('$mlength',vs_value,s32inttype),true);
hrecst.insertfield(tfieldvarsym.create('$parent',vs_value,pvmttype,[]),true);
hrecst.insertfield(tfieldvarsym.create('$length',vs_value,s32inttype,[]),true);
hrecst.insertfield(tfieldvarsym.create('$mlength',vs_value,s32inttype,[]),true);
vmtarraytype.setdef(tarraydef.create(0,1,s32inttype));
tarraydef(vmtarraytype.def).setelementtype(voidpointertype);
hrecst.insertfield(tfieldvarsym.create('$__pfn',vs_value,vmtarraytype),true);
hrecst.insertfield(tfieldvarsym.create('$__pfn',vs_value,vmtarraytype,[]),true);
addtype('$__vtbl_ptr_type',vmttype);
addtype('$pvmt',pvmttype);
vmtarraytype.setdef(tarraydef.create(0,1,s32inttype));
@ -229,8 +229,8 @@ implementation
addtype('$vtblarray',vmtarraytype);
{ Add a type for methodpointers }
hrecst:=trecordsymtable.create(1);
hrecst.insertfield(tfieldvarsym.create('$proc',vs_value,voidpointertype),true);
hrecst.insertfield(tfieldvarsym.create('$self',vs_value,voidpointertype),true);
hrecst.insertfield(tfieldvarsym.create('$proc',vs_value,voidpointertype,[]),true);
hrecst.insertfield(tfieldvarsym.create('$self',vs_value,voidpointertype,[]),true);
methodpointertype.setdef(trecorddef.create(hrecst));
addtype('$methodpointer',methodpointertype);
{ Add functions that require compiler magic }
@ -537,7 +537,10 @@ implementation
end.
{
$Log$
Revision 1.74 2004-12-07 13:52:54 michael
Revision 1.75 2004-12-07 16:11:52 peter
* set vo_explicit_paraloc flag
Revision 1.74 2004/12/07 13:52:54 michael
* Convert array of widechar to pwidechar instead of pchar
Revision 1.73 2004/11/08 22:09:59 peter

View File

@ -148,7 +148,7 @@ interface
varregable : tvarregable;
varstate : tvarstate;
notifications : Tlinkedlist;
constructor create(const n : string;vsp:tvarspez;const tt : ttype);
constructor create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
constructor ppuload(ppufile:tcompilerppufile);
destructor destroy;override;
procedure ppuwrite(ppufile:tcompilerppufile);override;
@ -167,11 +167,9 @@ interface
property vartype: ttype read _vartype write setvartype;
end;
tvarsymclass = class of tabstractvarsym;
tfieldvarsym = class(tabstractvarsym)
fieldoffset : aint; { offset in record/object }
constructor create(const n : string;vsp:tvarspez;const tt : ttype);
constructor create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
constructor ppuload(ppufile:tcompilerppufile);
procedure ppuwrite(ppufile:tcompilerppufile);override;
{$ifdef GDB}
@ -183,7 +181,7 @@ interface
defaultconstsym : tsym;
defaultconstsymderef : tderef;
localloc : TLocation; { register/reference for local var }
constructor create(const n : string;vsp:tvarspez;const tt : ttype);
constructor create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
constructor ppuload(ppufile:tcompilerppufile);
procedure ppuwrite(ppufile:tcompilerppufile);override;
procedure buildderef;override;
@ -191,7 +189,7 @@ interface
end;
tlocalvarsym = class(tabstractnormalvarsym)
constructor create(const n : string;vsp:tvarspez;const tt : ttype);
constructor create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
constructor ppuload(ppufile:tcompilerppufile);
procedure ppuwrite(ppufile:tcompilerppufile);override;
{$ifdef GDB}
@ -205,7 +203,7 @@ interface
{$ifdef EXTDEBUG}
eqval : tequaltype;
{$endif EXTDEBUG}
constructor create(const n : string;nr:word;vsp:tvarspez;const tt : ttype);
constructor create(const n : string;nr:word;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
constructor ppuload(ppufile:tcompilerppufile);
destructor destroy;override;
procedure ppuwrite(ppufile:tcompilerppufile);override;
@ -218,7 +216,7 @@ interface
private
_mangledname : pstring;
public
constructor create(const n : string;vsp:tvarspez;const tt : ttype);
constructor create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
constructor create_dll(const n : string;vsp:tvarspez;const tt : ttype);
constructor create_C(const n,mangled : string;vsp:tvarspez;const tt : ttype);
constructor ppuload(ppufile:tcompilerppufile);
@ -1255,13 +1253,13 @@ implementation
TABSTRACTVARSYM
****************************************************************************}
constructor tabstractvarsym.create(const n : string;vsp:tvarspez;const tt : ttype);
constructor tabstractvarsym.create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
begin
inherited create(n);
vartype:=tt;
varspez:=vsp;
varstate:=vs_declared;
varoptions:=[];
varoptions:=vopts;
end;
@ -1416,9 +1414,9 @@ implementation
TFIELDVARSYM
****************************************************************************}
constructor tfieldvarsym.create(const n : string;vsp:tvarspez;const tt : ttype);
constructor tfieldvarsym.create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
begin
inherited create(n,vsp,tt);
inherited create(n,vsp,tt,vopts);
typ:=fieldvarsym;
fieldoffset:=0;
end;
@ -1467,9 +1465,9 @@ implementation
TABSTRACTNORMALVARSYM
****************************************************************************}
constructor tabstractnormalvarsym.create(const n : string;vsp:tvarspez;const tt : ttype);
constructor tabstractnormalvarsym.create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
begin
inherited create(n,vsp,tt);
inherited create(n,vsp,tt,vopts);
fillchar(localloc,sizeof(localloc),0);
defaultconstsym:=nil;
end;
@ -1508,9 +1506,9 @@ implementation
TGLOBALVARSYM
****************************************************************************}
constructor tglobalvarsym.create(const n : string;vsp:tvarspez;const tt : ttype);
constructor tglobalvarsym.create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
begin
inherited create(n,vsp,tt);
inherited create(n,vsp,tt,vopts);
typ:=globalvarsym;
_mangledname:=nil;
end;
@ -1518,14 +1516,13 @@ implementation
constructor tglobalvarsym.create_dll(const n : string;vsp:tvarspez;const tt : ttype);
begin
tglobalvarsym(self).create(n,vsp,tt);
include(varoptions,vo_is_dll_var);
tglobalvarsym(self).create(n,vsp,tt,[vo_is_dll_var]);
end;
constructor tglobalvarsym.create_C(const n,mangled : string;vsp:tvarspez;const tt : ttype);
begin
tglobalvarsym(self).create(n,vsp,tt);
tglobalvarsym(self).create(n,vsp,tt,[]);
set_mangledname(mangled);
end;
@ -1640,9 +1637,9 @@ implementation
TLOCALVARSYM
****************************************************************************}
constructor tlocalvarsym.create(const n : string;vsp:tvarspez;const tt : ttype);
constructor tlocalvarsym.create(const n : string;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
begin
inherited create(n,vsp,tt);
inherited create(n,vsp,tt,vopts);
typ:=localvarsym;
end;
@ -1701,9 +1698,9 @@ implementation
TPARAVARSYM
****************************************************************************}
constructor tparavarsym.create(const n : string;nr:word;vsp:tvarspez;const tt : ttype);
constructor tparavarsym.create(const n : string;nr:word;vsp:tvarspez;const tt : ttype;vopts:tvaroptions);
begin
inherited create(n,vsp,tt);
inherited create(n,vsp,tt,vopts);
typ:=paravarsym;
paranr:=nr;
paraloc[calleeside].init;
@ -1838,7 +1835,7 @@ implementation
constructor tabsolutevarsym.create(const n : string;const tt : ttype);
begin
inherited create(n,vs_value,tt);
inherited create(n,vs_value,tt,[]);
typ:=absolutevarsym;
ref:=nil;
end;
@ -1846,7 +1843,7 @@ implementation
constructor tabsolutevarsym.create_ref(const n : string;const tt : ttype;_ref:tsymlist);
begin
inherited create(n,vs_value,tt);
inherited create(n,vs_value,tt,[]);
typ:=absolutevarsym;
ref:=_ref;
end;
@ -2557,7 +2554,10 @@ implementation
end.
{
$Log$
Revision 1.195 2004-11-29 20:50:37 peter
Revision 1.196 2004-12-07 16:11:52 peter
* set vo_explicit_paraloc flag
Revision 1.195 2004/11/29 20:50:37 peter
* uninited results
Revision 1.194 2004/11/17 22:21:35 peter