mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 06:49:16 +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 }
|
||||||
|
|
||||||
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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user