* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Don't use
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Oct 2003 21:09:45 +0000 (21:09 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Oct 2003 21:09:45 +0000 (21:09 +0000)
vtable dispatch for final methods.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@73101 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/lang/reflect/natMethod.cc

index b2a0141..10b7ab6 100644 (file)
@@ -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
index 525a4a0..ed122ea 100644 (file)
@@ -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);