From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28473 invoked by alias); 28 May 2014 19:12:49 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 28464 invoked by uid 89); 28 May 2014 19:12:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-we0-f169.google.com Received: from mail-we0-f169.google.com (HELO mail-we0-f169.google.com) (74.125.82.169) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 28 May 2014 19:12:47 +0000 Received: by mail-we0-f169.google.com with SMTP id u56so11922329wes.28 for ; Wed, 28 May 2014 12:12:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=Qvz2YKfiKIvoKWpGXIwWgS1WVOs1nGBU3Q8g4iJFyHo=; b=RlRGn9Whr7xLmO6SGMqtXo7dF1YBmWjywgTh4dmZV4967Kmx42EGnyf9xkgT1CNpAX aumVVyGYlL/h1Lf80pFe9WqdeNJqXNh3RT5W/QEKbY/3PueGdZF2TYUIhEsTiZhy/t9+ ZRxbJBhXrEDzJ1vxa3/0NuVi0PKWwB3bbt9VZ3jIN8vbjD5pK+1dqadUvi41UdbTzpUo aRjYODrWBDXpaYCNJzy65VhgAkLFZr5L3JbQNx3F9i89OG96NKikveJzgC/VI1pbxcsB 2RqMh9rEunBryQQLfi0EuGeGYWQv29FZt9TZfsC6CSSqn6HuXG0GnSSdxpOlotC22fnz o19A== X-Gm-Message-State: ALoCoQljYhQXpnE6JpN8R8dKbQRC5hFkXrS68gIL7sg9m5CyACswF3lxTIsFIcewLXqEod7lZhBC MIME-Version: 1.0 X-Received: by 10.194.249.134 with SMTP id yu6mr2374964wjc.86.1401304363401; Wed, 28 May 2014 12:12:43 -0700 (PDT) Received: by 10.217.51.7 with HTTP; Wed, 28 May 2014 12:12:43 -0700 (PDT) In-Reply-To: References: Date: Wed, 28 May 2014 19:12:00 -0000 Message-ID: Subject: Re: [Patch v18 4/4] Add xmethod support to the Python API From: Siva Chandra To: Doug Evans Cc: gdb-patches Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2014-05/txt/msg00699.txt.bz2 On Tue, May 27, 2014 at 10:41 PM, Doug Evans 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.