2613 char buf[jintAsStringSize];
2614 sprintf(buf, "%d", index);
2615 THROW_MSG_0(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), buf);
2616 }
2617 JNI_END
2618
2619 DT_VOID_RETURN_MARK_DECL(SetObjectArrayElement
2620 , HOTSPOT_JNI_SETOBJECTARRAYELEMENT_RETURN());
2621
2622 JNI_ENTRY(void, jni_SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index, jobject value))
2623 JNIWrapper("SetObjectArrayElement");
2624 HOTSPOT_JNI_SETOBJECTARRAYELEMENT_ENTRY(env, array, index, value);
2625 DT_VOID_RETURN_MARK(SetObjectArrayElement);
2626
2627 objArrayOop a = objArrayOop(JNIHandles::resolve_non_null(array));
2628 oop v = JNIHandles::resolve(value);
2629 if (a->is_within_bounds(index)) {
2630 if (v == NULL || v->is_a(ObjArrayKlass::cast(a->klass())->element_klass())) {
2631 a->obj_at_put(index, v);
2632 } else {
2633 THROW(vmSymbols::java_lang_ArrayStoreException());
2634 }
2635 } else {
2636 char buf[jintAsStringSize];
2637 sprintf(buf, "%d", index);
2638 THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), buf);
2639 }
2640 JNI_END
2641
2642
2643
2644 #define DEFINE_NEWSCALARARRAY(Return,Allocator,Result \
2645 ,EntryProbe,ReturnProbe) \
2646 \
2647 DT_RETURN_MARK_DECL(New##Result##Array, Return \
2648 , ReturnProbe); \
2649 \
2650 JNI_ENTRY(Return, \
2651 jni_New##Result##Array(JNIEnv *env, jsize len)) \
2652 JNIWrapper("New" XSTR(Result) "Array"); \
2653 EntryProbe; \
|
2613 char buf[jintAsStringSize];
2614 sprintf(buf, "%d", index);
2615 THROW_MSG_0(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), buf);
2616 }
2617 JNI_END
2618
2619 DT_VOID_RETURN_MARK_DECL(SetObjectArrayElement
2620 , HOTSPOT_JNI_SETOBJECTARRAYELEMENT_RETURN());
2621
2622 JNI_ENTRY(void, jni_SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index, jobject value))
2623 JNIWrapper("SetObjectArrayElement");
2624 HOTSPOT_JNI_SETOBJECTARRAYELEMENT_ENTRY(env, array, index, value);
2625 DT_VOID_RETURN_MARK(SetObjectArrayElement);
2626
2627 objArrayOop a = objArrayOop(JNIHandles::resolve_non_null(array));
2628 oop v = JNIHandles::resolve(value);
2629 if (a->is_within_bounds(index)) {
2630 if (v == NULL || v->is_a(ObjArrayKlass::cast(a->klass())->element_klass())) {
2631 a->obj_at_put(index, v);
2632 } else {
2633 ResourceMark rm(THREAD);
2634 stringStream ss;
2635 Klass *bottom_kl = ObjArrayKlass::cast(a->klass())->bottom_klass();
2636 ss.print("type mismatch: can not store %s to %s[%d]",
2637 v->klass()->external_name(),
2638 bottom_kl->is_typeArray_klass() ? type2name_tab[ArrayKlass::cast(bottom_kl)->element_type()] : bottom_kl->external_name(),
2639 index);
2640 for (int dims = ArrayKlass::cast(a->klass())->dimension(); dims > 1; --dims) {
2641 ss.print("[]");
2642 }
2643 THROW_MSG(vmSymbols::java_lang_ArrayStoreException(), ss.as_string());
2644 }
2645 } else {
2646 char buf[jintAsStringSize];
2647 sprintf(buf, "%d", index);
2648 THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), buf);
2649 }
2650 JNI_END
2651
2652
2653
2654 #define DEFINE_NEWSCALARARRAY(Return,Allocator,Result \
2655 ,EntryProbe,ReturnProbe) \
2656 \
2657 DT_RETURN_MARK_DECL(New##Result##Array, Return \
2658 , ReturnProbe); \
2659 \
2660 JNI_ENTRY(Return, \
2661 jni_New##Result##Array(JNIEnv *env, jsize len)) \
2662 JNIWrapper("New" XSTR(Result) "Array"); \
2663 EntryProbe; \
|