Author: Amaury Forgeot d'Arc <amaur...@gmail.com> Branch: merge-2.7.2 Changeset: r51646:89f238f17ecb Date: 2012-01-22 17:25 +0100 http://bitbucket.org/pypy/pypy/changeset/89f238f17ecb/
Log: Undo the previous change, and just add "allow_override=True". This fixes the cases when an old-style class in involved. diff --git a/pypy/interpreter/function.py b/pypy/interpreter/function.py --- a/pypy/interpreter/function.py +++ b/pypy/interpreter/function.py @@ -497,8 +497,8 @@ # only allow binding to a more specific class than before if (w_cls is not None and not space.is_w(w_cls, space.w_None) and - not space.is_true( - space.issubtype_allow_override(w_cls, self.w_class))): + not space.abstract_issubclass_w(w_cls, self.w_class, + allow_override=True)): return space.wrap(self) # subclass test failed else: return descr_function_get(space, self.w_function, w_obj, w_cls) diff --git a/pypy/interpreter/test/test_function.py b/pypy/interpreter/test/test_function.py --- a/pypy/interpreter/test/test_function.py +++ b/pypy/interpreter/test/test_function.py @@ -597,6 +597,17 @@ # --- with an incompatible class w_meth5 = meth3.descr_method_get(space.wrap('hello'), space.w_str) assert space.is_w(w_meth5, w_meth3) + # Same thing, with an old-style class + w_oldclass = space.call_function( + space.builtin.get('__metaclass__'), + space.wrap('OldClass'), space.newtuple([]), space.newdict()) + w_meth6 = meth3.descr_method_get(space.wrap('hello'), w_oldclass) + assert space.is_w(w_meth6, w_meth3) + # Reverse order of old/new styles + w_meth7 = descr_function_get(space, func, space.w_None, w_oldclass) + meth7 = space.unwrap(w_meth7) + w_meth8 = meth7.descr_method_get(space.wrap('hello'), space.w_str) + assert space.is_w(w_meth8, w_meth7) class TestShortcuts(object): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit