< prev index next >
src/share/vm/prims/jvmtiClassFileReconstituter.cpp
Print this page
rev 4134 : 7178145: Change constMethodOop::_exception_table to optionally inlined u2 table.
Summary: Change constMethodOop::_exception_table to optionally inlined u2 table.
Reviewed-by: bdelsart, coleenp, kamg
*** 189,222 ****
// }
attr_size += 2 + 4 + 2 + local_variable_table_length * (2 + 2 + 2 + 2 + 2);
}
}
! typeArrayHandle exception_table(thread(), const_method->exception_table());
! int exception_table_length = exception_table->length();
! int exception_table_entries = exception_table_length / 4;
int code_size = const_method->code_size();
int size =
2+2+4 + // max_stack, max_locals, code_length
code_size + // code
2 + // exception_table_length
! (2+2+2+2) * exception_table_entries + // exception_table
2 + // attributes_count
attr_size; // attributes
write_attribute_name_index("Code");
write_u4(size);
write_u2(method->max_stack());
write_u2(method->max_locals());
write_u4(code_size);
copy_bytecodes(method, (unsigned char*)writeable_address(code_size));
! write_u2(exception_table_entries);
! for (int index = 0; index < exception_table_length; ) {
! write_u2(exception_table->int_at(index++));
! write_u2(exception_table->int_at(index++));
! write_u2(exception_table->int_at(index++));
! write_u2(exception_table->int_at(index++));
}
write_u2(attr_count);
if (line_num_cnt != 0) {
write_line_number_table_attribute(method, line_num_cnt);
}
--- 189,221 ----
// }
attr_size += 2 + 4 + 2 + local_variable_table_length * (2 + 2 + 2 + 2 + 2);
}
}
! ExceptionTable exception_table(method());
! int exception_table_length = exception_table.length();
int code_size = const_method->code_size();
int size =
2+2+4 + // max_stack, max_locals, code_length
code_size + // code
2 + // exception_table_length
! (2+2+2+2) * exception_table_length + // exception_table
2 + // attributes_count
attr_size; // attributes
write_attribute_name_index("Code");
write_u4(size);
write_u2(method->max_stack());
write_u2(method->max_locals());
write_u4(code_size);
copy_bytecodes(method, (unsigned char*)writeable_address(code_size));
! write_u2(exception_table_length);
! for (int index = 0; index < exception_table_length; index++) {
! write_u2(exception_table.start_pc(index));
! write_u2(exception_table.end_pc(index));
! write_u2(exception_table.handler_pc(index));
! write_u2(exception_table.catch_type_index(index));
}
write_u2(attr_count);
if (line_num_cnt != 0) {
write_line_number_table_attribute(method, line_num_cnt);
}
< prev index next >