diff options
author | Tom Tromey <tom@tromey.com> | 2020-03-13 17:39:52 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2020-03-13 18:03:39 -0600 |
commit | b0c26e99f50d6926dd628ec51c1e9a037c521ab5 (patch) | |
tree | 3ca0e751437bd63d31d274560fa0fb87e1f393ab /gdb/valprint.c | |
parent | ce3acbe9fa876647649cc88f94264a5c56bf46a1 (diff) | |
download | binutils-gdb-b0c26e99f50d6926dd628ec51c1e9a037c521ab5.tar.gz |
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 <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.
Diffstat (limited to 'gdb/valprint.c')
-rw-r--r-- | gdb/valprint.c | 72 |
1 files changed, 44 insertions, 28 deletions
diff --git a/gdb/valprint.c b/gdb/valprint.c index 4383915de73..66da0e607ba 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 |