From 7c964f079e2404c667e3e4ffb32a380590c438ab Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Mon, 29 Jun 2009 17:30:12 +0000 Subject: [PATCH] * ada-valprint.c (ada_print_scalar): Accept NULL type argument to indicate scalar should be printed as default integer. (print_optional_low_bound): Pass NULL to ada_print_scalar to indicate default integer output. * ada-typeprint.c (print_range, print_range_bound): Likewise. (print_choices): Likewise. Thus, accept NULL as val_type. * ada-lang.c (ada_variant_discrim_type): Return NULL when failed to look up controlling discriminant name. --- gdb/ChangeLog | 11 +++++++++++ gdb/ada-lang.c | 10 +++------- gdb/ada-typeprint.c | 10 +++++----- gdb/ada-valprint.c | 11 +++++++++-- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 33bb6eb..274d85b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2009-06-29 Ulrich Weigand + * ada-valprint.c (ada_print_scalar): Accept NULL type argument + to indicate scalar should be printed as default integer. + (print_optional_low_bound): Pass NULL to ada_print_scalar to + indicate default integer output. + * ada-typeprint.c (print_range, print_range_bound): Likewise. + (print_choices): Likewise. Thus, accept NULL as val_type. + * ada-lang.c (ada_variant_discrim_type): Return NULL when failed + to look up controlling discriminant name. + +2009-06-29 Ulrich Weigand + * ada-lang.c (to_fixed_range_type): Add ORIG_TYPE argument. Fall back to orig_type as index type if symbol lookup fails. Allocate result types from ORIG_TYPE's objfile. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 13d10d9..ad08c5f 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -5648,18 +5648,14 @@ ada_is_variant_part (struct type *type, int field_num) /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part) whose discriminants are contained in the record type OUTER_TYPE, - returns the type of the controlling discriminant for the variant. */ + returns the type of the controlling discriminant for the variant. + May return NULL if the type could not be found. */ struct type * ada_variant_discrim_type (struct type *var_type, struct type *outer_type) { char *name = ada_variant_discrim_name (var_type); - struct type *type = - ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL); - if (type == NULL) - return builtin_type_int32; - else - return type; + return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL); } /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c index f4f925c..9fabd68 100644 --- a/gdb/ada-typeprint.c +++ b/gdb/ada-typeprint.c @@ -133,7 +133,7 @@ print_range (struct type *type, struct ui_file *stream) case TYPE_CODE_ENUM: break; default: - target_type = builtin_type_int32; + target_type = NULL; break; } @@ -181,12 +181,12 @@ print_range_bound (struct type *type, char *bounds, int *n, be printed as a signed or an unsigned value. This causes the upper bound of the 0 .. -1 range types to be printed as a very large unsigned number instead of -1. - To workaround this stabs deficiency, we replace the TYPE by - builtin_type_int32 when we detect that the bound is negative, + To workaround this stabs deficiency, we replace the TYPE by NULL + to indicate default output when we detect that the bound is negative, and the type is a TYPE_CODE_INT. The bound is negative when 'm' is the last character of the number scanned in BOUNDS. */ if (bounds[*n - 1] == 'm' && TYPE_CODE (type) == TYPE_CODE_INT) - type = builtin_type_int32; + type = NULL; ada_print_scalar (type, B, stream); if (bounds[*n] == '_') *n += 2; @@ -423,7 +423,7 @@ print_array_type (struct type *type, struct ui_file *stream, int show, } /* Print the choices encoded by field FIELD_NUM of variant-part TYPE on - STREAM, assuming the VAL_TYPE is the type of the values. */ + STREAM, assuming that VAL_TYPE (if non-NULL) is the type of the values. */ static void print_choices (struct type *type, int field_num, struct ui_file *stream, diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index a6f3f48..b33199b 100644 --- a/gdb/ada-valprint.c +++ b/gdb/ada-valprint.c @@ -122,7 +122,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type, return 0; break; case TYPE_CODE_UNDEF: - index_type = builtin_type_int32; + index_type = NULL; /* FALL THROUGH */ default: if (low_bound == 1) @@ -375,7 +375,8 @@ ada_printchar (int c, struct type *type, struct ui_file *stream) } /* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a - form appropriate for TYPE. */ + form appropriate for TYPE, if non-NULL. If TYPE is NULL, print VAL + like a default signed integer. */ void ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream) @@ -383,6 +384,12 @@ ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream) unsigned int i; unsigned len; + if (!type) + { + print_longest (stream, 'd', 0, val); + return; + } + type = ada_check_typedef (type); switch (TYPE_CODE (type)) -- 2.7.4