Skip to content

Commit d395b0c

Browse files
author
Guido van Rossum
committed
Avoid recursion in lex_indent() on long comments. Fix #1280.
1 parent 5f4995e commit d395b0c

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

mypy/lex.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -688,15 +688,16 @@ def lex_space(self) -> None:
688688
def lex_indent(self) -> None:
689689
"""Analyze whitespace chars at the beginning of a line (indents)."""
690690
s = self.match(self.indent_exp)
691-
if s != '' and s[-1] in self.comment_or_newline:
691+
while True:
692+
s = self.match(self.indent_exp)
693+
if s == '' or s[-1] not in self.comment_or_newline:
694+
break
692695
# Empty line (whitespace only or comment only).
693696
self.add_pre_whitespace(s[:-1])
694697
if s[-1] == '#':
695698
self.lex_comment()
696699
else:
697700
self.lex_break()
698-
self.lex_indent()
699-
return
700701
indent = self.calc_indent(s)
701702
if indent == self.indents[-1]:
702703
# No change in indent: just whitespace.

mypy/test/testlex.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,10 @@ def test_byte_order_mark(self):
426426
self.assert_lex('\ufeff"\xbb"'.encode('utf8'),
427427
'Bom(\ufeff) StrLit("\xbb") Break() Eof()')
428428

429+
def test_long_comment(self):
430+
prog = '# pass\n' * 1000
431+
self.assert_lex(prog, 'Eof(%s)' % repr(prog)[1:-1])
432+
429433
# TODO
430434
# invalid escape sequences in string literals etc.
431435

0 commit comments

Comments
 (0)