[pypy-commit] pypy py3k: cpython issue1574217: don't mask non AttributeErrors from __class__
pjenvey
noreply at buildbot.pypy.org
Fri Mar 1 02:25:05 CET 2013
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r61880:0e8ad33bfe4d
Date: 2013-02-28 17:22 -0800
http://bitbucket.org/pypy/pypy/changeset/0e8ad33bfe4d/
Log: cpython issue1574217: don't mask non AttributeErrors from __class__
diff --git a/pypy/module/__builtin__/abstractinst.py b/pypy/module/__builtin__/abstractinst.py
--- a/pypy/module/__builtin__/abstractinst.py
+++ b/pypy/module/__builtin__/abstractinst.py
@@ -69,8 +69,8 @@
# From now on we know that w_klass_or_tuple is indeed a type.
# Try also to compare it with obj.__class__, if this is not
# the same as type(obj).
+ w_pretendtype = abstract_getclass(space, w_obj)
try:
- w_pretendtype = space.getattr(w_obj, space.wrap('__class__'))
if space.is_w(w_pretendtype, space.type(w_obj)):
return False # common case: obj.__class__ is type(obj)
if allow_override:
diff --git a/pypy/module/__builtin__/test/test_abstractinst.py b/pypy/module/__builtin__/test/test_abstractinst.py
--- a/pypy/module/__builtin__/test/test_abstractinst.py
+++ b/pypy/module/__builtin__/test/test_abstractinst.py
@@ -135,6 +135,14 @@
raises(TypeError, isinstance, x, BBase)
assert not isinstance(x, BSub2)
+ class BadClass:
+ @property
+ def __class__(self):
+ raise RuntimeError
+ raises(RuntimeError, isinstance, BadClass(), bool)
+ # test another code path
+ raises(RuntimeError, isinstance, BadClass(), Foo)
+
def test_abstract_issubclass(self):
class MyBaseInst(object):
pass
More information about the pypy-commit
mailing list