mirror of
https://github.com/python/cpython.git
synced 2024-11-24 18:34:43 +08:00
Issue 18797: Remove unneeded refcount adjustments for dummy objects.
It suffices to keep just one reference when the object is created.
This commit is contained in:
parent
e39e54d0b3
commit
fcf3b500ba
@ -274,7 +274,6 @@ set_insert_key(PySetObject *so, PyObject *key, Py_hash_t hash)
|
||||
entry->key = key;
|
||||
entry->hash = hash;
|
||||
so->used++;
|
||||
Py_DECREF(dummy);
|
||||
} else {
|
||||
/* ACTIVE */
|
||||
Py_DECREF(key);
|
||||
@ -381,23 +380,15 @@ set_table_resize(PySetObject *so, Py_ssize_t minused)
|
||||
so->table = newtable;
|
||||
so->mask = newsize - 1;
|
||||
memset(newtable, 0, sizeof(setentry) * newsize);
|
||||
i = so->used;
|
||||
so->used = 0;
|
||||
i = so->fill;
|
||||
so->fill = 0;
|
||||
|
||||
/* Copy the data over; this is refcount-neutral for active entries;
|
||||
dummy entries aren't copied over, of course */
|
||||
dummy_entry = dummy;
|
||||
for (entry = oldtable; i > 0; entry++) {
|
||||
if (entry->key == NULL) {
|
||||
/* UNUSED */
|
||||
;
|
||||
} else if (entry->key == dummy_entry) {
|
||||
/* DUMMY */
|
||||
--i;
|
||||
assert(entry->key == dummy);
|
||||
Py_DECREF(entry->key);
|
||||
} else {
|
||||
if (entry->key != NULL && entry->key != dummy_entry) {
|
||||
/* ACTIVE */
|
||||
--i;
|
||||
set_insert_clean(so, entry->key, entry->hash);
|
||||
@ -468,7 +459,6 @@ set_discard_entry(PySetObject *so, setentry *oldentry)
|
||||
if (entry->key == NULL || entry->key == dummy)
|
||||
return DISCARD_NOTFOUND;
|
||||
old_key = entry->key;
|
||||
Py_INCREF(dummy);
|
||||
entry->key = dummy;
|
||||
so->used--;
|
||||
Py_DECREF(old_key);
|
||||
@ -496,7 +486,6 @@ set_discard_key(PySetObject *so, PyObject *key)
|
||||
if (entry->key == NULL || entry->key == dummy)
|
||||
return DISCARD_NOTFOUND;
|
||||
old_key = entry->key;
|
||||
Py_INCREF(dummy);
|
||||
entry->key = dummy;
|
||||
so->used--;
|
||||
Py_DECREF(old_key);
|
||||
@ -554,7 +543,8 @@ set_clear_internal(PySetObject *so)
|
||||
#endif
|
||||
if (entry->key) {
|
||||
--fill;
|
||||
Py_DECREF(entry->key);
|
||||
if (entry->key != dummy)
|
||||
Py_DECREF(entry->key);
|
||||
}
|
||||
#ifdef Py_DEBUG
|
||||
else
|
||||
@ -615,7 +605,8 @@ set_dealloc(PySetObject *so)
|
||||
for (entry = so->table; fill > 0; entry++) {
|
||||
if (entry->key) {
|
||||
--fill;
|
||||
Py_DECREF(entry->key);
|
||||
if (entry->key != dummy)
|
||||
Py_DECREF(entry->key);
|
||||
}
|
||||
}
|
||||
if (so->table != so->smalltable)
|
||||
@ -788,7 +779,6 @@ set_pop(PySetObject *so)
|
||||
}
|
||||
}
|
||||
key = entry->key;
|
||||
Py_INCREF(dummy);
|
||||
entry->key = dummy;
|
||||
so->used--;
|
||||
so->table[0].hash = i + 1; /* next place to start */
|
||||
|
Loading…
Reference in New Issue
Block a user