jint ConstantPool::name_and_type_at(int index JVM_TRAPS) const { int offset = offset_from_checked_index(index JVM_ZCHECK_0(offset)); cp_check_0(ConstantTag::is_name_and_type(tag_value_at(index))); int result = int_field(offset); GUARANTEE(result != 0, "sanity for JVM_ZCHECK"); return result; }
BasicType ConstantPool::resolved_virtual_method_at(int index, int& vtable_index, int& class_id) const { GUARANTEE(tag_at(index).is_resolved_virtual_method(), "Corrupt constant pool"); vtable_index = extract_low_jushort_at(index); class_id = extract_high_jushort_at(index); return ConstantTag::resolved_virtual_method_type(tag_value_at(index)); }
bool ConstantPool::check_klass_at(int index) const { if (is_within_bounds(index)) { jubyte t = tag_value_at(index); return (ConstantTag::is_klass_index(t) || ConstantTag::is_resolved_klass(t) || ConstantTag::is_unresolved_klass(t)); } else { return false; } }
ReturnOop ConstantPool::checked_symbol_at(int index JVM_TRAPS) { if (is_within_bounds(index)) { int offset = offset_from_index(index); if (ConstantTag::is_symbol(tag_value_at(index))) { Oop::Raw result(obj_field(offset)); if (result().is_symbol()) { return result.obj(); } else { return resolve_symbol_at_offset(offset JVM_NO_CHECK_AT_BOTTOM); } } } Throw::error(invalid_constant JVM_NO_CHECK_AT_BOTTOM); return 0; }
ReturnOop ConstantPool::resolved_klass_at(int index JVM_TRAPS) const { int offset = offset_from_checked_index(index JVM_ZCHECK_0(offset)); cp_check_0(ConstantTag::is_resolved_klass(tag_value_at(index))); return Universe::class_from_id(int_field(offset)); }
} bool ConstantPool::check_klass_at(int index) const { if (is_within_bounds(index)) { jubyte t = tag_value_at(index); return (ConstantTag::is_klass_index(t) || ConstantTag::is_resolved_klass(t) || ConstantTag::is_unresolved_klass(t)); } else { return false; } } void ConstantPool::check_constant_at(int index, FieldType* type JVM_TRAPS) const { jubyte t = tag_value_at(index); BasicType basic_type = type->basic_type(); switch (basic_type) { case T_INT: case T_SHORT: case T_CHAR: case T_BYTE: case T_BOOLEAN: if (ConstantTag::is_int(t)) { return; } break; case T_LONG: if (ConstantTag::is_long(t)) { return;
ReturnOop ConstantPool::unresolved_klass_at(int index JVM_TRAPS) const { int offset = offset_from_checked_index(index JVM_ZCHECK(offset)); cp_check_0(ConstantTag::is_unresolved_klass(tag_value_at(index))); return obj_field(offset); }