< prev index next >

src/hotspot/share/classfile/systemDictionary.cpp

Print this page

        

*** 253,263 **** "can not load classes with compiler thread: class=%s, classloader=%s", class_name->as_C_string(), class_loader.is_null() ? "null" : class_loader->klass()->name()->as_C_string()); if (FieldType::is_array(class_name)) { return resolve_array_class_or_null(class_name, class_loader, protection_domain, THREAD); ! } else if (FieldType::is_obj(class_name) || FieldType::is_valuetype(class_name)) { ResourceMark rm(THREAD); // Ignore wrapping L and ;. (and Q and ; for value types); TempNewSymbol name = SymbolTable::new_symbol(class_name->as_C_string() + 1, class_name->utf8_length() - 2, CHECK_NULL); return resolve_instance_class_or_null(name, class_loader, protection_domain, THREAD); --- 253,263 ---- "can not load classes with compiler thread: class=%s, classloader=%s", class_name->as_C_string(), class_loader.is_null() ? "null" : class_loader->klass()->name()->as_C_string()); if (FieldType::is_array(class_name)) { return resolve_array_class_or_null(class_name, class_loader, protection_domain, THREAD); ! } else if (FieldType::is_obj(class_name)) { ResourceMark rm(THREAD); // Ignore wrapping L and ;. (and Q and ; for value types); TempNewSymbol name = SymbolTable::new_symbol(class_name->as_C_string() + 1, class_name->utf8_length() - 2, CHECK_NULL); return resolve_instance_class_or_null(name, class_loader, protection_domain, THREAD);
*** 296,334 **** k = TypeArrayKlass::cast(k)->array_klass(fd.dimension(), CHECK_NULL); } return k; } - // Temporary Minimal Value Type support code. Attempt to load VCC for DVT descriptor - Klass* SystemDictionary::resolve_dvt_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) { - assert(EnableMVT && FieldType::is_dvt_postfix(class_name), "Invariant"); - - ResourceMark rm(THREAD); - // Given a "Q-type" descriptor and EnableMVT, original exception is not so interesting - CLEAR_PENDING_EXCEPTION; - - TempNewSymbol vcc_name = SymbolTable::new_symbol(FieldType::dvt_unmangle_vcc(class_name), CHECK_NULL); - Klass* vcc = do_resolve_instance_class_or_null(vcc_name, class_loader, protection_domain, CHECK_NULL); - if (vcc == NULL) { - return NULL; - } - Klass* dvt = do_resolve_instance_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL); - if ((dvt !=NULL) && dvt->is_value() && (ValueKlass::cast(dvt)->get_vcc_klass() == vcc)) { - return dvt; - } - if (vcc->is_instance_klass() && (!InstanceKlass::cast(vcc)->has_vcc_annotation())) { - static const char not_vcc_msg[] = - "Failed to resolve %s, found possible ValueCapableClass name mangle match is not ValueCapableClass annotated: %s"; - size_t buflen = strlen(not_vcc_msg) + class_name->utf8_length() + vcc_name->utf8_length(); - char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen); - jio_snprintf(buf, buflen, not_vcc_msg, class_name->as_C_string(), vcc_name->as_C_string()); - THROW_MSG_NULL(vmSymbols::java_lang_NoClassDefFoundError(), buf); - } - return NULL; - } - - // Must be called for any super-class or super-interface resolution // during class definition to allow class circularity checking // super-interface callers: // parse_interfaces - for defineClass & jvmtiRedefineClasses // super-class callers: --- 296,305 ----
*** 682,694 **** Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name, Handle class_loader, Handle protection_domain, TRAPS) { Klass* k = do_resolve_instance_class_or_null(name, class_loader, protection_domain, THREAD); - if (EnableMVT && (k == NULL) && FieldType::is_dvt_postfix(name)) { - k = resolve_dvt_or_null(name, class_loader, protection_domain, THREAD); - } return k; } // Be careful when modifying this code: once you have run // placeholders()->find_and_add(PlaceholderTable::LOAD_INSTANCE), --- 653,662 ----
*** 697,707 **** Klass* SystemDictionary::do_resolve_instance_class_or_null(Symbol* name, Handle class_loader, Handle protection_domain, TRAPS) { assert(name != NULL && !FieldType::is_array(name) && ! !FieldType::is_obj(name) && !FieldType::is_valuetype(name), "invalid class name"); EventClassLoad class_load_start_event; HandleMark hm(THREAD); --- 665,675 ---- Klass* SystemDictionary::do_resolve_instance_class_or_null(Symbol* name, Handle class_loader, Handle protection_domain, TRAPS) { assert(name != NULL && !FieldType::is_array(name) && ! !FieldType::is_obj(name), "invalid class name"); EventClassLoad class_load_start_event; HandleMark hm(THREAD);
< prev index next >