81 return constants()->int_at(initial_value_index());
82 }
83
84 jlong fieldDescriptor::long_initial_value() const {
85 return constants()->long_at(initial_value_index());
86 }
87
88 jfloat fieldDescriptor::float_initial_value() const {
89 return constants()->float_at(initial_value_index());
90 }
91
92 jdouble fieldDescriptor::double_initial_value() const {
93 return constants()->double_at(initial_value_index());
94 }
95
96 oop fieldDescriptor::string_initial_value(TRAPS) const {
97 return constants()->uncached_string_at(initial_value_index(), CHECK_0);
98 }
99
100 void fieldDescriptor::initialize(InstanceKlass* ik, int index) {
101 _cp = ik->constants();
102 FieldInfo* f = ik->field(index);
103 assert(!f->is_internal(), "regular Java fields only");
104
105 _access_flags = accessFlags_from(f->access_flags());
106 guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor");
107 _index = index;
108 }
109
110 #ifndef PRODUCT
111
112 void fieldDescriptor::print_on(outputStream* st) const {
113 access_flags().print_on(st);
114 name()->print_value_on(st);
115 st->print(" ");
116 signature()->print_value_on(st);
117 st->print(" @%d ", offset());
118 if (WizardMode && has_initial_value()) {
119 st->print("(initval ");
120 constantTag t = initial_value_tag();
121 if (t.is_int()) {
122 st->print("int %d)", int_initial_value());
123 } else if (t.is_long()){
124 st->print_jlong(long_initial_value());
125 } else if (t.is_float()){
126 st->print("float %f)", float_initial_value());
127 } else if (t.is_double()){
128 st->print("double %lf)", double_initial_value());
129 }
130 }
131 }
|
81 return constants()->int_at(initial_value_index());
82 }
83
84 jlong fieldDescriptor::long_initial_value() const {
85 return constants()->long_at(initial_value_index());
86 }
87
88 jfloat fieldDescriptor::float_initial_value() const {
89 return constants()->float_at(initial_value_index());
90 }
91
92 jdouble fieldDescriptor::double_initial_value() const {
93 return constants()->double_at(initial_value_index());
94 }
95
96 oop fieldDescriptor::string_initial_value(TRAPS) const {
97 return constants()->uncached_string_at(initial_value_index(), CHECK_0);
98 }
99
100 void fieldDescriptor::initialize(InstanceKlass* ik, int index) {
101 if (_cp.is_null() || field_holder() != ik) {
102 _cp = constantPoolHandle(Thread::current(), ik->constants());
103 assert(field_holder() == ik, "must be already initialized to this class");
104 }
105 FieldInfo* f = ik->field(index);
106 assert(!f->is_internal(), "regular Java fields only");
107
108 _access_flags = accessFlags_from(f->access_flags());
109 guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor");
110 _index = index;
111 verify();
112 }
113
114 #ifndef PRODUCT
115
116 void fieldDescriptor::verify() const {
117 if (_cp.is_null()) {
118 assert(_index == badInt, "constructor must be called"); // see constructor
119 } else {
120 assert(_index >= 0, "good index");
121 assert(_index < field_holder()->java_fields_count(), "oob");
122 }
123 }
124
125 void fieldDescriptor::print_on(outputStream* st) const {
126 access_flags().print_on(st);
127 name()->print_value_on(st);
128 st->print(" ");
129 signature()->print_value_on(st);
130 st->print(" @%d ", offset());
131 if (WizardMode && has_initial_value()) {
132 st->print("(initval ");
133 constantTag t = initial_value_tag();
134 if (t.is_int()) {
135 st->print("int %d)", int_initial_value());
136 } else if (t.is_long()){
137 st->print_jlong(long_initial_value());
138 } else if (t.is_float()){
139 st->print("float %f)", float_initial_value());
140 } else if (t.is_double()){
141 st->print("double %lf)", double_initial_value());
142 }
143 }
144 }
|