diff options
author | Bryce McKinlay <bryce@albatross.co.nz> | 2000-03-21 05:12:20 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2000-03-21 05:12:20 +0000 |
commit | a162f9d81efa26ffbf15c8289becd5919396df8b (patch) | |
tree | ba8ed5a1fb470d85753828e70c64ed0559b15b44 /libjava | |
parent | 2ca2f317e2f7153293f6458d93cb6739d7be7504 (diff) | |
download | gcc-a162f9d81efa26ffbf15c8289becd5919396df8b.zip gcc-a162f9d81efa26ffbf15c8289becd5919396df8b.tar.gz gcc-a162f9d81efa26ffbf15c8289becd5919396df8b.tar.bz2 |
natClass.cc (isInstance): Initialize `this'.
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.
From-SVN: r32663
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 7 | ||||
-rw-r--r-- | libjava/java/lang/natClass.cc | 7 |
2 files changed, 13 insertions, 1 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index b2268db..67cfcd6 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 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; |