* eval.c (evaluate_subexp_standard): Use value_subscripted_rvalue for

multi_f77_subscript to support values from registers.
	* valarith.c (value_subscripted_rvalue): Remove prototype and static.
	* value.h (value_subscripted_rvalue): Add prototype.

	* f-typeprint.c (f_type_print_base): Add support for TYPE_CODE_UNION.
	Fix output.
	* f-valprint.c (f_val_print): Likewise.
This commit is contained in:
Markus Deuling 2008-04-22 06:53:18 +00:00
parent 68837c9d8d
commit 9eec4d1e39
6 changed files with 28 additions and 8 deletions

View File

@ -1,3 +1,14 @@
2008-04-22 Markus Deuling <deuling@de.ibm.com>
* eval.c (evaluate_subexp_standard): Use value_subscripted_rvalue for
multi_f77_subscript to support values from registers.
* valarith.c (value_subscripted_rvalue): Remove prototype and static.
* value.h (value_subscripted_rvalue): Add prototype.
* f-typeprint.c (f_type_print_base): Add support for TYPE_CODE_UNION.
Fix output.
* f-valprint.c (f_val_print): Likewise.
2008-04-21 Craig Silverstein <csilvers@google.com>
* dwarf2read.c (zlib_decompress_section): Define abfd in the

View File

@ -1720,7 +1720,7 @@ evaluate_subexp_standard (struct type *expect_type,
returns the correct type value */
deprecated_set_value_type (arg1, tmp_type);
return value_ind (value_add (value_coerce_array (arg1), arg2));
return value_subscripted_rvalue (arg1, arg2, 0);
}
case BINOP_LOGICAL_AND:

View File

@ -368,14 +368,22 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show,
break;
case TYPE_CODE_STRUCT:
fprintfi_filtered (level, stream, "Type ");
case TYPE_CODE_UNION:
if (TYPE_CODE (type) == TYPE_CODE_UNION)
fprintfi_filtered (level, stream, "Type, C_Union :: ");
else
fprintfi_filtered (level, stream, "Type ");
fputs_filtered (TYPE_TAG_NAME (type), stream);
fputs_filtered ("\n", stream);
for (index = 0; index < TYPE_NFIELDS (type); index++)
{
f_print_type (TYPE_FIELD_TYPE (type, index), "", stream, show, level + 4);
f_type_print_base (TYPE_FIELD_TYPE (type, index), stream, show,
level + 4);
fputs_filtered (" :: ", stream);
fputs_filtered (TYPE_FIELD_NAME (type, index), stream);
fprintfi_filtered (level, stream, "%s",
TYPE_FIELD_NAME (type, index));
f_type_print_varspec_suffix (TYPE_FIELD_TYPE (type, index),
stream, 0, 0, 0);
fputs_filtered ("\n", stream);
}
fprintfi_filtered (level, stream, "End Type ");

View File

@ -589,9 +589,10 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
break;
case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION:
/* Starting from the Fortran 90 standard, Fortran supports derived
types. */
fprintf_filtered (stream, "{ ");
fprintf_filtered (stream, "( ");
for (index = 0; index < TYPE_NFIELDS (type); index++)
{
int offset = TYPE_FIELD_BITPOS (type, index) / 8;
@ -601,7 +602,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
if (index != TYPE_NFIELDS (type) - 1)
fputs_filtered (", ", stream);
}
fprintf_filtered (stream, "}");
fprintf_filtered (stream, " )");
break;
default:

View File

@ -39,7 +39,6 @@
#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
#endif
static struct value *value_subscripted_rvalue (struct value *, struct value *, int);
static struct type *unop_result_type (enum exp_opcode op, struct type *type1);
static struct type *binop_result_type (enum exp_opcode op, struct type *type1,
struct type *type2);
@ -257,7 +256,7 @@ value_subscript (struct value *array, struct value *idx)
(eg, a vector register). This routine used to promote floats
to doubles, but no longer does. */
static struct value *
struct value *
value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound)
{
struct type *array_type = check_typedef (value_type (array));

View File

@ -558,4 +558,5 @@ extern struct value *value_allocate_space_in_inferior (int);
extern struct value *value_of_local (const char *name, int complain);
extern struct value * value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound);
#endif /* !defined (VALUE_H) */