From a162f9d81efa26ffbf15c8289becd5919396df8b Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Tue, 21 Mar 2000 05:12:20 +0000 Subject: natClass.cc (isInstance): Initialize `this'. 2000-03-21 Bryce McKinlay * 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. From-SVN: r32663 --- libjava/java/lang/natClass.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'libjava/java') diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 99fddf6d..3e5644e 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; -- cgit v1.1