Introduce value_print_scalar_formatted
This introduces a value_print_scalar_formatted, which is an analogue of val_print_scalar_formatted that uses the value API. gdb/ChangeLog 2020-03-13 Tom Tromey <tom@tromey.com> * valprint.h (value_print_scalar_formatted): Declare. * valprint.c (value_print_scalar_formatted): New function.
This commit is contained in:
parent
156bfec999
commit
4f9ae81013
|
@ -1,3 +1,8 @@
|
|||
2020-03-13 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* valprint.h (value_print_scalar_formatted): Declare.
|
||||
* valprint.c (value_print_scalar_formatted): New function.
|
||||
|
||||
2020-03-13 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* valprint.h (generic_value_print): Declare.
|
||||
|
|
|
@ -1394,6 +1394,46 @@ val_print_scalar_formatted (struct type *type,
|
|||
options, size, stream);
|
||||
}
|
||||
|
||||
/* See valprint.h. */
|
||||
|
||||
void
|
||||
value_print_scalar_formatted (struct value *val,
|
||||
const struct value_print_options *options,
|
||||
int size,
|
||||
struct ui_file *stream)
|
||||
{
|
||||
struct type *type = check_typedef (value_type (val));
|
||||
|
||||
gdb_assert (val != NULL);
|
||||
|
||||
/* If we get here with a string format, try again without it. Go
|
||||
all the way back to the language printers, which may call us
|
||||
again. */
|
||||
if (options->format == 's')
|
||||
{
|
||||
struct value_print_options opts = *options;
|
||||
opts.format = 0;
|
||||
opts.deref_ref = 0;
|
||||
common_val_print (val, stream, 0, &opts, current_language);
|
||||
return;
|
||||
}
|
||||
|
||||
/* value_contents_for_printing fetches all VAL's contents. They are
|
||||
needed to check whether VAL is optimized-out or unavailable
|
||||
below. */
|
||||
const gdb_byte *valaddr = value_contents_for_printing (val);
|
||||
|
||||
/* A scalar object that does not have all bits available can't be
|
||||
printed, because all bits contribute to its representation. */
|
||||
if (value_bits_any_optimized_out (val, 0,
|
||||
TARGET_CHAR_BIT * TYPE_LENGTH (type)))
|
||||
val_print_optimized_out (val, stream);
|
||||
else if (!value_bytes_available (val, 0, TYPE_LENGTH (type)))
|
||||
val_print_unavailable (stream);
|
||||
else
|
||||
print_scalar_formatted (valaddr, type, options, size, stream);
|
||||
}
|
||||
|
||||
/* Print a number according to FORMAT which is one of d,u,x,o,b,h,w,g.
|
||||
The raison d'etre of this function is to consolidate printing of
|
||||
LONG_LONG's into this one function. The format chars b,h,w,g are
|
||||
|
|
|
@ -141,6 +141,16 @@ extern void val_print_scalar_formatted (struct type *,
|
|||
int,
|
||||
struct ui_file *);
|
||||
|
||||
/* Print a scalar according to OPTIONS and SIZE on STREAM. Format 'i'
|
||||
is not supported at this level.
|
||||
|
||||
This is how the elements of an array or structure are printed
|
||||
with a format. */
|
||||
|
||||
extern void value_print_scalar_formatted
|
||||
(struct value *val, const struct value_print_options *options,
|
||||
int size, struct ui_file *stream);
|
||||
|
||||
extern void print_binary_chars (struct ui_file *, const gdb_byte *,
|
||||
unsigned int, enum bfd_endian, bool);
|
||||
|
||||
|
|
Loading…
Reference in New Issue