summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
authorLysandros Nikolaou <lisandrosnik@gmail.com>2020-05-18 19:14:47 (GMT)
committerGitHub <noreply@github.com>2020-05-18 19:14:47 (GMT)
commit75b863aa97016c6813709eb620c43295f84dd51f (patch)
tree42e29d58a8f325cbbd43bb910837ae1cb8ca0666 /Parser
parentd71a6492dbd5434dfa6a0ad95e3ad98aa690887a (diff)
downloadcpython-75b863aa97016c6813709eb620c43295f84dd51f.zip
cpython-75b863aa97016c6813709eb620c43295f84dd51f.tar.gz
cpython-75b863aa97016c6813709eb620c43295f84dd51f.tar.bz2
bpo-40334: Reproduce error message for type comments on bare '*' in the new parser (GH-20151)
Diffstat (limited to 'Parser')
-rw-r--r--Parser/pegen/parse.c23
-rw-r--r--Parser/pegen/pegen.c40
-rw-r--r--Parser/pegen/pegen.h4
3 files changed, 44 insertions, 23 deletions
diff --git a/Parser/pegen/parse.c b/Parser/pegen/parse.c
index e9c2032..fe95d27 100644
--- a/Parser/pegen/parse.c
+++ b/Parser/pegen/parse.c
@@ -12041,7 +12041,7 @@ invalid_parameters_rule(Parser *p)
return _res;
}
-// invalid_star_etc: '*' (')' | ',' (')' | '**'))
+// invalid_star_etc: '*' (')' | ',' (')' | '**')) | '*' ',' TYPE_COMMENT
static void *
invalid_star_etc_rule(Parser *p)
{
@@ -12071,6 +12071,27 @@ invalid_star_etc_rule(Parser *p)
}
p->mark = _mark;
}
+ { // '*' ',' TYPE_COMMENT
+ Token * _literal;
+ Token * _literal_1;
+ Token * type_comment_var;
+ if (
+ (_literal = _PyPegen_expect_token(p, 16)) // token='*'
+ &&
+ (_literal_1 = _PyPegen_expect_token(p, 12)) // token=','
+ &&
+ (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT)) // token='TYPE_COMMENT'
+ )
+ {
+ _res = RAISE_SYNTAX_ERROR ( "bare * has associated type comment" );
+ if (_res == NULL && PyErr_Occurred()) {
+ p->error_indicator = 1;
+ return NULL;
+ }
+ goto done;
+ }
+ p->mark = _mark;
+ }
_res = NULL;
done:
return _res;
diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c
index 7f3e456..ca4ea82 100644
--- a/Parser/pegen/pegen.c
+++ b/Parser/pegen/pegen.c
@@ -431,25 +431,6 @@ error:
return NULL;
}
-void *_PyPegen_arguments_parsing_error(Parser *p, expr_ty e) {
- int kwarg_unpacking = 0;
- for (Py_ssize_t i = 0, l = asdl_seq_LEN(e->v.Call.keywords); i < l; i++) {
- keyword_ty keyword = asdl_seq_GET(e->v.Call.keywords, i);
- if (!keyword->arg) {
- kwarg_unpacking = 1;
- }
- }
-
- const char *msg = NULL;
- if (kwarg_unpacking) {
- msg = "positional argument follows keyword argument unpacking";
- } else {
- msg = "positional argument follows keyword argument";
- }
-
- return RAISE_SYNTAX_ERROR(msg);
-}
-
#if 0
static const char *
token_name(int type)
@@ -2099,4 +2080,23 @@ _PyPegen_get_invalid_target(expr_ty e)
default:
return e;
}
-} \ No newline at end of file
+}
+
+void *_PyPegen_arguments_parsing_error(Parser *p, expr_ty e) {
+ int kwarg_unpacking = 0;
+ for (Py_ssize_t i = 0, l = asdl_seq_LEN(e->v.Call.keywords); i < l; i++) {
+ keyword_ty keyword = asdl_seq_GET(e->v.Call.keywords, i);
+ if (!keyword->arg) {
+ kwarg_unpacking = 1;
+ }
+ }
+
+ const char *msg = NULL;
+ if (kwarg_unpacking) {
+ msg = "positional argument follows keyword argument unpacking";
+ } else {
+ msg = "positional argument follows keyword argument";
+ }
+
+ return RAISE_SYNTAX_ERROR(msg);
+}
diff --git a/Parser/pegen/pegen.h b/Parser/pegen/pegen.h
index b9d4c04..146804a 100644
--- a/Parser/pegen/pegen.h
+++ b/Parser/pegen/pegen.h
@@ -256,13 +256,13 @@ asdl_seq *_PyPegen_seq_extract_starred_exprs(Parser *, asdl_seq *);
asdl_seq *_PyPegen_seq_delete_starred_exprs(Parser *, asdl_seq *);
expr_ty _PyPegen_concatenate_strings(Parser *p, asdl_seq *);
asdl_seq *_PyPegen_join_sequences(Parser *, asdl_seq *, asdl_seq *);
-void *_PyPegen_arguments_parsing_error(Parser *, expr_ty);
int _PyPegen_check_barry_as_flufl(Parser *);
mod_ty _PyPegen_make_module(Parser *, asdl_seq *);
// Error reporting helpers
-
expr_ty _PyPegen_get_invalid_target(expr_ty e);
+void *_PyPegen_arguments_parsing_error(Parser *, expr_ty);
+
void *_PyPegen_parse(Parser *);