90 value = ciConstant(field_btype, ciNullObject::make());
91 } else {
92 value = ciConstant(field_btype, CURRENT_ENV->get_object(o));
93 }
94 break;
95 }
96 default:
97 fatal("no field value: %s", type2name(field_btype));
98 }
99 add_to_constant_value_cache(offset, value);
100 return value;
101 }
102
103 // ------------------------------------------------------------------
104 // ciInstance::field_value
105 //
106 // Constant value of a field.
107 ciConstant ciInstance::field_value(ciField* field) {
108 assert(is_loaded(), "invalid access - must be loaded");
109 assert(field->holder()->is_loaded(), "invalid access - holder must be loaded");
110 assert(field->is_static() || klass()->is_subclass_of(field->holder()), "invalid access - must be subclass");
111 return field_value_impl(field->type()->basic_type(), field->offset_in_bytes());
112 }
113
114 // ------------------------------------------------------------------
115 // ciInstance::field_value_by_offset
116 //
117 // Constant value of a field at the specified offset.
118 ciConstant ciInstance::field_value_by_offset(int field_offset) {
119 ciInstanceKlass* ik = klass()->as_instance_klass();
120 ciField* field = ik->get_field_by_offset(field_offset, false);
121 if (field == nullptr)
122 return ciConstant(); // T_ILLEGAL
123 return field_value(field);
124 }
125
126 // ------------------------------------------------------------------
127 // ciInstance::print_impl
128 //
129 // Implementation of the print method.
130 void ciInstance::print_impl(outputStream* st) {
|
90 value = ciConstant(field_btype, ciNullObject::make());
91 } else {
92 value = ciConstant(field_btype, CURRENT_ENV->get_object(o));
93 }
94 break;
95 }
96 default:
97 fatal("no field value: %s", type2name(field_btype));
98 }
99 add_to_constant_value_cache(offset, value);
100 return value;
101 }
102
103 // ------------------------------------------------------------------
104 // ciInstance::field_value
105 //
106 // Constant value of a field.
107 ciConstant ciInstance::field_value(ciField* field) {
108 assert(is_loaded(), "invalid access - must be loaded");
109 assert(field->holder()->is_loaded(), "invalid access - holder must be loaded");
110 assert(field->is_static() || field->holder()->is_inlinetype() || klass()->is_subclass_of(field->holder()),
111 "invalid access - must be subclass");
112
113 return field_value_impl(field->type()->basic_type(), field->offset_in_bytes());
114 }
115
116 // ------------------------------------------------------------------
117 // ciInstance::field_value_by_offset
118 //
119 // Constant value of a field at the specified offset.
120 ciConstant ciInstance::field_value_by_offset(int field_offset) {
121 ciInstanceKlass* ik = klass()->as_instance_klass();
122 ciField* field = ik->get_field_by_offset(field_offset, false);
123 if (field == nullptr)
124 return ciConstant(); // T_ILLEGAL
125 return field_value(field);
126 }
127
128 // ------------------------------------------------------------------
129 // ciInstance::print_impl
130 //
131 // Implementation of the print method.
132 void ciInstance::print_impl(outputStream* st) {
|