本文整理汇总了C++中methodHandle::max_stack方法的典型用法代码示例。如果您正苦于以下问题:C++ methodHandle::max_stack方法的具体用法?C++ methodHandle::max_stack怎么用?C++ methodHandle::max_stack使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类methodHandle
的用法示例。
在下文中一共展示了methodHandle::max_stack方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: write_code_attribute
// Write Code attribute
// JVMSpec| Code_attribute {
// JVMSpec| u2 attribute_name_index;
// JVMSpec| u4 attribute_length;
// JVMSpec| u2 max_stack;
// JVMSpec| u2 max_locals;
// JVMSpec| u4 code_length;
// JVMSpec| u1 code[code_length];
// JVMSpec| u2 exception_table_length;
// JVMSpec| { u2 start_pc;
// JVMSpec| u2 end_pc;
// JVMSpec| u2 handler_pc;
// JVMSpec| u2 catch_type;
// JVMSpec| } exception_table[exception_table_length];
// JVMSpec| u2 attributes_count;
// JVMSpec| attribute_info attributes[attributes_count];
// JVMSpec| }
void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) {
constMethodHandle const_method(thread(), method->constMethod());
u2 line_num_cnt = 0;
int stackmap_len = 0;
// compute number and length of attributes -- FIXME: for now no LVT
int attr_count = 0;
int attr_size = 0;
if (const_method->has_linenumber_table()) {
line_num_cnt = line_number_table_entries(method);
if (line_num_cnt != 0) {
++attr_count;
// Compute the complete size of the line number table attribute:
// LineNumberTable_attribute {
// u2 attribute_name_index;
// u4 attribute_length;
// u2 line_number_table_length;
// { u2 start_pc;
// u2 line_number;
// } line_number_table[line_number_table_length];
// }
attr_size += 2 + 4 + 2 + line_num_cnt * (2 + 2);
}
}
if (method->has_stackmap_table()) {
stackmap_len = method->stackmap_data()->length();
if (stackmap_len != 0) {
++attr_count;
// Compute the size of the stack map table attribute (VM stores raw):
// StackMapTable_attribute {
// u2 attribute_name_index;
// u4 attribute_length;
// u2 number_of_entries;
// stack_map_frame_entries[number_of_entries];
// }
attr_size += 2 + 4 + stackmap_len;
}
}
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);
}
if (stackmap_len != 0) {
write_stackmap_table_attribute(method, stackmap_len);
}
// FIXME: write LVT attribute
}