[11/55] Introduce generic_value_print
Commit Message
This introduces generic_value_print, which is a value-based analogue
to generic_val_print. For now this is unused and simply calls
generic_val_print, but subsequent patches will both change this
function to work using the value API directly, and convert callers of
generic_val_print to call this instead.
gdb/ChangeLog
2019-12-08 Tom Tromey <tom@tromey.com>
* valprint.h (generic_value_print): Declare.
* valprint.c (generic_value_print): New function.
Change-Id: I00b9ef91c1f3bf351b0e13e9873b849e80dfd944
---
gdb/ChangeLog | 5 +++++
gdb/valprint.c | 12 ++++++++++++
gdb/valprint.h | 11 +++++++++++
3 files changed, 28 insertions(+)
Comments
On Sun, Dec 8, 2019 at 1:33 PM Tom Tromey <tom@tromey.com> wrote:
>
> This introduces generic_value_print, which is a value-based analogue
> to generic_val_print. For now this is unused and simply calls
> generic_val_print, but subsequent patches will both change this
> function to work using the value API directly, and convert callers of
> generic_val_print to call this instead.
I'm really not familiar with this code at all, but since this is new,
should this be a member function on struct value?
Christian
> gdb/ChangeLog
> 2019-12-08 Tom Tromey <tom@tromey.com>
>
> * valprint.h (generic_value_print): Declare.
> * valprint.c (generic_value_print): New function.
>
> Change-Id: I00b9ef91c1f3bf351b0e13e9873b849e80dfd944
> ---
> gdb/ChangeLog | 5 +++++
> gdb/valprint.c | 12 ++++++++++++
> gdb/valprint.h | 11 +++++++++++
> 3 files changed, 28 insertions(+)
>
> diff --git a/gdb/valprint.c b/gdb/valprint.c
> index d595a1d54e6..0e13e2b2d62 100644
> --- a/gdb/valprint.c
> +++ b/gdb/valprint.c
> @@ -1007,6 +1007,18 @@ generic_val_print (struct type *type,
> }
> }
>
> +/* See valprint.h. */
> +
> +void
> +generic_value_print (struct value *val, struct ui_file *stream, int recurse,
> + const struct value_print_options *options,
> + const struct generic_val_print_decorations *decorations)
> +{
> + generic_val_print (value_type (val), value_embedded_offset (val),
> + value_address (val), stream, recurse, val, options,
> + decorations);
> +}
> +
> /* 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. */
> diff --git a/gdb/valprint.h b/gdb/valprint.h
> index c63ac8de19b..e4b90404fa2 100644
> --- a/gdb/valprint.h
> +++ b/gdb/valprint.h
> @@ -211,6 +211,17 @@ extern void generic_val_print (struct type *type,
> const struct value_print_options *options,
> const struct generic_val_print_decorations *);
>
> +/* Print a value in a generic way. VAL is the value, STREAM is where
> + to print it, RECURSE is the recursion depth, OPTIONS describe how
> + the printing should be done, and D is the language-specific
> + decorations object. Note that structs and unions cannot be printed
> + by this function. */
> +
> +extern void generic_value_print (struct value *val, struct ui_file *stream,
> + int recurse,
> + const struct value_print_options *options,
> + const struct generic_val_print_decorations *d);
> +
> extern void generic_emit_char (int c, struct type *type, struct ui_file *stream,
> int quoter, const char *encoding);
>
> --
> 2.17.2
>
Christian> I'm really not familiar with this code at all, but since this is new,
Christian> should this be a member function on struct value?
Possibly, but there aren't really methods there now (it's opaque
currently), and anyway for this series I wanted to try to keep each
patch reasonably close to the existing code, to make the transition more
clear.
FWIW once I had some scripts to try to convert struct value to be more
like a class. This is difficult to do in its entirety though. There
are many potential methods.
Tom
@@ -1007,6 +1007,18 @@ generic_val_print (struct type *type,
}
}
+/* See valprint.h. */
+
+void
+generic_value_print (struct value *val, struct ui_file *stream, int recurse,
+ const struct value_print_options *options,
+ const struct generic_val_print_decorations *decorations)
+{
+ generic_val_print (value_type (val), value_embedded_offset (val),
+ value_address (val), stream, recurse, val, options,
+ decorations);
+}
+
/* 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. */
@@ -211,6 +211,17 @@ extern void generic_val_print (struct type *type,
const struct value_print_options *options,
const struct generic_val_print_decorations *);
+/* Print a value in a generic way. VAL is the value, STREAM is where
+ to print it, RECURSE is the recursion depth, OPTIONS describe how
+ the printing should be done, and D is the language-specific
+ decorations object. Note that structs and unions cannot be printed
+ by this function. */
+
+extern void generic_value_print (struct value *val, struct ui_file *stream,
+ int recurse,
+ const struct value_print_options *options,
+ const struct generic_val_print_decorations *d);
+
extern void generic_emit_char (int c, struct type *type, struct ui_file *stream,
int quoter, const char *encoding);