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
This commit is contained in:
parent
2ca2f317e2
commit
a162f9d81e
2 changed files with 13 additions and 1 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue