< prev index next >
src/hotspot/share/prims/jni.cpp
Print this page
rev 55127 : 8223351: [lworld] Primary mirror and nullable mirror for inline type
Reviewed-by: tbd
@@ -56,10 +56,11 @@
#include "oops/objArrayOop.inline.hpp"
#include "oops/oop.inline.hpp"
#include "oops/symbol.hpp"
#include "oops/typeArrayKlass.hpp"
#include "oops/typeArrayOop.inline.hpp"
+#include "oops/valueKlass.hpp"
#include "prims/jniCheck.hpp"
#include "prims/jniExport.hpp"
#include "prims/jniFastGetField.hpp"
#include "prims/jvm_misc.hpp"
#include "prims/jvmtiExport.hpp"
@@ -580,11 +581,19 @@
Klass* sub_klass = java_lang_Class::as_Klass(sub_mirror);
Klass* super_klass = java_lang_Class::as_Klass(super_mirror);
assert(sub_klass != NULL && super_klass != NULL, "invalid arguments to jni_IsAssignableFrom");
jboolean ret = sub_klass->is_subtype_of(super_klass) ?
JNI_TRUE : JNI_FALSE;
-
+ if (sub_klass == super_klass && sub_klass->is_value()) {
+ // for inline class, V <: V?
+ ValueKlass* vk = ValueKlass::cast(InstanceKlass::cast(sub_klass));
+ if (sub_mirror == super_mirror || (sub_mirror == vk->value_mirror() && super_mirror == vk->nullable_mirror())) {
+ ret = JNI_TRUE;
+ } else {
+ ret = JNI_FALSE;
+ }
+ }
HOTSPOT_JNI_ISASSIGNABLEFROM_RETURN(ret);
return ret;
JNI_END
< prev index next >