Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r78430:705d7abb7534
Date: 2015-07-04 20:09 +0200
http://bitbucket.org/pypy/pypy/changeset/705d7abb7534/

Log:    Test and fix in the annotator! Still!

diff --git a/rpython/annotator/builtin.py b/rpython/annotator/builtin.py
--- a/rpython/annotator/builtin.py
+++ b/rpython/annotator/builtin.py
@@ -156,7 +156,10 @@
     if s_type.is_constant():
         typ = s_type.const
         if issubclass(typ, rpython.rlib.rarithmetic.base_int):
-            r.const = issubclass(s_obj.knowntype, typ)
+            try:
+                r.const = issubclass(s_obj.knowntype, typ)
+            except TypeError:    # s_obj.knowntype is not a Python type at all
+                r.const = False
         else:
             if typ == long:
                 getbookkeeper().warning("isinstance(., long) is not RPython")
diff --git a/rpython/annotator/test/test_annrpython.py 
b/rpython/annotator/test/test_annrpython.py
--- a/rpython/annotator/test/test_annrpython.py
+++ b/rpython/annotator/test/test_annrpython.py
@@ -1135,7 +1135,7 @@
 
         assert famCinit.calltables == {(1, (), False): [{mdescCinit.funcdesc: 
gfCinit}] }
 
-    def test_isinstance_usigned(self):
+    def test_isinstance_unsigned_1(self):
         def f(x):
             return isinstance(x, r_uint)
         def g():
@@ -1145,6 +1145,18 @@
         s = a.build_types(g, [])
         assert s.const == True
 
+    def test_isinstance_unsigned_2(self):
+        class Foo:
+            pass
+        def f(x):
+            return isinstance(x, r_uint)
+        def g():
+            v = Foo()
+            return f(v)
+        a = self.RPythonAnnotator()
+        s = a.build_types(g, [])
+        assert s.const == False
+
     def test_isinstance_base_int(self):
         def f(x):
             return isinstance(x, base_int)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to