Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Paul Koning <paulkoning@comcast.net>
To: Tom Tromey <tromey@redhat.com>
Cc: Li Yu <raise.sail@gmail.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH v2] gdb/python: add missing handling for anonymous members of struct and union
Date: Tue, 04 Oct 2011 18:05:00 -0000	[thread overview]
Message-ID: <ABB9CE3B-04DC-4EA9-A25A-F3590025AB5C@comcast.net> (raw)
In-Reply-To: <m38vp0pvc9.fsf@fleche.redhat.com>


On Oct 4, 2011, at 12:36 PM, Tom Tromey wrote:

> ...
> I don't understand why the iterator iterates into sub-objects.  Why not
> just have a flat iterator?  That is, return a field with no name whose
> type is some structure, and then let the caller iterate over that type
> if need be.
> 
> Tom

That's the current behavior.  Yu showed an example where he wanted to get all the field names so he could then use those to retrieve the fields in a gdb.Value object.  (Value objects don't currently have iterators; I'll propose a patch for that shortly.)

You can certainly do this in Python, for example:

import gdb

def deepkeys (t):
    parent = t.iteritems ()
    child = None
    while True:
	if not child:
	    try:
		k, v = parent.next ()
	    except StopIteration:
		parent = None
		raise
	    if k:
		yield k
		continue
	    child = deepkeys (v.type)
	try:
	    yield child.next ()
	except StopIteration:
	    child = None

(This could be done more elegantly if gdb.Type could be subclassed.)

It's an interesting inconsistency that values can be indexed by field names of nested fields inside anonymous fields, but type cannot.  And the keys() method on a Type right now returns only the top level names.  

	paul


  reply	other threads:[~2011-10-04 18:05 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-30 11:04 Li Yu
2011-09-30 16:15 ` Paul Koning
2011-10-01 14:01   ` Li Yu
2011-10-01 18:54     ` Paul Koning
2011-10-04 16:37 ` Tom Tromey
2011-10-04 18:05   ` Paul Koning [this message]
2011-10-04 20:24     ` Tom Tromey
2011-10-04 20:41       ` Paul Koning
2011-10-19 20:52         ` Tom Tromey
2011-10-19 20:59           ` Paul Koning
2011-10-20 18:49             ` Tom Tromey
2011-10-25 18:34               ` [RFA] Python: iterator for deep traversal of gdb.Type struct/union fields Paul Koning
2011-10-25 19:03                 ` Paul Koning
2011-10-25 20:16                   ` Eli Zaretskii
2011-10-26 17:14                     ` Paul Koning
2011-10-27 13:01                       ` Doug Evans
2011-10-27 14:52                         ` Paul_Koning
2011-10-27 19:57                           ` Tom Tromey
     [not found]                             ` <09787EF419216C41A903FD14EE5506DD030CF168FB@AUSX7MCPC103.AMER.DELL.COM>
2011-10-27 21:56                               ` Paul Koning
2011-10-27 22:14                                 ` Eli Zaretskii
2011-10-28 14:55                                   ` Paul Koning

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=ABB9CE3B-04DC-4EA9-A25A-F3590025AB5C@comcast.net \
    --to=paulkoning@comcast.net \
    --cc=gdb-patches@sourceware.org \
    --cc=raise.sail@gmail.com \
    --cc=tromey@redhat.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