< prev index next >
src/hotspot/share/interpreter/interpreterRuntime.cpp
Print this page
@@ -299,11 +299,11 @@
new_value_h()->obj_field_put(field_offset, aoop);
} else {
new_value_h()->obj_field_put_raw(field_offset, aoop);
}
} else if (field_type == T_VALUETYPE) {
- if (cp_entry->is_flatten()) {
+ if (cp_entry->is_flattened()) {
Klass* field_k = vklass->get_value_field_klass(field_index);
ValueKlass* field_vk = ValueKlass::cast(field_k);
oop vt_oop = *(oop*)f.interpreter_frame_expression_stack_at(tos_idx);
assert(vt_oop != NULL && oopDesc::is_oop(vt_oop) && vt_oop->is_value(),"argument must be a value type");
assert(field_vk == vt_oop->klass(), "Must match");
@@ -352,11 +352,11 @@
ValueKlass* field_vklass = ValueKlass::cast(field_k);
field_vklass->initialize(THREAD);
instanceOop res;
bool in_heap;
- if (klass->is_field_flatten(index)) {
+ if (klass->field_is_flattened(index)) {
// allocate instance
res = field_vklass->allocate_buffered_or_heap_instance(&in_heap, CHECK);
instanceHandle res_h(THREAD, res);
// copy value
field_vklass->value_store(((char*)(oopDesc*)value_h()) + klass->field_offset(index),
@@ -377,21 +377,23 @@
IRT_ENTRY(void, InterpreterRuntime::uninitialized_static_value_field(JavaThread* thread, oopDesc* mirror, int index))
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);
+ assert(field_k != NULL, "Must have been initialized");
+ ValueKlass* field_vklass = ValueKlass::cast(field_k);
+ instanceOop res = (instanceOop)field_vklass->default_value();
+ thread->set_vm_result(res);
+IRT_END
+IRT_ENTRY(void, InterpreterRuntime::uninitialized_instance_value_field(JavaThread* thread, oopDesc* obj, int index))
+ instanceHandle obj_h(THREAD, (instanceOop)obj);
+ InstanceKlass* klass = InstanceKlass::cast(obj_h()->klass());
+ int offset = klass->field_offset(index);
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);
- }
+ assert(field_k != NULL, "Must have been initialized");
ValueKlass* field_vklass = ValueKlass::cast(field_k);
instanceOop res = (instanceOop)field_vklass->default_value();
thread->set_vm_result(res);
IRT_END
@@ -404,11 +406,11 @@
int idx = ConstantPool::decode_cpcache_index(last_frame.get_index_u2_cpcache(Bytecodes::_putfield));
ConstantPoolCacheEntry* cp_entry = cp_cache->entry_at(idx);
int index = cp_entry->field_index();
- bool flatten = cp_entry->is_flatten();
+ bool flatten = cp_entry->is_flattened();
InstanceKlass* klass = InstanceKlass::cast(cp_entry->f1_as_klass());
Klass* field_k = klass->get_value_field_klass(index);
ValueKlass* field_vklass = ValueKlass::cast(value->klass());
assert(value_h()->klass() == field_k, "Sanity check");
@@ -1049,11 +1051,11 @@
info.index(),
info.offset(),
state,
info.access_flags().is_final(),
info.access_flags().is_volatile(),
- info.is_flatten(),
+ info.is_flattened(),
info.is_flattenable(),
pool->pool_holder()
);
}
< prev index next >