aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@albatross.co.nz>2000-03-21 05:12:20 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2000-03-21 05:12:20 +0000
commita162f9d81efa26ffbf15c8289becd5919396df8b (patch)
treeba8ed5a1fb470d85753828e70c64ed0559b15b44 /libjava
parent2ca2f317e2f7153293f6458d93cb6739d7be7504 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libjava/java/lang/natClass.cc7
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;