summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
Diffstat (limited to 'Parser')
-rw-r--r--Parser/parsetok.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index b68fbd7..6017e5f 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -13,13 +13,19 @@ int Py_TabcheckFlag;
/* Forward */
-static node *parsetok(struct tok_state *, grammar *, int, perrdetail *);
+static node *parsetok(struct tok_state *, grammar *, int, perrdetail *, int);
/* Parse input coming from a string. Return error code, print some errors. */
-
node *
PyParser_ParseString(char *s, grammar *g, int start, perrdetail *err_ret)
{
+ return PyParser_ParseStringFlags(s, g, start, err_ret, 0);
+}
+
+node *
+PyParser_ParseStringFlags(char *s, grammar *g, int start,
+ perrdetail *err_ret, int flags)
+{
struct tok_state *tok;
err_ret->error = E_OK;
@@ -42,7 +48,7 @@ PyParser_ParseString(char *s, grammar *g, int start, perrdetail *err_ret)
tok->alterror++;
}
- return parsetok(tok, g, start, err_ret);
+ return parsetok(tok, g, start, err_ret, flags);
}
@@ -52,6 +58,14 @@ node *
PyParser_ParseFile(FILE *fp, char *filename, grammar *g, int start,
char *ps1, char *ps2, perrdetail *err_ret)
{
+ return PyParser_ParseFileFlags(fp, filename, g, start, ps1, ps2,
+ err_ret, 0);
+}
+
+node *
+PyParser_ParseFileFlags(FILE *fp, char *filename, grammar *g, int start,
+ char *ps1, char *ps2, perrdetail *err_ret, int flags)
+{
struct tok_state *tok;
err_ret->error = E_OK;
@@ -72,14 +86,15 @@ PyParser_ParseFile(FILE *fp, char *filename, grammar *g, int start,
}
- return parsetok(tok, g, start, err_ret);
+ return parsetok(tok, g, start, err_ret, flags);
}
/* Parse input coming from the given tokenizer structure.
Return error code. */
static node *
-parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret)
+parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
+ int flags)
{
parser_state *ps;
node *n;
@@ -90,6 +105,8 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret)
err_ret->error = E_NOMEM;
return NULL;
}
+ if (flags & PyPARSE_YIELD_IS_KEYWORD)
+ ps->p_generators = 1;
for (;;) {
char *a, *b;