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