Author: Manuel Jacob Branch: remove-tuple-smm Changeset: r64428:1fabc722bc4f Date: 2013-05-22 10:55 +0200 http://bitbucket.org/pypy/pypy/changeset/1fabc722bc4f/
Log: Inline hash_tuple(). diff --git a/pypy/objspace/std/tupleobject.py b/pypy/objspace/std/tupleobject.py --- a/pypy/objspace/std/tupleobject.py +++ b/pypy/objspace/std/tupleobject.py @@ -191,7 +191,6 @@ raise OperationError(space.w_ValueError, space.wrap("tuple.index(x): x not in tuple")) - W_AbstractTupleObject.typedef = StdTypeDef("tuple", __doc__ = '''tuple() -> an empty tuple tuple(sequence) -> tuple initialized from sequence's items @@ -225,7 +224,6 @@ ) - class W_TupleObject(W_AbstractTupleObject): _immutable_fields_ = ['wrappeditems[*]'] @@ -242,8 +240,20 @@ def length(self): return len(self.wrappeditems) + @jit.look_inside_iff(lambda self, space: jit.loop_unrolling_heuristic( + self.wrappeditems, len(self.wrappeditems), UNROLL_CUTOFF)) def descr_hash(self, space): - return space.wrap(hash_tuple(space, self.wrappeditems)) + # this is the CPython 2.4 algorithm (changed from 2.3) + mult = 1000003 + x = 0x345678 + z = len(self.wrappeditems) + for w_item in self.wrappeditems: + y = space.hash_w(w_item) + x = (x ^ y) * mult + z -= 1 + mult += 82520 + z + z + x += 97531 + return intmask(x) def descr_eq(self, space, w_other): if not isinstance(w_other, W_AbstractTupleObject): @@ -275,22 +285,6 @@ space.wrap("tuple index out of range")) -@jit.look_inside_iff(lambda space, wrappeditems: - jit.loop_unrolling_heuristic(wrappeditems, len(wrappeditems), UNROLL_CUTOFF)) -def hash_tuple(space, wrappeditems): - # this is the CPython 2.4 algorithm (changed from 2.3) - mult = 1000003 - x = 0x345678 - z = len(wrappeditems) - for w_item in wrappeditems: - y = space.hash_w(w_item) - x = (x ^ y) * mult - z -= 1 - mult += 82520 + z + z - x += 97531 - return intmask(x) - - def wraptuple(space, list_w): if space.config.objspace.std.withspecialisedtuple: from specialisedtupleobject import makespecialisedtuple, NotSpecialised _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit