80 jint fieldDescriptor::int_initial_value() const { 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 } | 80 jint fieldDescriptor::int_initial_value() const { 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::reinitialize(InstanceKlass* ik, int index) { 101 if (_cp.is_null() || field_holder() != ik) { 102 _cp = constantPoolHandle(Thread::current(), ik->constants()); 103 // _cp should now reference ik's constant pool; i.e., ik is now field_holder. 104 assert(field_holder() == ik, "must be already initialized to this class"); 105 } 106 FieldInfo* f = ik->field(index); 107 assert(!f->is_internal(), "regular Java fields only"); 108 109 _access_flags = accessFlags_from(f->access_flags()); 110 guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor"); 111 _index = index; 112 verify(); 113 } 114 115 #ifndef PRODUCT 116 117 void fieldDescriptor::verify() const { 118 if (_cp.is_null()) { 119 assert(_index == badInt, "constructor must be called"); // see constructor 120 } else { 121 assert(_index >= 0, "good index"); 122 assert(_index < field_holder()->java_fields_count(), "oob"); 123 } 124 } 125 126 void fieldDescriptor::print_on(outputStream* st) const { 127 access_flags().print_on(st); 128 name()->print_value_on(st); 129 st->print(" "); 130 signature()->print_value_on(st); 131 st->print(" @%d ", offset()); 132 if (WizardMode && has_initial_value()) { 133 st->print("(initval "); 134 constantTag t = initial_value_tag(); 135 if (t.is_int()) { 136 st->print("int %d)", int_initial_value()); 137 } else if (t.is_long()){ 138 st->print_jlong(long_initial_value()); 139 } else if (t.is_float()){ 140 st->print("float %f)", float_initial_value()); 141 } else if (t.is_double()){ 142 st->print("double %lf)", double_initial_value()); 143 } 144 } 145 } |