From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12474 invoked by alias); 4 Nov 2011 23:05:00 -0000 Received: (qmail 12465 invoked by uid 22791); 4 Nov 2011 23:04:59 -0000 X-SWARE-Spam-Status: No, hits=-3.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-qw0-f41.google.com (HELO mail-qw0-f41.google.com) (209.85.216.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 04 Nov 2011 23:04:46 +0000 Received: by qadc11 with SMTP id c11so3228840qad.0 for ; Fri, 04 Nov 2011 16:04:45 -0700 (PDT) Received: by 10.224.194.5 with SMTP id dw5mr8378484qab.16.1320447885195; Fri, 04 Nov 2011 16:04:45 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.194.5 with SMTP id dw5mr8378472qab.16.1320447885038; Fri, 04 Nov 2011 16:04:45 -0700 (PDT) Received: by 10.224.6.76 with HTTP; Fri, 4 Nov 2011 16:04:44 -0700 (PDT) In-Reply-To: <37B202A1-DCD5-423E-8E30-55A6F2BE21EF@comcast.net> References: <3A3AF5AE-70E8-43D0-B8CE-DCADFEEF879A@comcast.net> <560557F2-1B8B-4633-8CD6-E63705EEAF0E@comcast.net> <83wrckrcg1.fsf@gnu.org> <37B202A1-DCD5-423E-8E30-55A6F2BE21EF@comcast.net> Date: Fri, 04 Nov 2011 23:05:00 -0000 Message-ID: Subject: Re: [RFA] Re: Python: add field access by name and standard python mapping methods to gdb.Type From: Doug Evans To: Paul Koning Cc: Eli Zaretskii , tromey@redhat.com, gdb-patches@sourceware.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-System-Of-Record: true X-IsSubscribed: yes 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 X-SW-Source: 2011-11/txt/msg00127.txt.bz2 On Fri, Nov 4, 2011 at 1:40 PM, Paul Koning wrote: > > On Nov 4, 2011, at 1:41 PM, Doug Evans wrote: > >> On Tue, Oct 4, 2011 at 8:56 AM, Paul Koning wro= te: >>> >>> On Oct 4, 2011, at 11:41 AM, Eli Zaretskii wrote: >>> >>>>> From: Paul Koning >>>>> Date: Tue, 4 Oct 2011 11:29:58 -0400 >>>>> Cc: Doug Evans , gdb-patches@sourceware.org >>>>> >>>>> >>>>>> For future reference, there is a separate ChangeLog in doc. =A0Entri= es for >>>>>> documentation have to go there. >>>>> >>>>> I overlooked that file. =A0Thanks for the reference. =A0Should I move= the entry there? >>>> >>>> Yes, please. >>> >>> Done. >>> >>>> >>>>>> Could you write a NEWS entry for this change? >>>>> >>>>> How about this? >>>> >>>> Fine with me, thanks. >>> >>> Committed. >> >> Ummm, hi. >> I know I looked at the patch and approved it myself, but having played >> with it for awhile I'm having second thoughts. >> And before a release goes out I'd like to get this resolved. >> If you want I'll do the work, or at least help however I can. >> >> One way to look at my reasoning is that a type "has a" field list but >> it's not the case that a type "is a" field list. >> And I'm uncomfortable with len(gdb.parse_and_eval("1").type) =3D=3D 0. >> IOW, len(gdb.Type of "int") is now 0. =A0I think it should flag an excep= tion. >> >> OTOH, adding the new support to the result of gdb.Type.fields() is great. >> >> Anyone object to me changing things and moving the new iterator >> support to gdb.Type.fields()? >> Or do people disagree with my reasoning? >> I haven't looked into what's involved. =A0At this point I just want to >> get the user-visible semantics right. > > Part of my reasoning is to have gdb.Value and gdb.Type look alike. =A0gdb= .Value always had field lookup by name, i.e., it behaves like a Python dict= ionary. For structs and such sure, but not so for scalars. Scalars shouldn't behave like a dictionary. If we're going for consistency between gdb.Value and gdb.Type then for structs and such we'll need len(gdb.Value) to return the number of fields. [Right?] Maybe I'd be happy if gdb.Type (and maybe gdb.Value) were simply more rigorous in throwing exceptions for invalid cases. > So I wanted to make the same apply to gdb.Type since the analogy seemed o= bvious. =A0And in both cases, I wanted the normal Python dict methods to be= available. =A0(For gdb.Value, that's not submitted yet.) > > In my view, gdb.Type.fields remains as a backward compatibility synonym f= or gdb.Type.values (the standard dict method). > > I do agree that having len() return 0 instead of an error seems wrong. That could be fixed by having typy_length throw an appropriate error for scalars, etc.