hotspot/src/share/vm/oops/arrayKlass.cpp
changeset 4571 80b553bddc26
parent 3795 6227ff014cfe
child 5547 f4b087cbb361
equal deleted inserted replaced
4569:f372ea9e5ed4 4571:80b553bddc26
    41 
    41 
    42 klassOop arrayKlass::java_super() const {
    42 klassOop arrayKlass::java_super() const {
    43   if (super() == NULL)  return NULL;  // bootstrap case
    43   if (super() == NULL)  return NULL;  // bootstrap case
    44   // Array klasses have primary supertypes which are not reported to Java.
    44   // Array klasses have primary supertypes which are not reported to Java.
    45   // Example super chain:  String[][] -> Object[][] -> Object[] -> Object
    45   // Example super chain:  String[][] -> Object[][] -> Object[] -> Object
    46   return SystemDictionary::object_klass();
    46   return SystemDictionary::Object_klass();
    47 }
    47 }
    48 
    48 
    49 
    49 
    50 oop arrayKlass::multi_allocate(int rank, jint* sizes, TRAPS) {
    50 oop arrayKlass::multi_allocate(int rank, jint* sizes, TRAPS) {
    51   ShouldNotReachHere();
    51   ShouldNotReachHere();
    80   // target below becomes parsable
    80   // target below becomes parsable
    81   No_Safepoint_Verifier no_safepoint;
    81   No_Safepoint_Verifier no_safepoint;
    82   k = arrayKlassHandle(THREAD, base_klass());
    82   k = arrayKlassHandle(THREAD, base_klass());
    83 
    83 
    84   assert(!k()->is_parsable(), "not expecting parsability yet.");
    84   assert(!k()->is_parsable(), "not expecting parsability yet.");
    85   k->set_super(Universe::is_bootstrapping() ? (klassOop)NULL : SystemDictionary::object_klass());
    85   k->set_super(Universe::is_bootstrapping() ? (klassOop)NULL : SystemDictionary::Object_klass());
    86   k->set_layout_helper(Klass::_lh_neutral_value);
    86   k->set_layout_helper(Klass::_lh_neutral_value);
    87   k->set_dimension(1);
    87   k->set_dimension(1);
    88   k->set_higher_dimension(NULL);
    88   k->set_higher_dimension(NULL);
    89   k->set_lower_dimension(NULL);
    89   k->set_lower_dimension(NULL);
    90   k->set_component_mirror(NULL);
    90   k->set_component_mirror(NULL);
   115   return Universe::the_array_interfaces_array();
   115   return Universe::the_array_interfaces_array();
   116 }
   116 }
   117 
   117 
   118 bool arrayKlass::compute_is_subtype_of(klassOop k) {
   118 bool arrayKlass::compute_is_subtype_of(klassOop k) {
   119   // An array is a subtype of Serializable, Clonable, and Object
   119   // An array is a subtype of Serializable, Clonable, and Object
   120   return    k == SystemDictionary::object_klass()
   120   return    k == SystemDictionary::Object_klass()
   121          || k == SystemDictionary::cloneable_klass()
   121          || k == SystemDictionary::Cloneable_klass()
   122          || k == SystemDictionary::serializable_klass();
   122          || k == SystemDictionary::Serializable_klass();
   123 }
   123 }
   124 
   124 
   125 
   125 
   126 inline intptr_t* arrayKlass::start_of_vtable() const {
   126 inline intptr_t* arrayKlass::start_of_vtable() const {
   127   // all vtables start at the same place, that's why we use instanceKlass::header_size here
   127   // all vtables start at the same place, that's why we use instanceKlass::header_size here