diff options
author | Benjamin Peterson <benjamin@python.org> | 2012-04-23 11:24:50 -0400 |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2012-04-23 11:24:50 -0400 |
commit | ae34dd246694454660cfeaeab1e71e1f123f56d4 (patch) | |
tree | 96354606b89c8df89328ccf9b69964abb539843d /Tools/gdb | |
parent | 675bdd2d38a866504d416c9d553513636d18f438 (diff) | |
download | cpython-ae34dd246694454660cfeaeab1e71e1f123f56d4.tar.gz |
Implement PEP 412: Key-sharing dictionaries (closes #13903)
Patch from Mark Shannon.
Diffstat (limited to 'Tools/gdb')
-rw-r--r-- | Tools/gdb/libpython.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index 30347cbc93..cf67cf8900 100644 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -634,9 +634,14 @@ class PyDictObjectPtr(PyObjectPtr): 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) |