diff Tools/gdb/libpython.py @ 76485:6e5855854a2e

Implement PEP 412: Key-sharing dictionaries (closes #13903) Patch from Mark Shannon.
author Benjamin Peterson <benjamin@python.org>
date Mon, 23 Apr 2012 11:24:50 -0400
parents 5e3a172bba89
children abcd29c9a791
line wrap: on
line diff
--- a/Tools/gdb/libpython.py	Mon Apr 23 10:55:29 2012 -0400
+++ b/Tools/gdb/libpython.py	Mon Apr 23 11:24:50 2012 -0400
@@ -634,9 +634,14 @@
         Yields a sequence of (PyObjectPtr key, PyObjectPtr value) pairs,
         analagous to dict.iteritems()
         '''
-        for i in safe_range(self.field('ma_mask') + 1):
-            ep = self.field('ma_table') + i
-            pyop_value = PyObjectPtr.from_pyobject_ptr(ep['me_value'])
+        keys = self.field('ma_keys')
+        values = self.field('ma_values')
+        for i in safe_range(keys['dk_size']):
+            ep = keys['dk_entries'].address + i
+            if long(values):
+                pyop_value = PyObjectPtr.from_pyobject_ptr(values[i])
+            else:
+                pyop_value = PyObjectPtr.from_pyobject_ptr(ep['me_value'])
             if not pyop_value.is_null():
                 pyop_key = PyObjectPtr.from_pyobject_ptr(ep['me_key'])
                 yield (pyop_key, pyop_value)