[Python-checkins] r85808 - in python/branches/py3k: Lib/test/test_sys.py Objects/dictobject.c Objects/setobject.c PC/winreg.c

antoine.pitrou python-checkins at python.org
Sat Oct 23 19:37:54 CEST 2010


Author: antoine.pitrou
Date: Sat Oct 23 19:37:54 2010
New Revision: 85808
Log:
Follow up to #9778: fix regressions on 64-bit Windows builds
Modified:
 python/branches/py3k/Lib/test/test_sys.py
 python/branches/py3k/Objects/dictobject.c
 python/branches/py3k/Objects/setobject.c
 python/branches/py3k/PC/winreg.c
Modified: python/branches/py3k/Lib/test/test_sys.py
==============================================================================
--- python/branches/py3k/Lib/test/test_sys.py	(original)
+++ python/branches/py3k/Lib/test/test_sys.py	Sat Oct 23 19:37:54 2010
@@ -827,7 +827,7 @@
 # we need to test for both sizes, because we don't know if the string
 # has been cached
 for s in samples:
- basicsize = size(h + 'PPliP') + usize * (len(s) + 1)
+ basicsize = size(h + 'PPPiP') + usize * (len(s) + 1)
 check(s, basicsize)
 # weakref
 import weakref
Modified: python/branches/py3k/Objects/dictobject.c
==============================================================================
--- python/branches/py3k/Objects/dictobject.c	(original)
+++ python/branches/py3k/Objects/dictobject.c	Sat Oct 23 19:37:54 2010
@@ -124,15 +124,6 @@
 polynomial. In Tim's experiments the current scheme ran faster, produced
 equally good collision statistics, needed less code & used less memory.
 
-Theoretical Python 2.5 headache: hash codes are only C "long", but
-sizeof(Py_ssize_t) > sizeof(long) may be possible. In that case, and if a
-dict is genuinely huge, then only the slots directly reachable via indexing
-by a C long can be the first slot in a probe sequence. The probe sequence
-will still eventually reach every slot in the table, but the collision rate
-on initial probes may be much higher than this scheme was designed for.
-Getting a hash code as fat as Py_ssize_t is the only real cure. But in
-practice, this probably won't make a lick of difference for many years (at
-which point everyone will have terabytes of RAM on 64-bit boxes).
 */
 
 /* Object used as dummy key to fill deleted entries */
@@ -531,7 +522,7 @@
 {
 PyObject *old_value;
 register PyDictEntry *ep;
- typedef PyDictEntry *(*lookupfunc)(PyDictObject *, PyObject *, long);
+ typedef PyDictEntry *(*lookupfunc)(PyDictObject *, PyObject *, Py_hash_t);
 
 assert(mp->ma_lookup != NULL);
 ep = mp->ma_lookup(mp, key, hash);
Modified: python/branches/py3k/Objects/setobject.c
==============================================================================
--- python/branches/py3k/Objects/setobject.c	(original)
+++ python/branches/py3k/Objects/setobject.c	Sat Oct 23 19:37:54 2010
@@ -214,7 +214,7 @@
 set_insert_key(register PySetObject *so, PyObject *key, Py_hash_t hash)
 {
 register setentry *entry;
- typedef setentry *(*lookupfunc)(PySetObject *, PyObject *, long);
+ typedef setentry *(*lookupfunc)(PySetObject *, PyObject *, Py_hash_t);
 
 assert(so->lookup != NULL);
 entry = so->lookup(so, key, hash);
@@ -663,7 +663,7 @@
 if (key != NULL &&
 key != dummy) {
 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;
 }
@@ -772,14 +772,14 @@
 if (so->hash != -1)
 return so->hash;
 
- hash *= (long) PySet_GET_SIZE(self) + 1;
+ hash *= PySet_GET_SIZE(self) + 1;
 while (set_next(so, &pos, &entry)) {
 /* Work to increase the bit dispersion for closely spaced hash
 values. The is important because some use cases have many
 combinations of a small number of elements with nearby
 hashes so that many distinct combinations collapse to only
 a handful of distinct hash values. */
- h = (long) entry->hash;
+ h = entry->hash;
 hash ^= (h ^ (h << 16) ^ 89869747L) * 3644798167u;
 }
 hash = hash * 69069L + 907133923L;
@@ -1116,7 +1116,7 @@
 setentry *u;
 setentry *(*f)(PySetObject *so, PyObject *key, Py_ssize_t hash);
 setentry tab[PySet_MINSIZE];
- long h;
+ Py_hash_t h;
 
 t = a->fill; a->fill = b->fill; b->fill = t;
 t = a->used; a->used = b->used; b->used = t;
@@ -1550,7 +1550,7 @@
 setentry entrycopy;
 entrycopy.hash = entry->hash;
 entrycopy.key = entry->key;
- if (!_PyDict_Contains(other, entry->key, (long) entry->hash)) {
+ if (!_PyDict_Contains(other, entry->key, entry->hash)) {
 if (set_add_entry((PySetObject *)result, &entrycopy) == -1) {
 Py_DECREF(result);
 return NULL;
Modified: python/branches/py3k/PC/winreg.c
==============================================================================
--- python/branches/py3k/PC/winreg.c	(original)
+++ python/branches/py3k/PC/winreg.c	Sat Oct 23 19:37:54 2010
@@ -452,7 +452,7 @@
 (pyhkey1 < pyhkey2 ? -1 : 1);
 }
 
-static long
+static Py_hash_t
 PyHKEY_hashFunc(PyObject *ob)
 {
 /* Just use the address.


More information about the Python-checkins mailing list

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