From 3eaf3fa2966a7174d42c8b94ad171e2de4665410 Mon Sep 17 00:00:00 2001 From: Paul Koning Date: Wed, 26 Oct 2011 15:09:40 +0000 Subject: [PATCH] * python/lib/gdb/types.py (deepitems): New function. --- gdb/ChangeLog | 4 ++++ gdb/python/lib/gdb/types.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f8aa18794b..3127093aa6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2011-10-26 Paul Koning + + * python/lib/gdb/types.py (deepitems): New function. + 2011-10-25 Paul Koning PR python/13327 diff --git a/gdb/python/lib/gdb/types.py b/gdb/python/lib/gdb/types.py index 54fbe3c7bf..9a9b24557d 100644 --- a/gdb/python/lib/gdb/types.py +++ b/gdb/python/lib/gdb/types.py @@ -89,3 +89,23 @@ def make_enum_dict(enum_type): # The enum's value is stored in "bitpos". enum_dict[field.name] = field.bitpos return enum_dict + + +def deepitems (type_): + """Return an iterator that recursively traverses anonymous fields. + + Arguments: + type_: The type to traverse. It should be one of + gdb.TYPE_CODE_STRUCT or gdb.TYPE_CODE_UNION. + + Returns: + an iterator similar to gdb.Type.iteritems(), i.e., it returns + pairs of key, value, but for any anonymous struct or union + field that field is traversed recursively, depth-first. + """ + for k, v in type_.iteritems (): + if k: + yield k, v + else: + for i in deepitems (v.type): + yield i