[Python-checkins] r42586 - in python/trunk: Doc/ref/ref5.tex Grammar/Grammar Include/Python-ast.h Include/graminit.h Lib/test/test_grammar.py Parser/Python.asdl Python/Python-ast.c Python/ast.c Python/compile.c Python/graminit.c Python/symtable.c

thomas.wouters python-checkins at python.org
Mon Feb 27 01:24:17 CET 2006


Author: thomas.wouters
Date: Mon Feb 27 01:24:13 2006
New Revision: 42586

Modified:
   python/trunk/Doc/ref/ref5.tex
   python/trunk/Grammar/Grammar
   python/trunk/Include/Python-ast.h
   python/trunk/Include/graminit.h
   python/trunk/Lib/test/test_grammar.py
   python/trunk/Parser/Python.asdl
   python/trunk/Python/Python-ast.c
   python/trunk/Python/ast.c
   python/trunk/Python/compile.c
   python/trunk/Python/graminit.c
   python/trunk/Python/symtable.c
Log:

PEP 308 implementation, including minor refdocs and some testcases. It
breaks the parser module, because it adds the if/else construct as well as
two new grammar rules for backward compatibility. If no one else fixes
parsermodule, I guess I'll go ahead and fix it later this week.

The TeX code was checked with texcheck.py, but not rendered. There is
actually a slight incompatibility:

>>> (x for x in lambda:0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: iteration over non-sequence

changes into

>>> (x for x in lambda: 0)
  File "<stdin>", line 1
    (x for x in lambda: 0)
                     ^
SyntaxError: invalid syntax

Since there's no way the former version can be useful, it's probably a
bugfix ;)



Modified: python/trunk/Doc/ref/ref5.tex
==============================================================================
--- python/trunk/Doc/ref/ref5.tex	(original)
+++ python/trunk/Doc/ref/ref5.tex	Mon Feb 27 01:24:13 2006
@@ -155,8 +155,7 @@
 
 \begin{productionlist}
   \production{test}
-             {\token{and_test} ( "or" \token{and_test} )*
-              | \token{lambda_form}}
+             {\token{or_test} | \token{lambda_form}}
   \production{testlist}
              {\token{test} ( "," \token{test} )* [ "," ]}
   \production{list_display}
@@ -1017,7 +1016,8 @@
 
 \begin{productionlist}
   \production{expression}
-             {\token{or_test} | \token{lambda_form}}
+             {\token{or_test} [\token{if} \token{or_test} \token{else}
+              \token{test}] | \token{lambda_form}}
   \production{or_test}
              {\token{and_test} | \token{or_test} "or" \token{and_test}}
   \production{and_test}
@@ -1036,6 +1036,11 @@
 \code{False} otherwise.
 \opindex{not}
 
+The expression \code{\var{x} if \var{C} else \var{y}} first evaluates
+\var{C} (\emph{not} \var{x}); if \var{C} is true, \var{x} is evaluated and
+its value is returned; otherwise, \var{y} is evaluated and its value is
+returned.
+
 The expression \code{\var{x} and \var{y}} first evaluates \var{x}; if
 \var{x} is false, its value is returned; otherwise, \var{y} is
 evaluated and the resulting value is returned.

Modified: python/trunk/Grammar/Grammar
==============================================================================
--- python/trunk/Grammar/Grammar	(original)
+++ python/trunk/Grammar/Grammar	Mon Feb 27 01:24:13 2006
@@ -83,7 +83,17 @@
 except_clause: 'except' [test [',' test]]
 suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT
 
-test: and_test ('or' and_test)* | lambdef
+# Backward compatibility cruft to support:
+# [ x for x in lambda: True, lambda: False if x() ]
+# even while also allowing:
+# lambda x: 5 if x else 2
+# (But not a mix of the two)
+testlist_safe: old_test [(',' old_test)+ [',']]
+old_test: or_test | old_lambdef
+old_lambdef: 'lambda' [varargslist] ':' old_test
+
+test: or_test ['if' or_test 'else' test] | lambdef
+or_test: and_test ('or' and_test)*
 and_test: not_test ('and' not_test)*
 not_test: 'not' not_test | comparison
 comparison: expr (comp_op expr)*
@@ -110,7 +120,6 @@
 sliceop: ':' [test]
 exprlist: expr (',' expr)* [',']
 testlist: test (',' test)* [',']
-testlist_safe: test [(',' test)+ [',']]
 dictmaker: test ':' test (',' test ':' test)* [',']
 
 classdef: 'class' NAME ['(' [testlist] ')'] ':' suite
@@ -123,7 +132,7 @@
 list_if: 'if' test [list_iter]
 
 gen_iter: gen_for | gen_if
-gen_for: 'for' exprlist 'in' test [gen_iter]
+gen_for: 'for' exprlist 'in' or_test [gen_iter]
 gen_if: 'if' test [gen_iter]
 
 testlist1: test (',' test)*

Modified: python/trunk/Include/Python-ast.h
==============================================================================
--- python/trunk/Include/Python-ast.h	(original)
+++ python/trunk/Include/Python-ast.h	Mon Feb 27 01:24:13 2006
@@ -175,10 +175,10 @@
 
 struct _expr {
         enum { BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4,
-               Dict_kind=5, ListComp_kind=6, GeneratorExp_kind=7, Yield_kind=8,
-               Compare_kind=9, Call_kind=10, Repr_kind=11, Num_kind=12,
-               Str_kind=13, Attribute_kind=14, Subscript_kind=15, Name_kind=16,
-               List_kind=17, Tuple_kind=18 } kind;
+               IfExp_kind=5, Dict_kind=6, ListComp_kind=7, GeneratorExp_kind=8,
+               Yield_kind=9, Compare_kind=10, Call_kind=11, Repr_kind=12,
+               Num_kind=13, Str_kind=14, Attribute_kind=15, Subscript_kind=16,
+               Name_kind=17, List_kind=18, Tuple_kind=19 } kind;
         union {
                 struct {
                         boolop_ty op;
@@ -202,6 +202,12 @@
                 } Lambda;
                 
                 struct {
+                        expr_ty test;
+                        expr_ty body;
+                        expr_ty orelse;
+                } IfExp;
+                
+                struct {
                         asdl_seq *keys;
                         asdl_seq *values;
                 } Dict;
@@ -371,6 +377,8 @@
               *arena);
 expr_ty UnaryOp(unaryop_ty op, expr_ty operand, int lineno, PyArena *arena);
 expr_ty Lambda(arguments_ty args, expr_ty body, int lineno, PyArena *arena);
+expr_ty IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, PyArena
+              *arena);
 expr_ty Dict(asdl_seq * keys, asdl_seq * values, int lineno, PyArena *arena);
 expr_ty ListComp(expr_ty elt, asdl_seq * generators, int lineno, PyArena
                  *arena);

Modified: python/trunk/Include/graminit.h
==============================================================================
--- python/trunk/Include/graminit.h	(original)
+++ python/trunk/Include/graminit.h	Mon Feb 27 01:24:13 2006
@@ -40,40 +40,43 @@
 #define try_stmt 295
 #define except_clause 296
 #define suite 297
-#define test 298
-#define and_test 299
-#define not_test 300
-#define comparison 301
-#define comp_op 302
-#define expr 303
-#define xor_expr 304
-#define and_expr 305
-#define shift_expr 306
-#define arith_expr 307
-#define term 308
-#define factor 309
-#define power 310
-#define atom 311
-#define listmaker 312
-#define testlist_gexp 313
-#define lambdef 314
-#define trailer 315
-#define subscriptlist 316
-#define subscript 317
-#define sliceop 318
-#define exprlist 319
-#define testlist 320
-#define testlist_safe 321
-#define dictmaker 322
-#define classdef 323
-#define arglist 324
-#define argument 325
-#define list_iter 326
-#define list_for 327
-#define list_if 328
-#define gen_iter 329
-#define gen_for 330
-#define gen_if 331
-#define testlist1 332
-#define encoding_decl 333
-#define yield_expr 334
+#define testlist_safe 298
+#define old_test 299
+#define old_lambdef 300
+#define test 301
+#define or_test 302
+#define and_test 303
+#define not_test 304
+#define comparison 305
+#define comp_op 306
+#define expr 307
+#define xor_expr 308
+#define and_expr 309
+#define shift_expr 310
+#define arith_expr 311
+#define term 312
+#define factor 313
+#define power 314
+#define atom 315
+#define listmaker 316
+#define testlist_gexp 317
+#define lambdef 318
+#define trailer 319
+#define subscriptlist 320
+#define subscript 321
+#define sliceop 322
+#define exprlist 323
+#define testlist 324
+#define dictmaker 325
+#define classdef 326
+#define arglist 327
+#define argument 328
+#define list_iter 329
+#define list_for 330
+#define list_if 331
+#define gen_iter 332
+#define gen_for 333
+#define gen_if 334
+#define testlist1 335
+#define encoding_decl 336
+#define yield_expr 337

