X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/6316e293ac30a2837ec20eba289fd28a2a18cf89..788f87cb58dbdb20df8adbb9ab4efaee1c5e00f2:/blib2to3/pygram.py

diff --git a/blib2to3/pygram.py b/blib2to3/pygram.py
index bf55ab4..0c916a9 100644
--- a/blib2to3/pygram.py
+++ b/blib2to3/pygram.py
@@ -9,7 +9,6 @@ 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")
@@ -29,19 +28,36 @@ class Symbols(object):
             setattr(self, name, symbol)
 
 
-python_grammar = driver.load_packaged_grammar("blib2to3", _GRAMMAR_FILE)
+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_symbols = Symbols(python_grammar)
+    # Python 2
+    python_grammar = driver.load_packaged_grammar("blib2to3", _GRAMMAR_FILE,
+                                                  cache_dir)
 
-python_grammar_no_print_statement = python_grammar.copy()
-del python_grammar_no_print_statement.keywords["print"]
+    python_symbols = Symbols(python_grammar)
 
-python_grammar_no_exec_statement = python_grammar.copy()
-del python_grammar_no_exec_statement.keywords["exec"]
+    # Python 2 + from __future__ import print_function
+    python_grammar_no_print_statement = python_grammar.copy()
+    del python_grammar_no_print_statement.keywords["print"]
 
-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.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"]
 
-pattern_grammar = driver.load_packaged_grammar("blib2to3", _PATTERN_GRAMMAR_FILE)
-pattern_symbols = Symbols(pattern_grammar)
+    # 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)