mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
make hashes always the size of pointers; introduce Py_hash_t #9778
This commit is contained in:
parent
6fb457526c
commit
8f67d0893f
31 changed files with 137 additions and 131 deletions
|
@ -75,7 +75,7 @@ NULL if the rich comparison returns an error.
|
|||
*/
|
||||
|
||||
static setentry *
|
||||
set_lookkey(PySetObject *so, PyObject *key, register long hash)
|
||||
set_lookkey(PySetObject *so, PyObject *key, register Py_hash_t hash)
|
||||
{
|
||||
register Py_ssize_t i;
|
||||
register size_t perturb;
|
||||
|
@ -157,7 +157,7 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash)
|
|||
* see if the comparison altered the table.
|
||||
*/
|
||||
static setentry *
|
||||
set_lookkey_unicode(PySetObject *so, PyObject *key, register long hash)
|
||||
set_lookkey_unicode(PySetObject *so, PyObject *key, register Py_hash_t hash)
|
||||
{
|
||||
register Py_ssize_t i;
|
||||
register size_t perturb;
|
||||
|
@ -211,7 +211,7 @@ Used by the public insert routine.
|
|||
Eats a reference to key.
|
||||
*/
|
||||
static int
|
||||
set_insert_key(register PySetObject *so, PyObject *key, long hash)
|
||||
set_insert_key(register PySetObject *so, PyObject *key, Py_hash_t hash)
|
||||
{
|
||||
register setentry *entry;
|
||||
typedef setentry *(*lookupfunc)(PySetObject *, PyObject *, long);
|
||||
|
@ -248,7 +248,7 @@ Note that no refcounts are changed by this routine; if needed, the caller
|
|||
is responsible for incref'ing `key`.
|
||||
*/
|
||||
static void
|
||||
set_insert_clean(register PySetObject *so, PyObject *key, long hash)
|
||||
set_insert_clean(register PySetObject *so, PyObject *key, Py_hash_t hash)
|
||||
{
|
||||
register size_t i;
|
||||
register size_t perturb;
|
||||
|
@ -349,7 +349,7 @@ set_table_resize(PySetObject *so, Py_ssize_t minused)
|
|||
} else {
|
||||
/* ACTIVE */
|
||||
--i;
|
||||
set_insert_clean(so, entry->key, (long) entry->hash);
|
||||
set_insert_clean(so, entry->key, entry->hash);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -369,7 +369,7 @@ set_add_entry(register PySetObject *so, setentry *entry)
|
|||
assert(so->fill <= so->mask); /* at least one empty slot */
|
||||
n_used = so->used;
|
||||
Py_INCREF(key);
|
||||
if (set_insert_key(so, key, (long) entry->hash) == -1) {
|
||||
if (set_insert_key(so, key, entry->hash) == -1) {
|
||||
Py_DECREF(key);
|
||||
return -1;
|
||||
}
|
||||
|
@ -381,7 +381,7 @@ set_add_entry(register PySetObject *so, setentry *entry)
|
|||
static int
|
||||
set_add_key(register PySetObject *so, PyObject *key)
|
||||
{
|
||||
register long hash;
|
||||
register Py_hash_t hash;
|
||||
register Py_ssize_t n_used;
|
||||
|
||||
if (!PyUnicode_CheckExact(key) ||
|
||||
|
@ -410,7 +410,7 @@ set_discard_entry(PySetObject *so, setentry *oldentry)
|
|||
{ register setentry *entry;
|
||||
PyObject *old_key;
|
||||
|
||||
entry = (so->lookup)(so, oldentry->key, (long) oldentry->hash);
|
||||
entry = (so->lookup)(so, oldentry->key, oldentry->hash);
|
||||
if (entry == NULL)
|
||||
return -1;
|
||||
if (entry->key == NULL || entry->key == dummy)
|
||||
|
@ -426,7 +426,7 @@ set_discard_entry(PySetObject *so, setentry *oldentry)
|
|||
static int
|
||||
set_discard_key(PySetObject *so, PyObject *key)
|
||||
{
|
||||
register long hash;
|
||||
register Py_hash_t hash;
|
||||
register setentry *entry;
|
||||
PyObject *old_key;
|
||||
|
||||
|
@ -675,7 +675,7 @@ set_merge(PySetObject *so, PyObject *otherset)
|
|||
static int
|
||||
set_contains_key(PySetObject *so, PyObject *key)
|
||||
{
|
||||
long hash;
|
||||
Py_hash_t hash;
|
||||
setentry *entry;
|
||||
|
||||
if (!PyUnicode_CheckExact(key) ||
|
||||
|
@ -697,7 +697,7 @@ set_contains_entry(PySetObject *so, setentry *entry)
|
|||
PyObject *key;
|
||||
setentry *lu_entry;
|
||||
|
||||
lu_entry = (so->lookup)(so, entry->key, (long) entry->hash);
|
||||
lu_entry = (so->lookup)(so, entry->key, entry->hash);
|
||||
if (lu_entry == NULL)
|
||||
return -1;
|
||||
key = lu_entry->key;
|
||||
|
@ -761,11 +761,11 @@ set_traverse(PySetObject *so, visitproc visit, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static long
|
||||
static Py_hash_t
|
||||
frozenset_hash(PyObject *self)
|
||||
{
|
||||
PySetObject *so = (PySetObject *)self;
|
||||
long h, hash = 1927868237L;
|
||||
Py_hash_t h, hash = 1927868237L;
|
||||
setentry *entry;
|
||||
Py_ssize_t pos = 0;
|
||||
|
||||
|
@ -926,7 +926,7 @@ set_update_internal(PySetObject *so, PyObject *other)
|
|||
if (PyDict_CheckExact(other)) {
|
||||
PyObject *value;
|
||||
Py_ssize_t pos = 0;
|
||||
long hash;
|
||||
Py_hash_t hash;
|
||||
Py_ssize_t dictsize = PyDict_Size(other);
|
||||
|
||||
/* Do one big resize at the start, rather than
|
||||
|
@ -1114,7 +1114,7 @@ set_swap_bodies(PySetObject *a, PySetObject *b)
|
|||
{
|
||||
Py_ssize_t t;
|
||||
setentry *u;
|
||||
setentry *(*f)(PySetObject *so, PyObject *key, long hash);
|
||||
setentry *(*f)(PySetObject *so, PyObject *key, Py_ssize_t hash);
|
||||
setentry tab[PySet_MINSIZE];
|
||||
long h;
|
||||
|
||||
|
@ -1285,7 +1285,7 @@ set_intersection(PySetObject *so, PyObject *other)
|
|||
while ((key = PyIter_Next(it)) != NULL) {
|
||||
int rv;
|
||||
setentry entry;
|
||||
long hash = PyObject_Hash(key);
|
||||
Py_hash_t hash = PyObject_Hash(key);
|
||||
|
||||
if (hash == -1) {
|
||||
Py_DECREF(it);
|
||||
|
@ -1442,7 +1442,7 @@ set_isdisjoint(PySetObject *so, PyObject *other)
|
|||
while ((key = PyIter_Next(it)) != NULL) {
|
||||
int rv;
|
||||
setentry entry;
|
||||
long hash = PyObject_Hash(key);
|
||||
Py_hash_t hash = PyObject_Hash(key);
|
||||
|
||||
if (hash == -1) {
|
||||
Py_DECREF(key);
|
||||
|
@ -1641,7 +1641,7 @@ set_symmetric_difference_update(PySetObject *so, PyObject *other)
|
|||
if (PyDict_CheckExact(other)) {
|
||||
PyObject *value;
|
||||
int rv;
|
||||
long hash;
|
||||
Py_hash_t hash;
|
||||
while (_PyDict_Next(other, &pos, &key, &value, &hash)) {
|
||||
setentry an_entry;
|
||||
|
||||
|
@ -2308,7 +2308,7 @@ PySet_Add(PyObject *anyset, PyObject *key)
|
|||
}
|
||||
|
||||
int
|
||||
_PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, long *hash)
|
||||
_PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash)
|
||||
{
|
||||
setentry *entry;
|
||||
|
||||
|
@ -2319,7 +2319,7 @@ _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, long *hash)
|
|||
if (set_next((PySetObject *)set, pos, &entry) == 0)
|
||||
return 0;
|
||||
*key = entry->key;
|
||||
*hash = (long) entry->hash;
|
||||
*hash = entry->hash;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -2363,7 +2363,7 @@ test_c_api(PySetObject *so)
|
|||
Py_ssize_t i;
|
||||
PyObject *elem=NULL, *dup=NULL, *t, *f, *dup2, *x;
|
||||
PyObject *ob = (PyObject *)so;
|
||||
long hash;
|
||||
Py_hash_t hash;
|
||||
PyObject *str;
|
||||
|
||||
/* Verify preconditions */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue