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

View File

@ -336,7 +336,7 @@ implementation
if parseprocvar<>pv_none then if parseprocvar<>pv_none then
begin begin
{ inline procvar definitions are always nested procvars } { 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 if token=_LKLAMMER then
parse_parameter_dec(pv); parse_parameter_dec(pv);
if parseprocvar=pv_func then if parseprocvar=pv_func then

View File

@ -647,7 +647,7 @@ implementation
procsym : procsym :
begin begin
{ Create a temporary procvardef to handle parameters } { 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); include(storedprocdef.procoptions,po_methodpointer);
{ Return type must be boolean } { Return type must be boolean }
storedprocdef.returndef:=pasbool1type; storedprocdef.returndef:=pasbool1type;

View File

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

View File

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