Commit 159a3b9a authored by Stefan Behnel's avatar Stefan Behnel

add <locals> to __qualname__ for closures as defined by PEP 3155

parent 502394e7
...@@ -6019,10 +6019,13 @@ class DictItemNode(ExprNode): ...@@ -6019,10 +6019,13 @@ class DictItemNode(ExprNode):
class ModuleNameMixin(object): class ModuleNameMixin(object):
def set_qualified_name(self, env, self_name): def set_qualified_name(self, env, self_name):
self.module_name = env.global_scope().qualified_name self.module_name = env.global_scope().qualified_name
prefix = env.qualified_name[len(self.module_name)+1:] qualified_name = [self_name]
if prefix: while env and not env.is_module_scope:
self_name = prefix + '.' + self_name if env.is_closure_scope:
self.qualname = StringEncoding.EncodedString(self_name) qualified_name.append('<locals>')
qualified_name.append(env.name)
env = env.parent_scope
self.qualname = StringEncoding.EncodedString('.'.join(qualified_name[::-1]))
def get_py_mod_name(self, code): def get_py_mod_name(self, code):
return code.get_py_string_const( return code.get_py_string_const(
......
...@@ -47,20 +47,24 @@ def test_qualname(): ...@@ -47,20 +47,24 @@ def test_qualname():
def test_nested_qualname(): def test_nested_qualname():
""" """
>>> func = test_nested_qualname() >>> func, lambda_func = test_nested_qualname()
>>> func().__qualname__ >>> func().__qualname__
'test_nested_qualname.outer.Test' 'test_nested_qualname.<locals>.outer.<locals>.Test'
>>> func().test.__qualname__ >>> func().test.__qualname__
'test_nested_qualname.outer.Test.test' 'test_nested_qualname.<locals>.outer.<locals>.Test.test'
>>> func()().test.__qualname__ >>> func()().test.__qualname__
'test_nested_qualname.outer.Test.test' 'test_nested_qualname.<locals>.outer.<locals>.Test.test'
>>> lambda_func.__qualname__
'test_nested_qualname.<locals>.<lambda>'
""" """
def outer(): def outer():
class Test(object): class Test(object):
def test(self): def test(self):
return 123 return 123
return Test return Test
return outer return outer, lambda:None
def test_doc(): def test_doc():
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment