]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch #1759: Backport of PEP 3129 class decorators
authorChristian Heimes <christian@cheimes.de>
Sat, 23 Feb 2008 15:01:05 +0000 (15:01 +0000)
committerChristian Heimes <christian@cheimes.de>
Sat, 23 Feb 2008 15:01:05 +0000 (15:01 +0000)
with some help from Georg

15 files changed:
Grammar/Grammar
Include/Python-ast.h
Include/graminit.h
Lib/symbol.py
Lib/test/test_ast.py
Lib/test/test_decorators.py
Lib/test/test_grammar.py
Misc/NEWS
Modules/parsermodule.c
Parser/Python.asdl
Python/Python-ast.c
Python/ast.c
Python/compile.c
Python/graminit.c
Python/symtable.c

index cdfce69ac564950d6850a4c5fc08b62d5fb42361..b014c72e8dfa3615e4147b7f4b967c9d3be6dde8 100644 (file)
@@ -33,7 +33,8 @@ eval_input: testlist NEWLINE* ENDMARKER
 
 decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
 decorators: decorator+
-funcdef: [decorators] 'def' NAME parameters ':' suite
+decorated: decorators (classdef | funcdef)
+funcdef: 'def' NAME parameters ':' suite
 parameters: '(' [varargslist] ')'
 varargslist: ((fpdef ['=' test] ',')*
               ('*' NAME [',' '**' NAME] | '**' NAME) |
@@ -73,7 +74,7 @@ global_stmt: 'global' NAME (',' NAME)*
 exec_stmt: 'exec' expr ['in' test [',' test]]
 assert_stmt: 'assert' test [',' test]
 
-compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef
+compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated
 if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
 while_stmt: 'while' test ':' suite ['else' ':' suite]
 for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
index 8b395a8ed07307c8e9de8e172a51f58d2fdc53cf..a1033ee0f44b196add98afc0f9ff51b21d35f58b 100644 (file)
@@ -73,13 +73,14 @@ struct _stmt {
                         identifier name;
                         arguments_ty args;
                         asdl_seq *body;
-                        asdl_seq *decorators;
+                        asdl_seq *decorator_list;
                 } FunctionDef;
                 
                 struct {
                         identifier name;
                         asdl_seq *bases;
                         asdl_seq *body;
+                        asdl_seq *decorator_list;
                 } ClassDef;
                 
                 struct {
@@ -359,11 +360,12 @@ mod_ty _Py_Expression(expr_ty body, PyArena *arena);
 mod_ty _Py_Suite(asdl_seq * body, PyArena *arena);
 #define FunctionDef(a0, a1, a2, a3, a4, a5, a6) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6)
 stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
-                        asdl_seq * decorators, int lineno, int col_offset,
+                        asdl_seq * decorator_list, int lineno, int col_offset,
                         PyArena *arena);
-#define ClassDef(a0, a1, a2, a3, a4, a5) _Py_ClassDef(a0, a1, a2, a3, a4, a5)
-stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int
-                     lineno, int col_offset, PyArena *arena);
+#define ClassDef(a0, a1, a2, a3, a4, a5, a6) _Py_ClassDef(a0, a1, a2, a3, a4, a5, a6)
+stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * body,
+                     asdl_seq * decorator_list, int lineno, int col_offset,
+                     PyArena *arena);
 #define Return(a0, a1, a2, a3) _Py_Return(a0, a1, a2, a3)
 stmt_ty _Py_Return(expr_ty value, int lineno, int col_offset, PyArena *arena);
 #define Delete(a0, a1, a2, a3) _Py_Delete(a0, a1, a2, a3)
index 9af182a56003570425b2780f99174640e8f91256..76da6a4165a2a47a8ebcc264469807f243a83dfc 100644 (file)
@@ -3,82 +3,83 @@
 #define eval_input 258
 #define decorator 259
 #define decorators 260
-#define funcdef 261
-#define parameters 262
-#define varargslist 263
-#define fpdef 264
-#define fplist 265
-#define stmt 266
-#define simple_stmt 267
-#define small_stmt 268
-#define expr_stmt 269
-#define augassign 270
-#define print_stmt 271
-#define del_stmt 272
-#define pass_stmt 273
-#define flow_stmt 274
-#define break_stmt 275
-#define continue_stmt 276
-#define return_stmt 277
-#define yield_stmt 278
-#define raise_stmt 279
-#define import_stmt 280
-#define import_name 281
-#define import_from 282
-#define import_as_name 283
-#define dotted_as_name 284
-#define import_as_names 285
-#define dotted_as_names 286
-#define dotted_name 287
-#define global_stmt 288
-#define exec_stmt 289
-#define assert_stmt 290
-#define compound_stmt 291
-#define if_stmt 292
-#define while_stmt 293
-#define for_stmt 294
-#define try_stmt 295
-#define with_stmt 296
-#define with_var 297
-#define except_clause 298
-#define suite 299
-#define testlist_safe 300
-#define old_test 301
-#define old_lambdef 302
-#define test 303
-#define or_test 304
-#define and_test 305
-#define not_test 306
-#define comparison 307
-#define comp_op 308
-#define expr 309
-#define xor_expr 310
-#define and_expr 311
-#define shift_expr 312
-#define arith_expr 313
-#define term 314
-#define factor 315
-#define power 316
-#define atom 317
-#define listmaker 318
-#define testlist_gexp 319
-#define lambdef 320
-#define trailer 321
-#define subscriptlist 322
-#define subscript 323
-#define sliceop 324
-#define exprlist 325
-#define testlist 326
-#define dictmaker 327
-#define classdef 328
-#define arglist 329
-#define argument 330
-#define list_iter 331
-#define list_for 332
-#define list_if 333
-#define gen_iter 334
-#define gen_for 335
-#define gen_if 336
-#define testlist1 337
-#define encoding_decl 338
-#define yield_expr 339
+#define decorated 261
+#define funcdef 262
+#define parameters 263
+#define varargslist 264
+#define fpdef 265
+#define fplist 266
+#define stmt 267
+#define simple_stmt 268
+#define small_stmt 269
+#define expr_stmt 270
+#define augassign 271
+#define print_stmt 272
+#define del_stmt 273
+#define pass_stmt 274
+#define flow_stmt 275
+#define break_stmt 276
+#define continue_stmt 277
+#define return_stmt 278
+#define yield_stmt 279
+#define raise_stmt 280
+#define import_stmt 281
+#define import_name 282
+#define import_from 283
+#define import_as_name 284
+#define dotted_as_name 285
+#define import_as_names 286
+#define dotted_as_names 287
+#define dotted_name 288
+#define global_stmt 289
+#define exec_stmt 290
+#define assert_stmt 291
+#define compound_stmt 292
+#define if_stmt 293
+#define while_stmt 294
+#define for_stmt 295
+#define try_stmt 296
+#define with_stmt 297
+#define with_var 298
+#define except_clause 299
+#define suite 300
+#define testlist_safe 301
+#define old_test 302
+#define old_lambdef 303
+#define test 304
+#define or_test 305
+#define and_test 306
+#define not_test 307
+#define comparison 308
+#define comp_op 309
+#define expr 310
+#define xor_expr 311
+#define and_expr 312
+#define shift_expr 313
+#define arith_expr 314
+#define term 315
+#define factor 316
+#define power 317
+#define atom 318
+#define listmaker 319
+#define testlist_gexp 320
+#define lambdef 321
+#define trailer 322
+#define subscriptlist 323
+#define subscript 324
+#define sliceop 325
+#define exprlist 326
+#define testlist 327
+#define dictmaker 328
+#define classdef 329
+#define arglist 330
+#define argument 331
+#define list_iter 332
+#define list_for 333
+#define list_if 334
+#define gen_iter 335
+#define gen_for 336
+#define gen_if 337
+#define testlist1 338
+#define encoding_decl 339
+#define yield_expr 340
index c65013813cca04f5289b4cdc8c76fbc3d000dacf..f25907beac1b90f10da45e8d60b81478f2637396 100755 (executable)
@@ -15,85 +15,86 @@ file_input = 257
 eval_input = 258
 decorator = 259
 decorators = 260
-funcdef = 261
-parameters = 262
-varargslist = 263
-fpdef = 264
-fplist = 265
-stmt = 266
-simple_stmt = 267
-small_stmt = 268
-expr_stmt = 269
-augassign = 270
-print_stmt = 271
-del_stmt = 272
-pass_stmt = 273
-flow_stmt = 274
-break_stmt = 275
-continue_stmt = 276
-return_stmt = 277
-yield_stmt = 278
-raise_stmt = 279
-import_stmt = 280
-import_name = 281
-import_from = 282
-import_as_name = 283
-dotted_as_name = 284
-import_as_names = 285
-dotted_as_names = 286
-dotted_name = 287
-global_stmt = 288
-exec_stmt = 289
-assert_stmt = 290
-compound_stmt = 291
-if_stmt = 292
-while_stmt = 293
-for_stmt = 294
-try_stmt = 295
-with_stmt = 296
-with_var = 297
-except_clause = 298
-suite = 299
-testlist_safe = 300
-old_test = 301
-old_lambdef = 302
-test = 303
-or_test = 304
-and_test = 305
-not_test = 306
-comparison = 307
-comp_op = 308
-expr = 309
-xor_expr = 310
-and_expr = 311
-shift_expr = 312
-arith_expr = 313
-term = 314
-factor = 315
-power = 316
-atom = 317
-listmaker = 318
-testlist_gexp = 319
-lambdef = 320
-trailer = 321
-subscriptlist = 322
-subscript = 323
-sliceop = 324
-exprlist = 325
-testlist = 326
-dictmaker = 327
-classdef = 328
-arglist = 329
-argument = 330
-list_iter = 331
-list_for = 332
-list_if = 333
-gen_iter = 334
-gen_for = 335
-gen_if = 336
-testlist1 = 337
-encoding_decl = 338
-yield_expr = 339
+decorated = 261
+funcdef = 262
+parameters = 263
+varargslist = 264
+fpdef = 265
+fplist = 266
+stmt = 267
+simple_stmt = 268
+small_stmt = 269
+expr_stmt = 270
+augassign = 271
+print_stmt = 272
+del_stmt = 273
+pass_stmt = 274
+flow_stmt = 275
+break_stmt = 276
+continue_stmt = 277
+return_stmt = 278
+yield_stmt = 279
+raise_stmt = 280
+import_stmt = 281
+import_name = 282
+import_from = 283
+import_as_name = 284
+dotted_as_name = 285
+import_as_names = 286
+dotted_as_names = 287
+dotted_name = 288
+global_stmt = 289
+exec_stmt = 290
+assert_stmt = 291
+compound_stmt = 292
+if_stmt = 293
+while_stmt = 294
+for_stmt = 295
+try_stmt = 296
+with_stmt = 297
+with_var = 298
+except_clause = 299
+suite = 300
+testlist_safe = 301
+old_test = 302
+old_lambdef = 303
+test = 304
+or_test = 305
+and_test = 306
+not_test = 307
+comparison = 308
+comp_op = 309
+expr = 310
+xor_expr = 311
+and_expr = 312
+shift_expr = 313
+arith_expr = 314
+term = 315
+factor = 316
+power = 317
+atom = 318
+listmaker = 319
+testlist_gexp = 320
+lambdef = 321
+trailer = 322
+subscriptlist = 323
+subscript = 324
+sliceop = 325
+exprlist = 326
+testlist = 327
+dictmaker = 328
+classdef = 329
+arglist = 330
+argument = 331
+list_iter = 332
+list_for = 333
+list_if = 334
+gen_iter = 335
+gen_for = 336
+gen_if = 337
+testlist1 = 338
+encoding_decl = 339
+yield_expr = 340
 #--end constants--
 
 sym_name = {}
index 14fc01026fd1654e4bb9e9ead0b28dca2efd9003..03dd5b51934916f73dcfbddbba3079a116c074fb 100644 (file)
@@ -156,7 +156,7 @@ def run_tests():
 #### EVERYTHING BELOW IS GENERATED #####
 exec_results = [
 ('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, None, []), [('Pass', (1, 9))], [])]),
-('Module', [('ClassDef', (1, 0), 'C', [], [('Pass', (1, 8))])]),
+('Module', [('ClassDef', (1, 0), 'C', [], [('Pass', (1, 8))], [])]),
 ('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, None, []), [('Return', (1, 8), ('Num', (1, 15), 1))], [])]),
 ('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])]),
 ('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Num', (1, 4), 1))]),
index 56aa5e132338dffd5cb540a4aead3281502c646c..cf2bc3000c45021e9f59f45eb886c3e057176ff1 100644 (file)
@@ -266,8 +266,44 @@ class TestDecorators(unittest.TestCase):
         self.assertEqual(bar(), 42)
         self.assertEqual(actions, expected_actions)
 
+class TestClassDecorators(unittest.TestCase):
+
+    def test_simple(self):
+        def plain(x):
+            x.extra = 'Hello'
+            return x
+        @plain
+        class C(object): pass
+        self.assertEqual(C.extra, 'Hello')
+
+    def test_double(self):
+        def ten(x):
+            x.extra = 10
+            return x
+        def add_five(x):
+            x.extra += 5
+            return x
+
+        @add_five
+        @ten
+        class C(object): pass
+        self.assertEqual(C.extra, 15)
+
+    def test_order(self):
+        def applied_first(x):
+            x.extra = 'first'
+            return x
+        def applied_second(x):
+            x.extra = 'second'
+            return x
+        @applied_second
+        @applied_first
+        class C(object): pass
+        self.assertEqual(C.extra, 'second')
+
 def test_main():
     test_support.run_unittest(TestDecorators)
+    test_support.run_unittest(TestClassDecorators)
 
 if __name__=="__main__":
     test_main()
index d4bcfda0172c1dd48ad7bf97ec19ce8955c4d242..e2bb3eb9e630dbeed338ad5accb0397cdaf11222 100644 (file)
@@ -779,6 +779,16 @@ hello world
             def meth1(self): pass
             def meth2(self, arg): pass
             def meth3(self, a1, a2): pass
+        # decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
+        # decorators: decorator+
+        # decorated: decorators (classdef | funcdef)
+        def class_decorator(x):
+            x.decorated = True
+            return x
+        @class_decorator
+        class G:
+            pass
+        self.assertEqual(G.decorated, True)
 
     def testListcomps(self):
         # list comprehension tests
index 89f4c4993716de8a06a6886fbf74e0532c462308..055f7689651313419f170e01e3f6ee98acb7b766 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 1?
 Core and builtins
 -----------------
 
+- Patch #1759: Backport of PEP 3129 class decorators
+
 - Issue #1881: An internal parser limit has been increased. Also see 
   issue 215555 for a discussion.
 
index 5764c24b8a454932d43d43de763370742046868a..6e52343e0db188669208650fc03013bcae7ebe37 100644 (file)
@@ -1498,7 +1498,7 @@ validate_small_stmt(node *tree)
 
 
 /*  compound_stmt:
- *      if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
+ *      if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef | decorated
  */
 static int
 validate_compound_stmt(node *tree)
@@ -1517,7 +1517,8 @@ validate_compound_stmt(node *tree)
           || (ntype == for_stmt)
           || (ntype == try_stmt)
           || (ntype == funcdef)
-          || (ntype == classdef))
+          || (ntype == classdef)
+          || (ntype == decorated))
         res = validate_node(tree);
     else {
         res = 0;
@@ -1527,7 +1528,6 @@ validate_compound_stmt(node *tree)
     return (res);
 }
 
