diff options
author | Per Bothner <per@bothner.com> | 1995-11-30 03:26:34 +0000 |
---|---|---|
committer | Per Bothner <per@bothner.com> | 1995-11-30 03:26:34 +0000 |
commit | 5e54886116dd58d05183a465350c127f65fa4460 (patch) | |
tree | df9f188beaf544b89ab36d73c970de5fb00a7f85 /gdb/c-valprint.c | |
parent | * scm-valprint.c (scm_isymnames): Remove "#@" prefix. (diff) | |
download | binutils-gdb-5e54886116dd58d05183a465350c127f65fa4460.tar.gz binutils-gdb-5e54886116dd58d05183a465350c127f65fa4460.tar.bz2 binutils-gdb-5e54886116dd58d05183a465350c127f65fa4460.zip |
* ch-exp.y: Replaced by ...
* ch-exp.c: New file. Use recursive-descent.
Recognize labelled array tuples and powerset ranges.
* Makefile.in: Update for no longer using yacc for ch-exp.
* c-lang.c: Make various functions non-static.
* c-lang.h: Add bunches of prototypes.
* cp-valprint.c (cp_print_value_fields): Also take address.
(cp_print_value): Likewise. Use baselcass_offset.
* stabsread.c (current_symbol): New static variable.
(type_synonym_name): Remove.
(read_type): If copying, make copy be a TYPE_CODE_TYPEDEF.
(read_array_type): Don't need to handle undefined element type here.
(cleanup_undefined_types): Ditto.
(read_range_type): Look for Chill ranges.
* valops.c (value_assign): Fix case lval_internalvar - don't try
to assign into old value (which might be too small!).
(value_coerce_array): No longer need special VALUE_REPEATED handling.
(value_arg_coerce): Cleaner array->pointer decay mechanism.
(search_struct_field): Use baseclass_offset rather than
baseclass_addr.
(value_slice): Use get_discrete_bounds.
* value.h (COERCE_VARYING_ARRAY): Take type argumnt as well.
* values.c (baseclass_offset): Change parameter interface.
(baseclass_addr): Removed.
* c-typeprint.c, c-valprint.c, ch-valprint.c, values.c, valops.c:
Add check_typedef/CHECK_TYPEDEF as needed.
Diffstat (limited to 'gdb/c-valprint.c')
-rw-r--r-- | gdb/c-valprint.c | 57 |
1 files changed, 13 insertions, 44 deletions
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 042ac2f7c1a..f4abf7fe848 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -26,40 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "demangle.h" #include "valprint.h" #include "language.h" - -/* BEGIN-FIXME */ - -extern int vtblprint; /* Controls printing of vtbl's */ - -extern void -cp_print_class_member PARAMS ((char *, struct type *, GDB_FILE *, char *)); - -extern void -cp_print_class_method PARAMS ((char *, struct type *, GDB_FILE *)); - -extern void -cp_print_value_fields PARAMS ((struct type *, char *, GDB_FILE *, int, int, - enum val_prettyprint, struct type **, int)); - -extern int -cp_is_vtbl_ptr_type PARAMS ((struct type *)); - -extern int -cp_is_vtbl_member PARAMS ((struct type *)); - -/* END-FIXME */ - - -/* BEGIN-FIXME: Hooks into c-typeprint.c */ - -extern void -c_type_print_varspec_prefix PARAMS ((struct type *, GDB_FILE *, int, int)); - -extern void -cp_type_print_method_args PARAMS ((struct type **, char *, char *, int, - GDB_FILE *)); -/* END-FIXME */ - +#include "c-lang.h" /* Print data of type TYPE located at VALADDR (within GDB), which came from @@ -94,12 +61,13 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, LONGEST val; CORE_ADDR addr; + CHECK_TYPEDEF (type); switch (TYPE_CODE (type)) { case TYPE_CODE_ARRAY: if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0) { - elttype = TYPE_TARGET_TYPE (type); + elttype = check_typedef (TYPE_TARGET_TYPE (type)); eltlen = TYPE_LENGTH (elttype); len = TYPE_LENGTH (type) / eltlen; if (prettyprint_arrays) @@ -169,11 +137,12 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, stream, demangle); break; } - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD) + elttype = check_typedef (TYPE_TARGET_TYPE (type)); + if (TYPE_CODE (elttype) == TYPE_CODE_METHOD) { cp_print_class_method (valaddr, type, stream); } - else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_MEMBER) + else if (TYPE_CODE (elttype) == TYPE_CODE_MEMBER) { cp_print_class_member (valaddr, TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (type)), @@ -183,7 +152,6 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, { addr = unpack_pointer (type, valaddr); print_unpacked_pointer: - elttype = TYPE_TARGET_TYPE (type); if (TYPE_CODE (elttype) == TYPE_CODE_FUNC) { @@ -266,10 +234,11 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, break; case TYPE_CODE_REF: - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_MEMBER) + elttype = check_typedef (TYPE_TARGET_TYPE (type)); + if (TYPE_CODE (elttype) == TYPE_CODE_MEMBER) { cp_print_class_member (valaddr, - TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (type)), + TYPE_DOMAIN_TYPE (elttype), stream, ""); break; } @@ -285,7 +254,7 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, /* De-reference the reference. */ if (deref_ref) { - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_UNDEF) + if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF) { value_ptr deref_val = value_at @@ -318,10 +287,10 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, print_address_demangle(*((int *) (valaddr + /* FIXME bytesex */ TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8)), stream, demangle); - break; } - cp_print_value_fields (type, valaddr, stream, format, recurse, pretty, - NULL, 0); + else + cp_print_value_fields (type, valaddr, address, stream, format, + recurse, pretty, NULL, 0); break; case TYPE_CODE_ENUM: |