mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-14 21:59:47 +02:00
* allow procvars to not be registered right away
This commit is contained in:
parent
a764c035b2
commit
3aebcccdf2
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user