bpo-41215: Don't use NULL by default in the PEG parser keyword list (GH-21355)

Automerge-Triggered-By: @lysnikolaou
This commit is contained in:
Pablo Galindo 2020-07-06 20:31:16 +01:00 committed by GitHub
parent dcbaa1b49c
commit 1ac0cbca36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 5 deletions

View File

@ -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.

View File

@ -9,8 +9,8 @@ extern int Py_DebugFlag;
#endif #endif
static const int n_keyword_lists = 9; static const int n_keyword_lists = 9;
static KeywordToken *reserved_keywords[] = { static KeywordToken *reserved_keywords[] = {
NULL, (KeywordToken[]) {{NULL, -1}},
NULL, (KeywordToken[]) {{NULL, -1}},
(KeywordToken[]) { (KeywordToken[]) {
{"if", 510}, {"if", 510},
{"in", 518}, {"in", 518},

View File

@ -525,10 +525,13 @@ _PyPegen_dummy_name(Parser *p, ...)
static int static int
_get_keyword_or_name_type(Parser *p, const char *name, int name_len) _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; 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) { if (strncmp(k->str, name, name_len) == 0) {
return k->type; return k->type;
} }

View File

@ -440,7 +440,7 @@ class CParserGenerator(ParserGenerator, GrammarVisitor):
num_groups = max(groups) + 1 if groups else 1 num_groups = max(groups) + 1 if groups else 1
for keywords_length in range(num_groups): for keywords_length in range(num_groups):
if keywords_length not in groups.keys(): if keywords_length not in groups.keys():
self.print("NULL,") self.print("(KeywordToken[]) {{NULL, -1}},")
else: else:
self.print("(KeywordToken[]) {") self.print("(KeywordToken[]) {")
with self.indent(): with self.indent():