diff options
author | Nick Roberts <nickrob@snap.net.nz> | 2006-03-27 00:15:22 +0000 |
---|---|---|
committer | Nick Roberts <nickrob@snap.net.nz> | 2006-03-27 00:15:22 +0000 |
commit | 7a24eb7c248baeff44251162297c62316727c114 (patch) | |
tree | 4ad15983a202ce5b332742f5d258e59ac20c23d0 /gdb/varobj.c | |
parent | 75483fbe58e0c3246dfea7ed3ecc2de5e0d1ef8f (diff) | |
download | gdb-7a24eb7c248baeff44251162297c62316727c114.zip gdb-7a24eb7c248baeff44251162297c62316727c114.tar.gz gdb-7a24eb7c248baeff44251162297c62316727c114.tar.bz2 |
(c_name_of_child, c_value_of_child): Allow non-zero
offsets for languages like Fortran.
Diffstat (limited to 'gdb/varobj.c')
-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; |