freetree.py 617 B

1234567891011121314151617181920212223
  1. """Generic node traverser visitor"""
  2. from __future__ import annotations
  3. from mypy.nodes import Block, MypyFile
  4. from mypy.traverser import TraverserVisitor
  5. class TreeFreer(TraverserVisitor):
  6. def visit_block(self, block: Block) -> None:
  7. super().visit_block(block)
  8. block.body.clear()
  9. def free_tree(tree: MypyFile) -> None:
  10. """Free all the ASTs associated with a module.
  11. This needs to be done recursively, since symbol tables contain
  12. references to definitions, so those won't be freed but we want their
  13. contents to be.
  14. """
  15. tree.accept(TreeFreer())
  16. tree.defs.clear()