From: Pedro Alves <palves@redhat.com>
To: Simon Marchi <simon.marchi@ericsson.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH 4/6] Constify some parameters in the varobj code
Date: Tue, 03 Feb 2015 16:55:00 -0000 [thread overview]
Message-ID: <54D0FD8D.5050408@redhat.com> (raw)
In-Reply-To: <1422559716-5480-4-git-send-email-simon.marchi@ericsson.com>
On 01/29/2015 08:28 PM, Simon Marchi wrote:
> To make it clear that some functions should not modify the variable
> object, this patch adds the const qualifier where it makes sense to some
> struct varobj * parameters. Most getters should take a const pointer to
> guarantee they don't modify the object.
>
> Unfortunately, I couldn't add it to some callbacks (such as name_of_child).
> In the C implementation, they call c_describe_child, which calls
> varobj_get_path_expr. varobj_get_path_expr needs to modify the object in
> order to cache the computed value. It therefore can't take a const
> pointer, and it affects the whole call chain. I suppose that's where you
> would use a "mutable" in C++.
FYI, in these cases it's totally fine to have the function take a const pointer,
and then cast away the const inside the function. We do exactly that in
a few places. E.g.:
/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
in the language-specific part of GSYMBOL, if it has not been
previously computed. Tries to save the decoded name in the same
obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
in any case, the decoded symbol has a lifetime at least that of
GSYMBOL).
The GSYMBOL parameter is "mutable" in the C++ sense: logically
const, but nevertheless modified to a semantically equivalent form
when a decoded name is cached in it. */
const char *
ada_decode_symbol (const struct general_symbol_info *arg)
{
struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
...
Thanks,
Pedro Alves
next prev parent reply other threads:[~2015-02-03 16:55 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 ` [PATCH 3/6] Set varobj->path_expr in varobj_get_path_expr Simon Marchi
2015-01-30 18:55 ` 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 [this message]
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=54D0FD8D.5050408@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=simon.marchi@ericsson.com \
/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