aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Fish <fnf@specifix.com>1993-12-11 01:27:23 +0000
committerFred Fish <fnf@specifix.com>1993-12-11 01:27:23 +0000
commit11b959da9c1f39873980f859a05668bf61ba4b40 (patch)
treefe5bb539b694c3ef0fff69de2840b812b4bc93ec
parent6972011b96bbbbd714dc63d71914f2bc21e00361 (diff)
downloadgdb-11b959da9c1f39873980f859a05668bf61ba4b40.zip
gdb-11b959da9c1f39873980f859a05668bf61ba4b40.tar.gz
gdb-11b959da9c1f39873980f859a05668bf61ba4b40.tar.bz2
* 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.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/ch-typeprint.c61
-rw-r--r--gdb/ch-valprint.c9
-rw-r--r--gdb/stabsread.c4
4 files changed, 74 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f366fc5..f51f5e5 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 3d2038e..da64b45 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 5f29b31..4be369b 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 4824b71..3203cbf 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;