Exemple #1
0
// generate a map of all the field types in this object
int Array::generate_fieldmap(TypeArray* field_map) {
  int map_index = 0;

  // near
  map_index = Near::generate_fieldmap(field_map);

  //_length
  field_map->byte_at_put(map_index++, T_INT);

  // map size for the elements
  jint elements_map_size = length();
  if (map_index + elements_map_size > field_map->length()) {
    // need more space
    return map_index + elements_map_size;
  }

  int type;
  if (is_obj_array()) {
    type = T_OBJECT;
  } else {
    TypeArrayClass::Raw cls = blueprint();
    type = cls().type();
  }

  for (int i = 0; i < elements_map_size; i++) {
    field_map->byte_at_put(map_index++, type);
  }

  return map_index;
}
Exemple #2
0
ReturnOop Array::shrink(int new_length) {
  GUARANTEE(new_length >= 0, "Negative array size prohibited");
  int scale;
  if (is_type_array()) {
    TypeArrayClass::Raw array_class = blueprint();
    scale = array_class().scale();
  } else {
    GUARANTEE(is_obj_array(), "sanity");
    scale = sizeof(OopDesc*);
  }

  Universe::shrink_object(this, ArrayDesc::allocation_size(new_length, scale));
  set_length(new_length);
  return obj();
}
 ciObjArray*              as_obj_array() {
   assert(is_obj_array(), "bad cast");
   return (ciObjArray*)this;
 }