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/java/lang | |
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/java/lang')
-rw-r--r-- | libjava/java/lang/natClass.cc | 7 |
1 files changed, 6 insertions, 1 deletions
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; |