From: Simon Marchi <simon.marchi@ericsson.com>
To: <gdb-patches@sourceware.org>
Cc: Simon Marchi <simon.marchi@ericsson.com>
Subject: [PATCH 3/6] Set varobj->path_expr in varobj_get_path_expr
Date: Fri, 30 Jan 2015 01:56:00 -0000 [thread overview]
Message-ID: <1422559716-5480-3-git-send-email-simon.marchi@ericsson.com> (raw)
In-Reply-To: <1422559716-5480-1-git-send-email-simon.marchi@ericsson.com>
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.
---
gdb/c-varobj.c | 12 ++++++++----
gdb/varobj.c | 9 +++++----
2 files changed, 13 insertions(+), 8 deletions(-)
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 *
--
2.1.4
next prev parent reply other threads:[~2015-01-29 19:28 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-29 19:29 [PATCH 1/6] Free results of varobj_get_expression Simon Marchi
2015-01-30 1:56 ` Simon Marchi [this message]
2015-01-30 18:55 ` [PATCH 3/6] Set varobj->path_expr in varobj_get_path_expr Joel Brobecker
2015-01-30 22:58 ` Simon Marchi
2015-01-30 3:13 ` [PATCH 2/6] Mention which return values need to be freed in lang_varobj_ops Simon Marchi
2015-01-30 8:19 ` Joel Brobecker
2015-01-30 20:10 ` Simon Marchi
2015-01-31 20:06 ` Joel Brobecker
2015-02-02 18:18 ` Simon Marchi
2015-01-30 3:28 ` [PATCH 6/6] Fix varobj_delete comment Simon Marchi
2015-01-30 17:04 ` Joel Brobecker
2015-01-31 3:20 ` Simon Marchi
2015-01-30 3:33 ` [PATCH 5/6] Mention that create_child takes ownership of the allocated name Simon Marchi
2015-01-30 16:41 ` Joel Brobecker
2015-01-31 1:14 ` Simon Marchi
2015-01-30 3:35 ` [PATCH 4/6] Constify some parameters in the varobj code Simon Marchi
2015-01-30 9:03 ` Joel Brobecker
2015-01-30 22:59 ` Simon Marchi
2015-02-03 16:55 ` Pedro Alves
2015-02-03 18:07 ` Simon Marchi
2015-01-30 3:40 ` [PATCH 1/6] Free results of varobj_get_expression Joel Brobecker
2015-01-30 22:57 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1422559716-5480-3-git-send-email-simon.marchi@ericsson.com \
--to=simon.marchi@ericsson.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox