summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2004-05-19 08:20:33 (GMT)
committerRaymond Hettinger <python@rcn.com>2004-05-19 08:20:33 (GMT)
commit354433a59dd1701985ec8463ced25a967cade3c1 (patch)
tree9e342cc53199814f81b25daabcdb85da1851bd50 /Python
parent285cfccecba911531b37b8a7dde45bf07d3cf9b0 (diff)
downloadcpython-354433a59dd1701985ec8463ced25a967cade3c1.zip
cpython-354433a59dd1701985ec8463ced25a967cade3c1.tar.gz
cpython-354433a59dd1701985ec8463ced25a967cade3c1.tar.bz2
SF patch #872326: Generator expression implementation
(Code contributed by Jiwon Seo.) The documentation portion of the patch is being re-worked and will be checked-in soon. Likewise, PEP 289 will be updated to reflect Guido's rationale for the design decisions on binding behavior (as described in in his patch comments and in discussions on python-dev). The test file, test_genexps.py, is written in doctest format and is meant to exercise all aspects of the the patch. Further additions are welcome from everyone. Please stress test this new feature as much as possible before the alpha release.
Diffstat (limited to 'Python')
-rw-r--r--Python/compile.c283
-rw-r--r--Python/graminit.c703
-rw-r--r--Python/symtable.c2
3 files changed, 680 insertions, 308 deletions
diff --git a/Python/compile.c b/Python/compile.c
index 7bbcd62..15159f8 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -744,11 +744,15 @@ static int com_add(struct compiling *, PyObject *, PyObject *, PyObject *);
static int com_addconst(struct compiling *, PyObject *);
static int com_addname(struct compiling *, PyObject *);
static void com_addopname(struct compiling *, int, node *);
+static void com_test(struct compiling *c, node *n);
static void com_list(struct compiling *, node *, int);
static void com_list_iter(struct compiling *, node *, node *, char *);
+static void com_gen_iter(struct compiling *, node *, node *);
static int com_argdefs(struct compiling *, node *);
static void com_assign(struct compiling *, node *, int, node *);
static void com_assign_name(struct compiling *, node *, int);
+static int com_make_closure(struct compiling *c, PyCodeObject *co);
+
static PyCodeObject *icompile(node *, struct compiling *);
static PyCodeObject *jcompile(node *, const char *, struct compiling *,
PyCompilerFlags *);
@@ -759,6 +763,7 @@ static node *get_rawdocstring(node *);
static int get_ref_type(struct compiling *, char *);
/* symtable operations */
+static int symtable_lookup(struct symtable *st, char *name);
static struct symtable *symtable_build(node *, PyFutureFeatures *,
const char *filename);
static int symtable_load_symbols(struct compiling *);
@@ -777,7 +782,10 @@ static void symtable_global(struct symtable *, node *);
static void symtable_import(struct symtable *, node *);
static void symtable_assign(struct symtable *, node *, int);
static void symtable_list_comprehension(struct symtable *, node *);
+static void symtable_generator_expression(struct symtable *, node *);
static void symtable_list_for(struct symtable *, node *);
+static void symtable_gen_for(struct symtable *, node *, int);
+static void symtable_gen_iter(struct symtable *, node *);
static int symtable_update_free_vars(struct symtable *);
static int symtable_undo_free(struct symtable *, PyObject *, PyObject *);
@@ -1589,7 +1597,7 @@ com_list_for(struct compiling *c, node *n, node *e, char *t)
int anchor = 0;
int save_begin = c->c_begin;
- /* list_iter: for v in expr [list_iter] */
+ /* list_for: for v in expr [list_iter] */
com_node(c, CHILD(n, 3)); /* expr */
com_addbyte(c, GET_ITER);
c->c_begin = c->c_nexti;
@@ -1606,6 +1614,52 @@ com_list_for(struct compiling *c, node *n, node *e, char *t)
}
static void
+com_gen_for(struct compiling *c, node *n, node *t, int is_outmost)
+{
+ int break_anchor = 0;
+ int anchor = 0;
+ int save_begin = c->c_begin;
+
+ REQ(n, gen_for);
+ /* gen_for: for v in test [gen_iter] */
+
+ com_addfwref(c, SETUP_LOOP, &break_anchor);
+ block_push(c, SETUP_LOOP);
+
+ if (is_outmost) {
+ com_addop_varname(c, VAR_LOAD, "[outmost-iterable]");
+ com_push(c, 1);
+ }
+ else {
+ com_node(c, CHILD(n, 3));
+ com_addbyte(c, GET_ITER);
+ }
+
+ c->c_begin = c->c_nexti;
+ com_set_lineno(c, c->c_last_line);
+ com_addfwref(c, FOR_ITER, &anchor);
+ com_push(c, 1);
+ com_assign(c, CHILD(n, 1), OP_ASSIGN, NULL);
+
+ if (NCH(n) == 5)
+ com_gen_iter(c, CHILD(n, 4), t);
+ else {
+ com_test(c, t);
+ com_addbyte(c, YIELD_VALUE);
+ com_pop(c, 1);
+ }
+
+ com_addoparg(c, JUMP_ABSOLUTE, c->c_begin);
+ c->c_begin = save_begin;
+
+ com_backpatch(c, anchor);
+ com_pop(c, 1); /* FOR_ITER has popped this */
+ com_addbyte(c, POP_BLOCK);
+ block_pop(c, SETUP_LOOP);
+ com_backpatch(c, break_anchor);
+}
+
+static void
com_list_if(struct compiling *c, node *n, node *e, char *t)
{
int anchor = 0;
@@ -1624,6 +1678,32 @@ com_list_if(struct compiling *c, node *n, node *e, char *t)
}
static void
+com_gen_if(struct compiling *c, node *n, node *t)
+{
+ /* gen_if: 'if' test [gen_iter] */
+ int anchor = 0;
+ int a=0;
+
+ com_node(c, CHILD(n, 1));
+ com_addfwref(c, JUMP_IF_FALSE, &a);
+ com_addbyte(c, POP_TOP);
+ com_pop(c, 1);
+
+ if (NCH(n) == 3)
+ com_gen_iter(c, CHILD(n, 2), t);
+ else {
+ com_test(c, t);
+ com_addbyte(c, YIELD_VALUE);
+ com_pop(c, 1);
+ }
+ com_addfwref(c, JUMP_FORWARD, &anchor);
+ com_backpatch(c, a);
+ /* We jump here with an extra entry which we now pop */
+ com_addbyte(c, POP_TOP);
+ com_backpatch(c, anchor);
+}
+
+static void
com_list_iter(struct compiling *c,
node *p, /* parent of list_iter node */
node *e, /* element expression node */
@@ -1655,6 +1735,28 @@ com_list_iter(struct compiling *c,
}
static void
+com_gen_iter(struct compiling *c, node *n, node *t)
+{
+ /* gen_iter: gen_for | gen_if */
+ node *ch;
+ REQ(n, gen_iter);
+
+ ch = CHILD(n, 0);
+
+ switch (TYPE(ch)) {
+ case gen_for:
+ com_gen_for(c, ch, t, 0);
+ break;
+ case gen_if:
+ com_gen_if(c, ch, t);
+ break;
+ default:
+ com_error(c, PyExc_SystemError,
+ "invalid gen_iter node type");
+ }
+}
+
+static void
com_list_comprehension(struct compiling *c, node *n)
{
/* listmaker: test list_for */
@@ -1689,6 +1791,52 @@ com_listmaker(struct compiling *c, node *n)
}
static void
+com_generator_expression(struct compiling *c, node *n)
+{
+ /* testlist_gexp: test gen_for */
+ /* argument: test gen_for */
+ PyCodeObject *co;
+
+ REQ(CHILD(n, 0), test);
+ REQ(CHILD(n, 1), gen_for);
+
+ symtable_enter_scope(c->c_symtable, "<genexpr>", TYPE(n),
+ n->n_lineno);
+ co = icompile(n, c);
+ symtable_exit_scope(c->c_symtable);
+
+ if (co == NULL)
+ c->c_errors++;
+ else {
+ int closure = com_make_closure(c, co);
+ int i = com_addconst(c, (PyObject *)co);
+
+ com_addoparg(c, LOAD_CONST, i);
+ com_push(c, 1);
+ if (closure)
+ com_addoparg(c, MAKE_CLOSURE, 0);
+ else
+ com_addoparg(c, MAKE_FUNCTION, 0);
+
+ com_test(c, CHILD(CHILD(n, 1), 3));
+ com_addbyte(c, GET_ITER);
+ com_addoparg(c, CALL_FUNCTION, 1);
+ com_pop(c, 1);
+
+ Py_DECREF(co);
+ }
+}
+
+static void
+com_testlist_gexp(struct compiling *c, node *n)
+{
+ /* testlist_gexp: test ( gen_for | (',' test)* [','] ) */
+ if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == gen_for)
+ com_generator_expression(c, n);
+ else com_list(c, n, 0);
+}
+
+static void
com_dictmaker(struct compiling *c, node *n)
{
int i;
@@ -1721,7 +1869,7 @@ com_atom(struct compiling *c, node *n)
com_push(c, 1);
}
else
- com_node(c, CHILD(n, 1));
+ com_testlist_gexp(c, CHILD(n, 1));
break;
case LSQB: /* '[' [listmaker] ']' */
if (TYPE(CHILD(n, 1)) == RSQB) {
@@ -1857,7 +2005,7 @@ static void
com_argument(struct compiling *c, node *n, PyObject **pkeywords)
{
node *m;
- REQ(n, argument); /* [test '='] test; really [keyword '='] test */
+ REQ(n, argument); /* [test '='] test [gen_for]; really [keyword '='] test */
if (NCH(n) == 1) {
if (*pkeywords != NULL) {
com_error(c, PyExc_SyntaxError,
@@ -1868,6 +2016,11 @@ com_argument(struct compiling *c, node *n, PyObject **pkeywords)
}
return;
}
+ if (NCH(n) == 2) {
+ com_generator_expression(c, n);
+ return;
+ }
+
m = n;
do {
m = CHILD(m, 0);
@@ -2723,7 +2876,8 @@ static void
com_assign_sequence(struct compiling *c, node *n, int assigning)
{
int i;
- if (TYPE(n) != testlist && TYPE(n) != listmaker)
+ if (TYPE(n) != testlist && TYPE(n) != testlist_gexp &&
+ TYPE(n) != listmaker)
REQ(n, exprlist);
if (assigning) {
i = (NCH(n)+1)/2;
@@ -2765,7 +2919,13 @@ com_assign(struct compiling *c, node *n, int assigning, node *augn)
case exprlist:
case testlist:
case testlist1:
+ case testlist_gexp:
if (NCH(n) > 1) {
+ if (TYPE(CHILD(n, 1)) == gen_for) {
+ com_error(c, PyExc_SystemError,
+ "assign to generator expression not possible");
+ return;
+ }
if (assigning > OP_APPLY) {
com_error(c, PyExc_SyntaxError,
"augmented assign to tuple not possible");
@@ -4253,6 +4413,23 @@ compile_classdef(struct compiling *c, node *n)
}
static void
+compile_generator_expression(struct compiling *c, node *n)
+{
+ /* testlist_gexp: test gen_for */
+ /* argument: test gen_for */
+ REQ(CHILD(n, 0), test);
+ REQ(CHILD(n, 1), gen_for);
+
+ c->c_name = "<generator expression>";
+ com_gen_for(c, CHILD(n, 1), CHILD(n, 0), 1);
+
+ com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None));
+ com_push(c, 1);
+ com_addbyte(c, RETURN_VALUE);
+ com_pop(c, 1);
+}
+
+static void
compile_node(struct compiling *c, node *n)
{
com_set_lineno(c, n->n_lineno);
@@ -4300,6 +4477,11 @@ compile_node(struct compiling *c, node *n)
compile_classdef(c, n);
break;
+ case testlist_gexp: /* A generator expression */
+ case argument: /* A generator expression */
+ compile_generator_expression(c, n);
+ break;
+
default:
com_error(c, PyExc_SystemError,
"compile_node: unexpected node type");
@@ -4976,7 +5158,6 @@ symtable_load_symbols(struct compiling *c)
}
}
}
-
assert(PyDict_Size(c->c_freevars) == si.si_nfrees);
if (si.si_ncells > 1) { /* one cell is always in order */
@@ -5346,11 +5527,11 @@ look_for_yield(node *n)
return 0;
case yield_stmt:
- return 1;
+ return GENERATOR;
default:
if (look_for_yield(kid))
- return 1;
+ return GENERATOR;
}
}
return 0;
@@ -5494,6 +5675,18 @@ symtable_node(struct symtable *st, node *n)
if (TYPE(CHILD(n, i)) >= single_input)
symtable_node(st, CHILD(n, i));
break;
+ case arglist:
+ if (NCH(n) > 1)
+ for (i = 0; i < NCH(n); ++i) {
+ node *ch = CHILD(n, i);
+ if (TYPE(ch) == argument && NCH(ch) == 2 &&
+ TYPE(CHILD(ch, 1)) == gen_for) {
+ PyErr_SetString(PyExc_SyntaxError,
+ "invalid syntax");
+ symtable_error(st, n->n_lineno);
+ return;
+ }
+ }
/* The remaining cases fall through to default except in
special circumstances. This requires the individual cases
to be coded with great care, even though they look like
@@ -5504,6 +5697,11 @@ symtable_node(struct symtable *st, node *n)
n = CHILD(n, 2);
goto loop;
}
+ else if (TYPE(n) == argument && NCH(n) == 2 &&
+ TYPE(CHILD(n, 1)) == gen_for) {
+ symtable_generator_expression(st, n);
+ break;
+ }
/* fall through */
case listmaker:
if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_for) {
@@ -5511,6 +5709,13 @@ symtable_node(struct symtable *st, node *n)
break;
}
/* fall through */
+ case testlist_gexp:
+ if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == gen_for) {
+ symtable_generator_expression(st, n);
+ break;
+ }
+ /* fall through */
+
case atom:
if (TYPE(n) == atom && TYPE(CHILD(n, 0)) == NAME) {
symtable_add_use(st, STR(CHILD(n, 0)));
@@ -5715,6 +5920,26 @@ symtable_list_comprehension(struct symtable *st, node *n)
}
static void
+symtable_generator_expression(struct symtable *st, node *n)
+{
+ /* testlist_gexp: test gen_for */
+ REQ(CHILD(n, 0), test);
+ REQ(CHILD(n, 1), gen_for);
+
+ symtable_enter_scope(st, "<genexpr>", TYPE(n), n->n_lineno);
+ st->st_cur->ste_generator = GENERATOR_EXPRESSION;
+
+ symtable_add_def(st, "[outmost-iterable]", DEF_PARAM);
+
+ symtable_gen_for(st, CHILD(n, 1), 1);
+ symtable_node(st, CHILD(n, 0));
+ symtable_exit_scope(st);
+
+ /* for outmost iterable precomputation */
+ symtable_node(st, CHILD(CHILD(n, 1), 3));
+}
+
+static void
symtable_list_for(struct symtable *st, node *n)
{
REQ(n, list_for);
@@ -5726,6 +5951,39 @@ symtable_list_for(struct symtable *st, node *n)
}
static void
+symtable_gen_for(struct symtable *st, node *n, int is_outmost)
+{
+ REQ(n, gen_for);
+
+ /* gen_for: for v in test [gen_iter] */
+ symtable_assign(st, CHILD(n, 1), 0);
+ if (is_outmost)
+ symtable_add_use(st, "[outmost-iterable]");
+ else
+ symtable_node(st, CHILD(n, 3));
+
+ if (NCH(n) == 5)
+ symtable_gen_iter(st, CHILD(n, 4));
+}
+
+static void
+symtable_gen_iter(struct symtable *st, node *n)
+{
+ REQ(n, gen_iter);
+
+ n = CHILD(n, 0);
+ if (TYPE(n) == gen_for)
+ symtable_gen_for(st, n, 0);
+ else {
+ REQ(n, gen_if);
+ symtable_node(st, CHILD(n, 1));
+
+ if (NCH(n) == 3)
+ symtable_gen_iter(st, CHILD(n, 2));
+ }
+}
+
+static void
symtable_import(struct symtable *st, node *n)
{
int i;
@@ -5813,6 +6071,17 @@ symtable_assign(struct symtable *st, node *n, int def_flag)
symtable_assign(st, CHILD(n, i), def_flag);
}
return;
+ case testlist_gexp:
+ if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == gen_for) {
+ /* XXX This is an error, but the next pass
+ will catch it. */
+ return;
+ } else {
+ for (i = 0; i < NCH(n); i += 2)
+ symtable_assign(st, CHILD(n, i), def_flag);
+ }
+ return;
+
case exprlist:
case testlist:
case testlist1:
diff --git a/Python/graminit.c b/Python/graminit.c
index 98bad94..cd8240b 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -1016,46 +1016,46 @@ static state states_48[4] = {
};
static arc arcs_49_0[7] = {
{16, 1},
- {127, 2},
- {130, 3},
- {133, 4},
+ {128, 2},
+ {131, 3},
+ {134, 4},
{12, 5},
- {135, 5},
- {136, 6},
+ {136, 5},
+ {137, 6},
};
static arc arcs_49_1[2] = {
- {9, 7},
+ {127, 7},
{18, 5},
};
static arc arcs_49_2[2] = {
- {128, 8},
- {129, 5},
+ {129, 8},
+ {130, 5},
};
static arc arcs_49_3[2] = {
- {131, 9},
- {132, 5},
+ {132, 9},
+ {133, 5},
};
static arc arcs_49_4[1] = {
- {134, 10},
+ {135, 10},
};
static arc arcs_49_5[1] = {
{0, 5},
};
static arc arcs_49_6[2] = {
- {136, 6},
+ {137, 6},
{0, 6},
};
static arc arcs_49_7[1] = {
{18, 5},
};
static arc arcs_49_8[1] = {
- {129, 5},
+ {130, 5},
};
static arc arcs_49_9[1] = {
- {132, 5},
+ {133, 5},
};
static arc arcs_49_10[1] = {
- {133, 5},
+ {134, 5},
};
static state states_49[11] = {
{7, arcs_49_0},
@@ -1074,7 +1074,7 @@ static arc arcs_50_0[1] = {
{21, 1},
};
static arc arcs_50_1[3] = {
- {137, 2},
+ {138, 2},
{22, 3},
{0, 1},
};
@@ -1097,153 +1097,163 @@ static state states_50[5] = {
{2, arcs_50_4},
};
static arc arcs_51_0[1] = {
- {138, 1},
+ {21, 1},
};
-static arc arcs_51_1[2] = {
- {17, 2},
- {14, 3},
+static arc arcs_51_1[3] = {
+ {139, 2},
+ {22, 3},
+ {0, 1},
};
static arc arcs_51_2[1] = {
- {14, 3},
+ {0, 2},
};
-static arc arcs_51_3[1] = {
+static arc arcs_51_3[2] = {
{21, 4},
+ {0, 3},
};
-static arc arcs_51_4[1] = {
+static arc arcs_51_4[2] = {
+ {22, 3},
{0, 4},
};
static state states_51[5] = {
{1, arcs_51_0},
- {2, arcs_51_1},
+ {3, arcs_51_1},
{1, arcs_51_2},
- {1, arcs_51_3},
- {1, arcs_51_4},
+ {2, arcs_51_3},
+ {2, arcs_51_4},
};
-static arc arcs_52_0[3] = {
- {16, 1},
- {127, 2},
- {70, 3},
+static arc arcs_52_0[1] = {
+ {140, 1},
};
static arc arcs_52_1[2] = {
- {139, 4},
- {18, 5},
+ {17, 2},
+ {14, 3},
};
static arc arcs_52_2[1] = {
- {140, 6},
+ {14, 3},
};
static arc arcs_52_3[1] = {
- {12, 5},
+ {21, 4},
};
static arc arcs_52_4[1] = {
- {18, 5},
-};
-static arc arcs_52_5[1] = {
- {0, 5},
-};
-static arc arcs_52_6[1] = {
- {129, 5},
+ {0, 4},
};
-static state states_52[7] = {
- {3, arcs_52_0},
+static state states_52[5] = {
+ {1, arcs_52_0},
{2, arcs_52_1},
{1, arcs_52_2},
{1, arcs_52_3},
{1, arcs_52_4},
- {1, arcs_52_5},
- {1, arcs_52_6},
};
-static arc arcs_53_0[1] = {
- {141, 1},
+static arc arcs_53_0[3] = {
+ {16, 1},
+ {128, 2},
+ {70, 3},
};
static arc arcs_53_1[2] = {
+ {141, 4},
+ {18, 5},
+};
+static arc arcs_53_2[1] = {
+ {142, 6},
+};
+static arc arcs_53_3[1] = {
+ {12, 5},
+};
+static arc arcs_53_4[1] = {
+ {18, 5},
+};
+static arc arcs_53_5[1] = {
+ {0, 5},
+};
+static arc arcs_53_6[1] = {
+ {130, 5},
+};
+static state states_53[7] = {
+ {3, arcs_53_0},
+ {2, arcs_53_1},
+ {1, arcs_53_2},
+ {1, arcs_53_3},
+ {1, arcs_53_4},
+ {1, arcs_53_5},
+ {1, arcs_53_6},
+};
+static arc arcs_54_0[1] = {
+ {143, 1},
+};
+static arc arcs_54_1[2] = {
{22, 2},
{0, 1},
};
-static arc arcs_53_2[2] = {
- {141, 1},
+static arc arcs_54_2[2] = {
+ {143, 1},
{0, 2},
};
-static state states_53[3] = {
- {1, arcs_53_0},
- {2, arcs_53_1},
- {2, arcs_53_2},
+static state states_54[3] = {
+ {1, arcs_54_0},
+ {2, arcs_54_1},
+ {2, arcs_54_2},
};
-static arc arcs_54_0[3] = {
+static arc arcs_55_0[3] = {
{70, 1},
{21, 2},
{14, 3},
};
-static arc arcs_54_1[1] = {
+static arc arcs_55_1[1] = {
{70, 4},
};
-static arc arcs_54_2[2] = {
+static arc arcs_55_2[2] = {
{14, 3},
{0, 2},
};
-static arc arcs_54_3[3] = {
+static arc arcs_55_3[3] = {
{21, 5},
- {142, 6},
+ {144, 6},
{0, 3},
};
-static arc arcs_54_4[1] = {
+static arc arcs_55_4[1] = {
{70, 6},
};
-static arc arcs_54_5[2] = {
- {142, 6},
+static arc arcs_55_5[2] = {
+ {144, 6},
{0, 5},
};
-static arc arcs_54_6[1] = {
+static arc arcs_55_6[1] = {
{0, 6},
};
-static state states_54[7] = {
- {3, arcs_54_0},
- {1, arcs_54_1},
- {2, arcs_54_2},
- {3, arcs_54_3},
- {1, arcs_54_4},
- {2, arcs_54_5},
- {1, arcs_54_6},
-};
-static arc arcs_55_0[1] = {
- {14, 1},
-};
-static arc arcs_55_1[2] = {
- {21, 2},
- {0, 1},
-};
-static arc arcs_55_2[1] = {
- {0, 2},
-};
-static state states_55[3] = {
- {1, arcs_55_0},
- {2, arcs_55_1},
- {1, arcs_55_2},
+static state states_55[7] = {
+ {3, arcs_55_0},
+ {1, arcs_55_1},
+ {2, arcs_55_2},
+ {3, arcs_55_3},
+ {1, arcs_55_4},
+ {2, arcs_55_5},
+ {1, arcs_55_6},
};
static arc arcs_56_0[1] = {
- {73, 1},
+ {14, 1},
};
static arc arcs_56_1[2] = {
- {22, 2},
+ {21, 2},
{0, 1},
};
-static arc arcs_56_2[2] = {
- {73, 1},
+static arc arcs_56_2[1] = {
{0, 2},
};
static state states_56[3] = {
{1, arcs_56_0},
{2, arcs_56_1},
- {2, arcs_56_2},
+ {1, arcs_56_2},
};
static arc arcs_57_0[1] = {
- {21, 1},
+ {73, 1},
};
static arc arcs_57_1[2] = {
{22, 2},
{0, 1},
};
static arc arcs_57_2[2] = {
- {21, 1},
+ {73, 1},
{0, 2},
};
static state states_57[3] = {
@@ -1258,29 +1268,21 @@ static arc arcs_58_1[2] = {
{22, 2},
{0, 1},
};
-static arc arcs_58_2[1] = {
- {21, 3},
-};
-static arc arcs_58_3[2] = {
- {22, 4},
- {0, 3},
-};
-static arc arcs_58_4[2] = {
- {21, 3},
- {0, 4},
+static arc arcs_58_2[2] = {
+ {21, 1},
+ {0, 2},
};
-static state states_58[5] = {
+static state states_58[3] = {
{1, arcs_58_0},
{2, arcs_58_1},
- {1, arcs_58_2},
- {2, arcs_58_3},
- {2, arcs_58_4},
+ {2, arcs_58_2},
};
static arc arcs_59_0[1] = {
{21, 1},
};
-static arc arcs_59_1[1] = {
- {14, 2},
+static arc arcs_59_1[2] = {
+ {22, 2},
+ {0, 1},
};
static arc arcs_59_2[1] = {
{21, 3},
@@ -1290,328 +1292,423 @@ static arc arcs_59_3[2] = {
{0, 3},
};
static arc arcs_59_4[2] = {
- {21, 1},
+ {21, 3},
{0, 4},
};
static state states_59[5] = {
{1, arcs_59_0},
- {1, arcs_59_1},
+ {2, arcs_59_1},
{1, arcs_59_2},
{2, arcs_59_3},
{2, arcs_59_4},
};
static arc arcs_60_0[1] = {
- {144, 1},
+ {21, 1},
};
static arc arcs_60_1[1] = {
+ {14, 2},
+};
+static arc arcs_60_2[1] = {
+ {21, 3},
+};
+static arc arcs_60_3[2] = {
+ {22, 4},
+ {0, 3},
+};
+static arc arcs_60_4[2] = {
+ {21, 1},
+ {0, 4},
+};
+static state states_60[5] = {
+ {1, arcs_60_0},
+ {1, arcs_60_1},
+ {1, arcs_60_2},
+ {2, arcs_60_3},
+ {2, arcs_60_4},
+};
+static arc arcs_61_0[1] = {
+ {146, 1},
+};
+static arc arcs_61_1[1] = {
{12, 2},
};
-static arc arcs_60_2[2] = {
+static arc arcs_61_2[2] = {
{16, 3},
{14, 4},
};
-static arc arcs_60_3[1] = {
+static arc arcs_61_3[1] = {
{9, 5},
};
-static arc arcs_60_4[1] = {
+static arc arcs_61_4[1] = {
{15, 6},
};
-static arc arcs_60_5[1] = {
+static arc arcs_61_5[1] = {
{18, 7},
};
-static arc arcs_60_6[1] = {
+static arc arcs_61_6[1] = {
{0, 6},
};
-static arc arcs_60_7[1] = {
+static arc arcs_61_7[1] = {
{14, 4},
};
-static state states_60[8] = {
- {1, arcs_60_0},
- {1, arcs_60_1},
- {2, arcs_60_2},
- {1, arcs_60_3},
- {1, arcs_60_4},
- {1, arcs_60_5},
- {1, arcs_60_6},
- {1, arcs_60_7},
-};
-static arc arcs_61_0[3] = {
- {145, 1},
+static state states_61[8] = {
+ {1, arcs_61_0},
+ {1, arcs_61_1},
+ {2, arcs_61_2},
+ {1, arcs_61_3},
+ {1, arcs_61_4},
+ {1, arcs_61_5},
+ {1, arcs_61_6},
+ {1, arcs_61_7},
+};
+static arc arcs_62_0[3] = {
+ {147, 1},
{23, 2},
{24, 3},
};
-static arc arcs_61_1[2] = {
+static arc arcs_62_1[2] = {
{22, 4},
{0, 1},
};
-static arc arcs_61_2[1] = {
+static arc arcs_62_2[1] = {
{21, 5},
};
-static arc arcs_61_3[1] = {
+static arc arcs_62_3[1] = {
{21, 6},
};
-static arc arcs_61_4[4] = {
- {145, 1},
+static arc arcs_62_4[4] = {
+ {147, 1},
{23, 2},
{24, 3},
{0, 4},
};
-static arc arcs_61_5[2] = {
+static arc arcs_62_5[2] = {
{22, 7},
{0, 5},
};
-static arc arcs_61_6[1] = {
+static arc arcs_62_6[1] = {
{0, 6},
};
-static arc arcs_61_7[1] = {
+static arc arcs_62_7[1] = {
{24, 3},
};
-static state states_61[8] = {
- {3, arcs_61_0},
- {2, arcs_61_1},
- {1, arcs_61_2},
- {1, arcs_61_3},
- {4, arcs_61_4},
- {2, arcs_61_5},
- {1, arcs_61_6},
- {1, arcs_61_7},
+static state states_62[8] = {
+ {3, arcs_62_0},
+ {2, arcs_62_1},
+ {1, arcs_62_2},
+ {1, arcs_62_3},
+ {4, arcs_62_4},
+ {2, arcs_62_5},
+ {1, arcs_62_6},
+ {1, arcs_62_7},
};
-static arc arcs_62_0[1] = {
+static arc arcs_63_0[1] = {
{21, 1},
};
-static arc arcs_62_1[2] = {
+static arc arcs_63_1[3] = {
{20, 2},
+ {139, 3},
{0, 1},
};
-static arc arcs_62_2[1] = {
- {21, 3},
+static arc arcs_63_2[1] = {
+ {21, 4},
};
-static arc arcs_62_3[1] = {
+static arc arcs_63_3[1] = {
{0, 3},
};
-static state states_62[4] = {
- {1, arcs_62_0},
- {2, arcs_62_1},
- {1, arcs_62_2},
- {1, arcs_62_3},
+static arc arcs_63_4[2] = {
+ {139, 3},
+ {0, 4},
};
-static arc arcs_63_0[2] = {
- {137, 1},
- {147, 1},
+static state states_63[5] = {
+ {1, arcs_63_0},
+ {3, arcs_63_1},
+ {1, arcs_63_2},
+ {1, arcs_63_3},
+ {2, arcs_63_4},
+};
+static arc arcs_64_0[2] = {
+ {138, 1},
+ {149, 1},
};
-static arc arcs_63_1[1] = {
+static arc arcs_64_1[1] = {
{0, 1},
};
-static state states_63[2] = {
- {2, arcs_63_0},
- {1, arcs_63_1},
+static state states_64[2] = {
+ {2, arcs_64_0},
+ {1, arcs_64_1},
};
-static arc arcs_64_0[1] = {
+static arc arcs_65_0[1] = {
{85, 1},
};
-static arc arcs_64_1[1] = {
+static arc arcs_65_1[1] = {
{53, 2},
};
-static arc arcs_64_2[1] = {
+static arc arcs_65_2[1] = {
{74, 3},
};
-static arc arcs_64_3[1] = {
- {143, 4},
+static arc arcs_65_3[1] = {
+ {145, 4},
};
-static arc arcs_64_4[2] = {
- {146, 5},
+static arc arcs_65_4[2] = {
+ {148, 5},
{0, 4},
};
-static arc arcs_64_5[1] = {
+static arc arcs_65_5[1] = {
{0, 5},
};
-static state states_64[6] = {
- {1, arcs_64_0},
- {1, arcs_64_1},
- {1, arcs_64_2},
- {1, arcs_64_3},
- {2, arcs_64_4},
- {1, arcs_64_5},
+static state states_65[6] = {
+ {1, arcs_65_0},
+ {1, arcs_65_1},
+ {1, arcs_65_2},
+ {1, arcs_65_3},
+ {2, arcs_65_4},
+ {1, arcs_65_5},
};
-static arc arcs_65_0[1] = {
+static arc arcs_66_0[1] = {
{81, 1},
};
-static arc arcs_65_1[1] = {
+static arc arcs_66_1[1] = {
{21, 2},
};
-static arc arcs_65_2[2] = {
- {146, 3},
+static arc arcs_66_2[2] = {
+ {148, 3},
{0, 2},
};
-static arc arcs_65_3[1] = {
+static arc arcs_66_3[1] = {
{0, 3},
};
-static state states_65[4] = {
- {1, arcs_65_0},
- {1, arcs_65_1},
- {2, arcs_65_2},
- {1, arcs_65_3},
+static state states_66[4] = {
+ {1, arcs_66_0},
+ {1, arcs_66_1},
+ {2, arcs_66_2},
+ {1, arcs_66_3},
};
-static arc arcs_66_0[1] = {
+static arc arcs_67_0[2] = {
+ {139, 1},
+ {151, 1},
+};
+static arc arcs_67_1[1] = {
+ {0, 1},
+};
+static state states_67[2] = {
+ {2, arcs_67_0},
+ {1, arcs_67_1},
+};
+static arc arcs_68_0[1] = {
+ {85, 1},
+};
+static arc arcs_68_1[1] = {
+ {53, 2},
+};
+static arc arcs_68_2[1] = {
+ {74, 3},
+};
+static arc arcs_68_3[1] = {
+ {21, 4},
+};
+static arc arcs_68_4[2] = {
+ {150, 5},
+ {0, 4},
+};
+static arc arcs_68_5[1] = {
+ {0, 5},
+};
+static state states_68[6] = {
+ {1, arcs_68_0},
+ {1, arcs_68_1},
+ {1, arcs_68_2},
+ {1, arcs_68_3},
+ {2, arcs_68_4},
+ {1, arcs_68_5},
+};
+static arc arcs_69_0[1] = {
+ {81, 1},
+};
+static arc arcs_69_1[1] = {
+ {21, 2},
+};
+static arc arcs_69_2[2] = {
+ {150, 3},
+ {0, 2},
+};
+static arc arcs_69_3[1] = {
+ {0, 3},
+};
+static state states_69[4] = {
+ {1, arcs_69_0},
+ {1, arcs_69_1},
+ {2, arcs_69_2},
+ {1, arcs_69_3},
+};
+static arc arcs_70_0[1] = {
{21, 1},
};
-static arc arcs_66_1[2] = {
+static arc arcs_70_1[2] = {
{22, 0},
{0, 1},
};
-static state states_66[2] = {
- {1, arcs_66_0},
- {2, arcs_66_1},
+static state states_70[2] = {
+ {1, arcs_70_0},
+ {2, arcs_70_1},
};
-static arc arcs_67_0[1] = {
+static arc arcs_71_0[1] = {
{12, 1},
};
-static arc arcs_67_1[1] = {
+static arc arcs_71_1[1] = {
{0, 1},
};
-static state states_67[2] = {
- {1, arcs_67_0},
- {1, arcs_67_1},
+static state states_71[2] = {
+ {1, arcs_71_0},
+ {1, arcs_71_1},
};
-static dfa dfas[68] = {
+static dfa dfas[72] = {
{256, "single_input", 0, 3, states_0,
- "\004\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\244\005\001"},
+ "\004\030\001\000\000\000\124\360\213\011\162\000\002\000\140\010\111\023\004\000"},
{257, "file_input", 0, 2, states_1,
- "\204\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\244\005\001"},
+ "\204\030\001\000\000\000\124\360\213\011\162\000\002\000\140\010\111\023\004\000"},
{258, "eval_input", 0, 3, states_2,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
{259, "funcdef", 0, 6, states_3,
- "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{260, "parameters", 0, 4, states_4,
- "\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{261, "varargslist", 0, 10, states_5,
- "\000\020\201\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\020\201\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{262, "fpdef", 0, 4, states_6,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{263, "fplist", 0, 3, states_7,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{264, "stmt", 0, 2, states_8,
- "\000\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\244\005\001"},
+ "\000\030\001\000\000\000\124\360\213\011\162\000\002\000\140\010\111\023\004\000"},
{265, "simple_stmt", 0, 4, states_9,
- "\000\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\244\005\000"},
+ "\000\020\001\000\000\000\124\360\213\011\000\000\002\000\140\010\111\023\000\000"},
{266, "small_stmt", 0, 2, states_10,
- "\000\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\244\005\000"},
+ "\000\020\001\000\000\000\124\360\213\011\000\000\002\000\140\010\111\023\000\000"},
{267, "expr_stmt", 0, 6, states_11,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
{268, "augassign", 0, 2, states_12,
- "\000\000\000\000\300\377\003\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\300\377\003\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{269, "print_stmt", 0, 9, states_13,
- "\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{270, "del_stmt", 0, 3, states_14,
- "\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{271, "pass_stmt", 0, 2, states_15,
- "\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{272, "flow_stmt", 0, 2, states_16,
- "\000\000\000\000\000\000\000\360\001\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\360\001\000\000\000\000\000\000\000\000\000\000\000"},
{273, "break_stmt", 0, 2, states_17,
- "\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"},
{274, "continue_stmt", 0, 2, states_18,
- "\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"},
{275, "return_stmt", 0, 3, states_19,
- "\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000"},
{276, "yield_stmt", 0, 3, states_20,
- "\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000"},
{277, "raise_stmt", 0, 7, states_21,
- "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000"},
{278, "import_stmt", 0, 9, states_22,
- "\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000"},
{279, "import_as_name", 0, 4, states_23,
- "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{280, "dotted_as_name", 0, 4, states_24,
- "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{281, "dotted_name", 0, 2, states_25,
- "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{282, "global_stmt", 0, 3, states_26,
- "\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000"},
{283, "exec_stmt", 0, 7, states_27,
- "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"},
{284, "assert_stmt", 0, 5, states_28,
- "\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000"},
{285, "compound_stmt", 0, 2, states_29,
- "\000\010\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\001"},
+ "\000\010\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\004\000"},
{286, "if_stmt", 0, 8, states_30,
- "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
{287, "while_stmt", 0, 8, states_31,
- "\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"},
{288, "for_stmt", 0, 10, states_32,
- "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
{289, "try_stmt", 0, 10, states_33,
- "\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
{290, "except_clause", 0, 5, states_34,
- "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
{291, "suite", 0, 5, states_35,
- "\004\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\244\005\000"},
+ "\004\020\001\000\000\000\124\360\213\011\000\000\002\000\140\010\111\023\000\000"},
{292, "test", 0, 4, states_36,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
{293, "and_test", 0, 2, states_37,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\003\000\000"},
{294, "not_test", 0, 3, states_38,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\003\000\000"},
{295, "comparison", 0, 2, states_39,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
{296, "comp_op", 0, 4, states_40,
- "\000\000\000\000\000\000\000\000\000\004\000\000\362\017\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\004\000\000\362\017\000\000\000\000\000\000"},
{297, "expr", 0, 2, states_41,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
{298, "xor_expr", 0, 2, states_42,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
{299, "and_expr", 0, 2, states_43,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
{300, "shift_expr", 0, 2, states_44,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
{301, "arith_expr", 0, 2, states_45,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
{302, "term", 0, 2, states_46,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
{303, "factor", 0, 3, states_47,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
{304, "power", 0, 4, states_48,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\200\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\111\003\000\000"},
{305, "atom", 0, 11, states_49,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\200\244\001\000"},
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\111\003\000\000"},
{306, "listmaker", 0, 5, states_50,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
- {307, "lambdef", 0, 5, states_51,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000"},
- {308, "trailer", 0, 7, states_52,
- "\000\000\001\000\000\000\000\000\100\000\000\000\000\000\000\200\000\000\000"},
- {309, "subscriptlist", 0, 3, states_53,
- "\000\120\001\000\000\000\000\000\100\000\000\000\002\000\140\210\244\005\000"},
- {310, "subscript", 0, 7, states_54,
- "\000\120\001\000\000\000\000\000\100\000\000\000\002\000\140\210\244\005\000"},
- {311, "sliceop", 0, 3, states_55,
- "\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
- {312, "exprlist", 0, 3, states_56,
- "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
- {313, "testlist", 0, 3, states_57,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
- {314, "testlist_safe", 0, 5, states_58,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
- {315, "dictmaker", 0, 5, states_59,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
- {316, "classdef", 0, 8, states_60,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
- {317, "arglist", 0, 8, states_61,
- "\000\020\201\001\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
- {318, "argument", 0, 4, states_62,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
- {319, "list_iter", 0, 2, states_63,
- "\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000"},
- {320, "list_for", 0, 6, states_64,
- "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
- {321, "list_if", 0, 4, states_65,
- "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
- {322, "testlist1", 0, 2, states_66,
- "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
- {323, "encoding_decl", 0, 2, states_67,
- "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-};
-static label labels[149] = {
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+ {307, "testlist_gexp", 0, 5, states_51,
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+ {308, "lambdef", 0, 5, states_52,
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000"},
+ {309, "trailer", 0, 7, states_53,
+ "\000\000\001\000\000\000\000\000\100\000\000\000\000\000\000\000\001\000\000\000"},
+ {310, "subscriptlist", 0, 3, states_54,
+ "\000\120\001\000\000\000\000\000\100\000\000\000\002\000\140\010\111\023\000\000"},
+ {311, "subscript", 0, 7, states_55,
+ "\000\120\001\000\000\000\000\000\100\000\000\000\002\000\140\010\111\023\000\000"},
+ {312, "sliceop", 0, 3, states_56,
+ "\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ {313, "exprlist", 0, 3, states_57,
+ "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
+ {314, "testlist", 0, 3, states_58,
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+ {315, "testlist_safe", 0, 5, states_59,
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+ {316, "dictmaker", 0, 5, states_60,
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+ {317, "classdef", 0, 8, states_61,
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000"},
+ {318, "arglist", 0, 8, states_62,
+ "\000\020\201\001\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+ {319, "argument", 0, 5, states_63,
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+ {320, "list_iter", 0, 2, states_64,
+ "\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000\000"},
+ {321, "list_for", 0, 6, states_65,
+ "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
+ {322, "list_if", 0, 4, states_66,
+ "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
+ {323, "gen_iter", 0, 2, states_67,
+ "\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000\000"},
+ {324, "gen_for", 0, 6, states_68,
+ "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
+ {325, "gen_if", 0, 4, states_69,
+ "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
+ {326, "testlist1", 0, 2, states_70,
+ "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+ {327, "encoding_decl", 0, 2, states_71,
+ "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+};
+static label labels[153] = {
{0, "EMPTY"},
{256, 0},
{4, 0},
@@ -1621,7 +1718,7 @@ static label labels[149] = {
{264, 0},
{0, 0},
{258, 0},
- {313, 0},
+ {314, 0},
{259, 0},
{1, "def"},
{1, 0},
@@ -1665,7 +1762,7 @@ static label labels[149] = {
{1, "print"},
{35, 0},
{1, "del"},
- {312, 0},
+ {313, 0},
{1, "pass"},
{273, 0},
{274, 0},
@@ -1692,7 +1789,7 @@ static label labels[149] = {
{287, 0},
{288, 0},
{289, 0},
- {316, 0},
+ {317, 0},
{1, "if"},
{1, "elif"},
{1, "else"},
@@ -1706,7 +1803,7 @@ static label labels[149] = {
{6, 0},
{293, 0},
{1, "or"},
- {307, 0},
+ {308, 0},
{294, 0},
{1, "and"},
{1, "not"},
@@ -1738,33 +1835,37 @@ static label labels[149] = {
{32, 0},
{304, 0},
{305, 0},
- {308, 0},
+ {309, 0},
+ {307, 0},
{9, 0},
{306, 0},
{10, 0},
{26, 0},
- {315, 0},
+ {316, 0},
{27, 0},
{25, 0},
- {322, 0},
+ {326, 0},
{2, 0},
{3, 0},
- {320, 0},
+ {321, 0},
+ {324, 0},
{1, "lambda"},
- {317, 0},
- {309, 0},
+ {318, 0},
{310, 0},
{311, 0},
- {314, 0},
+ {312, 0},
+ {315, 0},
{1, "class"},
- {318, 0},
{319, 0},
- {321, 0},
+ {320, 0},
+ {322, 0},
{323, 0},
+ {325, 0},
+ {327, 0},
};
grammar _PyParser_Grammar = {
- 68,
+ 72,
dfas,
- {149, labels},
+ {153, labels},
256
};
diff --git a/Python/symtable.c b/Python/symtable.c
index f86fd2f..5ca2041 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -66,6 +66,8 @@ PySymtableEntry_New(struct symtable *st, char *name, int type, int lineno)
switch (type) {
case funcdef:
case lambdef:
+ case testlist_gexp: /* generator expression */
+ case argument: /* generator expression */
ste->ste_type = TYPE_FUNCTION;
break;
case classdef: