void EntryActivation::iterate(OopVisitor* visitor) { #if USE_OOP_VISITOR Oop::iterate(visitor); { NamedField id("length", true); visitor->do_int(&id, length_offset(), true); } { NamedField id("method", true); visitor->do_oop(&id, method_offset(), true); } { NamedField id("next", true); visitor->do_oop(&id, next_offset(), true); } #if ENABLE_REFLECTION { NamedField id("return_point", true); id.set_hex_output(true); id.set_is_pointer(true); visitor->do_uint(&id, return_point_offset(), true); } #endif for (int index = 0; index < length(); index++) { IndexableField id(index, true); // visitor->do_int(&id, tag_offset(index), true); switch(tag_at(index)) { case float_tag: visitor->do_float(&id, value_offset(index), true); break; case obj_tag: visitor->do_oop(&id, value_offset(index), true); break; default: visitor->do_int(&id, value_offset(index), true); break; } } #endif }
BasicType ConstantPool::resolved_virtual_method_at(int index, int& vtable_index, int& class_id) const { GUARANTEE(tag_at(index).is_resolved_virtual_method(), "Corrupt constant pool"); vtable_index = extract_low_jushort_at(index); class_id = extract_high_jushort_at(index); return ConstantTag::resolved_virtual_method_type(tag_value_at(index)); }
// Print this EntryActivation and all other EntryActivation's that follow it. void EntryActivation::print_list_on(Stream* st, int indent, int index) { #if USE_DEBUG_PRINTING int last_indent = st->indentation(); st->set_indentation(indent); st->indent(); st->print("[%d] ", index); Method m = method(); m.print_value_on(st); st->cr(); for (int i = 0; i < length(); i++) { st->indent(); st->print(" "); switch(tag_at(i)) { case float_tag: st->print("(float) %f", jvm_f2d(float_at(i))); break; case double_tag: st->print("(double) %d", double_at(i)); i++; break; case long_tag: st->print("(long) "); st->print(OsMisc_jlong_format_specifier(), long_at(i)); i++; break; case obj_tag: { st->print("(obj) "); Oop obj = obj_at(i); obj.print_value_on(st); } break; case int_tag: st->print("(int) %d", int_at(i)); break; default: SHOULD_NOT_REACH_HERE(); } st->cr(); } EntryActivation mynext = next(); if (mynext.not_null()) { mynext.print_list_on(st, indent, index+1); } st->set_indentation(last_indent); #endif }