summaryrefslogtreecommitdiff
path: root/Lib/string.py
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2004-09-13 20:52:50 +0000
committerBarry Warsaw <barry@python.org>2004-09-13 20:52:50 +0000
commitb934bb94f61f666a058d2f6cbe29fc445e791588 (patch)
treeb037e0e54f45f75a8e074106e2dbd3c54466405a /Lib/string.py
parent7c8315aa1f7140a4099c8ee0199187963dbad8bb (diff)
downloadcpython-b934bb94f61f666a058d2f6cbe29fc445e791588.tar.gz
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'.
Diffstat (limited to 'Lib/string.py')
-rw-r--r--Lib/string.py29
1 files changed, 16 insertions, 13 deletions
diff --git a/Lib/string.py b/Lib/string.py
index 3c5d7e3bd7..8cbf573314 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -104,7 +104,7 @@ class _TemplateMetaclass(type):
(?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 @@ class Template:
# 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 @@ class Template:
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 @@ class Template:
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 @@ class Template:
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)