aboutsummaryrefslogtreecommitdiff
path: root/gdb/c-varobj.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@ericsson.com>2015-01-30 14:43:59 -0500
committerSimon Marchi <simon.marchi@ericsson.com>2015-01-30 14:43:59 -0500
commit2568868e69f710e470c8698a34010daf36500a30 (patch)
tree221125e4d45d545ec01147f49d9add13733e302e /gdb/c-varobj.c
parentca83fa81892ab61870295cb5397c59daff1a55e0 (diff)
Set varobj->path_expr in varobj_get_path_expr
It seems like different languages are doing this differently (e.g. C and Ada). For C, var->path_expr is set inside c_path_expr_of_child. The next time the value is requested, is it therefore not recomputed. Ada does not set this field, but just returns the value. Since the field is never set, the value is recomputed every time it is requested. This patch makes it so that path_expr_of_child's only job is to compute the path expression, not save/cache the value. The field is set by the varobj common code. gdb/ChangeLog: * varobj.c (varobj_get_path_expr): Set var->path_expr. * c-varobj.c (c_path_expr_of_child): Set local var instead of child->path_expr. (cplus_path_expr_of_child): Same.
Diffstat (limited to 'gdb/c-varobj.c')
-rw-r--r--gdb/c-varobj.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gdb/c-varobj.c b/gdb/c-varobj.c
index 1db0957f38..bd0e5fb9d3 100644
--- a/gdb/c-varobj.c
+++ b/gdb/c-varobj.c
@@ -433,9 +433,11 @@ c_name_of_child (struct varobj *parent, int index)
static char *
c_path_expr_of_child (struct varobj *child)
{
+ char *path_expr;
+
c_describe_child (child->parent, child->index, NULL, NULL, NULL,
- &child->path_expr);
- return child->path_expr;
+ &path_expr);
+ return path_expr;
}
static struct value *
@@ -906,9 +908,11 @@ cplus_name_of_child (struct varobj *parent, int index)
static char *
cplus_path_expr_of_child (struct varobj *child)
{
+ char *path_expr;
+
cplus_describe_child (child->parent, child->index, NULL, NULL, NULL,
- &child->path_expr);
- return child->path_expr;
+ &path_expr);
+ return path_expr;
}
static struct value *