< prev index next >

src/hotspot/share/oops/instanceKlass.cpp

Print this page




 154                                        parser.has_flattenable_fields() ? parser.java_fields_count() : 0,
 155                                        parser.is_value_type());
 156 
 157   const Symbol* const class_name = parser.class_name();
 158   assert(class_name != NULL, "invariant");
 159   ClassLoaderData* loader_data = parser.loader_data();
 160   assert(loader_data != NULL, "invariant");
 161 
 162   InstanceKlass* ik;
 163 
 164   // Allocation
 165   if (REF_NONE == parser.reference_type()) {
 166     if (class_name == vmSymbols::java_lang_Class()) {
 167       // mirror
 168       ik = new (loader_data, size, THREAD) InstanceMirrorKlass(parser);
 169     } else if (is_class_loader(class_name, parser)) {
 170       // class loader
 171       ik = new (loader_data, size, THREAD) InstanceClassLoaderKlass(parser);
 172     } else if (parser.is_value_type()) {
 173       // value type
 174       ik = new (loader_data, size, THREAD) ValueKlass(parser);
 175     } else {
 176       // normal
 177       ik = new (loader_data, size, THREAD) InstanceKlass(parser, InstanceKlass::_misc_kind_other);
 178     }
 179   } else {
 180     // reference
 181     ik = new (loader_data, size, THREAD) InstanceRefKlass(parser);
 182   }
 183 
 184   // Check for pending exception before adding to the loader data and incrementing
 185   // class count.  Can get OOM here.
 186   if (HAS_PENDING_EXCEPTION) {
 187     return NULL;
 188   }
 189 
 190   assert(ik != NULL, "invariant");
 191 
 192   const bool publicize = !parser.is_internal();
 193 #ifdef ASSERT
 194   assert(ik->size() == size, "");




 154                                        parser.has_flattenable_fields() ? parser.java_fields_count() : 0,
 155                                        parser.is_value_type());
 156 
 157   const Symbol* const class_name = parser.class_name();
 158   assert(class_name != NULL, "invariant");
 159   ClassLoaderData* loader_data = parser.loader_data();
 160   assert(loader_data != NULL, "invariant");
 161 
 162   InstanceKlass* ik;
 163 
 164   // Allocation
 165   if (REF_NONE == parser.reference_type()) {
 166     if (class_name == vmSymbols::java_lang_Class()) {
 167       // mirror
 168       ik = new (loader_data, size, THREAD) InstanceMirrorKlass(parser);
 169     } else if (is_class_loader(class_name, parser)) {
 170       // class loader
 171       ik = new (loader_data, size, THREAD) InstanceClassLoaderKlass(parser);
 172     } else if (parser.is_value_type()) {
 173       // value type
 174       ik = new (loader_data, size, true, THREAD) ValueKlass(parser);
 175     } else {
 176       // normal
 177       ik = new (loader_data, size, THREAD) InstanceKlass(parser, InstanceKlass::_misc_kind_other);
 178     }
 179   } else {
 180     // reference
 181     ik = new (loader_data, size, THREAD) InstanceRefKlass(parser);
 182   }
 183 
 184   // Check for pending exception before adding to the loader data and incrementing
 185   // class count.  Can get OOM here.
 186   if (HAS_PENDING_EXCEPTION) {
 187     return NULL;
 188   }
 189 
 190   assert(ik != NULL, "invariant");
 191 
 192   const bool publicize = !parser.is_internal();
 193 #ifdef ASSERT
 194   assert(ik->size() == size, "");


< prev index next >