< prev index next >

src/hotspot/share/prims/jni.cpp

Print this page
rev 50570 : 8204943: Improve message of ArrayStoreException.


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; \


< prev index next >