OSDN Git Service

* eval.c (evaluate_subexp_standard): Use value_subscripted_rvalue for
authordeuling <deuling>
Tue, 22 Apr 2008 06:53:17 +0000 (06:53 +0000)
committerdeuling <deuling>
Tue, 22 Apr 2008 06:53:17 +0000 (06:53 +0000)
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.

gdb/ChangeLog
gdb/eval.c
gdb/f-typeprint.c
gdb/f-valprint.c
gdb/valarith.c
gdb/value.h

index 976fea1..db29ac8 100644 (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
index 79defeb..8a0cd87 100644 (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:
index d55c165..ad93152 100644 (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 ");
index b2e3271..70ad59f 100644 (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:
index 7d6f35b..7e6b66e 100644 (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));
index 5f8fe58..55eb253 100644 (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) */