src/share/vm/runtime/fieldDescriptor.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8014013 Cdiff src/share/vm/runtime/fieldDescriptor.cpp

src/share/vm/runtime/fieldDescriptor.cpp

Print this page

        

*** 96,116 **** oop fieldDescriptor::string_initial_value(TRAPS) const { return constants()->uncached_string_at(initial_value_index(), CHECK_0); } void fieldDescriptor::initialize(InstanceKlass* ik, int index) { ! _cp = ik->constants(); FieldInfo* f = ik->field(index); assert(!f->is_internal(), "regular Java fields only"); _access_flags = accessFlags_from(f->access_flags()); guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor"); _index = index; } #ifndef PRODUCT void fieldDescriptor::print_on(outputStream* st) const { access_flags().print_on(st); name()->print_value_on(st); st->print(" "); signature()->print_value_on(st); --- 96,129 ---- oop fieldDescriptor::string_initial_value(TRAPS) const { return constants()->uncached_string_at(initial_value_index(), CHECK_0); } void fieldDescriptor::initialize(InstanceKlass* ik, int index) { ! if (_cp.is_null() || field_holder() != ik) { ! _cp = constantPoolHandle(Thread::current(), ik->constants()); ! assert(field_holder() == ik, "must be already initialized to this class"); ! } FieldInfo* f = ik->field(index); assert(!f->is_internal(), "regular Java fields only"); _access_flags = accessFlags_from(f->access_flags()); guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor"); _index = index; + verify(); } #ifndef PRODUCT + void fieldDescriptor::verify() const { + if (_cp.is_null()) { + assert(_index == badInt, "constructor must be called"); // see constructor + } else { + assert(_index >= 0, "good index"); + assert(_index < field_holder()->java_fields_count(), "oob"); + } + } + void fieldDescriptor::print_on(outputStream* st) const { access_flags().print_on(st); name()->print_value_on(st); st->print(" "); signature()->print_value_on(st);
src/share/vm/runtime/fieldDescriptor.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File