From: Doug Evans <xdje42@gmail.com>
To: Andy Wingo <wingo@igalia.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: Relationship between GDB commands in Python and Guile
Date: Fri, 27 Feb 2015 04:21:00 -0000 [thread overview]
Message-ID: <CAP9bCMR64nSmxqmQhMULUE3_0fqHn=fNY5DND7__3=+Uj9=VXw@mail.gmail.com> (raw)
In-Reply-To: <87bnkgoki0.fsf@igalia.com>
On Thu, Feb 26, 2015 at 5:44 AM, Andy Wingo <wingo@igalia.com> wrote:
> Hi,
>
> "info pretty-printers" won't list pretty-printers that are written in
> Scheme. Likewise for type printers, frame filters, in the future frame
> sniffers, etc etc.
>
> Is there a story about how this is supposed to work?
>
> Options:
>
> 1. Do nothing, you have to use a Guile API to query and manipulate
> Guile pretty-printers.
>
> 2. Somehow bake the abstraction of registered pretty printers more
> deeply into GDB, and move the implementation of the command into
> GDB core.
>
> 3. Somehow bake the abstraction of registered pretty printers more
> deeply into GDB, but still have the command implemented in Python.
>
> 4. Have Python provide a hooks for each of these commands by which
> Guile could provide it with additional entries. Pretty nasty.
>
> Not sure if there are more options.
>
> I think (1) is an OK option if that's what the maintainers choose, but I
> wanted to know. (3) seems to me to be the other viable option.
> Something like:
>
> struct extension
> {
> const char *name;
> bool is_enabled;
> int priority;
> enum extension_language language;
> void *data;
> };
>
> void
> free_extension (struct extension *ext)
> {
> /* language-specifc free of ext->data, like Py_DecRef */
> free (ext);
> }
>
> enum extension_type
> {
> EXT_TYPE_PRETTY_PRINTER,
> EXT_TYPE_FRAME_FILTER,
> ...
> };
>
> enum extension_visit_result
> {
> /* Stop visiting extensions. */
> EXT_VISIT_DONE,
>
> /* Keep on visiting extensions. */
> EXT_VISIT_CONTINUE,
>
> /* Whoa Nellie! */
> EXT_VISIT_ERROR
> };
>
> typedef enum extension_visit_result extension_visitor (struct extension*,
> void *);
>
> void visit_all_extensions (enum extension_type type,
> extension_visitor visit,
> void *data);
>
> void visit_extensions_for_progspace (enum extension_type type,
> struct program_space *progspace,
> extension_visitor visit,
> void *data);
>
> Et cetera. The invocation mechanism for extensions could remain the
> same. This could just remain a common query API to find and/or collect
> extensions.
>
> An open question would be how to indicate that python extensions win
> over guile extensions. Perhaps we should query extensions by language,
> then, and then list python ones first. Having a unified "priority"
> doesn't make sense in that context. Perhaps the pretty-printing (etc)
> mechanism should, in that case, instead be more fine-grained -- not just
> "try python first", but instead trying the printers (frame filters, etc)
> in order of priority. Perhaps that's too much setup work though; not
> sure what the cost is to "enter" python mode etc.
>
> I'm very pleased about the Guile integration, but I do understand that
> having two extension languages raises a number of irritating issues like
> this one and that might lead to choosing option (1) over something more
> unified. That's fine by me. Let me know your thoughts!
>
> Andy
Hi.
I've got an opinion on the subject,
but I'd like to give the rest of the community a chance to respond first.
Cheers.
next prev parent reply other threads:[~2015-02-27 4:21 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-26 13:44 Andy Wingo
2015-02-27 4:21 ` Doug Evans [this message]
2015-03-16 12:48 ` Pedro Alves
2015-03-17 12:04 ` Yao Qi
2015-03-17 13:44 ` Andy Wingo
2015-03-17 15:50 ` Doug Evans
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='CAP9bCMR64nSmxqmQhMULUE3_0fqHn=fNY5DND7__3=+Uj9=VXw@mail.gmail.com' \
--to=xdje42@gmail.com \
--cc=gdb-patches@sourceware.org \
--cc=wingo@igalia.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