8000 bpo-41215: Don't use NULL by default in the PEG parser keyword list (… · python/cpython@1ac0cbc · GitHub
[go: up one dir, main page]

Skip to content

Commit 1ac0cbc

Browse files
authored
bpo-41215: Don't use NULL by default in the PEG parser keyword list (GH-21355)
Automerge-Triggered-By: @lysnikolaou
1 parent dcbaa1b commit 1ac0cbc

File tree

4 files changed

+10
-5
lines changed

4 files changed

+10
-5
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Use non-NULL default values in the PEG parser keyword list to overcome a bug that was preventing
2+
Python from being properly compiled when using the XLC compiler. Patch by Pablo Galindo.

Parser/parser.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ extern int Py_DebugFlag;
99
#endif
1010
static const int n_keyword_lists = 9;
1111
static KeywordToken *reserved_keywords[] = {
12-
NULL,
13-
NULL,
12+
(KeywordToken[]) {{NULL, -1}},
13+
(KeywordToken[]) {{NULL, -1}},
1414
(KeywordToken[]) {
1515
{"if", 510},
1616
{"in", 518},

Parser/pegen.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,10 +525,13 @@ _PyPegen_dummy_name(Parser *p, ...)
525525
static int
526526
_get_keyword_or_name_type(Parser *p, const char *name, int name_len)
527527
{
528-
if (name_len >= p->n_keyword_lists || p->keywords[name_len] == NULL) {
528+
assert(name_len != 0);
529+
if (name_len >= p->n_keyword_lists ||
530+
p->keywords[name_len] == NULL ||
531+
p->keywords[name_len]->type == -1) {
529532
return NAME;
530533
}
531-
for (KeywordToken *k = p->keywords[name_len]; k->type != -1; k++) {
534+
for (KeywordToken *k = p->keywords[name_len]; k != NULL && k->type != -1; k++) {
532535
if (strncmp(k->str, name, name_len) == 0) {
533536
return k->type;
534537
}

Tools/peg_generator/pegen/c_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ def _setup_keywords(self) -> None:
440440
num_groups = max(groups) + 1 if groups else 1
441441
for keywords_length in range(num_groups):
442442
if keywords_length not in groups.keys():
443-
self.print("NULL,")
443+
self.print("(KeywordToken[]) {{NULL, -1}},")
444444
else:
445445
self.print("(KeywordToken[]) {")
446446
with self.indent():

0 commit comments

Comments
 (0)
0