-
 static int
 validate_yield_or_testlist(node *tree)
 {
@@ -2558,28 +2558,40 @@ validate_decorators(node *tree)
 
 /*  funcdef:
  *      
- *            -6   -5    -4         -3  -2 -1
- *  [decorators] 'def' NAME parameters ':' suite
+ *     -5   -4         -3  -2    -1
+ *  'def' NAME parameters ':' suite
  */
 static int
 validate_funcdef(node *tree)
 {
     int nch = NCH(tree);
     int ok = (validate_ntype(tree, funcdef)
-              && ((nch == 5) || (nch == 6))
+              && (nch == 5)
               && validate_name(RCHILD(tree, -5), "def")
               && validate_ntype(RCHILD(tree, -4), NAME)
               && validate_colon(RCHILD(tree, -2))
               && validate_parameters(RCHILD(tree, -3))
               && validate_suite(RCHILD(tree, -1)));
-
-    if (ok && (nch == 6))
-       ok = validate_decorators(CHILD(tree, 0));
-
     return ok;
 }
 
 
+/* decorated
+ *   decorators (classdef | funcdef)
+ */
+static int
+validate_decorated(node *tree)
+{
+  int nch = NCH(tree);
+  int ok = (validate_ntype(tree, decorated)
+           && (nch == 2)
+           && validate_decorators(RCHILD(tree, -2))
+           && (validate_funcdef(RCHILD(tree, -1))
+               || validate_class(RCHILD(tree, -1)))
+           );
+  return ok;
+}
+
 static int
 validate_lambdef(node *tree)
 {
@@ -2923,6 +2935,9 @@ validate_node(node *tree)
           case classdef:
             res = validate_class(tree);
             break;
+         case decorated:
+           res = validate_decorated(tree);
+           break;
             /*
              *  "Trivial" parse tree nodes.
              *  (Why did I call these trivial?)
index 3aaa0f290b4cc59da02a7438eb6f2b22989c69ca..250e9ac7e2e16d656f193df402b81c7c56faae57 100644 (file)
@@ -10,8 +10,8 @@ module Python version "$Revision$"
            | Suite(stmt* body)
 
        stmt = FunctionDef(identifier name, arguments args, 
-                           stmt* body, expr* decorators)
-             | ClassDef(identifier name, expr* bases, stmt* body)
+                            stmt* body, expr* decorator_list)
+             | ClassDef(identifier name, expr* bases, stmt* body, expr *decorator_list)
              | Return(expr? value)
 
              | Delete(expr* targets)
index 421a2d17760d3b75c6e7042dea2128a8a67c47b9..8d51a0d97c359966e78fbfdbe8f54c89be68a9ac 100644 (file)
@@ -42,13 +42,14 @@ static char *FunctionDef_fields[]={
         "name",
         "args",
         "body",
-        "decorators",
+        "decorator_list",
 };
 static PyTypeObject *ClassDef_type;
 static char *ClassDef_fields[]={
         "name",
         "bases",
         "body",
+        "decorator_list",
 };
 static PyTypeObject *Return_type;
 static char *Return_fields[]={
@@ -469,7 +470,7 @@ static int init_types(void)
         FunctionDef_type = make_type("FunctionDef", stmt_type,
                                      FunctionDef_fields, 4);
         if (!FunctionDef_type) return 0;
-        ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 3);
+        ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 4);
         if (!ClassDef_type) return 0;
         Return_type = make_type("Return", stmt_type, Return_fields, 1);
         if (!Return_type) return 0;
@@ -790,7 +791,7 @@ Suite(asdl_seq * body, PyArena *arena)
 
 stmt_ty
 FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
-            decorators, int lineno, int col_offset, PyArena *arena)
+            decorator_list, int lineno, int col_offset, PyArena *arena)
 {
         stmt_ty p;
         if (!name) {
@@ -810,15 +811,15 @@ FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
         p->v.FunctionDef.name = name;
         p->v.FunctionDef.args = args;
         p->v.FunctionDef.body = body;
-        p->v.FunctionDef.decorators = decorators;
+        p->v.FunctionDef.decorator_list = decorator_list;
         p->lineno = lineno;
         p->col_offset = col_offset;
         return p;
 }
 
 stmt_ty
-ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int lineno, int
-         col_offset, PyArena *arena)
+ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, asdl_seq *
+         decorator_list, int lineno, int col_offset, PyArena *arena)
 {
         stmt_ty p;
         if (!name) {
@@ -833,6 +834,7 @@ ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int lineno, int
         p->v.ClassDef.name = name;
         p->v.ClassDef.bases = bases;
         p->v.ClassDef.body = body;
+        p->v.ClassDef.decorator_list = decorator_list;
         p->lineno = lineno;
         p->col_offset = col_offset;
         return p;
@@ -1906,9 +1908,11 @@ ast2obj_stmt(void* _o)
                 if (PyObject_SetAttrString(result, "body", value) == -1)
                         goto failed;
                 Py_DECREF(value);
-                value = ast2obj_list(o->v.FunctionDef.decorators, ast2obj_expr);
+                value = ast2obj_list(o->v.FunctionDef.decorator_list,
+                                     ast2obj_expr);
                 if (!value) goto failed;
-                if (PyObject_SetAttrString(result, "decorators", value) == -1)
+                if (PyObject_SetAttrString(result, "decorator_list", value) ==
+                    -1)
                         goto failed;
                 Py_DECREF(value);
                 break;
@@ -1930,6 +1934,13 @@ ast2obj_stmt(void* _o)
                 if (PyObject_SetAttrString(result, "body", value) == -1)
                         goto failed;
                 Py_DECREF(value);
+                value = ast2obj_list(o->v.ClassDef.decorator_list,
+                                     ast2obj_expr);
+                if (!value) goto failed;
+                if (PyObject_SetAttrString(result, "decorator_list", value) ==
+                    -1)
+                        goto failed;
+                Py_DECREF(value);
                 break;
         case Return_kind:
                 result = PyType_GenericNew(Return_type, NULL, NULL);
index aa42fe8e19aa47ff27e03fa2661f6ccbe031bc57..7a1b5bc13e1b7931312cf5d325af4131cbedefe6 100644 (file)
@@ -29,6 +29,7 @@ static asdl_seq *ast_for_suite(struct compiling *, const node *);
 static asdl_seq *ast_for_exprlist(struct compiling *, const node *,
                                   expr_context_ty);
 static expr_ty ast_for_testlist(struct compiling *, const node *);
+static stmt_ty ast_for_classdef(struct compiling *, const node *, asdl_seq *);
 static expr_ty ast_for_testlist_gexp(struct compiling *, const node *);
 
 /* Note different signature for ast_for_call */
@@ -828,27 +829,16 @@ ast_for_decorators(struct compiling *c, const node *n)
 }
 
 static stmt_ty
-ast_for_funcdef(struct compiling *c, const node *n)
+ast_for_funcdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
 {
-    /* funcdef: 'def' [decorators] NAME parameters ':' suite */
+    /* funcdef: 'def' NAME parameters ':' suite */
     identifier name;
     arguments_ty args;
     asdl_seq *body;
-    asdl_seq *decorator_seq = NULL;
-    int name_i;
+    int name_i = 1;
 
     REQ(n, funcdef);
 
-    if (NCH(n) == 6) { /* decorators are present */
-        decorator_seq = ast_for_decorators(c, CHILD(n, 0));
-        if (!decorator_seq)
-            return NULL;
-        name_i = 2;
-    }
-    else {
-        name_i = 1;
-    }
-
     name = NEW_IDENTIFIER(CHILD(n, name_i));
     if (!name)
         return NULL;
@@ -867,6 +857,36 @@ ast_for_funcdef(struct compiling *c, const node *n)
                        n->n_col_offset, c->c_arena);
 }
 
+static stmt_ty
+ast_for_decorated(struct compiling *c, const node *n)
+{
+    /* decorated: decorators (classdef | funcdef) */
+    stmt_ty thing = NULL;
+    asdl_seq *decorator_seq = NULL;
+
+    REQ(n, decorated);
+
+    decorator_seq = ast_for_decorators(c, CHILD(n, 0));
+    if (!decorator_seq)
+      return NULL;
+
+    assert(TYPE(CHILD(n, 1)) == funcdef ||
+          TYPE(CHILD(n, 1)) == classdef);
+
+    if (TYPE(CHILD(n, 1)) == funcdef) {
+      thing = ast_for_funcdef(c, CHILD(n, 1), decorator_seq);
+    } else if (TYPE(CHILD(n, 1)) == classdef) {
+      thing = ast_for_classdef(c, CHILD(n, 1), decorator_seq);
+    }
+    /* we count the decorators in when talking about the class' or
+       function's line number */
+    if (thing) {
+        thing->lineno = LINENO(n);
+        thing->col_offset = n->n_col_offset;
+    }
+    return thing;
+}
+
 static expr_ty
 ast_for_lambdef(struct compiling *c, const node *n)
 {
@@ -2968,7 +2988,7 @@ ast_for_with_stmt(struct compiling *c, const node *n)
 }
 
 static stmt_ty
-ast_for_classdef(struct compiling *c, const node *n)
+ast_for_classdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
 {
     /* classdef: 'class' NAME ['(' testlist ')'] ':' suite */
     asdl_seq *bases, *s;
@@ -2984,16 +3004,16 @@ ast_for_classdef(struct compiling *c, const node *n)
         s = ast_for_suite(c, CHILD(n, 3));
         if (!s)
             return NULL;
-        return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
-                        n->n_col_offset, c->c_arena);
+        return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, decorator_seq,
+                        LINENO(n), n->n_col_offset, c->c_arena);
     }
     /* check for empty base list */
     if (TYPE(CHILD(n,3)) == RPAR) {
         s = ast_for_suite(c, CHILD(n,5));
         if (!s)
                 return NULL;
-        return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
-                        n->n_col_offset, c->c_arena);
+        return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, decorator_seq,
+                        LINENO(n), n->n_col_offset, c->c_arena);
     }
 
     /* else handle the base class list */
@@ -3004,8 +3024,8 @@ ast_for_classdef(struct compiling *c, const node *n)
     s = ast_for_suite(c, CHILD(n, 6));
     if (!s)
         return NULL;
-    return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), bases, s, LINENO(n),
-                    n->n_col_offset, c->c_arena);
+    return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), bases, s, decorator_seq,
+                    LINENO(n), n->n_col_offset, c->c_arena);
 }
 
 static stmt_ty
