(c_name_of_child, c_value_of_child): Allow non-zero
authorNick Roberts <nickrob@snap.net.nz>
Mon, 27 Mar 2006 00:15:22 +0000 (00:15 +0000)
committerNick Roberts <nickrob@snap.net.nz>
Mon, 27 Mar 2006 00:15:22 +0000 (00:15 +0000)
offsets for languages like Fortran.

gdb/varobj.c

index 76ced134a8b33dc3e83b002b3c9f654bbc388ef5..c16e08819fe1cb80d01e3b95c0e0dac5cc9e31a1 100644 (file)
@@ -817,9 +817,7 @@ varobj_set_value (struct varobj *var, char *expression)
       int i;
 
       input_radix = 10;                /* ALWAYS reset to decimal temporarily */
-      if (!gdb_parse_exp_1 (&s, 0, 0, &exp))
-       /* We cannot proceed without a well-formed expression. */
-       return 0;
+      exp = parse_exp_1 (&s, 0, 0);
       if (!gdb_evaluate_expression (exp, &value))
        {
          /* We cannot proceed without a valid expression. */
@@ -1833,7 +1831,8 @@ c_name_of_child (struct varobj *parent, int index)
   switch (TYPE_CODE (type))
     {
     case TYPE_CODE_ARRAY:
-      name = xstrprintf ("%d", index);
+      name = xstrprintf ("%d", index
+                        + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)));
       break;
 
     case TYPE_CODE_STRUCT:
@@ -1931,6 +1930,7 @@ c_value_of_child (struct varobj *parent, int index)
   struct value *indval;
   struct type *type, *target;
   char *name;
+  int real_index;
 
   type = get_type (parent);
   target = get_target_type (type);
@@ -1943,13 +1943,14 @@ c_value_of_child (struct varobj *parent, int index)
       switch (TYPE_CODE (type))
        {
        case TYPE_CODE_ARRAY:
+         real_index = index + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
 #if 0
          /* This breaks if the array lives in a (vector) register. */
-         value = value_slice (temp, index, 1);
+         value = value_slice (temp, real_index, 1);
          temp = value_coerce_array (value);
          gdb_value_ind (temp, &value);
 #else
-         indval = value_from_longest (builtin_type_int, (LONGEST) index);
+         indval = value_from_longest (builtin_type_int, (LONGEST) real_index);
          gdb_value_subscript (temp, indval, &value);
 #endif
          break;