< 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 >