aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2005-02-17 19:17:08 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-02-17 19:17:08 +0000
commit2a2c6e55e790704eb0e4013276aee8a91cec46c5 (patch)
tree247aeb11c899ea6580277539cb710a77d1b1f610
parent51615fd6cd97605e975ead59ca7780bc1bb92805 (diff)
downloadgcc-2a2c6e55e790704eb0e4013276aee8a91cec46c5.zip
gcc-2a2c6e55e790704eb0e4013276aee8a91cec46c5.tar.gz
gcc-2a2c6e55e790704eb0e4013276aee8a91cec46c5.tar.bz2
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
-rw-r--r--libjava/ChangeLog11
-rw-r--r--libjava/java/lang/Class.h4
-rw-r--r--libjava/java/lang/natClass.cc8
-rw-r--r--libjava/java/lang/reflect/natMethod.cc4
-rw-r--r--libjava/link.cc40
5 files changed, 42 insertions, 25 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index a271fd1a..49a0b6e 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -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
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h
index 34ff5df..d7b21e7 100644
--- a/libjava/java/lang/Class.h
+++ b/libjava/java/lang/Class.h
@@ -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);
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc
index 0e9c26c..f29f667 100644
--- a/libjava/java/lang/natClass.cc
+++ b/libjava/java/lang/natClass.cc
@@ -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);
diff --git a/libjava/java/lang/reflect/natMethod.cc b/libjava/java/lang/reflect/natMethod.cc
index b4b3a7a..27c26e1 100644
--- a/libjava/java/lang/reflect/natMethod.cc
+++ b/libjava/java/lang/reflect/natMethod.cc
@@ -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
diff --git a/libjava/link.cc b/libjava/link.cc
index 3f45ac1..8dd809b 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 ();
}