[pypy-svn] r17525 - in pypy/dist/pypy: annotation translator/test
pedronis at codespeak.net
pedronis at codespeak.net
Tue Sep 13 14:08:21 CEST 2005
Author: pedronis
Date: Tue Sep 13 14:08:19 2005
New Revision: 17525
Modified:
pypy/dist/pypy/annotation/binaryop.py
pypy/dist/pypy/translator/test/test_annrpython.py
Log:
proper union for iterators
Modified: pypy/dist/pypy/annotation/binaryop.py
==============================================================================
--- pypy/dist/pypy/annotation/binaryop.py (original)
+++ pypy/dist/pypy/annotation/binaryop.py Tue Sep 13 14:08:19 2005
@@ -506,7 +506,10 @@
class __extend__(pairtype(SomeIterator, SomeIterator)):
def union((iter1, iter2)):
- return SomeIterator(unionof(iter1.s_container, iter2.s_container))
+ s_cont = unionof(iter1.s_container, iter2.s_container)
+ if iter1.variant != iter2.variant:
+ raise UnionError("merging incompatible iterators variants")
+ return SomeIterator(s_cont, *iter1.variant)
class __extend__(pairtype(SomeBuiltin, SomeBuiltin)):
Modified: pypy/dist/pypy/translator/test/test_annrpython.py
==============================================================================
--- pypy/dist/pypy/translator/test/test_annrpython.py (original)
+++ pypy/dist/pypy/translator/test/test_annrpython.py Tue Sep 13 14:08:19 2005
@@ -1703,6 +1703,19 @@
for t in memo:
assert t
+ def test_iterator_union(self):
+ def it(d):
+ return d.iteritems()
+ d0 = {1:2}
+ def f():
+ it(d0)
+ return it({1:2})
+ a = self.RPythonAnnotator()
+ s = a.build_types(f, [])
+ assert isinstance(s, annmodel.SomeIterator)
+ assert s.variant == ('items',)
+
+
def g(n):
return [0,1,2,n]
More information about the Pypy-commit
mailing list