HANDLE_OPCODE(OP_CHECK_CAST /*vAA, class@BBBB*/)
{
ClassObject* clazz;
Object* obj;
EXPORT_PC();
vsrc1 = INST_AA(inst);
ref = FETCH(1); /* class to check against */
ILOGV("|check-cast v%d,class@0x%04x", vsrc1, ref);
obj = (Object*)GET_REGISTER(vsrc1);
if (obj != NULL) {
#if defined(WITH_EXTRA_OBJECT_VALIDATION)
if (!checkForNull(obj))
GOTO_exceptionThrown();
#endif
clazz = dvmDexGetResolvedClass(methodClassDex, ref);
if (clazz == NULL) {
clazz = dvmResolveClass(curMethod->clazz, ref, false);
if (clazz == NULL)
GOTO_exceptionThrown();
}
if (!dvmInstanceof(obj->clazz, clazz)) {
dvmThrowClassCastException(obj->clazz, clazz);
GOTO_exceptionThrown();
}
}
}
FINISH(2);
OP_END