@@ -3054,7 +3074,7 @@ ast_for_stmt(struct compiling *c, const node *n)
     }
     else {
         /* compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt
-                        | funcdef | classdef
+                        | funcdef | classdef | decorated
         */
         node *ch = CHILD(n, 0);
         REQ(n, compound_stmt);
@@ -3070,9 +3090,11 @@ ast_for_stmt(struct compiling *c, const node *n)
             case with_stmt:
                 return ast_for_with_stmt(c, ch);
             case funcdef:
-                return ast_for_funcdef(c, ch);
+                return ast_for_funcdef(c, ch, NULL);
             case classdef:
-                return ast_for_classdef(c, ch);
+                return ast_for_classdef(c, ch, NULL);
+           case decorated:
+               return ast_for_decorated(c, ch);
             default:
                 PyErr_Format(PyExc_SystemError,
                              "unhandled small_stmt: TYPE=%d NCH=%d\n",
index 8ae56159e1936645bc8be686f0798e4c2a5f5a89..f02c81acd63ba43f0c291358dbc88cc902574f14 100644 (file)
@@ -1362,7 +1362,7 @@ compiler_function(struct compiler *c, stmt_ty s)
        PyCodeObject *co;
        PyObject *first_const = Py_None;
        arguments_ty args = s->v.FunctionDef.args;
-       asdl_seq* decos = s->v.FunctionDef.decorators;
+       asdl_seq* decos = s->v.FunctionDef.decorator_list;
        stmt_ty st;
        int i, n, docstring;
 
@@ -1413,9 +1413,14 @@ compiler_function(struct compiler *c, stmt_ty s)
 static int
 compiler_class(struct compiler *c, stmt_ty s)
 {
-       int n;
+       int n, i;
        PyCodeObject *co;
        PyObject *str;
+       asdl_seq* decos = s->v.ClassDef.decorator_list;
+       
+       if (!compiler_decorators(c, decos))
+               return 0;
+
        /* push class name on stack, needed by BUILD_CLASS */
        ADDOP_O(c, LOAD_CONST, s->v.ClassDef.name, consts);
        /* push the tuple of base classes on the stack */
@@ -1461,6 +1466,10 @@ compiler_class(struct compiler *c, stmt_ty s)
 
        ADDOP_I(c, CALL_FUNCTION, 0);
        ADDOP(c, BUILD_CLASS);
+       /* apply decorators */
+       for (i = 0; i < asdl_seq_LEN(decos); i++) {
+               ADDOP_I(c, CALL_FUNCTION, 1);
+       }
        if (!compiler_nameop(c, s->v.ClassDef.name, Store))
                return 0;
        return 1;
index 1f7450423537f9ed7b2930a1627113f98fdf7d13..a0018265fd74a9cf62847a30523b0cce808c3ff0 100644 (file)
@@ -86,176 +86,184 @@ static state states_4[2] = {
        {1, arcs_4_0},
        {2, arcs_4_1},
 };
-static arc arcs_5_0[2] = {
+static arc arcs_5_0[1] = {
        {16, 1},
-       {18, 2},
 };
-static arc arcs_5_1[1] = {
+static arc arcs_5_1[2] = {
        {18, 2},
+       {19, 2},
 };
 static arc arcs_5_2[1] = {
-       {19, 3},
-};
-static arc arcs_5_3[1] = {
-       {20, 4},
-};
-static arc arcs_5_4[1] = {
-       {21, 5},
-};
-static arc arcs_5_5[1] = {
-       {22, 6},
-};
-static arc arcs_5_6[1] = {
-       {0, 6},
+       {0, 2},
 };
-static state states_5[7] = {
-       {2, arcs_5_0},
-       {1, arcs_5_1},
+static state states_5[3] = {
+       {1, arcs_5_0},
+       {2, arcs_5_1},
        {1, arcs_5_2},
-       {1, arcs_5_3},
-       {1, arcs_5_4},
-       {1, arcs_5_5},
-       {1, arcs_5_6},
 };
 static arc arcs_6_0[1] = {
-       {13, 1},
+       {20, 1},
 };
-static arc arcs_6_1[2] = {
-       {23, 2},
-       {15, 3},
+static arc arcs_6_1[1] = {
+       {21, 2},
 };
 static arc arcs_6_2[1] = {
-       {15, 3},
+       {22, 3},
 };
 static arc arcs_6_3[1] = {
-       {0, 3},
+       {23, 4},
 };
-static state states_6[4] = {
+static arc arcs_6_4[1] = {
+       {24, 5},
+};
+static arc arcs_6_5[1] = {
+       {0, 5},
+};
+static state states_6[6] = {
        {1, arcs_6_0},
-       {2, arcs_6_1},
+       {1, arcs_6_1},
        {1, arcs_6_2},
        {1, arcs_6_3},
+       {1, arcs_6_4},
+       {1, arcs_6_5},
 };
-static arc arcs_7_0[3] = {
-       {24, 1},
-       {28, 2},
-       {29, 3},
+static arc arcs_7_0[1] = {
+       {13, 1},
 };
-static arc arcs_7_1[3] = {
-       {25, 4},
-       {27, 5},
-       {0, 1},
+static arc arcs_7_1[2] = {
+       {25, 2},
+       {15, 3},
 };
 static arc arcs_7_2[1] = {
-       {19, 6},
+       {15, 3},
 };
 static arc arcs_7_3[1] = {
-       {19, 7},
+       {0, 3},
+};
+static state states_7[4] = {
+       {1, arcs_7_0},
+       {2, arcs_7_1},
+       {1, arcs_7_2},
+       {1, arcs_7_3},
 };
-static arc arcs_7_4[1] = {
-       {26, 8},
+static arc arcs_8_0[3] = {
+       {26, 1},
+       {30, 2},
+       {31, 3},
 };
-static arc arcs_7_5[4] = {
-       {24, 1},
-       {28, 2},
-       {29, 3},
+static arc arcs_8_1[3] = {
+       {27, 4},
+       {29, 5},
+       {0, 1},
+};
+static arc arcs_8_2[1] = {
+       {21, 6},
+};
+static arc arcs_8_3[1] = {
+       {21, 7},
+};
+static arc arcs_8_4[1] = {
+       {28, 8},
+};
+static arc arcs_8_5[4] = {
+       {26, 1},
+       {30, 2},
+       {31, 3},
        {0, 5},
 };
-static arc arcs_7_6[2] = {
-       {27, 9},
+static arc arcs_8_6[2] = {
+       {29, 9},
        {0, 6},
 };
-static arc arcs_7_7[1] = {
+static arc arcs_8_7[1] = {
        {0, 7},
 };
-static arc arcs_7_8[2] = {
-       {27, 5},
+static arc arcs_8_8[2] = {
+       {29, 5},
        {0, 8},
 };
-static arc arcs_7_9[1] = {
-       {29, 3},
+static arc arcs_8_9[1] = {
+       {31, 3},
 };
-static state states_7[10] = {
-       {3, arcs_7_0},
-       {3, arcs_7_1},
-       {1, arcs_7_2},
-       {1, arcs_7_3},
-       {1, arcs_7_4},
-       {4, arcs_7_5},
-       {2, arcs_7_6},
-       {1, arcs_7_7},
-       {2, arcs_7_8},
-       {1, arcs_7_9},
-};
-static arc arcs_8_0[2] = {
-       {19, 1},
+static state states_8[10] = {
+       {3, arcs_8_0},
+       {3, arcs_8_1},
+       {1, arcs_8_2},
+       {1, arcs_8_3},
+       {1, arcs_8_4},
+       {4, arcs_8_5},
+       {2, arcs_8_6},
+       {1, arcs_8_7},
+       {2, arcs_8_8},
+       {1, arcs_8_9},
+};
+static arc arcs_9_0[2] = {
+       {21, 1},
        {13, 2},
 };
-static arc arcs_8_1[1] = {
+static arc arcs_9_1[1] = {
        {0, 1},
 };
-static arc arcs_8_2[1] = {
-       {30, 3},
+static arc arcs_9_2[1] = {
+       {32, 3},
 };
-static arc arcs_8_3[1] = {
+static arc arcs_9_3[1] = {
        {15, 1},
 };
-static state states_8[4] = {
-       {2, arcs_8_0},
-       {1, arcs_8_1},
-       {1, arcs_8_2},
-       {1, arcs_8_3},
+static state states_9[4] = {
+       {2, arcs_9_0},
+       {1, arcs_9_1},
+       {1, arcs_9_2},
+       {1, arcs_9_3},
 };
-static arc arcs_9_0[1] = {
-       {24, 1},
+static arc arcs_10_0[1] = {
+       {26, 1},
 };
-static arc arcs_9_1[2] = {
-       {27, 2},
+static arc arcs_10_1[2] = {
+       {29, 2},
        {0, 1},
 };
-static arc arcs_9_2[2] = {
-       {24, 1},
+static arc arcs_10_2[2] = {
+       {26, 1},
        {0, 2},
 };
-static state states_9[3] = {
-       {1, arcs_9_0},
-       {2, arcs_9_1},
-       {2, arcs_9_2},
+static state states_10[3] = {
+       {1, arcs_10_0},
+       {2, arcs_10_1},
+       {2, arcs_10_2},
 };
-static arc arcs_10_0[2] = {
+static arc arcs_11_0[2] = {
        {3, 1},
        {4, 1},
 };
-static arc arcs_10_1[1] = {
+static arc arcs_11_1[1] = {
        {0, 1},
 };
-static state states_10[2] = {
-       {2, arcs_10_0},
-       {1, arcs_10_1},
+static state states_11[2] = {
+       {2, arcs_11_0},
+       {1, arcs_11_1},
 };
-static arc arcs_11_0[1] = {
-       {31, 1},
+static arc arcs_12_0[1] = {
+       {33, 1},
 };
-static arc arcs_11_1[2] = {
-       {32, 2},
+static arc arcs_12_1[2] = {
+       {34, 2},
        {2, 3},
 };
-static arc arcs_11_2[2] = {
-       {31, 1},
+static arc arcs_12_2[2] = {
+       {33, 1},
        {2, 3},
 };
-static arc arcs_11_3[1] = {
+static arc arcs_12_3[1] = {
        {0, 3},
 };
-static state states_11[4] = {
-       {1, arcs_11_0},
-       {2, arcs_11_1},
-       {2, arcs_11_2},
-       {1, arcs_11_3},
+static state states_12[4] = {
+       {1, arcs_12_0},
+       {2, arcs_12_1},
+       {2, arcs_12_2},
+       {1, arcs_12_3},
 };
-static arc arcs_12_0[9] = {
-       {33, 1},
-       {34, 1},
+static arc arcs_13_0[9] = {
        {35, 1},
        {36, 1},
        {37, 1},
@@ -263,48 +271,48 @@ static arc arcs_12_0[9] = {
        {39, 1},
        {40, 1},
        {41, 1},
+       {42, 1},
+       {43, 1},
 };
-static arc arcs_12_1[1] = {
+static arc arcs_13_1[1] = {
        {0, 1},
 };
-static state states_12[2] = {
-       {9, arcs_12_0},
-       {1, arcs_12_1},
+static state states_13[2] = {
+       {9, arcs_13_0},
+       {1, arcs_13_1},
 };
-static arc arcs_13_0[1] = {
+static arc arcs_14_0[1] = {
        {9, 1},
 };
-static arc arcs_13_1[3] = {
-       {42, 2},
-       {25, 3},
+static arc arcs_14_1[3] = {
+       {44, 2},
+       {27, 3},
        {0, 1},
 };
-static arc arcs_13_2[2] = {
-       {43, 4},
+static arc arcs_14_2[2] = {
+       {45, 4},
        {9, 4},
 };
-static arc arcs_13_3[2] = {
-       {43, 5},
+static arc arcs_14_3[2] = {
+       {45, 5},
        {9, 5},
 };
-static arc arcs_13_4[1] = {
+static arc arcs_14_4[1] = {
        {0, 4},
 };
-static arc arcs_13_5[2] = {
-       {25, 3},
+static arc arcs_14_5[2] = {
+       {27, 3},
        {0, 5},
 };
-static state states_13[6] = {
-       {1, arcs_13_0},
-       {3, arcs_13_1},
-       {2, arcs_13_2},
-       {2, arcs_13_3},
-       {1, arcs_13_4},
-       {2, arcs_13_5},
+static state states_14[6] = {
+       {1, arcs_14_0},
+       {3, arcs_14_1},
+       {2, arcs_14_2},
+       {2, arcs_14_3},
+       {1, arcs_14_4},
+       {2, arcs_14_5},
 };
-static arc arcs_14_0[12] = {
-       {44, 1},
-       {45, 1},
+static arc arcs_15_0[12] = {
        {46, 1},
        {47, 1},
        {48, 1},
@@ -315,109 +323,101 @@ static arc arcs_14_0[12] = {
        {53, 1},
        {54, 1},
        {55, 1},
+       {56, 1},
+       {57, 1},
 };
-static arc arcs_14_1[1] = {
+static arc arcs_15_1[1] = {
        {0, 1},
 };
-static state states_14[2] = {
-       {12, arcs_14_0},
-       {1, arcs_14_1},
+static state states_15[2] = {
+       {12, arcs_15_0},
+       {1, arcs_15_1},
 };
-static arc arcs_15_0[1] = {
-       {56, 1},
+static arc arcs_16_0[1] = {
+       {58, 1},
 };
-static arc arcs_15_1[3] = {
-       {26, 2},
-       {57, 3},
+static arc arcs_16_1[3] = {
+       {28, 2},
+       {59, 3},
        {0, 1},
 };
-static arc arcs_15_2[2] = {
-       {27, 4},
+static arc arcs_16_2[2] = {
+       {29, 4},
        {0, 2},
 };
-static arc arcs_15_3[1] = {
-       {26, 5},
+static arc arcs_16_3[1] = {
+       {28, 5},
 };
-static arc arcs_15_4[2] = {
-       {26, 2},
+static arc arcs_16_4[2] = {
+       {28, 2},
        {0, 4},
 };
-static arc arcs_15_5[2] = {
-       {27, 6},
+static arc arcs_16_5[2] = {
+       {29, 6},
        {0, 5},
 };
-static arc arcs_15_6[1] = {
-       {26, 7},
+static arc arcs_16_6[1] = {
+       {28, 7},
 };
-static arc arcs_15_7[2] = {
-       {27, 8},
+static arc arcs_16_7[2] = {
+       {29, 8},
        {0, 7},
 };
-static arc arcs_15_8[2] = {
-       {26, 7},
+static arc arcs_16_8[2] = {
+       {28, 7},
        {0, 8},
 };
-static state states_15[9] = {
-       {1, arcs_15_0},
-       {3, arcs_15_1},
-       {2, arcs_15_2},
-       {1, arcs_15_3},
-       {2, arcs_15_4},
-       {2, arcs_15_5},
-       {1, arcs_15_6},
-       {2, arcs_15_7},
-       {2, arcs_15_8},
-};
-static arc arcs_16_0[1] = {
-       {58, 1},
-};
-static arc arcs_16_1[1] = {
-       {59, 2},
-};
-static arc arcs_16_2[1] = {
-       {0, 2},
-};
-static state states_16[3] = {
+static state states_16[9] = {
        {1, arcs_16_0},
-       {1, arcs_16_1},
-       {1, arcs_16_2},
+       {3, arcs_16_1},
+       {2, arcs_16_2},
+       {1, arcs_16_3},
+       {2, arcs_16_4},
+       {2, arcs_16_5},
+       {1, arcs_16_6},
+       {2, arcs_16_7},
+       {2, arcs_16_8},
 };
 static arc arcs_17_0[1] = {
        {60, 1},
 };
 static arc arcs_17_1[1] = {
-       {0, 1},
+       {61, 2},
 };
-static state states_17[2] = {
+static arc arcs_17_2[1] = {
+       {0, 2},
+};
+static state states_17[3] = {
        {1, arcs_17_0},
        {1, arcs_17_1},
+       {1, arcs_17_2},
 };
-static arc arcs_18_0[5] = {
-       {61, 1},
+static arc arcs_18_0[1] = {
        {62, 1},
-       {63, 1},
-       {64, 1},
-       {65, 1},
 };
 static arc arcs_18_1[1] = {
        {0, 1},
 };
 static state states_18[2] = {
-       {5, arcs_18_0},
+       {1, arcs_18_0},
        {1, arcs_18_1},
 };
-static arc arcs_19_0[1] = {
+static arc arcs_19_0[5] = {
+       {63, 1},
+       {64, 1},
+       {65, 1},
        {66, 1},
+       {67, 1},
 };
 static arc arcs_19_1[1] = {
        {0, 1},
 };
 static state states_19[2] = {
-       {1, arcs_19_0},
+       {5, arcs_19_0},
        {1, arcs_19_1},
 };
 static arc arcs_20_0[1] = {
-       {67, 1},
+       {68, 1},
 };
 static arc arcs_20_1[1] = {
        {0, 1},
@@ -427,155 +427,146 @@ static state states_20[2] = {
        {1, arcs_20_1},
 };
 static arc arcs_21_0[1] = {
-       {68, 1},
+       {69, 1},
 };
-static arc arcs_21_1[2] = {
-       {9, 2},
+static arc arcs_21_1[1] = {
        {0, 1},
 };
-static arc arcs_21_2[1] = {
-       {0, 2},
-};
-static state states_21[3] = {
+static state states_21[2] = {
        {1, arcs_21_0},
-       {2, arcs_21_1},
-       {1, arcs_21_2},
+       {1, arcs_21_1},
 };
 static arc arcs_22_0[1] = {
-       {43, 1},
+       {70, 1},
 };
-static arc arcs_22_1[1] = {
+static arc arcs_22_1[2] = {
+       {9, 2},
        {0, 1},
 };
-static state states_22[2] = {
+static arc arcs_22_2[1] = {
+       {0, 2},
+};
+static state states_22[3] = {
        {1, arcs_22_0},
-       {1, arcs_22_1},
+       {2, arcs_22_1},
+       {1, arcs_22_2},
 };
 static arc arcs_23_0[1] = {
-       {69, 1},
+       {45, 1},
 };
-static arc arcs_23_1[2] = {
-       {26, 2},
+static arc arcs_23_1[1] = {
        {0, 1},
 };
-static arc arcs_23_2[2] = {
-       {27, 3},
+static state states_23[2] = {
+       {1, arcs_23_0},
+       {1, arcs_23_1},
+};
+static arc arcs_24_0[1] = {
+       {71, 1},
+};
+static arc arcs_24_1[2] = {
+       {28, 2},
+       {0, 1},
+};
+static arc arcs_24_2[2] = {
+       {29, 3},
        {0, 2},
 };
-static arc arcs_23_3[1] = {
-       {26, 4},
+static arc arcs_24_3[1] = {
+       {28, 4},
 };
-static arc arcs_23_4[2] = {
-       {27, 5},
+static arc arcs_24_4[2] = {
+       {29, 5},
        {0, 4},
 };
-static arc arcs_23_5[1] = {
-       {26, 6},
+static arc arcs_24_5[1] = {
+       {28, 6},
 };
-static arc arcs_23_6[1] = {
+static arc arcs_24_6[1] = {
        {0, 6},
 };
-static state states_23[7] = {
-       {1, arcs_23_0},
-       {2, arcs_23_1},
-       {2, arcs_23_2},
-       {1, arcs_23_3},
-       {2, arcs_23_4},
-       {1, arcs_23_5},
-       {1, arcs_23_6},
-};
-static arc arcs_24_0[2] = {
-       {70, 1},
-       {71, 1},
-};
-static arc arcs_24_1[1] = {
-       {0, 1},
-};
-static state states_24[2] = {
-       {2, arcs_24_0},
-       {1, arcs_24_1},
+static state states_24[7] = {
+       {1, arcs_24_0},
+       {2, arcs_24_1},
+       {2, arcs_24_2},
+       {1, arcs_24_3},
+       {2, arcs_24_4},
+       {1, arcs_24_5},
+       {1, arcs_24_6},
 };
-static arc arcs_25_0[1] = {
+static arc arcs_25_0[2] = {
        {72, 1},
+       {73, 1},
 };
 static arc arcs_25_1[1] = {
-       {73, 2},
-};
-static arc arcs_25_2[1] = {
-       {0, 2},
+       {0, 1},
 };
-static state states_25[3] = {
-       {1, arcs_25_0},
+static state states_25[2] = {
+       {2, arcs_25_0},
        {1, arcs_25_1},
-       {1, arcs_25_2},
 };
 static arc arcs_26_0[1] = {
        {74, 1},
 };
-static arc arcs_26_1[2] = {
+static arc arcs_26_1[1] = {
        {75, 2},
+};
+static arc arcs_26_2[1] = {
+       {0, 2},
+};
+static state states_26[3] = {
+       {1, arcs_26_0},
+       {1, arcs_26_1},
+       {1, arcs_26_2},
+};
+static arc arcs_27_0[1] = {
+       {76, 1},
+};
+static arc arcs_27_1[2] = {
+       {77, 2},
        {12, 3},
 };
-static arc arcs_26_2[3] = {
-       {75, 2},
+static arc arcs_27_2[3] = {
+       {77, 2},
        {12, 3},
-       {72, 4},
+       {74, 4},
 };
-static arc arcs_26_3[1] = {
-       {72, 4},
+static arc arcs_27_3[1] = {
+       {74, 4},
 };
-static arc arcs_26_4[3] = {
-       {28, 5},
+static arc arcs_27_4[3] = {
+       {30, 5},
        {13, 6},
-       {76, 5},
+       {78, 5},
 };
-static arc arcs_26_5[1] = {
+static arc arcs_27_5[1] = {
        {0, 5},
 };
-static arc arcs_26_6[1] = {
-       {76, 7},
+static arc arcs_27_6[1] = {
+       {78, 7},
 };
-static arc arcs_26_7[1] = {
+static arc arcs_27_7[1] = {
        {15, 5},
 };
-static state states_26[8] = {
-       {1, arcs_26_0},
-       {2, arcs_26_1},
-       {3, arcs_26_2},
-       {1, arcs_26_3},
-       {3, arcs_26_4},
-       {1, arcs_26_5},
-       {1, arcs_26_6},
-       {1, arcs_26_7},
-};
-static arc arcs_27_0[1] = {
-       {19, 1},
-};
-static arc arcs_27_1[2] = {
-       {78, 2},
-       {0, 1},
-};
-static arc arcs_27_2[1] = {
-       {19, 3},
-};
-static arc arcs_27_3[1] = {
-       {0, 3},
-};
-static state states_27[4] = {
+static state states_27[8] = {
        {1, arcs_27_0},
        {2, arcs_27_1},
-       {1, arcs_27_2},
+       {3, arcs_27_2},
        {1, arcs_27_3},
+       {3, arcs_27_4},
+       {1, arcs_27_5},
+       {1, arcs_27_6},
+       {1, arcs_27_7},
 };
 static arc arcs_28_0[1] = {
-       {12, 1},
+       {21, 1},
 };
 static arc arcs_28_1[2] = {
-       {78, 2},
+       {80, 2},
        {0, 1},
 };
 static arc arcs_28_2[1] = {
-       {19, 3},
+       {21, 3},
 };
 static arc arcs_28_3[1] = {
        {0, 3},
@@ -587,37 +578,45 @@ static state states_28[4] = {
        {1, arcs_28_3},
 };
 static arc arcs_29_0[1] = {
-       {77, 1},
+       {12, 1},
 };
 static arc arcs_29_1[2] = {
-       {27, 2},
+       {80, 2},
        {0, 1},
 };
-static arc arcs_29_2[2] = {
-       {77, 1},
-       {0, 2},
+static arc arcs_29_2[1] = {
+       {21, 3},
 };
-static state states_29[3] = {
+static arc arcs_29_3[1] = {
+       {0, 3},
+};
+static state states_29[4] = {
        {1, arcs_29_0},
        {2, arcs_29_1},
-       {2, arcs_29_2},
+       {1, arcs_29_2},
+       {1, arcs_29_3},
 };
 static arc arcs_30_0[1] = {
        {79, 1},
 };
 static arc arcs_30_1[2] = {
-       {27, 0},
+       {29, 2},
        {0, 1},
 };
-static state states_30[2] = {
+static arc arcs_30_2[2] = {
+       {79, 1},
+       {0, 2},
+};
+static state states_30[3] = {
        {1, arcs_30_0},
        {2, arcs_30_1},
+       {2, arcs_30_2},
 };
 static arc arcs_31_0[1] = {
-       {19, 1},
+       {81, 1},
 };
 static arc arcs_31_1[2] = {
-       {75, 0},
+       {29, 0},
        {0, 1},
 };
 static state states_31[2] = {
@@ -625,148 +624,125 @@ static state states_31[2] = {
        {2, arcs_31_1},
 };
 static arc arcs_32_0[1] = {
-       {80, 1},
-};
-static arc arcs_32_1[1] = {
-       {19, 2},
+       {21, 1},
 };
-static arc arcs_32_2[2] = {
-       {27, 1},
-       {0, 2},
+static arc arcs_32_1[2] = {
+       {77, 0},
+       {0, 1},
 };
-static state states_32[3] = {
+static state states_32[2] = {
        {1, arcs_32_0},
-       {1, arcs_32_1},
-       {2, arcs_32_2},
+       {2, arcs_32_1},
 };
 static arc arcs_33_0[1] = {
-       {81, 1},
+       {82, 1},
 };
 static arc arcs_33_1[1] = {
-       {82, 2},
+       {21, 2},
 };
 static arc arcs_33_2[2] = {
-       {83, 3},
+       {29, 1},
        {0, 2},
 };
-static arc arcs_33_3[1] = {
-       {26, 4},
-};
-static arc arcs_33_4[2] = {
-       {27, 5},
-       {0, 4},
-};
-static arc arcs_33_5[1] = {
-       {26, 6},
-};
-static arc arcs_33_6[1] = {
-       {0, 6},
-};
-static state states_33[7] = {
+static state states_33[3] = {
        {1, arcs_33_0},
        {1, arcs_33_1},
        {2, arcs_33_2},
-       {1, arcs_33_3},
-       {2, arcs_33_4},
-       {1, arcs_33_5},
-       {1, arcs_33_6},
 };
 static arc arcs_34_0[1] = {
-       {84, 1},
+       {83, 1},
 };
 static arc arcs_34_1[1] = {
-       {26, 2},
+       {84, 2},
 };
 static arc arcs_34_2[2] = {
-       {27, 3},
+       {85, 3},
        {0, 2},
 };
 static arc arcs_34_3[1] = {
-       {26, 4},
+       {28, 4},
 };
-static arc arcs_34_4[1] = {
+static arc arcs_34_4[2] = {
+       {29, 5},
        {0, 4},
 };
-static state states_34[5] = {
+static arc arcs_34_5[1] = {
+       {28, 6},
+};
+static arc arcs_34_6[1] = {
+       {0, 6},
+};
+static state states_34[7] = {
        {1, arcs_34_0},
        {1, arcs_34_1},
        {2, arcs_34_2},
        {1, arcs_34_3},
-       {1, arcs_34_4},
+       {2, arcs_34_4},
+       {1, arcs_34_5},
+       {1, arcs_34_6},
 };
-static arc arcs_35_0[7] = {
-       {85, 1},
+static arc arcs_35_0[1] = {
        {86, 1},
-       {87, 1},
-       {88, 1},
-       {89, 1},
-       {17, 1},
-       {90, 1},
 };
 static arc arcs_35_1[1] = {
-       {0, 1},
-};
-static state states_35[2] = {
-       {7, arcs_35_0},
-       {1, arcs_35_1},
-};
-static arc arcs_36_0[1] = {
-       {91, 1},
-};
-static arc arcs_36_1[1] = {
-       {26, 2},
+       {28, 2},
 };
-static arc arcs_36_2[1] = {
-       {21, 3},
+static arc arcs_35_2[2] = {
+       {29, 3},
+       {0, 2},
 };
-static arc arcs_36_3[1] = {
-       {22, 4},
+static arc arcs_35_3[1] = {
+       {28, 4},
 };
-static arc arcs_36_4[3] = {
-       {92, 1},
-       {93, 5},
+static arc arcs_35_4[1] = {
        {0, 4},
 };
-static arc arcs_36_5[1] = {
-       {21, 6},
+static state states_35[5] = {
+       {1, arcs_35_0},
+       {1, arcs_35_1},
+       {2, arcs_35_2},
+       {1, arcs_35_3},
+       {1, arcs_35_4},
 };
-static arc arcs_36_6[1] = {
-       {22, 7},
+static arc arcs_36_0[8] = {
+       {87, 1},
+       {88, 1},
+       {89, 1},
+       {90, 1},
+       {91, 1},
+       {19, 1},
+       {18, 1},
+       {17, 1},
 };
-static arc arcs_36_7[1] = {
-       {0, 7},
+static arc arcs_36_1[1] = {
+       {0, 1},
 };
-static state states_36[8] = {
-       {1, arcs_36_0},
+static state states_36[2] = {
+       {8, arcs_36_0},
        {1, arcs_36_1},
-       {1, arcs_36_2},
-       {1, arcs_36_3},
-       {3, arcs_36_4},
-       {1, arcs_36_5},
-       {1, arcs_36_6},
-       {1, arcs_36_7},
 };
 static arc arcs_37_0[1] = {
-       {94, 1},
+       {92, 1},
 };
 static arc arcs_37_1[1] = {
-       {26, 2},
+       {28, 2},
 };
 static arc arcs_37_2[1] = {
-       {21, 3},
+       {23, 3},
 };
 static arc arcs_37_3[1] = {
-       {22, 4},
+       {24, 4},
 };
-static arc arcs_37_4[2] = {
-       {93, 5},
+static arc arcs_37_4[3] = {
+       {93, 1},
+       {94, 5},
        {0, 4},
 };
 static arc arcs_37_5[1] = {
-       {21, 6},
+       {23, 6},
 };
 static arc arcs_37_6[1] = {
-       {22, 7},
+       {24, 7},
 };
 static arc arcs_37_7[1] = {
        {0, 7},
@@ -776,7 +752,7 @@ static state states_37[8] = {
        {1, arcs_37_1},
        {1, arcs_37_2},
        {1, arcs_37_3},
-       {2, arcs_37_4},
+       {3, arcs_37_4},
        {1, arcs_37_5},
        {1, arcs_37_6},
        {1, arcs_37_7},
@@ -785,373 +761,397 @@ static arc arcs_38_0[1] = {
        {95, 1},
 };
 static arc arcs_38_1[1] = {
-       {59, 2},
+       {28, 2},
 };
 static arc arcs_38_2[1] = {
-       {83, 3},
+       {23, 3},
 };
 static arc arcs_38_3[1] = {
-       {9, 4},
+       {24, 4},
 };
-static arc arcs_38_4[1] = {
-       {21, 5},
+static arc arcs_38_4[2] = {
+       {94, 5},
+       {0, 4},
 };
 static arc arcs_38_5[1] = {
-       {22, 6},
+       {23, 6},
 };
-static arc arcs_38_6[2] = {
-       {93, 7},
-       {0, 6},
+static arc arcs_38_6[1] = {
+       {24, 7},
 };
 static arc arcs_38_7[1] = {
-       {21, 8},
-};
-static arc arcs_38_8[1] = {
-       {22, 9},
-};
-static arc arcs_38_9[1] = {
-       {0, 9},
+       {0, 7},
 };
-static state states_38[10] = {
+static state states_38[8] = {
        {1, arcs_38_0},
        {1, arcs_38_1},
        {1, arcs_38_2},
        {1, arcs_38_3},
-       {1, arcs_38_4},
+       {2, arcs_38_4},
        {1, arcs_38_5},
-       {2, arcs_38_6},
+       {1, arcs_38_6},
        {1, arcs_38_7},
-       {1, arcs_38_8},
-       {1, arcs_38_9},
 };
 static arc arcs_39_0[1] = {
        {96, 1},
 };
 static arc arcs_39_1[1] = {
-       {21, 2},
+       {61, 2},
 };
 static arc arcs_39_2[1] = {
-       {22, 3},
+       {85, 3},
 };
-static arc arcs_39_3[2] = {
-       {97, 4},
-       {98, 5},
+static arc arcs_39_3[1] = {
+       {9, 4},
 };
 static arc arcs_39_4[1] = {
-       {21, 6},
+       {23, 5},
 };
 static arc arcs_39_5[1] = {
-       {21, 7},
+       {24, 6},
 };
-static arc arcs_39_6[1] = {
-       {22, 8},
+static arc arcs_39_6[2] = {
+       {94, 7},
+       {0, 6},
 };
 static arc arcs_39_7[1] = {
-       {22, 9},
+       {23, 8},
 };
-static arc arcs_39_8[4] = {
-       {97, 4},
-       {93, 10},
-       {98, 5},
-       {0, 8},
+static arc arcs_39_8[1] = {
+       {24, 9},
 };
 static arc arcs_39_9[1] = {
        {0, 9},
 };
-static arc arcs_39_10[1] = {
-       {21, 11},
-};
-static arc arcs_39_11[1] = {
-       {22, 12},
-};
-static arc arcs_39_12[2] = {
-       {98, 5},
-       {0, 12},
-};
-static state states_39[13] = {
+static state states_39[10] = {
        {1, arcs_39_0},
        {1, arcs_39_1},
        {1, arcs_39_2},
-       {2, arcs_39_3},
+       {1, arcs_39_3},
        {1, arcs_39_4},
        {1, arcs_39_5},
-       {1, arcs_39_6},
+       {2, arcs_39_6},
        {1, arcs_39_7},
-       {4, arcs_39_8},
+       {1, arcs_39_8},
        {1, arcs_39_9},
-       {1, arcs_39_10},
-       {1, arcs_39_11},
-       {2, arcs_39_12},
 };
 static arc arcs_40_0[1] = {
-       {99, 1},
+       {97, 1},
 };
 static arc arcs_40_1[1] = {
-       {26, 2},
+       {23, 2},
 };
-static arc arcs_40_2[2] = {
-       {100, 3},
-       {21, 4},
+static arc arcs_40_2[1] = {
+       {24, 3},
 };
-static arc arcs_40_3[1] = {
-       {21, 4},
+static arc arcs_40_3[2] = {
+       {98, 4},
+       {99, 5},
 };
 static arc arcs_40_4[1] = {
-       {22, 5},
+       {23, 6},
 };
 static arc arcs_40_5[1] = {
-       {0, 5},
+       {23, 7},
+};
+static arc arcs_40_6[1] = {
+       {24, 8},
 };
-static state states_40[6] = {
+static arc arcs_40_7[1] = {
+       {24, 9},
+};
+static arc arcs_40_8[4] = {
+       {98, 4},
+       {94, 10},
+       {99, 5},
+       {0, 8},
+};
+static arc arcs_40_9[1] = {
+       {0, 9},
+};
+static arc arcs_40_10[1] = {
+       {23, 11},
+};
+static arc arcs_40_11[1] = {
+       {24, 12},
+};
+static arc arcs_40_12[2] = {
+       {99, 5},
+       {0, 12},
+};
+static state states_40[13] = {
        {1, arcs_40_0},
        {1, arcs_40_1},
-       {2, arcs_40_2},
-       {1, arcs_40_3},
+       {1, arcs_40_2},
+       {2, arcs_40_3},
        {1, arcs_40_4},
        {1, arcs_40_5},
+       {1, arcs_40_6},
+       {1, arcs_40_7},
+       {4, arcs_40_8},
+       {1, arcs_40_9},
+       {1, arcs_40_10},
+       {1, arcs_40_11},
+       {2, arcs_40_12},
 };
 static arc arcs_41_0[1] = {
-       {78, 1},
+       {100, 1},
 };
 static arc arcs_41_1[1] = {
-       {82, 2},
+       {28, 2},
 };
-static arc arcs_41_2[1] = {
-       {0, 2},
+static arc arcs_41_2[2] = {
+       {101, 3},
+       {23, 4},
+};
+static arc arcs_41_3[1] = {
+       {23, 4},
 };
-static state states_41[3] = {
+static arc arcs_41_4[1] = {
+       {24, 5},
+};
+static arc arcs_41_5[1] = {
+       {0, 5},
+};
+static state states_41[6] = {
        {1, arcs_41_0},
        {1, arcs_41_1},
-       {1, arcs_41_2},
+       {2, arcs_41_2},
+       {1, arcs_41_3},
+       {1, arcs_41_4},
+       {1, arcs_41_5},
 };
 static arc arcs_42_0[1] = {
-       {101, 1},
+       {80, 1},
 };
-static arc arcs_42_1[2] = {
-       {26, 2},
-       {0, 1},
+static arc arcs_42_1[1] = {
+       {84, 2},
 };
-static arc arcs_42_2[3] = {
-       {78, 3},
-       {27, 3},
+static arc arcs_42_2[1] = {
        {0, 2},
 };
-static arc arcs_42_3[1] = {
-       {26, 4},
-};
-static arc arcs_42_4[1] = {
-       {0, 4},
-};
-static state states_42[5] = {
+static state states_42[3] = {
        {1, arcs_42_0},
-       {2, arcs_42_1},
-       {3, arcs_42_2},
-       {1, arcs_42_3},
-       {1, arcs_42_4},
+       {1, arcs_42_1},
+       {1, arcs_42_2},
 };
-static arc arcs_43_0[2] = {
-       {3, 1},
-       {2, 2},
+static arc arcs_43_0[1] = {
+       {102, 1},
 };
-static arc arcs_43_1[1] = {
+static arc arcs_43_1[2] = {
+       {28, 2},
        {0, 1},
 };
-static arc arcs_43_2[1] = {
-       {102, 3},
+static arc arcs_43_2[3] = {
+       {80, 3},
+       {29, 3},
+       {0, 2},
 };
 static arc arcs_43_3[1] = {
-       {6, 4},
+       {28, 4},
 };
-static arc arcs_43_4[2] = {
-       {6, 4},
-       {103, 1},
+static arc arcs_43_4[1] = {
+       {0, 4},
 };
 static state states_43[5] = {
-       {2, arcs_43_0},
-       {1, arcs_43_1},
-       {1, arcs_43_2},
+       {1, arcs_43_0},
+       {2, arcs_43_1},
+       {3, arcs_43_2},
        {1, arcs_43_3},
-       {2, arcs_43_4},
+       {1, arcs_43_4},
 };
-static arc arcs_44_0[1] = {
-       {105, 1},
+static arc arcs_44_0[2] = {
+       {3, 1},
+       {2, 2},
 };
-static arc arcs_44_1[2] = {
-       {27, 2},
+static arc arcs_44_1[1] = {
        {0, 1},
 };
 static arc arcs_44_2[1] = {
-       {105, 3},
+       {103, 3},
 };
-static arc arcs_44_3[2] = {
-       {27, 4},
-       {0, 3},
+static arc arcs_44_3[1] = {
+       {6, 4},
 };
 static arc arcs_44_4[2] = {
-       {105, 3},
-       {0, 4},
+       {6, 4},
+       {104, 1},
 };
 static state states_44[5] = {
-       {1, arcs_44_0},
-       {2, arcs_44_1},
+       {2, arcs_44_0},
+       {1, arcs_44_1},
        {1, arcs_44_2},
-       {2, arcs_44_3},
+       {1, arcs_44_3},
        {2, arcs_44_4},
 };
-static arc arcs_45_0[2] = {
+static arc arcs_45_0[1] = {
        {106, 1},
-       {107, 1},
 };
-static arc arcs_45_1[1] = {
+static arc arcs_45_1[2] = {
+       {29, 2},
        {0, 1},
 };
-static state states_45[2] = {
-       {2, arcs_45_0},
-       {1, arcs_45_1},
+static arc arcs_45_2[1] = {
+       {106, 3},
 };
-static arc arcs_46_0[1] = {
-       {108, 1},
+static arc arcs_45_3[2] = {
+       {29, 4},
+       {0, 3},
 };
-static arc arcs_46_1[2] = {
-       {23, 2},
-       {21, 3},
+static arc arcs_45_4[2] = {
+       {106, 3},
+       {0, 4},
 };
-static arc arcs_46_2[1] = {
-       {21, 3},
+static state states_45[5] = {
+       {1, arcs_45_0},
+       {2, arcs_45_1},
+       {1, arcs_45_2},
+       {2, arcs_45_3},
+       {2, arcs_45_4},
 };
-static arc arcs_46_3[1] = {
-       {105, 4},
+static arc arcs_46_0[2] = {
+       {107, 1},
+       {108, 1},
 };
-static arc arcs_46_4[1] = {
-       {0, 4},
+static arc arcs_46_1[1] = {
+       {0, 1},
 };
-static state states_46[5] = {
-       {1, arcs_46_0},
-       {2, arcs_46_1},
-       {1, arcs_46_2},
-       {1, arcs_46_3},
-       {1, arcs_46_4},
+static state states_46[2] = {
+       {2, arcs_46_0},
+       {1, arcs_46_1},
 };
-static arc arcs_47_0[2] = {
-       {106, 1},
-       {109, 2},
+static arc arcs_47_0[1] = {
+       {109, 1},
 };
 static arc arcs_47_1[2] = {
-       {91, 3},
-       {0, 1},
+       {25, 2},
+       {23, 3},
 };
 static arc arcs_47_2[1] = {
-       {0, 2},
+       {23, 3},
 };
 static arc arcs_47_3[1] = {
        {106, 4},
 };
 static arc arcs_47_4[1] = {
-       {93, 5},
-};
-static arc arcs_47_5[1] = {
-       {26, 2},
+       {0, 4},
 };
-static state states_47[6] = {
-       {2, arcs_47_0},
+static state states_47[5] = {
+       {1, arcs_47_0},
        {2, arcs_47_1},
        {1, arcs_47_2},
        {1, arcs_47_3},
        {1, arcs_47_4},
-       {1, arcs_47_5},
 };
-static arc arcs_48_0[1] = {
-       {110, 1},
+static arc arcs_48_0[2] = {
+       {107, 1},
+       {110, 2},
 };
 static arc arcs_48_1[2] = {
-       {111, 0},
+       {92, 3},
        {0, 1},
 };
-static state states_48[2] = {
-       {1, arcs_48_0},
+static arc arcs_48_2[1] = {
+       {0, 2},
+};
+static arc arcs_48_3[1] = {
+       {107, 4},
+};
+static arc arcs_48_4[1] = {
+       {94, 5},
+};
+static arc arcs_48_5[1] = {
+       {28, 2},
+};
+static state states_48[6] = {
+       {2, arcs_48_0},
        {2, arcs_48_1},
+       {1, arcs_48_2},
+       {1, arcs_48_3},
+       {1, arcs_48_4},
+       {1, arcs_48_5},
 };
 static arc arcs_49_0[1] = {
-       {112, 1},
+       {111, 1},
 };
 static arc arcs_49_1[2] = {
-       {113, 0},
+       {112, 0},
        {0, 1},
 };
 static state states_49[2] = {
        {1, arcs_49_0},
        {2, arcs_49_1},
 };
-static arc arcs_50_0[2] = {
-       {114, 1},
-       {115, 2},
+static arc arcs_50_0[1] = {
+       {113, 1},
+};
+static arc arcs_50_1[2] = {
+       {114, 0},
+       {0, 1},
+};
+static state states_50[2] = {
+       {1, arcs_50_0},
+       {2, arcs_50_1},
 };
-static arc arcs_50_1[1] = {
-       {112, 2},
+static arc arcs_51_0[2] = {
+       {115, 1},
+       {116, 2},
 };
-static arc arcs_50_2[1] = {
+static arc arcs_51_1[1] = {
+       {113, 2},
+};
+static arc arcs_51_2[1] = {
        {0, 2},
 };
-static state states_50[3] = {
-       {2, arcs_50_0},
-       {1, arcs_50_1},
-       {1, arcs_50_2},
+static state states_51[3] = {
+       {2, arcs_51_0},
+       {1, arcs_51_1},
+       {1, arcs_51_2},
 };
-static arc arcs_51_0[1] = {
-       {82, 1},
+static arc arcs_52_0[1] = {
+       {84, 1},
 };
-static arc arcs_51_1[2] = {
-       {116, 0},
+static arc arcs_52_1[2] = {
+       {117, 0},
        {0, 1},
 };
-static state states_51[2] = {
-       {1, arcs_51_0},
-       {2, arcs_51_1},
+static state states_52[2] = {
+       {1, arcs_52_0},
+       {2, arcs_52_1},
 };
-static arc arcs_52_0[10] = {
-       {117, 1},
+static arc arcs_53_0[10] = {
        {118, 1},
        {119, 1},
        {120, 1},
        {121, 1},
        {122, 1},
        {123, 1},
-       {83, 1},
-       {114, 2},
-       {124, 3},
+       {124, 1},
+       {85, 1},
+       {115, 2},
+       {125, 3},
 };
-static arc arcs_52_1[1] = {
+static arc arcs_53_1[1] = {
        {0, 1},
 };
-static arc arcs_52_2[1] = {
-       {83, 1},
+static arc arcs_53_2[1] = {
+       {85, 1},
 };
-static arc arcs_52_3[2] = {
-       {114, 1},
+static arc arcs_53_3[2] = {
+       {115, 1},
        {0, 3},
 };
-static state states_52[4] = {
-       {10, arcs_52_0},
-       {1, arcs_52_1},
-       {1, arcs_52_2},
-       {2, arcs_52_3},
-};
-static arc arcs_53_0[1] = {
-       {125, 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 state states_53[4] = {
+       {10, arcs_53_0},
+       {1, arcs_53_1},
+       {1, arcs_53_2},
+       {2, arcs_53_3},
 };
 static arc arcs_54_0[1] = {
-       {127, 1},
+       {126, 1},
 };
 static arc arcs_54_1[2] = {
-       {128, 0},
+       {127, 0},
        {0, 1},
 };
 static state states_54[2] = {
@@ -1159,10 +1159,10 @@ static state states_54[2] = {
        {2, arcs_54_1},
 };
 static arc arcs_55_0[1] = {
-       {129, 1},
+       {128, 1},
 };
 static arc arcs_55_1[2] = {
-       {130, 0},
+       {129, 0},
        {0, 1},
 };
 static state states_55[2] = {
@@ -1170,23 +1170,22 @@ static state states_55[2] = {
        {2, arcs_55_1},
 };
 static arc arcs_56_0[1] = {
-       {131, 1},
+       {130, 1},
 };
-static arc arcs_56_1[3] = {
-       {132, 0},
-       {57, 0},
+static arc arcs_56_1[2] = {
+       {131, 0},
        {0, 1},
 };
 static state states_56[2] = {
        {1, arcs_56_0},
-       {3, arcs_56_1},
+       {2, arcs_56_1},
 };
 static arc arcs_57_0[1] = {
-       {133, 1},
+       {132, 1},
 };
 static arc arcs_57_1[3] = {
-       {134, 0},
-       {135, 0},
+       {133, 0},
+       {59, 0},
        {0, 1},
 };
 static state states_57[2] = {
@@ -1194,156 +1193,142 @@ static state states_57[2] = {
        {3, arcs_57_1},
 };
 static arc arcs_58_0[1] = {
-       {136, 1},
+       {134, 1},
 };
-static arc arcs_58_1[5] = {
-       {28, 0},
-       {137, 0},
-       {138, 0},
-       {139, 0},
+static arc arcs_58_1[3] = {
+       {135, 0},
+       {136, 0},
        {0, 1},
 };
 static state states_58[2] = {
        {1, arcs_58_0},
-       {5, arcs_58_1},
+       {3, arcs_58_1},
 };
-static arc arcs_59_0[4] = {
-       {134, 1},
+static arc arcs_59_0[1] = {
+       {137, 1},
+};
+static arc arcs_59_1[5] = {
+       {30, 0},
+       {138, 0},
+       {139, 0},
+       {140, 0},
+       {0, 1},
+};
+static state states_59[2] = {
+       {1, arcs_59_0},
+       {5, arcs_59_1},
+};
+static arc arcs_60_0[4] = {
        {135, 1},
-       {140, 1},
-       {141, 2},
+       {136, 1},
+       {141, 1},
+       {142, 2},
 };
-static arc arcs_59_1[1] = {
-       {136, 2},
+static arc arcs_60_1[1] = {
+       {137, 2},
 };
-static arc arcs_59_2[1] = {
+static arc arcs_60_2[1] = {
        {0, 2},
 };
-static state states_59[3] = {
-       {4, arcs_59_0},
-       {1, arcs_59_1},
-       {1, arcs_59_2},
-};
-static arc arcs_60_0[1] = {
-       {142, 1},
+static state states_60[3] = {
+       {4, arcs_60_0},
+       {1, arcs_60_1},
+       {1, arcs_60_2},
 };
-static arc arcs_60_1[3] = {
+static arc arcs_61_0[1] = {
        {143, 1},
-       {29, 2},
+};
+static arc arcs_61_1[3] = {
+       {144, 1},
+       {31, 2},
        {0, 1},
 };
-static arc arcs_60_2[1] = {
-       {136, 3},
+static arc arcs_61_2[1] = {
+       {137, 3},
 };
-static arc arcs_60_3[1] = {
+static arc arcs_61_3[1] = {
        {0, 3},
 };
-static state states_60[4] = {
-       {1, arcs_60_0},
-       {3, arcs_60_1},
-       {1, arcs_60_2},
-       {1, arcs_60_3},
+static state states_61[4] = {
+       {1, arcs_61_0},
+       {3, arcs_61_1},
+       {1, arcs_61_2},
+       {1, arcs_61_3},
 };
-static arc arcs_61_0[7] = {
+static arc arcs_62_0[7] = {
        {13, 1},
-       {145, 2},
-       {148, 3},
-       {151, 4},
-       {19, 5},
-       {153, 5},
-       {154, 6},
+       {146, 2},
+       {149, 3},
+       {152, 4},
+       {21, 5},
+       {154, 5},
+       {155, 6},
 };
-static arc arcs_61_1[3] = {
-       {43, 7},
-       {144, 7},
+static arc arcs_62_1[3] = {
+       {45, 7},
+       {145, 7},
        {15, 5},
 };
-static arc arcs_61_2[2] = {
-       {146, 8},
-       {147, 5},
+static arc arcs_62_2[2] = {
+       {147, 8},
+       {148, 5},
 };
-static arc arcs_61_3[2] = {
-       {149, 9},
-       {150, 5},
+static arc arcs_62_3[2] = {
+       {150, 9},
+       {151, 5},
 };
-static arc arcs_61_4[1] = {
-       {152, 10},
+static arc arcs_62_4[1] = {
+       {153, 10},
 };
-static arc arcs_61_5[1] = {
+static arc arcs_62_5[1] = {
        {0, 5},
 };
-static arc arcs_61_6[2] = {
-       {154, 6},
+static arc arcs_62_6[2] = {
+       {155, 6},
        {0, 6},
 };
-static arc arcs_61_7[1] = {
+static arc arcs_62_7[1] = {
        {15, 5},
 };
-static arc arcs_61_8[1] = {
-       {147, 5},
-};
-static arc arcs_61_9[1] = {
-       {150, 5},
+static arc arcs_62_8[1] = {
+       {148, 5},
 };
-static arc arcs_61_10[1] = {
+static arc arcs_62_9[1] = {
        {151, 5},
 };
-static state states_61[11] = {
-       {7, arcs_61_0},
-       {3, arcs_61_1},
-       {2, arcs_61_2},
-       {2, arcs_61_3},
-       {1, arcs_61_4},
-       {1, arcs_61_5},
-       {2, arcs_61_6},
-       {1, arcs_61_7},
-       {1, arcs_61_8},
-       {1, arcs_61_9},
-       {1, arcs_61_10},
-};
-static arc arcs_62_0[1] = {
-       {26, 1},
-};
-static arc arcs_62_1[3] = {
-       {155, 2},
-       {27, 3},
-       {0, 1},
-};
-static arc arcs_62_2[1] = {
-       {0, 2},
+static arc arcs_62_10[1] = {
+       {152, 5},
 };
-static arc arcs_62_3[2] = {
-       {26, 4},
-       {0, 3},
-};
-static arc arcs_62_4[2] = {
-       {27, 3},
-       {0, 4},
-};
-static state states_62[5] = {
-       {1, arcs_62_0},
+static state states_62[11] = {
+       {7, arcs_62_0},
        {3, arcs_62_1},
-       {1, arcs_62_2},
+       {2, arcs_62_2},
        {2, arcs_62_3},
-       {2, arcs_62_4},
+       {1, arcs_62_4},
+       {1, arcs_62_5},
+       {2, arcs_62_6},
+       {1, arcs_62_7},
+       {1, arcs_62_8},
+       {1, arcs_62_9},
+       {1, arcs_62_10},
 };
 static arc arcs_63_0[1] = {
-       {26, 1},
+       {28, 1},
 };
 static arc arcs_63_1[3] = {
        {156, 2},
-       {27, 3},
+       {29, 3},
        {0, 1},
 };
 static arc arcs_63_2[1] = {
        {0, 2},
 };
 static arc arcs_63_3[2] = {
-       {26, 4},
+       {28, 4},
        {0, 3},
 };
 static arc arcs_63_4[2] = {
-       {27, 3},
+       {29, 3},
        {0, 4},
 };
 static state states_63[5] = {
@@ -1354,153 +1339,163 @@ static state states_63[5] = {
        {2, arcs_63_4},
 };
 static arc arcs_64_0[1] = {
-       {108, 1},
+       {28, 1},
 };
-static arc arcs_64_1[2] = {
-       {23, 2},
-       {21, 3},
+static arc arcs_64_1[3] = {
+       {157, 2},
+       {29, 3},
+       {0, 1},
 };
 static arc arcs_64_2[1] = {
-       {21, 3},
+       {0, 2},
 };
-static arc arcs_64_3[1] = {
-       {26, 4},
+static arc arcs_64_3[2] = {
+       {28, 4},
+       {0, 3},
 };
-static arc arcs_64_4[1] = {
+static arc arcs_64_4[2] = {
+       {29, 3},
        {0, 4},
 };
 static state states_64[5] = {
        {1, arcs_64_0},
-       {2, arcs_64_1},
+       {3, arcs_64_1},
        {1, arcs_64_2},
-       {1, arcs_64_3},
-       {1, arcs_64_4},
+       {2, arcs_64_3},
+       {2, arcs_64_4},
 };
-static arc arcs_65_0[3] = {
-       {13, 1},
-       {145, 2},
-       {75, 3},
+static arc arcs_65_0[1] = {
+       {109, 1},
 };
 static arc arcs_65_1[2] = {
-       {14, 4},
-       {15, 5},
+       {25, 2},
+       {23, 3},
 };
 static arc arcs_65_2[1] = {
-       {157, 6},
+       {23, 3},
 };
 static arc arcs_65_3[1] = {
-       {19, 5},
+       {28, 4},
 };
 static arc arcs_65_4[1] = {
-       {15, 5},
-};
-static arc arcs_65_5[1] = {
-       {0, 5},
-};
-static arc arcs_65_6[1] = {
-       {147, 5},
+       {0, 4},
 };
-static state states_65[7] = {
-       {3, arcs_65_0},
+static state states_65[5] = {
+       {1, arcs_65_0},
        {2, arcs_65_1},
        {1, arcs_65_2},
        {1, arcs_65_3},
        {1, arcs_65_4},
-       {1, arcs_65_5},
-       {1, arcs_65_6},
 };
-static arc arcs_66_0[1] = {
-       {158, 1},
+static arc arcs_66_0[3] = {
+       {13, 1},
+       {146, 2},
+       {77, 3},
 };
 static arc arcs_66_1[2] = {
-       {27, 2},
-       {0, 1},
+       {14, 4},
+       {15, 5},
 };
-static arc arcs_66_2[2] = {
-       {158, 1},
-       {0, 2},
+static arc arcs_66_2[1] = {
+       {158, 6},
+};
+static arc arcs_66_3[1] = {
+       {21, 5},
 };
-static state states_66[3] = {
-       {1, arcs_66_0},
+static arc arcs_66_4[1] = {
+       {15, 5},
+};
+static arc arcs_66_5[1] = {
+       {0, 5},
+};
+static arc arcs_66_6[1] = {
+       {148, 5},
+};
+static state states_66[7] = {
+       {3, arcs_66_0},
        {2, arcs_66_1},
-       {2, arcs_66_2},
+       {1, arcs_66_2},
+       {1, arcs_66_3},
+       {1, arcs_66_4},
+       {1, arcs_66_5},
+       {1, arcs_66_6},
 };
-static arc arcs_67_0[3] = {
-       {75, 1},
-       {26, 2},
-       {21, 3},
+static arc arcs_67_0[1] = {
+       {159, 1},
 };
-static arc arcs_67_1[1] = {
-       {75, 4},
+static arc arcs_67_1[2] = {
+       {29, 2},
+       {0, 1},
 };
 static arc arcs_67_2[2] = {
-       {21, 3},
+       {159, 1},
        {0, 2},
 };
-static arc arcs_67_3[3] = {
-       {26, 5},
-       {159, 6},
-       {0, 3},
+static state states_67[3] = {
+       {1, arcs_67_0},
+       {2, arcs_67_1},
+       {2, arcs_67_2},
 };
-static arc arcs_67_4[1] = {
-       {75, 6},
+static arc arcs_68_0[3] = {
+       {77, 1},
+       {28, 2},
+       {23, 3},
 };
-static arc arcs_67_5[2] = {
-       {159, 6},
-       {0, 5},
+static arc arcs_68_1[1] = {
+       {77, 4},
 };
-static arc arcs_67_6[1] = {
-       {0, 6},
+static arc arcs_68_2[2] = {
+       {23, 3},
+       {0, 2},
 };
-static state states_67[7] = {
-       {3, arcs_67_0},
-       {1, arcs_67_1},
-       {2, arcs_67_2},
-       {3, arcs_67_3},
-       {1, arcs_67_4},
-       {2, arcs_67_5},
-       {1, arcs_67_6},
+static arc arcs_68_3[3] = {
+       {28, 5},
+       {160, 6},
+       {0, 3},
 };
-static arc arcs_68_0[1] = {
-       {21, 1},
+static arc arcs_68_4[1] = {
+       {77, 6},
 };
-static arc arcs_68_1[2] = {
-       {26, 2},
-       {0, 1},
+static arc arcs_68_5[2] = {
+       {160, 6},
+       {0, 5},
 };
-static arc arcs_68_2[1] = {
-       {0, 2},
+static arc arcs_68_6[1] = {
+       {0, 6},
 };
-static state states_68[3] = {
-       {1, arcs_68_0},
-       {2, arcs_68_1},
-       {1, arcs_68_2},
+static state states_68[7] = {
+       {3, arcs_68_0},
+       {1, arcs_68_1},
+       {2, arcs_68_2},
+       {3, arcs_68_3},
+       {1, arcs_68_4},
+       {2, arcs_68_5},
+       {1, arcs_68_6},
 };
 static arc arcs_69_0[1] = {
-       {82, 1},
+       {23, 1},
 };
 static arc arcs_69_1[2] = {
-       {27, 2},
+       {28, 2},
        {0, 1},
 };
-static arc arcs_69_2[2] = {
-       {82, 1},
+static arc arcs_69_2[1] = {
        {0, 2},
 };
 static state states_69[3] = {
        {1, arcs_69_0},
        {2, arcs_69_1},
-       {2, arcs_69_2},
+       {1, arcs_69_2},
 };
 static arc arcs_70_0[1] = {
-       {26, 1},
+       {84, 1},
 };
 static arc arcs_70_1[2] = {
-       {27, 2},
+       {29, 2},
        {0, 1},
 };
 static arc arcs_70_2[2] = {
-       {26, 1},
+       {84, 1},
        {0, 2},
 };
 static state states_70[3] = {
@@ -1509,491 +1504,511 @@ static state states_70[3] = {
        {2, arcs_70_2},
 };
 static arc arcs_71_0[1] = {
-       {26, 1},
-};
-static arc arcs_71_1[1] = {
-       {21, 2},
-};
-static arc arcs_71_2[1] = {
-       {26, 3},
+       {28, 1},
 };
-static arc arcs_71_3[2] = {
-       {27, 4},
-       {0, 3},
+static arc arcs_71_1[2] = {
+       {29, 2},
+       {0, 1},
 };
-static arc arcs_71_4[2] = {
-       {26, 1},
-       {0, 4},
+static arc arcs_71_2[2] = {
+       {28, 1},
+       {0, 2},
 };
-static state states_71[5] = {
+static state states_71[3] = {
        {1, arcs_71_0},
-       {1, arcs_71_1},
-       {1, arcs_71_2},
-       {2, arcs_71_3},
-       {2, arcs_71_4},
+       {2, arcs_71_1},
+       {2, arcs_71_2},
 };
 static arc arcs_72_0[1] = {
-       {160, 1},
+       {28, 1},
 };
 static arc arcs_72_1[1] = {
-       {19, 2},
+       {23, 2},
 };
-static arc arcs_72_2[2] = {
-       {13, 3},
-       {21, 4},
+static arc arcs_72_2[1] = {
+       {28, 3},
 };
 static arc arcs_72_3[2] = {
-       {9, 5},
-       {15, 6},
-};
-static arc arcs_72_4[1] = {
-       {22, 7},
-};
-static arc arcs_72_5[1] = {
-       {15, 6},
-};
-static arc arcs_72_6[1] = {
-       {21, 4},
+       {29, 4},
+       {0, 3},
 };
-static arc arcs_72_7[1] = {
-       {0, 7},
+static arc arcs_72_4[2] = {
+       {28, 1},
+       {0, 4},
 };
-static state states_72[8] = {
+static state states_72[5] = {
        {1, arcs_72_0},
        {1, arcs_72_1},
-       {2, arcs_72_2},
+       {1, arcs_72_2},
        {2, arcs_72_3},
-       {1, arcs_72_4},
-       {1, arcs_72_5},
-       {1, arcs_72_6},
-       {1, arcs_72_7},
+       {2, arcs_72_4},
 };
-static arc arcs_73_0[3] = {
+static arc arcs_73_0[1] = {
        {161, 1},
-       {28, 2},
-       {29, 3},
 };
-static arc arcs_73_1[2] = {
-       {27, 4},
-       {0, 1},
+static arc arcs_73_1[1] = {
+       {21, 2},
 };
-static arc arcs_73_2[1] = {
-       {26, 5},
+static arc arcs_73_2[2] = {
+       {13, 3},
+       {23, 4},
 };
-static arc arcs_73_3[1] = {
-       {26, 6},
+static arc arcs_73_3[2] = {
+       {9, 5},
+       {15, 6},
 };
-static arc arcs_73_4[4] = {
-       {161, 1},
-       {28, 2},
-       {29, 3},
-       {0, 4},
+static arc arcs_73_4[1] = {
+       {24, 7},
 };
-static arc arcs_73_5[2] = {
-       {27, 7},
-       {0, 5},
+static arc arcs_73_5[1] = {
+       {15, 6},
 };
 static arc arcs_73_6[1] = {
-       {0, 6},
+       {23, 4},
 };
 static arc arcs_73_7[1] = {
-       {29, 3},
+       {0, 7},
 };
 static state states_73[8] = {
-       {3, arcs_73_0},
-       {2, arcs_73_1},
-       {1, arcs_73_2},
-       {1, arcs_73_3},
-       {4, arcs_73_4},
-       {2, arcs_73_5},
+       {1, arcs_73_0},
+       {1, arcs_73_1},
+       {2, arcs_73_2},
+       {2, arcs_73_3},
+       {1, arcs_73_4},
+       {1, arcs_73_5},
        {1, arcs_73_6},
        {1, arcs_73_7},
 };
-static arc arcs_74_0[1] = {
-       {26, 1},
+static arc arcs_74_0[3] = {
+       {162, 1},
+       {30, 2},
+       {31, 3},
 };
-static arc arcs_74_1[3] = {
-       {156, 2},
-       {25, 3},
+static arc arcs_74_1[2] = {
+       {29, 4},
        {0, 1},
 };
 static arc arcs_74_2[1] = {
-       {0, 2},
+       {28, 5},
 };
 static arc arcs_74_3[1] = {
-       {26, 2},
+       {28, 6},
+};
+static arc arcs_74_4[4] = {
+       {162, 1},
+       {30, 2},
+       {31, 3},
+       {0, 4},
+};
+static arc arcs_74_5[2] = {
+       {29, 7},
+       {0, 5},
 };
-static state states_74[4] = {
-       {1, arcs_74_0},
-       {3, arcs_74_1},
+static arc arcs_74_6[1] = {
+       {0, 6},
+};
+static arc arcs_74_7[1] = {
+       {31, 3},
+};
+static state states_74[8] = {
+       {3, arcs_74_0},
+       {2, arcs_74_1},
        {1, arcs_74_2},
        {1, arcs_74_3},
+       {4, arcs_74_4},
+       {2, arcs_74_5},
+       {1, arcs_74_6},
+       {1, arcs_74_7},
 };
-static arc arcs_75_0[2] = {
-       {155, 1},
-       {163, 1},
+static arc arcs_75_0[1] = {
+       {28, 1},
 };
-static arc arcs_75_1[1] = {
+static arc arcs_75_1[3] = {
+       {157, 2},
+       {27, 3},
        {0, 1},
 };
-static state states_75[2] = {
-       {2, arcs_75_0},
-       {1, arcs_75_1},
-};
-static arc arcs_76_0[1] = {
-       {95, 1},
-};
-static arc arcs_76_1[1] = {
-       {59, 2},
+static arc arcs_75_2[1] = {
+       {0, 2},
 };
-static arc arcs_76_2[1] = {
-       {83, 3},
+static arc arcs_75_3[1] = {
+       {28, 2},
 };
-static arc arcs_76_3[1] = {
-       {104, 4},
+static state states_75[4] = {
+       {1, arcs_75_0},
+       {3, arcs_75_1},
+       {1, arcs_75_2},
+       {1, arcs_75_3},
 };
-static arc arcs_76_4[2] = {
-       {162, 5},
-       {0, 4},
+static arc arcs_76_0[2] = {
+       {156, 1},
+       {164, 1},
 };
-static arc arcs_76_5[1] = {
-       {0, 5},
+static arc arcs_76_1[1] = {
+       {0, 1},
 };
-static state states_76[6] = {
-       {1, arcs_76_0},
+static state states_76[2] = {
+       {2, arcs_76_0},
        {1, arcs_76_1},
-       {1, arcs_76_2},
-       {1, arcs_76_3},
-       {2, arcs_76_4},
-       {1, arcs_76_5},
 };
 static arc arcs_77_0[1] = {
-       {91, 1},
+       {96, 1},
 };
 static arc arcs_77_1[1] = {
-       {105, 2},
+       {61, 2},
 };
-static arc arcs_77_2[2] = {
-       {162, 3},
-       {0, 2},
+static arc arcs_77_2[1] = {
+       {85, 3},
 };
 static arc arcs_77_3[1] = {
-       {0, 3},
+       {105, 4},
+};
+static arc arcs_77_4[2] = {
+       {163, 5},
+       {0, 4},
+};
+static arc arcs_77_5[1] = {
+       {0, 5},
 };
-static state states_77[4] = {
+static state states_77[6] = {
        {1, arcs_77_0},
        {1, arcs_77_1},
-       {2, arcs_77_2},
+       {1, arcs_77_2},
        {1, arcs_77_3},
+       {2, arcs_77_4},
+       {1, arcs_77_5},
 };
-static arc arcs_78_0[2] = {
-       {156, 1},
-       {165, 1},
+static arc arcs_78_0[1] = {
+       {92, 1},
 };
 static arc arcs_78_1[1] = {
-       {0, 1},
-};
-static state states_78[2] = {
-       {2, arcs_78_0},
-       {1, arcs_78_1},
-};
-static arc arcs_79_0[1] = {
-       {95, 1},
+       {106, 2},
 };
-static arc arcs_79_1[1] = {
-       {59, 2},
+static arc arcs_78_2[2] = {
+       {163, 3},
+       {0, 2},
 };
-static arc arcs_79_2[1] = {
-       {83, 3},
+static arc arcs_78_3[1] = {
+       {0, 3},
 };
-static arc arcs_79_3[1] = {
-       {106, 4},
+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_4[2] = {
-       {164, 5},
-       {0, 4},
+static arc arcs_79_0[2] = {
+       {157, 1},
+       {166, 1},
 };
-static arc arcs_79_5[1] = {
-       {0, 5},
+static arc arcs_79_1[1] = {
+       {0, 1},
 };
-static state states_79[6] = {
-       {1, arcs_79_0},
+static state states_79[2] = {
+       {2, arcs_79_0},
        {1, arcs_79_1},
-       {1, arcs_79_2},
-       {1, arcs_79_3},
-       {2, arcs_79_4},
-       {1, arcs_79_5},
 };
 static arc arcs_80_0[1] = {
-       {91, 1},
+       {96, 1},
 };
 static arc arcs_80_1[1] = {
-       {105, 2},
+       {61, 2},
 };
-static arc arcs_80_2[2] = {
-       {164, 3},
-       {0, 2},
+static arc arcs_80_2[1] = {
+       {85, 3},
 };
 static arc arcs_80_3[1] = {
-       {0, 3},
+       {107, 4},
+};
+static arc arcs_80_4[2] = {
+       {165, 5},
+       {0, 4},
 };
-static state states_80[4] = {
+static arc arcs_80_5[1] = {
+       {0, 5},
+};
+static state states_80[6] = {
        {1, arcs_80_0},
        {1, arcs_80_1},
-       {2, arcs_80_2},
+       {1, arcs_80_2},
        {1, arcs_80_3},
+       {2, arcs_80_4},
+       {1, arcs_80_5},
 };
 static arc arcs_81_0[1] = {
-       {26, 1},
+       {92, 1},
 };
-static arc arcs_81_1[2] = {
-       {27, 0},
-       {0, 1},
+static arc arcs_81_1[1] = {
+       {106, 2},
 };
-static state states_81[2] = {
+static arc arcs_81_2[2] = {
+       {165, 3},
+       {0, 2},
+};
+static arc arcs_81_3[1] = {
+       {0, 3},
+};
+static state states_81[4] = {
        {1, arcs_81_0},
-       {2, arcs_81_1},
+       {1, arcs_81_1},
+       {2, arcs_81_2},
+       {1, arcs_81_3},
 };
 static arc arcs_82_0[1] = {
-       {19, 1},
+       {28, 1},
 };
-static arc arcs_82_1[1] = {
+static arc arcs_82_1[2] = {
+       {29, 0},
        {0, 1},
 };
 static state states_82[2] = {
        {1, arcs_82_0},
-       {1, arcs_82_1},
+       {2, arcs_82_1},
 };
 static arc arcs_83_0[1] = {
-       {167, 1},
+       {21, 1},
+};
+static arc arcs_83_1[1] = {
+       {0, 1},
 };
-static arc arcs_83_1[2] = {
+static state states_83[2] = {
+       {1, arcs_83_0},
+       {1, arcs_83_1},
+};
+static arc arcs_84_0[1] = {
+       {168, 1},
+};
+static arc arcs_84_1[2] = {
        {9, 2},
        {0, 1},
 };
-static arc arcs_83_2[1] = {
+static arc arcs_84_2[1] = {
        {0, 2},
 };
-static state states_83[3] = {
-       {1, arcs_83_0},
-       {2, arcs_83_1},
-       {1, arcs_83_2},
+static state states_84[3] = {
+       {1, arcs_84_0},
+       {2, arcs_84_1},
+       {1, arcs_84_2},
 };
-static dfa dfas[84] = {
+static dfa dfas[85] = {
        {256, "single_input", 0, 3, states_0,
-        "\004\050\014\000\000\000\000\025\074\005\023\310\011\020\004\000\300\020\222\006\201"},
+        "\004\050\060\000\000\000\000\124\360\024\114\220\023\040\010\000\200\041\044\015\002\001"},
        {257, "file_input", 0, 2, states_1,
-        "\204\050\014\000\000\000\000\025\074\005\023\310\011\020\004\000\300\020\222\006\201"},
+        "\204\050\060\000\000\000\000\124\360\024\114\220\023\040\010\000\200\041\044\015\002\001"},
        {258, "eval_input", 0, 3, states_2,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\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"},
+        "\000\010\000\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,
-        "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {261, "funcdef", 0, 7, states_5,
-        "\000\010\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {262, "parameters", 0, 4, states_6,
-        "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {263, "varargslist", 0, 10, states_7,
-        "\000\040\010\060\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {264, "fpdef", 0, 4, states_8,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {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\005\023\310\011\020\004\000\300\020\222\006\201"},
-       {267, "simple_stmt", 0, 4, states_11,
-        "\000\040\010\000\000\000\000\025\074\005\023\000\000\020\004\000\300\020\222\006\200"},
-       {268, "small_stmt", 0, 2, states_12,
-        "\000\040\010\000\000\000\000\025\074\005\023\000\000\020\004\000\300\020\222\006\200"},
-       {269, "expr_stmt", 0, 6, states_13,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\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,
-        "\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {272, "del_stmt", 0, 3, states_16,
-        "\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {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\200"},
-       {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,
-        "\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {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\200"},
-       {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,
-        "\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000"},
-       {281, "import_name", 0, 3, states_25,
-        "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000"},
-       {282, "import_from", 0, 8, states_26,
-        "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000"},
-       {283, "import_as_name", 0, 4, states_27,
-        "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {284, "dotted_as_name", 0, 4, states_28,
-        "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {285, "import_as_names", 0, 3, states_29,
-        "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {286, "dotted_as_names", 0, 2, states_30,
-        "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {287, "dotted_name", 0, 2, states_31,
-        "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {288, "global_stmt", 0, 3, states_32,
-        "\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"},
-       {289, "exec_stmt", 0, 7, states_33,
-        "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000"},
-       {290, "assert_stmt", 0, 5, states_34,
-        "\000\000\000\000\000\000\000\000\000\000\020\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\310\011\000\000\000\000\000\000\000\001"},
-       {292, "if_stmt", 0, 8, states_36,
-        "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
-       {293, "while_stmt", 0, 8, states_37,
-        "\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
-       {294, "for_stmt", 0, 10, states_38,
-        "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"},
-       {295, "try_stmt", 0, 13, states_39,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"},
-       {296, "with_stmt", 0, 6, states_40,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"},
-       {297, "with_var", 0, 3, states_41,
-        "\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
-       {298, "except_clause", 0, 5, states_42,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
-       {299, "suite", 0, 5, states_43,
-        "\004\040\010\000\000\000\000\025\074\005\023\000\000\020\004\000\300\020\222\006\200"},
-       {300, "testlist_safe", 0, 5, states_44,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {301, "old_test", 0, 2, states_45,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {302, "old_lambdef", 0, 5, states_46,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000"},
-       {303, "test", 0, 6, states_47,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {304, "or_test", 0, 2, states_48,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\004\000\300\020\222\006\000"},
-       {305, "and_test", 0, 2, states_49,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\004\000\300\020\222\006\000"},
-       {306, "not_test", 0, 3, states_50,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\004\000\300\020\222\006\000"},
-       {307, "comparison", 0, 2, states_51,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {308, "comp_op", 0, 4, states_52,
-        "\000\000\000\000\000\000\000\000\000\000\010\000\000\000\344\037\000\000\000\000\000"},
-       {309, "expr", 0, 2, states_53,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {310, "xor_expr", 0, 2, states_54,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {311, "and_expr", 0, 2, states_55,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {312, "shift_expr", 0, 2, states_56,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {313, "arith_expr", 0, 2, states_57,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {314, "term", 0, 2, states_58,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {315, "factor", 0, 3, states_59,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {316, "power", 0, 4, states_60,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\222\006\000"},
-       {317, "atom", 0, 11, states_61,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\222\006\000"},
-       {318, "listmaker", 0, 5, states_62,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {319, "testlist_gexp", 0, 5, states_63,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {320, "lambdef", 0, 5, states_64,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000"},
-       {321, "trailer", 0, 7, states_65,
-        "\000\040\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\002\000\000"},
-       {322, "subscriptlist", 0, 3, states_66,
-        "\000\040\050\000\000\000\000\000\000\010\000\000\000\020\004\000\300\020\222\006\000"},
-       {323, "subscript", 0, 7, states_67,
-        "\000\040\050\000\000\000\000\000\000\010\000\000\000\020\004\000\300\020\222\006\000"},
-       {324, "sliceop", 0, 3, states_68,
-        "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {325, "exprlist", 0, 3, states_69,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"},
-       {326, "testlist", 0, 3, states_70,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {327, "dictmaker", 0, 5, states_71,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {328, "classdef", 0, 8, states_72,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
-       {329, "arglist", 0, 8, states_73,
-        "\000\040\010\060\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {330, "argument", 0, 4, states_74,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {331, "list_iter", 0, 2, states_75,
-        "\000\000\000\000\000\000\000\000\000\000\000\210\000\000\000\000\000\000\000\000\000"},
-       {332, "list_for", 0, 6, states_76,
-        "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"},
-       {333, "list_if", 0, 4, states_77,
-        "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
-       {334, "gen_iter", 0, 2, states_78,
-        "\000\000\000\000\000\000\000\000\000\000\000\210\000\000\000\000\000\000\000\000\000"},
-       {335, "gen_for", 0, 6, states_79,
-        "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"},
-       {336, "gen_if", 0, 4, states_80,
-        "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
-       {337, "testlist1", 0, 2, states_81,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"},
-       {338, "encoding_decl", 0, 2, states_82,
-        "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {339, "yield_expr", 0, 3, states_83,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200"},
-};
-static label labels[168] = {
+        "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {261, "decorated", 0, 3, states_5,
+        "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {262, "funcdef", 0, 6, states_6,
+        "\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {263, "parameters", 0, 4, states_7,
+        "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {264, "varargslist", 0, 10, states_8,
+        "\000\040\040\300\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {265, "fpdef", 0, 4, states_9,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {266, "fplist", 0, 3, states_10,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {267, "stmt", 0, 2, states_11,
+        "\000\050\060\000\000\000\000\124\360\024\114\220\023\040\010\000\200\041\044\015\002\001"},
+       {268, "simple_stmt", 0, 4, states_12,
+        "\000\040\040\000\000\000\000\124\360\024\114\000\000\040\010\000\200\041\044\015\000\001"},
+       {269, "small_stmt", 0, 2, states_13,
+        "\000\040\040\000\000\000\000\124\360\024\114\000\000\040\010\000\200\041\044\015\000\001"},
+       {270, "expr_stmt", 0, 6, states_14,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {271, "augassign", 0, 2, states_15,
+        "\000\000\000\000\000\300\377\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {272, "print_stmt", 0, 9, states_16,
+        "\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {273, "del_stmt", 0, 3, states_17,
+        "\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {274, "pass_stmt", 0, 2, states_18,
+        "\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {275, "flow_stmt", 0, 2, states_19,
+        "\000\000\000\000\000\000\000\000\360\000\000\000\000\000\000\000\000\000\000\000\000\001"},
+       {276, "break_stmt", 0, 2, states_20,
+        "\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {277, "continue_stmt", 0, 2, states_21,
+        "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {278, "return_stmt", 0, 3, states_22,
+        "\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {279, "yield_stmt", 0, 2, states_23,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
+       {280, "raise_stmt", 0, 7, states_24,
+        "\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {281, "import_stmt", 0, 2, states_25,
+        "\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {282, "import_name", 0, 3, states_26,
+        "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {283, "import_from", 0, 8, states_27,
+        "\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {284, "import_as_name", 0, 4, states_28,
+        "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {285, "dotted_as_name", 0, 4, states_29,
+        "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {286, "import_as_names", 0, 3, states_30,
+        "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {287, "dotted_as_names", 0, 2, states_31,
+        "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {288, "dotted_name", 0, 2, states_32,
+        "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {289, "global_stmt", 0, 3, states_33,
+        "\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000"},
+       {290, "exec_stmt", 0, 7, states_34,
+        "\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000"},
+       {291, "assert_stmt", 0, 5, states_35,
+        "\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
+       {292, "compound_stmt", 0, 2, states_36,
+        "\000\010\020\000\000\000\000\000\000\000\000\220\023\000\000\000\000\000\000\000\002\000"},
+       {293, "if_stmt", 0, 8, states_37,
+        "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"},
+       {294, "while_stmt", 0, 8, states_38,
+        "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"},
+       {295, "for_stmt", 0, 10, states_39,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+       {296, "try_stmt", 0, 13, states_40,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
+       {297, "with_stmt", 0, 6, states_41,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"},
+       {298, "with_var", 0, 3, states_42,
+        "\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000"},
+       {299, "except_clause", 0, 5, states_43,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
+       {300, "suite", 0, 5, states_44,
+        "\004\040\040\000\000\000\000\124\360\024\114\000\000\040\010\000\200\041\044\015\000\001"},
+       {301, "testlist_safe", 0, 5, states_45,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {302, "old_test", 0, 2, states_46,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {303, "old_lambdef", 0, 5, states_47,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
+       {304, "test", 0, 6, states_48,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {305, "or_test", 0, 2, states_49,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\010\000\200\041\044\015\000\000"},
+       {306, "and_test", 0, 2, states_50,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\010\000\200\041\044\015\000\000"},
+       {307, "not_test", 0, 3, states_51,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\010\000\200\041\044\015\000\000"},
+       {308, "comparison", 0, 2, states_52,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {309, "comp_op", 0, 4, states_53,
+        "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\310\077\000\000\000\000\000\000"},
+       {310, "expr", 0, 2, states_54,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {311, "xor_expr", 0, 2, states_55,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {312, "and_expr", 0, 2, states_56,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {313, "shift_expr", 0, 2, states_57,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {314, "arith_expr", 0, 2, states_58,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {315, "term", 0, 2, states_59,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {316, "factor", 0, 3, states_60,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {317, "power", 0, 4, states_61,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\044\015\000\000"},
+       {318, "atom", 0, 11, states_62,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\044\015\000\000"},
+       {319, "listmaker", 0, 5, states_63,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {320, "testlist_gexp", 0, 5, states_64,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {321, "lambdef", 0, 5, states_65,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
+       {322, "trailer", 0, 7, states_66,
+        "\000\040\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\004\000\000\000"},
+       {323, "subscriptlist", 0, 3, states_67,
+        "\000\040\240\000\000\000\000\000\000\040\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {324, "subscript", 0, 7, states_68,
+        "\000\040\240\000\000\000\000\000\000\040\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {325, "sliceop", 0, 3, states_69,
+        "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {326, "exprlist", 0, 3, states_70,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\000\000\000\200\041\044\015\000\000"},
+       {327, "testlist", 0, 3, states_71,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {328, "dictmaker", 0, 5, states_72,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {329, "classdef", 0, 8, states_73,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000"},
+       {330, "arglist", 0, 8, states_74,
+        "\000\040\040\300\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {331, "argument", 0, 4, states_75,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {332, "list_iter", 0, 2, states_76,
+        "\000\000\000\000\000\000\000\000\000\000\000\020\001\000\000\000\000\000\000\000\000\000"},
+       {333, "list_for", 0, 6, states_77,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+       {334, "list_if", 0, 4, states_78,
+        "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"},
+       {335, "gen_iter", 0, 2, states_79,
+        "\000\000\000\000\000\000\000\000\000\000\000\020\001\000\000\000\000\000\000\000\000\000"},
+       {336, "gen_for", 0, 6, states_80,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+       {337, "gen_if", 0, 4, states_81,
+        "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"},
+       {338, "testlist1", 0, 2, states_82,
+        "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\000"},
+       {339, "encoding_decl", 0, 2, states_83,
+        "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {340, "yield_expr", 0, 3, states_84,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
+};
+static label labels[169] = {
        {0, "EMPTY"},
        {256, 0},
        {4, 0},
-       {267, 0},
-       {291, 0},
+       {268, 0},
+       {292, 0},
        {257, 0},
-       {266, 0},
+       {267, 0},
        {0, 0},
        {258, 0},
-       {326, 0},
+       {327, 0},
        {259, 0},
        {50, 0},
-       {287, 0},
+       {288, 0},
        {7, 0},
-       {329, 0},
+       {330, 0},
        {8, 0},
        {260, 0},
        {261, 0},
+       {329, 0},
+       {262, 0},
        {1, "def"},
        {1, 0},
-       {262, 0},
-       {11, 0},
-       {299, 0},
        {263, 0},
+       {11, 0},
+       {300, 0},
        {264, 0},
+       {265, 0},
        {22, 0},
-       {303, 0},
+       {304, 0},
        {12, 0},
        {16, 0},
        {36, 0},
-       {265, 0},
-       {268, 0},
-       {13, 0},
+       {266, 0},
        {269, 0},
-       {271, 0},
+       {13, 0},
+       {270, 0},
        {272, 0},
        {273, 0},
        {274, 0},
-       {280, 0},
-       {288, 0},
+       {275, 0},
+       {281, 0},
        {289, 0},
        {290, 0},
-       {270, 0},
-       {339, 0},
+       {291, 0},
+       {271, 0},
+       {340, 0},
        {37, 0},
        {38, 0},
        {39, 0},
@@ -2009,64 +2024,63 @@ static label labels[168] = {
        {1, "print"},
        {35, 0},
        {1, "del"},
-       {325, 0},
+       {326, 0},
        {1, "pass"},
-       {275, 0},
        {276, 0},
        {277, 0},
-       {279, 0},
        {278, 0},
+       {280, 0},
+       {279, 0},
        {1, "break"},
        {1, "continue"},
        {1, "return"},
        {1, "raise"},
-       {281, 0},
        {282, 0},
+       {283, 0},
        {1, "import"},
-       {286, 0},
+       {287, 0},
        {1, "from"},
        {23, 0},
-       {285, 0},
-       {283, 0},
-       {1, "as"},
+       {286, 0},
        {284, 0},
+       {1, "as"},
+       {285, 0},
        {1, "global"},
        {1, "exec"},
-       {309, 0},
+       {310, 0},
        {1, "in"},
        {1, "assert"},
-       {292, 0},
        {293, 0},
        {294, 0},
        {295, 0},
        {296, 0},
-       {328, 0},
+       {297, 0},
        {1, "if"},
        {1, "elif"},
        {1, "else"},
        {1, "while"},
        {1, "for"},
        {1, "try"},
-       {298, 0},
+       {299, 0},
        {1, "finally"},
        {1, "with"},
-       {297, 0},
+       {298, 0},
        {1, "except"},
        {5, 0},
        {6, 0},
-       {300, 0},
        {301, 0},
-       {304, 0},
        {302, 0},
-       {1, "lambda"},
-       {320, 0},
        {305, 0},
-       {1, "or"},
+       {303, 0},
+       {1, "lambda"},
+       {321, 0},
        {306, 0},
+       {1, "or"},
+       {307, 0},
        {1, "and"},
        {1, "not"},
-       {307, 0},
        {308, 0},
+       {309, 0},
        {20, 0},
        {21, 0},
        {28, 0},
@@ -2075,53 +2089,53 @@ static label labels[168] = {
        {29, 0},
        {29, 0},
        {1, "is"},
-       {310, 0},
-       {18, 0},
        {311, 0},
-       {33, 0},
+       {18, 0},
        {312, 0},
-       {19, 0},
+       {33, 0},
        {313, 0},
-       {34, 0},
+       {19, 0},
        {314, 0},
+       {34, 0},
+       {315, 0},
        {14, 0},
        {15, 0},
-       {315, 0},
+       {316, 0},
        {17, 0},
        {24, 0},
        {48, 0},
        {32, 0},
-       {316, 0},
        {317, 0},
-       {321, 0},
-       {319, 0},
-       {9, 0},
        {318, 0},
+       {322, 0},
+       {320, 0},
+       {9, 0},
+       {319, 0},
        {10, 0},
        {26, 0},
-       {327, 0},
+       {328, 0},
        {27, 0},
        {25, 0},
-       {337, 0},
+       {338, 0},
        {2, 0},
        {3, 0},
-       {332, 0},
-       {335, 0},
-       {322, 0},
+       {333, 0},
+       {336, 0},
        {323, 0},
        {324, 0},
+       {325, 0},
        {1, "class"},
-       {330, 0},
        {331, 0},
-       {333, 0},
+       {332, 0},
        {334, 0},
-       {336, 0},
-       {338, 0},
+       {335, 0},
+       {337, 0},
+       {339, 0},
        {1, "yield"},
 };
 grammar _PyParser_Grammar = {
-       84,
+       85,
        dfas,
-       {168, labels},
+       {169, labels},
        256
 };
index 1e1279a52cfa7afc5bc09f2cb9d7a8a29a8d74f5..56e187a7d156c795659b0e01fcca5294c8ddd466 100644 (file)
@@ -931,8 +931,8 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
                        return 0;
                if (s->v.FunctionDef.args->defaults)
                        VISIT_SEQ(st, expr, s->v.FunctionDef.args->defaults);
-               if (s->v.FunctionDef.decorators)
-                       VISIT_SEQ(st, expr, s->v.FunctionDef.decorators);
+               if (s->v.FunctionDef.decorator_list)
+                       VISIT_SEQ(st, expr, s->v.FunctionDef.decorator_list);
                if (!symtable_enter_block(st, s->v.FunctionDef.name, 
                                          FunctionBlock, (void *)s, s->lineno))
                        return 0;
@@ -946,6 +946,8 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
                if (!symtable_add_def(st, s->v.ClassDef.name, DEF_LOCAL))
                        return 0;
                VISIT_SEQ(st, expr, s->v.ClassDef.bases);
+               if (s->v.ClassDef.decorator_list)
+                       VISIT_SEQ(st, expr, s->v.ClassDef.decorator_list);
                if (!symtable_enter_block(st, s->v.ClassDef.name, ClassBlock, 
                                          (void *)s, s->lineno))
                        return 0;