< prev index next > src/hotspot/share/classfile/classFileParser.cpp
Print this page
Symbol* const name = cp->symbol_at(class_index);
const unsigned int name_len = name->utf8_length();
if (name->is_Q_signature()) {
cp->unresolved_qdescriptor_at_put(index, class_index, num_klasses++);
} else {
+ if (name->is_L_signature()) {
+ check_property(_lenvelope_mode == lenvelope_unknown_mode || AllowLEnvelopesInCCI,
+ "[L-envelope forbidden mode] Illegal use of L-envelope in CONSTANT_Class_info index %u in class file %s",
+ class_index, CHECK);
+ _lenvelope_mode = lenvelope_required_mode;
+ } else {
+ check_property(_lenvelope_mode == lenvelope_unknown_mode || _lenvelope_mode == lenvelope_forbidden_mode,
+ "[L-envelope required mode] Missing L-envelope in CONSTANT_Class_info index %u in class file %s",
+ class_index, CHECK);
+ _lenvelope_mode = lenvelope_forbidden_mode;
+ }
cp->unresolved_klass_at_put(index, class_index, num_klasses++);
}
break;
}
case JVM_CONSTANT_StringIndex: {
void ClassFileParser::update_class_name(Symbol* new_class_name) {
// Decrement the refcount in the old name, since we're clobbering it.
_class_name->decrement_refcount();
! _class_name = new_class_name;
! // Increment the refcount of the new name.
! // Now the ClassFileParser owns this name and will decrement in
! // the destructor.
! _class_name->increment_refcount();
}
// For an unsafe anonymous class that is in the unnamed package, move it to its host class's
// package by prepending its host class's package name to its class name and setting
void ClassFileParser::update_class_name(Symbol* new_class_name) {
// Decrement the refcount in the old name, since we're clobbering it.
_class_name->decrement_refcount();
! if (new_class_name->is_L_signature() || new_class_name->is_Q_signature()) {
! new_class_name = new_class_name->fundamental_name(Thread::current());
! _class_name = new_class_name;
! } else {
! _class_name = new_class_name;
+ // Increment the refcount of the new name.
+ // Now the ClassFileParser owns this name and will decrement in
+ // the destructor.
+ _class_name->increment_refcount();
+ }
}
// For an unsafe anonymous class that is in the unnamed package, move it to its host class's
// package by prepending its host class's package name to its class name and setting
_is_naturally_atomic(false),
_is_declared_atomic(false),
_has_finalizer(false),
_has_empty_finalizer(false),
_has_vanilla_constructor(false),
! _max_bootstrap_specifier_index(-1) {
_class_name = name != NULL ? name : vmSymbols::unknown_class_name();
_class_name->increment_refcount();
assert(THREAD->is_Java_thread(), "invariant");
_is_naturally_atomic(false),
_is_declared_atomic(false),
_has_finalizer(false),
_has_empty_finalizer(false),
_has_vanilla_constructor(false),
! _max_bootstrap_specifier_index(-1),
+ _lenvelope_mode(lenvelope_unknown_mode) {
_class_name = name != NULL ? name : vmSymbols::unknown_class_name();
_class_name->increment_refcount();
assert(THREAD->is_Java_thread(), "invariant");
< prev index next >