< prev index next >
src/hotspot/share/ci/ciArrayKlass.cpp
Print this page
*** 25,34 ****
--- 25,36 ----
#include "precompiled.hpp"
#include "ci/ciArrayKlass.hpp"
#include "ci/ciObjArrayKlass.hpp"
#include "ci/ciTypeArrayKlass.hpp"
#include "ci/ciUtilities.hpp"
+ #include "ci/ciValueArrayKlass.hpp"
+ #include "ci/ciValueKlass.hpp"
// ciArrayKlass
//
// This class represents a Klass* in the HotSpot virtual machine
// whose Klass part in an ArrayKlass.
*** 57,67 ****
// What type is obtained when this array is indexed once?
ciType* ciArrayKlass::element_type() {
if (is_type_array_klass()) {
return ciType::make(as_type_array_klass()->element_type());
} else {
! return as_obj_array_klass()->element_klass()->as_klass();
}
}
// ------------------------------------------------------------------
--- 59,69 ----
// What type is obtained when this array is indexed once?
ciType* ciArrayKlass::element_type() {
if (is_type_array_klass()) {
return ciType::make(as_type_array_klass()->element_type());
} else {
! return element_klass()->as_klass();
}
}
// ------------------------------------------------------------------
*** 69,84 ****
//
// What type is obtained when this array is indexed as many times as possible?
ciType* ciArrayKlass::base_element_type() {
if (is_type_array_klass()) {
return ciType::make(as_type_array_klass()->element_type());
! } else {
ciKlass* ek = as_obj_array_klass()->base_element_klass();
if (ek->is_type_array_klass()) {
return ciType::make(ek->as_type_array_klass()->element_type());
}
return ek;
}
}
// ------------------------------------------------------------------
--- 71,88 ----
//
// What type is obtained when this array is indexed as many times as possible?
ciType* ciArrayKlass::base_element_type() {
if (is_type_array_klass()) {
return ciType::make(as_type_array_klass()->element_type());
! } else if (is_obj_array_klass()) {
ciKlass* ek = as_obj_array_klass()->base_element_klass();
if (ek->is_type_array_klass()) {
return ciType::make(ek->as_type_array_klass()->element_type());
}
return ek;
+ } else {
+ return as_value_array_klass()->base_element_klass();
}
}
// ------------------------------------------------------------------
*** 97,105 ****
--- 101,115 ----
//
// What type is obtained when this array is indexed as many times as possible?
ciArrayKlass* ciArrayKlass::make(ciType* element_type) {
if (element_type->is_primitive_type()) {
return ciTypeArrayKlass::make(element_type->basic_type());
+ } else if (element_type->is_valuetype() && element_type->as_value_klass()->flatten_array()) {
+ return ciValueArrayKlass::make(element_type->as_klass());
} else {
return ciObjArrayKlass::make(element_type->as_klass());
}
}
+
+ int ciArrayKlass::array_header_in_bytes() {
+ return get_ArrayKlass()->array_header_in_bytes();
+ }
< prev index next >