void
ObjectReferenceImpl::print_value_from_address(Oop *p, jint field_offset, jbyte tag)
{

  if (tag == JDWP_Tag_OBJECT || tag == JDWP_Tag_ARRAY) {
    Oop::Raw o = p->obj_field(field_offset);
    tag = JavaDebugger::get_jdwp_tag(&o);
  }

  tty->print("Tag: %c", tag);

  switch(tag) { 
  case JDWP_Tag_DOUBLE: 
    tty->print(" Data: %lf", p->double_field(field_offset));  
    break;
  case JDWP_Tag_LONG:
    tty->print(" Data: %ld", p->long_field(field_offset));
    break;

  case JDWP_Tag_BYTE:
    tty->print(" Data: %c", p->byte_field(field_offset));
    break;

  case JDWP_Tag_CHAR:
    tty->print(" Data: 0x%hx", p->char_field(field_offset));
    break;

  case JDWP_Tag_INT:
    tty->print(" Data: %d", p->int_field(field_offset));
    break;
  case JDWP_Tag_FLOAT:
    tty->print(" Data: %f", jvm_f2d(p->float_field(field_offset)));
    break;
 
  case JDWP_Tag_SHORT:
    tty->print(" Data: %hu", p->short_field(field_offset));
    break;
    
  case JDWP_Tag_BOOLEAN:
    if (p->bool_field(field_offset) == true) { 
      tty->print(" Data: True");
    } else {
      tty->print(" Data: False");
    }
    break;

  case JDWP_Tag_VOID:  // happens with function return values
    // write nothing
    break;

  default:
    {
      UsingFastOops fast_oops;

      Oop::Fast o = p->obj_field(field_offset);
      tty->print(" Data: 0x%x", o.obj());
    }
    break;
  }
}
Esempio n. 2
0
// 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
}
void BytecodePrintClosure::push_float(jfloat value JVM_TRAPS) {
  JVM_IGNORE_TRAPS;
  _st->print_double(jvm_f2d(value));
}