mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-133379: Fix misuse of the term "arguments" in error messages (GH-133382)
The right term is "parameters".
This commit is contained in:
parent
f28cbc9fd3
commit
dbca27cfca
10 changed files with 72 additions and 68 deletions
|
@ -75,6 +75,9 @@ New features
|
||||||
Other language changes
|
Other language changes
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
* Several error messages incorrectly using the term "argument" have been corrected.
|
||||||
|
(Contributed by Stan Ulbrych in :gh:`133382`.)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
New modules
|
New modules
|
||||||
|
|
|
@ -1305,7 +1305,7 @@ invalid_dict_comprehension:
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "dict unpacking cannot be used in dict comprehension") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "dict unpacking cannot be used in dict comprehension") }
|
||||||
invalid_parameters:
|
invalid_parameters:
|
||||||
| a="/" ',' {
|
| a="/" ',' {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one argument must precede /") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one parameter must precede /") }
|
||||||
| (slash_no_default | slash_with_default) param_maybe_default* a='/' {
|
| (slash_no_default | slash_with_default) param_maybe_default* a='/' {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ may appear only once") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ may appear only once") }
|
||||||
| slash_no_default? param_no_default* invalid_parameters_helper a=param_no_default {
|
| slash_no_default? param_no_default* invalid_parameters_helper a=param_no_default {
|
||||||
|
@ -1319,21 +1319,21 @@ invalid_parameters:
|
||||||
invalid_default:
|
invalid_default:
|
||||||
| a='=' &(')'|',') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expected default value expression") }
|
| a='=' &(')'|',') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expected default value expression") }
|
||||||
invalid_star_etc:
|
invalid_star_etc:
|
||||||
| a='*' (')' | ',' (')' | '**')) { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "named arguments must follow bare *") }
|
| a='*' (')' | ',' (')' | '**')) { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "named parameters must follow bare *") }
|
||||||
| '*' ',' TYPE_COMMENT { RAISE_SYNTAX_ERROR("bare * has associated type comment") }
|
| '*' ',' TYPE_COMMENT { RAISE_SYNTAX_ERROR("bare * has associated type comment") }
|
||||||
| '*' param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-positional argument cannot have default value") }
|
| '*' param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-positional parameter cannot have default value") }
|
||||||
| '*' (param_no_default | ',') param_maybe_default* a='*' (param_no_default | ',') {
|
| '*' (param_no_default | ',') param_maybe_default* a='*' (param_no_default | ',') {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "* argument may appear only once") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "* may appear only once") }
|
||||||
invalid_kwds:
|
invalid_kwds:
|
||||||
| '**' param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-keyword argument cannot have default value") }
|
| '**' param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-keyword parameter cannot have default value") }
|
||||||
| '**' param ',' a=param { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "arguments cannot follow var-keyword argument") }
|
| '**' param ',' a=param { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "parameters cannot follow var-keyword parameter") }
|
||||||
| '**' param ',' a[Token*]=('*'|'**'|'/') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "arguments cannot follow var-keyword argument") }
|
| '**' param ',' a[Token*]=('*'|'**'|'/') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "parameters cannot follow var-keyword parameter") }
|
||||||
invalid_parameters_helper: # This is only there to avoid type errors
|
invalid_parameters_helper: # This is only there to avoid type errors
|
||||||
| a=slash_with_default { _PyPegen_singleton_seq(p, a) }
|
| a=slash_with_default { _PyPegen_singleton_seq(p, a) }
|
||||||
| param_with_default+
|
| param_with_default+
|
||||||
invalid_lambda_parameters:
|
invalid_lambda_parameters:
|
||||||
| a="/" ',' {
|
| a="/" ',' {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one argument must precede /") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one parameter must precede /") }
|
||||||
| (lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* a='/' {
|
| (lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* a='/' {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ may appear only once") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ may appear only once") }
|
||||||
| lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper a=lambda_param_no_default {
|
| lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper a=lambda_param_no_default {
|
||||||
|
@ -1348,14 +1348,14 @@ invalid_lambda_parameters_helper:
|
||||||
| a=lambda_slash_with_default { _PyPegen_singleton_seq(p, a) }
|
| a=lambda_slash_with_default { _PyPegen_singleton_seq(p, a) }
|
||||||
| lambda_param_with_default+
|
| lambda_param_with_default+
|
||||||
invalid_lambda_star_etc:
|
invalid_lambda_star_etc:
|
||||||
| '*' (':' | ',' (':' | '**')) { RAISE_SYNTAX_ERROR("named arguments must follow bare *") }
|
| '*' (':' | ',' (':' | '**')) { RAISE_SYNTAX_ERROR("named parameters must follow bare *") }
|
||||||
| '*' lambda_param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-positional argument cannot have default value") }
|
| '*' lambda_param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-positional parameter cannot have default value") }
|
||||||
| '*' (lambda_param_no_default | ',') lambda_param_maybe_default* a='*' (lambda_param_no_default | ',') {
|
| '*' (lambda_param_no_default | ',') lambda_param_maybe_default* a='*' (lambda_param_no_default | ',') {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "* argument may appear only once") }
|
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "* may appear only once") }
|
||||||
invalid_lambda_kwds:
|
invalid_lambda_kwds:
|
||||||
| '**' lambda_param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-keyword argument cannot have default value") }
|
| '**' lambda_param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-keyword parameter cannot have default value") }
|
||||||
| '**' lambda_param ',' a=lambda_param { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "arguments cannot follow var-keyword argument") }
|
| '**' lambda_param ',' a=lambda_param { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "parameters cannot follow var-keyword parameter") }
|
||||||
| '**' lambda_param ',' a[Token*]=('*'|'**'|'/') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "arguments cannot follow var-keyword argument") }
|
| '**' lambda_param ',' a[Token*]=('*'|'**'|'/') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "parameters cannot follow var-keyword parameter") }
|
||||||
invalid_double_type_comments:
|
invalid_double_type_comments:
|
||||||
| TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT {
|
| TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT {
|
||||||
RAISE_SYNTAX_ERROR("Cannot have two type comments on def") }
|
RAISE_SYNTAX_ERROR("Cannot have two type comments on def") }
|
||||||
|
|
|
@ -322,7 +322,7 @@ class CodeopTests(unittest.TestCase):
|
||||||
dedent("""\
|
dedent("""\
|
||||||
def foo(x,x):
|
def foo(x,x):
|
||||||
pass
|
pass
|
||||||
"""), "duplicate argument 'x' in function definition")
|
"""), "duplicate parameter 'x' in function definition")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,8 @@ class PositionalOnlyTestCase(unittest.TestCase):
|
||||||
check_syntax_error(self, "def f(/): pass")
|
check_syntax_error(self, "def f(/): pass")
|
||||||
check_syntax_error(self, "def f(*, a, /): pass")
|
check_syntax_error(self, "def f(*, a, /): pass")
|
||||||
check_syntax_error(self, "def f(*, /, a): pass")
|
check_syntax_error(self, "def f(*, /, a): pass")
|
||||||
check_syntax_error(self, "def f(a, /, a): pass", "duplicate argument 'a' in function definition")
|
check_syntax_error(self, "def f(a, /, a): pass", "duplicate parameter 'a' in function definition")
|
||||||
check_syntax_error(self, "def f(a, /, *, a): pass", "duplicate argument 'a' in function definition")
|
check_syntax_error(self, "def f(a, /, *, a): pass", "duplicate parameter 'a' in function definition")
|
||||||
check_syntax_error(self, "def f(a, b/2, c): pass")
|
check_syntax_error(self, "def f(a, b/2, c): pass")
|
||||||
check_syntax_error(self, "def f(a, /, c, /): pass")
|
check_syntax_error(self, "def f(a, /, c, /): pass")
|
||||||
check_syntax_error(self, "def f(a, /, c, /, d): pass")
|
check_syntax_error(self, "def f(a, /, c, /, d): pass")
|
||||||
|
@ -59,8 +59,8 @@ class PositionalOnlyTestCase(unittest.TestCase):
|
||||||
check_syntax_error(self, "async def f(/): pass")
|
check_syntax_error(self, "async def f(/): pass")
|
||||||
check_syntax_error(self, "async def f(*, a, /): pass")
|
check_syntax_error(self, "async def f(*, a, /): pass")
|
||||||
check_syntax_error(self, "async def f(*, /, a): pass")
|
check_syntax_error(self, "async def f(*, /, a): pass")
|
||||||
check_syntax_error(self, "async def f(a, /, a): pass", "duplicate argument 'a' in function definition")
|
check_syntax_error(self, "async def f(a, /, a): pass", "duplicate parameter 'a' in function definition")
|
||||||
check_syntax_error(self, "async def f(a, /, *, a): pass", "duplicate argument 'a' in function definition")
|
check_syntax_error(self, "async def f(a, /, *, a): pass", "duplicate parameter 'a' in function definition")
|
||||||
check_syntax_error(self, "async def f(a, b/2, c): pass")
|
check_syntax_error(self, "async def f(a, b/2, c): pass")
|
||||||
check_syntax_error(self, "async def f(a, /, c, /): pass")
|
check_syntax_error(self, "async def f(a, /, c, /): pass")
|
||||||
check_syntax_error(self, "async def f(a, /, c, /, d): pass")
|
check_syntax_error(self, "async def f(a, /, c, /, d): pass")
|
||||||
|
@ -247,8 +247,8 @@ class PositionalOnlyTestCase(unittest.TestCase):
|
||||||
check_syntax_error(self, "lambda /: None")
|
check_syntax_error(self, "lambda /: None")
|
||||||
check_syntax_error(self, "lambda *, a, /: None")
|
check_syntax_error(self, "lambda *, a, /: None")
|
||||||
check_syntax_error(self, "lambda *, /, a: None")
|
check_syntax_error(self, "lambda *, /, a: None")
|
||||||
check_syntax_error(self, "lambda a, /, a: None", "duplicate argument 'a' in function definition")
|
check_syntax_error(self, "lambda a, /, a: None", "duplicate parameter 'a' in function definition")
|
||||||
check_syntax_error(self, "lambda a, /, *, a: None", "duplicate argument 'a' in function definition")
|
check_syntax_error(self, "lambda a, /, *, a: None", "duplicate parameter 'a' in function definition")
|
||||||
check_syntax_error(self, "lambda a, /, b, /: None")
|
check_syntax_error(self, "lambda a, /, b, /: None")
|
||||||
check_syntax_error(self, "lambda a, /, b, /, c: None")
|
check_syntax_error(self, "lambda a, /, b, /, c: None")
|
||||||
check_syntax_error(self, "lambda a, /, b, /, c, *, d: None")
|
check_syntax_error(self, "lambda a, /, b, /, c, *, d: None")
|
||||||
|
|
|
@ -113,7 +113,7 @@ class TestSimpleInteract(unittest.TestCase):
|
||||||
r = """
|
r = """
|
||||||
def f(x, x): ...
|
def f(x, x): ...
|
||||||
^
|
^
|
||||||
SyntaxError: duplicate argument 'x' in function definition"""
|
SyntaxError: duplicate parameter 'x' in function definition"""
|
||||||
self.assertIn(r, f.getvalue())
|
self.assertIn(r, f.getvalue())
|
||||||
|
|
||||||
def test_runsource_shows_syntax_error_for_failed_compilation(self):
|
def test_runsource_shows_syntax_error_for_failed_compilation(self):
|
||||||
|
|
|
@ -197,7 +197,7 @@ class TestInteractiveInterpreter(unittest.TestCase):
|
||||||
expected_lines = [
|
expected_lines = [
|
||||||
' def f(x, x): ...',
|
' def f(x, x): ...',
|
||||||
' ^',
|
' ^',
|
||||||
"SyntaxError: duplicate argument 'x' in function definition"
|
"SyntaxError: duplicate parameter 'x' in function definition"
|
||||||
]
|
]
|
||||||
self.assertEqual(output.splitlines()[4:-1], expected_lines)
|
self.assertEqual(output.splitlines()[4:-1], expected_lines)
|
||||||
|
|
||||||
|
|
|
@ -419,7 +419,7 @@ SyntaxError: invalid syntax
|
||||||
>>> def foo(/,a,b=,c):
|
>>> def foo(/,a,b=,c):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: at least one argument must precede /
|
SyntaxError: at least one parameter must precede /
|
||||||
|
|
||||||
>>> def foo(a,/,/,b,c):
|
>>> def foo(a,/,/,b,c):
|
||||||
... pass
|
... pass
|
||||||
|
@ -454,67 +454,67 @@ SyntaxError: / must be ahead of *
|
||||||
>>> def foo(a,*b=3,c):
|
>>> def foo(a,*b=3,c):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: var-positional argument cannot have default value
|
SyntaxError: var-positional parameter cannot have default value
|
||||||
|
|
||||||
>>> def foo(a,*b: int=,c):
|
>>> def foo(a,*b: int=,c):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: var-positional argument cannot have default value
|
SyntaxError: var-positional parameter cannot have default value
|
||||||
|
|
||||||
>>> def foo(a,**b=3):
|
>>> def foo(a,**b=3):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: var-keyword argument cannot have default value
|
SyntaxError: var-keyword parameter cannot have default value
|
||||||
|
|
||||||
>>> def foo(a,**b: int=3):
|
>>> def foo(a,**b: int=3):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: var-keyword argument cannot have default value
|
SyntaxError: var-keyword parameter cannot have default value
|
||||||
|
|
||||||
>>> def foo(a,*a, b, **c, d):
|
>>> def foo(a,*a, b, **c, d):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> def foo(a,*a, b, **c, d=4):
|
>>> def foo(a,*a, b, **c, d=4):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> def foo(a,*a, b, **c, *d):
|
>>> def foo(a,*a, b, **c, *d):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> def foo(a,*a, b, **c, **d):
|
>>> def foo(a,*a, b, **c, **d):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> def foo(a=1,/,**b,/,c):
|
>>> def foo(a=1,/,**b,/,c):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> def foo(*b,*d):
|
>>> def foo(*b,*d):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: * argument may appear only once
|
SyntaxError: * may appear only once
|
||||||
|
|
||||||
>>> def foo(a,*b,c,*d,*e,c):
|
>>> def foo(a,*b,c,*d,*e,c):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: * argument may appear only once
|
SyntaxError: * may appear only once
|
||||||
|
|
||||||
>>> def foo(a,b,/,c,*b,c,*d,*e,c):
|
>>> def foo(a,b,/,c,*b,c,*d,*e,c):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: * argument may appear only once
|
SyntaxError: * may appear only once
|
||||||
|
|
||||||
>>> def foo(a,b,/,c,*b,c,*d,**e):
|
>>> def foo(a,b,/,c,*b,c,*d,**e):
|
||||||
... pass
|
... pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: * argument may appear only once
|
SyntaxError: * may appear only once
|
||||||
|
|
||||||
>>> def foo(a=1,/*,b,c):
|
>>> def foo(a=1,/*,b,c):
|
||||||
... pass
|
... pass
|
||||||
|
@ -538,7 +538,7 @@ SyntaxError: expected default value expression
|
||||||
|
|
||||||
>>> lambda /,a,b,c: None
|
>>> lambda /,a,b,c: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: at least one argument must precede /
|
SyntaxError: at least one parameter must precede /
|
||||||
|
|
||||||
>>> lambda a,/,/,b,c: None
|
>>> lambda a,/,/,b,c: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
|
@ -570,47 +570,47 @@ SyntaxError: expected comma between / and *
|
||||||
|
|
||||||
>>> lambda a,*b=3,c: None
|
>>> lambda a,*b=3,c: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: var-positional argument cannot have default value
|
SyntaxError: var-positional parameter cannot have default value
|
||||||
|
|
||||||
>>> lambda a,**b=3: None
|
>>> lambda a,**b=3: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: var-keyword argument cannot have default value
|
SyntaxError: var-keyword parameter cannot have default value
|
||||||
|
|
||||||
>>> lambda a, *a, b, **c, d: None
|
>>> lambda a, *a, b, **c, d: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> lambda a,*a, b, **c, d=4: None
|
>>> lambda a,*a, b, **c, d=4: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> lambda a,*a, b, **c, *d: None
|
>>> lambda a,*a, b, **c, *d: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> lambda a,*a, b, **c, **d: None
|
>>> lambda a,*a, b, **c, **d: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> lambda a=1,/,**b,/,c: None
|
>>> lambda a=1,/,**b,/,c: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: arguments cannot follow var-keyword argument
|
SyntaxError: parameters cannot follow var-keyword parameter
|
||||||
|
|
||||||
>>> lambda *b,*d: None
|
>>> lambda *b,*d: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: * argument may appear only once
|
SyntaxError: * may appear only once
|
||||||
|
|
||||||
>>> lambda a,*b,c,*d,*e,c: None
|
>>> lambda a,*b,c,*d,*e,c: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: * argument may appear only once
|
SyntaxError: * may appear only once
|
||||||
|
|
||||||
>>> lambda a,b,/,c,*b,c,*d,*e,c: None
|
>>> lambda a,b,/,c,*b,c,*d,*e,c: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: * argument may appear only once
|
SyntaxError: * may appear only once
|
||||||
|
|
||||||
>>> lambda a,b,/,c,*b,c,*d,**e: None
|
>>> lambda a,b,/,c,*b,c,*d,**e: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: * argument may appear only once
|
SyntaxError: * may appear only once
|
||||||
|
|
||||||
>>> lambda a=1,d=,c: None
|
>>> lambda a=1,d=,c: None
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
|
@ -1304,7 +1304,7 @@ Missing parens after function definition
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: expected '('
|
SyntaxError: expected '('
|
||||||
|
|
||||||
Parenthesized arguments in function definitions
|
Parenthesized parameters in function definitions
|
||||||
|
|
||||||
>>> def f(x, (y, z), w):
|
>>> def f(x, (y, z), w):
|
||||||
... pass
|
... pass
|
||||||
|
@ -2178,7 +2178,7 @@ Corner-cases that used to fail to raise the correct error:
|
||||||
|
|
||||||
>>> with (lambda *:0): pass
|
>>> with (lambda *:0): pass
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: named arguments must follow bare *
|
SyntaxError: named parameters must follow bare *
|
||||||
|
|
||||||
Corner-cases that used to crash:
|
Corner-cases that used to crash:
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Correct usage of *arguments* in error messages.
|
28
Parser/parser.c
generated
28
Parser/parser.c
generated
|
@ -22190,7 +22190,7 @@ invalid_parameters_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
|
D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "at least one argument must precede /" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "at least one parameter must precede /" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -22456,7 +22456,7 @@ invalid_star_etc_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
|
D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "named arguments must follow bare *" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "named parameters must follow bare *" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -22516,7 +22516,7 @@ invalid_star_etc_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param '='"));
|
D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param '='"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-positional argument cannot have default value" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-positional parameter cannot have default value" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -22552,7 +22552,7 @@ invalid_star_etc_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')"));
|
D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "* argument may appear only once" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "* may appear only once" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -22601,7 +22601,7 @@ invalid_kwds_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param '='"));
|
D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param '='"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-keyword argument cannot have default value" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-keyword parameter cannot have default value" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -22634,7 +22634,7 @@ invalid_kwds_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' param"));
|
D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' param"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "arguments cannot follow var-keyword argument" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -22667,7 +22667,7 @@ invalid_kwds_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')"));
|
D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "arguments cannot follow var-keyword argument" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -22781,7 +22781,7 @@ invalid_lambda_parameters_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
|
D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "at least one argument must precede /" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "at least one parameter must precede /" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -23065,7 +23065,7 @@ invalid_lambda_star_etc_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
|
D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
|
||||||
_res = RAISE_SYNTAX_ERROR ( "named arguments must follow bare *" );
|
_res = RAISE_SYNTAX_ERROR ( "named parameters must follow bare *" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -23095,7 +23095,7 @@ invalid_lambda_star_etc_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param '='"));
|
D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param '='"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-positional argument cannot have default value" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-positional parameter cannot have default value" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -23131,7 +23131,7 @@ invalid_lambda_star_etc_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')"));
|
D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "* argument may appear only once" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "* may appear only once" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -23183,7 +23183,7 @@ invalid_lambda_kwds_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param '='"));
|
D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param '='"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-keyword argument cannot have default value" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-keyword parameter cannot have default value" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -23216,7 +23216,7 @@ invalid_lambda_kwds_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' lambda_param"));
|
D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' lambda_param"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "arguments cannot follow var-keyword argument" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
@ -23249,7 +23249,7 @@ invalid_lambda_kwds_rule(Parser *p)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')"));
|
D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')"));
|
||||||
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "arguments cannot follow var-keyword argument" );
|
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
|
||||||
if (_res == NULL && PyErr_Occurred()) {
|
if (_res == NULL && PyErr_Occurred()) {
|
||||||
p->error_indicator = 1;
|
p->error_indicator = 1;
|
||||||
p->level--;
|
p->level--;
|
||||||
|
|
|
@ -380,8 +380,8 @@ static void dump_symtable(PySTEntryObject* ste)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DUPLICATE_ARGUMENT \
|
#define DUPLICATE_PARAMETER \
|
||||||
"duplicate argument '%U' in function definition"
|
"duplicate parameter '%U' in function definition"
|
||||||
|
|
||||||
static struct symtable *
|
static struct symtable *
|
||||||
symtable_new(void)
|
symtable_new(void)
|
||||||
|
@ -1494,7 +1494,7 @@ symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _s
|
||||||
}
|
}
|
||||||
if ((flag & DEF_PARAM) && (val & DEF_PARAM)) {
|
if ((flag & DEF_PARAM) && (val & DEF_PARAM)) {
|
||||||
/* Is it better to use 'mangled' or 'name' here? */
|
/* Is it better to use 'mangled' or 'name' here? */
|
||||||
PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT, name);
|
PyErr_Format(PyExc_SyntaxError, DUPLICATE_PARAMETER, name);
|
||||||
SET_ERROR_LOCATION(st->st_filename, loc);
|
SET_ERROR_LOCATION(st->st_filename, loc);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue