This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch v18 4/4] Add xmethod support to the Python API


On Tue, May 27, 2014 at 10:41 PM, Doug Evans <xdje42@gmail.com> wrote:
> Another thing occurs to me.
> Pretty-printers are invoked, initially, via __call__, not via a "print"
> method or some such.
> It would be more python-esque if XMethodMatcher.match was renamed __call__
> and XMethodWorker.invoke was renamed __call__.

While I agree XMethodWorker.invoke can be removed and we could make
XMethodWorker a callable, I am not sure we want to make XMethodMatcher
a callable. I know pretty printers are callables but do not know the
reason why they are so (probably because there is an old way and a new
way of writing pretty printers and both have to be supported). For me,
a __call__ method in Python is like operator() in C++ which I feel
should be used only if it is meaningful to make the objects callable.
Even for the XMethodWorker, I preferred a method 'invoke' over making
workers callables because they are named as workers and not as
methods. The only reason I had to bring in the notion of XMethods
(which are used only for enable/disable) and XMethodWorker is because
I had to ape the pretty printer setup. I propose a slightly different
design here which does not ape the pretty printers completely but
makes it less confusing:

1. Have XMethodMatchers with a method named 'match'. Matchers have an
attribute 'enabled'. GDB invokes the 'match' method on registered
matchers if they are enabled. On a match, the matcher returns a
sequence of matching and enabled XMethods. See #2 to know what
XMethods are. An XMethodMatcher also has an attribute 'method', which
is a sequence of XMethods the matcher manages. This provides a way to
enable/disable individual XMethods from enable/disable commands.
2. Have XMethods which are callables, but also have a method
'get_arg_types'. XMethods also have an 'enabled' attribute to indicate
whether they are enabled or not. GDB calls an XMethod (they are
callables) if it determines that the XMethod is the best overload
match.

> Finally, IWBN if XMethodWorker.__call__ can be written using the same
> arg list as the c++ method (instead of the "args" argument that exists
> now).

This can be done. I did play with this idea in the past, but do not
remember now as to why I abandoned it.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]