mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 20:29:18 +02:00
* calc param_offset after parameters are read, because the calculation
depends on po_containself
This commit is contained in:
parent
7898dcf9ed
commit
f68c3a9552
@ -551,6 +551,19 @@ implementation
|
|||||||
{ set the options from the caller (podestructor or poconstructor) }
|
{ set the options from the caller (podestructor or poconstructor) }
|
||||||
aktprocdef.proctypeoption:=options;
|
aktprocdef.proctypeoption:=options;
|
||||||
|
|
||||||
|
{ add procsym to the procdef }
|
||||||
|
aktprocdef.procsym:=aktprocsym;
|
||||||
|
|
||||||
|
{ save file position }
|
||||||
|
aktprocdef.fileinfo:=procstartfilepos;
|
||||||
|
|
||||||
|
{ this must also be inserted in the right symtable !! PM }
|
||||||
|
{ otherwise we get subbtle problems with
|
||||||
|
definitions of args defs in staticsymtable for
|
||||||
|
implementation of a global method }
|
||||||
|
if token=_LKLAMMER then
|
||||||
|
parameter_dec(aktprocdef);
|
||||||
|
|
||||||
{ calculate the offset of the parameters }
|
{ calculate the offset of the parameters }
|
||||||
paramoffset:=target_info.first_parm_offset;
|
paramoffset:=target_info.first_parm_offset;
|
||||||
|
|
||||||
@ -569,7 +582,7 @@ implementation
|
|||||||
(aktprocdef.proctypeoption in [potype_constructor,potype_destructor]) then
|
(aktprocdef.proctypeoption in [potype_constructor,potype_destructor]) then
|
||||||
inc(paramoffset,pointer_size);
|
inc(paramoffset,pointer_size);
|
||||||
|
|
||||||
{ self pointer offset }
|
{ self pointer offset, must be done after parsing the parameters }
|
||||||
{ self isn't pushed in nested procedure of methods }
|
{ self isn't pushed in nested procedure of methods }
|
||||||
if assigned(procinfo._class) and (lexlevel=normal_function_level) then
|
if assigned(procinfo._class) and (lexlevel=normal_function_level) then
|
||||||
begin
|
begin
|
||||||
@ -587,21 +600,6 @@ implementation
|
|||||||
|
|
||||||
procinfo.para_offset:=paramoffset;
|
procinfo.para_offset:=paramoffset;
|
||||||
|
|
||||||
aktprocdef.parast.datasize:=0;
|
|
||||||
|
|
||||||
{ add procsym to the procdef }
|
|
||||||
aktprocdef.procsym:=aktprocsym;
|
|
||||||
|
|
||||||
{ save file position }
|
|
||||||
aktprocdef.fileinfo:=procstartfilepos;
|
|
||||||
|
|
||||||
{ this must also be inserted in the right symtable !! PM }
|
|
||||||
{ otherwise we get subbtle problems with
|
|
||||||
definitions of args defs in staticsymtable for
|
|
||||||
implementation of a global method }
|
|
||||||
if token=_LKLAMMER then
|
|
||||||
parameter_dec(aktprocdef);
|
|
||||||
|
|
||||||
{ so we only restore the symtable now }
|
{ so we only restore the symtable now }
|
||||||
symtablestack:=st;
|
symtablestack:=st;
|
||||||
if (options=potype_operator) then
|
if (options=potype_operator) then
|
||||||
@ -1478,7 +1476,12 @@ const
|
|||||||
if (def.deftype=procdef) then
|
if (def.deftype=procdef) then
|
||||||
begin
|
begin
|
||||||
if not tprocdef(def).has_mangledname then
|
if not tprocdef(def).has_mangledname then
|
||||||
tprocdef(def).setmangledname(target_info.Cprefix+sym.realname);
|
begin
|
||||||
|
if assigned(tprocdef(def)._class) then
|
||||||
|
tprocdef(def).setmangledname(target_info.Cprefix+tprocdef(def)._class.objrealname^+'_'+sym.realname)
|
||||||
|
else
|
||||||
|
tprocdef(def).setmangledname(target_info.Cprefix+sym.realname);
|
||||||
|
end;
|
||||||
if not assigned(tprocdef(def).parast) then
|
if not assigned(tprocdef(def).parast) then
|
||||||
internalerror(200110234);
|
internalerror(200110234);
|
||||||
{ do not copy on local !! }
|
{ do not copy on local !! }
|
||||||
@ -1985,7 +1988,11 @@ const
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.68 2002-08-25 19:25:20 peter
|
Revision 1.69 2002-09-01 12:11:33 peter
|
||||||
|
* calc param_offset after parameters are read, because the calculation
|
||||||
|
depends on po_containself
|
||||||
|
|
||||||
|
Revision 1.68 2002/08/25 19:25:20 peter
|
||||||
* sym.insert_in_data removed
|
* sym.insert_in_data removed
|
||||||
* symtable.insertvardata/insertconstdata added
|
* symtable.insertvardata/insertconstdata added
|
||||||
* removed insert_in_data call from symtable.insert, it needs to be
|
* removed insert_in_data call from symtable.insert, it needs to be
|
||||||
|
Loading…
Reference in New Issue
Block a user