* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Always assign a
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Oct 2003 22:45:57 +0000 (22:45 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Oct 2003 22:45:57 +0000 (22:45 +0000)
vtable slot for final methods. Add FIXME comment.

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

libjava/ChangeLog
libjava/java/lang/natClass.cc

index f7d1972..ee48557 100644 (file)
@@ -1,3 +1,8 @@
+2003-10-28  Bryce McKinlay  <bryce@mckinlay.net.nz>
+
+       * java/lang/natClass.cc (_Jv_LayoutVTableMethods): Always assign a
+       vtable slot for final methods. Add FIXME comment.
+
 2003-10-28  David S. Miller  <davem@redhat.com>
 
        * sysdep/sparc/locks.h (__cas_start_atomic): %g0 --> %%g0.
index ffac2c1..155d1b9 100644 (file)
@@ -1835,6 +1835,12 @@ _Jv_LayoutVTableMethods (jclass klass)
       if (! _Jv_isVirtualMethod (meth))
        continue;
 
+      // FIXME: Must check that we don't override:
+      // - Package-private method where superclass is in different package.
+      // - Final or less-accessible declaration in superclass (check binary 
+      //   spec, do we allocate new vtable entry or put throw node in vtable?)
+      // - Static or private method in superclass.
+
       if (superclass != NULL)
        {
          super_meth = _Jv_LookupDeclaredMethod (superclass, meth->name, 
@@ -1843,8 +1849,7 @@ _Jv_LayoutVTableMethods (jclass klass)
 
       if (super_meth)
         meth->index = super_meth->index;
-      else if (! (meth->accflags & java::lang::reflect::Modifier::FINAL)
-              && ! (klass->accflags & java::lang::reflect::Modifier::FINAL))
+      else
        meth->index = index++;
     }