aboutsummaryrefslogtreecommitdiff
path: root/gdb/valprint.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2005-02-28 17:00:49 +0000
committerDaniel Jacobowitz <drow@false.org>2005-02-28 17:00:49 +0000
commit806048c68af789ffb76e44fca706a7915cfdb9aa (patch)
tree83e67e751bcf78f68476c295d662f947d514b9f9 /gdb/valprint.c
parentf67e617a26e6d1efafb752d5047b4ddc33056ab1 (diff)
downloadfsf-binutils-gdb-806048c68af789ffb76e44fca706a7915cfdb9aa.zip
fsf-binutils-gdb-806048c68af789ffb76e44fca706a7915cfdb9aa.tar.gz
fsf-binutils-gdb-806048c68af789ffb76e44fca706a7915cfdb9aa.tar.bz2
* dwarf2loc.c (loclist_read_variable): Set optimized_out
instead of reporting an error. * valprint.c (value_check_printable): New function. (common_val_print): New function. Use value_check_printable. (value_print): Use value_check_printable. * value.h (common_val_print): Add prototype. * c-valprint.c (c_val_print): Use common_val_print. * cp-valprint.c (cp_print_value_fields): Likewise. (cp_print_hpacc_virtual_table_entries): Likewise. * f-valprint.c (f_val_print): Likewise. * jv-valprint.c (java_value_print, java_print_value_fields): Likewise. * scm-valprint.c (scm_value_print): Likewise. * stack.c (print_frame_args): Likewise. * varobj.c (c_value_of_variable): Likewise. * p-valprint.c (pascal_val_print, pascal_value_print): Likewise. (pascal_object_print_value_fields): Likewise. Update call to pascal_object_print_static_field. (pascal_object_print_static_field): Remove TYPE argument. Use common_val_print.
Diffstat (limited to 'gdb/valprint.c')
-rw-r--r--gdb/valprint.c59
1 files changed, 50 insertions, 9 deletions
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 044ed21..bda75ef 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -217,25 +217,66 @@ val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
stream, format, deref_ref, recurse, pretty));
}
-/* Print the value VAL in C-ish syntax on stream STREAM.
- FORMAT is a format-letter, or 0 for print in natural format of data type.
- If the object printed is a string pointer, returns
- the number of string bytes printed. */
+/* Check whether the value VAL is printable. Return 1 if it is;
+ return 0 and print an appropriate error message to STREAM if it
+ is not. */
-int
-value_print (struct value *val, struct ui_file *stream, int format,
- enum val_prettyprint pretty)
+static int
+value_check_printable (struct value *val, struct ui_file *stream)
{
if (val == 0)
{
- printf_filtered (_("<address of value unknown>"));
+ fprintf_filtered (stream, _("<address of value unknown>"));
return 0;
}
+
if (value_optimized_out (val))
{
- printf_filtered (_("<value optimized out>"));
+ fprintf_filtered (stream, _("<value optimized out>"));
return 0;
}
+
+ return 1;
+}
+
+/* Print the value VAL onto stream STREAM according to FORMAT (a
+ letter, or 0 for natural format using TYPE).
+
+ If DEREF_REF is nonzero, then dereference references, otherwise just print
+ them like pointers.
+
+ The PRETTY parameter controls prettyprinting.
+
+ If the data are a string pointer, returns the number of string characters
+ printed.
+
+ This is a preferable interface to val_print, above, because it uses
+ GDB's value mechanism. */
+
+int
+common_val_print (struct value *val, struct ui_file *stream, int format,
+ int deref_ref, int recurse, enum val_prettyprint pretty)
+{
+ if (!value_check_printable (val, stream))
+ return 0;
+
+ return val_print (value_type (val), value_contents_all (val),
+ value_embedded_offset (val), VALUE_ADDRESS (val),
+ stream, format, deref_ref, recurse, pretty);
+}
+
+/* Print the value VAL in C-ish syntax on stream STREAM.
+ FORMAT is a format-letter, or 0 for print in natural format of data type.
+ If the object printed is a string pointer, returns
+ the number of string bytes printed. */
+
+int
+value_print (struct value *val, struct ui_file *stream, int format,
+ enum val_prettyprint pretty)
+{
+ if (!value_check_printable (val, stream))
+ return 0;
+
return LA_VALUE_PRINT (val, stream, format, pretty);
}