[pypy-commit] pypy remove-iter-smm: Kill itertype.py.
Manuel Jacob
noreply at buildbot.pypy.org
Wed May 22 03:12:15 CEST 2013
Author: Manuel Jacob
Branch: remove-iter-smm
Changeset: r64417:82a424bfdd8b
Date: 2013-05-22 00:38 +0200
http://bitbucket.org/pypy/pypy/changeset/82a424bfdd8b/
Log: Kill itertype.py.
diff --git a/pypy/objspace/std/iterobject.py b/pypy/objspace/std/iterobject.py
--- a/pypy/objspace/std/iterobject.py
+++ b/pypy/objspace/std/iterobject.py
@@ -1,15 +1,16 @@
"""Generic iterator implementations"""
+from pypy.interpreter import gateway
from pypy.interpreter.error import OperationError
from pypy.objspace.std.model import registerimplementation, W_Object
from pypy.objspace.std.register_all import register_all
+from pypy.objspace.std.stdtypedef import StdTypeDef
class W_AbstractIterObject(W_Object):
__slots__ = ()
+
class W_AbstractSeqIterObject(W_AbstractIterObject):
- from pypy.objspace.std.itertype import iter_typedef as typedef
-
def __init__(w_self, w_seq, index=0):
if index < 0:
index = 0
@@ -26,13 +27,54 @@
w_len = space.wrap(0)
return w_len
+ def descr_reduce(self, space):
+ """
+ XXX to do: remove this __reduce__ method and do
+ a registration with copy_reg, instead.
+ """
+
+ # cpython does not support pickling iterators but stackless python do
+ #msg = 'Pickling for iterators dissabled as cpython does not support it'
+ #raise OperationError(space.w_TypeError, space.wrap(msg))
+
+ from pypy.objspace.std.iterobject import W_AbstractSeqIterObject
+ assert isinstance(self, W_AbstractSeqIterObject)
+ from pypy.interpreter.mixedmodule import MixedModule
+ w_mod = space.getbuiltinmodule('_pickle_support')
+ mod = space.interp_w(MixedModule, w_mod)
+ new_inst = mod.get('seqiter_new')
+ tup = [self.w_seq, space.wrap(self.index)]
+ return space.newtuple([new_inst, space.newtuple(tup)])
+
+ def descr_length_hint(self, space):
+ from pypy.objspace.std.iterobject import W_AbstractSeqIterObject
+ assert isinstance(self, W_AbstractSeqIterObject)
+ return self.getlength(space)
+
+W_AbstractSeqIterObject.typedef = StdTypeDef("sequenceiterator",
+ __doc__ = '''iter(collection) -> iterator
+iter(callable, sentinel) -> iterator
+
+Get an iterator from an object. In the first form, the argument must
+supply its own iterator, or be a sequence.
+In the second form, the callable is called until it returns the sentinel.''',
+
+ __reduce__ = gateway.interp2app(W_AbstractSeqIterObject.descr_reduce),
+ __length_hint__ = gateway.interp2app(W_AbstractSeqIterObject.descr_length_hint),
+ )
+W_AbstractSeqIterObject.typedef.acceptable_as_base_class = False
+iter_typedef = W_AbstractSeqIterObject.typedef
+
+
class W_SeqIterObject(W_AbstractSeqIterObject):
"""Sequence iterator implementation for general sequences."""
+
class W_FastListIterObject(W_AbstractSeqIterObject): # XXX still needed
"""Sequence iterator specialized for lists.
"""
+
class W_FastTupleIterObject(W_AbstractSeqIterObject):
"""Sequence iterator specialized for tuples, accessing directly
their RPython-level list of wrapped objects.
@@ -41,14 +83,51 @@
W_AbstractSeqIterObject.__init__(w_self, w_seq)
w_self.tupleitems = wrappeditems
+
class W_ReverseSeqIterObject(W_Object):
- from pypy.objspace.std.itertype import reverse_iter_typedef as typedef
-
def __init__(w_self, space, w_seq, index=-1):
w_self.w_seq = w_seq
w_self.w_len = space.len(w_seq)
w_self.index = space.int_w(w_self.w_len) + index
+ def descr_reduce(self, space):
+ """
+ XXX to do: remove this __reduce__ method and do
+ a registration with copy_reg, instead.
+ """
+ from pypy.objspace.std.iterobject import W_ReverseSeqIterObject
+ assert isinstance(self, W_ReverseSeqIterObject)
+ from pypy.interpreter.mixedmodule import MixedModule
+ w_mod = space.getbuiltinmodule('_pickle_support')
+ mod = space.interp_w(MixedModule, w_mod)
+ new_inst = mod.get('reverseseqiter_new')
+ tup = [self.w_seq, space.wrap(self.index)]
+ return space.newtuple([new_inst, space.newtuple(tup)])
+
+ def descr_length_hint(self, space):
+ from pypy.objspace.std.iterobject import W_ReverseSeqIterObject
+ assert isinstance(self, W_ReverseSeqIterObject)
+ if self.w_seq is None:
+ return space.wrap(0)
+ index = self.index + 1
+ w_length = space.len(self.w_seq)
+ # if length of sequence is less than index :exhaust iterator
+ if space.is_true(space.gt(space.wrap(self.index), w_length)):
+ w_len = space.wrap(0)
+ self.w_seq = None
+ else:
+ w_len = space.wrap(index)
+ if space.is_true(space.lt(w_len, space.wrap(0))):
+ w_len = space.wrap(0)
+ return w_len
+
+W_ReverseSeqIterObject.typedef = StdTypeDef("reversesequenceiterator",
+ __reduce__ = gateway.interp2app(W_ReverseSeqIterObject.descr_reduce),
+ __length_hint__ = gateway.interp2app(W_ReverseSeqIterObject.descr_length_hint),
+)
+W_ReverseSeqIterObject.typedef.acceptable_as_base_class = False
+reverse_iter_typedef = W_ReverseSeqIterObject.typedef
+
registerimplementation(W_SeqIterObject)
registerimplementation(W_FastListIterObject)
diff --git a/pypy/objspace/std/itertype.py b/pypy/objspace/std/itertype.py
deleted file mode 100644
--- a/pypy/objspace/std/itertype.py
+++ /dev/null
@@ -1,85 +0,0 @@
-from pypy.interpreter import gateway
-from pypy.objspace.std.stdtypedef import StdTypeDef
-from pypy.interpreter.error import OperationError
-
-# ____________________________________________________________
-
-def descr_seqiter__reduce__(w_self, space):
- """
- XXX to do: remove this __reduce__ method and do
- a registration with copy_reg, instead.
- """
-
- # cpython does not support pickling iterators but stackless python do
- #msg = 'Pickling for iterators dissabled as cpython does not support it'
- #raise OperationError(space.w_TypeError, space.wrap(msg))
-
- from pypy.objspace.std.iterobject import W_AbstractSeqIterObject
- assert isinstance(w_self, W_AbstractSeqIterObject)
- from pypy.interpreter.mixedmodule import MixedModule
- w_mod = space.getbuiltinmodule('_pickle_support')
- mod = space.interp_w(MixedModule, w_mod)
- new_inst = mod.get('seqiter_new')
- tup = [w_self.w_seq, space.wrap(w_self.index)]
- return space.newtuple([new_inst, space.newtuple(tup)])
-
-
-def descr_seqiter__length_hint__(space, w_self):
- from pypy.objspace.std.iterobject import W_AbstractSeqIterObject
- assert isinstance(w_self, W_AbstractSeqIterObject)
- return w_self.getlength(space)
-
-# ____________________________________________________________
-
-def descr_reverseseqiter__reduce__(w_self, space):
- """
- XXX to do: remove this __reduce__ method and do
- a registration with copy_reg, instead.
- """
- from pypy.objspace.std.iterobject import W_ReverseSeqIterObject
- assert isinstance(w_self, W_ReverseSeqIterObject)
- from pypy.interpreter.mixedmodule import MixedModule
- w_mod = space.getbuiltinmodule('_pickle_support')
- mod = space.interp_w(MixedModule, w_mod)
- new_inst = mod.get('reverseseqiter_new')
- tup = [w_self.w_seq, space.wrap(w_self.index)]
- return space.newtuple([new_inst, space.newtuple(tup)])
-
-
-def descr_reverseseqiter__length_hint__(space, w_self):
- from pypy.objspace.std.iterobject import W_ReverseSeqIterObject
- assert isinstance(w_self, W_ReverseSeqIterObject)
- if w_self.w_seq is None:
- return space.wrap(0)
- index = w_self.index + 1
- w_length = space.len(w_self.w_seq)
- # if length of sequence is less than index :exhaust iterator
- if space.is_true(space.gt(space.wrap(w_self.index), w_length)):
- w_len = space.wrap(0)
- w_self.w_seq = None
- else:
- w_len = space.wrap(index)
- if space.is_true(space.lt(w_len, space.wrap(0))):
- w_len = space.wrap(0)
- return w_len
-
-# ____________________________________________________________
-iter_typedef = StdTypeDef("sequenceiterator",
- __doc__ = '''iter(collection) -> iterator
-iter(callable, sentinel) -> iterator
-
-Get an iterator from an object. In the first form, the argument must
-supply its own iterator, or be a sequence.
-In the second form, the callable is called until it returns the sentinel.''',
-
- __reduce__ = gateway.interp2app(descr_seqiter__reduce__),
- __length_hint__ = gateway.interp2app(descr_seqiter__length_hint__),
- )
-iter_typedef.acceptable_as_base_class = False
-
-reverse_iter_typedef = StdTypeDef("reversesequenceiterator",
-
- __reduce__ = gateway.interp2app(descr_reverseseqiter__reduce__),
- __length_hint__ = gateway.interp2app(descr_reverseseqiter__length_hint__),
- )
-reverse_iter_typedef.acceptable_as_base_class = False
diff --git a/pypy/objspace/std/model.py b/pypy/objspace/std/model.py
--- a/pypy/objspace/std/model.py
+++ b/pypy/objspace/std/model.py
@@ -47,7 +47,7 @@
from pypy.objspace.std.longtype import long_typedef
from pypy.objspace.std.unicodetype import unicode_typedef
from pypy.objspace.std.nonetype import none_typedef
- from pypy.objspace.std.itertype import iter_typedef
+ from pypy.objspace.std.iterobject import iter_typedef
self.pythontypes = [value for key, value in result.__dict__.items()
if not key.startswith('_')] # don't look
More information about the pypy-commit
mailing list