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, "");
|