[pypy-svn] r43298 - in pypy/branch/pypy-string-formatting/annotation: . test

arigo at codespeak.net arigo at codespeak.net
Sat May 12 16:20:58 CEST 2007


Author: arigo
Date: Sat May 12 16:20:56 2007
New Revision: 43298

Modified:
   pypy/branch/pypy-string-formatting/annotation/builtin.py
   pypy/branch/pypy-string-formatting/annotation/test/test_annrpython.py
Log:
Annotation: int(mybool) and int(mynonnegint) should return
a *nonneg* integer.


Modified: pypy/branch/pypy-string-formatting/annotation/builtin.py
==============================================================================
--- pypy/branch/pypy-string-formatting/annotation/builtin.py	(original)
+++ pypy/branch/pypy-string-formatting/annotation/builtin.py	Sat May 12 16:20:56 2007
@@ -91,7 +91,8 @@
         args_s = [s_obj, s_base]
     else:
         args_s = [s_obj]
-    return constpropagate(int, args_s, SomeInteger())
+    nonneg = isinstance(s_obj, SomeInteger) and s_obj.nonneg
+    return constpropagate(int, args_s, SomeInteger(nonneg=nonneg))
 
 def builtin_float(s_obj):
     return constpropagate(float, [s_obj], SomeFloat())

Modified: pypy/branch/pypy-string-formatting/annotation/test/test_annrpython.py
==============================================================================
--- pypy/branch/pypy-string-formatting/annotation/test/test_annrpython.py	(original)
+++ pypy/branch/pypy-string-formatting/annotation/test/test_annrpython.py	Sat May 12 16:20:56 2007
@@ -1589,6 +1589,15 @@
         s = a.build_types(f, [int, str])
         assert s.knowntype == int
 
+    def test_int_nonneg(self):
+        def f(x, y):
+            assert x >= 0
+            return int(x) + int(y == 3)
+        a = self.RPythonAnnotator()
+        s = a.build_types(f, [int, int])
+        assert isinstance(s, annmodel.SomeInteger)
+        assert s.nonneg
+
     def test_listitem_merge_asymmetry_bug(self):
         class K:
             pass


More information about the pypy-svn mailing list