[Python-checkins] python/dist/src/Lib string.py,1.78,1.79

bwarsaw at users.sourceforge.net bwarsaw at users.sourceforge.net
Mon Sep 13 22:52:53 CEST 2004


Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18824

Modified Files:
	string.py 
Log Message:
Raymond's good suggestion to re-order the tests in the convert() helper so the
most common paths are tested first.  Also, that 'invalid' is better than
'bogus'.


Index: string.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/string.py,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -d -r1.78 -r1.79
--- string.py	13 Sep 2004 15:25:15 -0000	1.78
+++ string.py	13 Sep 2004 20:52:50 -0000	1.79
@@ -104,7 +104,7 @@
     (?P<escaped>%(delim)s{2})       |   # Escape sequence of two delimiters
     %(delim)s(?P<named>%(id)s)      |   # delimiter and a Python identifier
     %(delim)s{(?P<braced>%(id)s)}   |   # delimiter and a braced identifier
-    (?P<bogus>%(delim)s)                # Other ill-formed delimiter exprs
+    (?P<invalid>%(delim)s)              # Other ill-formed delimiter exprs
     """
 
     def __init__(cls, name, bases, dct):
@@ -131,8 +131,8 @@
 
     # Search for $$, $identifier, ${identifier}, and any bare $'s
 
-    def _bogus(self, mo):
-        i = mo.start('bogus')
+    def _invalid(self, mo):
+        i = mo.start('invalid')
         lines = self.template[:i].splitlines(True)
         if not lines:
             colno = 1
@@ -154,14 +154,17 @@
             mapping = args[0]
         # Helper function for .sub()
         def convert(mo):
+            # Check the most common path first.
+            named = mo.group('named') or mo.group('braced')
+            if named is not None:
+                val = mapping[named]
+                # We use this idiom instead of str() because the latter will
+                # fail if val is a Unicode containing non-ASCII characters.
+                return '%s' % val
             if mo.group('escaped') is not None:
                 return '$'
-            if mo.group('bogus') is not None:
-                self._bogus(mo)
-            val = mapping[mo.group('named') or mo.group('braced')]
-            # We use this idiom instead of str() because the latter will fail
-            # if val is a Unicode containing non-ASCII characters.
-            return '%s' % val
+            if mo.group('invalid') is not None:
+                self._invalid(mo)
         return self.pattern.sub(convert, self.template)
 
     def safe_substitute(self, *args, **kws):
@@ -175,10 +178,6 @@
             mapping = args[0]
         # Helper function for .sub()
         def convert(mo):
-            if mo.group('escaped') is not None:
-                return '$'
-            if mo.group('bogus') is not None:
-                self._bogus(mo)
             named = mo.group('named')
             if named is not None:
                 try:
@@ -192,6 +191,10 @@
                 return '%s' % mapping[braced]
             except KeyError:
                 return '${' + braced + '}'
+            if mo.group('escaped') is not None:
+                return '$'
+            if mo.group('invalid') is not None:
+                self._invalid(mo)
         return self.pattern.sub(convert, self.template)
 
 



More information about the Python-checkins mailing list