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