diff --git a/compiler/pdecobj.pas b/compiler/pdecobj.pas index 4302c62e15..2caec216fc 100644 --- a/compiler/pdecobj.pas +++ b/compiler/pdecobj.pas @@ -1217,6 +1217,8 @@ implementation old_current_structdef: tabstractrecorddef; old_current_genericdef, old_current_specializedef: tstoreddef; + hrecst: trecordsymtable; + fsym: tfieldvarsym; old_parse_generic: boolean; list: TFPObjectList; s: String; @@ -1279,7 +1281,18 @@ implementation if (current_structdef.objname^='TOBJECT') then class_tobject:=current_objectdef; if (current_objectdef.objname^='JLOBJECT') then - java_jlobject:=current_objectdef; + begin + java_jlobject:=current_objectdef; + { the methodpointer type is normally created in + psystem, but java_jlobject is not yet available + there... } + hrecst:=trecordsymtable.create('',1); + fsym:=tfieldvarsym.create('$proc',vs_value,java_jlobject,[]); + hrecst.insert(fsym); + hrecst.addfield(fsym,vis_hidden); + methodpointertype:=trecorddef.create('',hrecst); + systemunit.insert(ttypesym.create('$methodpointer',methodpointertype)); + end; if (current_objectdef.objname^='JLTHROWABLE') then java_jlthrowable:=current_objectdef; if (current_objectdef.objname^='FPCBASERECORDTYPE') then diff --git a/compiler/psystem.pas b/compiler/psystem.pas index 3ffb95fa2c..3e2ed606f7 100644 --- a/compiler/psystem.pas +++ b/compiler/psystem.pas @@ -401,15 +401,6 @@ implementation addfield(hrecst,tfieldvarsym.create('$self',vs_value,voidpointertype,[])); methodpointertype:=trecorddef.create('',hrecst); addtype('$methodpointer',methodpointertype); - end - else - begin -{$if defined(jvm) and not defined(nounsupported)} - hrecst:=trecordsymtable.create('',1); - addfield(hrecst,tfieldvarsym.create('$proc',vs_value,voidpointertype,[])); - methodpointertype:=trecorddef.create('',hrecst); - addtype('$methodpointer',methodpointertype); -{$endif} end; symtablestack.pop(systemunit); end;