< prev index next >

src/hotspot/share/classfile/klassFactory.cpp

Print this page

        

*** 81,96 **** ClassFileStream::verify); ClassFileParser parser(stream, class_name, loader_data, protection_domain, ! NULL, ! NULL, ClassFileParser::BROADCAST, // publicity level CHECK_NULL); ! InstanceKlass* new_ik = parser.create_instance_klass(true /* changed_by_loadhook */, CHECK_NULL); if (cached_class_file != NULL) { new_ik->set_cached_class_file(cached_class_file); } if (class_loader.is_null()) { --- 81,101 ---- ClassFileStream::verify); ClassFileParser parser(stream, class_name, loader_data, protection_domain, ! NULL, // unsafe_anonymous_host ! NULL, // cp_patches ! false, // is_hidden ! false, // can_access_vm_annotations ClassFileParser::BROADCAST, // publicity level CHECK_NULL); ! ClassInstanceInfo cl_inst_info; ! InstanceKlass* new_ik = parser.create_instance_klass(true, // changed_by_loadhook ! cl_inst_info, // dynamic_nest_host and classData CHECK_NULL); + if (cached_class_file != NULL) { new_ik->set_cached_class_file(cached_class_file); } if (class_loader.is_null()) {
*** 164,176 **** InstanceKlass* KlassFactory::create_from_stream(ClassFileStream* stream, Symbol* name, ClassLoaderData* loader_data, ! Handle protection_domain, ! const InstanceKlass* unsafe_anonymous_host, ! GrowableArray<Handle>* cp_patches, TRAPS) { assert(stream != NULL, "invariant"); assert(loader_data != NULL, "invariant"); assert(THREAD->is_Java_thread(), "must be a JavaThread"); --- 169,179 ---- InstanceKlass* KlassFactory::create_from_stream(ClassFileStream* stream, Symbol* name, ClassLoaderData* loader_data, ! const ClassLoadInfo& cl_info, TRAPS) { assert(stream != NULL, "invariant"); assert(loader_data != NULL, "invariant"); assert(THREAD->is_Java_thread(), "must be a JavaThread");
*** 182,212 **** ClassFileStream* old_stream = stream; // increment counter THREAD->statistical_info().incr_define_class_count(); ! // Skip this processing for VM anonymous classes ! if (unsafe_anonymous_host == NULL) { stream = check_class_file_load_hook(stream, name, loader_data, ! protection_domain, &cached_class_file, CHECK_NULL); } ClassFileParser parser(stream, name, loader_data, ! protection_domain, ! unsafe_anonymous_host, ! cp_patches, ClassFileParser::BROADCAST, // publicity level CHECK_NULL); ! InstanceKlass* result = parser.create_instance_klass(old_stream != stream, CHECK_NULL); ! assert(result == parser.create_instance_klass(old_stream != stream, THREAD), "invariant"); if (result == NULL) { return NULL; } --- 185,225 ---- ClassFileStream* old_stream = stream; // increment counter THREAD->statistical_info().incr_define_class_count(); ! assert(!(cl_info.is_hidden() && (cl_info.unsafe_anonymous_host() != NULL)), ! "hidden class has an anonymous host"); ! ! // Skip this processing for VM hidden or anonymous classes ! if (!cl_info.is_hidden() && (cl_info.unsafe_anonymous_host() == NULL)) { stream = check_class_file_load_hook(stream, name, loader_data, ! cl_info.protection_domain(), &cached_class_file, CHECK_NULL); } ClassFileParser parser(stream, name, loader_data, ! cl_info.protection_domain(), ! cl_info.unsafe_anonymous_host(), ! cl_info.cp_patches(), ! cl_info.is_hidden(), ! cl_info.can_access_vm_annotations(), ClassFileParser::BROADCAST, // publicity level CHECK_NULL); ! const ClassInstanceInfo* cl_inst_info = cl_info.class_hidden_info_ptr(); ! InstanceKlass* result = parser.create_instance_klass(old_stream != stream, *cl_inst_info, CHECK_NULL); ! #ifdef ASSERT ! // Need a NULL dynamic_nest_host here otherwise set_nest_host() may assert. ! ClassInstanceInfo cl_inst_info_null(NULL, cl_inst_info->class_data()); ! assert(result == parser.create_instance_klass(old_stream != stream, cl_inst_info_null, THREAD), "invariant"); ! #endif if (result == NULL) { return NULL; }
< prev index next >