* 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.
This commit is contained in:
Ulrich Weigand 2009-06-29 17:30:12 +00:00
parent 1ce677a4a1
commit 7c964f079e
4 changed files with 28 additions and 14 deletions

View File

@ -1,3 +1,14 @@
2009-06-29 Ulrich Weigand <uweigand@de.ibm.com>
* 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 <uweigand@de.ibm.com>
* ada-lang.c (to_fixed_range_type): Add ORIG_TYPE argument.

View File

@ -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

View File

@ -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,

View File

@ -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))