[Python-checkins] cpython: remove memory indirections in dict_traverse (closes #27956)

benjamin.peterson python-checkins at python.org
Mon Sep 5 15:13:23 EDT 2016


https://hg.python.org/cpython/rev/027e421594b7
changeset: 103053:027e421594b7
user: Benjamin Peterson <benjamin at python.org>
date: Mon Sep 05 12:12:59 2016 -0700
summary:
 remove memory indirections in dict_traverse (closes #27956)
files:
 Objects/dictobject.c | 20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -2519,24 +2519,26 @@
 static int
 dict_traverse(PyObject *op, visitproc visit, void *arg)
 {
- Py_ssize_t i, n;
 PyDictObject *mp = (PyDictObject *)op;
- if (mp->ma_keys->dk_lookup == lookdict) {
- for (i = 0; i < DK_SIZE(mp->ma_keys); i++) {
- if (mp->ma_keys->dk_entries[i].me_value != NULL) {
- Py_VISIT(mp->ma_keys->dk_entries[i].me_value);
- Py_VISIT(mp->ma_keys->dk_entries[i].me_key);
+ PyDictKeysObject *keys = mp->ma_keys;
+ PyDictKeyEntry *entries = &keys->dk_entries[0];
+ Py_ssize_t i, n = DK_SIZE(mp->ma_keys);
+ if (keys->dk_lookup == lookdict) {
+ for (i = 0; i < n; i++) {
+ if (entries[i].me_value != NULL) {
+ Py_VISIT(entries[i].me_value);
+ Py_VISIT(entries[i].me_key);
 }
 }
 } else {
 if (mp->ma_values != NULL) {
- for (i = 0, n = DK_SIZE(mp->ma_keys); i < n; i++) {
+ for (i = 0; i < n; i++) {
 Py_VISIT(mp->ma_values[i]);
 }
 }
 else {
- for (i = 0, n = DK_SIZE(mp->ma_keys); i < n; i++) {
- Py_VISIT(mp->ma_keys->dk_entries[i].me_value);
+ for (i = 0; i < n; i++) {
+ Py_VISIT(entries[i].me_value);
 }
 }
 }
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /