From 3eaf3fa2966a7174d42c8b94ad171e2de4665410 Mon Sep 17 00:00:00 2001 From: Paul Koning Date: Wed, 26 Oct 2011 15:09:40 +0000 Subject: * python/lib/gdb/types.py (deepitems): New function. --- gdb/python/lib/gdb/types.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'gdb/python') diff --git a/gdb/python/lib/gdb/types.py b/gdb/python/lib/gdb/types.py index 54fbe3c..9a9b245 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 -- cgit v1.1