[pypy-svn] r49667 - in pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Wed Dec 12 12:17:51 CET 2007
Author: cfbolz
Date: Wed Dec 12 12:17:48 2007
New Revision: 49667
Modified:
pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py
Log:
add iter support
Modified: pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
==============================================================================
--- pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py (original)
+++ pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py Wed Dec 12 12:17:48 2007
@@ -309,6 +309,17 @@
w_meth = self.getattr(space, space.wrap('__delitem__'))
space.call_function(w_meth, w_key)
+ def descr_iter(self, space):
+ w_meth = self.getattr(space, space.wrap('__iter__'), False)
+ if w_meth is not None:
+ return space.call_function(w_meth)
+ w_meth = self.getattr(space, space.wrap('__getitem__'), False)
+ if w_meth is None:
+ raise OperationError(
+ space.w_TypeError,
+ space.wrap("iteration over non-sequence"))
+ return space.newseqiter(self)
+
def descr_call(self, space, __args__):
w_meth = self.getattr(space, space.wrap('__call__'))
return space.call_args(w_meth, __args__)
@@ -350,6 +361,8 @@
unwrap_spec=['self', ObjSpace, W_Root, W_Root]),
__delitem__ = interp2app(W_InstanceObject.descr_delitem,
unwrap_spec=['self', ObjSpace, W_Root]),
+ __iter__ = interp2app(W_InstanceObject.descr_iter,
+ unwrap_spec=['self', ObjSpace]),
__call__ = interp2app(W_InstanceObject.descr_call,
unwrap_spec=['self', ObjSpace, Arguments]),
__nonzero__ = interp2app(W_InstanceObject.descr_nonzero,
Modified: pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py
==============================================================================
--- pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py (original)
+++ pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py Wed Dec 12 12:17:48 2007
@@ -79,7 +79,6 @@
raises(TypeError, "del A.__dict__")
raises(TypeError, "del A.__bases__")
-
def test_mutate_instance_special(self):
class A:
__metaclass__ = nclassobj
@@ -307,3 +306,23 @@
a = A()
assert repr(a).startswith("<__builtin__.A instance at")
assert str(a) == "foo"
+
+ def test_iter(self):
+ class A:
+ __metaclass__ = nclassobj
+ def __init__(self):
+ self.list = [1, 2, 3, 4, 5]
+ def __iter__(self):
+ return iter(self.list)
+ for i, element in enumerate(A()):
+ assert i + 1 == element
+ class A:
+ __metaclass__ = nclassobj
+ def __init__(self):
+ self.list = [1, 2, 3, 4, 5]
+ def __len__(self):
+ return len(self.list)
+ def __getitem__(self, i):
+ return self.list[i]
+ for i, element in enumerate(A()):
+ assert i + 1 == element
More information about the Pypy-commit
mailing list