Refactor val_print and common_val_print
authorTom Tromey <tom@tromey.com>
Fri, 13 Mar 2020 23:39:52 +0000 (17:39 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 14 Mar 2020 00:03:39 +0000 (18:03 -0600)
This changes val_print and common_val_print to use a new helper
function.  A theme in the coming patches is that calls to val_print
itself should be removed.  This is the first such patch; at the end of
the series, we'll remove val_print and simplify do_val_print.

gdb/ChangeLog
2020-03-13  Tom Tromey  <tom@tromey.com>

* valprint.c (do_val_print): New function, from val_print.
(val_print): Use do_val_print.
(common_val_print): Use do_val_print.

gdb/ChangeLog
gdb/valprint.c

index 13f186e03b440aabe0c4f19bbf8f826a8d8f94b8..2a2b29887f994bc9d6384f7926dddf48c3cfc49f 100644 (file)
@@ -1,3 +1,9 @@
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+       * valprint.c (do_val_print): New function, from val_print.
+       (val_print): Use do_val_print.
+       (common_val_print): Use do_val_print.
+
 2020-03-13  Tom Tromey  <tom@tromey.com>
 
        * valprint.c (value_print): Use scoped_value_mark.
index 4383915de73443b1287e04c4b57a91c04d44d1bf..66da0e607bac1a49373936b97b63d66ffa422321 100644 (file)
@@ -1033,31 +1033,17 @@ generic_val_print (struct type *type,
     }
 }
 
-/* Print using the given LANGUAGE the data of type TYPE located at
-   VAL's contents buffer + EMBEDDED_OFFSET (within GDB), which came
-   from the inferior at address ADDRESS + EMBEDDED_OFFSET, onto
-   stdio stream STREAM according to OPTIONS.  VAL is the whole object
-   that came from ADDRESS.
-
-   The language printers will pass down an adjusted EMBEDDED_OFFSET to
-   further helper subroutines as subfields of TYPE are printed.  In
-   such cases, VAL is passed down unadjusted, so
-   that VAL can be queried for metadata about the contents data being
-   printed, using EMBEDDED_OFFSET as an offset into VAL's contents
-   buffer.  For example: "has this field been optimized out", or "I'm
-   printing an object while inspecting a traceframe; has this
-   particular piece of data been collected?".
+/* Helper function for val_print and common_val_print that does the
+   work.  Arguments are as to val_print, but FULL_VALUE, if given, is
+   the value to be printed.  */
 
-   RECURSE indicates the amount of indentation to supply before
-   continuation lines; this amount is roughly twice the value of
-   RECURSE.  */
-
-void
-val_print (struct type *type, LONGEST embedded_offset,
-          CORE_ADDR address, struct ui_file *stream, int recurse,
-          struct value *val,
-          const struct value_print_options *options,
-          const struct language_defn *language)
+static void
+do_val_print (struct value *full_value,
+             struct type *type, LONGEST embedded_offset,
+             CORE_ADDR address, struct ui_file *stream, int recurse,
+             struct value *val,
+             const struct value_print_options *options,
+             const struct language_defn *language)
 {
   int ret = 0;
   struct value_print_options local_opts = *options;
@@ -1117,6 +1103,36 @@ val_print (struct type *type, LONGEST embedded_offset,
     }
 }
 
+/* Print using the given LANGUAGE the data of type TYPE located at
+   VAL's contents buffer + EMBEDDED_OFFSET (within GDB), which came
+   from the inferior at address ADDRESS + EMBEDDED_OFFSET, onto
+   stdio stream STREAM according to OPTIONS.  VAL is the whole object
+   that came from ADDRESS.
+
+   The language printers will pass down an adjusted EMBEDDED_OFFSET to
+   further helper subroutines as subfields of TYPE are printed.  In
+   such cases, VAL is passed down unadjusted, so
+   that VAL can be queried for metadata about the contents data being
+   printed, using EMBEDDED_OFFSET as an offset into VAL's contents
+   buffer.  For example: "has this field been optimized out", or "I'm
+   printing an object while inspecting a traceframe; has this
+   particular piece of data been collected?".
+
+   RECURSE indicates the amount of indentation to supply before
+   continuation lines; this amount is roughly twice the value of
+   RECURSE.  */
+
+void
+val_print (struct type *type, LONGEST embedded_offset,
+          CORE_ADDR address, struct ui_file *stream, int recurse,
+          struct value *val,
+          const struct value_print_options *options,
+          const struct language_defn *language)
+{
+  do_val_print (nullptr, type, embedded_offset, address, stream,
+               recurse, val, options, language);
+}
+
 /* See valprint.h.  */
 
 bool
@@ -1214,10 +1230,10 @@ common_val_print (struct value *val, struct ui_file *stream, int recurse,
   if (value_lazy (val))
     value_fetch_lazy (val);
 
-  val_print (value_type (val),
-            value_embedded_offset (val), value_address (val),
-            stream, recurse,
-            val, options, language);
+  do_val_print (val, value_type (val),
+               value_embedded_offset (val), value_address (val),
+               stream, recurse,
+               val, options, language);
 }
 
 /* Print on stream STREAM the value VAL according to OPTIONS.  The value