X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/82198030eef6f99ad47470d82c34d9a6e1a4e6df..31f4105731c9e5a6930905d358b62b2b834b940b:/blib2to3/pygram.py

diff --git a/blib2to3/pygram.py b/blib2to3/pygram.py
index b847c1e..7614af7 100644
--- a/blib2to3/pygram.py
+++ b/blib2to3/pygram.py
@@ -9,16 +9,13 @@ import os
 # Local imports
 from .pgen2 import token
 from .pgen2 import driver
-from . import pytree
 
 # The grammar file
 _GRAMMAR_FILE = os.path.join(os.path.dirname(__file__), "Grammar.txt")
-_PATTERN_GRAMMAR_FILE = os.path.join(os.path.dirname(__file__),
-                                     "PatternGrammar.txt")
+_PATTERN_GRAMMAR_FILE = os.path.join(os.path.dirname(__file__), "PatternGrammar.txt")
 
 
 class Symbols(object):
-
     def __init__(self, grammar):
         """Initializer.
 
@@ -29,19 +26,38 @@ class Symbols(object):
             setattr(self, name, symbol)
 
 
-# Python 2
-python_grammar = driver.load_packaged_grammar("blib2to3", _GRAMMAR_FILE)
-
-python_symbols = Symbols(python_grammar)
-
-# Python 2 + from __future__ import print_function
-python_grammar_no_print_statement = python_grammar.copy()
-del python_grammar_no_print_statement.keywords["print"]
-
-# Python 3
-python_grammar_no_print_statement_no_exec_statement = python_grammar.copy()
-del python_grammar_no_print_statement_no_exec_statement.keywords["print"]
-del python_grammar_no_print_statement_no_exec_statement.keywords["exec"]
-
-pattern_grammar = driver.load_packaged_grammar("blib2to3", _PATTERN_GRAMMAR_FILE)
-pattern_symbols = Symbols(pattern_grammar)
+def initialize(cache_dir=None):
+    global python_grammar
+    global python_grammar_no_print_statement
+    global python_grammar_no_print_statement_no_exec_statement
+    global python_grammar_no_print_statement_no_exec_statement_async_keywords
+    global python_symbols
+    global pattern_grammar
+    global pattern_symbols
+
+    # Python 2
+    python_grammar = driver.load_packaged_grammar("blib2to3", _GRAMMAR_FILE, cache_dir)
+
+    python_symbols = Symbols(python_grammar)
+
+    # Python 2 + from __future__ import print_function
+    python_grammar_no_print_statement = python_grammar.copy()
+    del python_grammar_no_print_statement.keywords["print"]
+
+    # Python 3.0-3.6
+    python_grammar_no_print_statement_no_exec_statement = python_grammar.copy()
+    del python_grammar_no_print_statement_no_exec_statement.keywords["print"]
+    del python_grammar_no_print_statement_no_exec_statement.keywords["exec"]
+
+    # Python 3.7+
+    python_grammar_no_print_statement_no_exec_statement_async_keywords = (
+        python_grammar_no_print_statement_no_exec_statement.copy()
+    )
+    python_grammar_no_print_statement_no_exec_statement_async_keywords.async_keywords = (
+        True
+    )
+
+    pattern_grammar = driver.load_packaged_grammar(
+        "blib2to3", _PATTERN_GRAMMAR_FILE, cache_dir
+    )
+    pattern_symbols = Symbols(pattern_grammar)