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

src/share/vm/runtime/fieldDescriptor.cpp

Print this page




  25 #include "precompiled.hpp"
  26 #include "classfile/systemDictionary.hpp"
  27 #include "classfile/vmSymbols.hpp"
  28 #include "memory/resourceArea.hpp"
  29 #include "memory/universe.inline.hpp"
  30 #include "oops/instanceKlass.hpp"
  31 #include "runtime/fieldDescriptor.hpp"
  32 #include "runtime/handles.inline.hpp"
  33 #include "runtime/signature.hpp"
  34 
  35 
  36 oop fieldDescriptor::loader() const {
  37   return instanceKlass::cast(_cp->pool_holder())->class_loader();
  38 }
  39 
  40 typeArrayOop fieldDescriptor::annotations() const {
  41   instanceKlass* ik = instanceKlass::cast(field_holder());
  42   objArrayOop md = ik->fields_annotations();
  43   if (md == NULL)
  44     return NULL;
  45   assert((index() % instanceKlass::next_offset) == 0, "");
  46   return typeArrayOop(md->obj_at(index() / instanceKlass::next_offset));
  47 }
  48 
  49 constantTag fieldDescriptor::initial_value_tag() const {
  50   return constants()->tag_at(_initial_value_index);
  51 }
  52 
  53 jint fieldDescriptor::int_initial_value() const {
  54   return constants()->int_at(_initial_value_index);
  55 }
  56 
  57 jlong fieldDescriptor::long_initial_value() const {
  58   return constants()->long_at(_initial_value_index);
  59 }
  60 
  61 jfloat fieldDescriptor::float_initial_value() const {
  62   return constants()->float_at(_initial_value_index);
  63 }
  64 
  65 jdouble fieldDescriptor::double_initial_value() const {
  66   return constants()->double_at(_initial_value_index);
  67 }
  68 
  69 oop fieldDescriptor::string_initial_value(TRAPS) const {
  70   return constants()->string_at(_initial_value_index, CHECK_0);
  71 }
  72 
  73 void fieldDescriptor::initialize(klassOop k, int index) {
  74   instanceKlass* ik = instanceKlass::cast(k);
  75   _cp = ik->constants();
  76   typeArrayOop fields = ik->fields();

  77 
  78   assert(fields->length() % instanceKlass::next_offset == 0, "Illegal size of field array");
  79   assert(fields->length() >= index + instanceKlass::next_offset, "Illegal size of field array");
  80 
  81   _access_flags.set_field_flags(fields->ushort_at(index + instanceKlass::access_flags_offset));
  82   _name_index = fields->ushort_at(index + instanceKlass::name_index_offset);
  83   _signature_index = fields->ushort_at(index + instanceKlass::signature_index_offset);
  84   _initial_value_index = fields->ushort_at(index + instanceKlass::initval_index_offset);
  85   guarantee(_name_index != 0 && _signature_index != 0, "bad constant pool index for fieldDescriptor");
  86   _offset = ik->offset_from_fields( index );
  87   _generic_signature_index = fields->ushort_at(index + instanceKlass::generic_signature_offset);
  88   _index = index;
  89 }
  90 
  91 #ifndef PRODUCT
  92 
  93 void fieldDescriptor::print_on(outputStream* st) const {
  94   _access_flags.print_on(st);
  95   constants()->symbol_at(_name_index)->print_value_on(st);
  96   st->print(" ");
  97   constants()->symbol_at(_signature_index)->print_value_on(st);
  98   st->print(" @%d ", offset());
  99   if (WizardMode && has_initial_value()) {
 100     st->print("(initval ");
 101     constantTag t = initial_value_tag();
 102     if (t.is_int()) {
 103       st->print("int %d)", int_initial_value());
 104     } else if (t.is_long()){
 105       st->print_jlong(long_initial_value());
 106     } else if (t.is_float()){
 107       st->print("float %f)", float_initial_value());
 108     } else if (t.is_double()){
 109       st->print("double %lf)", double_initial_value());
 110     }
 111   }
 112 }
 113 
 114 void fieldDescriptor::print_on_for(outputStream* st, oop obj) {
 115   print_on(st);
 116   BasicType ft = field_type();
 117   jint as_int = 0;




  25 #include "precompiled.hpp"
  26 #include "classfile/systemDictionary.hpp"
  27 #include "classfile/vmSymbols.hpp"
  28 #include "memory/resourceArea.hpp"
  29 #include "memory/universe.inline.hpp"
  30 #include "oops/instanceKlass.hpp"
  31 #include "runtime/fieldDescriptor.hpp"
  32 #include "runtime/handles.inline.hpp"
  33 #include "runtime/signature.hpp"
  34 
  35 
  36 oop fieldDescriptor::loader() const {
  37   return instanceKlass::cast(_cp->pool_holder())->class_loader();
  38 }
  39 
  40 typeArrayOop fieldDescriptor::annotations() const {
  41   instanceKlass* ik = instanceKlass::cast(field_holder());
  42   objArrayOop md = ik->fields_annotations();
  43   if (md == NULL)
  44     return NULL;
  45   return typeArrayOop(md->obj_at(index()));

  46 }
  47 
  48 constantTag fieldDescriptor::initial_value_tag() const {
  49   return constants()->tag_at(initial_value_index());
  50 }
  51 
  52 jint fieldDescriptor::int_initial_value() const {
  53   return constants()->int_at(initial_value_index());
  54 }
  55 
  56 jlong fieldDescriptor::long_initial_value() const {
  57   return constants()->long_at(initial_value_index());
  58 }
  59 
  60 jfloat fieldDescriptor::float_initial_value() const {
  61   return constants()->float_at(initial_value_index());
  62 }
  63 
  64 jdouble fieldDescriptor::double_initial_value() const {
  65   return constants()->double_at(initial_value_index());
  66 }
  67 
  68 oop fieldDescriptor::string_initial_value(TRAPS) const {
  69   return constants()->string_at(initial_value_index(), CHECK_0);
  70 }
  71 
  72 void fieldDescriptor::initialize(klassOop k, int index) {
  73   instanceKlass* ik = instanceKlass::cast(k);
  74   _cp = ik->constants();
  75   FieldInfo* f = ik->field(index);
  76   assert(!f->is_internal(), "regular Java fields only");
  77 
  78   _access_flags = accessFlags_from(f->access_flags());
  79   guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor");








  80   _index = index;
  81 }
  82 
  83 #ifndef PRODUCT
  84 
  85 void fieldDescriptor::print_on(outputStream* st) const {
  86   access_flags().print_on(st);
  87   name()->print_value_on(st);
  88   st->print(" ");
  89   signature()->print_value_on(st);
  90   st->print(" @%d ", offset());
  91   if (WizardMode && has_initial_value()) {
  92     st->print("(initval ");
  93     constantTag t = initial_value_tag();
  94     if (t.is_int()) {
  95       st->print("int %d)", int_initial_value());
  96     } else if (t.is_long()){
  97       st->print_jlong(long_initial_value());
  98     } else if (t.is_float()){
  99       st->print("float %f)", float_initial_value());
 100     } else if (t.is_double()){
 101       st->print("double %lf)", double_initial_value());
 102     }
 103   }
 104 }
 105 
 106 void fieldDescriptor::print_on_for(outputStream* st, oop obj) {
 107   print_on(st);
 108   BasicType ft = field_type();
 109   jint as_int = 0;


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