Skip to content

Commit

Permalink
[3.9] bpo-41215: Don't use NULL by default in the PEG parser keyword …
Browse files Browse the repository at this point in the history
…list (GH-21355) (GH-21356)

(cherry picked from commit 39e76c0)

Co-authored-by: Pablo Galindo <pablogsal@gmail.com>

Automerge-Triggered-By: @lysnikolaou
  • Loading branch information
pablogsal committed Jul 6, 2020
1 parent 4981fe3 commit 54f115d
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 10 deletions.
@@ -0,0 +1,2 @@
Use non-NULL default values in the PEG parser keyword list to overcome a bug that was preventing
Python from being properly compiled when using the XLC compiler. Patch by Pablo Galindo.
14 changes: 7 additions & 7 deletions Parser/pegen/parse.c
Expand Up @@ -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},
Expand Down Expand Up @@ -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},
Expand Down
7 changes: 5 additions & 2 deletions Parser/pegen/pegen.c
Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion Tools/peg_generator/pegen/c_generator.py
Expand Up @@ -440,7 +440,7 @@ def _setup_keywords(self) -> None:
num_groups = max(groups) + 1 if groups else 1
for keywords_length in range(num_groups):
if keywords_length not in groups.keys():
self.print("NULL,")
self.print("(KeywordToken[]) {{NULL, -1}},")
else:
self.print("(KeywordToken[]) {")
with self.indent():
Expand Down

0 comments on commit 54f115d

Please sign in to comment.