mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
gdb/
Replace TYPE_ARRAY_{UPPER,LOWER}_BOUND_TYPE by a bit if {un,}defined. * c-typeprint.c (c_type_print_varspec_suffix), m2-typeprint.c (m2_array), p-typeprint.c (pascal_type_print_varspec_prefix), valops.c (value_cast), varobj.c (c_number_of_children): Replace TYPE_ARRAY_UPPER_BOUND_TYPE compared to BOUND_CANNOT_BE_DETERMINED by TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED. * parse.c (follow_types): Use TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED. * f-valprint.c (f77_get_dynamic_upperbound): Replace with ... (f77_get_upperbound): ... this function handling now only TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED. (f77_get_dynamic_lowerbound): Replace with ... (f77_get_lowerbound): ... this function handling now only TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED. (f77_get_dynamic_length_of_aggregate, f77_create_arrayprint_offset_tbl): Update their callers. * eval.c (evaluate_subexp_standard): Update their callers. * f-lang.h (f77_get_dynamic_upperbound, f77_get_upperbound) (f77_get_dynamic_lowerbound, f77_get_lowerbound): Update their prototypes. (BOUND_FETCH_OK, BOUND_FETCH_ERROR): Remove. * f-typeprint.c (f_type_print_varspec_suffix, f_type_print_base): Remove the lower_bound_was_default variable. Update the f77_get_dynamic_upperbound, f77_get_upperbound and TYPE_ARRAY_UPPER_BOUND_TYPE calls. * gdbtypes.c (print_bound_type): Remove the function. (recursive_dump_type): Remove its calls printing UPPER_BOUND_TYPE and LOWER_BOUND_TYPE. * gdbtypes.h (enum array_bound_type): Remove. (struct main_type): Remove the fields upper_bound_type and lower_bound_type. Comment the new overload of the field artificial. (TYPE_ARRAY_UPPER_BOUND_TYPE): Replace by ... (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED): ... this macro. (TYPE_ARRAY_LOWER_BOUND_TYPE): Replace by ... (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED): ... this macro. gdb/testsuite/ * gdb.base/maint.exp (maint print type): Remove printing UPPER_BOUND_TYPE and LOWER_BOUND_TYPE.
This commit is contained in:
parent
92f03fcbe1
commit
d78df37042
@ -1,3 +1,40 @@
|
||||
2008-10-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Replace TYPE_ARRAY_{UPPER,LOWER}_BOUND_TYPE by a bit if {un,}defined.
|
||||
* c-typeprint.c (c_type_print_varspec_suffix), m2-typeprint.c
|
||||
(m2_array), p-typeprint.c (pascal_type_print_varspec_prefix),
|
||||
valops.c (value_cast), varobj.c (c_number_of_children): Replace
|
||||
TYPE_ARRAY_UPPER_BOUND_TYPE compared to BOUND_CANNOT_BE_DETERMINED by
|
||||
TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED.
|
||||
* parse.c (follow_types): Use TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED.
|
||||
* f-valprint.c (f77_get_dynamic_upperbound): Replace with ...
|
||||
(f77_get_upperbound): ... this function handling now only
|
||||
TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED.
|
||||
(f77_get_dynamic_lowerbound): Replace with ...
|
||||
(f77_get_lowerbound): ... this function handling now only
|
||||
TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED.
|
||||
(f77_get_dynamic_length_of_aggregate, f77_create_arrayprint_offset_tbl):
|
||||
Update their callers.
|
||||
* eval.c (evaluate_subexp_standard): Update their callers.
|
||||
* f-lang.h (f77_get_dynamic_upperbound, f77_get_upperbound)
|
||||
(f77_get_dynamic_lowerbound, f77_get_lowerbound): Update their
|
||||
prototypes.
|
||||
(BOUND_FETCH_OK, BOUND_FETCH_ERROR): Remove.
|
||||
* f-typeprint.c (f_type_print_varspec_suffix, f_type_print_base): Remove
|
||||
the lower_bound_was_default variable. Update the
|
||||
f77_get_dynamic_upperbound, f77_get_upperbound and
|
||||
TYPE_ARRAY_UPPER_BOUND_TYPE calls.
|
||||
* gdbtypes.c (print_bound_type): Remove the function.
|
||||
(recursive_dump_type): Remove its calls printing UPPER_BOUND_TYPE and
|
||||
LOWER_BOUND_TYPE.
|
||||
* gdbtypes.h (enum array_bound_type): Remove.
|
||||
(struct main_type): Remove the fields upper_bound_type and
|
||||
lower_bound_type. Comment the new overload of the field artificial.
|
||||
(TYPE_ARRAY_UPPER_BOUND_TYPE): Replace by ...
|
||||
(TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED): ... this macro.
|
||||
(TYPE_ARRAY_LOWER_BOUND_TYPE): Replace by ...
|
||||
(TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED): ... this macro.
|
||||
|
||||
2008-10-02 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* Makefile.in (HFILES_NO_SRCDIR): Remove gdb-events.h, gstdint.h.
|
||||
|
@ -560,7 +560,7 @@ c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
|
||||
|
||||
fprintf_filtered (stream, "[");
|
||||
if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
|
||||
&& TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
|
||||
&& !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||
fprintf_filtered (stream, "%d",
|
||||
(TYPE_LENGTH (type)
|
||||
/ TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
|
||||
|
@ -1994,13 +1994,8 @@ evaluate_subexp_standard (struct type *expect_type,
|
||||
/* Internal type of array is arranged right to left */
|
||||
for (i = 0; i < nargs; i++)
|
||||
{
|
||||
retcode = f77_get_dynamic_upperbound (tmp_type, &upper);
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
error (_("Cannot obtain dynamic upper bound"));
|
||||
|
||||
retcode = f77_get_dynamic_lowerbound (tmp_type, &lower);
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
error (_("Cannot obtain dynamic lower bound"));
|
||||
upper = f77_get_upperbound (tmp_type);
|
||||
lower = f77_get_lowerbound (tmp_type);
|
||||
|
||||
array_size_array[nargs - i - 1] = upper - lower + 1;
|
||||
|
||||
|
@ -83,9 +83,6 @@ extern SAVED_F77_COMMON_PTR find_common_for_function (char *, char *);
|
||||
#define BLANK_COMMON_NAME_MF77 "__BLNK__" /* MF77 assigned */
|
||||
#define BLANK_COMMON_NAME_LOCAL "__BLANK" /* Local GDB */
|
||||
|
||||
#define BOUND_FETCH_OK 1
|
||||
#define BOUND_FETCH_ERROR -999
|
||||
|
||||
/* When reasonable array bounds cannot be fetched, such as when
|
||||
you ask to 'mt print symbols' and there is no stack frame and
|
||||
therefore no way of knowing the bounds of stack-based arrays,
|
||||
@ -97,9 +94,9 @@ extern SAVED_F77_COMMON_PTR find_common_for_function (char *, char *);
|
||||
extern char *real_main_name; /* Name of main function */
|
||||
extern int real_main_c_value; /* C_value field of main function */
|
||||
|
||||
extern int f77_get_dynamic_upperbound (struct type *, int *);
|
||||
extern int f77_get_upperbound (struct type *);
|
||||
|
||||
extern int f77_get_dynamic_lowerbound (struct type *, int *);
|
||||
extern int f77_get_lowerbound (struct type *);
|
||||
|
||||
extern void f77_get_dynamic_array_length (struct type *);
|
||||
|
||||
|
@ -153,7 +153,6 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
|
||||
int show, int passed_a_ptr, int demangled_args)
|
||||
{
|
||||
int upper_bound, lower_bound;
|
||||
int lower_bound_was_default = 0;
|
||||
static int arrayprint_recurse_level = 0;
|
||||
int retcode;
|
||||
|
||||
@ -176,35 +175,19 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
|
||||
if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)
|
||||
f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
|
||||
|
||||
retcode = f77_get_dynamic_lowerbound (type, &lower_bound);
|
||||
|
||||
lower_bound_was_default = 0;
|
||||
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
fprintf_filtered (stream, "???");
|
||||
else if (lower_bound == 1) /* The default */
|
||||
lower_bound_was_default = 1;
|
||||
else
|
||||
fprintf_filtered (stream, "%d", lower_bound);
|
||||
|
||||
if (lower_bound_was_default)
|
||||
lower_bound_was_default = 0;
|
||||
else
|
||||
fprintf_filtered (stream, ":");
|
||||
lower_bound = f77_get_lowerbound (type);
|
||||
if (lower_bound != 1) /* Not the default. */
|
||||
fprintf_filtered (stream, "%d:", lower_bound);
|
||||
|
||||
/* Make sure that, if we have an assumed size array, we
|
||||
print out a warning and print the upperbound as '*' */
|
||||
|
||||
if (TYPE_ARRAY_UPPER_BOUND_TYPE (type) == BOUND_CANNOT_BE_DETERMINED)
|
||||
if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||
fprintf_filtered (stream, "*");
|
||||
else
|
||||
{
|
||||
retcode = f77_get_dynamic_upperbound (type, &upper_bound);
|
||||
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
fprintf_filtered (stream, "???");
|
||||
else
|
||||
fprintf_filtered (stream, "%d", upper_bound);
|
||||
upper_bound = f77_get_upperbound (type);
|
||||
fprintf_filtered (stream, "%d", upper_bound);
|
||||
}
|
||||
|
||||
if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY)
|
||||
@ -354,16 +337,12 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show,
|
||||
case TYPE_CODE_STRING:
|
||||
/* Strings may have dynamic upperbounds (lengths) like arrays. */
|
||||
|
||||
if (TYPE_ARRAY_UPPER_BOUND_TYPE (type) == BOUND_CANNOT_BE_DETERMINED)
|
||||
if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||
fprintfi_filtered (level, stream, "character*(*)");
|
||||
else
|
||||
{
|
||||
retcode = f77_get_dynamic_upperbound (type, &upper_bound);
|
||||
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
fprintf_filtered (stream, "character*???");
|
||||
else
|
||||
fprintf_filtered (stream, "character*%d", upper_bound);
|
||||
upper_bound = f77_get_upperbound (type);
|
||||
fprintf_filtered (stream, "character*%d", upper_bound);
|
||||
}
|
||||
break;
|
||||
|
||||
|
151
gdb/f-valprint.c
151
gdb/f-valprint.c
@ -61,132 +61,28 @@ int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2];
|
||||
#define F77_DIM_OFFSET(n) (f77_array_offset_tbl[n][0])
|
||||
|
||||
int
|
||||
f77_get_dynamic_lowerbound (struct type *type, int *lower_bound)
|
||||
f77_get_lowerbound (struct type *type)
|
||||
{
|
||||
struct frame_info *frame;
|
||||
CORE_ADDR current_frame_addr;
|
||||
CORE_ADDR ptr_to_lower_bound;
|
||||
if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type))
|
||||
error (_("Lower bound may not be '*' in F77"));
|
||||
|
||||
switch (TYPE_ARRAY_LOWER_BOUND_TYPE (type))
|
||||
{
|
||||
case BOUND_BY_VALUE_ON_STACK:
|
||||
frame = deprecated_safe_get_selected_frame ();
|
||||
current_frame_addr = get_frame_base (frame);
|
||||
if (current_frame_addr > 0)
|
||||
{
|
||||
*lower_bound =
|
||||
read_memory_integer (current_frame_addr +
|
||||
TYPE_ARRAY_LOWER_BOUND_VALUE (type),
|
||||
4);
|
||||
}
|
||||
else
|
||||
{
|
||||
*lower_bound = DEFAULT_LOWER_BOUND;
|
||||
return BOUND_FETCH_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
case BOUND_SIMPLE:
|
||||
*lower_bound = TYPE_ARRAY_LOWER_BOUND_VALUE (type);
|
||||
break;
|
||||
|
||||
case BOUND_CANNOT_BE_DETERMINED:
|
||||
error (_("Lower bound may not be '*' in F77"));
|
||||
break;
|
||||
|
||||
case BOUND_BY_REF_ON_STACK:
|
||||
frame = deprecated_safe_get_selected_frame ();
|
||||
current_frame_addr = get_frame_base (frame);
|
||||
if (current_frame_addr > 0)
|
||||
{
|
||||
struct gdbarch *arch = get_frame_arch (frame);
|
||||
ptr_to_lower_bound =
|
||||
read_memory_typed_address (current_frame_addr +
|
||||
TYPE_ARRAY_LOWER_BOUND_VALUE (type),
|
||||
builtin_type (arch)->builtin_data_ptr);
|
||||
*lower_bound = read_memory_integer (ptr_to_lower_bound, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
*lower_bound = DEFAULT_LOWER_BOUND;
|
||||
return BOUND_FETCH_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
case BOUND_BY_REF_IN_REG:
|
||||
case BOUND_BY_VALUE_IN_REG:
|
||||
default:
|
||||
error (_("??? unhandled dynamic array bound type ???"));
|
||||
break;
|
||||
}
|
||||
return BOUND_FETCH_OK;
|
||||
return TYPE_ARRAY_LOWER_BOUND_VALUE (type);
|
||||
}
|
||||
|
||||
int
|
||||
f77_get_dynamic_upperbound (struct type *type, int *upper_bound)
|
||||
f77_get_upperbound (struct type *type)
|
||||
{
|
||||
struct frame_info *frame;
|
||||
CORE_ADDR current_frame_addr = 0;
|
||||
CORE_ADDR ptr_to_upper_bound;
|
||||
|
||||
switch (TYPE_ARRAY_UPPER_BOUND_TYPE (type))
|
||||
if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||
{
|
||||
case BOUND_BY_VALUE_ON_STACK:
|
||||
frame = deprecated_safe_get_selected_frame ();
|
||||
current_frame_addr = get_frame_base (frame);
|
||||
if (current_frame_addr > 0)
|
||||
{
|
||||
*upper_bound =
|
||||
read_memory_integer (current_frame_addr +
|
||||
TYPE_ARRAY_UPPER_BOUND_VALUE (type),
|
||||
4);
|
||||
}
|
||||
else
|
||||
{
|
||||
*upper_bound = DEFAULT_UPPER_BOUND;
|
||||
return BOUND_FETCH_ERROR;
|
||||
}
|
||||
break;
|
||||
/* We have an assumed size array on our hands. Assume that
|
||||
upper_bound == lower_bound so that we show at least 1 element.
|
||||
If the user wants to see more elements, let him manually ask for 'em
|
||||
and we'll subscript the array and show him. */
|
||||
|
||||
case BOUND_SIMPLE:
|
||||
*upper_bound = TYPE_ARRAY_UPPER_BOUND_VALUE (type);
|
||||
break;
|
||||
|
||||
case BOUND_CANNOT_BE_DETERMINED:
|
||||
/* we have an assumed size array on our hands. Assume that
|
||||
upper_bound == lower_bound so that we show at least
|
||||
1 element.If the user wants to see more elements, let
|
||||
him manually ask for 'em and we'll subscript the
|
||||
array and show him */
|
||||
f77_get_dynamic_lowerbound (type, upper_bound);
|
||||
break;
|
||||
|
||||
case BOUND_BY_REF_ON_STACK:
|
||||
frame = deprecated_safe_get_selected_frame ();
|
||||
current_frame_addr = get_frame_base (frame);
|
||||
if (current_frame_addr > 0)
|
||||
{
|
||||
struct gdbarch *arch = get_frame_arch (frame);
|
||||
ptr_to_upper_bound =
|
||||
read_memory_typed_address (current_frame_addr +
|
||||
TYPE_ARRAY_UPPER_BOUND_VALUE (type),
|
||||
builtin_type (arch)->builtin_data_ptr);
|
||||
*upper_bound = read_memory_integer (ptr_to_upper_bound, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
*upper_bound = DEFAULT_UPPER_BOUND;
|
||||
return BOUND_FETCH_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
case BOUND_BY_REF_IN_REG:
|
||||
case BOUND_BY_VALUE_IN_REG:
|
||||
default:
|
||||
error (_("??? unhandled dynamic array bound type ???"));
|
||||
break;
|
||||
return f77_get_lowerbound (type);
|
||||
}
|
||||
return BOUND_FETCH_OK;
|
||||
|
||||
return TYPE_ARRAY_UPPER_BOUND_VALUE (type);
|
||||
}
|
||||
|
||||
/* Obtain F77 adjustable array dimensions */
|
||||
@ -212,13 +108,8 @@ f77_get_dynamic_length_of_aggregate (struct type *type)
|
||||
f77_get_dynamic_length_of_aggregate (TYPE_TARGET_TYPE (type));
|
||||
|
||||
/* Recursion ends here, start setting up lengths. */
|
||||
retcode = f77_get_dynamic_lowerbound (type, &lower_bound);
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
error (_("Cannot obtain valid array lower bound"));
|
||||
|
||||
retcode = f77_get_dynamic_upperbound (type, &upper_bound);
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
error (_("Cannot obtain valid array upper bound"));
|
||||
lower_bound = f77_get_lowerbound (type);
|
||||
upper_bound = f77_get_upperbound (type);
|
||||
|
||||
/* Patch in a valid length value. */
|
||||
|
||||
@ -241,16 +132,8 @@ f77_create_arrayprint_offset_tbl (struct type *type, struct ui_file *stream)
|
||||
|
||||
while ((TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY))
|
||||
{
|
||||
if (TYPE_ARRAY_UPPER_BOUND_TYPE (tmp_type) == BOUND_CANNOT_BE_DETERMINED)
|
||||
fprintf_filtered (stream, "<assumed size array> ");
|
||||
|
||||
retcode = f77_get_dynamic_upperbound (tmp_type, &upper);
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
error (_("Cannot obtain dynamic upper bound"));
|
||||
|
||||
retcode = f77_get_dynamic_lowerbound (tmp_type, &lower);
|
||||
if (retcode == BOUND_FETCH_ERROR)
|
||||
error (_("Cannot obtain dynamic lower bound"));
|
||||
upper = f77_get_upperbound (tmp_type);
|
||||
lower = f77_get_lowerbound (tmp_type);
|
||||
|
||||
F77_DIM_SIZE (ndimen) = upper - lower + 1;
|
||||
|
||||
|
@ -2556,35 +2556,6 @@ print_cplus_stuff (struct type *type, int spaces)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_bound_type (int bt)
|
||||
{
|
||||
switch (bt)
|
||||
{
|
||||
case BOUND_CANNOT_BE_DETERMINED:
|
||||
printf_filtered ("(BOUND_CANNOT_BE_DETERMINED)");
|
||||
break;
|
||||
case BOUND_BY_REF_ON_STACK:
|
||||
printf_filtered ("(BOUND_BY_REF_ON_STACK)");
|
||||
break;
|
||||
case BOUND_BY_VALUE_ON_STACK:
|
||||
printf_filtered ("(BOUND_BY_VALUE_ON_STACK)");
|
||||
break;
|
||||
case BOUND_BY_REF_IN_REG:
|
||||
printf_filtered ("(BOUND_BY_REF_IN_REG)");
|
||||
break;
|
||||
case BOUND_BY_VALUE_IN_REG:
|
||||
printf_filtered ("(BOUND_BY_VALUE_IN_REG)");
|
||||
break;
|
||||
case BOUND_SIMPLE:
|
||||
printf_filtered ("(BOUND_SIMPLE)");
|
||||
break;
|
||||
default:
|
||||
printf_filtered (_("(unknown bound type)"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static struct obstack dont_print_type_obstack;
|
||||
|
||||
void
|
||||
@ -2719,14 +2690,6 @@ recursive_dump_type (struct type *type, int spaces)
|
||||
}
|
||||
puts_filtered ("\n");
|
||||
printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
|
||||
printfi_filtered (spaces, "upper_bound_type 0x%x ",
|
||||
TYPE_ARRAY_UPPER_BOUND_TYPE (type));
|
||||
print_bound_type (TYPE_ARRAY_UPPER_BOUND_TYPE (type));
|
||||
puts_filtered ("\n");
|
||||
printfi_filtered (spaces, "lower_bound_type 0x%x ",
|
||||
TYPE_ARRAY_LOWER_BOUND_TYPE (type));
|
||||
print_bound_type (TYPE_ARRAY_LOWER_BOUND_TYPE (type));
|
||||
puts_filtered ("\n");
|
||||
printfi_filtered (spaces, "objfile ");
|
||||
gdb_print_host_address (TYPE_OBJFILE (type), gdb_stdout);
|
||||
printf_filtered ("\n");
|
||||
|
@ -316,18 +316,6 @@ enum type_instance_flag_value
|
||||
#define TYPE_ADDRESS_CLASS_ALL(t) (TYPE_INSTANCE_FLAGS(t) \
|
||||
& TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
|
||||
|
||||
|
||||
/* Array bound type. */
|
||||
enum array_bound_type
|
||||
{
|
||||
BOUND_SIMPLE = 0,
|
||||
BOUND_BY_VALUE_IN_REG,
|
||||
BOUND_BY_REF_IN_REG,
|
||||
BOUND_BY_VALUE_ON_STACK,
|
||||
BOUND_BY_REF_ON_STACK,
|
||||
BOUND_CANNOT_BE_DETERMINED
|
||||
};
|
||||
|
||||
/* This structure is space-critical.
|
||||
Its layout has been tweaked to reduce the space used. */
|
||||
|
||||
@ -337,12 +325,6 @@ struct main_type
|
||||
|
||||
ENUM_BITFIELD(type_code) code : 8;
|
||||
|
||||
/* Array bounds. These fields appear at this location because
|
||||
they pack nicely here. */
|
||||
|
||||
ENUM_BITFIELD(array_bound_type) upper_bound_type : 4;
|
||||
ENUM_BITFIELD(array_bound_type) lower_bound_type : 4;
|
||||
|
||||
/* Flags about this type. These fields appear at this location
|
||||
because they packs nicely here. See the TYPE_* macros for
|
||||
documentation about these fields. */
|
||||
@ -460,7 +442,8 @@ struct main_type
|
||||
|
||||
/* For a function or member type, this is 1 if the argument is marked
|
||||
artificial. Artificial arguments should not be shown to the
|
||||
user. */
|
||||
user. For TYPE_CODE_RANGE it is set if the specific bound is not
|
||||
defined. */
|
||||
unsigned int artificial : 1;
|
||||
|
||||
/* This flag is zero for non-static fields, 1 for fields whose location
|
||||
@ -817,10 +800,10 @@ extern void allocate_cplus_struct_type (struct type *);
|
||||
|
||||
/* Moto-specific stuff for FORTRAN arrays */
|
||||
|
||||
#define TYPE_ARRAY_UPPER_BOUND_TYPE(thistype) \
|
||||
TYPE_MAIN_TYPE(thistype)->upper_bound_type
|
||||
#define TYPE_ARRAY_LOWER_BOUND_TYPE(thistype) \
|
||||
TYPE_MAIN_TYPE(thistype)->lower_bound_type
|
||||
#define TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED(arraytype) \
|
||||
(TYPE_FIELD_ARTIFICIAL((TYPE_FIELD_TYPE((arraytype),0)),1))
|
||||
#define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \
|
||||
(TYPE_FIELD_ARTIFICIAL((TYPE_FIELD_TYPE((arraytype),0)),0))
|
||||
|
||||
#define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \
|
||||
(TYPE_FIELD_BITPOS((TYPE_FIELD_TYPE((arraytype),0)),1))
|
||||
|
@ -222,7 +222,7 @@ static void m2_array (struct type *type, struct ui_file *stream,
|
||||
{
|
||||
fprintf_filtered (stream, "ARRAY [");
|
||||
if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
|
||||
&& TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
|
||||
&& !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||
{
|
||||
if (TYPE_INDEX_TYPE (type) != 0)
|
||||
{
|
||||
|
@ -266,7 +266,7 @@ pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
|
||||
fprintf_filtered (stream, "(");
|
||||
fprintf_filtered (stream, "array ");
|
||||
if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
|
||||
&& TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
|
||||
&& !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||
fprintf_filtered (stream, "[%d..%d] ",
|
||||
TYPE_ARRAY_LOWER_BOUND_VALUE (type),
|
||||
TYPE_ARRAY_UPPER_BOUND_VALUE (type)
|
||||
|
@ -1268,8 +1268,7 @@ follow_types (struct type *follow_type)
|
||||
create_array_type ((struct type *) NULL,
|
||||
follow_type, range_type);
|
||||
if (array_size < 0)
|
||||
TYPE_ARRAY_UPPER_BOUND_TYPE (follow_type)
|
||||
= BOUND_CANNOT_BE_DETERMINED;
|
||||
TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (follow_type) = 1;
|
||||
break;
|
||||
case tp_function:
|
||||
/* FIXME-type-allocation: need a way to free this type when we are
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-10-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/maint.exp (maint print type): Remove printing
|
||||
UPPER_BOUND_TYPE and LOWER_BOUND_TYPE.
|
||||
|
||||
2008-09-30 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.base/macscp.exp: Add completion tests.
|
||||
|
@ -401,7 +401,7 @@ gdb_expect {
|
||||
|
||||
send_gdb "maint print type argc\n"
|
||||
gdb_expect {
|
||||
-re "type node $hex\r\nname .int. \\($hex\\)\r\ntagname .<NULL>. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nupper_bound_type $hex \\(BOUND_SIMPLE\\)\r\nlower_bound_type $hex \\(BOUND_SIMPLE\\)\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\ntype_chain $hex\r\ninstance_flags $hex\r\nflags\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\ntype_specific $hex\r\n$gdb_prompt $"\
|
||||
-re "type node $hex\r\nname .int. \\($hex\\)\r\ntagname .<NULL>. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\ntype_chain $hex\r\ninstance_flags $hex\r\nflags\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\ntype_specific $hex\r\n$gdb_prompt $"\
|
||||
{ pass "maint print type" }
|
||||
-re ".*$gdb_prompt $" { fail "maint print type" }
|
||||
timeout { fail "(timeout) maint print type" }
|
||||
|
@ -361,8 +361,7 @@ value_cast (struct type *type, struct value *arg2)
|
||||
{
|
||||
struct type *element_type = TYPE_TARGET_TYPE (type);
|
||||
unsigned element_length = TYPE_LENGTH (check_typedef (element_type));
|
||||
if (element_length > 0
|
||||
&& TYPE_ARRAY_UPPER_BOUND_TYPE (type) == BOUND_CANNOT_BE_DETERMINED)
|
||||
if (element_length > 0 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||
{
|
||||
struct type *range_type = TYPE_INDEX_TYPE (type);
|
||||
int val_length = TYPE_LENGTH (type2);
|
||||
|
@ -1951,7 +1951,7 @@ c_number_of_children (struct varobj *var)
|
||||
{
|
||||
case TYPE_CODE_ARRAY:
|
||||
if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (target) > 0
|
||||
&& TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
|
||||
&& !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||
children = TYPE_LENGTH (type) / TYPE_LENGTH (target);
|
||||
else
|
||||
/* If we don't know how many elements there are, don't display
|
||||
|
Loading…
Reference in New Issue
Block a user