summaryrefslogtreecommitdiffstats
path: root/libjava/java/lang/natClass.cc
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2004-04-21 19:26:22 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2004-04-21 19:26:22 +0000
commitc3d74f41c6dee1db5eb78637116b272dffd1f38d (patch)
tree99703a9508cd86ea402bd95d8a86b8bdbe3cbe2a /libjava/java/lang/natClass.cc
parent345da44ba84c5c6cc7dc8bd66a08958c95e0699d (diff)
downloadppe42-gcc-c3d74f41c6dee1db5eb78637116b272dffd1f38d.tar.gz
ppe42-gcc-c3d74f41c6dee1db5eb78637116b272dffd1f38d.zip
2004-04-21 Bryce McKinlay <mckinlay@redhat.com>
* java/lang/natClass.cc (_Jv_LayoutInterfaceMethods): New method. Set method->index values for interface methods to their itable index. (initializeClass): Call _Jv_LayoutInterfaceMethods. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@80978 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/lang/natClass.cc')
-rw-r--r--libjava/java/lang/natClass.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc
index 419ed7d9d29..3ceda11238f 100644
--- a/libjava/java/lang/natClass.cc
+++ b/libjava/java/lang/natClass.cc
@@ -790,6 +790,9 @@ java::lang::Class::initializeClass (void)
}
}
+ if (isInterface ())
+ _Jv_LayoutInterfaceMethods (this);
+
_Jv_PrepareConstantTimeTables (this);
if (vtable == NULL)
@@ -1787,6 +1790,20 @@ _Jv_abstractMethodError (void)
throw new java::lang::AbstractMethodError();
}
+// Set itable method indexes for members of interface IFACE.
+void
+_Jv_LayoutInterfaceMethods (jclass iface)
+{
+ if (! iface->isInterface())
+ return;
+
+ // itable indexes start at 1.
+ // FIXME: Static initalizers currently get a NULL placeholder entry in the
+ // itable so they are also assigned an index here.
+ for (int i = 0; i < iface->method_count; i++)
+ iface->methods[i].index = i + 1;
+}
+
// Prepare virtual method declarations in KLASS, and any superclasses as
// required, by determining their vtable index, setting method->index, and
// finally setting the class's vtable_method_count. Must be called with the
OpenPOWER on IntegriCloud