Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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 3/3] gdb/python: extend gdb.write to support styled output
Date: Tue, 23 Sep 2025 18:05:14 +0100	[thread overview]
Message-ID: <87ms6lf6b9.fsf@redhat.com> (raw)
In-Reply-To: <87ikhil4ji.fsf@tromey.com>

Tom Tromey <tom@tromey.com> writes:

>>>>>> "Andrew" == Andrew Burgess <aburgess@redhat.com> writes:
>
> Andrew> Using gdb.write with a style object more closely matches how GDB
> Andrew> handles styling internally, and has the benefit that the user doesn't
> Andrew> need to remember to restore the default style when they are done.
>
> I'm mildly meh on this one since I tend to think users should use print
> and that gdb.write is an implementation detail.  But since it exists...
>
> Andrew> +  return PyObject_TypeCheck (obj, &style_object_type);
>
> Andrew> +/* See python-internal.h.   */
> Andrew> +
> Andrew> +std::optional<ui_file_style>
> Andrew> +gdbpy_style_object_to_ui_file_style (PyObject *obj)
> Andrew> +{
> Andrew> +  gdb_assert (obj != nullptr);
> Andrew> +  if (!gdbpy_is_style (obj))
> Andrew> +    {
> Andrew> +      PyErr_Format
> Andrew> +	(PyExc_TypeError, _("argument must be a gdb.Style object, not %s."),
> Andrew> +	 Py_TYPE (obj)->tp_name);
> Andrew> +      return {};
> Andrew> +    }
> Andrew> +
> Andrew> +  style_object *style_obj = (style_object *) obj;
> Andrew> +  return stylepy_to_style (style_obj);
>
>
> Andrew> +  if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|iO", keywords, &arg,
> Andrew> +					&stream_type, &style_obj))
> Andrew> +    return nullptr;
> Andrew> +
> Andrew> +  if (style_obj != Py_None && !gdbpy_is_style (style_obj))
> Andrew> +    {
> Andrew> +      PyErr_Format
> Andrew> +	(PyExc_TypeError,
> Andrew> +	 _("'style' argument must be gdb.Style or None, not %s."),
> Andrew> +	 Py_TYPE (style_obj)->tp_name);
> Andrew> +      return nullptr;
>
> FWIW if the type object is available there's a way to get Python to do
> this bit when parsing the arguments.

I think you're referring too 'O!' maybe?  The reason that doesn't work
is that the argument can be a gdb.Style _or_ None.

It feels like this must be a common pattern, so I would have expected to
find a modifier that takes a named type or accepts None, but I couldn't
find anything.

Is there another trick that I'm not aware of?  Would love to know
because I'm pretty sure I've had to do this elsewhere in GDB when an
argument can also be None.

> This explicit check is fine too, but it seems to me that this is
> redundant with the check that gdbpy_style_object_to_ui_file_style does
> and so this could just delegate to that.

Given gdbpy_style_object_to_ui_file_style is only used in this one
place, what I did in the end was to drop the gdbpy_is_style check from
gdbpy_style_object_to_ui_file_style, replacing it with an assert.

Then I've retained the check in gdbpy_write.

The reason is that the error message in gdbpy_write is so much more
descriptive, it names the argument, and says that the argument can be a
gdb.Style or None.  The error from gdbpy_style_object_to_ui_file_style
was much more generic.  I prefer accurate error messages wherever
possible.

So, after this change, there's only one gdbpy_is_style check (not
counting the assert), and only one place where the error message is set
if the argument is the wrong type.

I posted a v9 series with these changes in, let me know what you think.

Thanks,
Andrew


  reply	other threads:[~2025-09-23 17:07 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
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 [this message]
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=87ms6lf6b9.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