[pypy-svn] r8592 - in pypy/dist/pypy: annotation translator/test

mwh at codespeak.net mwh at codespeak.net
Wed Jan 26 10:54:58 CET 2005


Author: mwh
Date: Wed Jan 26 10:54:58 2005
New Revision: 8592

Modified:
   pypy/dist/pypy/annotation/binaryop.py
   pypy/dist/pypy/annotation/builtin.py
   pypy/dist/pypy/translator/test/snippet.py
   pypy/dist/pypy/translator/test/test_annrpython.py
Log:
union(SomeSlice, SomeSlice)
builtin_slice (mainly so I could write the tests for the above)
tests.


Modified: pypy/dist/pypy/annotation/binaryop.py
==============================================================================
--- pypy/dist/pypy/annotation/binaryop.py	(original)
+++ pypy/dist/pypy/annotation/binaryop.py	Wed Jan 26 10:54:58 2005
@@ -199,6 +199,14 @@
         generalize(dic1.factories, obj2, s_value)
 
 
+class __extend__(pairtype(SomeSlice, SomeSlice)):
+
+    def union((slic1, slic2)):
+        return SomeSlice(unionof(slic1.start, slic2.start),
+                         unionof(slic1.stop, slic2.stop),
+                         unionof(slic1.step, slic2.step))
+
+
 class __extend__(pairtype(SomeTuple, SomeInteger)):
     
     def getitem((tup1, int2)):

Modified: pypy/dist/pypy/annotation/builtin.py
==============================================================================
--- pypy/dist/pypy/annotation/builtin.py	(original)
+++ pypy/dist/pypy/annotation/builtin.py	Wed Jan 26 10:54:58 2005
@@ -4,7 +4,7 @@
 
 import types
 from pypy.annotation.model import SomeInteger, SomeObject, SomeChar, SomeBool
-from pypy.annotation.model import SomeList, SomeString, SomeTuple
+from pypy.annotation.model import SomeList, SomeString, SomeTuple, SomeSlice
 from pypy.annotation.bookkeeper import getbookkeeper
 from pypy.annotation.factory import ListFactory
 from pypy.objspace.flow.model import Constant
@@ -138,6 +138,21 @@
     s.knowntype = types.CodeType
     return s
 
+def builtin_slice(*args):
+    bk = getbookkeeper()
+    if len(args) == 1:
+        return SomeSlice(
+            bk.immutablevalue(None), args[0], bk.immutablevalue(None))
+    elif len(args) == 2:
+        return SomeSlice(
+            args[0], args[1], bk.immutablevalue(None))
+    elif len(args) == 3:
+        return SomeSlice(
+            args[0], args[1], args[2])
+    else:
+        raise Exception, "bogus call to slice()"
+        
+
 def exception_init(s_self, *args):
     s_self.setattr(immutablevalue('args'), SomeTuple(args))
 

Modified: pypy/dist/pypy/translator/test/snippet.py
==============================================================================
--- pypy/dist/pypy/translator/test/snippet.py	(original)
+++ pypy/dist/pypy/translator/test/snippet.py	Wed Jan 26 10:54:58 2005
@@ -694,3 +694,8 @@
     d = {'a' : 1}
     return d.items()
 
+def slice_union(x):
+    if x:
+        return slice(1)
+    else:
+        return slice(0, 10, 2)

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	Wed Jan 26 10:54:58 2005
@@ -397,7 +397,6 @@
         s = a.build_types(snippet.simple_slice, [list])
         assert isinstance(s, annmodel.SomeList)
 
-
     def test_simple_iter_list(self):
         a = RPythonAnnotator()
         s = a.build_types(snippet.simple_iter, [list])
@@ -463,6 +462,10 @@
         assert isinstance(s_key, annmodel.SomeString)
         assert isinstance(s_value, annmodel.SomeInteger)
         
+    def test_slice_union(self):
+        a = RPythonAnnotator()
+        s = a.build_types(snippet.slice_union, [int])
+        assert isinstance(s, annmodel.SomeSlice)
         
 
 def g(n):



More information about the Pypy-commit mailing list