152
153 if (element_klass->is_loaded()) {
154 EXCEPTION_CONTEXT;
155 // The element klass is loaded
156 Klass* array = element_klass->get_Klass()->array_klass(THREAD);
157 if (HAS_PENDING_EXCEPTION) {
158 CLEAR_PENDING_EXCEPTION;
159 CURRENT_THREAD_ENV->record_out_of_memory_failure();
160 return ciEnv::unloaded_ciobjarrayklass();
161 }
162 return CURRENT_THREAD_ENV->get_obj_array_klass(array);
163 }
164
165 // The array klass was unable to be made or the element klass was
166 // not loaded.
167 ciSymbol* array_name = construct_array_name(element_klass->name(), 1);
168 if (array_name == ciEnv::unloaded_cisymbol()) {
169 return ciEnv::unloaded_ciobjarrayklass();
170 }
171 return
172 CURRENT_ENV->get_unloaded_klass(element_klass, array_name)
173 ->as_obj_array_klass();
174 }
175
176 // ------------------------------------------------------------------
177 // ciObjArrayKlass::make
178 //
179 // Make an array klass corresponding to the specified primitive type.
180 ciObjArrayKlass* ciObjArrayKlass::make(ciKlass* element_klass) {
181 GUARDED_VM_ENTRY(return make_impl(element_klass);)
182 }
183
184 ciKlass* ciObjArrayKlass::exact_klass() {
185 ciType* base = base_element_type();
186 if (base->is_instance_klass()) {
187 ciInstanceKlass* ik = base->as_instance_klass();
188 if (ik->exact_klass() != NULL) {
189 return this;
190 }
191 } else if (base->is_primitive_type()) {
192 return this;
|
152
153 if (element_klass->is_loaded()) {
154 EXCEPTION_CONTEXT;
155 // The element klass is loaded
156 Klass* array = element_klass->get_Klass()->array_klass(THREAD);
157 if (HAS_PENDING_EXCEPTION) {
158 CLEAR_PENDING_EXCEPTION;
159 CURRENT_THREAD_ENV->record_out_of_memory_failure();
160 return ciEnv::unloaded_ciobjarrayklass();
161 }
162 return CURRENT_THREAD_ENV->get_obj_array_klass(array);
163 }
164
165 // The array klass was unable to be made or the element klass was
166 // not loaded.
167 ciSymbol* array_name = construct_array_name(element_klass->name(), 1);
168 if (array_name == ciEnv::unloaded_cisymbol()) {
169 return ciEnv::unloaded_ciobjarrayklass();
170 }
171 return
172 CURRENT_ENV->get_unloaded_klass(element_klass, array_name, false)
173 ->as_obj_array_klass();
174 }
175
176 // ------------------------------------------------------------------
177 // ciObjArrayKlass::make
178 //
179 // Make an array klass corresponding to the specified primitive type.
180 ciObjArrayKlass* ciObjArrayKlass::make(ciKlass* element_klass) {
181 GUARDED_VM_ENTRY(return make_impl(element_klass);)
182 }
183
184 ciKlass* ciObjArrayKlass::exact_klass() {
185 ciType* base = base_element_type();
186 if (base->is_instance_klass()) {
187 ciInstanceKlass* ik = base->as_instance_klass();
188 if (ik->exact_klass() != NULL) {
189 return this;
190 }
191 } else if (base->is_primitive_type()) {
192 return this;
|