Issue 24226: Fix parsing of many sequential one-line 'def' statements.

This commit is contained in:
Yury Selivanov 2015-05-18 12:50:52 -04:00
parent a2c145c2f3
commit 8085b80c18
3 changed files with 51 additions and 8 deletions

View file

@ -1,4 +1,5 @@
import contextlib
import inspect
import sys
import types
import unittest
@ -87,6 +88,28 @@ class AsyncBadSyntaxTest(unittest.TestCase):
import test.badsyntax_async9
class TokenizerRegrTest(unittest.TestCase):
def test_oneline_defs(self):
buf = []
for i in range(500):
buf.append('def i{i}(): return {i}'.format(i=i))
buf = '\n'.join(buf)
# Test that 500 consequent, one-line defs is OK
ns = {}
exec(buf, ns, ns)
self.assertEqual(ns['i499'](), 499)
# Test that 500 consequent, one-line defs *and*
# one 'async def' following them is OK
buf += '\nasync def foo():\n return'
ns = {}
exec(buf, ns, ns)
self.assertEqual(ns['i499'](), 499)
self.assertTrue(inspect.iscoroutinefunction(ns['foo']))
class CoroutineTest(unittest.TestCase):
def test_gen_1(self):