< prev index next >
src/share/vm/ci/ciInstanceKlass.cpp
Print this page
@@ -702,11 +702,15 @@
void do_field(fieldDescriptor* fd) {
if (fd->is_final() && !fd->has_initial_value()) {
ResourceMark rm;
InstanceKlass* holder = fd->field_holder();
oop mirror = holder->java_mirror();
- _out->print("staticfield %s %s %s ", _holder, fd->name()->as_quoted_ascii(), fd->signature()->as_quoted_ascii());
+ _out->print("staticfield %s %s ", _holder, fd->name()->as_quoted_ascii());
+ BasicType bt = fd->field_type();
+ if (bt != T_OBJECT && bt != T_ARRAY) {
+ _out->print("%s ", fd->signature()->as_quoted_ascii());
+ }
do_field_helper(fd, mirror, false);
_out->cr();
}
}
};
@@ -722,12 +726,13 @@
_out->print(" ");
}
};
void StaticFieldPrinter::do_field_helper(fieldDescriptor* fd, oop mirror, bool flattened) {
- switch (fd->field_type()) {
- case T_BYTE: _out->print_cr("%d", mirror->byte_field(fd->offset())); break;
+ BasicType bt = fd->field_type();
+ switch (bt) {
+ case T_BYTE: _out->print("%d", mirror->byte_field(fd->offset())); break;
case T_BOOLEAN: _out->print("%d", mirror->bool_field(fd->offset())); break;
case T_SHORT: _out->print("%d", mirror->short_field(fd->offset())); break;
case T_CHAR: _out->print("%d", mirror->char_field(fd->offset())); break;
case T_INT: _out->print("%d", mirror->int_field(fd->offset())); break;
case T_LONG: _out->print(INT64_FORMAT, (int64_t)(mirror->long_field(fd->offset()))); break;
@@ -739,40 +744,27 @@
case T_DOUBLE: {
double d = mirror->double_field(fd->offset());
_out->print(INT64_FORMAT, *(int64_t*)&d);
break;
}
- case T_ARRAY: {
- oop value = mirror->obj_field_acquire(fd->offset());
- if (value == NULL) {
- _out->print("null");
- } else {
- typeArrayOop ta = (typeArrayOop)value;
- _out->print("%d", ta->length());
- if (value->is_objArray()) {
- objArrayOop oa = (objArrayOop)value;
- const char* klass_name = value->klass()->name()->as_quoted_ascii();
- _out->print(" %s", klass_name);
- }
- }
- break;
- }
+ case T_ARRAY:
case T_OBJECT: {
oop value = mirror->obj_field_acquire(fd->offset());
if (value == NULL) {
_out->print("null");
- } else if (value->is_instance()) {
+ } else {
+ _out->print("%s", value->klass()->signature_name());
+ if (value->is_array()) {
+ _out->print(" %d", ((arrayOop)value)->length());
+ } else {
+ assert(value->is_instance() && bt == T_OBJECT, "what else?");
if (value->is_a(SystemDictionary::String_klass())) {
- _out->print("\"");
+ _out->print(" \"");
_out->print_raw(java_lang_String::as_quoted_ascii(value));
_out->print("\"");
- } else {
- const char* klass_name = value->klass()->name()->as_quoted_ascii();
- _out->print("%s", klass_name);
}
- } else {
- ShouldNotReachHere();
+ }
}
break;
}
case T_VALUETYPE: {
ResetNoHandleMark rnhm;
< prev index next >