Commit 3421e034 authored by Stefan Behnel's avatar Stefan Behnel

fix "__qualname__" of names defined as 'global'

parent 8524b21f
......@@ -6679,11 +6679,13 @@ class ModuleNameMixin(object):
def set_qualified_name(self, env, self_name):
self.module_name = env.global_scope().qualified_name
qualified_name = [self_name]
while env and not env.is_module_scope:
if env.is_closure_scope:
qualified_name.append('<locals>')
qualified_name.append(env.name)
env = env.parent_scope
entry = env.lookup(self_name)
if not entry or not (entry.is_pyglobal and not entry.is_pyclass_attr):
while env and not env.is_module_scope:
if env.is_closure_scope:
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):
......
......@@ -47,24 +47,42 @@ def test_qualname():
def test_nested_qualname():
"""
>>> func, lambda_func = test_nested_qualname()
>>> func, lambda_func, XYZ = test_nested_qualname()
>>> func().__qualname__
'test_nested_qualname.<locals>.outer.<locals>.Test'
>>> func().test.__qualname__
'test_nested_qualname.<locals>.outer.<locals>.Test.test'
>>> func()().__qualname__
'test_nested_qualname.<locals>.outer.<locals>.Test'
>>> func()().test.__qualname__
'test_nested_qualname.<locals>.outer.<locals>.Test.test'
>>> func()().test().__qualname__
'XYZinner'
>>> func()().test()().__qualname__
'XYZinner'
>>> lambda_func.__qualname__
'test_nested_qualname.<locals>.<lambda>'
>>> XYZ.__qualname__
'XYZ'
"""
def outer():
class Test(object):
def test(self):
return 123
global XYZinner
class XYZinner(object): pass
return XYZinner
return Test
return outer, lambda:None
global XYZ
class XYZ(object): pass
return outer, lambda:None, XYZ
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