mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field
Fold instanceKlass::_enclosing_method_class_index and instanceKlass::_enclosing_method_method_index into the instanceKlass::_inner_classes array. Reviewed-by: never, coleenp
This commit is contained in:
parent
db0efee3d4
commit
b9e6895d3a
11 changed files with 297 additions and 142 deletions
|
@ -292,8 +292,8 @@ void JvmtiClassFileReconstituter::write_signature_attribute(u2 generic_signature
|
|||
|
||||
// Compute the number of entries in the InnerClasses attribute
|
||||
u2 JvmtiClassFileReconstituter::inner_classes_attribute_length() {
|
||||
typeArrayOop inner_class_list = ikh()->inner_classes();
|
||||
return (inner_class_list == NULL) ? 0 : inner_class_list->length();
|
||||
InnerClassesIterator iter(ikh());
|
||||
return iter.length();
|
||||
}
|
||||
|
||||
// Write an annotation attribute. The VM stores them in raw form, so all we need
|
||||
|
@ -324,26 +324,20 @@ void JvmtiClassFileReconstituter::write_annotations_attribute(const char* attr_n
|
|||
// JVMSpec| } classes[number_of_classes];
|
||||
// JVMSpec| }
|
||||
void JvmtiClassFileReconstituter::write_inner_classes_attribute(int length) {
|
||||
typeArrayOop inner_class_list = ikh()->inner_classes();
|
||||
guarantee(inner_class_list != NULL && inner_class_list->length() == length,
|
||||
InnerClassesIterator iter(ikh());
|
||||
guarantee(iter.length() != 0 && iter.length() == length,
|
||||
"caller must check");
|
||||
typeArrayHandle inner_class_list_h(thread(), inner_class_list);
|
||||
assert (length % instanceKlass::inner_class_next_offset == 0, "just checking");
|
||||
u2 entry_count = length / instanceKlass::inner_class_next_offset;
|
||||
u4 size = 2 + entry_count * (2+2+2+2);
|
||||
|
||||
write_attribute_name_index("InnerClasses");
|
||||
write_u4(size);
|
||||
write_u2(entry_count);
|
||||
for (int i = 0; i < length; i += instanceKlass::inner_class_next_offset) {
|
||||
write_u2(inner_class_list_h->ushort_at(
|
||||
i + instanceKlass::inner_class_inner_class_info_offset));
|
||||
write_u2(inner_class_list_h->ushort_at(
|
||||
i + instanceKlass::inner_class_outer_class_info_offset));
|
||||
write_u2(inner_class_list_h->ushort_at(
|
||||
i + instanceKlass::inner_class_inner_name_offset));
|
||||
write_u2(inner_class_list_h->ushort_at(
|
||||
i + instanceKlass::inner_class_access_flags_offset));
|
||||
for (; !iter.done(); iter.next()) {
|
||||
write_u2(iter.inner_class_info_index());
|
||||
write_u2(iter.outer_class_info_index());
|
||||
write_u2(iter.inner_name_index());
|
||||
write_u2(iter.inner_access_flags());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue