diff options
author | Bryce McKinlay <bryce@mckinlay.net.nz> | 2003-10-30 21:09:45 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2003-10-30 21:09:45 +0000 |
commit | f56228e73f63a6dd8abb16ce8acb15e6fc7aa953 (patch) | |
tree | bc3d69daca8d26ed15f7cd604cea0a6e3914e656 | |
parent | f8a1ebc6039977d5c70037cb353d45ad284e2d0c (diff) | |
download | gcc-f56228e73f63a6dd8abb16ce8acb15e6fc7aa953.zip gcc-f56228e73f63a6dd8abb16ce8acb15e6fc7aa953.tar.gz gcc-f56228e73f63a6dd8abb16ce8acb15e6fc7aa953.tar.bz2 |
natMethod.cc (_Jv_CallAnyMethodA): Don't use vtable dispatch for final methods.
* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Don't use
vtable dispatch for final methods.
From-SVN: r73101
-rw-r--r-- | libjava/ChangeLog | 5 | ||||
-rw-r--r-- | libjava/java/lang/reflect/natMethod.cc | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index b2a0141..10b7ab60 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2003-10-30 Bryce McKinlay <bryce@mckinlay.net.nz> + + * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Don't use vtable + dispatch for final methods. + 2003-10-30 Thomas Fitzsimmons <fitzsim@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c (create): Turn on diff --git a/libjava/java/lang/reflect/natMethod.cc b/libjava/java/lang/reflect/natMethod.cc index 525a4a0..ed122ea 100644 --- a/libjava/java/lang/reflect/natMethod.cc +++ b/libjava/java/lang/reflect/natMethod.cc @@ -343,6 +343,8 @@ _Jv_CallAnyMethodA (jobject obj, jvalue *result, jboolean is_jni_call) { + using namespace java::lang::reflect; + #ifdef USE_LIBFFI JvAssert (! is_constructor || ! obj); JvAssert (! is_constructor || return_type); @@ -351,7 +353,7 @@ _Jv_CallAnyMethodA (jobject obj, // constructor does need a `this' argument, but it is one we create. jboolean needs_this = false; if (is_constructor - || ! java::lang::reflect::Modifier::isStatic(meth->accflags)) + || ! Modifier::isStatic(meth->accflags)) needs_this = true; int param_count = parameter_types->length; @@ -464,7 +466,7 @@ _Jv_CallAnyMethodA (jobject obj, void *ncode; - if (is_virtual_call) + if (is_virtual_call && ! Modifier::isFinal (meth->accflags)) { _Jv_VTable *vtable = *(_Jv_VTable **) obj; ncode = vtable->get_method (meth->index); |