[Python-checkins] CVS: python/dist/src/Parser parsetok.c,2.25,2.26
Tim Peters
tim_one@users.sourceforge.net
Sun, 15 Jul 2001 22:37:26 -0700
Update of /cvsroot/python/python/dist/src/Parser
In directory usw-pr-cvs1:/tmp/cvs-serv22251/python/dist/src/Parser
Modified Files:
parsetok.c
Log Message:
Ugly. A pile of new xxxFlags() functions, to communicate to the parser
that 'yield' is a keyword. This doesn't help test_generators at all! I
don't know why not. These things do work now (and didn't before this
patch):
1. "from __future__ import generators" now works in a native shell.
2. Similarly "python -i xxx.py" now has generators enabled in the
shell if xxx.py had them enabled.
3. This program (which was my doctest proxy) works fine:
from __future__ import generators
source = """\
def f():
yield 1
"""
exec compile(source, "", "single") in globals()
print type(f())
Index: parsetok.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Parser/parsetok.c,v
retrieving revision 2.25
retrieving revision 2.26
diff -C2 -r2.25 -r2.26
*** parsetok.c 2000/09/01 23:29:28 2.25
--- parsetok.c 2001/07/16 05:37:24 2.26
***************
*** 14,24 ****
/* Forward */
! static node *parsetok(struct tok_state *, grammar *, int, perrdetail *);
/* Parse input coming from a string. Return error code, print some errors. */
-
node *
PyParser_ParseString(char *s, grammar *g, int start, perrdetail *err_ret)
{
struct tok_state *tok;
--- 14,30 ----
/* Forward */
! 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;
***************
*** 43,47 ****
}
! return parsetok(tok, g, start, err_ret);
}
--- 49,53 ----
}
! return parsetok(tok, g, start, err_ret, flags);
}
***************
*** 53,56 ****
--- 59,70 ----
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;
***************
*** 73,77 ****
! return parsetok(tok, g, start, err_ret);
}
--- 87,91 ----
! return parsetok(tok, g, start, err_ret, flags);
}
***************
*** 80,84 ****
static node *
! parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret)
{
parser_state *ps;
--- 94,99 ----
static node *
! parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
! int flags)
{
parser_state *ps;
***************
*** 91,94 ****
--- 106,111 ----
return NULL;
}
+ if (flags & PyPARSE_YIELD_IS_KEYWORD)
+ ps->p_generators = 1;
for (;;) {