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