[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