116 int index = wide ? get_index_u2(thread, Bytecodes::_ldc_w) : get_index_u1(thread, Bytecodes::_ldc); |
116 int index = wide ? get_index_u2(thread, Bytecodes::_ldc_w) : get_index_u1(thread, Bytecodes::_ldc); |
117 constantTag tag = pool->tag_at(index); |
117 constantTag tag = pool->tag_at(index); |
118 |
118 |
119 if (tag.is_unresolved_klass() || tag.is_klass()) { |
119 if (tag.is_unresolved_klass() || tag.is_klass()) { |
120 klassOop klass = pool->klass_at(index, CHECK); |
120 klassOop klass = pool->klass_at(index, CHECK); |
121 oop java_class = klass->klass_part()->java_mirror(); |
121 oop java_class = klass->java_mirror(); |
122 thread->set_vm_result(java_class); |
122 thread->set_vm_result(java_class); |
123 } else { |
123 } else { |
124 #ifdef ASSERT |
124 #ifdef ASSERT |
125 // If we entered this runtime routine, we believed the tag contained |
125 // If we entered this runtime routine, we believed the tag contained |
126 // an unresolved string, an unresolved class or a resolved class. |
126 // an unresolved string, an unresolved class or a resolved class. |
981 |
981 |
982 IRT_ENTRY(void, InterpreterRuntime::post_field_access(JavaThread *thread, oopDesc* obj, |
982 IRT_ENTRY(void, InterpreterRuntime::post_field_access(JavaThread *thread, oopDesc* obj, |
983 ConstantPoolCacheEntry *cp_entry)) |
983 ConstantPoolCacheEntry *cp_entry)) |
984 |
984 |
985 // check the access_flags for the field in the klass |
985 // check the access_flags for the field in the klass |
986 instanceKlass* ik = instanceKlass::cast((klassOop)cp_entry->f1()); |
986 |
|
987 instanceKlass* ik = instanceKlass::cast(java_lang_Class::as_klassOop(cp_entry->f1())); |
987 typeArrayOop fields = ik->fields(); |
988 typeArrayOop fields = ik->fields(); |
988 int index = cp_entry->field_index(); |
989 int index = cp_entry->field_index(); |
989 assert(index < fields->length(), "holders field index is out of range"); |
990 assert(index < fields->length(), "holders field index is out of range"); |
990 // bail out if field accesses are not watched |
991 // bail out if field accesses are not watched |
991 if ((fields->ushort_at(index) & JVM_ACC_FIELD_ACCESS_WATCHED) == 0) return; |
992 if ((fields->ushort_at(index) & JVM_ACC_FIELD_ACCESS_WATCHED) == 0) return; |
1007 Handle h_obj; |
1008 Handle h_obj; |
1008 if (!is_static) { |
1009 if (!is_static) { |
1009 // non-static field accessors have an object, but we need a handle |
1010 // non-static field accessors have an object, but we need a handle |
1010 h_obj = Handle(thread, obj); |
1011 h_obj = Handle(thread, obj); |
1011 } |
1012 } |
1012 instanceKlassHandle h_cp_entry_f1(thread, (klassOop)cp_entry->f1()); |
1013 instanceKlassHandle h_cp_entry_f1(thread, java_lang_Class::as_klassOop(cp_entry->f1())); |
1013 jfieldID fid = jfieldIDWorkaround::to_jfieldID(h_cp_entry_f1, cp_entry->f2(), is_static); |
1014 jfieldID fid = jfieldIDWorkaround::to_jfieldID(h_cp_entry_f1, cp_entry->f2(), is_static); |
1014 JvmtiExport::post_field_access(thread, method(thread), bcp(thread), h_cp_entry_f1, h_obj, fid); |
1015 JvmtiExport::post_field_access(thread, method(thread), bcp(thread), h_cp_entry_f1, h_obj, fid); |
1015 IRT_END |
1016 IRT_END |
1016 |
1017 |
1017 IRT_ENTRY(void, InterpreterRuntime::post_field_modification(JavaThread *thread, |
1018 IRT_ENTRY(void, InterpreterRuntime::post_field_modification(JavaThread *thread, |
1018 oopDesc* obj, ConstantPoolCacheEntry *cp_entry, jvalue *value)) |
1019 oopDesc* obj, ConstantPoolCacheEntry *cp_entry, jvalue *value)) |
1019 |
1020 |
1020 klassOop k = (klassOop)cp_entry->f1(); |
1021 klassOop k = java_lang_Class::as_klassOop(cp_entry->f1()); |
1021 |
1022 |
1022 // check the access_flags for the field in the klass |
1023 // check the access_flags for the field in the klass |
1023 instanceKlass* ik = instanceKlass::cast(k); |
1024 instanceKlass* ik = instanceKlass::cast(k); |
1024 typeArrayOop fields = ik->fields(); |
1025 typeArrayOop fields = ik->fields(); |
1025 int index = cp_entry->field_index(); |
1026 int index = cp_entry->field_index(); |