summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
authorCarl Friedrich Bolz-Tereick <cfbolz@gmx.de>2021-11-09 14:03:32 (GMT)
committerGitHub <noreply@github.com>2021-11-09 14:03:32 (GMT)
commit2819e98d1048238bf94dc2ba88ae2455d01861bc (patch)
tree3c6e0d26fd6dd869a17ac148299b824531c48174 /Parser
parentf4c03484da59049eb62a9bf7777b963e2267d187 (diff)
downloadcpython-2819e98d1048238bf94dc2ba88ae2455d01861bc.zip
cpython-2819e98d1048238bf94dc2ba88ae2455d01861bc.tar.gz
cpython-2819e98d1048238bf94dc2ba88ae2455d01861bc.tar.bz2
bpo-45764: improve error message when missing '(' after 'def' (GH-29484)
to achieve this, change the grammar to expect the '(' token after 'def' NAME. Automerge-Triggered-By: GH:pablogsal
Diffstat (limited to 'Parser')
-rw-r--r--Parser/parser.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/Parser/parser.c b/Parser/parser.c
index 8ef7980..b508c1d 100644
--- a/Parser/parser.c
+++ b/Parser/parser.c
@@ -4157,8 +4157,8 @@ function_def_rule(Parser *p)
// function_def_raw:
// | invalid_def_raw
-// | 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block
-// | ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block
+// | 'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block
+// | ASYNC 'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block
static stmt_ty
function_def_raw_rule(Parser *p)
{
@@ -4197,12 +4197,12 @@ function_def_raw_rule(Parser *p)
D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_def_raw"));
}
- { // 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block
+ { // 'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block
if (p->error_indicator) {
D(p->level--);
return NULL;
}
- D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
+ D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
Token * _keyword;
Token * _literal;
Token * _literal_1;
@@ -4217,7 +4217,7 @@ function_def_raw_rule(Parser *p)
&&
(n = _PyPegen_name_token(p)) // NAME
&&
- (_literal = _PyPegen_expect_token(p, 7)) // token='('
+ (_literal = _PyPegen_expect_forced_token(p, 7, "(")) // forced_token='('
&&
(params = params_rule(p), !p->error_indicator) // params?
&&
@@ -4232,7 +4232,7 @@ function_def_raw_rule(Parser *p)
(b = block_rule(p)) // block
)
{
- D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
+ D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
if (_token == NULL) {
D(p->level--);
@@ -4252,14 +4252,14 @@ function_def_raw_rule(Parser *p)
}
p->mark = _mark;
D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
- p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
+ p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
}
- { // ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block
+ { // ASYNC 'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block
if (p->error_indicator) {
D(p->level--);
return NULL;
}
- D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
+ D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
Token * _keyword;
Token * _literal;
Token * _literal_1;
@@ -4277,7 +4277,7 @@ function_def_raw_rule(Parser *p)
&&
(n = _PyPegen_name_token(p)) // NAME
&&
- (_literal = _PyPegen_expect_token(p, 7)) // token='('
+ (_literal = _PyPegen_expect_forced_token(p, 7, "(")) // forced_token='('
&&
(params = params_rule(p), !p->error_indicator) // params?
&&
@@ -4292,7 +4292,7 @@ function_def_raw_rule(Parser *p)
(b = block_rule(p)) // block
)
{
- D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
+ D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
if (_token == NULL) {
D(p->level--);
@@ -4312,7 +4312,7 @@ function_def_raw_rule(Parser *p)
}
p->mark = _mark;
D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
- p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
+ p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'def' NAME &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
}
_res = NULL;
done: