aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
diff options
context:
space:
mode:
authorjiangli <none@none>2012-03-13 13:50:48 -0400
committerjiangli <none@none>2012-03-13 13:50:48 -0400
commitc8d1e1d6fec8ef6477615906d41b3ffbc48dddf6 (patch)
tree528798dc427d79ce740515a35663e06a7fff500f /src/share/vm/prims/jvmtiClassFileReconstituter.cpp
parent9c441831c27bbce63d51feacd7ae45174a09f725 (diff)
7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
Summary: Fold instanceKlass::_enclosing_method_class_index and instanceKlass::_enclosing_method_method_index into the instanceKlass::_inner_classes array. Reviewed-by: never, coleenp Contributed-by: Jiangli Zhou <jiangli.zhou@oracle.com>
Diffstat (limited to 'src/share/vm/prims/jvmtiClassFileReconstituter.cpp')
-rw-r--r--src/share/vm/prims/jvmtiClassFileReconstituter.cpp24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/share/vm/prims/jvmtiClassFileReconstituter.cpp b/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
index af576eb28..d7dfea5a9 100644
--- a/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
+++ b/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
@@ -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());
}
}