]> granicus.if.org Git - python/commitdiff
merge 3.2
authorBenjamin Peterson <benjamin@python.org>
Tue, 21 Feb 2012 16:12:14 +0000 (11:12 -0500)
committerBenjamin Peterson <benjamin@python.org>
Tue, 21 Feb 2012 16:12:14 +0000 (11:12 -0500)
1  2 
Include/object.h
Objects/object.c
Objects/unicodeobject.c

Simple merge
index bb18d471912f719e141437d21b63c7170a8b6fae,84ec2f34f582ea623dbb4759ec9440844aefd08c..2665d2135fc4aab24fe4a235bd649ec8f2232bb4
@@@ -753,30 -746,6 +753,31 @@@ _Py_HashPointer(void *p
      return x;
  }
  
 +Py_hash_t
 +_Py_HashBytes(unsigned char *p, Py_ssize_t len)
 +{
 +    Py_uhash_t x;
 +    Py_ssize_t i;
 +
 +    /*
 +      We make the hash of the empty string be 0, rather than using
 +      (prefix ^ suffix), since this slightly obfuscates the hash secret
 +    */
++    assert(_Py_HashSecret_Initialized);
 +    if (len == 0) {
 +        return 0;
 +    }
 +    x = (Py_uhash_t) _Py_HashSecret.prefix;
 +    x ^= (Py_uhash_t) *p << 7;
 +    for (i = 0; i < len; i++)
 +        x = (_PyHASH_MULTIPLIER * x) ^ (Py_uhash_t) *p++;
 +    x ^= (Py_uhash_t) len;
 +    x ^= (Py_uhash_t) _Py_HashSecret.suffix;
 +    if (x == -1)
 +        x = -2;
 +    return x;
 +}
 +
  Py_hash_t
  PyObject_HashNotImplemented(PyObject *v)
  {
index 75e9923f0d7765cea9d677364aea0a78d1d2e691,b70666106d274fc475aa2eacd013942d7220f293..a42aad9ade23f1ba61658e79cced7cea229dd261
@@@ -11207,18 -7665,18 +11207,19 @@@ unicode_getitem(PyObject *self, Py_ssiz
  }
  
  /* Believe it or not, this produces the same value for ASCII strings
 -   as string_hash(). */
 +   as bytes_hash(). */
  static Py_hash_t
 -unicode_hash(PyUnicodeObject *self)
 +unicode_hash(PyObject *self)
  {
      Py_ssize_t len;
 -    Py_UNICODE *p;
 -    Py_hash_t x;
 +    Py_uhash_t x;
  
 -    if (self->hash != -1)
 -        return self->hash;
 -    len = Py_SIZE(self);
+     assert(_Py_HashSecret_Initialized);
 +    if (_PyUnicode_HASH(self) != -1)
 +        return _PyUnicode_HASH(self);
 +    if (PyUnicode_READY(self) == -1)
 +        return -1;
 +    len = PyUnicode_GET_LENGTH(self);
      /*
        We make the hash of the empty string be 0, rather than using
        (prefix ^ suffix), since this slightly obfuscates the hash secret