< prev index next >

src/hotspot/share/oops/objArrayKlass.cpp

Print this page

*** 65,75 **** // The element type has a direct super. E.g., String[] has direct super of Object[]. super_klass = element_super->array_klass_or_null(); bool supers_exist = super_klass != NULL; // Also, see if the element has secondary supertypes. // We need an array type for each. ! Array<Klass*>* element_supers = element_klass->secondary_supers(); for( int i = element_supers->length()-1; i >= 0; i-- ) { Klass* elem_super = element_supers->at(i); if (elem_super->array_klass_or_null() == NULL) { supers_exist = false; break; --- 65,75 ---- // The element type has a direct super. E.g., String[] has direct super of Object[]. super_klass = element_super->array_klass_or_null(); bool supers_exist = super_klass != NULL; // Also, see if the element has secondary supertypes. // We need an array type for each. ! const Array<Klass*>* element_supers = element_klass->secondary_supers(); for( int i = element_supers->length()-1; i >= 0; i-- ) { Klass* elem_super = element_supers->at(i); if (elem_super->array_klass_or_null() == NULL) { supers_exist = false; break;
*** 380,393 **** else return Klass::can_be_primary_super_slow(); } GrowableArray<Klass*>* ObjArrayKlass::compute_secondary_supers(int num_extra_slots, ! Array<Klass*>* transitive_interfaces) { assert(transitive_interfaces == NULL, "sanity"); // interfaces = { cloneable_klass, serializable_klass, elemSuper[], ... }; ! Array<Klass*>* elem_supers = element_klass()->secondary_supers(); int num_elem_supers = elem_supers == NULL ? 0 : elem_supers->length(); int num_secondaries = num_extra_slots + 2 + num_elem_supers; if (num_secondaries == 2) { // Must share this for correct bootstrapping! set_secondary_supers(Universe::the_array_interfaces_array()); --- 380,393 ---- else return Klass::can_be_primary_super_slow(); } GrowableArray<Klass*>* ObjArrayKlass::compute_secondary_supers(int num_extra_slots, ! Array<InstanceKlass*>* transitive_interfaces) { assert(transitive_interfaces == NULL, "sanity"); // interfaces = { cloneable_klass, serializable_klass, elemSuper[], ... }; ! const Array<Klass*>* elem_supers = element_klass()->secondary_supers(); int num_elem_supers = elem_supers == NULL ? 0 : elem_supers->length(); int num_secondaries = num_extra_slots + 2 + num_elem_supers; if (num_secondaries == 2) { // Must share this for correct bootstrapping! set_secondary_supers(Universe::the_array_interfaces_array());
*** 395,405 **** } else { GrowableArray<Klass*>* secondaries = new GrowableArray<Klass*>(num_elem_supers+2); secondaries->push(SystemDictionary::Cloneable_klass()); secondaries->push(SystemDictionary::Serializable_klass()); for (int i = 0; i < num_elem_supers; i++) { ! Klass* elem_super = (Klass*) elem_supers->at(i); Klass* array_super = elem_super->array_klass_or_null(); assert(array_super != NULL, "must already have been created"); secondaries->push(array_super); } return secondaries; --- 395,405 ---- } else { GrowableArray<Klass*>* secondaries = new GrowableArray<Klass*>(num_elem_supers+2); secondaries->push(SystemDictionary::Cloneable_klass()); secondaries->push(SystemDictionary::Serializable_klass()); for (int i = 0; i < num_elem_supers; i++) { ! Klass* elem_super = elem_supers->at(i); Klass* array_super = elem_super->array_klass_or_null(); assert(array_super != NULL, "must already have been created"); secondaries->push(array_super); } return secondaries;
< prev index next >