< prev index next >

src/hotspot/share/ci/ciInstance.cpp

Print this page

 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) {
< prev index next >