From b0c26e99f50d6926dd628ec51c1e9a037c521ab5 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 13 Mar 2020 17:39:52 -0600 Subject: Refactor val_print and common_val_print 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 * 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 | 6 +++++ gdb/valprint.c | 72 +++++++++++++++++++++++++++++++++++----------------------- 2 files changed, 50 insertions(+), 28 deletions(-) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 13f186e..2a2b298 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2020-03-13 Tom Tromey + * 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 + * valprint.c (value_print): Use scoped_value_mark. 2020-03-13 Tom de Vries diff --git a/gdb/valprint.c b/gdb/valprint.c index 4383915..66da0e6 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -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 -- cgit v1.1