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 */ |