瀏覽代碼

* moved $methodpointer type construction from psystem to pdecobj for JVM,
because java_jlobject needs to be available

git-svn-id: branches/jvmbackend@18553 -

Jonas Maebe 14 年之前
父節點
當前提交
aaff356c6d
共有 2 個文件被更改,包括 14 次插入10 次删除
  1. 14 1
      compiler/pdecobj.pas
  2. 0 9
      compiler/psystem.pas

+ 14 - 1
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

+ 0 - 9
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;