X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/2d80366ac1304c6eff84604d1308ecae5daeef32..8f380911e0cd8057bd9a1f0c418d81195ce858a3:/blib2to3/pgen2/grammar.py?ds=inline

diff --git a/blib2to3/pgen2/grammar.py b/blib2to3/pgen2/grammar.py
index c00cb22..32d1d8b 100644
--- a/blib2to3/pgen2/grammar.py
+++ b/blib2to3/pgen2/grammar.py
@@ -13,8 +13,9 @@ fallback token code OP, but the parser needs the actual token code.
 """
 
 # Python imports
-import collections
+import os
 import pickle
+import tempfile
 
 # Local imports
 from . import token
@@ -84,11 +85,14 @@ class Grammar(object):
         self.tokens = {}
         self.symbol2label = {}
         self.start = 256
+        # Python 3.7+ parses async as a keyword, not an identifier
+        self.async_keywords = False
 
     def dump(self, filename):
         """Dump the grammar tables to a pickle file."""
-        with open(filename, "wb") as f:
+        with tempfile.NamedTemporaryFile(dir=os.path.dirname(filename), delete=False) as f:
             pickle.dump(self.__dict__, f, pickle.HIGHEST_PROTOCOL)
+        os.replace(f.name, filename)
 
     def load(self, filename):
         """Load the grammar tables from a pickle file."""
@@ -111,6 +115,7 @@ class Grammar(object):
         new.labels = self.labels[:]
         new.states = self.states[:]
         new.start = self.start
+        new.async_keywords = self.async_keywords
         return new
 
     def report(self):