diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2009-02-08 14:56:08 (GMT) |
---|---|---|
committer | Mark Dickinson <dickinsm@gmail.com> | 2009-02-08 14:56:08 (GMT) |
commit | dd0989e7df0fa92a612dafd1180519a5d573b83a (patch) | |
tree | 63c06b8d84c30219b564b377f223375bc9f1e8ba | |
parent | 1e2ea829263cdddd5c400c96e49a52a815e0e99b (diff) | |
download | cpython-dd0989e7df0fa92a612dafd1180519a5d573b83a.zip cpython-dd0989e7df0fa92a612dafd1180519a5d573b83a.tar.gz cpython-dd0989e7df0fa92a612dafd1180519a5d573b83a.tar.bz2 |
Merged revisions 69433,69436 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r69433 | mark.dickinson | 2009-02-08 13:58:10 +0000 (Sun, 08 Feb 2009) | 2 lines
Remove redundant assignment in _PyObject_LengthHint
........
r69436 | mark.dickinson | 2009-02-08 14:42:28 +0000 (Sun, 08 Feb 2009) | 10 lines
Issue #789290: make sure that hash(2**63) == hash(2.**63) on 64-bit
platforms. The previous code was fragile, depending on the twin
accidents that:
(1) in C, casting the double value 2.**63 to long returns the integer
value -2**63, and
(2) in Python, hash(-2**63) == hash(2**63).
There's already a test for this in test_hash.
........
-rw-r--r-- | Objects/abstract.c | 2 | ||||
-rw-r--r-- | Objects/object.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index b47b1c9..de8682a 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -123,7 +123,7 @@ _PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue) PyErr_Clear(); return defaultvalue; } - rv = rv = PyLong_Check(ro) ? PyLong_AsSsize_t(ro) : defaultvalue; + rv = PyLong_Check(ro) ? PyLong_AsSsize_t(ro) : defaultvalue; Py_DECREF(ro); return rv; } diff --git a/Objects/object.c b/Objects/object.c index 7b82db9..daee6fb 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1023,7 +1023,7 @@ _Py_HashDouble(double v) fractpart = modf(v, &intpart); if (fractpart == 0.0) { /* This must return the same hash as an equal int or long. */ - if (intpart > LONG_MAX || -intpart > LONG_MAX) { + if (intpart > LONG_MAX/2 || -intpart > LONG_MAX/2) { /* Convert to long and use its hash. */ PyObject *plong; /* converted to Python long */ if (Py_IS_INFINITY(intpart)) |