* allow procvars to not be registered right away

This commit is contained in:
Sven/Sarah Barth 2021-04-07 21:25:13 +02:00
parent a764c035b2
commit 3aebcccdf2
5 changed files with 11 additions and 11 deletions

View File

@ -109,7 +109,7 @@ type
{ tcpuprocvardef }
tcpuprocvardef = class(ti86procvardef)
constructor create(level:byte);override;
constructor create(level:byte;doregister:boolean);override;
function getcopyas(newtyp:tdeftyp;copytyp:tproccopytyp;const paraprefix:string):tstoreddef;override;
function address_type:tdef;override;
function ofs_address_type:tdef;override;
@ -440,9 +440,9 @@ implementation
tcpuprocvardef
****************************************************************************}
constructor tcpuprocvardef.create(level: byte);
constructor tcpuprocvardef.create(level: byte;doregister:boolean);
begin
inherited create(level);
inherited create(level,doregister);
if current_settings.x86memorymodel in x86_far_code_models then
procoptions:=procoptions+[po_far];
end;

View File

@ -336,7 +336,7 @@ implementation
if parseprocvar<>pv_none then
begin
{ inline procvar definitions are always nested procvars }
pv:=cprocvardef.create(normal_function_level+1);
pv:=cprocvardef.create(normal_function_level+1,true);
if token=_LKLAMMER then
parse_parameter_dec(pv);
if parseprocvar=pv_func then

View File

@ -647,7 +647,7 @@ implementation
procsym :
begin
{ Create a temporary procvardef to handle parameters }
storedprocdef:=cprocvardef.create(normal_function_level);
storedprocdef:=cprocvardef.create(normal_function_level,true);
include(storedprocdef.procoptions,po_methodpointer);
{ Return type must be boolean }
storedprocdef.returndef:=pasbool1type;

View File

@ -1580,7 +1580,7 @@ implementation
is_func:=(token=_FUNCTION);
consume(token);
pd:=cprocvardef.create(normal_function_level);
pd:=cprocvardef.create(normal_function_level,true);
{ usage of specialized type inside its generic template }
if assigned(genericdef) then

View File

@ -729,7 +729,7 @@ interface
end;
tprocvardef = class(tabstractprocdef)
constructor create(level:byte);virtual;
constructor create(level:byte;doregister:boolean);virtual;
{ returns a procvardef that represents the address of a proc(var)def }
class function getreusableprocaddr(def: tabstractprocdef; copytyp: tcacheableproccopytyp): tprocvardef; virtual;
{ same as above, but in case the def must never be freed after the
@ -5787,7 +5787,7 @@ implementation
end
else
begin
result:=cprocvardef.create(nestinglevel);
result:=cprocvardef.create(nestinglevel,true);
end;
tabstractprocdef(result).returndef:=returndef;
tabstractprocdef(result).returndefderef:=returndefderef;
@ -7243,9 +7243,9 @@ implementation
TPROCVARDEF
***************************************************************************}
constructor tprocvardef.create(level:byte);
constructor tprocvardef.create(level:byte;doregister:boolean);
begin
inherited create(procvardef,level,true);
inherited create(procvardef,level,doregister);
end;
@ -7307,7 +7307,7 @@ implementation
i : tcallercallee;
j : longint;
begin
result:=cprocvardef.create(parast.symtablelevel);
result:=cprocvardef.create(parast.symtablelevel,true);
tprocvardef(result).returndef:=returndef;
tprocvardef(result).returndefderef:=returndefderef;
tprocvardef(result).parast:=parast.getcopy;