947 result->set_type(args->return_type());
948
949 // Invoke the method. Result is returned as oop.
950 JavaCalls::call(result, method, &java_args, CHECK);
951
952 // Convert result
953 if (is_reference_type(result->get_type())) {
954 result->set_jobject(JNIHandles::make_local(THREAD, result->get_oop()));
955 }
956 }
957
958 DT_RETURN_MARK_DECL(AllocObject, jobject
959 , HOTSPOT_JNI_ALLOCOBJECT_RETURN(_ret_ref));
960
961 JNI_ENTRY(jobject, jni_AllocObject(JNIEnv *env, jclass clazz))
962 HOTSPOT_JNI_ALLOCOBJECT_ENTRY(env, clazz);
963
964 jobject ret = nullptr;
965 DT_RETURN_MARK(AllocObject, jobject, (const jobject&)ret);
966
967 instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
968 ret = JNIHandles::make_local(THREAD, i);
969 return ret;
970 JNI_END
971
972 DT_RETURN_MARK_DECL(NewObjectA, jobject
973 , HOTSPOT_JNI_NEWOBJECTA_RETURN(_ret_ref));
974
975 JNI_ENTRY(jobject, jni_NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args))
976 HOTSPOT_JNI_NEWOBJECTA_ENTRY(env, clazz, (uintptr_t) methodID);
977
978 jobject obj = nullptr;
979 DT_RETURN_MARK(NewObjectA, jobject, (const jobject&)obj);
980
981 instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
982 obj = JNIHandles::make_local(THREAD, i);
983 JavaValue jvalue(T_VOID);
984 JNI_ArgumentPusherArray ap(methodID, args);
985 jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
986 return obj;
987 JNI_END
988
989
990 DT_RETURN_MARK_DECL(NewObjectV, jobject
991 , HOTSPOT_JNI_NEWOBJECTV_RETURN(_ret_ref));
992
993 JNI_ENTRY(jobject, jni_NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args))
994 HOTSPOT_JNI_NEWOBJECTV_ENTRY(env, clazz, (uintptr_t) methodID);
995
996 jobject obj = nullptr;
997 DT_RETURN_MARK(NewObjectV, jobject, (const jobject&)obj);
998
999 instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
1000 obj = JNIHandles::make_local(THREAD, i);
1001 JavaValue jvalue(T_VOID);
1002 JNI_ArgumentPusherVaArg ap(methodID, args);
1003 jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
1004 return obj;
1005 JNI_END
1006
1007
1008 DT_RETURN_MARK_DECL(NewObject, jobject
1009 , HOTSPOT_JNI_NEWOBJECT_RETURN(_ret_ref));
1010
1011 JNI_ENTRY(jobject, jni_NewObject(JNIEnv *env, jclass clazz, jmethodID methodID, ...))
1012 HOTSPOT_JNI_NEWOBJECT_ENTRY(env, clazz, (uintptr_t) methodID);
1013
1014 jobject obj = nullptr;
1015 DT_RETURN_MARK(NewObject, jobject, (const jobject&)obj);
1016
1017 instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
1018 obj = JNIHandles::make_local(THREAD, i);
1019 va_list args;
1020 va_start(args, methodID);
1021 JavaValue jvalue(T_VOID);
1022 JNI_ArgumentPusherVaArg ap(methodID, args);
1023 jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
1024 va_end(args);
1025 return obj;
1026 JNI_END
1027
1028
1029 JNI_ENTRY(jclass, jni_GetObjectClass(JNIEnv *env, jobject obj))
1030 HOTSPOT_JNI_GETOBJECTCLASS_ENTRY(env, obj);
1031
1032 Klass* k = JNIHandles::resolve_non_null(obj)->klass();
1033 jclass ret =
1034 (jclass) JNIHandles::make_local(THREAD, k->java_mirror());
1035
1036 HOTSPOT_JNI_GETOBJECTCLASS_RETURN(ret);
1037 return ret;
|
947 result->set_type(args->return_type());
948
949 // Invoke the method. Result is returned as oop.
950 JavaCalls::call(result, method, &java_args, CHECK);
951
952 // Convert result
953 if (is_reference_type(result->get_type())) {
954 result->set_jobject(JNIHandles::make_local(THREAD, result->get_oop()));
955 }
956 }
957
958 DT_RETURN_MARK_DECL(AllocObject, jobject
959 , HOTSPOT_JNI_ALLOCOBJECT_RETURN(_ret_ref));
960
961 JNI_ENTRY(jobject, jni_AllocObject(JNIEnv *env, jclass clazz))
962 HOTSPOT_JNI_ALLOCOBJECT_ENTRY(env, clazz);
963
964 jobject ret = nullptr;
965 DT_RETURN_MARK(AllocObject, jobject, (const jobject&)ret);
966
967 instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), "jni", CHECK_NULL);
968 ret = JNIHandles::make_local(THREAD, i);
969 return ret;
970 JNI_END
971
972 DT_RETURN_MARK_DECL(NewObjectA, jobject
973 , HOTSPOT_JNI_NEWOBJECTA_RETURN(_ret_ref));
974
975 JNI_ENTRY(jobject, jni_NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args))
976 HOTSPOT_JNI_NEWOBJECTA_ENTRY(env, clazz, (uintptr_t) methodID);
977
978 jobject obj = nullptr;
979 DT_RETURN_MARK(NewObjectA, jobject, (const jobject&)obj);
980
981 instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), "jni", CHECK_NULL);
982 obj = JNIHandles::make_local(THREAD, i);
983 JavaValue jvalue(T_VOID);
984 JNI_ArgumentPusherArray ap(methodID, args);
985 jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
986 return obj;
987 JNI_END
988
989
990 DT_RETURN_MARK_DECL(NewObjectV, jobject
991 , HOTSPOT_JNI_NEWOBJECTV_RETURN(_ret_ref));
992
993 JNI_ENTRY(jobject, jni_NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args))
994 HOTSPOT_JNI_NEWOBJECTV_ENTRY(env, clazz, (uintptr_t) methodID);
995
996 jobject obj = nullptr;
997 DT_RETURN_MARK(NewObjectV, jobject, (const jobject&)obj);
998
999 instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), "jni", CHECK_NULL);
1000 obj = JNIHandles::make_local(THREAD, i);
1001 JavaValue jvalue(T_VOID);
1002 JNI_ArgumentPusherVaArg ap(methodID, args);
1003 jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
1004 return obj;
1005 JNI_END
1006
1007
1008 DT_RETURN_MARK_DECL(NewObject, jobject
1009 , HOTSPOT_JNI_NEWOBJECT_RETURN(_ret_ref));
1010
1011 JNI_ENTRY(jobject, jni_NewObject(JNIEnv *env, jclass clazz, jmethodID methodID, ...))
1012 HOTSPOT_JNI_NEWOBJECT_ENTRY(env, clazz, (uintptr_t) methodID);
1013
1014 jobject obj = nullptr;
1015 DT_RETURN_MARK(NewObject, jobject, (const jobject&)obj);
1016
1017 instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), "jni", CHECK_NULL);
1018 obj = JNIHandles::make_local(THREAD, i);
1019 va_list args;
1020 va_start(args, methodID);
1021 JavaValue jvalue(T_VOID);
1022 JNI_ArgumentPusherVaArg ap(methodID, args);
1023 jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
1024 va_end(args);
1025 return obj;
1026 JNI_END
1027
1028
1029 JNI_ENTRY(jclass, jni_GetObjectClass(JNIEnv *env, jobject obj))
1030 HOTSPOT_JNI_GETOBJECTCLASS_ENTRY(env, obj);
1031
1032 Klass* k = JNIHandles::resolve_non_null(obj)->klass();
1033 jclass ret =
1034 (jclass) JNIHandles::make_local(THREAD, k->java_mirror());
1035
1036 HOTSPOT_JNI_GETOBJECTCLASS_RETURN(ret);
1037 return ret;
|