[Python-checkins] r53450 - sandbox/trunk/2to3/patcomp.py sandbox/trunk/2to3/pygram.py sandbox/trunk/2to3/refactor.py

guido.van.rossum python-checkins at python.org
Mon Jan 15 02:03:17 CET 2007


Author: guido.van.rossum
Date: Mon Jan 15 02:03:16 2007
New Revision: 53450

Modified:
   sandbox/trunk/2to3/patcomp.py
   sandbox/trunk/2to3/pygram.py
   sandbox/trunk/2to3/refactor.py
Log:
Make it possible to run refactor.py from a different directory.
Don't parse Grammar.txt twice.
Better diagnostics (showing traceback) if a fixer class can't be instantiated.


Modified: sandbox/trunk/2to3/patcomp.py
==============================================================================
--- sandbox/trunk/2to3/patcomp.py	(original)
+++ sandbox/trunk/2to3/patcomp.py	Mon Jan 15 02:03:16 2007
@@ -11,6 +11,7 @@
 __author__ = "Guido van Rossum <guido at python.org>"
 
 # Python imports
+import os
 import token
 import tokenize
 
@@ -20,19 +21,11 @@
 
 # Really local imports
 import pytree
+import pygram
 
-
-class Symbols(object):
-
-    def __init__(self, grammar):
-        """Initializer.
-
-        Creates an attribute for each grammar symbol (nonterminal),
-        whose value is the symbol's type (an int >= 256).
-        """
-        self._grammar = grammar
-        for name in grammar.symbol2number:
-            setattr(self, name, grammar.symbol2number[name])
+# The pattern grammar file
+_PATTERN_GRAMMAR_FILE = os.path.join(os.path.dirname(__file__),
+                                     "PatternGrammar.txt")
 
 
 def tokenize_wrapper(input):
@@ -47,15 +40,15 @@
 
 class PatternCompiler(object):
 
-    def __init__(self, grammar_file="PatternGrammar.txt"):
+    def __init__(self, grammar_file=_PATTERN_GRAMMAR_FILE):
         """Initializer.
 
         Takes an optional alternative filename for the pattern grammar.
         """
         self.grammar = driver.load_grammar(grammar_file)
-        self.syms = Symbols(self.grammar)
-        self.pygrammar = driver.load_grammar("Grammar.txt")
-        self.pysyms = Symbols(self.pygrammar)
+        self.syms = pygram.Symbols(self.grammar)
+        self.pygrammar = pygram.python_grammar
+        self.pysyms = pygram.python_symbols
         self.driver = driver.Driver(self.grammar, convert=pattern_convert)
 
     def compile_pattern(self, input, debug=False):

Modified: sandbox/trunk/2to3/pygram.py
==============================================================================
--- sandbox/trunk/2to3/pygram.py	(original)
+++ sandbox/trunk/2to3/pygram.py	Mon Jan 15 02:03:16 2007
@@ -4,21 +4,30 @@
 """Export the Python grammar and symbols."""
 
 # Python imports
+import os
 import token
 
 # Local imports
 import pytree
 from pgen2 import driver
 
+# The grammar file
+_GRAMMAR_FILE = os.path.join(os.path.dirname(__file__), "Grammar.txt")
+
 
 class Symbols(object):
 
-    def __init__(self, gr):
-        for name, symbol in gr.symbol2number.iteritems():
+    def __init__(self, grammar):
+        """Initializer.
+
+        Creates an attribute for each grammar symbol (nonterminal),
+        whose value is the symbol's type (an int >= 256).
+        """
+        for name, symbol in grammar.symbol2number.iteritems():
             setattr(self, name, symbol)
 
 
-python_grammar = driver.load_grammar("Grammar.txt")
+python_grammar = driver.load_grammar(_GRAMMAR_FILE)
 python_symbols = Symbols(python_grammar)
 
 

Modified: sandbox/trunk/2to3/refactor.py
==============================================================================
--- sandbox/trunk/2to3/refactor.py	(original)
+++ sandbox/trunk/2to3/refactor.py	Mon Jan 15 02:03:16 2007
@@ -123,17 +123,17 @@
                 fixer = fix_class(self.options)
             except Exception, err:
                 self.log_error("Can't instantiate fixes.fix_%s.%s()",
-                               fix_name, class_name)
+                               fix_name, class_name, exc_info=True)
                 continue
             if self.options.verbose:
                 self.log_message("Adding transformation: %s", fix_name)
             fixers.append(fixer)
         return fixers
 
-    def log_error(self, msg, *args):
+    def log_error(self, msg, *args, **kwds):
         """Increments error count and log a message."""
         self.errors += 1
-        self.logger.error(msg, *args)
+        self.logger.error(msg, *args, **kwds)
 
     def log_message(self, msg, *args):
         """Hook to log a message."""


More information about the Python-checkins mailing list