Object* _bcCheckcastArray(Env* env, Class* arrayClass, Object* o) { if (!o) return o; ENTER; jboolean b = rvmIsAssignableFrom(env, o->clazz, arrayClass); if (!rvmExceptionCheck(env) && !b) { rvmThrowClassCastException(env, arrayClass, o->clazz); } LEAVE(o); }
jboolean rvmUnboxChar(Env* env, Object* arg, jvalue* value) { if (!arg) { rvmThrowNullPointerException(env); return FALSE; } if (arg->clazz != java_lang_Character) { rvmThrowClassCastException(env, java_lang_Character, arg->clazz); return FALSE; } value->c = ((Character*) arg)->value; return TRUE; }
Object* _bcCheckcast(Env* env, ClassInfoHeader* header, Object* o) { if (!o) return o; ENTER; Class* clazz = ldcClass(env, header); if (clazz) { jboolean b = rvmIsAssignableFrom(env, o->clazz, clazz); if (!rvmExceptionCheck(env) && !b) { rvmThrowClassCastException(env, clazz, o->clazz); } } LEAVE(o); }
jboolean rvmUnboxByte(Env* env, Object* arg, jvalue* value) { if (!arg) { rvmThrowNullPointerException(env); return FALSE; } if (arg->clazz != java_lang_Byte) { rvmThrowClassCastException(env, java_lang_Byte, arg->clazz); return FALSE; } value->b = ((Byte*) arg)->value; return TRUE; }
jboolean rvmUnboxFloat(Env* env, Object* arg, jvalue* value) { if (!arg) { rvmThrowNullPointerException(env); return FALSE; } if (arg->clazz != java_lang_Float) { if (rvmUnboxLong(env, arg, value)) { value->f = value->j; return TRUE; } else { rvmExceptionClear(env); } rvmThrowClassCastException(env, java_lang_Float, arg->clazz); return FALSE; } value->f = ((Float*) arg)->value; return TRUE; }
jboolean rvmUnboxInt(Env* env, Object* arg, jvalue* value) { if (!arg) { rvmThrowNullPointerException(env); return FALSE; } if (arg->clazz != java_lang_Integer) { if (rvmUnboxShort(env, arg, value)) { value->i = value->s; return TRUE; } else { rvmExceptionClear(env); } rvmThrowClassCastException(env, java_lang_Integer, arg->clazz); return FALSE; } value->i = ((Integer*) arg)->value; return TRUE; }
void _bcThrowClassCastExceptionArray(Env* env, Class* arrayClass, Object* o) { ENTER; rvmThrowClassCastException(env, arrayClass, o->clazz); LEAVEV; }
void _bcThrowClassCastException(Env* env, ClassInfoHeader* header, Object* o) { ENTER; Class* clazz = ldcClass(env, header); rvmThrowClassCastException(env, clazz, o->clazz); LEAVEV; }