Author: Armin Rigo <[email protected]>
Branch: py3.5
Changeset: r91841:94b78e58b886
Date: 2017-07-08 17:04 +0200
http://bitbucket.org/pypy/pypy/changeset/94b78e58b886/
Log: hg merge default
diff --git a/pypy/module/__builtin__/functional.py
b/pypy/module/__builtin__/functional.py
--- a/pypy/module/__builtin__/functional.py
+++ b/pypy/module/__builtin__/functional.py
@@ -317,9 +317,9 @@
def __init__(self, space, w_sequence):
self.remaining = space.len_w(w_sequence) - 1
- if space.lookup(w_sequence, "__getitem__") is None:
+ if not space.issequence_w(w_sequence):
raise oefmt(space.w_TypeError,
- "reversed() argument must be a sequence")
+ "argument to reversed() must be a sequence")
self.w_sequence = w_sequence
@staticmethod
@@ -328,9 +328,6 @@
if w_reversed_descr is not None:
w_reversed = space.get(w_reversed_descr, w_sequence)
return space.call_function(w_reversed)
- if not space.issequence_w(w_sequence):
- raise oefmt(space.w_TypeError,
- "argument to reversed() must be a sequence")
self = space.allocate_instance(W_ReversedIterator, w_subtype)
self.__init__(space, w_sequence)
return self
diff --git a/pypy/module/__builtin__/test/test_functional.py
b/pypy/module/__builtin__/test/test_functional.py
--- a/pypy/module/__builtin__/test/test_functional.py
+++ b/pypy/module/__builtin__/test/test_functional.py
@@ -527,8 +527,24 @@
assert list(reversed(list(reversed("hello")))) == ['h','e','l','l','o']
raises(TypeError, reversed, reversed("hello"))
- def test_reversed_nonsequence(self):
+ def test_reversed_user_type(self):
+ class X(object):
+ def __getitem__(self, index):
+ return str(index)
+ def __len__(self):
+ return 5
+ assert list(reversed(X())) == ["4", "3", "2", "1", "0"]
+
+ def test_reversed_not_for_mapping(self):
raises(TypeError, reversed, {})
+ raises(TypeError, reversed, {2: 3})
+ assert not hasattr(dict, '__reversed__')
+
+ def test_reversed_type_with_no_len(self):
+ class X(object):
+ def __getitem__(self, key):
+ raise ValueError
+ raises(TypeError, reversed, X())
def test_reversed_length_hint(self):
lst = [1, 2, 3]
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit