src/share/vm/prims/jvm.cpp

Print this page




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