summaryrefslogtreecommitdiffstats
path: root/Parser/pegen
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2020-07-06 19:29:59 (GMT)
committerGitHub <noreply@github.com>2020-07-06 19:29:59 (GMT)
commit54f115dd533653c43b3c5541bf5936b22e484474 (patch)
tree9fec888a0615b0de6fe7c25276f432a92ba42a69 /Parser/pegen
parent4981fe36c7477303de830e8dca929a02caaaffe4 (diff)
downloadcpython-54f115dd533653c43b3c5541bf5936b22e484474.zip
cpython-54f115dd533653c43b3c5541bf5936b22e484474.tar.gz
cpython-54f115dd533653c43b3c5541bf5936b22e484474.tar.bz2
[3.9] bpo-41215: Don't use NULL by default in the PEG parser keyword list (GH-21355) (GH-21356)
(cherry picked from commit 39e76c0fb07e20acad454deb86a0457b279884a9) Co-authored-by: Pablo Galindo <pablogsal@gmail.com> Automerge-Triggered-By: @lysnikolaou
Diffstat (limited to 'Parser/pegen')
-rw-r--r--Parser/pegen/parse.c14
-rw-r--r--Parser/pegen/pegen.c7
2 files changed, 12 insertions, 9 deletions
diff --git a/Parser/pegen/parse.c b/Parser/pegen/parse.c
index 9d3ac57..d9dd23c 100644
--- a/Parser/pegen/parse.c
+++ b/Parser/pegen/parse.c
@@ -9,8 +9,8 @@ extern int Py_DebugFlag;
#endif
static const int n_keyword_lists = 15;
static KeywordToken *reserved_keywords[] = {
- NULL,
- NULL,
+ (KeywordToken[]) {{NULL, -1}},
+ (KeywordToken[]) {{NULL, -1}},
(KeywordToken[]) {
{"if", 510},
{"in", 518},
@@ -65,11 +65,11 @@ static KeywordToken *reserved_keywords[] = {
{"nonlocal", 509},
{NULL, -1},
},
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ (KeywordToken[]) {{NULL, -1}},
+ (KeywordToken[]) {{NULL, -1}},
+ (KeywordToken[]) {{NULL, -1}},
+ (KeywordToken[]) {{NULL, -1}},
+ (KeywordToken[]) {{NULL, -1}},
(KeywordToken[]) {
{"__peg_parser__", 531},
{NULL, -1},
diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c
index 895677b..0f33dcb 100644
--- a/Parser/pegen/pegen.c
+++ b/Parser/pegen/pegen.c
@@ -525,10 +525,13 @@ _PyPegen_dummy_name(Parser *p, ...)
static int
_get_keyword_or_name_type(Parser *p, const char *name, int name_len)
{
- if (name_len >= p->n_keyword_lists || p->keywords[name_len] == NULL) {
+ assert(name_len != 0);
+ if (name_len >= p->n_keyword_lists ||
+ p->keywords[name_len] == NULL ||
+ p->keywords[name_len]->type == -1) {
return NAME;
}
- for (KeywordToken *k = p->keywords[name_len]; k->type != -1; k++) {
+ for (KeywordToken *k = p->keywords[name_len]; k != NULL && k->type != -1; k++) {
if (strncmp(k->str, name, name_len) == 0) {
return k->type;
}