* printcmd.c (print_formatted): Use val_print_scalar_formatted

instead of print_scalar_formatted.
	(print_scalar_formatted): Don't handle 's' format strings here,
	and add an assertion that we never see such format here.
	* valprint.h (val_print_scalar_formatted): Declare.
	* valprint.c (val_print_scalar_formatted): New.
	* c-valprint.c (c_val_print): Use val_print_scalar_formatted
	instead of print_scalar_formatted.
	* jv-valprint.c (java_val_print): Ditto.
	* p-valprint.c (pascal_val_print): Ditto.
	* ada-valprint.c (ada_val_print_1): Ditto.
	* f-valprint.c (f_val_print): Ditto.
	* infcmd.c (registers_info): Ditto.
	* m2-valprint.c (m2_val_print): Ditto.
This commit is contained in:
Pedro Alves
2011-01-25 17:59:00 +00:00
parent 66d61a4cab
commit ab2188aa2a
11 changed files with 160 additions and 101 deletions

View File

@@ -329,8 +329,11 @@ print_formatted (struct value *val, int size,
else
/* User specified format, so don't look to the the type to
tell us what to do. */
print_scalar_formatted (value_contents (val), type,
options, size, stream);
val_print_scalar_formatted (type,
value_contents_for_printing (val),
value_embedded_offset (val),
val,
options, size, stream);
}
/* Return builtin floating point type of same length as TYPE.
@@ -353,11 +356,8 @@ float_type_from_length (struct type *type)
}
/* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
according to OPTIONS and SIZE on STREAM.
Formats s and i are not supported at this level.
This is how the elements of an array or structure are printed
with a format. */
according to OPTIONS and SIZE on STREAM. Formats s and i are not
supported at this level. */
void
print_scalar_formatted (const void *valaddr, struct type *type,
@@ -369,18 +369,8 @@ print_scalar_formatted (const void *valaddr, struct type *type,
unsigned int len = TYPE_LENGTH (type);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
/* 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;
val_print (type, valaddr, 0, 0, stream, 0, NULL, &opts,
current_language);
return;
}
/* String printing should go through val_print_scalar_formatted. */
gdb_assert (options->format != 's');
if (len > sizeof(LONGEST) &&
(TYPE_CODE (type) == TYPE_CODE_INT