< prev index next >
src/hotspot/share/interpreter/interpreterRuntime.cpp
Print this page
*** 334,346 ****
InstanceKlass::cast(target_klass),
CHECK);
thread->set_vm_result(value);
IRT_END
! IRT_ENTRY(void, InterpreterRuntime::qgetfield(JavaThread* thread, oopDesc* obj, int index))
Handle value_h(THREAD, obj);
! InstanceKlass* klass = InstanceKlass::cast(obj->klass());
Klass* field_k = klass->get_value_field_klass(index);
ValueKlass* field_vklass = ValueKlass::cast(field_k);
field_vklass->initialize(THREAD);
--- 334,346 ----
InstanceKlass::cast(target_klass),
CHECK);
thread->set_vm_result(value);
IRT_END
! IRT_ENTRY(void, InterpreterRuntime::qgetfield(JavaThread* thread, oopDesc* obj, int index, Klass* field_holder))
Handle value_h(THREAD, obj);
! InstanceKlass* klass = InstanceKlass::cast(field_holder);
Klass* field_k = klass->get_value_field_klass(index);
ValueKlass* field_vklass = ValueKlass::cast(field_k);
field_vklass->initialize(THREAD);
*** 377,395 ****
instanceHandle res_h(THREAD, res);
mirror_h()->obj_field_put(offset, res_h());
thread->set_vm_result(res_h());
IRT_END
! IRT_ENTRY(void, InterpreterRuntime::qputfield(JavaThread* thread, oopDesc* obj, oopDesc* value, int flags))
Handle value_h(THREAD, value);
Handle obj_h(THREAD, obj);
assert(!obj_h()->klass()->is_value(), "obj must be an object");
assert(value_h()->klass()->is_value(), "value must be an value type");
- int index = flags & ConstantPoolCacheEntry::field_index_mask;
- bool flatten = (flags & (1 << ConstantPoolCacheEntry::is_flatten_field)) != 0;
! InstanceKlass* klass = InstanceKlass::cast(obj->klass());
Klass* field_k = klass->get_value_field_klass(index);
ValueKlass* field_vklass = ValueKlass::cast(value->klass());
assert(field_k == field_vklass, "Field descriptor and argument must match");
if (flatten) {
// copy value
--- 377,399 ----
instanceHandle res_h(THREAD, res);
mirror_h()->obj_field_put(offset, res_h());
thread->set_vm_result(res_h());
IRT_END
! IRT_ENTRY(void, InterpreterRuntime::qputfield(JavaThread* thread, oopDesc* obj, oopDesc* value, ConstantPoolCache* cp_cache))
Handle value_h(THREAD, value);
Handle obj_h(THREAD, obj);
assert(!obj_h()->klass()->is_value(), "obj must be an object");
assert(value_h()->klass()->is_value(), "value must be an value type");
! int idx = ConstantPool::decode_cpcache_index(get_index_u2_cpcache(thread, Bytecodes::_putfield));
! ConstantPoolCacheEntry* cp_entry = cp_cache->entry_at(idx);
!
! int index = cp_entry->field_index();
! bool flatten = cp_entry->is_flatten();
!
! 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(field_k == field_vklass, "Field descriptor and argument must match");
if (flatten) {
// copy value
< prev index next >