]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-38870: Remove dependency on contextlib to avoid performance regression on import...
authorPablo Galindo <Pablogsal@gmail.com>
Mon, 25 Nov 2019 11:49:17 +0000 (11:49 +0000)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 25 Nov 2019 11:49:17 +0000 (03:49 -0800)
https://bugs.python.org/issue38870

Automerge-Triggered-By: @pablogsal
Lib/ast.py

index 97914ebc66858b06d98d5a29aef1e65eae72a97d..77eb24971ed24cb25508d55199b264d3880207f0 100644 (file)
@@ -26,7 +26,6 @@
 """
 import sys
 from _ast import *
-from contextlib import contextmanager
 
 
 def parse(source, filename='<unknown>', mode='exec', *,
@@ -597,15 +596,22 @@ class _Unparser(NodeVisitor):
         self._buffer.clear()
         return value
 
-    @contextmanager
-    def block(self):
+    class _Block:
         """A context manager for preparing the source for blocks. It adds
         the character':', increases the indentation on enter and decreases
         the indentation on exit."""
-        self.write(":")
-        self._indent += 1
-        yield
-        self._indent -= 1
+        def __init__(self, unparser):
+            self.unparser = unparser
+
+        def __enter__(self):
+            self.unparser.write(":")
+            self.unparser._indent += 1
+
+        def __exit__(self, exc_type, exc_value, traceback):
+            self.unparser._indent -= 1
+
+    def block(self):
+        return self._Block(self)
 
     def traverse(self, node):
         if isinstance(node, list):