< prev index next >
src/hotspot/share/interpreter/interpreterRuntime.cpp
Print this page
*** 367,377 ****
instanceHandle mirror_h(THREAD, (instanceOop)mirror);
InstanceKlass* klass = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
int offset = klass->field_offset(index);
assert(mirror->obj_field(offset) == NULL,"Field must not be initialized twice");
! Klass* field_k = klass->get_value_field_klass(index);
ValueKlass* field_vklass = ValueKlass::cast(field_k);
// allocate instance, because it is going to be assigned to a static field
// it must not be a buffered value
instanceOop res = field_vklass->allocate_instance(CHECK);
instanceHandle res_h(THREAD, res);
--- 367,385 ----
instanceHandle mirror_h(THREAD, (instanceOop)mirror);
InstanceKlass* klass = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
int offset = klass->field_offset(index);
assert(mirror->obj_field(offset) == NULL,"Field must not be initialized twice");
! Klass* field_k = klass->get_value_field_klass_or_null(index);
! if (field_k == NULL) {
! field_k = SystemDictionary::resolve_or_fail(klass->field_signature(index),
! Handle(THREAD, klass->class_loader()),
! Handle(THREAD, klass->protection_domain()), true, CHECK);
! assert(field_k != NULL, "Sanity check");
! assert(field_k->access_flags().is_value_type(), "Value type expected");
! klass->set_value_field_klass(index, field_k);
! }
ValueKlass* field_vklass = ValueKlass::cast(field_k);
// allocate instance, because it is going to be assigned to a static field
// it must not be a buffered value
instanceOop res = field_vklass->allocate_instance(CHECK);
instanceHandle res_h(THREAD, res);
< prev index next >