src/share/vm/runtime/fieldDescriptor.cpp

changeset 3137
e6b1331a51d2
parent 2314
f95d63e2154a
child 3803
71afdabfd05b
     1.1 --- a/src/share/vm/runtime/fieldDescriptor.cpp	Sat Sep 10 00:11:04 2011 -0700
     1.2 +++ b/src/share/vm/runtime/fieldDescriptor.cpp	Sat Sep 10 17:29:02 2011 -0700
     1.3 @@ -42,59 +42,51 @@
     1.4    objArrayOop md = ik->fields_annotations();
     1.5    if (md == NULL)
     1.6      return NULL;
     1.7 -  assert((index() % instanceKlass::next_offset) == 0, "");
     1.8 -  return typeArrayOop(md->obj_at(index() / instanceKlass::next_offset));
     1.9 +  return typeArrayOop(md->obj_at(index()));
    1.10  }
    1.11  
    1.12  constantTag fieldDescriptor::initial_value_tag() const {
    1.13 -  return constants()->tag_at(_initial_value_index);
    1.14 +  return constants()->tag_at(initial_value_index());
    1.15  }
    1.16  
    1.17  jint fieldDescriptor::int_initial_value() const {
    1.18 -  return constants()->int_at(_initial_value_index);
    1.19 +  return constants()->int_at(initial_value_index());
    1.20  }
    1.21  
    1.22  jlong fieldDescriptor::long_initial_value() const {
    1.23 -  return constants()->long_at(_initial_value_index);
    1.24 +  return constants()->long_at(initial_value_index());
    1.25  }
    1.26  
    1.27  jfloat fieldDescriptor::float_initial_value() const {
    1.28 -  return constants()->float_at(_initial_value_index);
    1.29 +  return constants()->float_at(initial_value_index());
    1.30  }
    1.31  
    1.32  jdouble fieldDescriptor::double_initial_value() const {
    1.33 -  return constants()->double_at(_initial_value_index);
    1.34 +  return constants()->double_at(initial_value_index());
    1.35  }
    1.36  
    1.37  oop fieldDescriptor::string_initial_value(TRAPS) const {
    1.38 -  return constants()->string_at(_initial_value_index, CHECK_0);
    1.39 +  return constants()->string_at(initial_value_index(), CHECK_0);
    1.40  }
    1.41  
    1.42  void fieldDescriptor::initialize(klassOop k, int index) {
    1.43    instanceKlass* ik = instanceKlass::cast(k);
    1.44    _cp = ik->constants();
    1.45 -  typeArrayOop fields = ik->fields();
    1.46 +  FieldInfo* f = ik->field(index);
    1.47 +  assert(!f->is_internal(), "regular Java fields only");
    1.48  
    1.49 -  assert(fields->length() % instanceKlass::next_offset == 0, "Illegal size of field array");
    1.50 -  assert(fields->length() >= index + instanceKlass::next_offset, "Illegal size of field array");
    1.51 -
    1.52 -  _access_flags.set_field_flags(fields->ushort_at(index + instanceKlass::access_flags_offset));
    1.53 -  _name_index = fields->ushort_at(index + instanceKlass::name_index_offset);
    1.54 -  _signature_index = fields->ushort_at(index + instanceKlass::signature_index_offset);
    1.55 -  _initial_value_index = fields->ushort_at(index + instanceKlass::initval_index_offset);
    1.56 -  guarantee(_name_index != 0 && _signature_index != 0, "bad constant pool index for fieldDescriptor");
    1.57 -  _offset = ik->offset_from_fields( index );
    1.58 -  _generic_signature_index = fields->ushort_at(index + instanceKlass::generic_signature_offset);
    1.59 +  _access_flags = accessFlags_from(f->access_flags());
    1.60 +  guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor");
    1.61    _index = index;
    1.62  }
    1.63  
    1.64  #ifndef PRODUCT
    1.65  
    1.66  void fieldDescriptor::print_on(outputStream* st) const {
    1.67 -  _access_flags.print_on(st);
    1.68 -  constants()->symbol_at(_name_index)->print_value_on(st);
    1.69 +  access_flags().print_on(st);
    1.70 +  name()->print_value_on(st);
    1.71    st->print(" ");
    1.72 -  constants()->symbol_at(_signature_index)->print_value_on(st);
    1.73 +  signature()->print_value_on(st);
    1.74    st->print(" @%d ", offset());
    1.75    if (WizardMode && has_initial_value()) {
    1.76      st->print("(initval ");

mercurial