< 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 >