From eaa7d1b5d586ae9020116f7867ffefd168e452e8 Mon Sep 17 00:00:00 2001 From: bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Tue, 21 Mar 2000 05:12:20 +0000 Subject: [PATCH] 2000-03-21 Bryce McKinlay <bryce@albatross.co.nz> * java/lang/natClass.cc (isInstance): Initialize `this'. (isAssignableFrom): Initialize `this' and `klass'. (_Jv_IsAssignableFrom): If an interface has no idt, it is not implemented by any loaded class, so return false. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32663 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 7 +++++++ libjava/java/lang/natClass.cc | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index b2268dbb70f1..67cfcd6faeda 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2000-03-21 Bryce McKinlay <bryce@albatross.co.nz> + + * java/lang/natClass.cc (isInstance): Initialize `this'. + (isAssignableFrom): Initialize `this' and `klass'. + (_Jv_IsAssignableFrom): If an interface has no idt, it is not + implemented by any loaded class, so return false. + 2000-03-19 Warren Levy <warrenl@cygnus.com> * java/awt/Color.java: Specified java.io for Serializable. diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 99fddf6d8aca..3e5644eca7e9 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -613,6 +613,9 @@ java::lang::Class::getMethods (void) jboolean java::lang::Class::isAssignableFrom (jclass klass) { + // Arguments may not have been initialized, given ".class" syntax. + _Jv_InitClass (this); + _Jv_InitClass (klass); return _Jv_IsAssignableFrom (this, klass); } @@ -621,6 +624,7 @@ java::lang::Class::isInstance (jobject obj) { if (! obj || isPrimitive ()) return false; + _Jv_InitClass (this); return isAssignableFrom (obj->getClass()); } @@ -919,6 +923,8 @@ _Jv_IsAssignableFrom (jclass target, jclass source) { _Jv_IDispatchTable *cl_idt = source->idt; _Jv_IDispatchTable *if_idt = target->idt; + if (if_idt == NULL) + return false; // No class implementing TARGET has been loaded. jshort cl_iindex = cl_idt->cls.iindex; if (cl_iindex <= if_idt->iface.ioffsets[0]) { @@ -927,7 +933,6 @@ _Jv_IsAssignableFrom (jclass target, jclass source) && cl_idt->cls.itable[offset] == target) return true; } - return false; } return false; -- GitLab