3573 Handle h_loader(THREAD, loader);
3574 Handle h_prot (THREAD, protection_domain);
3575 jclass result = find_class_from_class_loader(env, name, true, h_loader, h_prot,
3576 false, thread);
3577 if (TraceClassResolution && result != NULL) {
3578 trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result)));
3579 }
3580 return result;
3581 JVM_END
3582
3583
3584 // Array ///////////////////////////////////////////////////////////////////////////////////////////
3585
3586
3587 // resolve array handle and check arguments
3588 static inline arrayOop check_array(JNIEnv *env, jobject arr, bool type_array_only, TRAPS) {
3589 if (arr == NULL) {
3590 THROW_0(vmSymbols::java_lang_NullPointerException());
3591 }
3592 oop a = JNIHandles::resolve_non_null(arr);
3593 if (!a->is_array() || (type_array_only && !a->is_typeArray())) {
3594 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Argument is not an array");
3595 }
3596 return arrayOop(a);
3597 }
3598
3599
3600 JVM_ENTRY(jint, JVM_GetArrayLength(JNIEnv *env, jobject arr))
3601 JVMWrapper("JVM_GetArrayLength");
3602 arrayOop a = check_array(env, arr, false, CHECK_0);
3603 return a->length();
3604 JVM_END
3605
3606
3607 JVM_ENTRY(jobject, JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index))
3608 JVMWrapper("JVM_Array_Get");
3609 JvmtiVMObjectAllocEventCollector oam;
3610 arrayOop a = check_array(env, arr, false, CHECK_NULL);
3611 jvalue value;
3612 BasicType type = Reflection::array_get(&value, a, index, CHECK_NULL);
3613 oop box = Reflection::box(&value, type, CHECK_NULL);
3614 return JNIHandles::make_local(env, box);
|
3573 Handle h_loader(THREAD, loader);
3574 Handle h_prot (THREAD, protection_domain);
3575 jclass result = find_class_from_class_loader(env, name, true, h_loader, h_prot,
3576 false, thread);
3577 if (TraceClassResolution && result != NULL) {
3578 trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result)));
3579 }
3580 return result;
3581 JVM_END
3582
3583
3584 // Array ///////////////////////////////////////////////////////////////////////////////////////////
3585
3586
3587 // resolve array handle and check arguments
3588 static inline arrayOop check_array(JNIEnv *env, jobject arr, bool type_array_only, TRAPS) {
3589 if (arr == NULL) {
3590 THROW_0(vmSymbols::java_lang_NullPointerException());
3591 }
3592 oop a = JNIHandles::resolve_non_null(arr);
3593 if (!a->is_array()) {
3594 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Argument is not an array");
3595 } else if (type_array_only && !a->is_typeArray()) {
3596 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Argument is not a primitive type array");
3597 }
3598 return arrayOop(a);
3599 }
3600
3601
3602 JVM_ENTRY(jint, JVM_GetArrayLength(JNIEnv *env, jobject arr))
3603 JVMWrapper("JVM_GetArrayLength");
3604 arrayOop a = check_array(env, arr, false, CHECK_0);
3605 return a->length();
3606 JVM_END
3607
3608
3609 JVM_ENTRY(jobject, JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index))
3610 JVMWrapper("JVM_Array_Get");
3611 JvmtiVMObjectAllocEventCollector oam;
3612 arrayOop a = check_array(env, arr, false, CHECK_NULL);
3613 jvalue value;
3614 BasicType type = Reflection::array_get(&value, a, index, CHECK_NULL);
3615 oop box = Reflection::box(&value, type, CHECK_NULL);
3616 return JNIHandles::make_local(env, box);
|