summaryrefslogtreecommitdiffstats
path: root/Lib/lib2to3/pytree.py
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2008-07-17 02:21:56 (GMT)
committerBenjamin Peterson <benjamin@python.org>2008-07-17 02:21:56 (GMT)
commit4cdf572cc54d32b057a7fddfbccd7b161e79e40d (patch)
tree82ce5c7f6184ed796c13b2c5616d27d49b7b11a6 /Lib/lib2to3/pytree.py
parentf156b0c2b34da88913923711b8ceb8160d29d171 (diff)
downloadcpython-4cdf572cc54d32b057a7fddfbccd7b161e79e40d.zip
cpython-4cdf572cc54d32b057a7fddfbccd7b161e79e40d.tar.gz
cpython-4cdf572cc54d32b057a7fddfbccd7b161e79e40d.tar.bz2
Merged revisions 65055 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ................ r65055 | benjamin.peterson | 2008-07-16 21:07:46 -0500 (Wed, 16 Jul 2008) | 13 lines Merged revisions 65053-65054 via svnmerge from svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r65053 | benjamin.peterson | 2008-07-16 21:04:12 -0500 (Wed, 16 Jul 2008) | 1 line massive optimizations for 2to3 (especially fix_imports) from Nick Edds ........ r65054 | benjamin.peterson | 2008-07-16 21:05:09 -0500 (Wed, 16 Jul 2008) | 1 line normalize whitespace ........ ................
Diffstat (limited to 'Lib/lib2to3/pytree.py')
-rw-r--r--Lib/lib2to3/pytree.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/Lib/lib2to3/pytree.py b/Lib/lib2to3/pytree.py
index 65fbb67..efdeb05 100644
--- a/Lib/lib2to3/pytree.py
+++ b/Lib/lib2to3/pytree.py
@@ -652,20 +652,35 @@ class WildcardPattern(BasePattern):
if self.name:
r[self.name] = nodes[:count]
yield count, r
+ elif self.name == "bare_name":
+ yield self._bare_name_matches(nodes)
else:
for count, r in self._recursive_matches(nodes, 0):
if self.name:
r[self.name] = nodes[:count]
yield count, r
+ def _bare_name_matches(self, nodes):
+ """Special optimized matcher for bare_name."""
+ count = 0
+ r = {}
+ done = False
+ max = len(nodes)
+ while not done and count < max:
+ done = True
+ for leaf in self.content:
+ if leaf[0].match(nodes[count], r):
+ count += 1
+ done = False
+ break
+ r[self.name] = nodes[:count]
+ return count, r
+
def _recursive_matches(self, nodes, count):
"""Helper to recursively yield the matches."""
assert self.content is not None
if count >= self.min:
- r = {}
- if self.name:
- r[self.name] = nodes[:0]
- yield 0, r
+ yield 0, {}
if count < self.max:
for alt in self.content:
for c0, r0 in generate_matches(alt, nodes):