mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-130077: Properly match full soft keywords in the parser (#135317)
This commit is contained in:
parent
598aa7cc98
commit
ff2b5f40c2
3 changed files with 11 additions and 1 deletions
|
@ -382,6 +382,13 @@ SyntaxError: invalid syntax
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: invalid syntax
|
SyntaxError: invalid syntax
|
||||||
|
|
||||||
|
# But prefixes of soft keywords should
|
||||||
|
# still raise specialized errors
|
||||||
|
|
||||||
|
>>> (mat x)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: invalid syntax. Perhaps you forgot a comma?
|
||||||
|
|
||||||
From compiler_complex_args():
|
From compiler_complex_args():
|
||||||
|
|
||||||
>>> def f(None=1):
|
>>> def f(None=1):
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Properly raise custom syntax errors when incorrect syntax containing names
|
||||||
|
that are prefixes of soft keywords is encountered. Patch by Pablo Galindo.
|
|
@ -610,7 +610,8 @@ expr_ty _PyPegen_soft_keyword_token(Parser *p) {
|
||||||
Py_ssize_t size;
|
Py_ssize_t size;
|
||||||
PyBytes_AsStringAndSize(t->bytes, &the_token, &size);
|
PyBytes_AsStringAndSize(t->bytes, &the_token, &size);
|
||||||
for (char **keyword = p->soft_keywords; *keyword != NULL; keyword++) {
|
for (char **keyword = p->soft_keywords; *keyword != NULL; keyword++) {
|
||||||
if (strncmp(*keyword, the_token, (size_t)size) == 0) {
|
if (strlen(*keyword) == (size_t)size &&
|
||||||
|
strncmp(*keyword, the_token, (size_t)size) == 0) {
|
||||||
return _PyPegen_name_from_token(p, t);
|
return _PyPegen_name_from_token(p, t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue