< prev index next >

src/hotspot/share/ci/ciObjArrayKlass.cpp

Print this page


 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;
< prev index next >