This commit is contained in:
Anthony Scopatz 2015-01-28 01:45:29 -06:00
parent 76cab93b35
commit f96263d4fd
2 changed files with 22 additions and 2 deletions

View file

@ -619,6 +619,16 @@ def test_call_tuple_gen():
def test_call_tuple_genifs():
yield check_ast, 'tuple(x for x in [1, 2, 3] if x < 3)'
def test_call_range_star():
yield check_ast, 'range(*[1, 2, 3])'
def test_call_range_x_star():
yield check_ast, 'range(1, *[2, 3])'
def test_call_int():
yield check_ast, 'int(*["42"], base=8)'

View file

@ -1383,9 +1383,11 @@ class Parser(object):
"""classdef : CLASS NAME func_call_opt COLON suite"""
p[0] = p[1:]
def _set_arg(self, args, arg):
def _set_arg(self, args, arg, ensure_kw=False):
if isinstance(arg, ast.keyword):
args['keywords'].append(arg)
elif ensure_kw:
raise SyntaxError('{0} must be a keyword'.format(arg))
else:
args['args'].append(arg)
@ -1396,8 +1398,8 @@ class Parser(object):
| argument_comma_list_opt TIMES test comma_argument_list_opt COMMA POW test
| argument_comma_list_opt POW test
"""
p1, p2 = p[1], p[2]
lenp = len(p)
p1, p2 = p[1], p[2]
p0 = {'args': [], 'keywords': [], 'starargs': None, 'kwargs': None}
if lenp == 3:
self._set_arg(p0, p1)
@ -1405,6 +1407,14 @@ class Parser(object):
for arg in p1:
self._set_arg(p0, arg)
self._set_arg(p0, p2)
elif lenp == 5:
p0['starargs'], p4 = p[3], p[4]
if p1 is not None:
for arg in p1:
self._set_arg(p0, arg)
if p4 is not None:
for arg in p4:
self._set_arg(p0, arg, ensure_kw=True)
else:
assert False
p[0] = p0