Modified: python/trunk/Lib/test/test_grammar.py
==============================================================================
--- python/trunk/Lib/test/test_grammar.py	(original)
+++ python/trunk/Lib/test/test_grammar.py	Mon Feb 27 01:24:13 2006
@@ -798,3 +798,28 @@
 x = 10; t = False; g = ((i,j) for i in range(x) if t for j in range(x))
 x = 5; t = True;
 verify([(i,j) for i in range(10) for j in range(5)] == list(g))
+
+# Test ifelse expressions in various cases
+def _checkeval(msg, ret):
+    "helper to check that evaluation of expressions is done correctly"
+    print x
+    return ret
+
+verify([ x() for x in lambda: True, lambda: False if x() ] == [True])
+verify([ x() for x in (lambda: True, lambda: False) if x() ] == [True])
+verify([ x(False) for x in (lambda x: False if x else True, lambda x: True if x else False) if x(False) ] == [True])
+verify((5 if 1 else _checkeval("check 1", 0)) == 5)
+verify((_checkeval("check 2", 0) if 0 else 5) == 5)
+verify((5 and 6 if 0 else 1) == 1)
+verify(((5 and 6) if 0 else 1) == 1)
+verify((5 and (6 if 1 else 1)) == 6)
+verify((0 or _checkeval("check 3", 2) if 0 else 3) == 3)
+verify((1 or _checkeval("check 4", 2) if 1 else _checkeval("check 5", 3)) == 1)
+verify((0 or 5 if 1 else _checkeval("check 6", 3)) == 5)
+verify((not 5 if 1 else 1) == False)
+verify((not 5 if 0 else 1) == 1)
+verify((6 + 1 if 1 else 2) == 7)
+verify((6 - 1 if 1 else 2) == 5)
+verify((6 * 2 if 1 else 4) == 12)
+verify((6 / 2 if 1 else 3) == 3)
+verify((6 < 4 if 0 else 2) == 2)

Modified: python/trunk/Parser/Python.asdl
==============================================================================
--- python/trunk/Parser/Python.asdl	(original)
+++ python/trunk/Parser/Python.asdl	Mon Feb 27 01:24:13 2006
@@ -52,6 +52,7 @@
 	     | BinOp(expr left, operator op, expr right)
 	     | UnaryOp(unaryop op, expr operand)
 	     | Lambda(arguments args, expr body)
+	     | IfExp(expr test, expr body, expr orelse)
 	     | Dict(expr* keys, expr* values)
 	     | ListComp(expr elt, comprehension* generators)
 	     | GeneratorExp(expr elt, comprehension* generators)

Modified: python/trunk/Python/Python-ast.c
==============================================================================
--- python/trunk/Python/Python-ast.c	(original)
+++ python/trunk/Python/Python-ast.c	Mon Feb 27 01:24:13 2006
@@ -151,6 +151,12 @@
         "args",
         "body",
 };
+PyTypeObject *IfExp_type;
+char *IfExp_fields[]={
+        "test",
+        "body",
+        "orelse",
+};
 PyTypeObject *Dict_type;
 char *Dict_fields[]={
         "keys",
@@ -431,6 +437,7 @@
         BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
         UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
         Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
+        IfExp_type = make_type("IfExp", expr_type, IfExp_fields, 3);
         Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
         ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
         GeneratorExp_type = make_type("GeneratorExp", expr_type,
@@ -1138,6 +1145,38 @@
 }
 
 expr_ty
+IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, PyArena *arena)
+{
+        expr_ty p;
+        if (!test) {
+                PyErr_SetString(PyExc_ValueError,
+                                "field test is required for IfExp");
+                return NULL;
+        }
+        if (!body) {
+                PyErr_SetString(PyExc_ValueError,
+                                "field body is required for IfExp");
+                return NULL;
+        }
+        if (!orelse) {
+                PyErr_SetString(PyExc_ValueError,
+                                "field orelse is required for IfExp");
+                return NULL;
+        }
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
+        if (!p) {
+                PyErr_NoMemory();
+                return NULL;
+        }
+        p->kind = IfExp_kind;
+        p->v.IfExp.test = test;
+        p->v.IfExp.body = body;
+        p->v.IfExp.orelse = orelse;
+        p->lineno = lineno;
+        return p;
+}
+
+expr_ty
 Dict(asdl_seq * keys, asdl_seq * values, int lineno, PyArena *arena)
 {
         expr_ty p;
@@ -2077,6 +2116,25 @@
                         goto failed;
                 Py_DECREF(value);
                 break;
+        case IfExp_kind:
+                result = PyType_GenericNew(IfExp_type, NULL, NULL);
+                if (!result) goto failed;
+                value = ast2obj_expr(o->v.IfExp.test);
+                if (!value) goto failed;
+                if (PyObject_SetAttrString(result, "test", value) == -1)
+                        goto failed;
+                Py_DECREF(value);
+                value = ast2obj_expr(o->v.IfExp.body);
+                if (!value) goto failed;
+                if (PyObject_SetAttrString(result, "body", value) == -1)
+                        goto failed;
+                Py_DECREF(value);
+                value = ast2obj_expr(o->v.IfExp.orelse);
+                if (!value) goto failed;
+                if (PyObject_SetAttrString(result, "orelse", value) == -1)
+                        goto failed;
+                Py_DECREF(value);
+                break;
         case Dict_kind:
                 result = PyType_GenericNew(Dict_type, NULL, NULL);
                 if (!result) goto failed;

Modified: python/trunk/Python/ast.c
==============================================================================
--- python/trunk/Python/ast.c	(original)
+++ python/trunk/Python/ast.c	Mon Feb 27 01:24:13 2006
@@ -847,6 +847,25 @@
     return Lambda(args, expression, LINENO(n), c->c_arena);
 }
 
+static expr_ty
+ast_for_ifexpr(struct compiling *c, const node *n)
+{
+    /* test: or_test 'if' or_test 'else' test */ 
+    expr_ty expression, body, orelse;
+
+    assert(NCH(n) >= 3);
+    body = ast_for_expr(c, CHILD(n, 0));
+    if (!body)
+    	return NULL;
+    expression = ast_for_expr(c, CHILD(n, 2));
+    if (!expression)
+    	return NULL;
+    orelse = ast_for_expr(c, CHILD(n, 4));
+    if (!orelse)
+	return NULL;
+    return IfExp(expression, body, orelse, LINENO(n), c->c_arena);
+}
+
 /* Count the number of 'for' loop in a list comprehension.
 
    Helper for ast_for_listcomp().
@@ -1456,7 +1475,8 @@
 ast_for_expr(struct compiling *c, const node *n)
 {
     /* handle the full range of simple expressions
-       test: and_test ('or' and_test)* | lambdef
+       test: or_test ['if' or_test 'else' test] | lambdef
+       or_test: and_test ('or' and_test)* 
        and_test: not_test ('and' not_test)*
        not_test: 'not' not_test | comparison
        comparison: expr (comp_op expr)*
@@ -1468,6 +1488,15 @@
        term: factor (('*'|'/'|'%'|'//') factor)*
        factor: ('+'|'-'|'~') factor | power
        power: atom trailer* ('**' factor)*
+
+       As well as modified versions that exist for backward compatibility,
+       to explicitly allow:
+       [ x for x in lambda: 0, lambda: 1 ]
+       (which would be ambiguous without these extra rules)
+       
+       old_test: or_test | old_lambdef
+       old_lambdef: 'lambda' [vararglist] ':' old_test
+
     */
 
     asdl_seq *seq;
