aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/varobj.c13
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;