< prev index next >

src/hotspot/share/runtime/fieldDescriptor.cpp

Print this page




 182       break;
 183     case T_SHORT:
 184       as_int = obj->short_field(offset());
 185       st->print(" %d", obj->short_field(offset()));
 186       break;
 187     case T_BOOLEAN:
 188       as_int = obj->bool_field(offset());
 189       st->print(" %s", obj->bool_field(offset()) ? "true" : "false");
 190       break;
 191     case T_ARRAY:
 192       st->print(" ");
 193       NOT_LP64(as_int = obj->int_field(offset()));
 194       obj->obj_field(offset())->print_value_on(st);
 195       break;
 196     case T_OBJECT:
 197       st->print(" ");
 198       NOT_LP64(as_int = obj->int_field(offset()));
 199       obj->obj_field(offset())->print_value_on(st);
 200       break;
 201     case T_VALUETYPE:
 202       if (is_flatten()) {
 203         // Resolve klass of flattened value type field
 204         Thread* THREAD = Thread::current();
 205         ResourceMark rm(THREAD);
 206         SignatureStream ss(signature(), false);
 207         Klass* k = ss.as_klass(Handle(THREAD, field_holder()->class_loader()),
 208             Handle(THREAD, field_holder()->protection_domain()),
 209             SignatureStream::ReturnNull, THREAD);
 210         assert(k != NULL && !HAS_PENDING_EXCEPTION, "can resolve klass?");
 211         ValueKlass* vk = ValueKlass::cast(k);
 212         int field_offset = offset() - vk->first_field_offset();
 213         obj = (oop)((address)obj + field_offset);
 214         // Print flattened fields of the value type field
 215         st->print_cr("Flattened value type '%s':", vk->name()->as_C_string());
 216         FieldPrinter print_field(st, obj);
 217         vk->do_nonstatic_fields(&print_field);
 218         return; // Do not print underlying representation
 219       } else {
 220         st->print(" ");
 221         NOT_LP64(as_int = obj->int_field(offset()));
 222         obj->obj_field(offset())->print_value_on(st);


 182       break;
 183     case T_SHORT:
 184       as_int = obj->short_field(offset());
 185       st->print(" %d", obj->short_field(offset()));
 186       break;
 187     case T_BOOLEAN:
 188       as_int = obj->bool_field(offset());
 189       st->print(" %s", obj->bool_field(offset()) ? "true" : "false");
 190       break;
 191     case T_ARRAY:
 192       st->print(" ");
 193       NOT_LP64(as_int = obj->int_field(offset()));
 194       obj->obj_field(offset())->print_value_on(st);
 195       break;
 196     case T_OBJECT:
 197       st->print(" ");
 198       NOT_LP64(as_int = obj->int_field(offset()));
 199       obj->obj_field(offset())->print_value_on(st);
 200       break;
 201     case T_VALUETYPE:
 202       if (is_flattened()) {
 203         // Resolve klass of flattened value type field
 204         Thread* THREAD = Thread::current();
 205         ResourceMark rm(THREAD);
 206         SignatureStream ss(signature(), false);
 207         Klass* k = ss.as_klass(Handle(THREAD, field_holder()->class_loader()),
 208             Handle(THREAD, field_holder()->protection_domain()),
 209             SignatureStream::ReturnNull, THREAD);
 210         assert(k != NULL && !HAS_PENDING_EXCEPTION, "can resolve klass?");
 211         ValueKlass* vk = ValueKlass::cast(k);
 212         int field_offset = offset() - vk->first_field_offset();
 213         obj = (oop)((address)obj + field_offset);
 214         // Print flattened fields of the value type field
 215         st->print_cr("Flattened value type '%s':", vk->name()->as_C_string());
 216         FieldPrinter print_field(st, obj);
 217         vk->do_nonstatic_fields(&print_field);
 218         return; // Do not print underlying representation
 219       } else {
 220         st->print(" ");
 221         NOT_LP64(as_int = obj->int_field(offset()));
 222         obj->obj_field(offset())->print_value_on(st);
< prev index next >