From f68c3a95522461a9687f3d8090a4dcc2614be102 Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 1 Sep 2002 12:11:33 +0000 Subject: [PATCH] * calc param_offset after parameters are read, because the calculation depends on po_containself --- compiler/pdecsub.pas | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/compiler/pdecsub.pas b/compiler/pdecsub.pas index 71b23f1a69..217b8c190d 100644 --- a/compiler/pdecsub.pas +++ b/compiler/pdecsub.pas @@ -551,6 +551,19 @@ implementation { set the options from the caller (podestructor or poconstructor) } 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 } paramoffset:=target_info.first_parm_offset; @@ -569,7 +582,7 @@ implementation (aktprocdef.proctypeoption in [potype_constructor,potype_destructor]) then 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 } if assigned(procinfo._class) and (lexlevel=normal_function_level) then begin @@ -587,21 +600,6 @@ implementation 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 } symtablestack:=st; if (options=potype_operator) then @@ -1478,7 +1476,12 @@ const if (def.deftype=procdef) then begin 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 internalerror(200110234); { do not copy on local !! } @@ -1985,7 +1988,11 @@ const end. { $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 * symtable.insertvardata/insertconstdata added * removed insert_in_data call from symtable.insert, it needs to be