diff options
author | Benjamin Peterson <benjamin@python.org> | 2008-07-17 02:21:56 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2008-07-17 02:21:56 (GMT) |
commit | 4cdf572cc54d32b057a7fddfbccd7b161e79e40d (patch) | |
tree | 82ce5c7f6184ed796c13b2c5616d27d49b7b11a6 /Lib/lib2to3/pytree.py | |
parent | f156b0c2b34da88913923711b8ceb8160d29d171 (diff) | |
download | cpython-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.py | 23 |
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): |