Author: Maciej Fijalkowski <[email protected]>
Branch: kill-someobject
Changeset: r58013:99362c4bde4d
Date: 2012-10-11 20:12 +0200
http://bitbucket.org/pypy/pypy/changeset/99362c4bde4d/
Log: (arigo, fijal) fix the annotation of isinstance
diff --git a/pypy/annotation/builtin.py b/pypy/annotation/builtin.py
--- a/pypy/annotation/builtin.py
+++ b/pypy/annotation/builtin.py
@@ -150,7 +150,7 @@
def builtin_isinstance(s_obj, s_type, variables=None):
- r = SomeBool()
+ r = SomeBool()
if s_type.is_constant():
typ = s_type.const
if issubclass(typ, pypy.rlib.rarithmetic.base_int):
@@ -189,7 +189,7 @@
for variable in variables:
assert bk.annotator.binding(variable) == s_obj
r.knowntypedata = {}
- if isinstance(s_type, SomePBC):
+ if isinstance(s_obj, SomeInstance) and isinstance(s_type, SomePBC):
add_knowntypedata(r.knowntypedata, True, variables,
bk.valueoftype(typ))
return r
diff --git a/pypy/annotation/test/test_annrpython.py
b/pypy/annotation/test/test_annrpython.py
--- a/pypy/annotation/test/test_annrpython.py
+++ b/pypy/annotation/test/test_annrpython.py
@@ -3790,6 +3790,24 @@
s = a.build_types(fn, [annmodel.SomeChar()])
assert s == annmodel.SomeChar()
+ def test_isinstance_double_const(self):
+ class X(object):
+ def _freeze_(self):
+ return True
+
+ x = X()
+
+ def f(i):
+ if i:
+ x1 = x
+ else:
+ x1 = None
+ print "hello" # this is to force the merge of blocks
+ return isinstance(x1, X)
+
+ a = self.RPythonAnnotator()
+ s = a.build_types(f, [annmodel.SomeInteger()])
+ assert isinstance(s, annmodel.SomeBool)
def g(n):
return [0,1,2,n]
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit