< prev index next >

src/share/vm/runtime/fieldDescriptor.cpp

Print this page




  81 jint fieldDescriptor::int_initial_value() const {
  82   return constants()->int_at(initial_value_index());
  83 }
  84 
  85 jlong fieldDescriptor::long_initial_value() const {
  86   return constants()->long_at(initial_value_index());
  87 }
  88 
  89 jfloat fieldDescriptor::float_initial_value() const {
  90   return constants()->float_at(initial_value_index());
  91 }
  92 
  93 jdouble fieldDescriptor::double_initial_value() const {
  94   return constants()->double_at(initial_value_index());
  95 }
  96 
  97 oop fieldDescriptor::string_initial_value(TRAPS) const {
  98   return constants()->uncached_string_at(initial_value_index(), THREAD);
  99 }
 100 






















 101 void fieldDescriptor::reinitialize(InstanceKlass* ik, int index) {


 102   if (_cp.is_null() || field_holder() != ik) {
 103     _cp = constantPoolHandle(Thread::current(), ik->constants());
 104     // _cp should now reference ik's constant pool; i.e., ik is now field_holder.
 105     assert(field_holder() == ik, "must be already initialized to this class");
 106   }
 107   FieldInfo* f = ik->field(index);
 108   assert(!f->is_internal(), "regular Java fields only");
 109 
 110   _access_flags = accessFlags_from(f->access_flags());
 111   guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor");
 112   _index = index;
 113   verify();
 114 }
 115 
 116 #ifndef PRODUCT
 117 
 118 void fieldDescriptor::verify() const {
 119   if (_cp.is_null()) {
 120     assert(_index == badInt, "constructor must be called");  // see constructor
 121   } else {




  81 jint fieldDescriptor::int_initial_value() const {
  82   return constants()->int_at(initial_value_index());
  83 }
  84 
  85 jlong fieldDescriptor::long_initial_value() const {
  86   return constants()->long_at(initial_value_index());
  87 }
  88 
  89 jfloat fieldDescriptor::float_initial_value() const {
  90   return constants()->float_at(initial_value_index());
  91 }
  92 
  93 jdouble fieldDescriptor::double_initial_value() const {
  94   return constants()->double_at(initial_value_index());
  95 }
  96 
  97 oop fieldDescriptor::string_initial_value(TRAPS) const {
  98   return constants()->uncached_string_at(initial_value_index(), THREAD);
  99 }
 100 
 101 void fieldDescriptor::reinitialize_accessor(InstanceKlass* ik) {
 102     //assert(_getAccessor != -1 && _putAccessor != -1, "asymetric accesor configuration");
 103     if (_cp.is_null()) {
 104         _cp = constantPoolHandle(Thread::current(), ik->constants());
 105         assert(!_cp.is_null(), "must be initialized");
 106     }
 107     Method* getM = ik->method_with_idnum(_getAccessor);
 108     Method* putM = ik->method_with_idnum(_putAccessor);
 109     
 110     assert(getM->access_flags().get_flags() == putM->access_flags().get_flags(), "asymetic accessiblity in accessor configuration");
 111     _access_flags = accessFlags_from(getM->access_flags().get_flags());
 112         
 113     // Somehow the memory has to be freed. Maybe create a destructor for fieldDescriptor
 114     _accessor_info = NEW_C_HEAP_ARRAY(FieldInfo,1,mtInternal);
 115     // How do I get an index for the signature. There maybe no signature in constant-pool of this class.
 116     // Fortunatly the signature is not used for this prototype.
 117     _accessor_info->initialize(/*_access_flags*/_access_flags.as_short(),_field_name_from_accessor,/*sig_index*/0,/*initval*/0);
 118     // fieldDescriptor for accessor initialized completely
 119     // maybe more checks are needed in future.
 120     _is_accessor = true;
 121 }
 122 
 123 void fieldDescriptor::reinitialize(InstanceKlass* ik, int index) {
 124   _is_accessor = false;
 125   _accessor_info = NULL;
 126   if (_cp.is_null() || field_holder() != ik) {
 127     _cp = constantPoolHandle(Thread::current(), ik->constants());
 128     // _cp should now reference ik's constant pool; i.e., ik is now field_holder.
 129     assert(field_holder() == ik, "must be already initialized to this class");
 130   }
 131   FieldInfo* f = ik->field(index);
 132   assert(!f->is_internal(), "regular Java fields only");
 133 
 134   _access_flags = accessFlags_from(f->access_flags());
 135   guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor");
 136   _index = index;
 137   verify();
 138 }
 139 
 140 #ifndef PRODUCT
 141 
 142 void fieldDescriptor::verify() const {
 143   if (_cp.is_null()) {
 144     assert(_index == badInt, "constructor must be called");  // see constructor
 145   } else {


< prev index next >