< prev index next >
src/hotspot/share/runtime/reflection.cpp
Print this page
rev 55127 : 8223351: [lworld] Primary mirror and nullable mirror for inline type
Reviewed-by: tbd
*** 342,352 ****
} else {
Klass* k = java_lang_Class::as_Klass(element_mirror);
if (k->is_array_klass() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) {
THROW_0(vmSymbols::java_lang_IllegalArgumentException());
}
! if (java_lang_Class::is_box_type(element_mirror)) {
return oopFactory::new_objArray(k, length, THREAD);
} else {
return oopFactory::new_valueArray(k, length, THREAD);
}
}
--- 342,352 ----
} else {
Klass* k = java_lang_Class::as_Klass(element_mirror);
if (k->is_array_klass() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) {
THROW_0(vmSymbols::java_lang_IllegalArgumentException());
}
! if (java_lang_Class::is_nullable_type(element_mirror)) {
return oopFactory::new_objArray(k, length, THREAD);
} else {
return oopFactory::new_valueArray(k, length, THREAD);
}
}
*** 758,770 ****
}
// Returns Q-mirror if qtype_if_value is true and k is a ValueKlass;
// otherwise returns java_mirror or L-mirror for ValueKlass
static oop java_mirror(Klass* k, jboolean qtype_if_value) {
! if (qtype_if_value && k->is_value()) {
ValueKlass* vk = ValueKlass::cast(InstanceKlass::cast(k));
! return vk->value_mirror();
} else {
return k->java_mirror();
}
}
--- 758,770 ----
}
// Returns Q-mirror if qtype_if_value is true and k is a ValueKlass;
// otherwise returns java_mirror or L-mirror for ValueKlass
static oop java_mirror(Klass* k, jboolean qtype_if_value) {
! if (k->is_value()) {
ValueKlass* vk = ValueKlass::cast(InstanceKlass::cast(k));
! return qtype_if_value ? vk->value_mirror() : vk->nullable_mirror();
} else {
return k->java_mirror();
}
}
*** 950,960 ****
java_lang_reflect_Field::set_name(rh(), name());
java_lang_reflect_Field::set_type(rh(), type());
// Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here.
int modifiers = fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS;
if (fd->is_flattenable()) {
! modifiers |= JVM_ACC_FLATTENABLE;
}
if (fd->is_flattened()) {
modifiers |= JVM_ACC_FIELD_FLATTENED;
}
java_lang_reflect_Field::set_modifiers(rh(), modifiers);
--- 950,962 ----
java_lang_reflect_Field::set_name(rh(), name());
java_lang_reflect_Field::set_type(rh(), type());
// Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here.
int modifiers = fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS;
if (fd->is_flattenable()) {
! modifiers |= JVM_ACC_FIELD_FLATTENABLE;
! // JVM_ACC_FLATTENABLE should not be set in LWorld. set_is_flattenable should be re-examined.
! modifiers &= ~JVM_ACC_FLATTENABLE;
}
if (fd->is_flattened()) {
modifiers |= JVM_ACC_FIELD_FLATTENED;
}
java_lang_reflect_Field::set_modifiers(rh(), modifiers);
*** 1230,1240 ****
oop return_type_mirror = java_lang_reflect_Method::return_type(method_mirror);
BasicType rtype;
if (java_lang_Class::is_primitive(return_type_mirror)) {
rtype = basic_type_mirror_to_basic_type(return_type_mirror, CHECK_NULL);
! } else if (java_lang_Class::value_mirror(return_type_mirror) == return_type_mirror) {
rtype = T_VALUETYPE;
} else {
rtype = T_OBJECT;
}
--- 1232,1242 ----
oop return_type_mirror = java_lang_reflect_Method::return_type(method_mirror);
BasicType rtype;
if (java_lang_Class::is_primitive(return_type_mirror)) {
rtype = basic_type_mirror_to_basic_type(return_type_mirror, CHECK_NULL);
! } else if (java_lang_Class::inline_type_mirror(return_type_mirror) == return_type_mirror) {
rtype = T_VALUETYPE;
} else {
rtype = T_OBJECT;
}
< prev index next >