Author: Maciej Fijalkowski <fij...@gmail.com> 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 pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit