Author: Mark Young <[email protected]>
Branch: 33_fix_itertools
Changeset: r84043:94204cd7d00d
Date: 2016-04-28 20:48 -0400
http://bitbucket.org/pypy/pypy/changeset/94204cd7d00d/
Log: Fix final two failing tests.
diff --git a/pypy/module/itertools/__init__.py
b/pypy/module/itertools/__init__.py
--- a/pypy/module/itertools/__init__.py
+++ b/pypy/module/itertools/__init__.py
@@ -50,7 +50,7 @@
'takewhile' : 'interp_itertools.W_TakeWhile',
'tee' : 'interp_itertools.tee',
'_tee' : 'interp_itertools.W_TeeIterable',
- '_tee_chained_list' : 'interp_itertools.W_TeeChainedListNode',
+ '_tee_dataobject' : 'interp_itertools.W_TeeChainedListNode',
'zip_longest' : 'interp_itertools.W_ZipLongest',
}
diff --git a/pypy/module/itertools/interp_itertools.py
b/pypy/module/itertools/interp_itertools.py
--- a/pypy/module/itertools/interp_itertools.py
+++ b/pypy/module/itertools/interp_itertools.py
@@ -876,7 +876,7 @@
return space.wrap(r)
W_TeeChainedListNode.typedef = TypeDef(
- 'itertools._tee_chained_list',
+ 'itertools._tee_dataobject',
__new__ = interp2app(W_TeeChainedListNode___new__),
__weakref__ = make_weakref_descr(W_TeeChainedListNode),
__reduce__ = interp2app(W_TeeChainedListNode.reduce_w),
@@ -886,10 +886,9 @@
W_TeeChainedListNode.typedef.acceptable_as_base_class = False
class W_TeeIterable(W_Root):
- def __init__(self, space, w_iterator, w_chained_list):
+ def __init__(self, space, w_iterator, w_chained_list=None):
self.space = space
self.w_iterator = w_iterator
- assert w_chained_list is not None
self.w_chained_list = w_chained_list
def iter_w(self):
@@ -900,7 +899,6 @@
if w_chained_list is None:
raise OperationError(self.space.w_StopIteration, self.space.w_None)
#TODO: Is this the right thing to do?
- assert isinstance(w_chained_list, W_TeeChainedListNode)
w_obj = w_chained_list.w_obj
if w_obj is None:
try:
@@ -916,20 +914,37 @@
def reduce_w(self):
return self.space.newtuple([self.space.gettypefor(W_TeeIterable),
+
self.space.newtuple([self.space.newtuple([])]),
self.space.newtuple([
self.w_iterator,
self.w_chained_list])
])
+ def setstate_w(self, w_state):
+ state = self.space.unpackiterable(w_state)
+ num_args = len(state)
+ if num_args != 2:
+ raise OperationError(self.space.w_TypeError,
+ self.space.wrap("function takes exactly 2
arguments "
+ "(" + str(num_args) + " given)"))
+ w_iterator, w_chained_list = state
+ if not isinstance(w_chained_list, W_TeeChainedListNode):
+ raise OperationError(
+ self.space.w_TypeError,
+ self.space.wrap("must be itertools._tee_dataobject, not " +
+ self.space.type(w_chained_list).name))
-def W_TeeIterable___new__(space, w_subtype, w_iterable, w_chained_list=None):
+ self.w_iterator = w_iterator
+ self.w_chained_list = w_chained_list
+
+def W_TeeIterable___new__(space, w_subtype, w_iterable):
if isinstance(w_iterable, W_TeeIterable):
myiter = space.interp_w(W_TeeIterable, w_iterable)
w_iterator = myiter.w_iterator
w_chained_list = myiter.w_chained_list
else:
w_iterator = space.iter(w_iterable)
- w_chained_list = w_chained_list or W_TeeChainedListNode(space)
- return space.wrap(W_TeeIterable(space, w_iterator, w_chained_list))
+ w_chained_list = W_TeeChainedListNode(space)
+ return W_TeeIterable(space, w_iterator, w_chained_list)
W_TeeIterable.typedef = TypeDef(
'itertools._tee',
@@ -938,6 +953,7 @@
__next__ = interp2app(W_TeeIterable.next_w),
__weakref__ = make_weakref_descr(W_TeeIterable),
__reduce__ = interp2app(W_TeeIterable.reduce_w),
+ __setstate__ = interp2app(W_TeeIterable.setstate_w)
)
W_TeeIterable.typedef.acceptable_as_base_class = False
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit