diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/c-varobj.c | 12 | ||||
-rw-r--r-- | gdb/varobj.c | 9 |
3 files changed, 20 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6738267..3385cfa 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2015-01-30 Simon Marchi <simon.marchi@ericsson.com> + * 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. + +2015-01-30 Simon Marchi <simon.marchi@ericsson.com> + * mi-cmd-var.c (print_varobj): Free varobj_get_expression result. (mi_cmd_var_info_expression): Same. diff --git a/gdb/c-varobj.c b/gdb/c-varobj.c index 1db0957..bd0e5fb 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 * diff --git a/gdb/varobj.c b/gdb/varobj.c index 6c9257d..28d388e 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -1034,16 +1034,17 @@ varobj_get_path_expr_parent (struct varobj *var) char * varobj_get_path_expr (struct varobj *var) { - if (var->path_expr != NULL) - return var->path_expr; - else + if (var->path_expr == NULL) { /* For root varobjs, we initialize path_expr when creating varobj, so here it should be child varobj. */ gdb_assert (!is_root_p (var)); - return (*var->root->lang_ops->path_expr_of_child) (var); + + var->path_expr = (*var->root->lang_ops->path_expr_of_child) (var); } + + return var->path_expr; } const struct language_defn * |