check-miscaptures.py: handle destructuring function arguments correctly. refs #1555

This commit is contained in:
david-sarah 2011-10-09 04:47:10 +00:00
parent d2f3ef9714
commit 1c6fe1d230

View File

@ -96,10 +96,8 @@ def collect_captured(ast, declared, captured):
if isinstance(ast, (Lambda, Function)):
# Formal parameters of the function are excluded from
# captures we care about in subnodes of the function body.
declared = declared.copy()
for argname in ast.argnames:
if argname in declared:
del declared[argname]
new_declared = declared.copy()
remove_argnames(ast.argnames, new_declared)
for child in childnodes[len(ast.defaults):]:
collect_captured(child, declared, captured)
@ -114,6 +112,14 @@ def collect_captured(ast, declared, captured):
collect_captured(child, declared, captured)
def remove_argnames(names, fromset):
for element in names:
if element in fromset:
del fromset[element]
elif isinstance(element, (tuple, list)):
remove_argnames(element, fromset)
def make_result(funcnode, var_name, var_lineno):
if hasattr(funcnode, 'name'):
func_name = 'function %r' % (funcnode.name,)