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 { |