< prev index next >

src/hotspot/share/ci/ciInstance.cpp

Print this page

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