Re: [RFA] Re: Python: add field access by name and standard python mapping methods to gdb.Type

Paul Koning
2011-11-04T20:41:03Z

On Nov 4, 2011, at 1:41 PM, Doug Evans wrote:

> On Tue, Oct 4, 2011 at 8:56 AM, Paul Koning <paulkoning@comcast.net> wrote:
>>
>> On Oct 4, 2011, at 11:41 AM, Eli Zaretskii wrote:
>>
>>>> From: Paul Koning <paulkoning@comcast.net>
>>>> Date: Tue, 4 Oct 2011 11:29:58 -0400
>>>> Cc: Doug Evans <dje@google.com>, gdb-patches@sourceware.org
>>>>
>>>>
>>>>> For future reference, there is a separate ChangeLog in doc. Entries for
>>>>> documentation have to go there.
>>>>
>>>> I overlooked that file. Thanks for the reference. Should 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) == 0.
> IOW, len(gdb.Type of "int") is now 0. I think it should flag an exception.
>
> 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. At 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. gdb.Value always had field lookup by name, i.e., it behaves like a Python dictionary. So I wanted to make the same apply to gdb.Type since the analogy seemed obvious. And in both cases, I wanted the normal Python dict methods to be available. (For gdb.Value, that's not submitted yet.)

In my view, gdb.Type.fields remains as a backward compatibility synonym for gdb.Type.values (the standard dict method).

I do agree that having len() return 0 instead of an error seems wrong.

paul