summaryrefslogtreecommitdiff
path: root/gdb/c-valprint.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2020-03-13 17:39:52 -0600
committerTom Tromey <tom@tromey.com>2020-03-13 18:03:41 -0600
commit5083623134c2ac383a8d8412b6d3c530452fda51 (patch)
tree6e7e32b4d28218f64aaa81f6c4a7a4a0e1814354 /gdb/c-valprint.c
parent4f412b6e31369f27725872391a70f0520883701c (diff)
downloadbinutils-gdb-5083623134c2ac383a8d8412b6d3c530452fda51.tar.gz
Rewrite c_value_print_inner
This rewrites c_value_print_inner, copying in the body of c_val_print_inner and adusting as needed. This will form the base of future changes to fully convert this to using the value-based API gdb/ChangeLog 2020-03-13 Tom Tromey <tom@tromey.com> * c-valprint.c (c_value_print_inner): Rewrite.
Diffstat (limited to 'gdb/c-valprint.c')
-rw-r--r--gdb/c-valprint.c63
1 files changed, 61 insertions, 2 deletions
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
index b5ae3fac48f..1fa33efbced 100644
--- a/gdb/c-valprint.c
+++ b/gdb/c-valprint.c
@@ -564,8 +564,67 @@ void
c_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
const struct value_print_options *options)
{
- c_val_print (value_type (val), value_embedded_offset (val),
- value_address (val), stream, recurse, val, options);
+ struct type *type = value_type (val);
+ struct type *unresolved_type = type;
+ CORE_ADDR address = value_address (val);
+ const gdb_byte *valaddr = value_contents_for_printing (val);
+
+ type = check_typedef (type);
+ switch (TYPE_CODE (type))
+ {
+ case TYPE_CODE_ARRAY:
+ c_val_print_array (type, valaddr, 0, address, stream,
+ recurse, val, options);
+ break;
+
+ case TYPE_CODE_METHODPTR:
+ cplus_print_method_ptr (valaddr, type, stream);
+ break;
+
+ case TYPE_CODE_PTR:
+ c_val_print_ptr (type, valaddr, 0, stream, recurse,
+ val, options);
+ break;
+
+ case TYPE_CODE_UNION:
+ c_val_print_union (type, valaddr, 0, address, stream,
+ recurse, val, options);
+ break;
+
+ case TYPE_CODE_STRUCT:
+ c_val_print_struct (type, valaddr, 0, address, stream,
+ recurse, val, options);
+ break;
+
+ case TYPE_CODE_INT:
+ c_val_print_int (type, unresolved_type, valaddr, 0, stream,
+ val, options);
+ break;
+
+ case TYPE_CODE_MEMBERPTR:
+ c_val_print_memberptr (type, valaddr, 0, address, stream,
+ recurse, val, options);
+ break;
+
+ case TYPE_CODE_REF:
+ case TYPE_CODE_RVALUE_REF:
+ case TYPE_CODE_ENUM:
+ case TYPE_CODE_FLAGS:
+ case TYPE_CODE_FUNC:
+ case TYPE_CODE_METHOD:
+ case TYPE_CODE_BOOL:
+ case TYPE_CODE_RANGE:
+ case TYPE_CODE_FLT:
+ case TYPE_CODE_DECFLOAT:
+ case TYPE_CODE_VOID:
+ case TYPE_CODE_ERROR:
+ case TYPE_CODE_UNDEF:
+ case TYPE_CODE_COMPLEX:
+ case TYPE_CODE_CHAR:
+ default:
+ generic_value_print (val, stream, recurse, options, &c_decorations);
+ break;
+ }
}