@@ -1476,9 +1505,14 @@
  loop:
     switch (TYPE(n)) {
         case test:
-            if (TYPE(CHILD(n, 0)) == lambdef)
+        case old_test:
+            if (TYPE(CHILD(n, 0)) == lambdef ||
+                TYPE(CHILD(n, 0)) == old_lambdef)
                 return ast_for_lambdef(c, CHILD(n, 0));
-            /* Fall through to and_test */
+            else if (NCH(n) > 1)
+                return ast_for_ifexpr(c, n);
+	    /* Fallthrough */
+	case or_test:
         case and_test:
             if (NCH(n) == 1) {
                 n = CHILD(n, 0);

Modified: python/trunk/Python/compile.c
==============================================================================
--- python/trunk/Python/compile.c	(original)
+++ python/trunk/Python/compile.c	Mon Feb 27 01:24:13 2006
@@ -2010,6 +2010,30 @@
 }
 
 static int
+compiler_ifexp(struct compiler *c, expr_ty e)
+{
+	basicblock *end, *next;
+	
+	assert(e->kind == IfExp_kind);
+	end = compiler_new_block(c);
+	if (end == NULL)
+		return 0;
+	next = compiler_new_block(c);
+	if (next == NULL)
+		return 0;
+	VISIT(c, expr, e->v.IfExp.test);
+	ADDOP_JREL(c, JUMP_IF_FALSE, next);
+	ADDOP(c, POP_TOP);
+	VISIT(c, expr, e->v.IfExp.body);
+	ADDOP_JREL(c, JUMP_FORWARD, end);
+	compiler_use_next_block(c, next);
+	ADDOP(c, POP_TOP);
+	VISIT(c, expr, e->v.IfExp.orelse);
+	compiler_use_next_block(c, end);
+	return 1;
+}
+
+static int
 compiler_lambda(struct compiler *c, expr_ty e)
 {
 	PyCodeObject *co;
@@ -3290,6 +3314,8 @@
 		break;
         case Lambda_kind:
 		return compiler_lambda(c, e);
+	case IfExp_kind:
+		return compiler_ifexp(c, e);
         case Dict_kind:
 		/* XXX get rid of arg? */
 		ADDOP_I(c, BUILD_MAP, 0);

Modified: python/trunk/Python/graminit.c
==============================================================================
--- python/trunk/Python/graminit.c	(original)
+++ python/trunk/Python/graminit.c	Mon Feb 27 01:24:13 2006
@@ -924,669 +924,665 @@
 	{1, arcs_41_3},
 	{2, arcs_41_4},
 };
-static arc arcs_42_0[2] = {
-	{100, 1},
-	{102, 2},
+static arc arcs_42_0[1] = {
+	{101, 1},
 };
 static arc arcs_42_1[2] = {
-	{101, 3},
+	{27, 2},
 	{0, 1},
 };
 static arc arcs_42_2[1] = {
-	{0, 2},
+	{101, 3},
 };
-static arc arcs_42_3[1] = {
-	{100, 1},
+static arc arcs_42_3[2] = {
+	{27, 4},
+	{0, 3},
 };
-static state states_42[4] = {
-	{2, arcs_42_0},
+static arc arcs_42_4[2] = {
+	{101, 3},
+	{0, 4},
+};
+static state states_42[5] = {
+	{1, arcs_42_0},
 	{2, arcs_42_1},
 	{1, arcs_42_2},
-	{1, arcs_42_3},
+	{2, arcs_42_3},
+	{2, arcs_42_4},
 };
-static arc arcs_43_0[1] = {
+static arc arcs_43_0[2] = {
+	{102, 1},
 	{103, 1},
 };
-static arc arcs_43_1[2] = {
-	{104, 0},
+static arc arcs_43_1[1] = {
 	{0, 1},
 };
 static state states_43[2] = {
-	{1, arcs_43_0},
-	{2, arcs_43_1},
+	{2, arcs_43_0},
+	{1, arcs_43_1},
 };
-static arc arcs_44_0[2] = {
-	{105, 1},
-	{106, 2},
+static arc arcs_44_0[1] = {
+	{104, 1},
 };
-static arc arcs_44_1[1] = {
-	{103, 2},
+static arc arcs_44_1[2] = {
+	{23, 2},
+	{21, 3},
 };
 static arc arcs_44_2[1] = {
-	{0, 2},
+	{21, 3},
+};
+static arc arcs_44_3[1] = {
+	{101, 4},
 };
-static state states_44[3] = {
-	{2, arcs_44_0},
-	{1, arcs_44_1},
+static arc arcs_44_4[1] = {
+	{0, 4},
+};
+static state states_44[5] = {
+	{1, arcs_44_0},
+	{2, arcs_44_1},
 	{1, arcs_44_2},
+	{1, arcs_44_3},
+	{1, arcs_44_4},
 };
-static arc arcs_45_0[1] = {
-	{81, 1},
+static arc arcs_45_0[2] = {
+	{102, 1},
+	{105, 2},
 };
 static arc arcs_45_1[2] = {
-	{107, 0},
+	{89, 3},
 	{0, 1},
 };
-static state states_45[2] = {
-	{1, arcs_45_0},
-	{2, arcs_45_1},
+static arc arcs_45_2[1] = {
+	{0, 2},
 };
-static arc arcs_46_0[10] = {
-	{108, 1},
-	{109, 1},
-	{110, 1},
-	{111, 1},
-	{112, 1},
-	{113, 1},
-	{114, 1},
-	{82, 1},
-	{105, 2},
-	{115, 3},
+static arc arcs_45_3[1] = {
+	{102, 4},
 };
-static arc arcs_46_1[1] = {
-	{0, 1},
+static arc arcs_45_4[1] = {
+	{91, 5},
 };
-static arc arcs_46_2[1] = {
-	{82, 1},
+static arc arcs_45_5[1] = {
+	{26, 2},
 };
-static arc arcs_46_3[2] = {
-	{105, 1},
-	{0, 3},
+static state states_45[6] = {
+	{2, arcs_45_0},
+	{2, arcs_45_1},
+	{1, arcs_45_2},
+	{1, arcs_45_3},
+	{1, arcs_45_4},
+	{1, arcs_45_5},
+};
+static arc arcs_46_0[1] = {
+	{106, 1},
 };
-static state states_46[4] = {
-	{10, arcs_46_0},
-	{1, arcs_46_1},
-	{1, arcs_46_2},
-	{2, arcs_46_3},
+static arc arcs_46_1[2] = {
+	{107, 0},
+	{0, 1},
+};
+static state states_46[2] = {
+	{1, arcs_46_0},
+	{2, arcs_46_1},
 };
 static arc arcs_47_0[1] = {
-	{116, 1},
+	{108, 1},
 };
 static arc arcs_47_1[2] = {
-	{117, 0},
+	{109, 0},
 	{0, 1},
 };
 static state states_47[2] = {
 	{1, arcs_47_0},
 	{2, arcs_47_1},
 };
-static arc arcs_48_0[1] = {
-	{118, 1},
+static arc arcs_48_0[2] = {
+	{110, 1},
+	{111, 2},
 };
-static arc arcs_48_1[2] = {
-	{119, 0},
-	{0, 1},
+static arc arcs_48_1[1] = {
+	{108, 2},
 };
-static state states_48[2] = {
-	{1, arcs_48_0},
-	{2, arcs_48_1},
+static arc arcs_48_2[1] = {
+	{0, 2},
+};
+static state states_48[3] = {
+	{2, arcs_48_0},
+	{1, arcs_48_1},
+	{1, arcs_48_2},
 };
 static arc arcs_49_0[1] = {
-	{120, 1},
+	{81, 1},
 };
 static arc arcs_49_1[2] = {
-	{121, 0},
+	{112, 0},
 	{0, 1},
 };
 static state states_49[2] = {
 	{1, arcs_49_0},
 	{2, arcs_49_1},
 };
-static arc arcs_50_0[1] = {
-	{122, 1},
+static arc arcs_50_0[10] = {
+	{113, 1},
+	{114, 1},
+	{115, 1},
+	{116, 1},
+	{117, 1},
+	{118, 1},
+	{119, 1},
+	{82, 1},
+	{110, 2},
+	{120, 3},
 };
-static arc arcs_50_1[3] = {
-	{123, 0},
-	{57, 0},
+static arc arcs_50_1[1] = {
 	{0, 1},
 };
-static state states_50[2] = {
-	{1, arcs_50_0},
-	{3, arcs_50_1},
+static arc arcs_50_2[1] = {
+	{82, 1},
+};
+static arc arcs_50_3[2] = {
+	{110, 1},
+	{0, 3},
+};
+static state states_50[4] = {
+	{10, arcs_50_0},
+	{1, arcs_50_1},
+	{1, arcs_50_2},
+	{2, arcs_50_3},
 };
 static arc arcs_51_0[1] = {
-	{124, 1},
+	{121, 1},
 };
-static arc arcs_51_1[3] = {
-	{125, 0},
-	{126, 0},
+static arc arcs_51_1[2] = {
+	{122, 0},
 	{0, 1},
 };
 static state states_51[2] = {
 	{1, arcs_51_0},
-	{3, arcs_51_1},
+	{2, arcs_51_1},
 };
 static arc arcs_52_0[1] = {
-	{127, 1},
+	{123, 1},
 };
-static arc arcs_52_1[5] = {
-	{28, 0},
-	{128, 0},
-	{129, 0},
-	{130, 0},
+static arc arcs_52_1[2] = {
+	{124, 0},
 	{0, 1},
 };
 static state states_52[2] = {
 	{1, arcs_52_0},
-	{5, arcs_52_1},
+	{2, arcs_52_1},
 };
-static arc arcs_53_0[4] = {
+static arc arcs_53_0[1] = {
 	{125, 1},
-	{126, 1},
+};
+static arc arcs_53_1[2] = {
+	{126, 0},
+	{0, 1},
+};
+static state states_53[2] = {
+	{1, arcs_53_0},
+	{2, arcs_53_1},
+};
+static arc arcs_54_0[1] = {
+	{127, 1},
+};
+static arc arcs_54_1[3] = {
+	{128, 0},
+	{57, 0},
+	{0, 1},
+};
+static state states_54[2] = {
+	{1, arcs_54_0},
+	{3, arcs_54_1},
+};
+static arc arcs_55_0[1] = {
+	{129, 1},
+};
+static arc arcs_55_1[3] = {
+	{130, 0},
+	{131, 0},
+	{0, 1},
+};
+static state states_55[2] = {
+	{1, arcs_55_0},
+	{3, arcs_55_1},
+};
+static arc arcs_56_0[1] = {
+	{132, 1},
+};
+static arc arcs_56_1[5] = {
+	{28, 0},
+	{133, 0},
+	{134, 0},
+	{135, 0},
+	{0, 1},
+};
+static state states_56[2] = {
+	{1, arcs_56_0},
+	{5, arcs_56_1},
+};
+static arc arcs_57_0[4] = {
+	{130, 1},
 	{131, 1},
-	{132, 2},
+	{136, 1},
+	{137, 2},
 };
-static arc arcs_53_1[1] = {
-	{127, 2},
+static arc arcs_57_1[1] = {
+	{132, 2},
 };
-static arc arcs_53_2[1] = {
+static arc arcs_57_2[1] = {
 	{0, 2},
 };
-static state states_53[3] = {
-	{4, arcs_53_0},
-	{1, arcs_53_1},
-	{1, arcs_53_2},
+static state states_57[3] = {
+	{4, arcs_57_0},
+	{1, arcs_57_1},
+	{1, arcs_57_2},
 };
-static arc arcs_54_0[1] = {
-	{133, 1},
+static arc arcs_58_0[1] = {
+	{138, 1},
 };
-static arc arcs_54_1[3] = {
-	{134, 1},
+static arc arcs_58_1[3] = {
+	{139, 1},
 	{29, 2},
 	{0, 1},
 };
-static arc arcs_54_2[1] = {
-	{127, 3},
+static arc arcs_58_2[1] = {
+	{132, 3},
 };
-static arc arcs_54_3[1] = {
+static arc arcs_58_3[1] = {
 	{0, 3},
 };
-static state states_54[4] = {
-	{1, arcs_54_0},
-	{3, arcs_54_1},
-	{1, arcs_54_2},
-	{1, arcs_54_3},
+static state states_58[4] = {
+	{1, arcs_58_0},
+	{3, arcs_58_1},
+	{1, arcs_58_2},
+	{1, arcs_58_3},
 };
-static arc arcs_55_0[7] = {
+static arc arcs_59_0[7] = {
 	{13, 1},
-	{136, 2},
-	{139, 3},
-	{142, 4},
+	{141, 2},
+	{144, 3},
+	{147, 4},
 	{19, 5},
-	{144, 5},
-	{145, 6},
+	{149, 5},
+	{150, 6},
 };
-static arc arcs_55_1[3] = {
+static arc arcs_59_1[3] = {
 	{43, 7},
-	{135, 7},
+	{140, 7},
 	{15, 5},
 };
-static arc arcs_55_2[2] = {
-	{137, 8},
-	{138, 5},
-};
-static arc arcs_55_3[2] = {
-	{140, 9},
-	{141, 5},
+static arc arcs_59_2[2] = {
+	{142, 8},
+	{143, 5},
+};
+static arc arcs_59_3[2] = {
+	{145, 9},
+	{146, 5},
 };
-static arc arcs_55_4[1] = {
-	{143, 10},
+static arc arcs_59_4[1] = {
+	{148, 10},
 };
-static arc arcs_55_5[1] = {
+static arc arcs_59_5[1] = {
 	{0, 5},
 };
-static arc arcs_55_6[2] = {
-	{145, 6},
+static arc arcs_59_6[2] = {
+	{150, 6},
 	{0, 6},
 };
-static arc arcs_55_7[1] = {
+static arc arcs_59_7[1] = {
 	{15, 5},
 };
-static arc arcs_55_8[1] = {
-	{138, 5},
+static arc arcs_59_8[1] = {
+	{143, 5},
 };
-static arc arcs_55_9[1] = {
-	{141, 5},
+static arc arcs_59_9[1] = {
+	{146, 5},
 };
-static arc arcs_55_10[1] = {
-	{142, 5},
+static arc arcs_59_10[1] = {
+	{147, 5},
 };
-static state states_55[11] = {
-	{7, arcs_55_0},
-	{3, arcs_55_1},
-	{2, arcs_55_2},
-	{2, arcs_55_3},
-	{1, arcs_55_4},
-	{1, arcs_55_5},
-	{2, arcs_55_6},
-	{1, arcs_55_7},
-	{1, arcs_55_8},
-	{1, arcs_55_9},
-	{1, arcs_55_10},
+static state states_59[11] = {
+	{7, arcs_59_0},
+	{3, arcs_59_1},
+	{2, arcs_59_2},
+	{2, arcs_59_3},
+	{1, arcs_59_4},
+	{1, arcs_59_5},
+	{2, arcs_59_6},
+	{1, arcs_59_7},
+	{1, arcs_59_8},
+	{1, arcs_59_9},
+	{1, arcs_59_10},
 };
-static arc arcs_56_0[1] = {
+static arc arcs_60_0[1] = {
 	{26, 1},
 };
-static arc arcs_56_1[3] = {
-	{146, 2},
+static arc arcs_60_1[3] = {
+	{151, 2},
 	{27, 3},
 	{0, 1},
 };
-static arc arcs_56_2[1] = {
+static arc arcs_60_2[1] = {
 	{0, 2},
 };
-static arc arcs_56_3[2] = {
+static arc arcs_60_3[2] = {
 	{26, 4},
 	{0, 3},
 };
-static arc arcs_56_4[2] = {
+static arc arcs_60_4[2] = {
 	{27, 3},
 	{0, 4},
 };
-static state states_56[5] = {
-	{1, arcs_56_0},
-	{3, arcs_56_1},
-	{1, arcs_56_2},
-	{2, arcs_56_3},
-	{2, arcs_56_4},
+static state states_60[5] = {
+	{1, arcs_60_0},
+	{3, arcs_60_1},
+	{1, arcs_60_2},
+	{2, arcs_60_3},
+	{2, arcs_60_4},
 };
-static arc arcs_57_0[1] = {
+static arc arcs_61_0[1] = {
 	{26, 1},
 };
-static arc arcs_57_1[3] = {
-	{147, 2},
+static arc arcs_61_1[3] = {
+	{152, 2},
 	{27, 3},
 	{0, 1},
 };
-static arc arcs_57_2[1] = {
+static arc arcs_61_2[1] = {
 	{0, 2},
 };
-static arc arcs_57_3[2] = {
+static arc arcs_61_3[2] = {
 	{26, 4},
 	{0, 3},
 };
-static arc arcs_57_4[2] = {
+static arc arcs_61_4[2] = {
 	{27, 3},
 	{0, 4},
 };
-static state states_57[5] = {
-	{1, arcs_57_0},
-	{3, arcs_57_1},
-	{1, arcs_57_2},
-	{2, arcs_57_3},
-	{2, arcs_57_4},
+static state states_61[5] = {
+	{1, arcs_61_0},
+	{3, arcs_61_1},
+	{1, arcs_61_2},
+	{2, arcs_61_3},
+	{2, arcs_61_4},
 };
-static arc arcs_58_0[1] = {
-	{148, 1},
+static arc arcs_62_0[1] = {
+	{104, 1},
 };
-static arc arcs_58_1[2] = {
+static arc arcs_62_1[2] = {
 	{23, 2},
 	{21, 3},
 };
-static arc arcs_58_2[1] = {
+static arc arcs_62_2[1] = {
 	{21, 3},
 };
-static arc arcs_58_3[1] = {
+static arc arcs_62_3[1] = {
 	{26, 4},
 };
-static arc arcs_58_4[1] = {
+static arc arcs_62_4[1] = {
 	{0, 4},
 };
-static state states_58[5] = {
-	{1, arcs_58_0},
-	{2, arcs_58_1},
-	{1, arcs_58_2},
-	{1, arcs_58_3},
-	{1, arcs_58_4},
+static state states_62[5] = {
+	{1, arcs_62_0},
+	{2, arcs_62_1},
+	{1, arcs_62_2},
+	{1, arcs_62_3},
+	{1, arcs_62_4},
 };
-static arc arcs_59_0[3] = {
+static arc arcs_63_0[3] = {
 	{13, 1},
-	{136, 2},
+	{141, 2},
 	{75, 3},
 };
-static arc arcs_59_1[2] = {
+static arc arcs_63_1[2] = {
 	{14, 4},
 	{15, 5},
 };
-static arc arcs_59_2[1] = {
-	{149, 6},
+static arc arcs_63_2[1] = {
+	{153, 6},
 };
-static arc arcs_59_3[1] = {
+static arc arcs_63_3[1] = {
 	{19, 5},
 };
-static arc arcs_59_4[1] = {
+static arc arcs_63_4[1] = {
 	{15, 5},
 };
-static arc arcs_59_5[1] = {
+static arc arcs_63_5[1] = {
 	{0, 5},
 };
-static arc arcs_59_6[1] = {
-	{138, 5},
+static arc arcs_63_6[1] = {
+	{143, 5},
 };
-static state states_59[7] = {
-	{3, arcs_59_0},
-	{2, arcs_59_1},
-	{1, arcs_59_2},
-	{1, arcs_59_3},
-	{1, arcs_59_4},
-	{1, arcs_59_5},
-	{1, arcs_59_6},
+static state states_63[7] = {
+	{3, arcs_63_0},
+	{2, arcs_63_1},
+	{1, arcs_63_2},
+	{1, arcs_63_3},
+	{1, arcs_63_4},
+	{1, arcs_63_5},
+	{1, arcs_63_6},
 };
-static arc arcs_60_0[1] = {
-	{150, 1},
+static arc arcs_64_0[1] = {
+	{154, 1},
 };
-static arc arcs_60_1[2] = {
+static arc arcs_64_1[2] = {
 	{27, 2},
 	{0, 1},
 };
-static arc arcs_60_2[2] = {
-	{150, 1},
+static arc arcs_64_2[2] = {
+	{154, 1},
 	{0, 2},
 };
-static state states_60[3] = {
-	{1, arcs_60_0},
-	{2, arcs_60_1},
-	{2, arcs_60_2},
+static state states_64[3] = {
+	{1, arcs_64_0},
+	{2, arcs_64_1},
+	{2, arcs_64_2},
 };
-static arc arcs_61_0[3] = {
+static arc arcs_65_0[3] = {
 	{75, 1},
 	{26, 2},
 	{21, 3},
 };
-static arc arcs_61_1[1] = {
+static arc arcs_65_1[1] = {
 	{75, 4},
 };
-static arc arcs_61_2[2] = {
+static arc arcs_65_2[2] = {
 	{21, 3},
 	{0, 2},
 };
-static arc arcs_61_3[3] = {
+static arc arcs_65_3[3] = {
 	{26, 5},
-	{151, 6},
+	{155, 6},
 	{0, 3},
 };
-static arc arcs_61_4[1] = {
+static arc arcs_65_4[1] = {
 	{75, 6},
 };
-static arc arcs_61_5[2] = {
-	{151, 6},
+static arc arcs_65_5[2] = {
+	{155, 6},
 	{0, 5},
 };
-static arc arcs_61_6[1] = {
+static arc arcs_65_6[1] = {
 	{0, 6},
 };
-static state states_61[7] = {
-	{3, arcs_61_0},
-	{1, arcs_61_1},
-	{2, arcs_61_2},
-	{3, arcs_61_3},
-	{1, arcs_61_4},
-	{2, arcs_61_5},
-	{1, arcs_61_6},
+static state states_65[7] = {
+	{3, arcs_65_0},
+	{1, arcs_65_1},
+	{2, arcs_65_2},
+	{3, arcs_65_3},
+	{1, arcs_65_4},
+	{2, arcs_65_5},
+	{1, arcs_65_6},
 };
-static arc arcs_62_0[1] = {
+static arc arcs_66_0[1] = {
 	{21, 1},
 };
-static arc arcs_62_1[2] = {
+static arc arcs_66_1[2] = {
 	{26, 2},
 	{0, 1},
 };
-static arc arcs_62_2[1] = {
+static arc arcs_66_2[1] = {
 	{0, 2},
 };
-static state states_62[3] = {
-	{1, arcs_62_0},
-	{2, arcs_62_1},
-	{1, arcs_62_2},
+static state states_66[3] = {
+	{1, arcs_66_0},
+	{2, arcs_66_1},
+	{1, arcs_66_2},
 };
-static arc arcs_63_0[1] = {
+static arc arcs_67_0[1] = {
 	{81, 1},
 };
-static arc arcs_63_1[2] = {
+static arc arcs_67_1[2] = {
 	{27, 2},
 	{0, 1},
 };
-static arc arcs_63_2[2] = {
+static arc arcs_67_2[2] = {
 	{81, 1},
 	{0, 2},
 };
-static state states_63[3] = {
-	{1, arcs_63_0},
-	{2, arcs_63_1},
-	{2, arcs_63_2},
+static state states_67[3] = {
+	{1, arcs_67_0},
+	{2, arcs_67_1},
+	{2, arcs_67_2},
 };
-static arc arcs_64_0[1] = {
+static arc arcs_68_0[1] = {
 	{26, 1},
 };
-static arc arcs_64_1[2] = {
+static arc arcs_68_1[2] = {
 	{27, 2},
 	{0, 1},
 };
-static arc arcs_64_2[2] = {
+static arc arcs_68_2[2] = {
 	{26, 1},
 	{0, 2},
 };
-static state states_64[3] = {
-	{1, arcs_64_0},
-	{2, arcs_64_1},
-	{2, arcs_64_2},
-};
-static arc arcs_65_0[1] = {
-	{26, 1},
-};
-static arc arcs_65_1[2] = {
-	{27, 2},
-	{0, 1},
-};
-static arc arcs_65_2[1] = {
-	{26, 3},
-};
-static arc arcs_65_3[2] = {
-	{27, 4},
-	{0, 3},
-};
-static arc arcs_65_4[2] = {
-	{26, 3},
-	{0, 4},
-};
-static state states_65[5] = {
-	{1, arcs_65_0},
-	{2, arcs_65_1},
-	{1, arcs_65_2},
-	{2, arcs_65_3},
-	{2, arcs_65_4},
+static state states_68[3] = {
+	{1, arcs_68_0},
+	{2, arcs_68_1},
+	{2, arcs_68_2},
 };
-static arc arcs_66_0[1] = {
+static arc arcs_69_0[1] = {
 	{26, 1},
 };
-static arc arcs_66_1[1] = {
+static arc arcs_69_1[1] = {
 	{21, 2},
 };
-static arc arcs_66_2[1] = {
+static arc arcs_69_2[1] = {
 	{26, 3},
 };
-static arc arcs_66_3[2] = {
+static arc arcs_69_3[2] = {
 	{27, 4},
 	{0, 3},
 };
-static arc arcs_66_4[2] = {
+static arc arcs_69_4[2] = {
 	{26, 1},
 	{0, 4},
 };
-static state states_66[5] = {
-	{1, arcs_66_0},
-	{1, arcs_66_1},
-	{1, arcs_66_2},
-	{2, arcs_66_3},
-	{2, arcs_66_4},
+static state states_69[5] = {
+	{1, arcs_69_0},
+	{1, arcs_69_1},
+	{1, arcs_69_2},
+	{2, arcs_69_3},
+	{2, arcs_69_4},
 };
-static arc arcs_67_0[1] = {
-	{153, 1},
+static arc arcs_70_0[1] = {
+	{156, 1},
 };
-static arc arcs_67_1[1] = {
+static arc arcs_70_1[1] = {
 	{19, 2},
 };
-static arc arcs_67_2[2] = {
+static arc arcs_70_2[2] = {
 	{13, 3},
 	{21, 4},
 };
-static arc arcs_67_3[2] = {
+static arc arcs_70_3[2] = {
 	{9, 5},
 	{15, 6},
 };
-static arc arcs_67_4[1] = {
+static arc arcs_70_4[1] = {
 	{22, 7},
 };
-static arc arcs_67_5[1] = {
+static arc arcs_70_5[1] = {
 	{15, 6},
 };
-static arc arcs_67_6[1] = {
+static arc arcs_70_6[1] = {
 	{21, 4},
 };
-static arc arcs_67_7[1] = {
+static arc arcs_70_7[1] = {
 	{0, 7},
 };
-static state states_67[8] = {
-	{1, arcs_67_0},
-	{1, arcs_67_1},
-	{2, arcs_67_2},
-	{2, arcs_67_3},
-	{1, arcs_67_4},
-	{1, arcs_67_5},
-	{1, arcs_67_6},
-	{1, arcs_67_7},
+static state states_70[8] = {
+	{1, arcs_70_0},
+	{1, arcs_70_1},
+	{2, arcs_70_2},
+	{2, arcs_70_3},
+	{1, arcs_70_4},
+	{1, arcs_70_5},
+	{1, arcs_70_6},
+	{1, arcs_70_7},
 };
-static arc arcs_68_0[3] = {
-	{154, 1},
+static arc arcs_71_0[3] = {
+	{157, 1},
 	{28, 2},
 	{29, 3},
 };
-static arc arcs_68_1[2] = {
+static arc arcs_71_1[2] = {
 	{27, 4},
 	{0, 1},
 };
-static arc arcs_68_2[1] = {
+static arc arcs_71_2[1] = {
 	{26, 5},
 };
-static arc arcs_68_3[1] = {
+static arc arcs_71_3[1] = {
 	{26, 6},
 };
-static arc arcs_68_4[4] = {
-	{154, 1},
+static arc arcs_71_4[4] = {
+	{157, 1},
 	{28, 2},
 	{29, 3},
 	{0, 4},
 };
-static arc arcs_68_5[2] = {
+static arc arcs_71_5[2] = {
 	{27, 7},
 	{0, 5},
 };
-static arc arcs_68_6[1] = {
+static arc arcs_71_6[1] = {
 	{0, 6},
 };
-static arc arcs_68_7[1] = {
+static arc arcs_71_7[1] = {
 	{29, 3},
 };
-static state states_68[8] = {
-	{3, arcs_68_0},
-	{2, arcs_68_1},
-	{1, arcs_68_2},
-	{1, arcs_68_3},
-	{4, arcs_68_4},
-	{2, arcs_68_5},
-	{1, arcs_68_6},
-	{1, arcs_68_7},
-};
-static arc arcs_69_0[1] = {
-	{26, 1},
-};
-static arc arcs_69_1[3] = {
-	{147, 2},
-	{25, 3},
-	{0, 1},
-};
-static arc arcs_69_2[1] = {
-	{0, 2},
-};
-static arc arcs_69_3[1] = {
-	{26, 2},
-};
-static state states_69[4] = {
-	{1, arcs_69_0},
-	{3, arcs_69_1},
-	{1, arcs_69_2},
-	{1, arcs_69_3},
-};
-static arc arcs_70_0[2] = {
-	{146, 1},
-	{156, 1},
-};
-static arc arcs_70_1[1] = {
-	{0, 1},
-};
-static state states_70[2] = {
-	{2, arcs_70_0},
-	{1, arcs_70_1},
-};
-static arc arcs_71_0[1] = {
-	{93, 1},
-};
-static arc arcs_71_1[1] = {
-	{59, 2},
-};
-static arc arcs_71_2[1] = {
-	{82, 3},
-};
-static arc arcs_71_3[1] = {
-	{152, 4},
-};
-static arc arcs_71_4[2] = {
-	{155, 5},
-	{0, 4},
-};
-static arc arcs_71_5[1] = {
-	{0, 5},
-};
-static state states_71[6] = {
-	{1, arcs_71_0},
-	{1, arcs_71_1},
+static state states_71[8] = {
+	{3, arcs_71_0},
+	{2, arcs_71_1},
 	{1, arcs_71_2},
 	{1, arcs_71_3},
-	{2, arcs_71_4},
-	{1, arcs_71_5},
+	{4, arcs_71_4},
+	{2, arcs_71_5},
+	{1, arcs_71_6},
+	{1, arcs_71_7},
 };
 static arc arcs_72_0[1] = {
-	{89, 1},
+	{26, 1},
 };
-static arc arcs_72_1[1] = {
-	{26, 2},
+static arc arcs_72_1[3] = {
+	{152, 2},
+	{25, 3},
+	{0, 1},
 };
-static arc arcs_72_2[2] = {
-	{155, 3},
+static arc arcs_72_2[1] = {
 	{0, 2},
 };
 static arc arcs_72_3[1] = {
-	{0, 3},
+	{26, 2},
 };
 static state states_72[4] = {
 	{1, arcs_72_0},
-	{1, arcs_72_1},
-	{2, arcs_72_2},
+	{3, arcs_72_1},
+	{1, arcs_72_2},
 	{1, arcs_72_3},
 };
 static arc arcs_73_0[2] = {
-	{147, 1},
-	{158, 1},
+	{151, 1},
+	{159, 1},
 };
 static arc arcs_73_1[1] = {
 	{0, 1},
@@ -1605,10 +1601,10 @@
 	{82, 3},
 };
 static arc arcs_74_3[1] = {
-	{26, 4},
+	{100, 4},
 };
 static arc arcs_74_4[2] = {
-	{157, 5},
+	{158, 5},
 	{0, 4},
 };
 static arc arcs_74_5[1] = {
@@ -1629,7 +1625,7 @@
 	{26, 2},
 };
 static arc arcs_75_2[2] = {
-	{157, 3},
+	{158, 3},
 	{0, 2},
 };
 static arc arcs_75_3[1] = {
@@ -1641,49 +1637,106 @@
 	{2, arcs_75_2},
 	{1, arcs_75_3},
 };
-static arc arcs_76_0[1] = {
-	{26, 1},
+static arc arcs_76_0[2] = {
+	{152, 1},
+	{161, 1},
 };
-static arc arcs_76_1[2] = {
-	{27, 0},
+static arc arcs_76_1[1] = {
 	{0, 1},
 };
 static state states_76[2] = {
-	{1, arcs_76_0},
-	{2, arcs_76_1},
+	{2, arcs_76_0},
+	{1, arcs_76_1},
 };
 static arc arcs_77_0[1] = {
-	{19, 1},
+	{93, 1},
 };
 static arc arcs_77_1[1] = {
-	{0, 1},
+	{59, 2},
+};
+static arc arcs_77_2[1] = {
+	{82, 3},
+};
+static arc arcs_77_3[1] = {
+	{102, 4},
+};
+static arc arcs_77_4[2] = {
+	{160, 5},
+	{0, 4},
 };
-static state states_77[2] = {
+static arc arcs_77_5[1] = {
+	{0, 5},
+};
+static state states_77[6] = {
 	{1, arcs_77_0},
 	{1, arcs_77_1},
+	{1, arcs_77_2},
+	{1, arcs_77_3},
+	{2, arcs_77_4},
+	{1, arcs_77_5},
 };
 static arc arcs_78_0[1] = {
-	{160, 1},
+	{89, 1},
+};
+static arc arcs_78_1[1] = {
+	{26, 2},
+};
+static arc arcs_78_2[2] = {
+	{160, 3},
+	{0, 2},
+};
+static arc arcs_78_3[1] = {
+	{0, 3},
+};
+static state states_78[4] = {
+	{1, arcs_78_0},
+	{1, arcs_78_1},
+	{2, arcs_78_2},
+	{1, arcs_78_3},
+};
+static arc arcs_79_0[1] = {
+	{26, 1},
+};
+static arc arcs_79_1[2] = {
+	{27, 0},
+	{0, 1},
+};
+static state states_79[2] = {
+	{1, arcs_79_0},
+	{2, arcs_79_1},
+};
+static arc arcs_80_0[1] = {
+	{19, 1},
+};
+static arc arcs_80_1[1] = {
+	{0, 1},
+};
+static state states_80[2] = {
+	{1, arcs_80_0},
+	{1, arcs_80_1},
 };
-static arc arcs_78_1[2] = {
+static arc arcs_81_0[1] = {
+	{163, 1},
+};
+static arc arcs_81_1[2] = {
 	{9, 2},
 	{0, 1},
 };
-static arc arcs_78_2[1] = {
+static arc arcs_81_2[1] = {
 	{0, 2},
 };
-static state states_78[3] = {
-	{1, arcs_78_0},
-	{2, arcs_78_1},
-	{1, arcs_78_2},
+static state states_81[3] = {
+	{1, arcs_81_0},
+	{2, arcs_81_1},
+	{1, arcs_81_2},
 };
-static dfa dfas[79] = {
+static dfa dfas[82] = {
 	{256, "single_input", 0, 3, states_0,
-	 "\004\050\014\000\000\000\000\025\074\205\011\162\000\002\000\140\010\111\023\002\001"},
+	 "\004\050\014\000\000\000\000\025\074\205\011\162\000\101\000\000\014\041\151\020\010"},
 	{257, "file_input", 0, 2, states_1,
-	 "\204\050\014\000\000\000\000\025\074\205\011\162\000\002\000\140\010\111\023\002\001"},
+	 "\204\050\014\000\000\000\000\025\074\205\011\162\000\101\000\000\014\041\151\020\010"},
 	{258, "eval_input", 0, 3, states_2,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
 	{259, "decorator", 0, 7, states_3,
 	 "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{260, "decorators", 0, 2, states_4,
@@ -1699,13 +1752,13 @@
 	{265, "fplist", 0, 3, states_9,
 	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{266, "stmt", 0, 2, states_10,
-	 "\000\050\014\000\000\000\000\025\074\205\011\162\000\002\000\140\010\111\023\002\001"},
+	 "\000\050\014\000\000\000\000\025\074\205\011\162\000\101\000\000\014\041\151\020\010"},
 	{267, "simple_stmt", 0, 4, states_11,
-	 "\000\040\010\000\000\000\000\025\074\205\011\000\000\002\000\140\010\111\023\000\001"},
+	 "\000\040\010\000\000\000\000\025\074\205\011\000\000\101\000\000\014\041\151\000\010"},
 	{268, "small_stmt", 0, 2, states_12,
-	 "\000\040\010\000\000\000\000\025\074\205\011\000\000\002\000\140\010\111\023\000\001"},
+	 "\000\040\010\000\000\000\000\025\074\205\011\000\000\101\000\000\014\041\151\000\010"},
 	{269, "expr_stmt", 0, 6, states_13,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
 	{270, "augassign", 0, 2, states_14,
 	 "\000\000\000\000\000\360\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{271, "print_stmt", 0, 9, states_15,
@@ -1715,7 +1768,7 @@
 	{273, "pass_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"},
 	{274, "flow_stmt", 0, 2, states_18,
-	 "\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\001"},
+	 "\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\010"},
 	{275, "break_stmt", 0, 2, states_19,
 	 "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{276, "continue_stmt", 0, 2, states_20,
@@ -1723,7 +1776,7 @@
 	{277, "return_stmt", 0, 3, states_21,
 	 "\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{278, "yield_stmt", 0, 2, states_22,
-	 "\000\000\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\000\000\000\010"},
 	{279, "raise_stmt", 0, 7, states_23,
 	 "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{280, "import_stmt", 0, 2, states_24,
@@ -1749,7 +1802,7 @@
 	{290, "assert_stmt", 0, 5, states_34,
 	 "\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000"},
 	{291, "compound_stmt", 0, 2, states_35,
-	 "\000\010\004\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\002\000"},
+	 "\000\010\004\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\020\000"},
 	{292, "if_stmt", 0, 8, states_36,
 	 "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
 	{293, "while_stmt", 0, 8, states_37,
@@ -1761,83 +1814,89 @@
 	{296, "except_clause", 0, 5, states_40,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
 	{297, "suite", 0, 5, states_41,
-	 "\004\040\010\000\000\000\000\025\074\205\011\000\000\002\000\140\010\111\023\000\001"},
-	{298, "test", 0, 4, states_42,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{299, "and_test", 0, 2, states_43,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\003\000\000"},
-	{300, "not_test", 0, 3, states_44,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\003\000\000"},
-	{301, "comparison", 0, 2, states_45,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{302, "comp_op", 0, 4, states_46,
-	 "\000\000\000\000\000\000\000\000\000\000\004\000\000\362\017\000\000\000\000\000\000"},
-	{303, "expr", 0, 2, states_47,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{304, "xor_expr", 0, 2, states_48,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{305, "and_expr", 0, 2, states_49,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{306, "shift_expr", 0, 2, states_50,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{307, "arith_expr", 0, 2, states_51,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{308, "term", 0, 2, states_52,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{309, "factor", 0, 3, states_53,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{310, "power", 0, 4, states_54,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\111\003\000\000"},
-	{311, "atom", 0, 11, states_55,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\111\003\000\000"},
-	{312, "listmaker", 0, 5, states_56,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{313, "testlist_gexp", 0, 5, states_57,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{314, "lambdef", 0, 5, states_58,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000"},
-	{315, "trailer", 0, 7, states_59,
-	 "\000\040\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\001\000\000\000"},
-	{316, "subscriptlist", 0, 3, states_60,
-	 "\000\040\050\000\000\000\000\000\000\010\000\000\000\002\000\140\010\111\023\000\000"},
-	{317, "subscript", 0, 7, states_61,
-	 "\000\040\050\000\000\000\000\000\000\010\000\000\000\002\000\140\010\111\023\000\000"},
-	{318, "sliceop", 0, 3, states_62,
+	 "\004\040\010\000\000\000\000\025\074\205\011\000\000\101\000\000\014\041\151\000\010"},
+	{298, "testlist_safe", 0, 5, states_42,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{299, "old_test", 0, 2, states_43,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{300, "old_lambdef", 0, 5, states_44,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"},
+	{301, "test", 0, 6, states_45,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{302, "or_test", 0, 2, states_46,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\100\000\000\014\041\151\000\000"},
+	{303, "and_test", 0, 2, states_47,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\100\000\000\014\041\151\000\000"},
+	{304, "not_test", 0, 3, states_48,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\100\000\000\014\041\151\000\000"},
+	{305, "comparison", 0, 2, states_49,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{306, "comp_op", 0, 4, states_50,
+	 "\000\000\000\000\000\000\000\000\000\000\004\000\000\100\376\001\000\000\000\000\000"},
+	{307, "expr", 0, 2, states_51,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{308, "xor_expr", 0, 2, states_52,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{309, "and_expr", 0, 2, states_53,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{310, "shift_expr", 0, 2, states_54,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{311, "arith_expr", 0, 2, states_55,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{312, "term", 0, 2, states_56,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{313, "factor", 0, 3, states_57,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{314, "power", 0, 4, states_58,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040\151\000\000"},
+	{315, "atom", 0, 11, states_59,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040\151\000\000"},
+	{316, "listmaker", 0, 5, states_60,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{317, "testlist_gexp", 0, 5, states_61,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{318, "lambdef", 0, 5, states_62,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"},
+	{319, "trailer", 0, 7, states_63,
+	 "\000\040\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\040\000\000\000"},
+	{320, "subscriptlist", 0, 3, states_64,
+	 "\000\040\050\000\000\000\000\000\000\010\000\000\000\101\000\000\014\041\151\000\000"},
+	{321, "subscript", 0, 7, states_65,
+	 "\000\040\050\000\000\000\000\000\000\010\000\000\000\101\000\000\014\041\151\000\000"},
+	{322, "sliceop", 0, 3, states_66,
 	 "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{319, "exprlist", 0, 3, states_63,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000\000"},
-	{320, "testlist", 0, 3, states_64,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{321, "testlist_safe", 0, 5, states_65,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{322, "dictmaker", 0, 5, states_66,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{323, "classdef", 0, 8, states_67,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000"},
-	{324, "arglist", 0, 8, states_68,
-	 "\000\040\010\060\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{325, "argument", 0, 4, states_69,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{326, "list_iter", 0, 2, states_70,
+	{323, "exprlist", 0, 3, states_67,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\014\041\151\000\000"},
+	{324, "testlist", 0, 3, states_68,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{325, "dictmaker", 0, 5, states_69,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{326, "classdef", 0, 8, states_70,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000"},
+	{327, "arglist", 0, 8, states_71,
+	 "\000\040\010\060\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{328, "argument", 0, 4, states_72,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{329, "list_iter", 0, 2, states_73,
 	 "\000\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000\000"},
-	{327, "list_for", 0, 6, states_71,
+	{330, "list_for", 0, 6, states_74,
 	 "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
-	{328, "list_if", 0, 4, states_72,
+	{331, "list_if", 0, 4, states_75,
 	 "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
-	{329, "gen_iter", 0, 2, states_73,
+	{332, "gen_iter", 0, 2, states_76,
 	 "\000\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000\000"},
-	{330, "gen_for", 0, 6, states_74,
+	{333, "gen_for", 0, 6, states_77,
 	 "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
-	{331, "gen_if", 0, 4, states_75,
+	{334, "gen_if", 0, 4, states_78,
 	 "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
-	{332, "testlist1", 0, 2, states_76,
-	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
-	{333, "encoding_decl", 0, 2, states_77,
+	{335, "testlist1", 0, 2, states_79,
+	 "\000\040\010\000\000\000\000\000\000\000\000\000\000\101\000\000\014\041\151\000\000"},
+	{336, "encoding_decl", 0, 2, states_80,
 	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{334, "yield_expr", 0, 3, states_78,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
+	{337, "yield_expr", 0, 3, states_81,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010"},
 };
-static label labels[161] = {
+static label labels[164] = {
 	{0, "EMPTY"},
 	{256, 0},
 	{4, 0},
@@ -1847,12 +1906,12 @@
 	{266, 0},
 	{0, 0},
 	{258, 0},
-	{320, 0},
+	{324, 0},
 	{259, 0},
 	{50, 0},
 	{287, 0},
 	{7, 0},
-	{324, 0},
+	{327, 0},
 	{8, 0},
 	{260, 0},
 	{261, 0},
@@ -1864,7 +1923,7 @@
 	{263, 0},
 	{264, 0},
 	{22, 0},
-	{298, 0},
+	{301, 0},
 	{12, 0},
 	{16, 0},
 	{36, 0},
@@ -1881,7 +1940,7 @@
 	{289, 0},
 	{290, 0},
 	{270, 0},
-	{334, 0},
+	{337, 0},
 	{37, 0},
 	{38, 0},
 	{39, 0},
@@ -1897,7 +1956,7 @@
 	{1, "print"},
 	{35, 0},
 	{1, "del"},
-	{319, 0},
+	{323, 0},
 	{1, "pass"},
 	{275, 0},
 	{276, 0},
@@ -1919,14 +1978,14 @@
 	{284, 0},
 	{1, "global"},
 	{1, "exec"},
-	{303, 0},
+	{307, 0},
 	{1, "in"},
 	{1, "assert"},
 	{292, 0},
 	{293, 0},
 	{294, 0},
 	{295, 0},
-	{323, 0},
+	{326, 0},
 	{1, "if"},
 	{1, "elif"},
 	{1, "else"},
@@ -1938,14 +1997,19 @@
 	{1, "except"},
 	{5, 0},
 	{6, 0},
+	{298, 0},
 	{299, 0},
-	{1, "or"},
-	{314, 0},
+	{302, 0},
 	{300, 0},
+	{1, "lambda"},
+	{318, 0},
+	{303, 0},
+	{1, "or"},
+	{304, 0},
 	{1, "and"},
 	{1, "not"},
-	{301, 0},
-	{302, 0},
+	{305, 0},
+	{306, 0},
 	{20, 0},
 	{21, 0},
 	{28, 0},
@@ -1954,55 +2018,53 @@
 	{29, 0},
 	{29, 0},
 	{1, "is"},
-	{304, 0},
+	{308, 0},
 	{18, 0},
-	{305, 0},
+	{309, 0},
 	{33, 0},
-	{306, 0},
+	{310, 0},
 	{19, 0},
-	{307, 0},
+	{311, 0},
 	{34, 0},
-	{308, 0},
+	{312, 0},
 	{14, 0},
 	{15, 0},
-	{309, 0},
+	{313, 0},
 	{17, 0},
 	{24, 0},
 	{48, 0},
 	{32, 0},
-	{310, 0},
-	{311, 0},
+	{314, 0},
 	{315, 0},
-	{313, 0},
+	{319, 0},
+	{317, 0},
 	{9, 0},
-	{312, 0},
+	{316, 0},
 	{10, 0},
 	{26, 0},
-	{322, 0},
+	{325, 0},
 	{27, 0},
 	{25, 0},
-	{332, 0},
+	{335, 0},
 	{2, 0},
 	{3, 0},
-	{327, 0},
 	{330, 0},
-	{1, "lambda"},
-	{316, 0},
-	{317, 0},
-	{318, 0},
+	{333, 0},
+	{320, 0},
 	{321, 0},
+	{322, 0},
 	{1, "class"},
-	{325, 0},
-	{326, 0},
 	{328, 0},
 	{329, 0},
 	{331, 0},
-	{333, 0},
+	{332, 0},
+	{334, 0},
+	{336, 0},
 	{1, "yield"},
 };
 grammar _PyParser_Grammar = {
-	79,
+	82,
 	dfas,
-	{161, labels},
+	{164, labels},
 	256
 };

Modified: python/trunk/Python/symtable.c
==============================================================================
--- python/trunk/Python/symtable.c	(original)
+++ python/trunk/Python/symtable.c	Mon Feb 27 01:24:13 2006
@@ -1084,6 +1084,11 @@
 			return 0;
 		break;
 	}
+	case IfExp_kind:
+		VISIT(st, expr, e->v.IfExp.test);
+		VISIT(st, expr, e->v.IfExp.body);
+		VISIT(st, expr, e->v.IfExp.orelse);
+		break;
         case Dict_kind:
 		VISIT_SEQ(st, expr, e->v.Dict.keys);
 		VISIT_SEQ(st, expr, e->v.Dict.values);


More information about the Python-checkins mailing list