gh-130077: Properly match full soft keywords in the parser (#135317)
This commit is contained in:
parent
598aa7cc98
commit
ff2b5f40c2
@ -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…
x
Reference in New Issue
Block a user