diff options
-rw-r--r-- | gdb/varobj.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/gdb/varobj.c b/gdb/varobj.c index 76ced13..c16e088 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -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; |