48 _element_klass = _base_element_klass;
49 } else {
50 _element_klass = NULL;
51 }
52 if (!ciObjectFactory::is_initialized()) {
53 assert(_element_klass->is_java_lang_Object(), "only arrays of object are shared");
54 }
55 }
56
57 // ------------------------------------------------------------------
58 // ciObjArrayKlass::ciObjArrayKlass
59 //
60 // Constructor for unloaded object array klasses.
61 ciObjArrayKlass::ciObjArrayKlass(ciSymbol* array_name,
62 ciKlass* base_element_klass,
63 int dimension)
64 : ciArrayKlass(array_name,
65 dimension, T_OBJECT) {
66 _base_element_klass = base_element_klass;
67 assert(_base_element_klass->is_instance_klass() ||
68 _base_element_klass->is_type_array_klass(), "bad base klass");
69 if (dimension == 1) {
70 _element_klass = base_element_klass;
71 } else {
72 _element_klass = NULL;
73 }
74 }
75
76 // ------------------------------------------------------------------
77 // ciObjArrayKlass::element_klass
78 //
79 // What is the one-level element type of this array?
80 ciKlass* ciObjArrayKlass::element_klass() {
81 if (_element_klass == NULL) {
82 assert(dimension() > 1, "_element_klass should not be NULL");
83 // Produce the element klass.
84 if (is_loaded()) {
85 VM_ENTRY_MARK;
86 Klass* element_Klass = get_ObjArrayKlass()->element_klass();
87 _element_klass = CURRENT_THREAD_ENV->get_klass(element_Klass);
88 } else {
|
48 _element_klass = _base_element_klass;
49 } else {
50 _element_klass = NULL;
51 }
52 if (!ciObjectFactory::is_initialized()) {
53 assert(_element_klass->is_java_lang_Object(), "only arrays of object are shared");
54 }
55 }
56
57 // ------------------------------------------------------------------
58 // ciObjArrayKlass::ciObjArrayKlass
59 //
60 // Constructor for unloaded object array klasses.
61 ciObjArrayKlass::ciObjArrayKlass(ciSymbol* array_name,
62 ciKlass* base_element_klass,
63 int dimension)
64 : ciArrayKlass(array_name,
65 dimension, T_OBJECT) {
66 _base_element_klass = base_element_klass;
67 assert(_base_element_klass->is_instance_klass() ||
68 _base_element_klass->is_type_array_klass() ||
69 _base_element_klass->is_value_array_klass(), "bad base klass");
70 if (dimension == 1) {
71 _element_klass = base_element_klass;
72 } else {
73 _element_klass = NULL;
74 }
75 }
76
77 // ------------------------------------------------------------------
78 // ciObjArrayKlass::element_klass
79 //
80 // What is the one-level element type of this array?
81 ciKlass* ciObjArrayKlass::element_klass() {
82 if (_element_klass == NULL) {
83 assert(dimension() > 1, "_element_klass should not be NULL");
84 // Produce the element klass.
85 if (is_loaded()) {
86 VM_ENTRY_MARK;
87 Klass* element_Klass = get_ObjArrayKlass()->element_klass();
88 _element_klass = CURRENT_THREAD_ENV->get_klass(element_Klass);
89 } else {
|