OSDN Git Service

* java/lang/Class.h (_Jv_GetMethodString): Updated declaration.
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 17 Feb 2005 19:17:08 +0000 (19:17 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 17 Feb 2005 19:17:08 +0000 (19:17 +0000)
* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Updated.
* java/lang/natClass.cc (_Jv_LookupInterfaceMethod): Updated.
* link.cc (_Jv_GetMethodString): Added 'derived' argument.
Changed type of second argument.  Rewrote.
(make_vtable): Use it.
(append_partial_itable): Updated.
(layout_vtable_methods): Updated.

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

libjava/ChangeLog
libjava/java/lang/Class.h
libjava/java/lang/natClass.cc
libjava/java/lang/reflect/natMethod.cc
libjava/link.cc

index a271fd1..49a0b6e 100644 (file)
@@ -1,3 +1,14 @@
+2005-02-17  Tom Tromey  <tromey@redhat.com>
+
+       * java/lang/Class.h (_Jv_GetMethodString): Updated declaration.
+       * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Updated.
+       * java/lang/natClass.cc (_Jv_LookupInterfaceMethod): Updated.
+       * link.cc (_Jv_GetMethodString): Added 'derived' argument.
+       Changed type of second argument.  Rewrote.
+       (make_vtable): Use it.
+       (append_partial_itable): Updated.
+       (layout_vtable_methods): Updated.
+
 2005-02-17  Michael Koch  <konqueror@gmx.de>
 
        * gnu/java/net/PlainSocketImpl.java
index 34ff5df..d7b21e7 100644 (file)
@@ -228,7 +228,7 @@ void _Jv_InitNewClassFields (jclass klass);
 
 // Friend functions and classes in prims.cc
 void _Jv_InitPrimClass (jclass, char *, char, int);
-jstring _Jv_GetMethodString (jclass, _Jv_Utf8Const *);
+jstring _Jv_GetMethodString (jclass, _Jv_Method *, jclass = NULL);
 
 jboolean _Jv_CheckAccess (jclass self_klass, jclass other_klass,
                          jint flags);
@@ -454,7 +454,7 @@ private:
   // in prims.cc
   friend void ::_Jv_InitPrimClass (jclass, char *, char, int);
 
-  friend jstring (::_Jv_GetMethodString) (jclass, _Jv_Utf8Const *);
+  friend jstring (::_Jv_GetMethodString) (jclass, _Jv_Method *, jclass);
 
   friend jboolean (::_Jv_CheckAccess) (jclass self_klass, jclass other_klass,
                                   jint flags);
index 0e9c26c..f29f667 100644 (file)
@@ -1,6 +1,6 @@
 // natClass.cc - Implementation of java.lang.Class native methods.
 
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004  
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  
    Free Software Foundation
 
    This file is part of libgcj.
@@ -973,13 +973,13 @@ _Jv_LookupInterfaceMethod (jclass klass, _Jv_Utf8Const *name,
 
       if (Modifier::isStatic(meth->accflags))
        throw new java::lang::IncompatibleClassChangeError
-         (_Jv_GetMethodString (klass, meth->name));
+         (_Jv_GetMethodString (klass, meth));
       if (Modifier::isAbstract(meth->accflags))
        throw new java::lang::AbstractMethodError
-         (_Jv_GetMethodString (klass, meth->name));
+         (_Jv_GetMethodString (klass, meth));
       if (! Modifier::isPublic(meth->accflags))
        throw new java::lang::IllegalAccessError
-         (_Jv_GetMethodString (klass, meth->name));
+         (_Jv_GetMethodString (klass, meth));
 
       _Jv_AddMethodToCache (klass, meth);
 
index b4b3a7a..27c26e1 100644 (file)
@@ -1,6 +1,6 @@
 // natMethod.cc - Native code for Method class.
 
-/* Copyright (C) 1998, 1999, 2000, 2001 , 2002, 2003, 2004 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001 , 2002, 2003, 2004, 2005 Free Software Foundation
 
    This file is part of libgcj.
 
@@ -496,7 +496,7 @@ _Jv_CallAnyMethodA (jobject obj,
                  || concrete_meth->ncode == NULL
                  || Modifier::isAbstract(concrete_meth->accflags))
                throw new java::lang::IncompatibleClassChangeError
-                 (_Jv_GetMethodString (vtable->clas, meth->name));
+                 (_Jv_GetMethodString (vtable->clas, meth));
              ncode = concrete_meth->ncode;
            }
          else
index 3f45ac1..8dd809b 100644 (file)
@@ -665,12 +665,21 @@ _Jv_Linker::generate_itable (jclass klass, _Jv_ifaces *ifaces,
 
 // Format method name for use in error messages.
 jstring
-_Jv_GetMethodString (jclass klass, _Jv_Utf8Const *name)
+_Jv_GetMethodString (jclass klass, _Jv_Method *meth,
+                    jclass derived)
 {
-  jstring r = klass->name->toString();
-  r = r->concat (JvNewStringUTF ("."));
-  r = r->concat (name->toString());
-  return r;
+  using namespace java::lang;
+  StringBuffer *buf = new StringBuffer (klass->name->toString());
+  buf->append (jchar ('.'));
+  buf->append (meth->name->toString());
+  buf->append ((jchar) ' ');
+  buf->append (meth->signature->toString());
+  if (derived)
+    {
+      buf->append(JvNewStringLatin1(" in "));
+      buf->append(derived->name->toString());
+    }
+  return buf->toString();
 }
 
 void 
@@ -720,13 +729,13 @@ _Jv_Linker::append_partial_itable (jclass klass, jclass iface,
         {
          if ((meth->accflags & Modifier::STATIC) != 0)
            throw new java::lang::IncompatibleClassChangeError
-             (_Jv_GetMethodString (klass, meth->name));
+             (_Jv_GetMethodString (klass, meth));
          if ((meth->accflags & Modifier::ABSTRACT) != 0)
            throw new java::lang::AbstractMethodError
-             (_Jv_GetMethodString (klass, meth->name));
+             (_Jv_GetMethodString (klass, meth));
          if ((meth->accflags & Modifier::PUBLIC) == 0)
            throw new java::lang::IllegalAccessError
-             (_Jv_GetMethodString (klass, meth->name));
+             (_Jv_GetMethodString (klass, meth));
 
          itable[pos] = meth->ncode;
        }
@@ -1161,9 +1170,9 @@ _Jv_Linker::layout_vtable_methods (jclass klass)
                  using namespace java::lang;
                  StringBuffer *sb = new StringBuffer();
                  sb->append(JvNewStringLatin1("method "));
-                 sb->append(_Jv_GetMethodString(klass, meth->name));
+                 sb->append(_Jv_GetMethodString(klass, meth));
                  sb->append(JvNewStringLatin1(" overrides final method "));
-                 sb->append(_Jv_GetMethodString(declarer, super_meth->name));
+                 sb->append(_Jv_GetMethodString(declarer, super_meth));
                  throw new VerifyError(sb->toString());
                }
            }
@@ -1245,18 +1254,15 @@ _Jv_Linker::make_vtable (jclass klass)
        if (vtable->get_method(i) == (void *) &_Jv_abstractMethodError)
          {
            using namespace java::lang;
+           jclass orig = klass;
            while (klass != NULL)
              {
                for (int j = 0; j < klass->method_count; ++j)
                  {
                    if (klass->methods[j].index == i)
-                     {
-                       StringBuffer *buf = new StringBuffer ();
-                       buf->append (_Jv_NewStringUtf8Const (klass->methods[j].name));
-                       buf->append ((jchar) ' ');
-                       buf->append (_Jv_NewStringUtf8Const (klass->methods[j].signature));
-                       throw new AbstractMethodError (buf->toString ());
-                     }
+                     throw new AbstractMethodError(_Jv_GetMethodString(klass,
+                                                                       &klass->methods[j],
+                                                                       orig));
                  }
                klass = klass->getSuperclass ();
              }