src/share/vm/classfile/classFileParser.cpp

changeset 9931
fd44df5e3bc3
parent 9572
624a0741915c
parent 9859
7d05a422d710
child 10015
eb7ce841ccec
     1.1 --- a/src/share/vm/classfile/classFileParser.cpp	Wed Oct 14 16:43:13 2020 +0800
     1.2 +++ b/src/share/vm/classfile/classFileParser.cpp	Wed Oct 14 17:44:48 2020 +0800
     1.3 @@ -3884,14 +3884,14 @@
     1.4    access_flags.set_flags(flags);
     1.5  
     1.6    // This class and superclass
     1.7 -  u2 this_class_index = cfs->get_u2_fast();
     1.8 +  _this_class_index = cfs->get_u2_fast();
     1.9    check_property(
    1.10 -    valid_cp_range(this_class_index, cp_size) &&
    1.11 -      cp->tag_at(this_class_index).is_unresolved_klass(),
    1.12 +    valid_cp_range(_this_class_index, cp_size) &&
    1.13 +      cp->tag_at(_this_class_index).is_unresolved_klass(),
    1.14      "Invalid this class index %u in constant pool in class file %s",
    1.15 -    this_class_index, CHECK_(nullHandle));
    1.16 -
    1.17 -  Symbol*  class_name  = cp->unresolved_klass_at(this_class_index);
    1.18 +    _this_class_index, CHECK_(nullHandle));
    1.19 +
    1.20 +  Symbol*  class_name  = cp->unresolved_klass_at(_this_class_index);
    1.21    assert(class_name != NULL, "class_name can't be null");
    1.22  
    1.23    // It's important to set parsed_name *before* resolving the super class.
    1.24 @@ -4122,9 +4122,9 @@
    1.25      // that changes, then InstanceKlass::idnum_can_increment()
    1.26      // has to be changed accordingly.
    1.27      this_klass->set_initial_method_idnum(methods->length());
    1.28 -    this_klass->set_name(cp->klass_name_at(this_class_index));
    1.29 +    this_klass->set_name(cp->klass_name_at(_this_class_index));
    1.30      if (is_anonymous())  // I am well known to myself
    1.31 -      cp->klass_at_put(this_class_index, this_klass()); // eagerly resolve
    1.32 +      cp->klass_at_put(_this_class_index, this_klass()); // eagerly resolve
    1.33  
    1.34      this_klass->set_minor_version(minor_version);
    1.35      this_klass->set_major_version(major_version);
    1.36 @@ -4262,6 +4262,8 @@
    1.37      preserve_this_klass = this_klass();
    1.38    }
    1.39  
    1.40 +  JFR_ONLY(INIT_ID(preserve_this_klass);)
    1.41 +
    1.42    // Create new handle outside HandleMark (might be needed for
    1.43    // Extended Class Redefinition)
    1.44    instanceKlassHandle this_klass (THREAD, preserve_this_klass);
    1.45 @@ -5273,3 +5275,25 @@
    1.46    }
    1.47    return NULL;
    1.48  }
    1.49 +
    1.50 +#if INCLUDE_JFR
    1.51 +
    1.52 +// Caller responsible for ResourceMark
    1.53 +// clone stream with rewound position
    1.54 +ClassFileStream* ClassFileParser::clone_stream() const {
    1.55 +  assert(_stream != NULL, "invariant");
    1.56 +
    1.57 +  return _stream->clone();
    1.58 +}
    1.59 +
    1.60 +void ClassFileParser::set_klass_to_deallocate(InstanceKlass* klass) {
    1.61 +#ifdef ASSERT
    1.62 +  if (klass != NULL) {
    1.63 +    assert(NULL == _klass, "leaking?");
    1.64 +  }
    1.65 +#endif
    1.66 +
    1.67 +  _klass = klass;
    1.68 +}
    1.69 +
    1.70 +#endif // INCLUDE_JFR

mercurial