566 Klass* super = k->java_super();
567 // super2 is the value computed by the compiler's getSuperClass intrinsic:
568 debug_only(Klass* super2 = ( k->is_array_klass()
569 ? SystemDictionary::Object_klass()
570 : k->super() ) );
571 assert(super == super2,
572 "java_super computation depends on interface, array, other super");
573 obj = (super == NULL) ? NULL : (jclass) JNIHandles::make_local(super->java_mirror());
574 return obj;
575 JNI_END
576
577 JNI_QUICK_ENTRY(jboolean, jni_IsAssignableFrom(JNIEnv *env, jclass sub, jclass super))
578 JNIWrapper("IsSubclassOf");
579
580 HOTSPOT_JNI_ISASSIGNABLEFROM_ENTRY(env, sub, super);
581
582 oop sub_mirror = JNIHandles::resolve_non_null(sub);
583 oop super_mirror = JNIHandles::resolve_non_null(super);
584 if (java_lang_Class::is_primitive(sub_mirror) ||
585 java_lang_Class::is_primitive(super_mirror)) {
586 jboolean ret = (sub_mirror == super_mirror);
587
588 HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret);
589 return ret;
590 }
591 Klass* sub_klass = java_lang_Class::as_Klass(sub_mirror);
592 Klass* super_klass = java_lang_Class::as_Klass(super_mirror);
593 assert(sub_klass != NULL && super_klass != NULL, "invalid arguments to jni_IsAssignableFrom");
594 jboolean ret = sub_klass->is_subtype_of(super_klass) ?
595 JNI_TRUE : JNI_FALSE;
596
597 HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret);
598 return ret;
599 JNI_END
600
601
602 DT_RETURN_MARK_DECL(Throw, jint
603 , HOTSPOT_JNI_THROW_RETURN(_ret_ref));
604
605 JNI_ENTRY(jint, jni_Throw(JNIEnv *env, jthrowable obj))
606 JNIWrapper("Throw");
806 HOTSPOT_JNI_DELETEGLOBALREF_RETURN();
807 JNI_END
808
809 JNI_QUICK_ENTRY(void, jni_DeleteLocalRef(JNIEnv *env, jobject obj))
810 JNIWrapper("DeleteLocalRef");
811
812 HOTSPOT_JNI_DELETELOCALREF_ENTRY(env, obj);
813
814 JNIHandles::destroy_local(obj);
815
816 HOTSPOT_JNI_DELETELOCALREF_RETURN();
817 JNI_END
818
819 JNI_QUICK_ENTRY(jboolean, jni_IsSameObject(JNIEnv *env, jobject r1, jobject r2))
820 JNIWrapper("IsSameObject");
821
822 HOTSPOT_JNI_ISSAMEOBJECT_ENTRY(env, r1, r2);
823
824 oop a = JNIHandles::resolve(r1);
825 oop b = JNIHandles::resolve(r2);
826 jboolean ret = (a == b) ? JNI_TRUE : JNI_FALSE;
827
828 HOTSPOT_JNI_ISSAMEOBJECT_RETURN(ret);
829 return ret;
830 JNI_END
831
832
833 JNI_ENTRY(jobject, jni_NewLocalRef(JNIEnv *env, jobject ref))
834 JNIWrapper("NewLocalRef");
835
836 HOTSPOT_JNI_NEWLOCALREF_ENTRY(env, ref);
837
838 jobject ret = JNIHandles::make_local(env, JNIHandles::resolve(ref));
839
840 HOTSPOT_JNI_NEWLOCALREF_RETURN(ret);
841 return ret;
842 JNI_END
843
844 JNI_LEAF(jint, jni_EnsureLocalCapacity(JNIEnv *env, jint capacity))
845 JNIWrapper("EnsureLocalCapacity");
846
|
566 Klass* super = k->java_super();
567 // super2 is the value computed by the compiler's getSuperClass intrinsic:
568 debug_only(Klass* super2 = ( k->is_array_klass()
569 ? SystemDictionary::Object_klass()
570 : k->super() ) );
571 assert(super == super2,
572 "java_super computation depends on interface, array, other super");
573 obj = (super == NULL) ? NULL : (jclass) JNIHandles::make_local(super->java_mirror());
574 return obj;
575 JNI_END
576
577 JNI_QUICK_ENTRY(jboolean, jni_IsAssignableFrom(JNIEnv *env, jclass sub, jclass super))
578 JNIWrapper("IsSubclassOf");
579
580 HOTSPOT_JNI_ISASSIGNABLEFROM_ENTRY(env, sub, super);
581
582 oop sub_mirror = JNIHandles::resolve_non_null(sub);
583 oop super_mirror = JNIHandles::resolve_non_null(super);
584 if (java_lang_Class::is_primitive(sub_mirror) ||
585 java_lang_Class::is_primitive(super_mirror)) {
586 jboolean ret = oopDesc::equals(sub_mirror, super_mirror);
587
588 HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret);
589 return ret;
590 }
591 Klass* sub_klass = java_lang_Class::as_Klass(sub_mirror);
592 Klass* super_klass = java_lang_Class::as_Klass(super_mirror);
593 assert(sub_klass != NULL && super_klass != NULL, "invalid arguments to jni_IsAssignableFrom");
594 jboolean ret = sub_klass->is_subtype_of(super_klass) ?
595 JNI_TRUE : JNI_FALSE;
596
597 HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret);
598 return ret;
599 JNI_END
600
601
602 DT_RETURN_MARK_DECL(Throw, jint
603 , HOTSPOT_JNI_THROW_RETURN(_ret_ref));
604
605 JNI_ENTRY(jint, jni_Throw(JNIEnv *env, jthrowable obj))
606 JNIWrapper("Throw");
806 HOTSPOT_JNI_DELETEGLOBALREF_RETURN();
807 JNI_END
808
809 JNI_QUICK_ENTRY(void, jni_DeleteLocalRef(JNIEnv *env, jobject obj))
810 JNIWrapper("DeleteLocalRef");
811
812 HOTSPOT_JNI_DELETELOCALREF_ENTRY(env, obj);
813
814 JNIHandles::destroy_local(obj);
815
816 HOTSPOT_JNI_DELETELOCALREF_RETURN();
817 JNI_END
818
819 JNI_QUICK_ENTRY(jboolean, jni_IsSameObject(JNIEnv *env, jobject r1, jobject r2))
820 JNIWrapper("IsSameObject");
821
822 HOTSPOT_JNI_ISSAMEOBJECT_ENTRY(env, r1, r2);
823
824 oop a = JNIHandles::resolve(r1);
825 oop b = JNIHandles::resolve(r2);
826 jboolean ret = oopDesc::equals(a, b) ? JNI_TRUE : JNI_FALSE;
827
828 HOTSPOT_JNI_ISSAMEOBJECT_RETURN(ret);
829 return ret;
830 JNI_END
831
832
833 JNI_ENTRY(jobject, jni_NewLocalRef(JNIEnv *env, jobject ref))
834 JNIWrapper("NewLocalRef");
835
836 HOTSPOT_JNI_NEWLOCALREF_ENTRY(env, ref);
837
838 jobject ret = JNIHandles::make_local(env, JNIHandles::resolve(ref));
839
840 HOTSPOT_JNI_NEWLOCALREF_RETURN(ret);
841 return ret;
842 JNI_END
843
844 JNI_LEAF(jint, jni_EnsureLocalCapacity(JNIEnv *env, jint capacity))
845 JNIWrapper("EnsureLocalCapacity");
846
|