[Python-checkins] CVS: python/dist/src/Parser parser.c,2.18,2.18.8.1 parser.h,2.14,2.14.8.1 parsetok.c,2.25,2.25.8.1
Tim Peters
tim_one@users.sourceforge.net
Mon, 16 Jul 2001 14:41:09 -0700
- Previous message: [Python-checkins] CVS: python/dist/src/Lib/test test_sgmllib.py,NONE,1.1.2.1 test_generators.py,1.17.2.4,1.17.2.5 test_htmlparser.py,1.1.4.1,1.1.4.2 test_support.py,1.21.4.1,1.21.4.2
- Next message: [Python-checkins] CVS: python/dist/src/Python pythonmain.c,NONE,2.30.2.1 bltinmodule.c,2.198.2.8,2.198.2.9 ceval.c,2.241.2.8,2.241.2.9 compile.c,2.197.2.1,2.197.2.2 future.c,2.5,2.5.6.1 pythonrun.c,2.133.4.4,2.133.4.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/dist/src/Parser
In directory usw-pr-cvs1:/tmp/cvs-serv12044/descr/dist/src/Parser
Modified Files:
Tag: descr-branch
parser.c parser.h parsetok.c
Log Message:
Resuming interrupted merge checkin.
Index: parser.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Parser/parser.c,v
retrieving revision 2.18
retrieving revision 2.18.8.1
diff -C2 -r2.18 -r2.18.8.1
*** parser.c 2000/10/02 10:21:59 2.18
--- parser.c 2001/07/16 21:41:07 2.18.8.1
***************
*** 80,83 ****
--- 80,84 ----
return NULL;
ps->p_grammar = g;
+ ps->p_generators = 0;
ps->p_tree = PyNode_New(start);
if (ps->p_tree == NULL) {
***************
*** 132,137 ****
static int
! classify(grammar *g, int type, char *str)
{
register int n = g->g_ll.ll_nlabels;
--- 133,139 ----
static int
! classify(parser_state *ps, int type, char *str)
{
+ grammar *g = ps->p_grammar;
register int n = g->g_ll.ll_nlabels;
***************
*** 144,147 ****
--- 146,153 ----
l->lb_str[0] == s[0] &&
strcmp(l->lb_str, s) == 0) {
+ if (!ps->p_generators &&
+ s[0] == 'y' &&
+ strcmp(s, "yield") == 0)
+ break; /* not a keyword */
D(printf("It's a keyword\n"));
return n - i;
***************
*** 165,168 ****
--- 171,190 ----
}
+ static void
+ future_hack(parser_state *ps)
+ {
+ node *n = ps->p_stack.s_top->s_parent;
+ node *ch;
+
+ if (strcmp(STR(CHILD(n, 0)), "from") != 0)
+ return;
+ ch = CHILD(n, 1);
+ if (strcmp(STR(CHILD(ch, 0)), "__future__") != 0)
+ return;
+ ch = CHILD(n, 3);
+ if (NCH(ch) == 1 && strcmp(STR(CHILD(ch, 0)), "generators") == 0)
+ ps->p_generators = 1;
+ }
+
int
PyParser_AddToken(register parser_state *ps, register int type, char *str,
***************
*** 175,179 ****
/* Find out which label this token is */
! ilabel = classify(ps->p_grammar, type, str);
if (ilabel < 0)
return E_SYNTAX;
--- 197,201 ----
/* Find out which label this token is */
! ilabel = classify(ps, type, str);
if (ilabel < 0)
return E_SYNTAX;
***************
*** 218,222 ****
[ps->p_stack.s_top->s_state],
s->s_accept && s->s_narcs == 1) {
! D(printf(" Direct pop.\n"));
s_pop(&ps->p_stack);
if (s_empty(&ps->p_stack)) {
--- 240,251 ----
[ps->p_stack.s_top->s_state],
s->s_accept && s->s_narcs == 1) {
! D(printf(" DFA '%s', state %d: "
! "Direct pop.\n",
! d->d_name,
! ps->p_stack.s_top->s_state));
! if (d->d_name[0] == 'i' &&
! strcmp(d->d_name,
! "import_stmt") == 0)
! future_hack(ps);
s_pop(&ps->p_stack);
if (s_empty(&ps->p_stack)) {
***************
*** 231,234 ****
--- 260,266 ----
if (s->s_accept) {
+ if (d->d_name[0] == 'i' &&
+ strcmp(d->d_name, "import_stmt") == 0)
+ future_hack(ps);
/* Pop this dfa and try again */
s_pop(&ps->p_stack);
Index: parser.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Parser/parser.h,v
retrieving revision 2.14
retrieving revision 2.14.8.1
diff -C2 -r2.14 -r2.14.8.1
*** parser.h 2000/09/01 23:29:28 2.14
--- parser.h 2001/07/16 21:41:07 2.14.8.1
***************
*** 26,29 ****
--- 26,30 ----
grammar *p_grammar; /* Grammar to use */
node *p_tree; /* Top of parse tree */
+ int p_generators; /* 1 if yield is a keyword */
} parser_state;
Index: parsetok.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Parser/parsetok.c,v
retrieving revision 2.25
retrieving revision 2.25.8.1
diff -C2 -r2.25 -r2.25.8.1
*** parsetok.c 2000/09/01 23:29:28 2.25
--- parsetok.c 2001/07/16 21:41:07 2.25.8.1
***************
*** 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 (;;) {
- Previous message: [Python-checkins] CVS: python/dist/src/Lib/test test_sgmllib.py,NONE,1.1.2.1 test_generators.py,1.17.2.4,1.17.2.5 test_htmlparser.py,1.1.4.1,1.1.4.2 test_support.py,1.21.4.1,1.21.4.2
- Next message: [Python-checkins] CVS: python/dist/src/Python pythonmain.c,NONE,2.30.2.1 bltinmodule.c,2.198.2.8,2.198.2.9 ceval.c,2.241.2.8,2.241.2.9 compile.c,2.197.2.1,2.197.2.2 future.c,2.5,2.5.6.1 pythonrun.c,2.133.4.4,2.133.4.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]