Author: Amaury Forgeot d'Arc <amaur...@gmail.com> Branch: py3.3 Changeset: r75259:826457bf5cda Date: 2015-01-08 18:42 +0100 http://bitbucket.org/pypy/pypy/changeset/826457bf5cda/
Log: Set __qualname__ of builtin methods diff --git a/lib-python/3/test/test_funcattrs.py b/lib-python/3/test/test_funcattrs.py --- a/lib-python/3/test/test_funcattrs.py +++ b/lib-python/3/test/test_funcattrs.py @@ -121,7 +121,8 @@ self.b.__qualname__ = 'd' self.assertEqual(self.b.__qualname__, 'd') # __qualname__ must be a string - self.cannot_set_attr(self.b, '__qualname__', 7, TypeError) + self.cannot_set_attr(self.b, '__qualname__', 7, + (TypeError, AttributeError)) def test___code__(self): num_one, num_two = 7, 8 diff --git a/pypy/objspace/std/test/test_typeobject.py b/pypy/objspace/std/test/test_typeobject.py --- a/pypy/objspace/std/test/test_typeobject.py +++ b/pypy/objspace/std/test/test_typeobject.py @@ -395,6 +395,9 @@ class D(B, C): # assert does not raise TypeError pass + def test_method_qualname(self): + assert dict.copy.__qualname__ == 'dict.copy' + def test_builtin_add(self): x = 5 assert x.__add__(6) == 11 diff --git a/pypy/objspace/std/typeobject.py b/pypy/objspace/std/typeobject.py --- a/pypy/objspace/std/typeobject.py +++ b/pypy/objspace/std/typeobject.py @@ -1,7 +1,8 @@ from pypy.interpreter import gateway from pypy.interpreter.baseobjspace import W_Root, SpaceCache from pypy.interpreter.error import oefmt, OperationError -from pypy.interpreter.function import Function, StaticMethod +from pypy.interpreter.function import ( + Function, StaticMethod, FunctionWithFixedCode) from pypy.interpreter.typedef import weakref_descr, GetSetProperty,\ descr_get_dict, dict_descr, Member, TypeDef from pypy.interpreter.astcompiler.misc import mangle @@ -1263,8 +1264,17 @@ overridetypedef = typedef w_type = W_TypeObject(space, typedef.name, bases_w, dict_w, overridetypedef=overridetypedef) + if typedef is not overridetypedef: w_type.w_doc = space.wrap(typedef.doc) + else: + # Set the __qualname__ of member functions + for name in rawdict: + w_obj = dict_w[name] + if isinstance(w_obj, FunctionWithFixedCode): + qualname = w_type.getqualname(space) + '.' + name + w_obj.fset_func_qualname(space, space.wrap(qualname)) + if hasattr(typedef, 'flag_sequence_bug_compat'): w_type.flag_sequence_bug_compat = typedef.flag_sequence_bug_compat w_type.lazyloaders = lazyloaders _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit