From 2a2c6e55e790704eb0e4013276aee8a91cec46c5 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 17 Feb 2005 19:17:08 +0000 Subject: Class.h (_Jv_GetMethodString): Updated declaration. * 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. From-SVN: r95181 --- libjava/link.cc | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) (limited to 'libjava/link.cc') diff --git a/libjava/link.cc b/libjava/link.cc index 3f45ac119a2..8dd809b8687 100644 --- a/libjava/link.cc +++ b/libjava/link.cc @@ -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 (); } -- cgit v1.2.1