hotspot/src/share/vm/prims/jni.cpp
changeset 13952 e3cf184080bc
parent 13728 882756847a04
child 13958 f5598a86c223
equal deleted inserted replaced
13918:b01a48301e67 13952:e3cf184080bc
  3440   jobjectArray ret = NULL;
  3440   jobjectArray ret = NULL;
  3441   DT_RETURN_MARK(NewObjectArray, jobjectArray, (const jobjectArray&)ret);
  3441   DT_RETURN_MARK(NewObjectArray, jobjectArray, (const jobjectArray&)ret);
  3442   KlassHandle ek(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(elementClass)));
  3442   KlassHandle ek(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(elementClass)));
  3443   Klass* ako = Klass::cast(ek())->array_klass(CHECK_NULL);
  3443   Klass* ako = Klass::cast(ek())->array_klass(CHECK_NULL);
  3444   KlassHandle ak = KlassHandle(THREAD, ako);
  3444   KlassHandle ak = KlassHandle(THREAD, ako);
  3445   objArrayKlass::cast(ak())->initialize(CHECK_NULL);
  3445   ObjArrayKlass::cast(ak())->initialize(CHECK_NULL);
  3446   objArrayOop result = objArrayKlass::cast(ak())->allocate(length, CHECK_NULL);
  3446   objArrayOop result = ObjArrayKlass::cast(ak())->allocate(length, CHECK_NULL);
  3447   oop initial_value = JNIHandles::resolve(initialElement);
  3447   oop initial_value = JNIHandles::resolve(initialElement);
  3448   if (initial_value != NULL) {  // array already initialized with NULL
  3448   if (initial_value != NULL) {  // array already initialized with NULL
  3449     for (int index = 0; index < length; index++) {
  3449     for (int index = 0; index < length; index++) {
  3450       result->obj_at_put(index, initial_value);
  3450       result->obj_at_put(index, initial_value);
  3451     }
  3451     }
  3500   DT_VOID_RETURN_MARK(SetObjectArrayElement);
  3500   DT_VOID_RETURN_MARK(SetObjectArrayElement);
  3501 
  3501 
  3502   objArrayOop a = objArrayOop(JNIHandles::resolve_non_null(array));
  3502   objArrayOop a = objArrayOop(JNIHandles::resolve_non_null(array));
  3503   oop v = JNIHandles::resolve(value);
  3503   oop v = JNIHandles::resolve(value);
  3504   if (a->is_within_bounds(index)) {
  3504   if (a->is_within_bounds(index)) {
  3505     if (v == NULL || v->is_a(objArrayKlass::cast(a->klass())->element_klass())) {
  3505     if (v == NULL || v->is_a(ObjArrayKlass::cast(a->klass())->element_klass())) {
  3506       a->obj_at_put(index, v);
  3506       a->obj_at_put(index, v);
  3507     } else {
  3507     } else {
  3508       THROW(vmSymbols::java_lang_ArrayStoreException());
  3508       THROW(vmSymbols::java_lang_ArrayStoreException());
  3509     }
  3509     }
  3510   } else {
  3510   } else {
  3785   typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  3785   typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  3786   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \
  3786   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \
  3787     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  3787     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  3788   } else { \
  3788   } else { \
  3789     if (len > 0) { \
  3789     if (len > 0) { \
  3790       int sc = typeArrayKlass::cast(src->klass())->log2_element_size(); \
  3790       int sc = TypeArrayKlass::cast(src->klass())->log2_element_size(); \
  3791       memcpy((u_char*) buf, \
  3791       memcpy((u_char*) buf, \
  3792              (u_char*) src->Tag##_at_addr(start), \
  3792              (u_char*) src->Tag##_at_addr(start), \
  3793              len << sc);                          \
  3793              len << sc);                          \
  3794     } \
  3794     } \
  3795   } \
  3795   } \
  3820   typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  3820   typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  3821   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \
  3821   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \
  3822     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  3822     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  3823   } else { \
  3823   } else { \
  3824     if (len > 0) { \
  3824     if (len > 0) { \
  3825       int sc = typeArrayKlass::cast(src->klass())->log2_element_size(); \
  3825       int sc = TypeArrayKlass::cast(src->klass())->log2_element_size(); \
  3826       memcpy((u_char*) buf, \
  3826       memcpy((u_char*) buf, \
  3827              (u_char*) src->Tag##_at_addr(start), \
  3827              (u_char*) src->Tag##_at_addr(start), \
  3828              len << sc);                          \
  3828              len << sc);                          \
  3829     } \
  3829     } \
  3830   } \
  3830   } \
  3869   typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  3869   typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  3870   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \
  3870   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \
  3871     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  3871     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  3872   } else { \
  3872   } else { \
  3873     if (len > 0) { \
  3873     if (len > 0) { \
  3874       int sc = typeArrayKlass::cast(dst->klass())->log2_element_size(); \
  3874       int sc = TypeArrayKlass::cast(dst->klass())->log2_element_size(); \
  3875       memcpy((u_char*) dst->Tag##_at_addr(start), \
  3875       memcpy((u_char*) dst->Tag##_at_addr(start), \
  3876              (u_char*) buf, \
  3876              (u_char*) buf, \
  3877              len << sc);    \
  3877              len << sc);    \
  3878     } \
  3878     } \
  3879   } \
  3879   } \
  3904   typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  3904   typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  3905   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \
  3905   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \
  3906     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  3906     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  3907   } else { \
  3907   } else { \
  3908     if (len > 0) { \
  3908     if (len > 0) { \
  3909       int sc = typeArrayKlass::cast(dst->klass())->log2_element_size(); \
  3909       int sc = TypeArrayKlass::cast(dst->klass())->log2_element_size(); \
  3910       memcpy((u_char*) dst->Tag##_at_addr(start), \
  3910       memcpy((u_char*) dst->Tag##_at_addr(start), \
  3911              (u_char*) buf, \
  3911              (u_char*) buf, \
  3912              len << sc);    \
  3912              len << sc);    \
  3913     } \
  3913     } \
  3914   } \
  3914   } \
  4249   assert(a->is_array(), "just checking");
  4249   assert(a->is_array(), "just checking");
  4250   BasicType type;
  4250   BasicType type;
  4251   if (a->is_objArray()) {
  4251   if (a->is_objArray()) {
  4252     type = T_OBJECT;
  4252     type = T_OBJECT;
  4253   } else {
  4253   } else {
  4254     type = typeArrayKlass::cast(a->klass())->element_type();
  4254     type = TypeArrayKlass::cast(a->klass())->element_type();
  4255   }
  4255   }
  4256   void* ret = arrayOop(a)->base(type);
  4256   void* ret = arrayOop(a)->base(type);
  4257 #ifndef USDT2
  4257 #ifndef USDT2
  4258   DTRACE_PROBE1(hotspot_jni, GetPrimitiveArrayCritical__return, ret);
  4258   DTRACE_PROBE1(hotspot_jni, GetPrimitiveArrayCritical__return, ret);
  4259 #else /* USDT2 */
  4259 #else /* USDT2 */