(c_name_of_child, c_value_of_child): Allow non-zero

offsets for languages like Fortran.
This commit is contained in:
Nick Roberts 2006-03-27 00:15:22 +00:00
parent 75483fbe58
commit 7a24eb7c24
1 changed files with 7 additions and 6 deletions

View 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;