From: Andrew Burgess <aburgess@redhat.com>
To: Tom Tromey <tom@tromey.com>
Cc: gdb-patches@sourceware.org, Eli Zaretskii <eliz@gnu.org>
Subject: Re: [PATCHv8 1/3] gdb/python: add gdb.Style class
Date: Tue, 23 Sep 2025 17:59:05 +0100 [thread overview]
Message-ID: <87plbhf6li.fsf@redhat.com> (raw)
In-Reply-To: <87qzw6l4y6.fsf@tromey.com>
Tom Tromey <tom@tromey.com> writes:
>>>>>> "Andrew" == Andrew Burgess <aburgess@redhat.com> writes:
>
> Andrew> +static std::optional<ui_file_style>
> Andrew> +stylepy_style_from_name (const char *name, bool *has_intensity_ptr = nullptr,
> Andrew> + const cmd_list_element **found_cmd_ptr = nullptr)
> Andrew> +{
> Andrew> + std::string cmd_str = std::string ("show style ") + name;
> Andrew> +
> Andrew> + struct cmd_list_element *cmd = nullptr;
> Andrew> + struct cmd_list_element *alias = nullptr;
> Andrew> + int found;
> Andrew> + try
> Andrew> + {
> Andrew> + struct cmd_list_element *prefix;
> Andrew> + found = lookup_cmd_composition (cmd_str.c_str (), &alias, &prefix, &cmd);
> Andrew> + }
> Andrew> + catch (const gdb_exception &ex)
> Andrew> + {
> Andrew> + PyErr_Format (PyExc_RuntimeError,
> Andrew> + _("style '%s' cannot be found."), name);
> Andrew> + return {};
>
> Noting this for a later comment...
>
> Andrew> +static PyObject *
> Andrew> +stylepy_apply (PyObject *self, PyObject *args, PyObject *kw)
> Andrew> +{
> Andrew> + style_object *style_obj = (style_object *) self;
> Andrew> +
> Andrew> + static const char *keywords[] = { "string", nullptr };
> Andrew> + PyObject *input_obj;
> Andrew> +
> Andrew> + if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "O!", keywords,
> Andrew> + &PyUnicode_Type, &input_obj))
> Andrew> + return nullptr;
>
> Why "O!" and not "s" here?
This is possibly a little premature optimisation, but capturing the
string as O! means I get a 'PyObject *'. In the case where styling is
not applied I can then just Py_INCREF that object and return it.
If I capture the argument with "s" then I get a 'char *' back, so in the
case where no styling is being added I have to create a new PyObject by
converting the string _back_ again.
I've left this code as it is for now, but I have added a comment. If
you dislike this then just let me know, it's not essential, and I can
switch to using "s".
>
> Andrew> + gdb::unique_xmalloc_ptr<char>
> Andrew> + input (python_string_to_target_string (input_obj));
>
> target string seems like an unusual choice here.
Yeah, especially as I use host_string_to_python_string about 5 lines
later to convert the adjusted string back to a Python object. I've
fixed this to use python_string_to_host_string.
>
> Andrew> + std::string output
> Andrew> + = string_printf ("%s%s%s", style->to_ansi ().c_str (), input.get (),
> Andrew> + ui_file_style ().to_ansi ().c_str ());
>
> This can just using "+" which seems a little cleaner.
Done.
>
> Andrew> + /* Handle named styles. This is harder, we need to write to the actual
> Andrew> + parameter. First though, look up the named style to see if it has an
> Andrew> + intensity. HAS_INTENSITY will be set true only if the style exists,
> Andrew> + and has an 'intensity' setting. */
> Andrew> +
> Andrew> + bool has_intensity = false;
> Andrew> + (void) stylepy_style_from_name (style_obj->style_name, &has_intensity);
> Andrew> + if (!has_intensity)
> Andrew> + {
> Andrew> + PyErr_Format
> Andrew> + (PyExc_ValueError, "the intensity of style '%s' is not writable.",
> Andrew> + style_obj->style_name);
> Andrew> + return -1;
>
> I guess I don't know the Python rule here, but it seems like if
> stylepy_style_from_name returns {}, then this can set an exception while
> one is already set. See the snippet above.
>
> Instead of the (void) I think it would be a bit better to just check the
> return result of stylepy_style_from_name, and if it returns an error,
> just return -1 directly; and only then do the has_intensity check.
You are absolutely correct. I fixed this, capturing the return value
and checking we found a style.
I've posted a v9 series with all these fixes.
Thanks,
Andrew
next prev parent reply other threads:[~2025-09-23 16:59 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-04 9:39 [PATCH 0/2] Python Style API Andrew Burgess
2025-06-04 9:39 ` [PATCH 1/2] gdb/python: add gdb.Style class Andrew Burgess
2025-06-04 9:39 ` [PATCH 2/2] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-06 13:38 ` [PATCHv2 0/2] Python Style API Andrew Burgess
2025-06-06 13:38 ` [PATCHv2 1/2] gdb/python: add gdb.Style class Andrew Burgess
2025-06-06 14:21 ` Eli Zaretskii
2025-06-06 13:38 ` [PATCHv2 2/2] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-07 10:44 ` [PATCHv3 0/2] Python Style API Andrew Burgess
2025-06-07 10:44 ` [PATCHv3 1/2] gdb/python: add gdb.Style class Andrew Burgess
2025-06-07 10:44 ` [PATCHv3 2/2] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-09 15:54 ` [PATCHv3 0/2] Python Style API Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 0/4] " Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 1/4] gdb: allow gdb.Color to work correctly with pagination Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 2/4] gdb/python: add gdb.Style class Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 3/4] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 4/4] gdb: extend gdb.write to support styled output Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 0/4] Python Style API Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 1/4] gdb: allow gdb.Color to work correctly with pagination Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 2/4] gdb/python: add gdb.Style class Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 3/4] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 4/4] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 0/4] Python Style API Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 1/4] gdb: allow gdb.Color to work correctly with pagination Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 2/4] gdb/python: add gdb.Style class Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 3/4] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 4/4] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-08-13 10:25 ` [PATCHv7 0/4] Fix for gdb.Color + pagination AND new gdb.Style API Andrew Burgess
2025-08-13 10:25 ` [PATCHv7 1/4] gdb: allow gdb.Color to work correctly with pagination Andrew Burgess
2025-08-24 16:13 ` Andrew Burgess
2025-08-25 10:21 ` Tom de Vries
2025-08-26 14:35 ` [PATCH] gdb/testsuite: work around empty substring bug in expect Andrew Burgess
2025-08-27 6:24 ` Tom de Vries
2025-08-13 10:29 ` [PATCHv7 2/4] gdb/python: add gdb.Style class Andrew Burgess
2025-08-13 10:30 ` [PATCHv7 4/4] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-08-13 12:37 ` Eli Zaretskii
2025-08-13 10:34 ` [PATCHv7 3/4] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-08-13 13:05 ` Eli Zaretskii
2025-08-13 13:05 ` Eli Zaretskii
2025-08-27 11:34 ` [PATCHv8 0/3] new gdb.Style API Andrew Burgess
2025-08-27 11:34 ` [PATCHv8 1/3] gdb/python: add gdb.Style class Andrew Burgess
2025-09-16 16:47 ` Tom Tromey
2025-09-23 16:59 ` Andrew Burgess [this message]
2025-08-27 11:34 ` [PATCHv8 2/3] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-09-16 16:50 ` Tom Tromey
2025-08-27 11:34 ` [PATCHv8 3/3] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-09-16 16:56 ` Tom Tromey
2025-09-23 17:05 ` Andrew Burgess
2025-09-23 18:38 ` Tom Tromey
2025-09-23 16:54 ` [PATCHv9 0/3] new gdb.Style API Andrew Burgess
2025-09-23 16:54 ` [PATCHv9 1/3] gdb/python: add gdb.Style class Andrew Burgess
2025-09-23 16:54 ` [PATCHv9 2/3] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-09-23 16:54 ` [PATCHv9 3/3] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-10-03 19:27 ` [PATCHv9 0/3] new gdb.Style API Tom Tromey
2025-10-05 12:51 ` Andrew Burgess
2025-10-05 15:16 ` Tom de Vries
2025-10-05 17:59 ` Tom Tromey
2025-10-06 9:01 ` Andrew Burgess
2025-10-05 18:03 ` Andrew Burgess
2025-10-05 18:41 ` Tom de Vries
2025-10-06 9:01 ` Andrew Burgess
2025-10-06 12:29 ` Tom de Vries
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=87plbhf6li.fsf@redhat.com \
--to=aburgess@redhat.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
--cc=tom@tromey.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