From: Phil Muldoon <pmuldoon@redhat.com>
To: Peter Linss <peter@elemental.software>, gdb-patches@sourceware.org
Subject: Re: [PATCH] Fix usage of to_string() for pretty-printers with children
Date: Thu, 25 May 2017 10:06:00 -0000 [thread overview]
Message-ID: <f7fe50c3-9e75-a17e-3b35-0f7fd8199bea@redhat.com> (raw)
In-Reply-To: <DA4CEF9D-0714-4EA8-A08A-A3F02B923269@elemental.software>
On 25/05/17 03:33, Peter Linss wrote:
> gdb/ChangeLog:
>
> * varobj.c (varobj_value_get_print_value): Call pretty-printer
> to_string method for value if present even when children
> method is available.
> (dynamic_varobj_has_child_method) Remove unused function.
>
> gdb/doc/ChangeLog:
>
> * gdb.texinfo (Variable Objects, Result): Update description of
> value to reflect to_string output.
Thanks.
>
> -#if HAVE_PYTHON
> -
> -static int
> -dynamic_varobj_has_child_method (const struct varobj *var)
> -{
> - PyObject *printer = var->dynamic->pretty_printer;
> -
> - if (!gdb_python_initialized)
> - return 0;
> -
> - gdbpy_enter_varobj enter_py (var);
> - return PyObject_HasAttr (printer, gdbpy_children_cst);
> -}
> -#endif
> -
In removing the above you are removing the Python environment call
which, among other things, ensures the state of the Python GIL. The
replacement hunk below does not make the same call? Is this
intentional?
> /* A factory for creating dynamic varobj's iterators. Returns an
> iterator object suitable for iterating over VAR's children. */
>
> @@ -2420,11 +2405,6 @@ varobj_value_get_print_value (struct value *value,
>
> if (value_formatter)
> {
> - /* First check to see if we have any children at all. If so,
> - we simply return {...}. */
> - if (dynamic_varobj_has_child_method (var))
> - return "{...}";
> -
> if (PyObject_HasAttr (value_formatter, gdbpy_to_string_cst))
> {
> struct value *replacement;
> @@ -2486,6 +2466,13 @@ varobj_value_get_print_value (struct value *value,
> if (replacement)
> value = replacement;
> }
> + else
> + {
> + /* If we don't have to_string but we have children,
> + we simply return {...}. */
> + if (PyObject_HasAttr (value_formatter, gdbpy_children_cst))
> + return "{...}";
> + }
You've removed a function but replaced it with an if (...) (and the
associated safety calls). I'm not sure this is the right thing to do.
Also, if the to_string call has changed, it might constitute an API
change.
And, alas, all changes need tests, unless obvious, and the outcome of
this test is not obvious (well to me ;) )
Cheers
Phil
next prev parent reply other threads:[~2017-05-25 10:06 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-25 2:33 Peter Linss
2017-05-25 10:06 ` Phil Muldoon [this message]
2017-05-25 17:42 ` Peter Linss
2017-06-14 2:36 ` Peter Linss
2017-05-25 14:59 ` Eli Zaretskii
2017-05-25 17:51 ` Peter Linss
2017-05-25 18:13 ` Eli Zaretskii
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=f7fe50c3-9e75-a17e-3b35-0f7fd8199bea@redhat.com \
--to=pmuldoon@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=peter@elemental.software \
/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