Skip to content

Commit c24ea08

Browse files
committed
Disable the parser hacks that enabled the "yield" keyword using a future
statement.
1 parent 12a6d94 commit c24ea08

File tree

5 files changed

+25
-11
lines changed

5 files changed

+25
-11
lines changed

Include/parsetok.h

+2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ typedef struct {
1717
int expected;
1818
} perrdetail;
1919

20+
#if 0
2021
#define PyPARSE_YIELD_IS_KEYWORD 0x0001
22+
#endif
2123

2224
extern DL_IMPORT(node *) PyParser_ParseString(char *, grammar *, int,
2325
perrdetail *);

Parser/parser.h

+2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ typedef struct {
2525
stack p_stack; /* Stack of parser states */
2626
grammar *p_grammar; /* Grammar to use */
2727
node *p_tree; /* Top of parse tree */
28+
#if 0 /* future keyword */
2829
int p_generators; /* 1 if yield is a keyword */
30+
#endif
2931
} parser_state;
3032

3133
parser_state *PyParser_New(grammar *g, int start);

Parser/parsetok.c

+6
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,10 @@ PyParser_ParseFileFlags(FILE *fp, char *filename, grammar *g, int start,
8383
/* Parse input coming from the given tokenizer structure.
8484
Return error code. */
8585

86+
#if 0 /* future keyword */
8687
static char yield_msg[] =
8788
"%s:%d: Warning: 'yield' will become a reserved keyword in the future\n";
89+
#endif
8890

8991
static node *
9092
parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
@@ -99,8 +101,10 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
99101
err_ret->error = E_NOMEM;
100102
return NULL;
101103
}
104+
#if 0 /* future keyword */
102105
if (flags & PyPARSE_YIELD_IS_KEYWORD)
103106
ps->p_generators = 1;
107+
#endif
104108

105109
for (;;) {
106110
char *a, *b;
@@ -130,13 +134,15 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
130134
strncpy(str, a, len);
131135
str[len] = '\0';
132136

137+
#if 0 /* future keyword */
133138
/* Warn about yield as NAME */
134139
if (type == NAME && !ps->p_generators &&
135140
len == 5 && str[0] == 'y' && strcmp(str, "yield") == 0)
136141
PySys_WriteStderr(yield_msg,
137142
err_ret->filename==NULL ?
138143
"<string>" : err_ret->filename,
139144
tok->lineno);
145+
#endif
140146

141147
if ((err_ret->error =
142148
PyParser_AddToken(ps, (int)type, str, tok->lineno,

Python/ceval.c

+2
Original file line numberDiff line numberDiff line change
@@ -2984,10 +2984,12 @@ PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
29842984
result = 1;
29852985
cf->cf_flags |= compilerflags;
29862986
}
2987+
#if 0 /* future keyword */
29872988
if (codeflags & CO_GENERATOR_ALLOWED) {
29882989
result = 1;
29892990
cf->cf_flags |= CO_GENERATOR_ALLOWED;
29902991
}
2992+
#endif
29912993
}
29922994
return result;
29932995
}

Python/pythonrun.c

+13-11
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,15 @@ PyRun_InteractiveOne(FILE *fp, char *filename)
542542
return PyRun_InteractiveOneFlags(fp, filename, NULL);
543543
}
544544

545+
/* compute parser flags based on compiler flags */
546+
#if 0 /* future keyword */
547+
#define PARSER_FLAGS(flags) \
548+
(((flags) && (flags)->cf_flags & CO_GENERATOR_ALLOWED) ? \
549+
PyPARSE_YIELD_IS_KEYWORD : 0)
550+
#else
551+
#define PARSER_FLAGS(flags) 0
552+
#endif
553+
545554
int
546555
PyRun_InteractiveOneFlags(FILE *fp, char *filename, PyCompilerFlags *flags)
547556
{
@@ -568,9 +577,7 @@ PyRun_InteractiveOneFlags(FILE *fp, char *filename, PyCompilerFlags *flags)
568577
}
569578
n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
570579
Py_single_input, ps1, ps2, &err,
571-
(flags &&
572-
flags->cf_flags & CO_GENERATOR_ALLOWED) ?
573-
PyPARSE_YIELD_IS_KEYWORD : 0);
580+
PARSER_FLAGS(flags));
574581
Py_XDECREF(v);
575582
Py_XDECREF(w);
576583
if (n == NULL) {
@@ -1031,9 +1038,7 @@ PyRun_StringFlags(char *str, int start, PyObject *globals, PyObject *locals,
10311038
PyCompilerFlags *flags)
10321039
{
10331040
return run_err_node(PyParser_SimpleParseStringFlags(
1034-
str, start,
1035-
(flags && flags->cf_flags & CO_GENERATOR_ALLOWED) ?
1036-
PyPARSE_YIELD_IS_KEYWORD : 0),
1041+
str, start, PARSER_FLAGS(flags)),
10371042
"<string>", globals, locals, flags);
10381043
}
10391044

@@ -1050,8 +1055,7 @@ PyRun_FileExFlags(FILE *fp, char *filename, int start, PyObject *globals,
10501055
PyObject *locals, int closeit, PyCompilerFlags *flags)
10511056
{
10521057
node *n = PyParser_SimpleParseFileFlags(fp, filename, start,
1053-
(flags && flags->cf_flags & CO_GENERATOR_ALLOWED) ?
1054-
PyPARSE_YIELD_IS_KEYWORD : 0);
1058+
PARSER_FLAGS(flags));
10551059
if (closeit)
10561060
fclose(fp);
10571061
return run_err_node(n, filename, globals, locals, flags);
@@ -1125,9 +1129,7 @@ Py_CompileStringFlags(char *str, char *filename, int start,
11251129
{
11261130
node *n;
11271131
PyCodeObject *co;
1128-
n = PyParser_SimpleParseStringFlags(str, start,
1129-
(flags && flags->cf_flags & CO_GENERATOR_ALLOWED) ?
1130-
PyPARSE_YIELD_IS_KEYWORD : 0);
1132+
n = PyParser_SimpleParseStringFlags(str, start, PARSER_FLAGS(flags));
11311133
if (n == NULL)
11321134
return NULL;
11331135
co = PyNode_CompileFlags(n, filename, flags);

0 commit comments

Comments
 (0)