< prev index next >

src/hotspot/share/prims/jni.cpp

Print this page

 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;
< prev index next >