Skip to content

Commit

Permalink
Defer bindings for nonlocal type params
Browse files Browse the repository at this point in the history
  • Loading branch information
dflook committed Nov 8, 2023
1 parent 08e38e7 commit 4e56417
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
9 changes: 6 additions & 3 deletions src/python_minifier/rename/bind_names.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,13 +174,16 @@ def visit_MatchMapping(self, node):
self.generic_visit(node)

def visit_TypeVar(self, node):
self.get_binding(node.name, node.namespace).add_reference(node)
if node.name not in node.namespace.nonlocal_names:
self.get_binding(node.name, node.namespace).add_reference(node)

def visit_TypeVarTuple(self, node):
self.get_binding(node.name, node.namespace).add_reference(node)
if node.name not in node.namespace.nonlocal_names:
self.get_binding(node.name, node.namespace).add_reference(node)

def visit_ParamSpec(self, node):
self.get_binding(node.name, node.namespace).add_reference(node)
if node.name not in node.namespace.nonlocal_names:
self.get_binding(node.name, node.namespace).add_reference(node)

def bind_names(module):
"""
Expand Down
9 changes: 9 additions & 0 deletions src/python_minifier/rename/resolve_names.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,5 +102,14 @@ def resolve_names(node):
elif is_ast_node(node, 'Exec'):
get_global_namespace(node).tainted = True

elif is_ast_node(node, 'TypeVar') and node.name in node.namespace.nonlocal_names:
get_binding(node.name, node.namespace).add_reference(node)

elif is_ast_node(node, 'TypeVarTuple') and node.name in node.namespace.nonlocal_names:
get_binding(node.name, node.namespace).add_reference(node)

elif is_ast_node(node, 'ParamSpec') and node.name in node.namespace.nonlocal_names:
get_binding(node.name, node.namespace).add_reference(node)

for child in ast.iter_child_nodes(node):
resolve_names(child)

0 comments on commit 4e56417

Please sign in to comment.