Example #1
0
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;
}
Example #2
0
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));
}
Example #3
0
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;
  }
}
Example #4
0
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;
}
Example #5
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));
}
Example #6
0
}

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;
Example #7
0
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);
}