diff --git a/compiler/ncgrtti.pas b/compiler/ncgrtti.pas index 560c424e1e..b5d2d0b6f7 100644 --- a/compiler/ncgrtti.pas +++ b/compiler/ncgrtti.pas @@ -723,6 +723,14 @@ implementation current_asmdata.asmlists[al_rtti].concat(Tai_const.Create_8bit(paraspec)); end; + procedure write_def_reference(def:tdef); + begin + if is_void(def) or is_objc_class_or_protocol(def) then + current_asmdata.asmlists[al_rtti].concat(Tai_const.Create_sym(nil)) + else + current_asmdata.asmlists[al_rtti].concat(Tai_const.Create_sym(ref_rtti(def,fullrtti))); + end; + procedure write_para(parasym:tparavarsym); begin { only store user visible parameters } @@ -745,7 +753,7 @@ implementation { write flags for current parameter } write_param_flag(parasym); { write param type } - current_asmdata.asmlists[al_rtti].concat(Tai_const.Create_sym(ref_rtti(parasym.vardef,fullrtti))); + write_def_reference(parasym.vardef); { write name of current parameter } write_string(parasym.realname); end; @@ -826,10 +834,7 @@ implementation current_asmdata.asmlists[al_rtti].concat(Tai_const.Create_8bit(ProcCallOptionToCallConv[def.proccalloption])); maybe_write_align; { write result typeinfo } - if is_void(def.returndef) then - current_asmdata.asmlists[al_rtti].concat(Tai_const.Create_sym(nil)) - else - current_asmdata.asmlists[al_rtti].concat(Tai_const.Create_sym(ref_rtti(def.returndef,fullrtti))); + write_def_reference(def.returndef); { write parameter count } current_asmdata.asmlists[al_rtti].concat(Tai_const.Create_8bit(def.maxparacount)); maybe_write_align;