void Value::set_obj(Oop* value) { // due to garbage collection considerations object immediates // are always put in a register GUARANTEE(type() == T_OBJECT || type() == T_ARRAY, "check type"); // assign a register to this value if (value->is_null()) { set_where(T_IMMEDIATE); set_must_be_null(); set_not_on_heap(); _low = 0; } else { assign_register(); // move the immediate object into the register Compiler::code_generator()->move(*this, value); if (!ObjectHeap::contains_moveable(value->obj())) { set_not_on_heap(); } #if ENABLE_COMPILER_TYPE_INFO FarClass::Raw value_class = value->blueprint(); GUARANTEE(value_class.not_null(), "Sanity"); if (value_class.is_java_class()) { JavaClass::Raw java_class = value_class.obj(); set_class_id(java_class().class_id()); set_is_exact_type(); } #else if (value->is_string()) { set_is_string(); } #endif set_must_be_nonnull(); } }
void ExtendedValue::set_obj(Oop* value) { if (value->is_null()) { is_value(T_OBJECT); this->value().set_obj(value); } else { // IMPL_NOTE: Can we merge the code below with Value::set_value() ?? set_oop(value); if (!ObjectHeap::contains_moveable(value->obj())) { _value.set_not_on_heap(); } #if ENABLE_COMPILER_TYPE_INFO FarClass::Raw value_class = value->blueprint(); GUARANTEE(value_class.not_null(), "Sanity"); if (value_class.is_java_class()) { JavaClass::Raw java_class = value_class.obj(); _value.set_class_id(java_class().class_id()); _value.set_is_exact_type(); } #else if (value->is_string()) { _value.set_is_string(); } #endif _value.set_must_be_nonnull(); } }
void JavaClassObj::print_value_on(Stream* st) { st->print("Mirror for "); JavaClass c = java_class(); c.print_value_on(st); }