Fix an issue with open parentheses and function definitions right after. The fast parser should behave like the normal one and just ignore the open brackets.

This commit is contained in:
Dave Halter
2015-02-19 11:02:11 +01:00
parent 9d048623dd
commit ce96af5e04
2 changed files with 12 additions and 2 deletions

View File

@@ -382,7 +382,7 @@ class FastParser(use_metaclass(CachedFastParser)):
line_offset, nodes)
last_end_line = self.current_node.parser.module.end_pos[0]
debug.dbg('While parsing %s, line %s slowed down the fast parser',
debug.dbg('While parsing %s, line %s slowed down the fast parser.',
self.module_path, line_offset)
line_offset = next_line_offset
@@ -488,6 +488,16 @@ class FastTokenizer(object):
self._closed = True
return current
if value in ('def', 'class') and self._parentheses_level \
and re.match('\n[ \t]*\Z', prefix):
# Account for the fact that an open parentheses before a function
# will reset the parentheses counter, but new lines before will
# still be ignored. So check the prefix.
# TODO what about flow parentheses counter resets in the tokenizer?
self._parentheses_level = 0
return self._close()
# Parentheses ignore the indentation rules. The other three stand for
# new lines.
if self.previous[0] in (NEWLINE, INDENT, DEDENT) \

View File

@@ -333,7 +333,7 @@ def test_open_parentheses():
cache.save_parser(None, None, p, pickling=False)
# Now with a correct parser it should work perfectly well.
check_fp('isinstance()\n' + func, 1)
check_fp('isinstance()\n' + func, 1, 2)
def test_strange_parentheses():