From: Fred Fish Date: Sat, 11 Dec 1993 01:27:23 +0000 (+0000) Subject: * stabsread.c (read_array_type): Allow negative array bounds, X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=11b959da9c1f39873980f859a05668bf61ba4b40;p=binutils-gdb.git * stabsread.c (read_array_type): Allow negative array bounds, without interpreting that to mean "adjustable." * ch-valprint.c (chill_val_print): Handle RANGE types. * ch-typeprint.c (chill_type_print_base): Handle BOOL. Handle variant records. Handle RANGE types. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f366fc589f0..f51f5e57be4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +Fri Dec 10 15:53:56 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * stabsread.c (read_array_type): Allow negative array bounds, + without interpreting that to mean "adjustable." + * ch-valprint.c (chill_val_print): Handle RANGE types. + * ch-typeprint.c (chill_type_print_base): Handle BOOL. + Handle variant records. Handle RANGE types. + Tue Dec 7 15:41:32 1993 Ian Lance Taylor (ian@cygnus.com) * config/mips/idt.mt: Use tm-idt.h instead of tm-bigmips.h. diff --git a/gdb/ch-typeprint.c b/gdb/ch-typeprint.c index 3d2038eb5d7..da64b45372f 100644 --- a/gdb/ch-typeprint.c +++ b/gdb/ch-typeprint.c @@ -114,6 +114,10 @@ chill_type_print_base (type, stream, show, level) chill_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level); break; + case TYPE_CODE_BOOL: + fprintf_filtered (stream, "BOOL"); + break; + case TYPE_CODE_ARRAY: range_type = TYPE_FIELD_TYPE (type, 0); index_type = TYPE_TARGET_TYPE (range_type); @@ -180,11 +184,42 @@ chill_type_print_base (type, stream, show, level) len = TYPE_NFIELDS (type); for (i = TYPE_N_BASECLASSES (type); i < len; i++) { + struct type *field_type = TYPE_FIELD_TYPE (type, i); QUIT; print_spaces_filtered (level + 4, stream); - chill_print_type (TYPE_FIELD_TYPE (type, i), - TYPE_FIELD_NAME (type, i), - stream, show - 1, level + 4); + if (TYPE_CODE (field_type) == TYPE_CODE_UNION) + { int j; /* variant number */ + fputs_filtered ("CASE OF\n", stream); + for (j = 0; j < TYPE_NFIELDS (field_type); j++) + { int k; /* variant field index */ + struct type *variant_type + = TYPE_FIELD_TYPE (field_type, j); + int var_len = TYPE_NFIELDS (variant_type); + print_spaces_filtered (level + 4, stream); + if (strcmp (TYPE_FIELD_NAME (field_type, j), + "else") == 0) + fputs_filtered ("ELSE\n", stream); + else + fputs_filtered (":\n", stream); + if (TYPE_CODE (variant_type) != TYPE_CODE_STRUCT) + error ("variant record confusion"); + for (k = 0; k < var_len; k++) + { + print_spaces_filtered (level + 8, stream); + chill_print_type (TYPE_FIELD_TYPE (variant_type, k), + TYPE_FIELD_NAME (variant_type, k), + stream, show - 1, level + 8); + if (k < (var_len - 1)) + fputs_filtered (",", stream); + fputs_filtered ("\n", stream); + } + } + fputs_filtered ("ESAC\n", stream); + } + else + chill_print_type (field_type, + TYPE_FIELD_NAME (type, i), + stream, show - 1, level + 4); if (i < (len - 1)) { fputs_filtered (",", stream); @@ -196,10 +231,28 @@ chill_type_print_base (type, stream, show, level) } break; + case TYPE_CODE_RANGE: + if (TYPE_TARGET_TYPE (type)) + { + chill_type_print_base (TYPE_TARGET_TYPE (type), + stream, show, level); + fputs_filtered (" (", stream); + print_type_scalar (TYPE_TARGET_TYPE (type), + TYPE_FIELD_BITPOS (type, 0), stream); + fputs_filtered (":", stream); + print_type_scalar (TYPE_TARGET_TYPE (type), + TYPE_FIELD_BITPOS (type, 1), stream); + fputs_filtered (")", stream); + } + else + fprintf_filtered (stream, "RANGE? (%s : %d)", + TYPE_FIELD_BITPOS (type, 0), + TYPE_FIELD_BITPOS (type, 1)); + break; + case TYPE_CODE_VOID: case TYPE_CODE_UNDEF: case TYPE_CODE_ERROR: - case TYPE_CODE_RANGE: case TYPE_CODE_ENUM: case TYPE_CODE_UNION: case TYPE_CODE_METHOD: diff --git a/gdb/ch-valprint.c b/gdb/ch-valprint.c index 5f29b315279..4be369bd9ac 100644 --- a/gdb/ch-valprint.c +++ b/gdb/ch-valprint.c @@ -234,14 +234,19 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse, deref_ref, recurse, pretty); break; + case TYPE_CODE_RANGE: + if (TYPE_TARGET_TYPE (type)) + chill_val_print (TYPE_TARGET_TYPE (type), valaddr, address, stream, + format, deref_ref, recurse, pretty); + break; + case TYPE_CODE_MEMBER: case TYPE_CODE_UNION: case TYPE_CODE_FUNC: case TYPE_CODE_VOID: case TYPE_CODE_ERROR: - case TYPE_CODE_RANGE: default: - /* Let's derfer printing to the C printer, rather than + /* Let's defer printing to the C printer, rather than print an error message. FIXME! */ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, pretty); diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 4824b718864..3203cbf3329 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -2794,7 +2794,7 @@ read_array_type (pp, type, objfile) return error_type (pp); ++*pp; - if (!(**pp >= '0' && **pp <= '9')) + if (!(**pp >= '0' && **pp <= '9') && **pp != '-') { (*pp)++; adjustable = 1; @@ -2803,7 +2803,7 @@ read_array_type (pp, type, objfile) if (nbits != 0) return error_type (pp); - if (!(**pp >= '0' && **pp <= '9')) + if (!(**pp >= '0' && **pp <= '9') && **pp != '-') { (*pp)++; adjustable = 1;