< 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 >