[39/55] Rewrite c_value_print_inner

Message ID 20191208182958.10181-40-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey Dec. 8, 2019, 6:29 p.m. UTC
  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
2019-12-08  Tom Tromey  <tom@tromey.com>

	* c-valprint.c (c_value_print_inner): Rewrite.

Change-Id: I128fdc78f22c8014e402f9cacb623216a3b0e4db
---
 gdb/ChangeLog    |  4 +++
 gdb/c-valprint.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 65 insertions(+), 2 deletions(-)
  

Patch

diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
index 410771b03d7..af7a386fb78 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;
+    }
 }