develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35426 - trunk/compilers/pirc/src

From:
kjs
Date:
January 11, 2009 15:16
Subject:
[svn:parrot] r35426 - trunk/compilers/pirc/src
Message ID:
20090111231400.99497CB9F9@x12.develooper.com
Author: kjs
Date: Sun Jan 11 15:13:58 2009
New Revision: 35426

Modified:
   trunk/compilers/pirc/src/bcgen.c
   trunk/compilers/pirc/src/pir.l
   trunk/compilers/pirc/src/pir.y
   trunk/compilers/pirc/src/pircompunit.h
   trunk/compilers/pirc/src/piremit.c
   trunk/compilers/pirc/src/pirlexer.c
   trunk/compilers/pirc/src/pirlexer.h
   trunk/compilers/pirc/src/pirparser.c
   trunk/compilers/pirc/src/pirparser.h

Log:
[pirc] add :lookahead token to lexer and parser. Add the flag as well. Add some doc.

Modified: trunk/compilers/pirc/src/bcgen.c
==============================================================================
--- trunk/compilers/pirc/src/bcgen.c	(original)
+++ trunk/compilers/pirc/src/bcgen.c	Sun Jan 11 15:13:58 2009
@@ -230,7 +230,8 @@
 =item C<int
 add_key_const(bytecode * const bc, PMC *key)>
 
-Add a key constant to the constants list.
+Add a key constant to the constants list. The index where C<key> is
+stored in the constants table is returned.
 
 =cut
 
@@ -331,23 +332,23 @@
 bytecode *
 new_bytecode(Interp *interp, char const * const filename) {
     PMC      *self;
-    bytecode *bc      = (bytecode *)mem_sys_allocate(sizeof (bytecode));
+    bytecode *bc = (bytecode *)mem_sys_allocate(sizeof (bytecode));
 
     /* Create a new packfile and load it into the parrot interpreter */
-    bc->packfile      = PackFile_new(interp, 0);
+    bc->packfile = PackFile_new(interp, 0);
     Parrot_loadbc(interp, bc->packfile);
 
     /* store a pointer to the parrot interpreter, which saves passing around
      * the interp as an extra argument.
      */
-    bc->interp        = interp;
+    bc->interp   = interp;
 
     /* create segments */
     PARROT_ASSERT(filename != NULL);
-    interp->code      = PF_create_default_segs(interp, filename, 1);
+    interp->code = PF_create_default_segs(interp, filename, 1);
 
     /* add interpreter globals to bytecode. XXX Why is this? */
-    self              = VTABLE_get_pmc_keyed_int(interp, interp->iglobals, IGLOBALS_INTERPRETER);
+    self         = VTABLE_get_pmc_keyed_int(interp, interp->iglobals, IGLOBALS_INTERPRETER);
     add_pmc_const(bc, self);
 
     return bc;
@@ -358,7 +359,9 @@
 =item C<void
 create_codesegment(bytecode * const bc, int codesize)>
 
-Create a code segment of size C<codesize>.
+Create a code segment of size C<codesize>. C<bc>'s C<opcursor> attribute
+is initialized; this is the pointer used to write opcodes and operands
+into the code segment.
 
 =cut
 

Modified: trunk/compilers/pirc/src/pir.l
==============================================================================
--- trunk/compilers/pirc/src/pir.l	(original)
+++ trunk/compilers/pirc/src/pir.l	Sun Jan 11 15:13:58 2009
@@ -379,6 +379,7 @@
 ":named"          { return TK_FLAG_NAMED; }
 ":flat"           { return TK_FLAG_FLAT; }
 ":invocant"       { return TK_FLAG_INVOCANT; }
+":lookahead"      { return TK_FLAG_LOOKAHEAD; }
 
 ":"{IDENT}        { yypirerror(yyscanner, yyget_extra(yyscanner),
                                "unrecognized flag: '%s'", yytext);

Modified: trunk/compilers/pirc/src/pir.y
==============================================================================
--- trunk/compilers/pirc/src/pir.y	(original)
+++ trunk/compilers/pirc/src/pir.y	Sun Jan 11 15:13:58 2009
@@ -364,6 +364,7 @@
        TK_FLAG_OPTIONAL     ":optional"
        TK_FLAG_OPT_FLAG     ":opt_flag"
        TK_FLAG_INVOCANT     ":invocant"
+       TK_FLAG_LOOKAHEAD    ":lookahead"
 
 /* tokens and types for macro layer */
 
@@ -465,7 +466,8 @@
              target_flag
              param_flags
              param_flag
-             invocant_param
+             invocant_flag
+             lookahead_flag
              arg_flags
              arg_flag
              if_unless
@@ -827,11 +829,16 @@
                   ;
 
 param_flag        : target_flag
-                  | invocant_param
+                  | invocant_flag
+                  | lookahead_flag
                   | unique_reg_flag
                   ;
 
-invocant_param    : ":invocant" '(' multi_type ')'
+lookahead_flag    : ":lookahead" '(' ')'
+                         { $$ = TARGET_FLAG_LOOKAHEAD; }
+                  ;
+
+invocant_flag     : ":invocant" '(' multi_type ')'
                          { $$ = TARGET_FLAG_INVOCANT;
                            /* XXX handle multi_type */
 

Modified: trunk/compilers/pirc/src/pircompunit.h
==============================================================================
--- trunk/compilers/pirc/src/pircompunit.h	(original)
+++ trunk/compilers/pirc/src/pircompunit.h	Sun Jan 11 15:13:58 2009
@@ -50,6 +50,7 @@
     TARGET_FLAG_UNIQUE_REG  = 1 << 4, /* flag to tell register allocator to leave this poor target
                                          alone! */
     TARGET_FLAG_INVOCANT    = 1 << 5, /* XXX for MDD; to be implemented according to PDD27 */
+    TARGET_FLAG_LOOKAHEAD   = 1 << 6, /* for :lookahead */
 
     /* abuse this enum for these pir compiler internal flags; by adding them here, they can
      * be encoded in the same flag member variable of the target struct, preventing the need

Modified: trunk/compilers/pirc/src/piremit.c
==============================================================================
--- trunk/compilers/pirc/src/piremit.c	(original)
+++ trunk/compilers/pirc/src/piremit.c	Sun Jan 11 15:13:58 2009
@@ -548,24 +548,26 @@
 */
 static int
 emit_pbc_key(lexer_state * const lexer, key * const k) {
-    key_entry  *iter      = k->head;
-    int         keylength = 0;
-
+    key_entry  *iter;
     opcode_t   *key;
     opcode_t    keysize;    /* total size of key in bytecode */
     opcode_t   *pc;         /* cursor to write into key array */
     expression *operand;
     int         index;
 
-    /* create an array of opcode_t for storing the bytecode
-     * representation of the key. Initialize the cursor (pc)
-     * to write into this buffer.
+    /* create an array of opcode_t for storing the bytecode representation
+     * of the key. Initialize the cursor (pc) to write into this buffer.
+     * The size is 2 opcode_t's for each key plus 1 opcode_t for storing the size.
      */
-    pc = key = (opcode_t *)pir_mem_allocate(lexer, k->keylength * sizeof (opcode_t) * 4);
+    pc  =
+    key = (opcode_t *)pir_mem_allocate(lexer, (k->keylength * 2 + 1) * sizeof (opcode_t));
 
     /* store key length in slot 0 */
     *pc++ = k->keylength;
 
+    /* initialize iterator */
+    iter  = k->head;
+
     while (iter) {
         switch (iter->expr->type) {
             case EXPR_CONSTANT: {
@@ -619,8 +621,6 @@
 
         }
 
-        /* count the number of keys XXX  no longer necessary. keep for now. sanity check? */
-        ++keylength;
         iter = iter->next;
     }
 

Modified: trunk/compilers/pirc/src/pirlexer.c
==============================================================================
--- trunk/compilers/pirc/src/pirlexer.c	(original)
+++ trunk/compilers/pirc/src/pirlexer.c	Sun Jan 11 15:13:58 2009
@@ -482,8 +482,8 @@
     yyg->yy_c_buf_p = yy_cp;
 
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 208
-#define YY_END_OF_BUFFER 209
+#define YY_NUM_RULES 209
+#define YY_END_OF_BUFFER 210
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -491,98 +491,99 @@
     flex_int32_t yy_verify;
     flex_int32_t yy_nxt;
     };
-static yyconst flex_int16_t yy_accept[821] =
+static yyconst flex_int16_t yy_accept[828] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  209,  128,    2,    4,    2,   25,
-      128,  128,  128,   22,  128,  128,   28,   29,   23,   21,
-       30,   27,  128,   24,  121,  121,  128,   35,   15,   34,
-       16,  119,  119,   31,   32,  119,  119,  119,  119,  119,
-      119,  128,   26,  208,  135,  140,  135,  137,  138,  139,
-      136,  174,  172,  174,  174,  166,  164,  165,  164,  166,
-      160,  160,  160,  160,  160,  169,  208,  208,  208,  153,
-      145,  152,  145,  153,  153,  153,  147,  148,  153,  146,
-
-      153,  149,  149,  143,  150,  151,  133,  132,  133,  133,
-      133,  133,  133,  131,  131,  130,  128,  128,  119,  119,
-      119,  119,  119,  119,  119,  119,  208,  208,  208,  208,
-      149,  149,    1,  207,  205,  206,  205,  207,  207,  207,
-      207,  175,  207,  200,  200,  207,  198,  198,  198,  198,
-      198,  176,  177,    0,    4,    4,   12,    0,  110,    0,
+        0,    0,    0,    0,  210,  129,    2,    4,    2,   25,
+      129,  129,  129,   22,  129,  129,   28,   29,   23,   21,
+       30,   27,  129,   24,  122,  122,  129,   35,   15,   34,
+       16,  120,  120,   31,   32,  120,  120,  120,  120,  120,
+      120,  129,   26,  209,  136,  141,  136,  138,  139,  140,
+      137,  175,  173,  175,  175,  167,  165,  166,  165,  167,
+      161,  161,  161,  161,  161,  170,  209,  209,  209,  154,
+      146,  153,  146,  154,  154,  154,  148,  149,  154,  147,
+
+      154,  150,  150,  144,  151,  152,  134,  133,  134,  134,
+      134,  134,  134,  132,  132,  131,  129,  129,  120,  120,
+      120,  120,  120,  120,  120,  120,  209,  209,  209,  209,
+      150,  150,    1,  208,  206,  207,  206,  208,  208,  208,
+      208,  176,  208,  201,  201,  208,  199,  199,  199,  199,
+      199,  177,  178,    0,    4,    4,   12,    0,  111,    0,
         0,    3,    0,    0,    0,    0,    0,   40,   18,   43,
-        0,    0,   39,    0,  121,   36,   37,  125,  120,   46,
-      125,  125,  141,  125,  125,  125,  125,  125,  125,  125,
-      125,  125,  125,  125,  125,  125,  125,  125,   17,   38,
-
-      120,    0,    0,    0,    0,  109,  109,  109,  109,  109,
-      109,  109,  109,  109,  109,  109,  109,    9,   13,   11,
-       10,   14,    8,    0,  119,  117,  118,  119,   47,  119,
-      119,  119,  119,  119,   42,   19,   45,   20,  140,  140,
-      136,  172,  172,    0,    0,    0,  165,  165,  161,  160,
-      160,  160,  160,  160,  169,  169,    0,    0,  168,  152,
-      152,    0,  149,    0,    0,    0,    0,  149,  149,  142,
-      149,    0,    0,    0,    0,  143,    0,  131,    0,    0,
-        0,    0,  131,  131,  131,    0,    0,    0,    0,  130,
-        0,    0,    0,    0,    0,  125,  119,  127,  118,  119,
-
-       47,  119,  119,  119,  119,  119,  206,  206,    0,  204,
-        0,    0,    0,    0,  200,  199,  191,  191,  191,  191,
-      191,  191,  199,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  198,  192,  196,  195,  194,  197,  126,   33,
-        3,  116,  115,  113,  114,   41,    0,  141,  141,  141,
-      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
-      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
-      141,   44,  120,  123,    0,  120,  124,  122,  109,  109,
-      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
-      109,  109,  109,  109,  109,  109,  109,    7,    6,    0,
-
-        0,    0,  119,   51,  119,   52,   53,  119,  119,    0,
-        0,    0,  161,  156,  158,  157,  160,  144,    0,  142,
-      149,  149,    0,  149,  149,  149,  131,    0,  131,  131,
-        0,  131,  131,  131,    0,  163,  116,  115,  113,  114,
-      162,  170,  119,   51,  119,   52,   53,  119,  119,  193,
-        0,  191,  191,  191,  191,  191,  191,  191,  199,  202,
-        0,  199,  203,  201,    0,    0,    0,    0,    0,    0,
-        0,  120,   62,  141,  141,  141,  141,   58,  141,  141,
-      141,  141,   65,  141,  141,  141,  141,  141,  141,  141,
-      141,  141,  141,   82,  141,  141,  109,  109,  109,  109,
-
-      109,  109,   95,  109,  109,  109,  109,  109,  109,  109,
-      109,  109,  109,  109,  109,  109,    5,    0,  111,    0,
-        0,    0,   48,   50,  119,  119,    0,    0,    0,  160,
-        0,  149,    0,  131,  171,  162,   48,   50,  119,  119,
-        0,  199,  191,  185,  191,  191,  191,  191,    0,    0,
-        0,    0,    0,    0,  141,  141,  141,   76,  141,  141,
-       87,   59,  141,  141,  141,   66,  141,  141,  141,  141,
-      141,  141,  141,  141,  141,  141,  141,   88,  107,  109,
-       89,  109,  109,   90,   93,  109,  109,  109,  109,  109,
-      109,  109,  109,  109,  109,  109,  109,    0,  119,  119,
-
-      173,    0,    0,  160,  119,  119,  190,  189,  191,  191,
-      191,  181,    0,  180,  179,  178,    0,  141,  141,  141,
-       57,  141,  141,  141,  141,  141,  141,  141,   68,  134,
-      141,  141,  141,   72,  141,  141,  141,  141,  141,   83,
-      109,  109,  109,  109,   98,  106,  109,  109,  109,   96,
-      109,  109,   99,  109,  109,    0,  112,    0,   54,   49,
-      154,    0,  159,   54,   49,  187,  191,  191,    0,    0,
-      141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
-      141,  141,  141,  141,   81,  141,  141,  141,  141,  109,
-      109,  109,   94,  109,  109,  109,  109,  105,  109,   97,
-
-        0,  191,  191,  191,    0,    0,   63,  141,  141,  141,
-      141,  141,  141,  141,  141,  141,  141,   67,  141,  141,
-      141,  141,  141,   56,  141,  141,  141,  109,  109,  109,
-      101,  109,  109,  109,  109,    0,  191,  191,  184,    0,
-        0,   55,  141,  141,  141,   77,  141,  141,  141,  141,
-       64,  141,  141,  141,  141,  141,   71,  141,  141,   86,
-      109,  109,  108,  104,  103,   91,  109,    0,    0,  191,
-      191,    0,  182,  141,  141,  141,  141,   79,  141,  141,
-      141,  141,  141,   69,   70,  141,   85,   92,  109,  109,
-        0,    0,  191,  186,  183,   73,  141,  141,   78,   80,
-
-      141,  141,  141,  141,   84,  100,  102,    0,    0,  191,
-      141,   75,   60,   61,  129,  167,  155,  188,   74,    0
+        0,    0,   39,    0,  122,   36,   37,  126,  121,   46,
+      126,  126,  142,  126,  126,  126,  126,  126,  126,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,   17,   38,
+
+      121,    0,    0,    0,    0,  110,  110,  110,  110,  110,
+      110,  110,  110,  110,  110,  110,  110,    9,   13,   11,
+       10,   14,    8,    0,  120,  118,  119,  120,   47,  120,
+      120,  120,  120,  120,   42,   19,   45,   20,  141,  141,
+      137,  173,  173,    0,    0,    0,  166,  166,  162,  161,
+      161,  161,  161,  161,  170,  170,    0,    0,  169,  153,
+      153,    0,  150,    0,    0,    0,    0,  150,  150,  143,
+      150,    0,    0,    0,    0,  144,    0,  132,    0,    0,
+        0,    0,  132,  132,  132,    0,    0,    0,    0,  131,
+        0,    0,    0,    0,    0,  126,  120,  128,  119,  120,
+
+       47,  120,  120,  120,  120,  120,  207,  207,    0,  205,
+        0,    0,    0,    0,  201,  200,  192,  192,  192,  192,
+      192,  192,  200,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  199,  193,  197,  196,  195,  198,  127,   33,
+        3,  117,  116,  114,  115,   41,    0,  142,  142,  142,
+      142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
+      142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
+      142,   44,  121,  124,    0,  121,  125,  123,  110,  110,
+      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
+      110,  110,  110,  110,  110,  110,  110,    7,    6,    0,
+
+        0,    0,  120,   51,  120,   52,   53,  120,  120,    0,
+        0,    0,  162,  157,  159,  158,  161,  145,    0,  143,
+      150,  150,    0,  150,  150,  150,  132,    0,  132,  132,
+        0,  132,  132,  132,    0,  164,  117,  116,  114,  115,
+      163,  171,  120,   51,  120,   52,   53,  120,  120,  194,
+        0,  192,  192,  192,  192,  192,  192,  192,  200,  203,
+        0,  200,  204,  202,    0,    0,    0,    0,    0,    0,
+        0,  121,   62,  142,  142,  142,  142,   58,  142,  142,
+      142,  142,   65,  142,  142,  142,  142,  142,  142,  142,
+      142,  142,  142,   82,  142,  142,  110,  110,  110,  110,
+
+      110,  110,   95,  110,  110,  110,  110,  110,  110,  110,
+      110,  110,  110,  110,  110,  110,  110,    5,    0,  112,
+        0,    0,    0,   48,   50,  120,  120,    0,    0,    0,
+      161,    0,  150,    0,  132,  172,  163,   48,   50,  120,
+      120,    0,  200,  192,  186,  192,  192,  192,  192,    0,
+        0,    0,    0,    0,    0,  142,  142,  142,   76,  142,
+      142,   87,   59,  142,  142,  142,   66,  142,  142,  142,
+      142,  142,  142,  142,  142,  142,  142,  142,   88,  107,
+      110,   89,  110,  110,   90,  110,   93,  110,  110,  110,
+      110,  110,  110,  110,  110,  110,  110,  110,  110,    0,
+
+      120,  120,  174,    0,    0,  161,  120,  120,  191,  190,
+      192,  192,  192,  182,    0,  181,  180,  179,    0,  142,
+      142,  142,   57,  142,  142,  142,  142,  142,  142,  142,
+       68,  135,  142,  142,  142,   72,  142,  142,  142,  142,
+      142,   83,  110,  110,  110,  110,  110,   98,  106,  110,
+      110,  110,   96,  110,  110,   99,  110,  110,    0,  113,
+        0,   54,   49,  155,    0,  160,   54,   49,  188,  192,
+      192,    0,    0,  142,  142,  142,  142,  142,  142,  142,
+      142,  142,  142,  142,  142,  142,  142,   81,  142,  142,
+      142,  142,  110,  110,  110,  110,   94,  110,  110,  110,
+
+      110,  105,  110,   97,    0,  192,  192,  192,    0,    0,
+       63,  142,  142,  142,  142,  142,  142,  142,  142,  142,
+      142,   67,  142,  142,  142,  142,  142,   56,  142,  142,
+      142,  110,  110,  110,  110,  101,  110,  110,  110,  110,
+        0,  192,  192,  185,    0,    0,   55,  142,  142,  142,
+       77,  142,  142,  142,  142,   64,  142,  142,  142,  142,
+      142,   71,  142,  142,   86,  110,  110,  108,  110,  104,
+      103,   91,  110,    0,    0,  192,  192,    0,  183,  142,
+      142,  142,  142,   79,  142,  142,  142,  142,  142,   69,
+       70,  142,   85,   92,  110,  109,  110,    0,    0,  192,
+
+      187,  184,   73,  142,  142,   78,   80,  142,  142,  142,
+      142,   84,  100,  102,    0,    0,  192,  142,   75,   60,
+       61,  130,  168,  156,  189,   74,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -598,9 +599,9 @@
        34,   34,   41,   34,   34,   34,   42,   43,   34,   34,
        44,   45,   46,    1,   47,    1,   48,   49,   50,   51,
 
-       52,   53,   54,   55,   56,   34,   34,   57,   58,   59,
-       60,   61,   62,   63,   64,   65,   66,   67,   34,   68,
-       69,   34,   70,   71,   72,   73,    1,    1,    1,    1,
+       52,   53,   54,   55,   56,   34,   57,   58,   59,   60,
+       61,   62,   63,   64,   65,   66,   67,   68,   34,   69,
+       70,   34,   71,   72,   73,   74,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -617,7 +618,7 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[74] =
+static yyconst flex_int32_t yy_meta[75] =
     {   0,
         1,    1,    2,    1,    1,    1,    3,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    4,    1,    1,
@@ -625,485 +626,489 @@
         8,    8,    8,    9,    9,    9,    9,    9,    9,    9,
        10,   10,    9,    1,    1,    1,    9,    8,    8,    8,
         8,    8,    8,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,    9,    9,    9,    9,    9,   11,
-        1,   11,    1
+        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+       11,    1,   11,    1
     } ;
 
-static yyconst flex_int16_t yy_base[881] =
+static yyconst flex_int16_t yy_base[888] =
     {   0,
-        0,    0,   73,    0,  144,  145,  164,    0,  237,    0,
-      310,    0,  383,    0,    0,    0,  456,    0,  523,  536,
-        0,    0,  560,    0, 2380, 2381, 2360,  149,  530, 2350,
-      627,  150,  120, 2349,  523, 2364, 2381, 2381,  522,  616,
-     2381,  624,  666,  512,  717,  632,  738, 2381,  614,  621,
-      629,  513,  645, 2381, 2381,  719,  728,  646,  730,  727,
-      747,  608,  730, 2381, 2381,  657, 2372, 2381, 2381, 2381,
-        0, 2381,  678, 2371,  634, 2381, 2381,  759, 2370,    0,
-        0, 2313, 2305, 2312, 2304,  765, 2365,    0, 2342, 2381,
-     2381,  771, 2363,  735,  771, 2353, 2381, 2381,  794, 2381,
-
-      798,  804,  811,    0, 2381, 2381, 2381, 2381,  744,  810,
-     2352,  836,  817,  854,  846,    0,  844, 2354,  729,  886,
-      836,  865,  887,  901,  895,  903,  756, 2350,  913,  878,
-        0,  919, 2381, 2381, 2381,  886, 2358,  786,  908, 2348,
-      942, 2381,  933,  976,  951,  920, 2334,  989,  999, 1008,
-     1016, 2381, 2381,  672,  977,  999, 2381,  807, 2381,    0,
-      154,  691,  779, 1024, 1028, 1032, 1036, 2381, 2381, 2381,
-     2346, 2329, 2381, 1040, 1046, 2381, 2381, 2381, 1050, 2381,
-        0, 2319,    0, 2296, 2302,  723, 2294, 2296,  772, 2292,
-      933,  797,  760, 2302, 2297,  691, 2300, 2291, 2318, 2381,
-
-     1054,  689, 1068,  984,    0,    0, 2286, 2287,  871,  863,
-     1033,  903,  884, 2283,  805, 2283, 2276, 2381, 2381, 2381,
-     2381, 2381,  959, 2315,  856, 2332, 1086, 1017, 1009, 1070,
-     1075, 1076, 1078, 1087, 2381, 2381, 2381, 2381, 1111, 1115,
-        0, 1119, 1125, 2279, 2277, 2288, 1134, 1140,    0,    0,
-     2270, 2276, 2283, 2269, 1144, 1148, 2306, 2305, 2381, 1152,
-     1156,  951, 2381,    0, 1141, 2317, 1145, 1151, 1155,    0,
-     1159,  995, 1173, 1164,    0,    0, 1145, 2381,    0, 1177,
-     2316, 1191, 1197, 1201, 1205, 1183, 1219, 1187,    0,    0,
-     2297, 1224, 1237, 1241, 1251,    0, 1214, 2301, 1261, 1262,
-
-     1270, 1271, 1272, 1281, 1280, 1289, 1310, 1315, 1186, 2381,
-        0, 1300, 2313, 1311, 1318, 1326,    0, 2268, 1063, 2275,
-     2274, 2271, 1331, 1229, 1344, 1247,    0, 2261, 1197, 2259,
-     2270, 2257, 2291, 2381, 1350, 1363, 1368, 1373, 2381, 2381,
-     1375, 1378, 1382, 1386, 1390, 2381, 1399,    0, 2278, 2255,
-     2259, 2255, 2252, 2259, 2252, 2243, 2247, 2239, 2237, 2245,
-      844, 2253, 2237, 2243, 2244, 2236, 2233, 2232, 2247, 2239,
-     2242, 2381, 1403, 1255, 1407, 1411, 1335,    0,    0, 2233,
-     2244, 2233, 1067, 2222, 2241, 2232, 2222, 2229, 2227, 2232,
-     2218, 2217, 2217, 2214, 2230, 2222, 2229, 2381, 2248, 2268,
-
-     1259, 2249, 1419, 1291, 1420, 1320, 1351, 1422, 1421, 2222,
-     2222, 2221,    0,    0,    0,    0, 2214, 1427, 1436,    0,
-     1441, 1272, 1445, 1459, 1420,    0, 1463, 1473, 1477, 1304,
-     1481, 1485, 1449,    0, 2239, 2243, 1490, 1494, 1504, 1509,
-        0, 2381, 1517, 1518, 1519, 1520, 1528, 1534, 1536, 1546,
-     1557,    0, 2210, 2198, 2206, 2214, 2205, 2212, 1561, 1360,
-     1574, 1578, 1500,    0, 2201, 2202, 2203, 2210, 2201, 2192,
-     1582, 1586, 2208, 2194, 2197, 2195, 2187, 1082, 2198, 2202,
-     2199, 2187,    0, 2194, 2194, 2196, 2180, 2187, 2189, 2193,
-     2191, 2172, 2190,    0, 2179, 2178, 2175, 2168, 2180, 2166,
-
-     2165, 2169,    0, 2177, 2168, 2171, 2160, 2172, 2164, 1504,
-     2170, 2156, 2157, 2163, 2156, 2168, 2381, 1411, 2381,    0,
-     2191, 2208, 1537, 1538, 1568, 1547, 2156, 2165, 2149, 2152,
-     1593, 1597, 1601, 1607, 2381,    0, 1608, 1614, 1616, 1617,
-     1627, 1631, 2158,    0, 2157, 2145, 2155, 2159, 2146, 2152,
-     2138, 2151, 2142, 2135, 2141, 2133, 2138,    0, 2131, 1593,
-        0,    0, 2132, 2146, 2143,    0, 2135, 2134, 2130, 2142,
-     2124, 2137, 2128, 2122, 1597, 2134, 2132,    0,    0, 2131,
-        0, 2133, 2130,    0,    0, 2119, 2122, 2126, 2111, 2122,
-     2114, 2110, 2122, 2110, 2119, 2103, 2111, 1512, 1639, 1640,
-
-     2381, 2101, 2093, 2098, 1643, 1649,    0,    0, 2087, 2076,
-     2063, 2381, 2071, 2381, 2381, 2381, 2068, 2069, 2064, 2064,
-        0, 2052, 2037, 2017, 2016, 2010, 2016, 2007,    0, 2005,
-     1991, 1975, 1987,    0, 1973, 1968, 1974, 1969, 1972,    0,
-     1958, 1954, 1960, 1956,    0,    0, 1939, 1944, 1937,    0,
-     1935, 1925,    0, 1941, 1936, 1567, 2381,    0, 1645, 1651,
-     2381, 1934,    0, 1653, 1659, 1927, 1912, 1904, 1913, 1904,
-     1902, 1887, 1622, 1873, 1851, 1858, 1845, 1848, 1828, 1823,
-     1630, 1823, 1812, 1792,    0, 1790, 1778, 1786, 1780, 1778,
-     1765, 1751,    0, 1732, 1752, 1744, 1733,    0, 1739,    0,
-
-     1713, 1698, 1664, 1662, 1662, 1651,    0, 1656, 1659, 1654,
-     1649, 1646, 1636, 1644, 1634, 1639, 1633,    0, 1636,  730,
-     1638, 1644, 1635,    0, 1624, 1631, 1629, 1617, 1607, 1575,
-        0, 1583, 1579, 1531, 1528,  879, 1529, 1537,    0, 1506,
-     1480,    0, 1483, 1427, 1438,    0, 1425, 1425, 1418, 1402,
-        0, 1394, 1370, 1366, 1306, 1309,    0, 1281, 1277,    0,
-     1256, 1243,    0,    0,    0,    0, 1226, 1203, 1186, 1174,
-     1165, 1154, 2381, 1145, 1105, 1103, 1097,    0, 1083, 1074,
-     1061, 1045, 1032,    0,    0, 1007,    0,    0,  990,  972,
-      966,  935,  905,    0, 2381,    0,  884,  791,    0,  736,
-
-      710,  620,  625,  604,    0,    0,    0,  499,  496,  471,
-      103,    0,    0,    0,    0, 2381, 2381,    0,    0, 2381,
-     1713, 1724, 1735, 1746, 1757, 1768, 1772, 1779, 1785, 1788,
-     1794, 1797, 1803, 1813, 1824, 1831, 1837, 1847, 1858, 1865,
-     1868, 1875, 1885, 1896, 1903, 1909, 1919, 1928, 1939, 1950,
-     1957, 1963, 1967, 1974, 1981, 1989, 1995, 2001, 2007, 2013,
-     2019, 2025, 2029, 2039, 2050, 2057, 2061, 2067, 2070, 2077,
-     2087, 2098, 2105, 2111, 2115, 2125, 2133, 2140, 2146, 2156
+        0,    0,   74,    0,  146,  147,  166,    0,  240,    0,
+      314,    0,  388,    0,    0,    0,  462,    0,  530,  543,
+        0,    0,  567,    0, 2396, 2397, 2376,  151,  537, 2366,
+      635,  152,  122, 2365,  530, 2380, 2397, 2397,  529,  624,
+     2397,  632,  674,  519,  726,  640,  723, 2397,  622,  629,
+      637,  520,  653, 2397, 2397,  728,  739,  736,  737,  654,
+      738,  616,  723, 2397, 2397,  665, 2388, 2397, 2397, 2397,
+        0, 2397,  682, 2387,  641, 2397, 2397,  765, 2386,    0,
+        0, 2328, 2320, 2327, 2319,  799, 2381,    0, 2358, 2397,
+     2397,  803, 2379,  765,  771, 2369, 2397, 2397,  794, 2397,
+
+      798,  804,  811,    0, 2397, 2397, 2397, 2397,  779,  810,
+     2368,  836,  817,  855,  847,    0,  845, 2370,  664,  887,
+      866,  872,  888,  901,  903,  904,  786, 2366,  916,  920,
+        0,  926, 2397, 2397, 2397,  859, 2374,  807,  916, 2364,
+      944, 2397,  949,  993,  958,  927, 2350,  971,  976,  997,
+     1006, 2397, 2397,  699,  890,  898, 2397,  822, 2397,    0,
+      156, 1001,  948, 1016, 1025, 1029, 1034, 2397, 2397, 2397,
+     2362, 2345, 2397, 1042, 1048, 2397, 2397, 2397, 1052, 2397,
+        0, 2335,    0, 2311, 2318,  712, 2309, 2312,  722, 2307,
+      793,  910,  926, 2318, 2313,  863, 2316, 2307, 2334, 2397,
+
+     1056,  669, 1070, 1012,    0,    0, 2301, 2302,  659,  862,
+     1035,  495, 1028, 2298,  946, 2298, 2291, 2397, 2397, 2397,
+     2397, 2397,  959, 2331,  857, 2348, 1088, 1078, 1043, 1080,
+     1089, 1099, 1097, 1098, 2397, 2397, 2397, 2397, 1116, 1123,
+        0, 1127, 1131, 2294, 2292, 2304, 1135, 1140,    0,    0,
+     2285, 2291, 2299, 2284, 1148, 1152, 2322, 2321, 2397, 1157,
+     1161,  939, 2397,    0, 1146, 2333, 1150, 1156, 1160,    0,
+     1164, 1002, 1178, 1169,    0,    0, 1037, 2397,    0, 1182,
+     2332, 1196, 1202, 1206, 1210, 1038, 1224, 1188,    0,    0,
+     2313, 1229, 1242, 1246, 1256,    0, 1219, 2317, 1266, 1267,
+
+     1275, 1276, 1277, 1290, 1286, 1294, 1320, 1324, 1090, 2397,
+        0, 1322, 2329, 1332, 1338, 1342,    0, 2284, 1075, 2291,
+     2290, 2287, 1346, 1192, 1360, 1234,    0, 2276, 1201, 2274,
+     2286, 2272, 2307, 2397, 1364, 1378, 1383, 1388, 2397, 2397,
+     1269, 1393, 1397, 1401, 1405, 2397, 1414,    0, 2294, 2270,
+     2275, 2270, 2267, 2275, 2267, 2258, 2262, 2254, 2252, 2260,
+      993, 2269, 2252, 2258, 2260, 2251, 2248, 2247, 2263, 2255,
+     2258, 2397, 1418, 1260, 1422, 1426, 1309,    0,    0, 2248,
+     2260, 2248, 1253, 2237, 1091, 2249, 2238, 2245, 2243, 2249,
+     2234, 2233, 2233, 2230, 2247, 2239, 2246, 2397, 2265, 2285,
+
+     1113, 2266, 1316, 1197, 1333, 1285, 1355, 1434, 1435, 2239,
+     2239, 2238,    0,    0,    0,    0, 2231, 1433, 1445,    0,
+     1450, 1277, 1454, 1458, 1316,    0, 1470, 1482, 1486, 1292,
+     1490, 1494, 1326,    0, 2256, 2260, 1499, 1503, 1513, 1518,
+        0, 2397, 1471, 1526, 1527, 1528, 1529, 1537, 1543, 1542,
+     1553,    0, 2226, 2214, 2222, 2231, 2221, 2229, 1557, 1371,
+     1565, 1575, 1374,    0, 2217, 2218, 2220, 2227, 2218, 2208,
+     1579, 1583, 2225, 2210, 2214, 2211, 2203, 1148, 2215, 2219,
+     2216, 2203,    0, 2211, 2211, 2213, 2196, 2204, 2206, 2210,
+     2208, 2188, 2207,    0, 2195, 2194, 2191, 2184, 2197, 2182,
+
+     2181, 2185,    0, 2194, 2187, 2183, 2187, 2175, 2188, 2179,
+     1439, 2186, 2171, 2172, 2179, 2171, 2184, 2397, 1191, 2397,
+        0, 2207, 2224, 1440, 1566, 1590, 1592, 2171, 2181, 2164,
+     2167, 1590, 1597, 1601, 1605, 2397,    0, 1612, 1613, 1614,
+     1615, 1625, 1630, 2174,    0, 2173, 2160, 2171, 2175, 2161,
+     2168, 2153, 2167, 2157, 2150, 2156, 2148, 2153,    0, 2146,
+     1591,    0,    0, 2147, 2162, 2159,    0, 2150, 2149, 2145,
+     2158, 2139, 2153, 2143, 2137, 1608, 2150, 2148,    0,    0,
+     2147,    0, 2149, 2146,    0, 2147,    0, 2133, 2137, 2141,
+     2125, 2137, 2128, 2124, 2137, 2124, 2134, 2117, 2125, 1628,
+
+     1640, 1641, 2397, 2124, 2120, 2126, 1645, 1646,    0,    0,
+     2118, 2113, 2112, 2397, 2125, 2397, 2397, 2397, 2125, 2126,
+     2125, 2125,    0, 2123, 2118, 2113, 2116, 2109, 2118, 2100,
+        0, 2104, 2100, 2083, 2090,    0, 2065, 2056, 2064, 2059,
+     2062,    0, 2053, 2038, 2039, 2016, 2015,    0,    0, 2001,
+     2004, 2001,    0, 1989, 1969,    0, 1982, 1981, 1653, 2397,
+        0, 1644, 1659, 2397, 1983,    0, 1661, 1663, 1982, 1962,
+     1956, 1962, 1951, 1949, 1940, 1632, 1947, 1934, 1947, 1929,
+     1943, 1932, 1942, 1225, 1938, 1931, 1914,    0, 1917, 1902,
+     1915, 1904, 1913, 1900, 1868, 1862,    0, 1838, 1859, 1848,
+
+     1826,    0, 1823,    0, 1811, 1808, 1799, 1793, 1793, 1777,
+        0, 1783, 1776, 1761, 1752, 1741, 1731, 1732, 1722, 1723,
+     1702,    0, 1685, 1436, 1652, 1659, 1650,    0, 1640, 1647,
+     1646, 1637, 1649, 1634, 1649,    0, 1641, 1634, 1628, 1625,
+     1522, 1626, 1635,    0, 1617, 1606,    0, 1609, 1570, 1582,
+        0, 1552, 1543, 1534, 1522,    0, 1512, 1511, 1500, 1491,
+     1479,    0, 1466, 1477,    0, 1447, 1427,    0, 1434,    0,
+        0,    0, 1412, 1413, 1384, 1373, 1379, 1322, 2397, 1314,
+     1261, 1259, 1181,    0, 1172, 1111, 1100, 1089, 1053,    0,
+        0, 1039,    0,    0, 1031,    0,  936,  909,  888,  855,
+
+        0, 2397,    0,  825,  821,    0,  777,  734,  728,  719,
+      708,    0,    0,    0,  694,  611,  497,  104,    0,    0,
+        0,    0, 2397, 2397,    0,    0, 2397, 1711, 1722, 1733,
+     1744, 1755, 1766, 1770, 1777, 1783, 1786, 1792, 1795, 1801,
+     1811, 1822, 1829, 1835, 1845, 1856, 1863, 1866, 1873, 1883,
+     1894, 1901, 1907, 1917, 1926, 1937, 1948, 1955, 1961, 1965,
+     1972, 1979, 1987, 1993, 1999, 2005, 2011, 2017, 2023, 2027,
+     2037, 2048, 2055, 2059, 2065, 2068, 2075, 2085, 2096, 2103,
+     2109, 2113, 2123, 2131, 2138, 2144, 2154
     } ;
 
-static yyconst flex_int16_t yy_def[881] =
+static yyconst flex_int16_t yy_def[888] =
     {   0,
-      820,    1,  820,    3,  821,  821,  820,    7,  820,    9,
-      820,   11,  820,   13,    1,    1,  820,   17,  822,  822,
-      823,  823,  820,   23,  820,  820,  820,  820,  820,  820,
-      824,  825,  820,  820,  820,  826,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  827,  820,  820,  820,
-      820,  828,  828,  820,  820,  828,  828,  828,  828,  828,
-      828,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      829,  820,  820,  820,  820,  820,  820,  820,  820,  830,
-      831,  831,  831,  831,  831,  820,  820,  832,  833,  820,
-      820,  820,  820,  834,  820,  835,  820,  820,  820,  820,
-
-      836,  820,  820,  837,  820,  820,  820,  820,  838,  820,
-      839,  820,  820,  820,  820,  840,  841,   43,  842,  842,
-      842,  842,  842,  842,  842,  842,  834,  835,  820,  820,
-      102,  820,  820,  820,  820,  820,  820,  843,  820,  844,
-      820,  820,  845,  820,  820,  820,  846,  846,  846,  846,
-      846,  820,  820,  847,  820,  820,  820,  848,  820,  848,
-      849,  820,  849,  820,  820,  820,  820,  820,  820,  820,
-      850,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  820,  820,
-
-      820,  820,  820,  820,  852,  853,  853,  853,  853,  853,
-      853,  853,  853,  853,  853,  853,  853,  820,  820,  820,
-      820,  820,  820,  854,  855,  856,  855,  855,  855,  855,
-      855,  855,  855,  855,  820,  820,  820,  820,  820,  820,
-      857,  820,  820,  820,  820,  820,  820,  820,  858,  859,
-      859,  859,  859,  859,  820,  820,  860,  860,  820,  820,
-      820,  834,  820,  834,  820,  835,  820,  820,  820,  861,
-      820,  820,  820,  820,  862,  863,  864,  820,  864,  820,
-      865,  820,  820,  820,  820,  820,  820,  820,  866,  867,
-      868,  868,  868,  868,  868,  869,  870,  820,  870,  870,
-
-      870,  870,  870,  870,  870,  870,  820,  820,  871,  820,
-      871,  820,  872,  820,  820,  820,  873,  873,  873,  873,
-      873,  873,  820,  820,  820,  820,  874,  820,  820,  820,
-      820,  820,  875,  820,  875,  875,  875,  875,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  820,  820,  820,  820,  820,  820,  852,  853,  853,
-      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
-      853,  853,  853,  853,  853,  853,  853,  820,  820,  856,
-
-      876,  877,  878,  878,  878,  878,  878,  878,  878,  820,
-      820,  820,  858,  859,  859,  859,  859,  820,  820,  861,
-      820,  820,  820,  820,  820,  862,  820,  820,  820,  820,
-      820,  820,  820,  866,  868,  820,  868,  868,  868,  868,
-      879,  820,  870,  870,  870,  870,  870,  870,  870,  820,
-      820,  873,  873,  873,  873,  873,  873,  873,  820,  820,
-      820,  820,  820,  874,  820,  820,  820,  820,  820,  820,
-      820,  820,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  853,  853,  853,  853,
-
-      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
-      853,  853,  853,  853,  853,  853,  820,  876,  820,  876,
-      877,  820,  878,  878,  878,  878,  820,  820,  820,  859,
-      820,  820,  820,  820,  820,  879,  870,  870,  870,  870,
-      820,  820,  873,  873,  873,  873,  873,  873,  820,  820,
-      820,  820,  820,  820,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  853,  853,  853,
-      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
-      853,  853,  853,  853,  853,  853,  853,  880,  878,  878,
-
-      820,  820,  820,  859,  870,  870,  873,  873,  873,  873,
-      873,  820,  820,  820,  820,  820,  820,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
-      853,  853,  853,  853,  853,  880,  820,  880,  878,  878,
-      820,  820,  859,  870,  870,  873,  873,  873,  820,  820,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  853,
-      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
-
-      820,  873,  873,  873,  820,  820,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  853,  853,  853,
-      853,  853,  853,  853,  853,  820,  873,  873,  873,  820,
-      820,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  851,  851,  851,
-      853,  853,  853,  853,  853,  853,  853,  820,  820,  873,
-      873,  820,  820,  851,  851,  851,  851,  851,  851,  851,
-      851,  851,  851,  851,  851,  851,  851,  853,  853,  853,
-      820,  820,  873,  873,  820,  851,  851,  851,  851,  851,
-
-      851,  851,  851,  851,  851,  853,  853,  820,  820,  873,
-      851,  851,  851,  851,  851,  820,  820,  873,  851,    0,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820
+      827,    1,  827,    3,  828,  828,  827,    7,  827,    9,
+      827,   11,  827,   13,    1,    1,  827,   17,  829,  829,
+      830,  830,  827,   23,  827,  827,  827,  827,  827,  827,
+      831,  832,  827,  827,  827,  833,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  834,  827,  827,  827,
+      827,  835,  835,  827,  827,  835,  835,  835,  835,  835,
+      835,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      836,  827,  827,  827,  827,  827,  827,  827,  827,  837,
+      838,  838,  838,  838,  838,  827,  827,  839,  840,  827,
+      827,  827,  827,  841,  827,  842,  827,  827,  827,  827,
+
+      843,  827,  827,  844,  827,  827,  827,  827,  845,  827,
+      846,  827,  827,  827,  827,  847,  848,   43,  849,  849,
+      849,  849,  849,  849,  849,  849,  841,  842,  827,  827,
+      102,  827,  827,  827,  827,  827,  827,  850,  827,  851,
+      827,  827,  852,  827,  827,  827,  853,  853,  853,  853,
+      853,  827,  827,  854,  827,  827,  827,  855,  827,  855,
+      856,  827,  856,  827,  827,  827,  827,  827,  827,  827,
+      857,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  827,  827,
+
+      827,  827,  827,  827,  859,  860,  860,  860,  860,  860,
+      860,  860,  860,  860,  860,  860,  860,  827,  827,  827,
+      827,  827,  827,  861,  862,  863,  862,  862,  862,  862,
+      862,  862,  862,  862,  827,  827,  827,  827,  827,  827,
+      864,  827,  827,  827,  827,  827,  827,  827,  865,  866,
+      866,  866,  866,  866,  827,  827,  867,  867,  827,  827,
+      827,  841,  827,  841,  827,  842,  827,  827,  827,  868,
+      827,  827,  827,  827,  869,  870,  871,  827,  871,  827,
+      872,  827,  827,  827,  827,  827,  827,  827,  873,  874,
+      875,  875,  875,  875,  875,  876,  877,  827,  877,  877,
+
+      877,  877,  877,  877,  877,  877,  827,  827,  878,  827,
+      878,  827,  879,  827,  827,  827,  880,  880,  880,  880,
+      880,  880,  827,  827,  827,  827,  881,  827,  827,  827,
+      827,  827,  882,  827,  882,  882,  882,  882,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  827,  827,  827,  827,  827,  827,  859,  860,  860,
+      860,  860,  860,  860,  860,  860,  860,  860,  860,  860,
+      860,  860,  860,  860,  860,  860,  860,  827,  827,  863,
+
+      883,  884,  885,  885,  885,  885,  885,  885,  885,  827,
+      827,  827,  865,  866,  866,  866,  866,  827,  827,  868,
+      827,  827,  827,  827,  827,  869,  827,  827,  827,  827,
+      827,  827,  827,  873,  875,  827,  875,  875,  875,  875,
+      886,  827,  877,  877,  877,  877,  877,  877,  877,  827,
+      827,  880,  880,  880,  880,  880,  880,  880,  827,  827,
+      827,  827,  827,  881,  827,  827,  827,  827,  827,  827,
+      827,  827,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  860,  860,  860,  860,
+
+      860,  860,  860,  860,  860,  860,  860,  860,  860,  860,
+      860,  860,  860,  860,  860,  860,  860,  827,  883,  827,
+      883,  884,  827,  885,  885,  885,  885,  827,  827,  827,
+      866,  827,  827,  827,  827,  827,  886,  877,  877,  877,
+      877,  827,  827,  880,  880,  880,  880,  880,  880,  827,
+      827,  827,  827,  827,  827,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  860,  860,
+      860,  860,  860,  860,  860,  860,  860,  860,  860,  860,
+      860,  860,  860,  860,  860,  860,  860,  860,  860,  887,
+
+      885,  885,  827,  827,  827,  866,  877,  877,  880,  880,
+      880,  880,  880,  827,  827,  827,  827,  827,  827,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  860,  860,  860,  860,  860,  860,  860,  860,
+      860,  860,  860,  860,  860,  860,  860,  860,  887,  827,
+      887,  885,  885,  827,  827,  866,  877,  877,  880,  880,
+      880,  827,  827,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  860,  860,  860,  860,  860,  860,  860,  860,
+
+      860,  860,  860,  860,  827,  880,  880,  880,  827,  827,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  860,  860,  860,  860,  860,  860,  860,  860,  860,
+      827,  880,  880,  880,  827,  827,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  860,  860,  860,  860,  860,
+      860,  860,  860,  827,  827,  880,  880,  827,  827,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  860,  860,  860,  860,  827,  827,  880,
+
+      880,  827,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  860,  860,  827,  827,  880,  858,  858,  858,
+      858,  858,  827,  827,  880,  858,    0,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827
     } ;
 
-static yyconst flex_int16_t yy_nxt[2455] =
+static yyconst flex_int16_t yy_nxt[2472] =
     {   0,
        26,   27,   28,   27,   29,   30,   31,   32,   33,   34,
        35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
        45,   46,   46,   46,   47,   48,   49,   50,   51,   26,
        52,   52,   52,   52,   52,   53,   52,   53,   52,   53,
        53,   52,   52,   54,   26,   55,   52,   52,   52,   52,
-       52,   52,   52,   56,   52,   57,   52,   52,   58,   52,
-       59,   52,   52,   60,   52,   61,   52,   52,   52,   26,
-       62,   26,   63,   64,   65,   66,   65,   67,   64,   64,
-       64,   64,   64,   64,   64,   68,   69,   64,   64,   70,
-       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       52,   52,   52,   56,   52,   57,   52,   52,   52,   58,
+       52,   59,   52,   52,   60,   52,   61,   52,   52,   52,
+       26,   62,   26,   63,   64,   65,   66,   65,   67,   64,
+       64,   64,   64,   64,   64,   64,   68,   69,   64,   64,
+       70,   64,   64,   64,   64,   64,   64,   64,   64,   64,
 
-       64,   64,   64,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   71,   71,   71,   64,   64,   64,   71,
+       64,   64,   64,   64,   71,   71,   71,   71,   71,   71,
+       71,   71,   71,   71,   71,   71,   71,   64,   64,   64,
        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   64,   64,   64,   64,   73,   73,   74,   74,
-      155,  155,  162,  155,  163,  164,  162,  165,  163,  166,
-      167,  819,   75,   75,   76,   77,   78,   77,   79,   76,
-       76,   76,   80,   76,   76,   76,   76,   76,   76,   76,
+       71,   71,   71,   71,   64,   64,   64,   64,   73,   73,
+       74,   74,  155,  155,  162,  155,  163,  164,  162,  165,
+      163,  166,  167,  826,   75,   75,   76,   77,   78,   77,
+       79,   76,   76,   76,   80,   76,   76,   76,   76,   76,
        76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   76,   81,   81,   81,   81,   81,   81,
+       76,   76,   76,   76,   76,   76,   81,   81,   81,   81,
 
-       81,   81,   81,   81,   81,   81,   81,   76,   76,   76,
-       81,   81,   81,   81,   81,   81,   81,   81,   81,   82,
-       81,   81,   83,   81,   84,   81,   81,   85,   81,   81,
-       81,   81,   81,   76,   76,   76,   76,   64,   64,   86,
-       64,   87,   64,   64,   64,   88,   64,   64,   64,   64,
+       81,   81,   81,   81,   81,   81,   81,   81,   81,   76,
+       76,   76,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   82,   81,   81,   81,   83,   81,   84,   81,   81,
+       85,   81,   81,   81,   81,   81,   76,   76,   76,   76,
+       64,   64,   86,   64,   87,   64,   64,   64,   88,   64,
+       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
        64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
-       64,   64,   64,   64,   64,   64,   64,   89,   89,   89,
        89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       64,   64,   64,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   64,   64,   64,   89,   89,   89,   89,
        89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
 
-       89,   89,   89,   89,   89,   89,   64,   64,   64,   64,
-       90,   91,   92,   91,   93,   90,   94,   90,   95,   90,
-       90,   96,   97,   98,   90,   99,  100,   99,  101,   90,
-      102,  103,  103,  103,   90,   90,   90,   90,   90,   90,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       64,   64,   64,   64,   90,   91,   92,   91,   93,   90,
+       94,   90,   95,   90,   90,   96,   97,   98,   90,   99,
+      100,   99,  101,   90,  102,  103,  103,  103,   90,   90,
+       90,   90,   90,   90,  104,  104,  104,  104,  104,  104,
+      104,  104,  104,  104,  104,  104,  104,   90,   90,   90,
       104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,   90,   90,   90,  104,  104,  104,  104,
       104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  105,
-       90,  106,   90,  107,  108,   64,  108,  108,  107,  109,
-      107,  110,  107,  107,  111,  107,  107,  107,  112,  107,
-
-      112,  113,  107,  114,  115,  115,  115,  107,  107,  107,
-      107,  107,  107,  116,  116,  116,  116,  116,  116,  116,
-      116,  116,  116,  116,  116,  116,  107,  107,  107,  116,
+      104,  104,  104,  104,  105,   90,  106,   90,  107,  108,
+       64,  108,  108,  107,  109,  107,  110,  107,  107,  111,
+
+      107,  107,  107,  112,  107,  112,  113,  107,  114,  115,
+      115,  115,  107,  107,  107,  107,  107,  107,  116,  116,
       116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
+      116,  107,  107,  107,  116,  116,  116,  116,  116,  116,
       116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
-      116,  116,  107,  107,  107,  107,   26,   27,   28,   27,
-       29,   30,   31,   32,  117,   34,   35,   36,   37,   38,
-       39,   40,   41,   42,  118,   44,   45,   46,   46,   46,
-       47,   48,   49,   50,   51,   26,  119,  119,  119,  119,
-      119,  120,  119,  120,  119,  120,  120,  119,  119,   54,
-
-       26,   55,  119,  119,  119,  119,  119,  119,  119,  121,
-      119,  122,  119,  119,  123,  119,  124,  119,  119,  125,
-      119,  126,  119,  119,  119,   26,   62,   26,   63,  127,
-      224,  199,  156,  169,  128,  818,  172,  226,  129,  200,
-      129,  130,  127,  131,  132,  132,  132,  128,  154,  173,
-      170,  129,  817,  129,  130,  816,  131,  132,  132,  132,
-      134,  135,  136,  135,  137,  134,  138,  134,  139,  134,
-      134,  140,  134,  134,  134,  141,  142,  141,  143,  134,
-      144,  145,  145,  145,  146,  134,  134,  134,  134,  134,
-      147,  147,  147,  147,  147,  148,  147,  149,  147,  150,
+      116,  116,  116,  116,  116,  116,  116,  116,  107,  107,
+      107,  107,   26,   27,   28,   27,   29,   30,   31,   32,
+      117,   34,   35,   36,   37,   38,   39,   40,   41,   42,
+      118,   44,   45,   46,   46,   46,   47,   48,   49,   50,
+       51,   26,  119,  119,  119,  119,  119,  120,  119,  120,
+
+      119,  120,  120,  119,  119,   54,   26,   55,  119,  119,
+      119,  119,  119,  119,  119,  121,  119,  122,  119,  119,
+      119,  123,  119,  124,  119,  119,  125,  119,  126,  119,
+      119,  119,   26,   62,   26,   63,  127,  224,  199,  156,
+      169,  128,  389,  172,  226,  129,  200,  129,  130,  127,
+      131,  132,  132,  132,  128,  154,  173,  170,  129,  390,
+      129,  130,  825,  131,  132,  132,  132,  134,  135,  136,
+      135,  137,  134,  138,  134,  139,  134,  134,  140,  134,
+      134,  134,  141,  142,  141,  143,  134,  144,  145,  145,
+      145,  146,  134,  134,  134,  134,  134,  147,  147,  147,
 
-      151,  147,  147,  152,  134,  153,  147,  147,  147,  147,
+      147,  147,  148,  147,  149,  147,  150,  151,  147,  147,
+      152,  134,  153,  147,  147,  147,  147,  147,  147,  147,
       147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
-      147,  147,  147,  147,  147,  147,  147,  147,  147,  134,
-      134,  134,  134,  159,  174,  235,  175,  175,  175,  175,
-      218,  219,  174,  176,  175,  175,  175,  175,  220,  221,
-      201,  177,  175,  175,  175,  175,  222,  223,  239,  239,
-      561,  239,  224,  224,  203,  227,  227,  227,  227,  226,
-      226,  160,  178,  340,  178,  340,  340,  178,  236,  242,
-      242,  561,  242,  203,  815,  244,  179,  179,  179,  179,
-      245,  246,  341,  180,  341,  341,  181,  181,  181,  181,
-
-      182,  181,  181,  181,  181,  181,  181,  181,  181,  374,
-      374,  231,  183,  184,  185,  186,  181,  187,  188,  189,
-      181,  190,  191,  192,  193,  181,  194,  181,  195,  196,
-      197,  181,  181,  181,  198,  201,  224,  175,  175,  175,
-      175,  263,  368,  226,  224,  224,  224,  224,  202,  203,
-      278,  226,  226,  226,  226,  204,  369,  237,  298,  205,
-      247,  247,  263,  247,  224,  202,  255,  255,  203,  255,
-      352,  226,  260,  260,  814,  260,  204,  753,  228,  264,
-      229,  162,  353,  163,  205,  207,  230,  232,  279,  754,
-      208,  233,  310,  209,  210,  211,  212,  213,  214,  813,
-
-      264,  215,  238,  216,  217,  234,  265,  364,  265,  365,
-      265,  265,  267,  159,  268,  268,  268,  268,  269,  269,
-      269,  269,  271,  356,  268,  268,  268,  268,  357,  271,
-      311,  268,  268,  268,  268,  272,  273,  284,  284,  284,
-      284,  812,  274,  273,  362,  280,  275,  280,  363,  280,
-      280,  160,  272,  224,  282,  273,  283,  283,  283,  283,
-      226,  394,  273,  274,  285,  298,  283,  283,  283,  283,
-      395,  275,  285,  224,  283,  283,  283,  283,  287,  292,
-      226,  293,  224,  294,  295,  286,  287,  307,  307,  226,
-      307,  485,  288,  486,  298,  300,  289,  287,  269,  269,
-
-      269,  269,  286,  224,  224,  287,  299,  299,  299,  299,
-      226,  226,  224,  288,  384,  298,  298,  301,  224,  226,
-      224,  289,  385,  302,  298,  226,  768,  226,  382,  383,
-      298,  267,  298,  268,  268,  268,  268,  271,  769,  268,
-      268,  268,  268,  312,  391,  312,  811,  312,  312,  392,
-      389,  273,  303,  316,  316,  316,  316,  263,  304,  305,
-      314,  306,  315,  315,  315,  315,  390,  328,  810,  323,
-      273,  315,  315,  315,  315,  329,  330,  331,  155,  155,
-      332,  155,  809,  325,  359,  318,  398,  399,  360,  319,
-      320,  321,  361,  322,  323,  264,  315,  315,  315,  315,
-
-      155,  155,  325,  155,  377,  377,  377,  324,  325,  335,
-      335,  335,  335,  334,  326,  422,  422,  808,  327,  336,
-      336,  336,  336,  334,  324,  807,  224,  325,  337,  337,
-      337,  337,  334,  226,  224,  326,  338,  338,  338,  338,
-      334,  226,  806,  327,  342,  342,  342,  342,  343,  343,
-      343,  343,  344,  344,  344,  344,  345,  345,  345,  345,
-      179,  179,  179,  179,  201,  805,  175,  175,  175,  175,
-      179,  179,  179,  179,  373,  373,  373,  373,  203,  804,
-      386,  403,  347,  375,  387,  375,  347,  224,  376,  376,
-      376,  376,  224,  224,  226,  224,  803,  203,  388,  226,
-
-      226,  347,  226,  224,  224,  347,  227,  227,  227,  227,
-      226,  226,  239,  239,  454,  239,  239,  239,  455,  239,
-      242,  242,  500,  242,  802,  407,  242,  242,  560,  242,
-      501,  405,  406,  502,  404,  247,  247,  801,  247,  561,
-      408,  247,  247,  409,  247,  255,  255,  800,  255,  255,
-      255,  278,  255,  260,  260,  799,  260,  260,  260,  798,
-      260,  418,  418,  418,  418,  269,  269,  269,  269,  271,
-      797,  268,  268,  268,  268,  269,  269,  269,  269,  421,
-      421,  421,  421,  273,  425,  425,  425,  419,  423,  279,
-      423,  419,  310,  424,  424,  424,  424,  427,  427,  427,
-
-      427,  796,  273,  430,  430,  795,  419,  433,  433,  433,
-      419,  284,  284,  284,  284,  285,  794,  283,  283,  283,
-      283,  284,  284,  284,  284,  429,  429,  429,  429,  287,
-      311,  224,  793,  428,  431,  792,  431,  428,  226,  432,
-      432,  432,  432,  298,  437,  437,  437,  437,  287,  460,
-      460,  791,  428,  436,  466,  467,  428,  438,  438,  438,
-      438,  439,  439,  439,  439,  519,  436,  463,  463,  463,
-      436,  440,  440,  440,  440,  374,  374,  790,  224,  224,
-      436,  299,  299,  299,  299,  226,  226,  224,  224,  224,
-      298,  298,  422,  422,  226,  226,  226,  224,  224,  298,
-
-      298,  298,  789,  520,  226,  226,  224,  788,  224,  298,
-      298,  307,  307,  226,  307,  226,  307,  307,  298,  307,
-      450,  450,  450,  450,  430,  430,  443,  787,  445,  446,
-      447,  316,  316,  316,  316,  444,  323,  224,  315,  315,
-      315,  315,  448,  786,  226,  449,  316,  316,  316,  316,
-      325,  459,  459,  459,  459,  377,  377,  377,  451,  461,
-      785,  461,  784,  451,  462,  462,  462,  462,  224,  325,
-      335,  335,  335,  335,  334,  226,  341,  451,  341,  341,
-      460,  460,  451,  336,  336,  336,  336,  334,  337,  337,
-      337,  337,  334,  338,  338,  338,  338,  334,  342,  342,
-
-      342,  342,  343,  343,  343,  343,  344,  344,  344,  344,
-      345,  345,  345,  345,  471,  783,  471,  519,  782,  472,
-      472,  472,  472,  373,  373,  373,  373,  376,  376,  376,
-      376,  376,  376,  376,  376,  347,  224,  224,  224,  224,
-      425,  425,  425,  226,  226,  226,  226,  418,  418,  418,
-      418,  531,  781,  531,  347,  520,  532,  532,  532,  532,
-      780,  421,  421,  421,  421,  424,  424,  424,  424,  433,
-      433,  433,  526,  419,  779,  778,  524,  525,  523,  424,
-      424,  424,  424,  427,  427,  427,  427,  777,  533,  776,
-      533,  775,  419,  534,  534,  534,  534,  429,  429,  429,
-
-      429,  432,  432,  432,  432,  432,  432,  432,  432,  428,
-      437,  437,  437,  437,  438,  438,  438,  438,  657,  436,
-      463,  463,  463,  436,  439,  439,  439,  439,  428,  440,
-      440,  440,  440,  436,  224,  224,  224,  224,  436,  774,
-      773,  226,  226,  226,  226,  224,  298,  298,  298,  298,
-      590,  224,  226,  224,  224,  224,  658,  298,  226,  591,
-      226,  226,  226,  298,  224,  298,  450,  450,  450,  450,
-      772,  226,  541,  657,  541,  538,  537,  542,  542,  542,
-      542,  459,  459,  459,  459,  224,  771,  540,  770,  539,
-      767,  766,  226,  451,  462,  462,  462,  462,  462,  462,
-
-      462,  462,  472,  472,  472,  472,  472,  472,  472,  472,
-      600,  658,  451,  532,  532,  532,  532,  532,  532,  532,
-      532,  534,  534,  534,  534,  224,  599,  534,  534,  534,
-      534,  224,  226,  224,  224,  765,  764,  298,  226,  763,
-      226,  226,  622,  298,  636,  298,  298,  542,  542,  542,
-      542,  542,  542,  542,  542,  623,  224,  224,  762,  637,
-      224,  624,  224,  226,  226,  638,  224,  226,  224,  226,
-      224,  709,  298,  226,  605,  226,  224,  226,  298,  719,
-      606,  761,  298,  226,  710,  760,  720,  759,  298,  758,
-      711,  757,  659,  756,  755,  752,  664,  751,  750,  749,
-
-      748,  747,  746,  660,  745,  744,  743,  742,  741,  740,
-      739,  738,  665,   72,   72,   72,   72,   72,   72,   72,
-       72,   72,   72,   72,   64,   64,   64,   64,   64,   64,
-       64,   64,   64,   64,   64,  133,  133,  133,  133,  133,
-      133,  133,  133,  133,  133,  133,  158,  737,  158,  158,
+      147,  147,  147,  147,  147,  147,  147,  134,  134,  134,
+      134,  159,  174,  235,  175,  175,  175,  175,  218,  219,
+      174,  176,  175,  175,  175,  175,  220,  221,  201,  177,
+      175,  175,  175,  175,  222,  223,  239,  239,  824,  239,
+      224,  224,  203,  227,  227,  227,  227,  226,  226,  160,
+      178,  224,  178,  242,  242,  178,  242,  236,  226,  374,
+      374,  203,  244,  298,  179,  179,  179,  179,  245,  246,
+
+      340,  180,  340,  340,  181,  181,  181,  181,  182,  181,
+      181,  181,  181,  181,  181,  181,  181,  382,  383,  233,
+      183,  184,  185,  186,  181,  187,  188,  189,  181,  190,
+      181,  191,  192,  193,  181,  194,  181,  195,  196,  197,
+      181,  181,  181,  198,  201,  224,  175,  175,  175,  175,
+      237,  823,  226,  224,  224,  224,  224,  202,  203,  352,
+      226,  226,  226,  226,  204,  562,  247,  247,  205,  247,
+      207,  263,  353,  356,  202,  208,  562,  203,  209,  357,
+      210,  211,  212,  213,  214,  278,  204,  215,  228,  216,
+      217,  229,  263,  822,  205,  232,  238,  234,  230,  821,
+
+      255,  255,  231,  255,  260,  260,  265,  260,  265,  264,
+      265,  265,  267,  310,  268,  268,  268,  268,  269,  269,
+      269,  269,  271,  279,  268,  268,  268,  268,  159,  271,
+      264,  268,  268,  268,  268,  272,  273,  284,  284,  284,
+      284,  820,  274,  273,  359,  280,  275,  280,  360,  280,
+      280,  311,  272,  361,  282,  273,  283,  283,  283,  283,
+      307,  307,  273,  307,  274,  285,  160,  283,  283,  283,
+      283,  819,  275,  285,  224,  283,  283,  283,  283,  287,
+      292,  226,  293,  224,  294,  295,  286,  287,  818,  224,
+      226,  155,  155,  288,  155,  298,  226,  289,  287,  155,
+
+      155,  298,  155,  286,  224,  224,  287,  299,  299,  299,
+      299,  226,  226,  384,  368,  288,  298,  298,  224,  817,
+      224,  224,  385,  289,  301,  226,  300,  226,  226,  369,
+      298,  302,  298,  298,  267,  816,  268,  268,  268,  268,
+      269,  269,  269,  269,  271,  263,  268,  268,  268,  268,
+      162,  312,  163,  312,  303,  312,  312,  362,  273,  304,
+      815,  363,  314,  306,  315,  315,  315,  315,  305,  316,
+      316,  316,  316,  364,  328,  365,  323,  273,  315,  315,
+      315,  315,  329,  264,  330,  331,  398,  399,  332,  814,
+      325,  335,  335,  335,  335,  334,  336,  336,  336,  336,
+
+      334,  318,  341,  394,  341,  341,  319,  320,  321,  325,
+      322,  323,  395,  315,  315,  315,  315,  337,  337,  337,
+      337,  334,  422,  422,  324,  325,  338,  338,  338,  338,
+      334,  326,  377,  377,  377,  327,  342,  342,  342,  342,
+      485,  324,  486,  278,  325,  343,  343,  343,  343,  344,
+      344,  344,  344,  326,  345,  345,  345,  345,  430,  430,
+      224,  327,  179,  179,  179,  179,  201,  226,  175,  175,
+      175,  175,  179,  179,  179,  179,  373,  373,  373,  373,
+      203,  279,  386,  813,  347,  375,  387,  375,  347,  391,
+      376,  376,  376,  376,  392,  224,  310,  224,  812,  203,
+
+      811,  388,  226,  347,  226,  224,  224,  347,  227,  227,
+      227,  227,  226,  226,  224,  224,  224,  239,  239,  520,
+      239,  226,  226,  226,  239,  239,  454,  239,  242,  242,
+      455,  242,  242,  242,  311,  242,  247,  247,  504,  247,
+      810,  247,  247,  403,  247,  404,  405,  406,  407,  255,
+      255,  505,  255,  255,  255,  409,  255,  521,  260,  260,
+      408,  260,  260,  260,  809,  260,  418,  418,  418,  418,
+      269,  269,  269,  269,  271,  808,  268,  268,  268,  268,
+      269,  269,  269,  269,  421,  421,  421,  421,  273,  425,
+      425,  425,  419,  423,  561,  423,  419,  520,  424,  424,
+
+      424,  424,  427,  427,  427,  427,  562,  273,  433,  433,
+      433,  419,  460,  460,  224,  419,  284,  284,  284,  284,
+      285,  226,  283,  283,  283,  283,  284,  284,  284,  284,
+      429,  429,  429,  429,  287,  521,  224,  807,  428,  431,
+      806,  431,  428,  226,  432,  432,  432,  432,  298,  437,
+      437,  437,  437,  287,  463,  463,  463,  428,  436,  466,
+      467,  428,  438,  438,  438,  438,  439,  439,  439,  439,
+      341,  436,  341,  341,  723,  436,  440,  440,  440,  440,
+      374,  374,  724,  224,  224,  436,  299,  299,  299,  299,
+      226,  226,  224,  224,  224,  298,  298,  422,  422,  226,
+
+      226,  226,  224,  224,  298,  298,  298,  224,  500,  226,
+      226,  224,  430,  430,  226,  298,  805,  501,  226,  298,
+      502,  307,  307,  298,  307,  307,  307,  804,  307,  377,
+      377,  377,  443,  224,  445,  446,  425,  425,  425,  447,
+      226,  444,  450,  450,  450,  450,  433,  433,  433,  448,
+      224,  449,  316,  316,  316,  316,  323,  226,  315,  315,
+      315,  315,  316,  316,  316,  316,  459,  459,  459,  459,
+      325,  803,  224,  802,  451,  461,  524,  461,  451,  226,
+      462,  462,  462,  462,  335,  335,  335,  335,  334,  325,
+      525,  460,  460,  451,  463,  463,  463,  451,  336,  336,
+
+      336,  336,  334,  337,  337,  337,  337,  334,  338,  338,
+      338,  338,  334,  342,  342,  342,  342,  343,  343,  343,
+      343,  344,  344,  344,  344,  345,  345,  345,  345,  471,
+      801,  471,  800,  799,  472,  472,  472,  472,  373,  373,
+      373,  373,  376,  376,  376,  376,  376,  376,  376,  376,
+      347,  224,  224,  418,  418,  418,  418,  224,  226,  226,
+      532,  798,  532,  797,  226,  533,  533,  533,  533,  347,
+      421,  421,  421,  421,  424,  424,  424,  424,  424,  424,
+      424,  424,  419,  758,  796,  592,  527,  795,  224,  526,
+      427,  427,  427,  427,  593,  226,  759,  534,  794,  534,
+
+      298,  419,  535,  535,  535,  535,  429,  429,  429,  429,
+      432,  432,  432,  432,  432,  432,  432,  432,  428,  437,
+      437,  437,  437,  438,  438,  438,  438,  793,  436,  792,
+      791,  538,  436,  439,  439,  439,  439,  428,  440,  440,
+      440,  440,  436,  224,  224,  224,  224,  436,  790,  789,
+      226,  226,  226,  226,  224,  298,  298,  298,  298,  788,
+      224,  226,  450,  450,  450,  450,  298,  226,  542,  774,
+      542,  787,  298,  543,  543,  543,  543,  459,  459,  459,
+      459,  786,  775,  224,  539,  462,  462,  462,  462,  451,
+      226,  785,  540,  784,  541,  462,  462,  462,  462,  472,
+
+      472,  472,  472,  472,  472,  472,  472,  224,  451,  224,
+      533,  533,  533,  533,  226,  783,  226,  533,  533,  533,
+      533,  535,  535,  535,  535,  535,  535,  535,  535,  224,
+      224,  224,  224,  782,  660,  781,  226,  226,  226,  226,
+      624,  298,  298,  298,  298,  543,  543,  543,  543,  601,
+      543,  543,  543,  543,  625,  638,  602,  224,  224,  660,
+      626,  224,  224,  224,  226,  226,  780,  779,  226,  226,
+      226,  639,  661,  607,  298,  298,  224,  640,  224,  608,
+      224,  713,  778,  226,  777,  226,  776,  226,  773,  772,
+      298,  771,  298,  662,  770,  714,  769,  661,  667,  768,
+
+      767,  715,  766,  765,  764,  663,  763,  762,  761,  760,
+      668,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+       72,   72,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  158,  757,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  161,  161,  161,  161,  161,
+      161,  161,  161,  161,  161,  161,  171,  756,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  206,  206,  206,
+      225,  225,  225,  755,  225,  225,  225,  241,  754,  753,
+      241,  241,  241,  249,  249,  249,  250,  752,  751,  250,
+
+      250,  250,  257,  257,  257,  258,  258,  750,  258,  258,
+      258,  262,  749,  262,  262,  262,  262,  262,  262,  262,
+      262,  262,  266,  748,  266,  266,  266,  266,  266,  266,
+      266,  266,  266,  270,  747,  746,  270,  270,  270,  276,
+      745,  744,  276,  276,  276,  277,  743,  277,  277,  277,
+      277,  277,  277,  277,  277,  277,  281,  742,  281,  281,
+      281,  281,  281,  281,  281,  281,  281,  290,  741,  740,
+      290,  290,  290,  291,  291,  291,  297,  297,  297,  297,
+      297,  297,  297,  309,  739,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  313,  738,  313,  313,  313,  313,
+
+      313,  313,  313,  313,  313,  317,  737,  736,  317,  317,
+      317,  333,  333,  735,  333,  333,  333,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  158,  734,  158,  158,
       158,  158,  158,  158,  158,  158,  158,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  171,  736,
-      171,  171,  171,  171,  171,  171,  171,  171,  171,  206,
-      206,  206,  225,  225,  225,  735,  225,  225,  225,  241,
-      734,  733,  241,  241,  241,  249,  249,  249,  250,  732,
-
-      731,  250,  250,  250,  257,  257,  257,  258,  258,  730,
-      258,  258,  258,  262,  729,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  266,  728,  266,  266,  266,  266,
-      266,  266,  266,  266,  266,  270,  727,  726,  270,  270,
-      270,  276,  725,  724,  276,  276,  276,  277,  723,  277,
-      277,  277,  277,  277,  277,  277,  277,  277,  281,  722,
-      281,  281,  281,  281,  281,  281,  281,  281,  281,  290,
-      721,  718,  290,  290,  290,  291,  291,  291,  297,  297,
-      297,  297,  297,  297,  297,  309,  717,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  313,  716,  313,  313,
-
-      313,  313,  313,  313,  313,  313,  313,  317,  715,  714,
-      317,  317,  317,  333,  333,  713,  333,  333,  333,  339,
-      339,  339,  339,  339,  339,  339,  339,  339,  158,  712,
-      158,  158,  158,  158,  158,  158,  158,  158,  158,  161,
-      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-      171,  708,  171,  171,  171,  171,  171,  171,  171,  171,
-      171,  348,  707,  706,  348,  348,  348,  378,  705,  704,
-      378,  379,  703,  702,  379,  379,  379,  224,  224,  224,
-      701,  224,  224,  224,  225,  225,  225,  700,  225,  225,
-      225,  402,  699,  698,  697,  696,  402,  402,  402,  241,
-
-      695,  694,  241,  241,  241,  413,  693,  692,  413,  413,
-      413,  250,  691,  690,  250,  250,  250,  258,  258,  689,
-      258,  258,  258,  420,  688,  687,  420,  420,  420,  426,
-      686,  685,  426,  276,  684,  683,  276,  276,  276,  277,
-      682,  277,  277,  277,  277,  277,  277,  277,  277,  277,
-      281,  681,  281,  281,  281,  281,  281,  281,  281,  281,
-      281,  434,  680,  679,  434,  290,  678,  677,  290,  290,
-      290,  435,  676,  435,  435,  435,  435,  441,  441,  441,
-      297,  297,  297,  297,  297,  297,  297,  309,  675,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  313,  674,
-
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  452,
-      673,  672,  452,  452,  452,  464,  671,  670,  464,  333,
-      333,  669,  333,  333,  333,  518,  668,  518,  518,  518,
-      518,  518,  518,  518,  518,  518,  521,  521,  521,  667,
-      521,  521,  521,  225,  225,  225,  666,  225,  225,  225,
-      536,  663,  662,  536,  536,  536,  656,  661,  656,  656,
-      656,  656,  656,  656,  656,  656,  656,  655,  654,  653,
-      652,  651,  650,  649,  648,  647,  646,  645,  644,  643,
-      642,  641,  640,  639,  635,  634,  633,  632,  631,  630,
-      629,  628,  627,  626,  625,  621,  620,  619,  618,  617,
-
-      616,  615,  614,  613,  612,  611,  610,  609,  608,  607,
-      604,  603,  602,  601,  598,  522,  597,  596,  595,  594,
-      593,  592,  589,  588,  587,  586,  585,  584,  583,  582,
-      581,  580,  579,  578,  577,  576,  575,  574,  573,  572,
-      571,  570,  569,  568,  567,  566,  565,  564,  563,  562,
-      559,  558,  557,  556,  555,  554,  553,  552,  551,  550,
-      549,  548,  547,  546,  545,  544,  543,  535,  436,  530,
-      529,  528,  527,  522,  401,  517,  516,  515,  514,  513,
-      512,  511,  510,  509,  508,  507,  506,  505,  504,  503,
-      499,  498,  497,  496,  495,  494,  493,  492,  491,  490,
-
-      489,  488,  487,  484,  483,  482,  481,  480,  479,  478,
-      477,  476,  475,  474,  473,  334,  470,  469,  468,  465,
-      458,  457,  456,  453,  310,  442,  436,  278,  263,  259,
-      259,  417,  416,  415,  414,  412,  411,  410,  401,  400,
-      397,  396,  393,  381,  380,  372,  371,  370,  367,  366,
-      358,  355,  354,  351,  350,  349,  346,  159,  334,  310,
-      308,  263,  296,  278,  263,  261,  259,  256,  254,  253,
-      252,  251,  248,  243,  240,  159,  168,  157,  154,  820,
-       25,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820
+      161,  161,  161,  161,  161,  161,  161,  161,  171,  733,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  348,
+      732,  731,  348,  348,  348,  378,  730,  729,  378,  379,
+      728,  727,  379,  379,  379,  224,  224,  224,  726,  224,
+      224,  224,  225,  225,  225,  725,  225,  225,  225,  402,
+      722,  721,  720,  719,  402,  402,  402,  241,  718,  717,
+
+      241,  241,  241,  413,  716,  712,  413,  413,  413,  250,
+      711,  710,  250,  250,  250,  258,  258,  709,  258,  258,
+      258,  420,  708,  707,  420,  420,  420,  426,  706,  705,
+      426,  276,  704,  703,  276,  276,  276,  277,  702,  277,
+      277,  277,  277,  277,  277,  277,  277,  277,  281,  701,
+      281,  281,  281,  281,  281,  281,  281,  281,  281,  434,
+      700,  699,  434,  290,  698,  697,  290,  290,  290,  435,
+      696,  435,  435,  435,  435,  441,  441,  441,  297,  297,
+      297,  297,  297,  297,  297,  309,  695,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  313,  694,  313,  313,
+
+      313,  313,  313,  313,  313,  313,  313,  452,  693,  692,
+      452,  452,  452,  464,  691,  690,  464,  333,  333,  689,
+      333,  333,  333,  519,  688,  519,  519,  519,  519,  519,
+      519,  519,  519,  519,  522,  522,  522,  687,  522,  522,
+      522,  225,  225,  225,  686,  225,  225,  225,  537,  685,
+      684,  537,  537,  537,  659,  683,  659,  659,  659,  659,
+      659,  659,  659,  659,  659,  682,  681,  680,  679,  678,
+      677,  676,  675,  674,  673,  672,  671,  670,  669,  666,
+      665,  664,  658,  657,  656,  655,  654,  653,  652,  651,
+      650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
+
+      637,  636,  635,  634,  633,  632,  631,  630,  629,  628,
+      627,  623,  622,  621,  620,  619,  618,  617,  616,  615,
+      614,  613,  612,  611,  610,  609,  606,  605,  604,  603,
+      600,  523,  599,  598,  597,  596,  595,  594,  591,  590,
+      589,  588,  587,  586,  585,  584,  583,  582,  581,  580,
+      579,  578,  577,  576,  575,  574,  573,  572,  571,  570,
+      569,  568,  567,  566,  565,  564,  563,  560,  559,  558,
+      557,  556,  555,  554,  553,  552,  551,  550,  549,  548,
+      547,  546,  545,  544,  536,  436,  531,  530,  529,  528,
+      523,  401,  518,  517,  516,  515,  514,  513,  512,  511,
+
+      510,  509,  508,  507,  506,  503,  499,  498,  497,  496,
+      495,  494,  493,  492,  491,  490,  489,  488,  487,  484,
+      483,  482,  481,  480,  479,  478,  477,  476,  475,  474,
+      473,  334,  470,  469,  468,  465,  458,  457,  456,  453,
+      310,  442,  436,  278,  263,  259,  259,  417,  416,  415,
+      414,  412,  411,  410,  401,  400,  397,  396,  393,  381,
+      380,  372,  371,  370,  367,  366,  358,  355,  354,  351,
+      350,  349,  346,  159,  334,  310,  308,  263,  296,  278,
+      263,  261,  259,  256,  254,  253,  252,  251,  248,  243,
+      240,  159,  168,  157,  154,  827,   25,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827
     } ;
 
-static yyconst flex_int16_t yy_chk[2455] =
+static yyconst flex_int16_t yy_chk[2472] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1112,7 +1117,7 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    3,    3,    3,    3,    3,    3,    3,
+        1,    1,    1,    1,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
 
@@ -1120,9 +1125,9 @@
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    5,    6,    5,    6,
-       28,   28,   32,   28,   32,   33,  161,   33,  161,   33,
-       33,  811,    5,    6,    7,    7,    7,    7,    7,    7,
+        3,    3,    3,    3,    3,    3,    3,    3,    5,    6,
+        5,    6,   28,   28,   32,   28,   32,   33,  161,   33,
+      161,   33,   33,  818,    5,    6,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
@@ -1130,7 +1135,7 @@
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    9,    9,    9,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
@@ -1139,14 +1144,14 @@
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
 
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+        9,    9,    9,    9,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   13,   13,   13,   13,   13,   13,   13,
+       11,   11,   11,   11,   11,   11,   11,   11,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
 
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
@@ -1154,19 +1159,19 @@
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   17,   17,   17,   17,
-       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+       13,   13,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
 
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-       17,   17,   17,   17,   17,   17,   17,   17,   17,   19,
-       52,   44,   29,   35,   19,  810,   39,   52,   19,   44,
-       19,   19,   20,   19,   19,   19,   19,   20,   29,   39,
-       35,   20,  809,   20,   20,  808,   20,   20,   20,   20,
-       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   19,   52,   44,   29,
+       35,   19,  212,   39,   52,   19,   44,   19,   19,   20,
+       19,   19,   19,   19,   20,   29,   39,   35,   20,  212,
+       20,   20,  817,   20,   20,   20,   20,   23,   23,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
@@ -1174,211 +1179,213 @@
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,   31,   40,   62,   40,   40,   40,   40,
-       49,   49,   42,   40,   42,   42,   42,   42,   50,   50,
-       46,   42,   46,   46,   46,   46,   51,   51,   66,   66,
-      804,   66,   53,   58,   46,   53,   53,   53,   53,   53,
-       58,   31,   43,  154,   43,  154,  154,   43,   62,   73,
-       73,  803,   73,   46,  802,   75,   43,   43,   43,   43,
-       75,   75,  162,   43,  162,  162,   43,   43,   43,   43,
+       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+       23,   31,   40,   62,   40,   40,   40,   40,   49,   49,
+       42,   40,   42,   42,   42,   42,   50,   50,   46,   42,
+       46,   46,   46,   46,   51,   51,   66,   66,  816,   66,
+       53,   60,   46,   53,   53,   53,   53,   53,   60,   31,
+       43,  119,   43,   73,   73,   43,   73,   62,  119,  202,
+      202,   46,   75,  119,   43,   43,   43,   43,   75,   75,
 
-       43,   43,   43,   43,   43,   43,   43,   43,   43,  202,
-      202,   58,   43,   43,   43,   43,   43,   43,   43,   43,
+      154,   43,  154,  154,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,  209,  209,   60,
        43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
-       43,   43,   43,   43,   43,   45,   56,   45,   45,   45,
-       45,   94,  196,   56,   60,   57,  119,   59,   45,   45,
-      109,   60,   57,  119,   59,   45,  196,   63,  119,   45,
-       78,   78,  127,   78,   61,   45,   86,   86,   45,   86,
-      186,   61,   92,   92,  801,   92,   45,  720,   56,   94,
-       57,  163,  186,  163,   45,   47,   57,   59,  109,  720,
-       47,   60,  138,   47,   47,   47,   47,   47,   47,  800,
-
-      127,   47,   63,   47,   47,   61,   95,  193,   95,  193,
-       95,   95,   99,  158,   99,   99,   99,   99,  101,  101,
-      101,  101,  102,  189,  102,  102,  102,  102,  189,  103,
-      138,  103,  103,  103,  103,  102,  102,  113,  113,  113,
-      113,  798,  102,  103,  192,  110,  102,  110,  192,  110,
-      110,  158,  102,  121,  112,  102,  112,  112,  112,  112,
-      121,  215,  103,  102,  115,  121,  115,  115,  115,  115,
-      215,  102,  114,  225,  114,  114,  114,  114,  115,  117,
-      225,  117,  122,  117,  117,  114,  114,  136,  136,  122,
-      136,  361,  114,  361,  122,  121,  114,  115,  130,  130,
-
-      130,  130,  114,  120,  123,  114,  120,  120,  120,  120,
-      120,  123,  125,  114,  210,  120,  123,  122,  124,  125,
-      126,  114,  210,  122,  125,  124,  736,  126,  209,  209,
-      124,  129,  126,  129,  129,  129,  129,  132,  736,  132,
-      132,  132,  132,  139,  213,  139,  797,  139,  139,  213,
-      212,  132,  123,  143,  143,  143,  143,  262,  124,  125,
-      141,  126,  141,  141,  141,  141,  212,  146,  793,  145,
-      132,  145,  145,  145,  145,  146,  146,  146,  155,  155,
-      146,  155,  792,  145,  191,  143,  223,  223,  191,  143,
-      143,  143,  191,  143,  144,  262,  144,  144,  144,  144,
-
-      156,  156,  145,  156,  204,  204,  204,  144,  144,  148,
-      148,  148,  148,  148,  144,  272,  272,  791,  144,  149,
-      149,  149,  149,  149,  144,  790,  229,  144,  150,  150,
-      150,  150,  150,  229,  228,  144,  151,  151,  151,  151,
-      151,  228,  789,  144,  164,  164,  164,  164,  165,  165,
-      165,  165,  166,  166,  166,  166,  167,  167,  167,  167,
-      174,  174,  174,  174,  175,  786,  175,  175,  175,  175,
-      179,  179,  179,  179,  201,  201,  201,  201,  175,  783,
-      211,  228,  179,  203,  211,  203,  201,  230,  203,  203,
-      203,  203,  231,  232,  230,  233,  782,  175,  211,  231,
-
-      232,  179,  233,  227,  234,  201,  227,  227,  227,  227,
-      227,  234,  239,  239,  319,  239,  240,  240,  319,  240,
-      242,  242,  383,  242,  781,  232,  243,  243,  478,  243,
-      383,  231,  231,  383,  230,  247,  247,  780,  247,  478,
-      233,  248,  248,  234,  248,  255,  255,  779,  255,  256,
-      256,  277,  256,  260,  260,  777,  260,  261,  261,  776,
-      261,  265,  265,  265,  265,  267,  267,  267,  267,  268,
-      775,  268,  268,  268,  268,  269,  269,  269,  269,  271,
-      271,  271,  271,  268,  274,  274,  274,  269,  273,  277,
-      273,  271,  309,  273,  273,  273,  273,  280,  280,  280,
-
-      280,  774,  268,  286,  286,  772,  269,  288,  288,  288,
-      271,  282,  282,  282,  282,  283,  771,  283,  283,  283,
-      283,  284,  284,  284,  284,  285,  285,  285,  285,  283,
-      309,  297,  770,  284,  287,  769,  287,  285,  297,  287,
-      287,  287,  287,  297,  292,  292,  292,  292,  283,  324,
-      324,  768,  284,  292,  329,  329,  285,  293,  293,  293,
-      293,  294,  294,  294,  294,  401,  293,  326,  326,  326,
-      294,  295,  295,  295,  295,  374,  374,  767,  299,  300,
-      295,  299,  299,  299,  299,  299,  300,  301,  302,  303,
-      299,  300,  422,  422,  301,  302,  303,  305,  304,  301,
-
-      302,  303,  762,  401,  305,  304,  306,  761,  404,  305,
-      304,  307,  307,  306,  307,  404,  308,  308,  306,  308,
-      312,  312,  312,  312,  430,  430,  300,  759,  303,  303,
-      304,  314,  314,  314,  314,  302,  315,  406,  315,  315,
-      315,  315,  305,  758,  406,  306,  316,  316,  316,  316,
-      315,  323,  323,  323,  323,  377,  377,  377,  316,  325,
-      756,  325,  755,  323,  325,  325,  325,  325,  407,  315,
-      335,  335,  335,  335,  335,  407,  341,  316,  341,  341,
-      460,  460,  323,  336,  336,  336,  336,  336,  337,  337,
-      337,  337,  337,  338,  338,  338,  338,  338,  342,  342,
-
-      342,  342,  343,  343,  343,  343,  344,  344,  344,  344,
-      345,  345,  345,  345,  347,  754,  347,  518,  753,  347,
-      347,  347,  347,  373,  373,  373,  373,  375,  375,  375,
-      375,  376,  376,  376,  376,  373,  403,  405,  409,  408,
-      425,  425,  425,  403,  405,  409,  408,  418,  418,  418,
-      418,  419,  752,  419,  373,  518,  419,  419,  419,  419,
-      750,  421,  421,  421,  421,  423,  423,  423,  423,  433,
-      433,  433,  409,  421,  749,  748,  405,  408,  403,  424,
-      424,  424,  424,  427,  427,  427,  427,  747,  428,  745,
-      428,  744,  421,  428,  428,  428,  428,  429,  429,  429,
-
-      429,  431,  431,  431,  431,  432,  432,  432,  432,  429,
-      437,  437,  437,  437,  438,  438,  438,  438,  598,  437,
-      463,  463,  463,  438,  439,  439,  439,  439,  429,  440,
-      440,  440,  440,  439,  443,  444,  445,  446,  440,  743,
-      741,  443,  444,  445,  446,  447,  443,  444,  445,  446,
-      510,  448,  447,  449,  523,  524,  598,  447,  448,  510,
-      449,  523,  524,  448,  526,  449,  450,  450,  450,  450,
-      740,  526,  451,  656,  451,  445,  443,  451,  451,  451,
-      451,  459,  459,  459,  459,  525,  738,  449,  737,  448,
-      735,  734,  525,  459,  461,  461,  461,  461,  462,  462,
-
-      462,  462,  471,  471,  471,  471,  472,  472,  472,  472,
-      526,  656,  459,  531,  531,  531,  531,  532,  532,  532,
-      532,  533,  533,  533,  533,  537,  525,  534,  534,  534,
-      534,  538,  537,  539,  540,  733,  732,  537,  538,  730,
-      539,  540,  560,  538,  575,  539,  540,  541,  541,  541,
-      541,  542,  542,  542,  542,  560,  599,  600,  729,  575,
-      605,  560,  659,  599,  600,  575,  606,  605,  660,  659,
-      664,  673,  605,  606,  539,  660,  665,  664,  606,  681,
-      540,  728,  664,  665,  673,  727,  681,  726,  665,  725,
-      673,  723,  599,  722,  721,  719,  605,  717,  716,  715,
-
-      714,  713,  712,  600,  711,  710,  709,  708,  706,  705,
-      704,  703,  606,  821,  821,  821,  821,  821,  821,  821,
-      821,  821,  821,  821,  822,  822,  822,  822,  822,  822,
-      822,  822,  822,  822,  822,  823,  823,  823,  823,  823,
-      823,  823,  823,  823,  823,  823,  824,  702,  824,  824,
-      824,  824,  824,  824,  824,  824,  824,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  826,  701,
-      826,  826,  826,  826,  826,  826,  826,  826,  826,  827,
-      827,  827,  828,  828,  828,  699,  828,  828,  828,  829,
-      697,  696,  829,  829,  829,  830,  830,  830,  831,  695,
-
-      694,  831,  831,  831,  832,  832,  832,  833,  833,  692,
-      833,  833,  833,  834,  691,  834,  834,  834,  834,  834,
-      834,  834,  834,  834,  835,  690,  835,  835,  835,  835,
-      835,  835,  835,  835,  835,  836,  689,  688,  836,  836,
-      836,  837,  687,  686,  837,  837,  837,  838,  684,  838,
-      838,  838,  838,  838,  838,  838,  838,  838,  839,  683,
-      839,  839,  839,  839,  839,  839,  839,  839,  839,  840,
-      682,  680,  840,  840,  840,  841,  841,  841,  842,  842,
-      842,  842,  842,  842,  842,  843,  679,  843,  843,  843,
-      843,  843,  843,  843,  843,  843,  844,  678,  844,  844,
-
-      844,  844,  844,  844,  844,  844,  844,  845,  677,  676,
-      845,  845,  845,  846,  846,  675,  846,  846,  846,  847,
-      847,  847,  847,  847,  847,  847,  847,  847,  848,  674,
-      848,  848,  848,  848,  848,  848,  848,  848,  848,  849,
-      849,  849,  849,  849,  849,  849,  849,  849,  849,  849,
-      850,  672,  850,  850,  850,  850,  850,  850,  850,  850,
-      850,  851,  671,  670,  851,  851,  851,  852,  669,  668,
-      852,  853,  667,  666,  853,  853,  853,  854,  854,  854,
-      662,  854,  854,  854,  855,  855,  855,  655,  855,  855,
-      855,  856,  654,  652,  651,  649,  856,  856,  856,  857,
-
-      648,  647,  857,  857,  857,  858,  644,  643,  858,  858,
-      858,  859,  642,  641,  859,  859,  859,  860,  860,  639,
-      860,  860,  860,  861,  638,  637,  861,  861,  861,  862,
-      636,  635,  862,  863,  633,  632,  863,  863,  863,  864,
-      631,  864,  864,  864,  864,  864,  864,  864,  864,  864,
-      865,  630,  865,  865,  865,  865,  865,  865,  865,  865,
-      865,  866,  628,  627,  866,  867,  626,  625,  867,  867,
-      867,  868,  624,  868,  868,  868,  868,  869,  869,  869,
-      870,  870,  870,  870,  870,  870,  870,  871,  623,  871,
-      871,  871,  871,  871,  871,  871,  871,  871,  872,  622,
-
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   45,   56,   45,   45,   45,   45,
+       63,  815,   56,   58,   59,   61,   57,   45,   45,  186,
+       58,   59,   61,   57,   45,  811,   78,   78,   45,   78,
+       47,   94,  186,  189,   45,   47,  810,   45,   47,  189,
+       47,   47,   47,   47,   47,  109,   45,   47,   56,   47,
+       47,   57,  127,  809,   45,   59,   63,   61,   57,  808,
+
+       86,   86,   58,   86,   92,   92,   95,   92,   95,   94,
+       95,   95,   99,  138,   99,   99,   99,   99,  101,  101,
+      101,  101,  102,  109,  102,  102,  102,  102,  158,  103,
+      127,  103,  103,  103,  103,  102,  102,  113,  113,  113,
+      113,  807,  102,  103,  191,  110,  102,  110,  191,  110,
+      110,  138,  102,  191,  112,  102,  112,  112,  112,  112,
+      136,  136,  103,  136,  102,  115,  158,  115,  115,  115,
+      115,  805,  102,  114,  225,  114,  114,  114,  114,  115,
+      117,  225,  117,  121,  117,  117,  114,  114,  804,  122,
+      121,  155,  155,  114,  155,  121,  122,  114,  115,  156,
+
+      156,  122,  156,  114,  120,  123,  114,  120,  120,  120,
+      120,  120,  123,  210,  196,  114,  120,  123,  124,  800,
+      125,  126,  210,  114,  122,  124,  121,  125,  126,  196,
+      124,  122,  125,  126,  129,  799,  129,  129,  129,  129,
+      130,  130,  130,  130,  132,  262,  132,  132,  132,  132,
+      163,  139,  163,  139,  123,  139,  139,  192,  132,  124,
+      798,  192,  141,  126,  141,  141,  141,  141,  125,  143,
+      143,  143,  143,  193,  146,  193,  145,  132,  145,  145,
+      145,  145,  146,  262,  146,  146,  223,  223,  146,  797,
+      145,  148,  148,  148,  148,  148,  149,  149,  149,  149,
+
+      149,  143,  162,  215,  162,  162,  143,  143,  143,  145,
+      143,  144,  215,  144,  144,  144,  144,  150,  150,  150,
+      150,  150,  272,  272,  144,  144,  151,  151,  151,  151,
+      151,  144,  204,  204,  204,  144,  164,  164,  164,  164,
+      361,  144,  361,  277,  144,  165,  165,  165,  165,  166,
+      166,  166,  166,  144,  167,  167,  167,  167,  286,  286,
+      229,  144,  174,  174,  174,  174,  175,  229,  175,  175,
+      175,  175,  179,  179,  179,  179,  201,  201,  201,  201,
+      175,  277,  211,  795,  179,  203,  211,  203,  201,  213,
+      203,  203,  203,  203,  213,  228,  309,  230,  792,  175,
+
+      789,  211,  228,  179,  230,  227,  231,  201,  227,  227,
+      227,  227,  227,  231,  233,  234,  232,  239,  239,  401,
+      239,  233,  234,  232,  240,  240,  319,  240,  242,  242,
+      319,  242,  243,  243,  309,  243,  247,  247,  385,  247,
+      788,  248,  248,  228,  248,  230,  231,  231,  232,  255,
+      255,  385,  255,  256,  256,  234,  256,  401,  260,  260,
+      233,  260,  261,  261,  787,  261,  265,  265,  265,  265,
+      267,  267,  267,  267,  268,  786,  268,  268,  268,  268,
+      269,  269,  269,  269,  271,  271,  271,  271,  268,  274,
+      274,  274,  269,  273,  478,  273,  271,  519,  273,  273,
+
+      273,  273,  280,  280,  280,  280,  478,  268,  288,  288,
+      288,  269,  324,  324,  404,  271,  282,  282,  282,  282,
+      283,  404,  283,  283,  283,  283,  284,  284,  284,  284,
+      285,  285,  285,  285,  283,  519,  297,  785,  284,  287,
+      783,  287,  285,  297,  287,  287,  287,  287,  297,  292,
+      292,  292,  292,  283,  326,  326,  326,  284,  292,  329,
+      329,  285,  293,  293,  293,  293,  294,  294,  294,  294,
+      341,  293,  341,  341,  684,  294,  295,  295,  295,  295,
+      374,  374,  684,  299,  300,  295,  299,  299,  299,  299,
+      299,  300,  301,  302,  303,  299,  300,  422,  422,  301,
+
+      302,  303,  406,  305,  301,  302,  303,  304,  383,  406,
+      305,  306,  430,  430,  304,  305,  782,  383,  306,  304,
+      383,  307,  307,  306,  307,  308,  308,  781,  308,  377,
+      377,  377,  300,  403,  303,  303,  425,  425,  425,  304,
+      403,  302,  312,  312,  312,  312,  433,  433,  433,  305,
+      405,  306,  314,  314,  314,  314,  315,  405,  315,  315,
+      315,  315,  316,  316,  316,  316,  323,  323,  323,  323,
+      315,  780,  407,  778,  316,  325,  403,  325,  323,  407,
+      325,  325,  325,  325,  335,  335,  335,  335,  335,  315,
+      405,  460,  460,  316,  463,  463,  463,  323,  336,  336,
+
+      336,  336,  336,  337,  337,  337,  337,  337,  338,  338,
+      338,  338,  338,  342,  342,  342,  342,  343,  343,  343,
+      343,  344,  344,  344,  344,  345,  345,  345,  345,  347,
+      777,  347,  776,  775,  347,  347,  347,  347,  373,  373,
+      373,  373,  375,  375,  375,  375,  376,  376,  376,  376,
+      373,  408,  409,  418,  418,  418,  418,  524,  408,  409,
+      419,  774,  419,  773,  524,  419,  419,  419,  419,  373,
+      421,  421,  421,  421,  423,  423,  423,  423,  424,  424,
+      424,  424,  421,  724,  769,  511,  409,  767,  443,  408,
+      427,  427,  427,  427,  511,  443,  724,  428,  766,  428,
+
+      443,  421,  428,  428,  428,  428,  429,  429,  429,  429,
+      431,  431,  431,  431,  432,  432,  432,  432,  429,  437,
+      437,  437,  437,  438,  438,  438,  438,  764,  437,  763,
+      761,  443,  438,  439,  439,  439,  439,  429,  440,  440,
+      440,  440,  439,  444,  445,  446,  447,  440,  760,  759,
+      444,  445,  446,  447,  448,  444,  445,  446,  447,  758,
+      449,  448,  450,  450,  450,  450,  448,  449,  451,  741,
+      451,  757,  449,  451,  451,  451,  451,  459,  459,  459,
+      459,  755,  741,  525,  445,  461,  461,  461,  461,  459,
+      525,  754,  448,  753,  449,  462,  462,  462,  462,  471,
+
+      471,  471,  471,  472,  472,  472,  472,  526,  459,  527,
+      532,  532,  532,  532,  526,  752,  527,  533,  533,  533,
+      533,  534,  534,  534,  534,  535,  535,  535,  535,  538,
+      539,  540,  541,  750,  600,  749,  538,  539,  540,  541,
+      561,  538,  539,  540,  541,  542,  542,  542,  542,  526,
+      543,  543,  543,  543,  561,  576,  527,  601,  602,  659,
+      561,  662,  607,  608,  601,  602,  748,  746,  662,  607,
+      608,  576,  600,  540,  607,  608,  663,  576,  667,  541,
+      668,  676,  745,  663,  743,  667,  742,  668,  740,  739,
+      667,  738,  668,  601,  737,  676,  735,  659,  607,  734,
+
+      733,  676,  732,  731,  730,  602,  729,  727,  726,  725,
+      608,  828,  828,  828,  828,  828,  828,  828,  828,  828,
+      828,  828,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  830,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  830,  831,  723,  831,  831,  831,  831,
+      831,  831,  831,  831,  831,  832,  832,  832,  832,  832,
+      832,  832,  832,  832,  832,  832,  833,  721,  833,  833,
+      833,  833,  833,  833,  833,  833,  833,  834,  834,  834,
+      835,  835,  835,  720,  835,  835,  835,  836,  719,  718,
+      836,  836,  836,  837,  837,  837,  838,  717,  716,  838,
+
+      838,  838,  839,  839,  839,  840,  840,  715,  840,  840,
+      840,  841,  714,  841,  841,  841,  841,  841,  841,  841,
+      841,  841,  842,  713,  842,  842,  842,  842,  842,  842,
+      842,  842,  842,  843,  712,  710,  843,  843,  843,  844,
+      709,  708,  844,  844,  844,  845,  707,  845,  845,  845,
+      845,  845,  845,  845,  845,  845,  846,  706,  846,  846,
+      846,  846,  846,  846,  846,  846,  846,  847,  705,  703,
+      847,  847,  847,  848,  848,  848,  849,  849,  849,  849,
+      849,  849,  849,  850,  701,  850,  850,  850,  850,  850,
+      850,  850,  850,  850,  851,  700,  851,  851,  851,  851,
+
+      851,  851,  851,  851,  851,  852,  699,  698,  852,  852,
+      852,  853,  853,  696,  853,  853,  853,  854,  854,  854,
+      854,  854,  854,  854,  854,  854,  855,  695,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  856,  856,  856,
+      856,  856,  856,  856,  856,  856,  856,  856,  857,  694,
+      857,  857,  857,  857,  857,  857,  857,  857,  857,  858,
+      693,  692,  858,  858,  858,  859,  691,  690,  859,  860,
+      689,  687,  860,  860,  860,  861,  861,  861,  686,  861,
+      861,  861,  862,  862,  862,  685,  862,  862,  862,  863,
+      683,  682,  681,  680,  863,  863,  863,  864,  679,  678,
+
+      864,  864,  864,  865,  677,  675,  865,  865,  865,  866,
+      674,  673,  866,  866,  866,  867,  867,  672,  867,  867,
+      867,  868,  671,  670,  868,  868,  868,  869,  669,  665,
+      869,  870,  658,  657,  870,  870,  870,  871,  655,  871,
+      871,  871,  871,  871,  871,  871,  871,  871,  872,  654,
       872,  872,  872,  872,  872,  872,  872,  872,  872,  873,
-      620,  619,  873,  873,  873,  874,  618,  617,  874,  875,
-      875,  613,  875,  875,  875,  876,  611,  876,  876,  876,
-      876,  876,  876,  876,  876,  876,  877,  877,  877,  610,
-      877,  877,  877,  878,  878,  878,  609,  878,  878,  878,
-      879,  604,  603,  879,  879,  879,  880,  602,  880,  880,
-      880,  880,  880,  880,  880,  880,  880,  597,  596,  595,
-      594,  593,  592,  591,  590,  589,  588,  587,  586,  583,
-      582,  580,  577,  576,  574,  573,  572,  571,  570,  569,
-      568,  567,  565,  564,  563,  559,  557,  556,  555,  554,
-
-      553,  552,  551,  550,  549,  548,  547,  546,  545,  543,
-      530,  529,  528,  527,  522,  521,  516,  515,  514,  513,
-      512,  511,  509,  508,  507,  506,  505,  504,  502,  501,
-      500,  499,  498,  497,  496,  495,  493,  492,  491,  490,
-      489,  488,  487,  486,  485,  484,  482,  481,  480,  479,
-      477,  476,  475,  474,  473,  470,  469,  468,  467,  466,
-      465,  458,  457,  456,  455,  454,  453,  436,  435,  417,
-      412,  411,  410,  402,  400,  399,  397,  396,  395,  394,
-      393,  392,  391,  390,  389,  388,  387,  386,  385,  384,
-      382,  381,  380,  371,  370,  369,  368,  367,  366,  365,
-
-      364,  363,  362,  360,  359,  358,  357,  356,  355,  354,
-      353,  352,  351,  350,  349,  333,  332,  331,  330,  328,
-      322,  321,  320,  318,  313,  298,  291,  281,  266,  258,
-      257,  254,  253,  252,  251,  246,  245,  244,  226,  224,
-      217,  216,  214,  208,  207,  199,  198,  197,  195,  194,
-      190,  188,  187,  185,  184,  182,  172,  171,  147,  140,
-      137,  128,  118,  111,   96,   93,   89,   87,   85,   84,
-       83,   82,   79,   74,   67,   36,   34,   30,   27,   25,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820
+      652,  651,  873,  874,  650,  647,  874,  874,  874,  875,
+      646,  875,  875,  875,  875,  876,  876,  876,  877,  877,
+      877,  877,  877,  877,  877,  878,  645,  878,  878,  878,
+      878,  878,  878,  878,  878,  878,  879,  644,  879,  879,
+
+      879,  879,  879,  879,  879,  879,  879,  880,  643,  641,
+      880,  880,  880,  881,  640,  639,  881,  882,  882,  638,
+      882,  882,  882,  883,  637,  883,  883,  883,  883,  883,
+      883,  883,  883,  883,  884,  884,  884,  635,  884,  884,
+      884,  885,  885,  885,  634,  885,  885,  885,  886,  633,
+      632,  886,  886,  886,  887,  630,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  629,  628,  627,  626,  625,
+      624,  622,  621,  620,  619,  615,  613,  612,  611,  606,
+      605,  604,  599,  598,  597,  596,  595,  594,  593,  592,
+      591,  590,  589,  588,  586,  584,  583,  581,  578,  577,
+
+      575,  574,  573,  572,  571,  570,  569,  568,  566,  565,
+      564,  560,  558,  557,  556,  555,  554,  553,  552,  551,
+      550,  549,  548,  547,  546,  544,  531,  530,  529,  528,
+      523,  522,  517,  516,  515,  514,  513,  512,  510,  509,
+      508,  507,  506,  505,  504,  502,  501,  500,  499,  498,
+      497,  496,  495,  493,  492,  491,  490,  489,  488,  487,
+      486,  485,  484,  482,  481,  480,  479,  477,  476,  475,
+      474,  473,  470,  469,  468,  467,  466,  465,  458,  457,
+      456,  455,  454,  453,  436,  435,  417,  412,  411,  410,
+      402,  400,  399,  397,  396,  395,  394,  393,  392,  391,
+
+      390,  389,  388,  387,  386,  384,  382,  381,  380,  371,
+      370,  369,  368,  367,  366,  365,  364,  363,  362,  360,
+      359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
+      349,  333,  332,  331,  330,  328,  322,  321,  320,  318,
+      313,  298,  291,  281,  266,  258,  257,  254,  253,  252,
+      251,  246,  245,  244,  226,  224,  217,  216,  214,  208,
+      207,  199,  198,  197,  195,  194,  190,  188,  187,  185,
+      184,  182,  172,  171,  147,  140,  137,  128,  118,  111,
+       96,   93,   89,   87,   85,   84,   83,   82,   79,   74,
+       67,   36,   34,   30,   27,   25,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[209] =
+static yyconst flex_int32_t yy_rule_can_match_eol[210] =
     {   0,
 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1386,13 +1393,13 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 1, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };
 
-static yyconst flex_int16_t yy_rule_linenum[208] =
+static yyconst flex_int16_t yy_rule_linenum[209] =
     {   0,
       225,  247,  249,  251,  256,  257,  258,  259,  260,  261,
       262,  263,  264,  265,  266,  267,  269,  270,  271,  272,
@@ -1405,18 +1412,18 @@
       345,  346,  347,  348,  349,  350,  353,  360,  361,  362,
       363,  364,  365,  366,  367,  368,  369,  370,  371,  372,
 
-      373,  375,  376,  377,  378,  379,  380,  381,  383,  388,
-      393,  422,  470,  471,  472,  473,  475,  480,  492,  520,
-      521,  522,  523,  524,  526,  534,  585,  598,  620,  625,
-      630,  637,  638,  653,  658,  659,  664,  665,  666,  668,
-      684,  738,  766,  771,  776,  777,  778,  779,  784,  795,
-      796,  798,  800,  811,  825,  830,  831,  832,  833,  835,
-      850,  864,  893,  918,  920,  925,  935,  940,  958,  964,
-      971, 1004, 1006, 1011, 1047, 1048, 1049, 1051, 1052, 1053,
-     1054, 1055, 1056, 1058, 1059, 1060, 1062, 1067, 1072, 1073,
-     1076, 1110, 1115, 1118, 1119, 1120, 1121, 1123, 1128, 1129,
+      373,  375,  376,  377,  378,  379,  380,  381,  382,  384,
+      389,  394,  423,  471,  472,  473,  474,  476,  481,  493,
+      521,  522,  523,  524,  525,  527,  535,  586,  599,  621,
+      626,  631,  638,  639,  654,  659,  660,  665,  666,  667,
+      669,  685,  739,  767,  772,  777,  778,  779,  780,  785,
+      796,  797,  799,  801,  812,  826,  831,  832,  833,  834,
+      836,  851,  865,  894,  919,  921,  926,  936,  941,  959,
+      965,  972, 1005, 1007, 1012, 1048, 1049, 1050, 1052, 1053,
+     1054, 1055, 1056, 1057, 1059, 1060, 1061, 1063, 1068, 1073,
+     1074, 1077, 1111, 1116, 1119, 1120, 1121, 1122, 1124, 1129,
 
-     1130, 1131, 1132, 1134, 1139, 1141, 1143
+     1130, 1131, 1132, 1133, 1135, 1140, 1142, 1144
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1535,7 +1542,7 @@
 
 /* The PASM state is an exclusive state, recognizing ONLY PASM tokens. */
 
-#line 1539 "pirlexer.c"
+#line 1546 "pirlexer.c"
 
 #define INITIAL 0
 #define MACROHEAD 1
@@ -1845,7 +1852,7 @@
 
 
 
-#line 1849 "pirlexer.c"
+#line 1856 "pirlexer.c"
 
     yylval = yylval_param;
 
@@ -1910,13 +1917,13 @@
             while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                 {
                 yy_current_state = (int) yy_def[yy_current_state];
-                if ( yy_current_state >= 821 )
+                if ( yy_current_state >= 828 )
                     yy_c = yy_meta[(unsigned int) yy_c];
                 }
             yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
             ++yy_cp;
             }
-        while ( yy_current_state != 820 );
+        while ( yy_current_state != 827 );
         yy_cp = yyg->yy_last_accepting_cpos;
         yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1947,13 +1954,13 @@
             {
             if ( yy_act == 0 )
                 fprintf( stderr, "--scanner backing up\n" );
-            else if ( yy_act < 208 )
+            else if ( yy_act < 209 )
                 fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                          (long)yy_rule_linenum[yy_act], yytext );
-            else if ( yy_act == 208 )
+            else if ( yy_act == 209 )
                 fprintf( stderr, "--accepting default rule (\"%s\")\n",
                          yytext );
-            else if ( yy_act == 209 )
+            else if ( yy_act == 210 )
                 fprintf( stderr, "--(end of buffer or a NUL)\n" );
             else
                 fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2542,22 +2549,27 @@
     YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 383 "pir.l"
+#line 382 "pir.l"
+{ return TK_FLAG_LOOKAHEAD; }
+    YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 384 "pir.l"
 { yypirerror(yyscanner, yypirget_extra(yyscanner),
                                "unrecognized flag: '%s'", yytext);
                   }
     YY_BREAK
-case 110:
+case 111:
 YY_RULE_SETUP
-#line 388 "pir.l"
+#line 389 "pir.l"
 { /* copy the string, remove the quotes. */
                     yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext + 1, yyleng - 2);
                     return TK_STRINGC;
                   }
     YY_BREAK
-case 111:
+case 112:
 YY_RULE_SETUP
-#line 393 "pir.l"
+#line 394 "pir.l"
 {
                     /* parse yytext, which contains the charset, a ':', and the quoted string */
                     char        *colon = strchr(yytext, ':');
@@ -2587,9 +2599,9 @@
                     return TK_USTRINGC;
                   }
     YY_BREAK
-case 112:
+case 113:
 YY_RULE_SETUP
-#line 422 "pir.l"
+#line 423 "pir.l"
 {
                     /* parse yytext, which contains the encoding, a ':', a charset,
                      * a ':', and the quoted string
@@ -2637,37 +2649,37 @@
 
                   }
     YY_BREAK
-case 113:
-YY_RULE_SETUP
-#line 470 "pir.l"
-{ yylval->ival = atoi(yytext + 2); return TK_PREG; }
-    YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 471 "pir.l"
-{ yylval->ival = atoi(yytext + 2); return TK_SREG; }
+{ yylval->ival = atoi(yytext + 2); return TK_PREG; }
     YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 472 "pir.l"
-{ yylval->ival = atoi(yytext + 2); return TK_NREG; }
+{ yylval->ival = atoi(yytext + 2); return TK_SREG; }
     YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 473 "pir.l"
-{ yylval->ival = atoi(yytext + 2); return TK_IREG; }
+{ yylval->ival = atoi(yytext + 2); return TK_NREG; }
     YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 475 "pir.l"
+#line 474 "pir.l"
+{ yylval->ival = atoi(yytext + 2); return TK_IREG; }
+    YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 476 "pir.l"
 { /* make the label Id available in the parser. remove the ":" first. */
                     yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext, yyleng - 1);
                     return TK_LABEL;
                   }
     YY_BREAK
-case 118:
+case 119:
 YY_RULE_SETUP
-#line 480 "pir.l"
+#line 481 "pir.l"
 { /* give a warning when using PASM registers as PIR identifiers */
                     lexer_state * const lexer = yypirget_extra(yyscanner);
 
@@ -2680,9 +2692,9 @@
                     return TK_IDENT;
                   }
     YY_BREAK
-case 119:
+case 120:
 YY_RULE_SETUP
-#line 492 "pir.l"
+#line 493 "pir.l"
 { /* identifier; can be a global (sub or const), local or parrot op */
                     lexer_state * const lexer = yypirget_extra(yyscanner);
                     constdecl   * const c = find_global_constant(lexer, yytext);
@@ -2711,15 +2723,10 @@
                     return TK_IDENT;
                   }
     YY_BREAK
-case 120:
-YY_RULE_SETUP
-#line 520 "pir.l"
-{ yylval->dval = atof(yytext); return TK_NUMC; }
-    YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 521 "pir.l"
-{ yylval->ival = atoi(yytext); return TK_INTC; }
+{ yylval->dval = atof(yytext); return TK_NUMC; }
     YY_BREAK
 case 122:
 YY_RULE_SETUP
@@ -2737,11 +2744,16 @@
 { yylval->ival = atoi(yytext); return TK_INTC; }
     YY_BREAK
 case 125:
+YY_RULE_SETUP
+#line 525 "pir.l"
+{ yylval->ival = atoi(yytext); return TK_INTC; }
+    YY_BREAK
+case 126:
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp = yy_bp + 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 526 "pir.l"
+#line 527 "pir.l"
 { /* Make sure the dot is followed by a character that
                      * starts a method object. $ for registers,
                      * quotes for quoted strings, and letters for identifiers.
@@ -2750,10 +2762,10 @@
                      return '.';
                   }
     YY_BREAK
-case 126:
-/* rule 126 can match eol */
+case 127:
+/* rule 127 can match eol */
 YY_RULE_SETUP
-#line 534 "pir.l"
+#line 535 "pir.l"
 { yypirerror(yyscanner, yypirget_extra(yyscanner),
                     "no space allowed before a methodcall dot, "
                     "or space expected after the '.' operator");
@@ -2776,7 +2788,7 @@
 
 
 case YY_STATE_EOF(SCANSTR):
-#line 556 "pir.l"
+#line 557 "pir.l"
 { /* switch back from .macro_const buffer to file. */
                      lexer_state * const lexer = yypirget_extra(yyscanner);
                      yy_pop_state(yyscanner);
@@ -2784,7 +2796,7 @@
                    }
     YY_BREAK
 case YY_STATE_EOF(SCANMACRO):
-#line 562 "pir.l"
+#line 563 "pir.l"
 { /* override the default <<EOF>> action; go back to normal state and
                       * switch back to the saved file.
                       */
@@ -2808,9 +2820,9 @@
 
                    }
     YY_BREAK
-case 127:
+case 128:
 YY_RULE_SETUP
-#line 585 "pir.l"
+#line 586 "pir.l"
 { /* when scanning a macro body, the @ marker indicates the {IDENT} must
                           * be munged.
                           */
@@ -2821,14 +2833,14 @@
                        }
     YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 594 "pir.l"
+#line 595 "pir.l"
 { /* end of file, stop scanning. */
                     yyterminate();
                   }
     YY_BREAK
-case 128:
+case 129:
 YY_RULE_SETUP
-#line 598 "pir.l"
+#line 599 "pir.l"
 { /* any character not covered in the rules above is an error. */
                     yypirerror(yyscanner, yypirget_extra(yyscanner),
                                "unexpected character: '%c'", yytext[0]);
@@ -2847,25 +2859,25 @@
 /********************** .macro_const ****************************************/
 
 
-case 129:
+case 130:
 YY_RULE_SETUP
-#line 620 "pir.l"
+#line 621 "pir.l"
 {
                                yy_push_state(MACROCONST, yyscanner);
                                return TK_MACRO_CONST;
                              }
     YY_BREAK
-case 130:
+case 131:
 YY_RULE_SETUP
-#line 625 "pir.l"
+#line 626 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_IDENT;
                              }
     YY_BREAK
-case 131:
+case 132:
 YY_RULE_SETUP
-#line 630 "pir.l"
+#line 631 "pir.l"
 {
                                /* only these tokens can be macro constant values */
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
@@ -2873,21 +2885,21 @@
                                return TK_MACRO_CONST_VAL;
                              }
     YY_BREAK
-case 132:
+case 133:
 YY_RULE_SETUP
-#line 637 "pir.l"
+#line 638 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 133:
+case 134:
 YY_RULE_SETUP
-#line 638 "pir.l"
+#line 639 "pir.l"
 {
                                yypirerror(yyscanner, yypirget_extra(yyscanner),
                                           "unknown character: '%c'", yytext[0]);
                              }
     YY_BREAK
 case YY_STATE_EOF(MACROCONST):
-#line 642 "pir.l"
+#line 643 "pir.l"
 {
                                yypirerror(yyscanner, yypirget_extra(yyscanner),
                                           "read end of file during .macro_const definition");
@@ -2898,46 +2910,46 @@
 /**************** macro header (.macro <ident> <parameters> ) ***************/
 
 
-case 134:
+case 135:
 YY_RULE_SETUP
-#line 653 "pir.l"
+#line 654 "pir.l"
 { /* start a macro definition */
                                yy_push_state(MACROHEAD, yyscanner);
                                return TK_MACRO;
                              }
     YY_BREAK
-case 135:
+case 136:
 YY_RULE_SETUP
-#line 658 "pir.l"
+#line 659 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 136:
+case 137:
 YY_RULE_SETUP
-#line 659 "pir.l"
+#line 660 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_IDENT;
                              }
     YY_BREAK
-case 137:
-YY_RULE_SETUP
-#line 664 "pir.l"
-{ return '('; }
-    YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 665 "pir.l"
-{ return ')'; }
+{ return '('; }
     YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 666 "pir.l"
-{ return ','; }
+{ return ')'; }
     YY_BREAK
 case 140:
-/* rule 140 can match eol */
 YY_RULE_SETUP
-#line 668 "pir.l"
+#line 667 "pir.l"
+{ return ','; }
+    YY_BREAK
+case 141:
+/* rule 141 can match eol */
+YY_RULE_SETUP
+#line 669 "pir.l"
 { /* a set of continuous newlines yields a single newline token. */
                                yy_pop_state(yyscanner); /* remove MACROHEAD state */
                                yy_push_state(MACROBODY, yyscanner); /* enter MACROBODY state */
@@ -2953,9 +2965,9 @@
  */
 
 
-case 141:
+case 142:
 YY_RULE_SETUP
-#line 684 "pir.l"
+#line 685 "pir.l"
 { /* .foo; it can be a macro, macro_local, or just $P0.foo(),
                                 * but we need to check that.
                                 */
@@ -3010,9 +3022,9 @@
                                }
                              }
     YY_BREAK
-case 142:
+case 143:
 YY_RULE_SETUP
-#line 738 "pir.l"
+#line 739 "pir.l"
 { /* expand a .macro_const or parameter in argument list */
                                lexer_state * const lexer = yypirget_extra(yyscanner);
                                macro_def   * const macro = find_macro(lexer->macros, yytext + 1);
@@ -3041,80 +3053,80 @@
                                    yypirerror(yyscanner, lexer, "'%s' is not a macro", yytext + 1);
                              }
     YY_BREAK
-case 143:
+case 144:
 YY_RULE_SETUP
-#line 766 "pir.l"
+#line 767 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_MACRO_ARG_IDENT;
                              }
     YY_BREAK
-case 144:
+case 145:
 YY_RULE_SETUP
-#line 771 "pir.l"
+#line 772 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_MACRO_ARG_OTHER;
                              }
     YY_BREAK
-case 145:
-YY_RULE_SETUP
-#line 776 "pir.l"
-{ /* ignore whitespace */ }
-    YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 777 "pir.l"
-{ return ','; }
+{ /* ignore whitespace */ }
     YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 778 "pir.l"
-{ return '('; }
+{ return ','; }
     YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 779 "pir.l"
+{ return '('; }
+    YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 780 "pir.l"
 {
                                yy_pop_state(yyscanner); /* leave MACROEXPAND state */
                                return ')';
                              }
     YY_BREAK
-case 149:
+case 150:
 YY_RULE_SETUP
-#line 784 "pir.l"
+#line 785 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_MACRO_ARG_OTHER;
                              }
     YY_BREAK
 case YY_STATE_EOF(STRINGEXPAND):
-#line 789 "pir.l"
+#line 790 "pir.l"
 {
                                lexer_state * const lexer = yypirget_extra(yyscanner);
                                yy_pop_state(yyscanner);
                                yypir_switch_to_buffer(lexer->buffer,yyscanner);
                              }
     YY_BREAK
-case 150:
+case 151:
 YY_RULE_SETUP
-#line 795 "pir.l"
+#line 796 "pir.l"
 { return '{'; }
     YY_BREAK
-case 151:
+case 152:
 YY_RULE_SETUP
-#line 796 "pir.l"
+#line 797 "pir.l"
 { return '}'; }
     YY_BREAK
-case 152:
-/* rule 152 can match eol */
+case 153:
+/* rule 153 can match eol */
 YY_RULE_SETUP
-#line 798 "pir.l"
+#line 799 "pir.l"
 { yylval->sval = "\n"; return TK_NL; }
     YY_BREAK
-case 153:
+case 154:
 YY_RULE_SETUP
-#line 800 "pir.l"
+#line 801 "pir.l"
 { yypirerror(yyscanner, yypirget_extra(yyscanner),
                                           "unknown character in macro expansion: %c", yytext[0]);
                              }
@@ -3124,9 +3136,9 @@
 /******************************** .macro_local *****************************/
 
 
-case 154:
+case 155:
 YY_RULE_SETUP
-#line 811 "pir.l"
+#line 812 "pir.l"
 { /* give a warning if the right flag is set */
                               /*
                               lexer_state * const lexer = yypirget_extra(yyscanner);
@@ -3140,37 +3152,37 @@
                               */
                             }
     YY_BREAK
-case 155:
+case 156:
 YY_RULE_SETUP
-#line 825 "pir.l"
+#line 826 "pir.l"
 {
                               yy_push_state(MACROLOCAL, yyscanner);
                               return TK_MACRO_LOCAL;
                             }
     YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 830 "pir.l"
-{ return TK_INT; }
-    YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 831 "pir.l"
-{ return TK_PMC; }
+{ return TK_INT; }
     YY_BREAK
 case 158:
 YY_RULE_SETUP
 #line 832 "pir.l"
-{ return TK_NUM; }
+{ return TK_PMC; }
     YY_BREAK
 case 159:
 YY_RULE_SETUP
 #line 833 "pir.l"
-{ return TK_STRING; }
+{ return TK_NUM; }
     YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 835 "pir.l"
+#line 834 "pir.l"
+{ return TK_STRING; }
+    YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 836 "pir.l"
 { /* normal .macro_local */
                               lexer_state * const lexer = yypirget_extra(yyscanner);
                               /* reserve space for {IDENT}, the @ marker and the NULL char. */
@@ -3186,9 +3198,9 @@
                               return TK_MACRO_LOCAL_ID;
                             }
     YY_BREAK
-case 161:
+case 162:
 YY_RULE_SETUP
-#line 850 "pir.l"
+#line 851 "pir.l"
 { /* declare a .macro_local based on a parameter */
                               lexer_state * const lexer = yypirget_extra(yyscanner);
 
@@ -3203,9 +3215,9 @@
 
                             }
     YY_BREAK
-case 162:
+case 163:
 YY_RULE_SETUP
-#line 864 "pir.l"
+#line 865 "pir.l"
 { /* .$foo */
                               lexer_state * const lexer = yypirget_extra(yyscanner);
                               macro_table * const table = peek_macro_table(lexer);
@@ -3235,9 +3247,9 @@
 
                             }
     YY_BREAK
-case 163:
+case 164:
 YY_RULE_SETUP
-#line 893 "pir.l"
+#line 894 "pir.l"
 { /* expanding a .macro_local using a macro parameter value */
                              lexer_state * const lexer     = yypirget_extra(yyscanner);
                              char  const * const paramname = dupstrn(lexer, yytext + 1, yyleng - 2);
@@ -3263,23 +3275,23 @@
                              return TK_IDENT;
                            }
     YY_BREAK
-case 164:
+case 165:
 YY_RULE_SETUP
-#line 918 "pir.l"
+#line 919 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 165:
-/* rule 165 can match eol */
+case 166:
+/* rule 166 can match eol */
 YY_RULE_SETUP
-#line 920 "pir.l"
+#line 921 "pir.l"
 { /* newline after .macro_local <type> <ident> line */
                               yy_pop_state(yyscanner);
                               return TK_NL;
                             }
     YY_BREAK
-case 166:
+case 167:
 YY_RULE_SETUP
-#line 925 "pir.l"
+#line 926 "pir.l"
 { /* this state is only used for declaring .macro_locals */
                               yypirerror(yyscanner, yypirget_extra(yyscanner),
                                  "unknown character '%c' when declaring .macro_local", yytext[0]);
@@ -3290,17 +3302,17 @@
 /****************************** .macro_label ********************************/
 
 
-case 167:
+case 168:
 YY_RULE_SETUP
-#line 935 "pir.l"
+#line 936 "pir.l"
 {
                               yy_push_state(MACROLABEL, yyscanner);
                               return TK_MACRO_LABEL;
                             }
     YY_BREAK
-case 168:
+case 169:
 YY_RULE_SETUP
-#line 940 "pir.l"
+#line 941 "pir.l"
 { /* if the "$" is there, it's a macro label using a macro
                                * parameter's value; otherwise it's a normal macro label
                                */
@@ -3318,18 +3330,18 @@
                               return TK_MACRO_LABEL_ID;
                             }
     YY_BREAK
-case 169:
-/* rule 169 can match eol */
+case 170:
+/* rule 170 can match eol */
 YY_RULE_SETUP
-#line 958 "pir.l"
+#line 959 "pir.l"
 { /* the newline character after a ".macro_label $foo:" declaration */
                               yy_pop_state(yyscanner); /* leave MACROLABEL state */
                               return TK_NL;
                             }
     YY_BREAK
-case 170:
+case 171:
 YY_RULE_SETUP
-#line 964 "pir.l"
+#line 965 "pir.l"
 { /* scan a label when expanding a buffer; declared as .macro_label */
                               lexer_state * const lexer = yypirget_extra(yyscanner);
                               char const  * const label = dupstrn(lexer, yytext, yyleng - 2);
@@ -3337,9 +3349,9 @@
                               return TK_LABEL;
                             }
     YY_BREAK
-case 171:
+case 172:
 YY_RULE_SETUP
-#line 971 "pir.l"
+#line 972 "pir.l"
 { /* scan a label when expanding macro; was a macro parameter */
                              lexer_state * const lexer     = yypirget_extra(yyscanner);
                              char const  * const paramname = dupstrn(lexer, yytext + 1, yyleng - 3);
@@ -3371,29 +3383,29 @@
 /*************************** macro body scanning (storing) ****************************/
 
 
-case 172:
-/* rule 172 can match eol */
+case 173:
+/* rule 173 can match eol */
 YY_RULE_SETUP
-#line 1004 "pir.l"
+#line 1005 "pir.l"
 { store_macro_char(CURRENT_MACRO(yypirget_extra(yyscanner)), '\n'); }
     YY_BREAK
-case 173:
+case 174:
 YY_RULE_SETUP
-#line 1006 "pir.l"
+#line 1007 "pir.l"
 {
                                yy_pop_state(yyscanner); /* leave MACROBODY state */
                                return TK_ENDM;
                              }
     YY_BREAK
-case 174:
+case 175:
 YY_RULE_SETUP
-#line 1011 "pir.l"
+#line 1012 "pir.l"
 { /* store everything else */
                                store_macro_char(CURRENT_MACRO(yypirget_extra(yyscanner)), yytext[0]);
                              }
     YY_BREAK
 case YY_STATE_EOF(MACROBODY):
-#line 1015 "pir.l"
+#line 1016 "pir.l"
 { /* catch run-away macro bodys */
                                yypirerror(yyscanner, yypirget_extra(yyscanner),
                                           "read end of file while reading macro body");
@@ -3423,95 +3435,95 @@
  * This becomes unmanageable
  */
 
-case 175:
-YY_RULE_SETUP
-#line 1047 "pir.l"
-{ return ','; }
-    YY_BREAK
 case 176:
 YY_RULE_SETUP
 #line 1048 "pir.l"
-{ return '['; }
+{ return ','; }
     YY_BREAK
 case 177:
 YY_RULE_SETUP
 #line 1049 "pir.l"
-{ return ']'; }
+{ return '['; }
     YY_BREAK
 case 178:
 YY_RULE_SETUP
-#line 1051 "pir.l"
-{ return TK_FLAG_MAIN; }
+#line 1050 "pir.l"
+{ return ']'; }
     YY_BREAK
 case 179:
 YY_RULE_SETUP
 #line 1052 "pir.l"
-{ return TK_FLAG_LOAD; }
+{ return TK_FLAG_MAIN; }
     YY_BREAK
 case 180:
 YY_RULE_SETUP
 #line 1053 "pir.l"
-{ return TK_FLAG_INIT; }
+{ return TK_FLAG_LOAD; }
     YY_BREAK
 case 181:
 YY_RULE_SETUP
 #line 1054 "pir.l"
-{ return TK_FLAG_ANON; }
+{ return TK_FLAG_INIT; }
     YY_BREAK
 case 182:
 YY_RULE_SETUP
 #line 1055 "pir.l"
-{ return TK_FLAG_POSTCOMP; }
+{ return TK_FLAG_ANON; }
     YY_BREAK
 case 183:
 YY_RULE_SETUP
 #line 1056 "pir.l"
-{ return TK_FLAG_IMMEDIATE; }
+{ return TK_FLAG_POSTCOMP; }
     YY_BREAK
 case 184:
 YY_RULE_SETUP
-#line 1058 "pir.l"
-{ return TK_PCC_SUB; }
+#line 1057 "pir.l"
+{ return TK_FLAG_IMMEDIATE; }
     YY_BREAK
 case 185:
 YY_RULE_SETUP
 #line 1059 "pir.l"
-{ return TK_LEX; }
+{ return TK_PCC_SUB; }
     YY_BREAK
 case 186:
 YY_RULE_SETUP
 #line 1060 "pir.l"
-{ return TK_NAMESPACE; }
+{ return TK_LEX; }
     YY_BREAK
 case 187:
 YY_RULE_SETUP
-#line 1062 "pir.l"
+#line 1061 "pir.l"
+{ return TK_NAMESPACE; }
+    YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 1063 "pir.l"
 {
                           yy_push_state(MACROHEAD, yyscanner);
                           return TK_MACRO;
                         }
     YY_BREAK
-case 188:
+case 189:
 YY_RULE_SETUP
-#line 1067 "pir.l"
+#line 1068 "pir.l"
 {
                           yy_push_state(MACROCONST, yyscanner);
                           return TK_MACRO_CONST;
                         }
     YY_BREAK
-case 189:
+case 190:
 YY_RULE_SETUP
-#line 1072 "pir.l"
+#line 1073 "pir.l"
 { return TK_LINE; }
     YY_BREAK
-case 190:
+case 191:
 YY_RULE_SETUP
-#line 1073 "pir.l"
+#line 1074 "pir.l"
 { return TK_FILE; }
     YY_BREAK
-case 191:
+case 192:
 YY_RULE_SETUP
-#line 1076 "pir.l"
+#line 1077 "pir.l"
 { /* macro expansion in PASM mode. */
                           lexer_state * const lexer = yypirget_extra(yyscanner);
                           macro_def   * const macro = find_macro(lexer->macros, yytext + 1);
@@ -3546,58 +3558,53 @@
                           }
                         }
     YY_BREAK
-case 192:
+case 193:
 YY_RULE_SETUP
-#line 1110 "pir.l"
+#line 1111 "pir.l"
 { /* a label in PASM */
                           yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext, yyleng - 1);
                           return TK_LABEL;
                         }
     YY_BREAK
-case 193:
+case 194:
 YY_RULE_SETUP
-#line 1115 "pir.l"
+#line 1116 "pir.l"
 { yypirerror(yyscanner, yypirget_extra(yyscanner),
                                      "symbolic registers are not allowed in PASM mode");
                         }
     YY_BREAK
-case 194:
-YY_RULE_SETUP
-#line 1118 "pir.l"
-{ yylval->ival = atoi(yytext + 1); return TK_PREG; }
-    YY_BREAK
 case 195:
 YY_RULE_SETUP
 #line 1119 "pir.l"
-{ yylval->ival = atoi(yytext + 1); return TK_NREG; }
+{ yylval->ival = atoi(yytext + 1); return TK_PREG; }
     YY_BREAK
 case 196:
 YY_RULE_SETUP
 #line 1120 "pir.l"
-{ yylval->ival = atoi(yytext + 1); return TK_IREG; }
+{ yylval->ival = atoi(yytext + 1); return TK_NREG; }
     YY_BREAK
 case 197:
 YY_RULE_SETUP
 #line 1121 "pir.l"
-{ yylval->ival = atoi(yytext + 1); return TK_SREG; }
+{ yylval->ival = atoi(yytext + 1); return TK_IREG; }
     YY_BREAK
 case 198:
 YY_RULE_SETUP
-#line 1123 "pir.l"
+#line 1122 "pir.l"
+{ yylval->ival = atoi(yytext + 1); return TK_SREG; }
+    YY_BREAK
+case 199:
+YY_RULE_SETUP
+#line 1124 "pir.l"
 { /* can be a parrot op or a label; the check is done in the parser. */
                           yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                           return TK_IDENT;
                         }
     YY_BREAK
-case 199:
-YY_RULE_SETUP
-#line 1128 "pir.l"
-{ yylval->dval = atof(yytext); return TK_NUMC; }
-    YY_BREAK
 case 200:
 YY_RULE_SETUP
 #line 1129 "pir.l"
-{ yylval->ival = atoi(yytext); return TK_INTC; }
+{ yylval->dval = atof(yytext); return TK_NUMC; }
     YY_BREAK
 case 201:
 YY_RULE_SETUP
@@ -3616,40 +3623,45 @@
     YY_BREAK
 case 204:
 YY_RULE_SETUP
-#line 1134 "pir.l"
+#line 1133 "pir.l"
+{ yylval->ival = atoi(yytext); return TK_INTC; }
+    YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 1135 "pir.l"
 { /* copy the string, remove the quotes. */
                           yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext + 1, yyleng - 2);
                           return TK_STRINGC;
                         }
     YY_BREAK
-case 205:
+case 206:
 YY_RULE_SETUP
-#line 1139 "pir.l"
+#line 1140 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 206:
-/* rule 206 can match eol */
+case 207:
+/* rule 207 can match eol */
 YY_RULE_SETUP
-#line 1141 "pir.l"
+#line 1142 "pir.l"
 { return TK_NL; }
     YY_BREAK
-case 207:
+case 208:
 YY_RULE_SETUP
-#line 1143 "pir.l"
+#line 1144 "pir.l"
 { yypirerror(yyscanner, yypirget_extra(yyscanner),
                                      "unrecognized character: %c", yytext[0]);
                         }
     YY_BREAK
 case YY_STATE_EOF(PASM):
-#line 1146 "pir.l"
+#line 1147 "pir.l"
 { yyterminate(); }
     YY_BREAK
-case 208:
+case 209:
 YY_RULE_SETUP
-#line 1148 "pir.l"
+#line 1149 "pir.l"
 ECHO;
     YY_BREAK
-#line 3653 "pirlexer.c"
+#line 3665 "pirlexer.c"
 case YY_STATE_EOF(MACROHEAD):
 case YY_STATE_EOF(MACROLOCAL):
 case YY_STATE_EOF(MACROLABEL):
@@ -3961,7 +3973,7 @@
         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
             {
             yy_current_state = (int) yy_def[yy_current_state];
-            if ( yy_current_state >= 821 )
+            if ( yy_current_state >= 828 )
                 yy_c = yy_meta[(unsigned int) yy_c];
             }
         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3995,11 +4007,11 @@
     while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
         {
         yy_current_state = (int) yy_def[yy_current_state];
-        if ( yy_current_state >= 821 )
+        if ( yy_current_state >= 828 )
             yy_c = yy_meta[(unsigned int) yy_c];
         }
     yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-    yy_is_jam = (yy_current_state == 820);
+    yy_is_jam = (yy_current_state == 827);
 
     return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4903,7 +4915,7 @@
 
 /* %ok-for-header */
 
-#line 1148 "pir.l"
+#line 1149 "pir.l"
 
 
 

Modified: trunk/compilers/pirc/src/pirlexer.h
==============================================================================
--- trunk/compilers/pirc/src/pirlexer.h	(original)
+++ trunk/compilers/pirc/src/pirlexer.h	Sun Jan 11 15:13:58 2009
@@ -492,7 +492,7 @@
 #undef YY_DECL
 #endif
 
-#line 1148 "pir.l"
+#line 1149 "pir.l"
 
 
 #line 499 "pirlexer.h"

Modified: trunk/compilers/pirc/src/pirparser.c
==============================================================================
--- trunk/compilers/pirc/src/pirparser.c	(original)
+++ trunk/compilers/pirc/src/pirparser.c	Sun Jan 11 15:13:58 2009
@@ -175,21 +175,22 @@
      TK_FLAG_OPTIONAL = 356,
      TK_FLAG_OPT_FLAG = 357,
      TK_FLAG_INVOCANT = 358,
-     TK_MACRO = 359,
-     TK_ENDM = 360,
-     TK_MACRO_LOCAL = 361,
-     TK_MACRO_LABEL = 362,
-     TK_MACRO_CONST = 363,
-     TK_MACRO_LABEL_ID = 364,
-     TK_MACRO_LOCAL_ID = 365,
-     TK_MACRO_IDENT = 366,
-     TK_MACRO_ARG_IDENT = 367,
-     TK_MACRO_ARG_OTHER = 368,
-     TK_MACRO_CONST_VAL = 369,
-     TK_PASM_MARKER_START = 370,
-     TK_PIR_MARKER_START = 371,
-     TK_PCC_SUB = 372,
-     TK_PARROT_OP = 373
+     TK_FLAG_LOOKAHEAD = 359,
+     TK_MACRO = 360,
+     TK_ENDM = 361,
+     TK_MACRO_LOCAL = 362,
+     TK_MACRO_LABEL = 363,
+     TK_MACRO_CONST = 364,
+     TK_MACRO_LABEL_ID = 365,
+     TK_MACRO_LOCAL_ID = 366,
+     TK_MACRO_IDENT = 367,
+     TK_MACRO_ARG_IDENT = 368,
+     TK_MACRO_ARG_OTHER = 369,
+     TK_MACRO_CONST_VAL = 370,
+     TK_PASM_MARKER_START = 371,
+     TK_PIR_MARKER_START = 372,
+     TK_PCC_SUB = 373,
+     TK_PARROT_OP = 374
    };
 #endif
 /* Tokens.  */
@@ -294,21 +295,22 @@
 #define TK_FLAG_OPTIONAL 356
 #define TK_FLAG_OPT_FLAG 357
 #define TK_FLAG_INVOCANT 358
-#define TK_MACRO 359
-#define TK_ENDM 360
-#define TK_MACRO_LOCAL 361
-#define TK_MACRO_LABEL 362
-#define TK_MACRO_CONST 363
-#define TK_MACRO_LABEL_ID 364
-#define TK_MACRO_LOCAL_ID 365
-#define TK_MACRO_IDENT 366
-#define TK_MACRO_ARG_IDENT 367
-#define TK_MACRO_ARG_OTHER 368
-#define TK_MACRO_CONST_VAL 369
-#define TK_PASM_MARKER_START 370
-#define TK_PIR_MARKER_START 371
-#define TK_PCC_SUB 372
-#define TK_PARROT_OP 373
+#define TK_FLAG_LOOKAHEAD 359
+#define TK_MACRO 360
+#define TK_ENDM 361
+#define TK_MACRO_LOCAL 362
+#define TK_MACRO_LABEL 363
+#define TK_MACRO_CONST 364
+#define TK_MACRO_LABEL_ID 365
+#define TK_MACRO_LOCAL_ID 366
+#define TK_MACRO_IDENT 367
+#define TK_MACRO_ARG_IDENT 368
+#define TK_MACRO_ARG_OTHER 369
+#define TK_MACRO_CONST_VAL 370
+#define TK_PASM_MARKER_START 371
+#define TK_PIR_MARKER_START 372
+#define TK_PCC_SUB 373
+#define TK_PARROT_OP 374
 
 
 
@@ -587,7 +589,7 @@
     struct macro_param *pval;
 }
 /* Line 187 of yacc.c.  */
-#line 591 "pirparser.c"
+#line 593 "pirparser.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -600,7 +602,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 604 "pirparser.c"
+#line 606 "pirparser.c"
 
 #ifdef short
 # undef short
@@ -815,20 +817,20 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  10
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1104
+#define YYLAST   1099
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  139
+#define YYNTOKENS  140
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  171
+#define YYNNTS  172
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  430
+#define YYNRULES  432
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  670
+#define YYNSTATES  674
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   374
+#define YYMAXUTOK   375
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -839,16 +841,16 @@
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   130,     2,     2,     2,   135,   137,     2,
-     119,   120,   134,   132,   121,   129,   128,   133,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,   125,
-       2,   122,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   131,     2,     2,     2,   136,   138,     2,
+     120,   121,   135,   133,   122,   130,   129,   134,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,   126,
+       2,   123,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   123,     2,   124,     2,     2,     2,     2,     2,     2,
+       2,   124,     2,   125,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   126,   136,   127,   131,     2,     2,     2,
+       2,     2,     2,   127,   137,   128,   132,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -873,7 +875,7 @@
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   138
+     115,   116,   117,   118,   119,   139
 };
 
 #if YYDEBUG
@@ -889,220 +891,220 @@
      134,   137,   139,   141,   142,   145,   147,   149,   151,   153,
      155,   157,   159,   162,   167,   170,   173,   176,   179,   182,
      186,   187,   189,   191,   195,   197,   199,   201,   203,   204,
-     207,   212,   215,   216,   219,   221,   223,   225,   230,   232,
-     233,   236,   239,   241,   243,   245,   247,   249,   251,   253,
-     255,   257,   259,   261,   263,   265,   267,   269,   271,   273,
-     279,   281,   285,   286,   290,   291,   293,   295,   299,   301,
-     303,   306,   308,   312,   313,   316,   318,   320,   322,   325,
-     327,   330,   333,   337,   341,   344,   347,   349,   351,   353,
-     355,   356,   358,   360,   364,   368,   370,   372,   374,   376,
-     378,   380,   383,   387,   389,   393,   400,   405,   412,   415,
-     417,   419,   423,   427,   431,   435,   439,   443,   448,   453,
-     458,   462,   466,   470,   474,   478,   482,   486,   491,   497,
-     502,   507,   511,   515,   519,   523,   527,   531,   535,   539,
-     542,   548,   554,   560,   566,   572,   578,   584,   590,   596,
-     601,   607,   612,   617,   622,   627,   632,   637,   642,   647,
-     652,   657,   662,   667,   672,   676,   680,   684,   688,   692,
-     696,   700,   704,   708,   712,   716,   720,   722,   724,   726,
-     728,   730,   732,   736,   741,   743,   747,   750,   751,   753,
-     759,   761,   763,   765,   774,   775,   777,   779,   782,   786,
-     790,   793,   799,   800,   803,   804,   806,   808,   811,   815,
-     817,   820,   824,   828,   830,   832,   834,   839,   842,   844,
-     846,   848,   850,   852,   854,   856,   858,   862,   863,   865,
-     867,   871,   874,   878,   879,   882,   884,   886,   888,   891,
-     893,   895,   897,   899,   901,   905,   909,   913,   917,   918,
-     920,   922,   926,   928,   930,   934,   937,   939,   945,   951,
-     952,   954,   956,   959,   963,   964,   966,   968,   971,   975,
-     976,   979,   981,   984,   985,   987,   991,   994,   997,   999,
-    1001,  1004,  1006,  1008,  1011,  1016,  1021,  1026,  1031,  1036,
-    1038,  1040,  1042,  1044,  1046,  1048,  1050,  1052,  1054,  1056,
-    1058,  1060,  1062,  1064,  1066,  1068,  1070,  1072,  1074,  1076,
-    1078,  1080,  1082,  1084,  1086,  1088,  1090,  1092,  1094,  1096,
-    1098,  1100,  1102,  1104,  1106,  1108,  1110,  1112,  1114,  1116,
-    1118,  1120,  1122,  1124,  1126,  1128,  1130,  1132,  1134,  1136,
-    1138,  1140,  1142,  1144,  1146,  1148,  1150,  1152,  1154,  1156,
-    1158,  1160,  1162,  1164,  1166,  1168,  1170,  1172,  1174,  1176,
-    1178,  1180,  1182,  1184,  1187,  1189,  1191,  1194,  1196,  1199,
-    1201,  1204,  1207,  1209,  1212,  1215,  1217,  1219,  1221,  1225,
-    1227
+     207,   212,   215,   216,   219,   221,   223,   225,   227,   231,
+     236,   238,   239,   242,   245,   247,   249,   251,   253,   255,
+     257,   259,   261,   263,   265,   267,   269,   271,   273,   275,
+     277,   279,   285,   287,   291,   292,   296,   297,   299,   301,
+     305,   307,   309,   312,   314,   318,   319,   322,   324,   326,
+     328,   331,   333,   336,   339,   343,   347,   350,   353,   355,
+     357,   359,   361,   362,   364,   366,   370,   374,   376,   378,
+     380,   382,   384,   386,   389,   393,   395,   399,   406,   411,
+     418,   421,   423,   425,   429,   433,   437,   441,   445,   449,
+     454,   459,   464,   468,   472,   476,   480,   484,   488,   492,
+     497,   503,   508,   513,   517,   521,   525,   529,   533,   537,
+     541,   545,   548,   554,   560,   566,   572,   578,   584,   590,
+     596,   602,   607,   613,   618,   623,   628,   633,   638,   643,
+     648,   653,   658,   663,   668,   673,   678,   682,   686,   690,
+     694,   698,   702,   706,   710,   714,   718,   722,   726,   728,
+     730,   732,   734,   736,   738,   742,   747,   749,   753,   756,
+     757,   759,   765,   767,   769,   771,   780,   781,   783,   785,
+     788,   792,   796,   799,   805,   806,   809,   810,   812,   814,
+     817,   821,   823,   826,   830,   834,   836,   838,   840,   845,
+     848,   850,   852,   854,   856,   858,   860,   862,   864,   868,
+     869,   871,   873,   877,   880,   884,   885,   888,   890,   892,
+     894,   897,   899,   901,   903,   905,   907,   911,   915,   919,
+     923,   924,   926,   928,   932,   934,   936,   940,   943,   945,
+     951,   957,   958,   960,   962,   965,   969,   970,   972,   974,
+     977,   981,   982,   985,   987,   990,   991,   993,   997,  1000,
+    1003,  1005,  1007,  1010,  1012,  1014,  1017,  1022,  1027,  1032,
+    1037,  1042,  1044,  1046,  1048,  1050,  1052,  1054,  1056,  1058,
+    1060,  1062,  1064,  1066,  1068,  1070,  1072,  1074,  1076,  1078,
+    1080,  1082,  1084,  1086,  1088,  1090,  1092,  1094,  1096,  1098,
+    1100,  1102,  1104,  1106,  1108,  1110,  1112,  1114,  1116,  1118,
+    1120,  1122,  1124,  1126,  1128,  1130,  1132,  1134,  1136,  1138,
+    1140,  1142,  1144,  1146,  1148,  1150,  1152,  1154,  1156,  1158,
+    1160,  1162,  1164,  1166,  1168,  1170,  1172,  1174,  1176,  1178,
+    1180,  1182,  1184,  1186,  1188,  1190,  1193,  1195,  1197,  1200,
+    1202,  1205,  1207,  1210,  1213,  1215,  1218,  1221,  1223,  1225,
+    1227,  1231,  1233
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     140,     0,    -1,   116,   141,    -1,   115,   301,    -1,   142,
-     143,   142,    -1,    -1,    35,    -1,   144,    -1,   143,    35,
-     144,    -1,   166,    -1,   280,    -1,   162,    -1,   160,    -1,
-     161,    -1,   158,    -1,   159,    -1,   145,    -1,   199,    -1,
-     146,    -1,   147,    -1,   108,    37,   114,    -1,   148,   119,
-     149,   120,    35,   152,   105,    -1,   104,   296,    -1,    -1,
-     150,    -1,   151,    -1,   150,   121,   151,    -1,   296,    -1,
-      -1,   153,    -1,   154,    -1,   153,   154,    -1,   155,    35,
-      -1,   156,    -1,   157,    -1,   107,   109,    -1,   106,   292,
-     110,    -1,     5,    46,    -1,    10,    48,    -1,    11,    46,
-      -1,     3,    46,    -1,     4,    46,   122,    46,    -1,    13,
-     123,   163,   124,    -1,    -1,   164,    -1,   165,    -1,   164,
-     125,   165,    -1,    46,    -1,   168,   170,    35,   176,   184,
-     167,    -1,     7,    -1,     6,   169,    -1,   296,    -1,    46,
-      -1,    -1,   170,   171,    -1,    86,    -1,    83,    -1,    84,
+     141,     0,    -1,   117,   142,    -1,   116,   303,    -1,   143,
+     144,   143,    -1,    -1,    35,    -1,   145,    -1,   144,    35,
+     145,    -1,   167,    -1,   282,    -1,   163,    -1,   161,    -1,
+     162,    -1,   159,    -1,   160,    -1,   146,    -1,   201,    -1,
+     147,    -1,   148,    -1,   109,    37,   115,    -1,   149,   120,
+     150,   121,    35,   153,   106,    -1,   105,   298,    -1,    -1,
+     151,    -1,   152,    -1,   151,   122,   152,    -1,   298,    -1,
+      -1,   154,    -1,   155,    -1,   154,   155,    -1,   156,    35,
+      -1,   157,    -1,   158,    -1,   108,   110,    -1,   107,   294,
+     111,    -1,     5,    46,    -1,    10,    48,    -1,    11,    46,
+      -1,     3,    46,    -1,     4,    46,   123,    46,    -1,    13,
+     124,   164,   125,    -1,    -1,   165,    -1,   166,    -1,   165,
+     126,   166,    -1,    46,    -1,   169,   171,    35,   177,   186,
+     168,    -1,     7,    -1,     6,   170,    -1,   298,    -1,    46,
+      -1,    -1,   171,   172,    -1,    86,    -1,    83,    -1,    84,
       -1,    85,    -1,    90,    -1,    92,    -1,    93,    -1,    91,
-     172,    -1,    88,   119,   169,   120,    -1,    87,   277,    -1,
-      89,   277,    -1,    94,   278,    -1,    95,   278,    -1,    96,
-     278,    -1,   119,   173,   120,    -1,    -1,   174,    -1,   175,
-      -1,   174,   121,   175,    -1,   296,    -1,    46,    -1,   212,
-      -1,   177,    -1,    -1,   177,   178,    -1,     8,   179,   180,
-      35,    -1,   292,   296,    -1,    -1,   180,   181,    -1,   255,
-      -1,   182,    -1,   183,    -1,   103,   119,   175,   120,    -1,
-      97,    -1,    -1,   184,   185,    -1,    36,   186,    -1,   186,
-      -1,   202,    -1,   219,    -1,   225,    -1,   226,    -1,   230,
-      -1,   279,    -1,   256,    -1,   231,    -1,   215,    -1,   201,
-      -1,   200,    -1,   197,    -1,   198,    -1,   188,    -1,   187,
-      -1,   199,    -1,    34,    46,   121,   289,    35,    -1,   189,
-      -1,   111,   190,    35,    -1,    -1,   119,   191,   120,    -1,
-      -1,   192,    -1,   193,    -1,   192,   121,   193,    -1,   112,
-      -1,   113,    -1,   111,   190,    -1,   194,    -1,   126,   195,
-     127,    -1,    -1,   195,   196,    -1,    35,    -1,   113,    -1,
-     112,    -1,   111,   190,    -1,    35,    -1,   159,    35,    -1,
-       1,    35,    -1,    44,   293,    35,    -1,    28,   250,    35,
-      -1,   203,    35,    -1,   204,   205,    -1,   214,    -1,    37,
-      -1,   206,    -1,   208,    -1,    -1,   207,    -1,   209,    -1,
-     207,   121,   209,    -1,   212,   122,   288,    -1,   210,    -1,
-     212,    -1,   289,    -1,   296,    -1,   295,    -1,   211,    -1,
-     249,   212,    -1,   123,   213,   124,    -1,   288,    -1,   213,
-     125,   288,    -1,   293,   122,   204,   210,   121,   207,    -1,
-     293,   122,   204,   210,    -1,   293,   122,   204,   212,   121,
-     207,    -1,   217,    35,    -1,    37,    -1,   297,    -1,   293,
-     122,    48,    -1,   293,   122,    49,    -1,   293,   122,   290,
-      -1,   293,   122,   295,    -1,   293,   122,   216,    -1,   293,
-     122,   218,    -1,   293,   122,   204,   212,    -1,   293,   122,
-     297,   212,    -1,   293,   122,    50,   212,    -1,   293,   300,
-     288,    -1,   293,    72,    48,    -1,   293,    72,    49,    -1,
-     293,    73,    48,    -1,   293,    73,    49,    -1,   293,    72,
-     293,    -1,   293,    73,   293,    -1,   293,   122,   298,   288,
-      -1,   293,   122,   293,   299,   288,    -1,   297,   212,   122,
-     288,    -1,    50,   212,   122,   288,    -1,    48,   299,   293,
-      -1,    49,   299,   293,    -1,    46,   299,   293,    -1,    46,
-     299,    46,    -1,    48,   299,    48,    -1,    49,   299,    49,
-      -1,    48,   299,    49,    -1,    49,   299,    48,    -1,   220,
-      35,    -1,   223,    44,    37,    45,   296,    -1,   223,    44,
-      38,    45,   296,    -1,   223,    44,    39,    45,   296,    -1,
-     223,    44,    40,    45,   296,    -1,   223,    44,    41,    45,
-     296,    -1,   223,    44,    42,    45,   296,    -1,   223,    44,
-      43,    45,   296,    -1,   223,    44,    45,    45,   296,    -1,
-     223,    44,    44,    45,   296,    -1,   223,   289,   224,   296,
-      -1,   223,    44,    50,   224,   296,    -1,   223,    37,   224,
-     296,    -1,   223,   295,   224,   296,    -1,   223,    38,   224,
-     296,    -1,   223,    39,   224,   296,    -1,   223,    40,   224,
-     296,    -1,   223,    41,   224,   296,    -1,   223,    42,   224,
-     296,    -1,   223,    43,   224,   296,    -1,   223,    45,    45,
-     296,    -1,   223,    45,   121,   296,    -1,   223,    44,    45,
-     296,    -1,   223,    44,   121,   296,    -1,   223,   221,    45,
-     296,    -1,   293,   291,   288,    -1,    48,   291,   293,    -1,
-      49,   291,   293,    -1,    46,   291,   293,    -1,    48,   291,
-      48,    -1,    48,   291,    49,    -1,    49,   291,    48,    -1,
-      49,   291,    49,    -1,    46,   291,    46,    -1,    46,   291,
-     222,    -1,    48,   291,    46,    -1,    49,   291,    46,    -1,
-      48,    -1,    49,    -1,    42,    -1,    43,    -1,    45,    -1,
-     121,    -1,    45,   296,    35,    -1,    12,   292,   227,    35,
-      -1,   228,    -1,   227,   121,   228,    -1,   296,   229,    -1,
-      -1,    97,    -1,     9,    46,   121,   249,    35,    -1,   232,
-      -1,   233,    -1,   242,    -1,    26,    35,   234,   237,    35,
-     239,    27,    35,    -1,    -1,   235,    -1,   236,    -1,   235,
-     236,    -1,    30,   265,    35,    -1,    29,   247,   238,    -1,
-      32,   249,    -1,    14,   249,    35,    15,   248,    -1,    -1,
-     121,   249,    -1,    -1,   240,    -1,   241,    -1,   240,   241,
-      -1,    31,   253,    35,    -1,   226,    -1,   243,    35,    -1,
-     250,   122,   244,    -1,   293,   122,   244,    -1,   244,    -1,
-     246,    -1,   245,    -1,   249,   128,   248,   260,    -1,   247,
-     260,    -1,   249,    -1,    46,    -1,   296,    -1,    50,    -1,
-      52,    -1,    46,    -1,   296,    -1,    50,    -1,   119,   251,
-     120,    -1,    -1,   252,    -1,   253,    -1,   252,   121,   253,
-      -1,   293,   254,    -1,    46,    54,   293,    -1,    -1,   254,
-     255,    -1,   101,    -1,   102,    -1,    99,    -1,    98,   277,
-      -1,   257,    -1,   258,    -1,   267,    -1,   259,    -1,   268,
-      -1,    18,   260,    35,    -1,    33,   244,    35,    -1,    19,
-     260,    35,    -1,   119,   261,   120,    -1,    -1,   262,    -1,
-     263,    -1,   262,   121,   263,    -1,   265,    -1,   264,    -1,
-      46,    54,   266,    -1,   266,   275,    -1,   288,    -1,    24,
-      35,   272,    25,    35,    -1,    22,    35,   269,    23,    35,
-      -1,    -1,   270,    -1,   271,    -1,   270,   271,    -1,    20,
-     265,    35,    -1,    -1,   273,    -1,   274,    -1,   273,   274,
-      -1,    21,   265,    35,    -1,    -1,   275,   276,    -1,   100,
-      -1,    98,   277,    -1,    -1,   278,    -1,   119,    46,   120,
-      -1,   281,    35,    -1,    17,   285,    -1,   282,    -1,   284,
-      -1,    17,   283,    -1,   285,    -1,   286,    -1,    16,   285,
-      -1,    38,   296,   122,    48,    -1,    39,   296,   122,    49,
-      -1,    41,   296,   122,    46,    -1,    41,   296,   122,    47,
-      -1,    46,   296,   122,   287,    -1,   289,    -1,   296,    -1,
-     293,    -1,   289,    -1,    48,    -1,    49,    -1,   290,    -1,
-      46,    -1,    47,    -1,    55,    -1,    56,    -1,    57,    -1,
-      58,    -1,    60,    -1,    59,    -1,    38,    -1,    39,    -1,
-      40,    -1,    41,    -1,   294,    -1,   295,    -1,   296,    -1,
-      50,    -1,    51,    -1,    53,    -1,    52,    -1,    37,    -1,
-     297,    -1,    42,    -1,    43,    -1,    45,    -1,    38,    -1,
-      39,    -1,    41,    -1,    40,    -1,    44,    -1,   129,    -1,
-     130,    -1,   131,    -1,   132,    -1,   129,    -1,   133,    -1,
-     134,    -1,   135,    -1,   136,    -1,   137,    -1,   131,    -1,
-     138,    -1,    68,    -1,    61,    -1,    62,    -1,    63,    -1,
-      65,    -1,    66,    -1,    64,    -1,    67,    -1,    56,    -1,
-      58,    -1,    57,    -1,    60,    -1,    59,    -1,    55,    -1,
-      74,    -1,    75,    -1,    76,    -1,    77,    -1,    80,    -1,
-      78,    -1,    79,    -1,    81,    -1,    82,    -1,    70,    -1,
-      71,    -1,    69,    -1,   302,   303,    -1,   142,    -1,   304,
-      -1,   303,   304,    -1,   305,    -1,   162,    35,    -1,   230,
-      -1,   159,    35,    -1,   145,    35,    -1,   189,    -1,    36,
-     306,    -1,   307,   306,    -1,   309,    -1,   197,    -1,   309,
-      -1,   308,   170,    36,    -1,   117,    -1,   204,   206,    35,
-      -1
+     173,    -1,    88,   120,   170,   121,    -1,    87,   279,    -1,
+      89,   279,    -1,    94,   280,    -1,    95,   280,    -1,    96,
+     280,    -1,   120,   174,   121,    -1,    -1,   175,    -1,   176,
+      -1,   175,   122,   176,    -1,   298,    -1,    46,    -1,   214,
+      -1,   178,    -1,    -1,   178,   179,    -1,     8,   180,   181,
+      35,    -1,   294,   298,    -1,    -1,   181,   182,    -1,   257,
+      -1,   184,    -1,   183,    -1,   185,    -1,   104,   120,   121,
+      -1,   103,   120,   176,   121,    -1,    97,    -1,    -1,   186,
+     187,    -1,    36,   188,    -1,   188,    -1,   204,    -1,   221,
+      -1,   227,    -1,   228,    -1,   232,    -1,   281,    -1,   258,
+      -1,   233,    -1,   217,    -1,   203,    -1,   202,    -1,   199,
+      -1,   200,    -1,   190,    -1,   189,    -1,   201,    -1,    34,
+      46,   122,   291,    35,    -1,   191,    -1,   112,   192,    35,
+      -1,    -1,   120,   193,   121,    -1,    -1,   194,    -1,   195,
+      -1,   194,   122,   195,    -1,   113,    -1,   114,    -1,   112,
+     192,    -1,   196,    -1,   127,   197,   128,    -1,    -1,   197,
+     198,    -1,    35,    -1,   114,    -1,   113,    -1,   112,   192,
+      -1,    35,    -1,   160,    35,    -1,     1,    35,    -1,    44,
+     295,    35,    -1,    28,   252,    35,    -1,   205,    35,    -1,
+     206,   207,    -1,   216,    -1,    37,    -1,   208,    -1,   210,
+      -1,    -1,   209,    -1,   211,    -1,   209,   122,   211,    -1,
+     214,   123,   290,    -1,   212,    -1,   214,    -1,   291,    -1,
+     298,    -1,   297,    -1,   213,    -1,   251,   214,    -1,   124,
+     215,   125,    -1,   290,    -1,   215,   126,   290,    -1,   295,
+     123,   206,   212,   122,   209,    -1,   295,   123,   206,   212,
+      -1,   295,   123,   206,   214,   122,   209,    -1,   219,    35,
+      -1,    37,    -1,   299,    -1,   295,   123,    48,    -1,   295,
+     123,    49,    -1,   295,   123,   292,    -1,   295,   123,   297,
+      -1,   295,   123,   218,    -1,   295,   123,   220,    -1,   295,
+     123,   206,   214,    -1,   295,   123,   299,   214,    -1,   295,
+     123,    50,   214,    -1,   295,   302,   290,    -1,   295,    72,
+      48,    -1,   295,    72,    49,    -1,   295,    73,    48,    -1,
+     295,    73,    49,    -1,   295,    72,   295,    -1,   295,    73,
+     295,    -1,   295,   123,   300,   290,    -1,   295,   123,   295,
+     301,   290,    -1,   299,   214,   123,   290,    -1,    50,   214,
+     123,   290,    -1,    48,   301,   295,    -1,    49,   301,   295,
+      -1,    46,   301,   295,    -1,    46,   301,    46,    -1,    48,
+     301,    48,    -1,    49,   301,    49,    -1,    48,   301,    49,
+      -1,    49,   301,    48,    -1,   222,    35,    -1,   225,    44,
+      37,    45,   298,    -1,   225,    44,    38,    45,   298,    -1,
+     225,    44,    39,    45,   298,    -1,   225,    44,    40,    45,
+     298,    -1,   225,    44,    41,    45,   298,    -1,   225,    44,
+      42,    45,   298,    -1,   225,    44,    43,    45,   298,    -1,
+     225,    44,    45,    45,   298,    -1,   225,    44,    44,    45,
+     298,    -1,   225,   291,   226,   298,    -1,   225,    44,    50,
+     226,   298,    -1,   225,    37,   226,   298,    -1,   225,   297,
+     226,   298,    -1,   225,    38,   226,   298,    -1,   225,    39,
+     226,   298,    -1,   225,    40,   226,   298,    -1,   225,    41,
+     226,   298,    -1,   225,    42,   226,   298,    -1,   225,    43,
+     226,   298,    -1,   225,    45,    45,   298,    -1,   225,    45,
+     122,   298,    -1,   225,    44,    45,   298,    -1,   225,    44,
+     122,   298,    -1,   225,   223,    45,   298,    -1,   295,   293,
+     290,    -1,    48,   293,   295,    -1,    49,   293,   295,    -1,
+      46,   293,   295,    -1,    48,   293,    48,    -1,    48,   293,
+      49,    -1,    49,   293,    48,    -1,    49,   293,    49,    -1,
+      46,   293,    46,    -1,    46,   293,   224,    -1,    48,   293,
+      46,    -1,    49,   293,    46,    -1,    48,    -1,    49,    -1,
+      42,    -1,    43,    -1,    45,    -1,   122,    -1,    45,   298,
+      35,    -1,    12,   294,   229,    35,    -1,   230,    -1,   229,
+     122,   230,    -1,   298,   231,    -1,    -1,    97,    -1,     9,
+      46,   122,   251,    35,    -1,   234,    -1,   235,    -1,   244,
+      -1,    26,    35,   236,   239,    35,   241,    27,    35,    -1,
+      -1,   237,    -1,   238,    -1,   237,   238,    -1,    30,   267,
+      35,    -1,    29,   249,   240,    -1,    32,   251,    -1,    14,
+     251,    35,    15,   250,    -1,    -1,   122,   251,    -1,    -1,
+     242,    -1,   243,    -1,   242,   243,    -1,    31,   255,    35,
+      -1,   228,    -1,   245,    35,    -1,   252,   123,   246,    -1,
+     295,   123,   246,    -1,   246,    -1,   248,    -1,   247,    -1,
+     251,   129,   250,   262,    -1,   249,   262,    -1,   251,    -1,
+      46,    -1,   298,    -1,    50,    -1,    52,    -1,    46,    -1,
+     298,    -1,    50,    -1,   120,   253,   121,    -1,    -1,   254,
+      -1,   255,    -1,   254,   122,   255,    -1,   295,   256,    -1,
+      46,    54,   295,    -1,    -1,   256,   257,    -1,   101,    -1,
+     102,    -1,    99,    -1,    98,   279,    -1,   259,    -1,   260,
+      -1,   269,    -1,   261,    -1,   270,    -1,    18,   262,    35,
+      -1,    33,   246,    35,    -1,    19,   262,    35,    -1,   120,
+     263,   121,    -1,    -1,   264,    -1,   265,    -1,   264,   122,
+     265,    -1,   267,    -1,   266,    -1,    46,    54,   268,    -1,
+     268,   277,    -1,   290,    -1,    24,    35,   274,    25,    35,
+      -1,    22,    35,   271,    23,    35,    -1,    -1,   272,    -1,
+     273,    -1,   272,   273,    -1,    20,   267,    35,    -1,    -1,
+     275,    -1,   276,    -1,   275,   276,    -1,    21,   267,    35,
+      -1,    -1,   277,   278,    -1,   100,    -1,    98,   279,    -1,
+      -1,   280,    -1,   120,    46,   121,    -1,   283,    35,    -1,
+      17,   287,    -1,   284,    -1,   286,    -1,    17,   285,    -1,
+     287,    -1,   288,    -1,    16,   287,    -1,    38,   298,   123,
+      48,    -1,    39,   298,   123,    49,    -1,    41,   298,   123,
+      46,    -1,    41,   298,   123,    47,    -1,    46,   298,   123,
+     289,    -1,   291,    -1,   298,    -1,   295,    -1,   291,    -1,
+      48,    -1,    49,    -1,   292,    -1,    46,    -1,    47,    -1,
+      55,    -1,    56,    -1,    57,    -1,    58,    -1,    60,    -1,
+      59,    -1,    38,    -1,    39,    -1,    40,    -1,    41,    -1,
+     296,    -1,   297,    -1,   298,    -1,    50,    -1,    51,    -1,
+      53,    -1,    52,    -1,    37,    -1,   299,    -1,    42,    -1,
+      43,    -1,    45,    -1,    38,    -1,    39,    -1,    41,    -1,
+      40,    -1,    44,    -1,   130,    -1,   131,    -1,   132,    -1,
+     133,    -1,   130,    -1,   134,    -1,   135,    -1,   136,    -1,
+     137,    -1,   138,    -1,   132,    -1,   139,    -1,    68,    -1,
+      61,    -1,    62,    -1,    63,    -1,    65,    -1,    66,    -1,
+      64,    -1,    67,    -1,    56,    -1,    58,    -1,    57,    -1,
+      60,    -1,    59,    -1,    55,    -1,    74,    -1,    75,    -1,
+      76,    -1,    77,    -1,    80,    -1,    78,    -1,    79,    -1,
+      81,    -1,    82,    -1,    70,    -1,    71,    -1,    69,    -1,
+     304,   305,    -1,   143,    -1,   306,    -1,   305,   306,    -1,
+     307,    -1,   163,    35,    -1,   232,    -1,   160,    35,    -1,
+     146,    35,    -1,   191,    -1,    36,   308,    -1,   309,   308,
+      -1,   311,    -1,   199,    -1,   311,    -1,   310,   171,    36,
+      -1,   118,    -1,   206,   208,    35,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   561,   561,   562,   567,   573,   574,   577,   578,   581,
-     582,   583,   584,   585,   586,   587,   588,   589,   596,   597,
-     600,   604,   610,   617,   618,   621,   622,   625,   629,   630,
-     633,   634,   637,   640,   641,   644,   648,   659,   663,   665,
-     671,   675,   679,   684,   685,   689,   691,   695,   699,   705,
-     709,   713,   714,   717,   718,   721,   723,   725,   727,   729,
-     731,   733,   735,   737,   739,   741,   743,   745,   747,   751,
-     756,   760,   764,   773,   784,   786,   788,   792,   801,   802,
-     815,   819,   824,   825,   829,   830,   831,   834,   841,   847,
-     848,   858,   860,   863,   864,   865,   866,   867,   868,   869,
-     870,   871,   872,   873,   874,   875,   876,   877,   878,   881,
-     888,   891,   896,   897,   902,   903,   906,   908,   916,   924,
-     925,   927,   930,   936,   937,   946,   947,   948,   949,   957,
-     961,   965,   974,   981,   988,   991,   992,   995,  1004,  1011,
-    1014,  1015,  1018,  1019,  1022,  1058,  1060,  1064,  1066,  1071,
-    1073,  1077,  1100,  1104,  1106,  1115,  1126,  1138,  1148,  1151,
-    1152,  1155,  1164,  1173,  1178,  1183,  1204,  1209,  1250,  1268,
-    1275,  1280,  1291,  1302,  1313,  1324,  1329,  1334,  1339,  1349,
-    1368,  1402,  1404,  1406,  1408,  1410,  1412,  1414,  1416,  1421,
-    1430,  1432,  1434,  1436,  1438,  1440,  1442,  1444,  1446,  1448,
-    1460,  1465,  1467,  1469,  1471,  1473,  1475,  1477,  1479,  1481,
-    1483,  1485,  1487,  1489,  1520,  1546,  1554,  1563,  1572,  1574,
-    1576,  1578,  1580,  1584,  1589,  1591,  1596,  1597,  1600,  1601,
-    1604,  1605,  1608,  1616,  1620,  1622,  1626,  1630,  1631,  1634,
-    1649,  1653,  1654,  1657,  1669,  1670,  1674,  1676,  1680,  1684,
-    1686,  1688,  1694,  1695,  1700,  1701,  1705,  1707,  1716,  1718,
-    1722,  1726,  1728,  1730,  1734,  1735,  1738,  1758,  1765,  1767,
-    1777,  1794,  1796,  1798,  1802,  1811,  1816,  1823,  1824,  1828,
-    1830,  1834,  1836,  1841,  1842,  1846,  1848,  1850,  1852,  1862,
-    1866,  1867,  1868,  1869,  1872,  1877,  1888,  1895,  1900,  1901,
-    1905,  1907,  1911,  1912,  1915,  1919,  1923,  1927,  1936,  1946,
-    1947,  1952,  1954,  1959,  1964,  1965,  1969,  1971,  1975,  1981,
-    1982,  1986,  1988,  1996,  1997,  2001,  2005,  2008,  2012,  2013,
-    2016,  2020,  2021,  2024,  2028,  2030,  2032,  2034,  2038,  2042,
-    2043,  2056,  2057,  2061,  2062,  2063,  2066,  2067,  2070,  2071,
-    2072,  2073,  2074,  2075,  2078,  2079,  2080,  2081,  2089,  2092,
-    2093,  2106,  2107,  2108,  2109,  2113,  2114,  2117,  2118,  2119,
-    2120,  2121,  2122,  2123,  2124,  2127,  2128,  2129,  2132,  2133,
-    2134,  2135,  2136,  2137,  2138,  2139,  2140,  2141,  2142,  2143,
-    2144,  2145,  2146,  2147,  2148,  2149,  2150,  2151,  2152,  2153,
-    2154,  2160,  2161,  2162,  2163,  2164,  2165,  2166,  2167,  2168,
-    2169,  2170,  2171,  2183,  2191,  2195,  2196,  2199,  2200,  2201,
-    2202,  2203,  2204,  2207,  2209,  2210,  2213,  2214,  2217,  2221,
-    2226
+       0,   563,   563,   564,   569,   575,   576,   579,   580,   583,
+     584,   585,   586,   587,   588,   589,   590,   591,   598,   599,
+     602,   606,   612,   619,   620,   623,   624,   627,   631,   632,
+     635,   636,   639,   642,   643,   646,   650,   661,   665,   667,
+     673,   677,   681,   686,   687,   691,   693,   697,   701,   707,
+     711,   715,   716,   719,   720,   723,   725,   727,   729,   731,
+     733,   735,   737,   739,   741,   743,   745,   747,   749,   753,
+     758,   762,   766,   775,   786,   788,   790,   794,   803,   804,
+     817,   821,   826,   827,   831,   832,   833,   834,   837,   841,
+     848,   854,   855,   865,   867,   870,   871,   872,   873,   874,
+     875,   876,   877,   878,   879,   880,   881,   882,   883,   884,
+     885,   888,   895,   898,   903,   904,   909,   910,   913,   915,
+     923,   931,   932,   934,   937,   943,   944,   953,   954,   955,
+     956,   964,   968,   972,   981,   988,   995,   998,   999,  1002,
+    1011,  1018,  1021,  1022,  1025,  1026,  1029,  1065,  1067,  1071,
+    1073,  1078,  1080,  1084,  1107,  1111,  1113,  1122,  1133,  1145,
+    1155,  1158,  1159,  1162,  1171,  1180,  1185,  1190,  1211,  1216,
+    1257,  1275,  1282,  1287,  1298,  1309,  1320,  1331,  1336,  1341,
+    1346,  1356,  1375,  1409,  1411,  1413,  1415,  1417,  1419,  1421,
+    1423,  1428,  1437,  1439,  1441,  1443,  1445,  1447,  1449,  1451,
+    1453,  1455,  1467,  1472,  1474,  1476,  1478,  1480,  1482,  1484,
+    1486,  1488,  1490,  1492,  1494,  1496,  1527,  1553,  1561,  1570,
+    1579,  1581,  1583,  1585,  1587,  1591,  1596,  1598,  1603,  1604,
+    1607,  1608,  1611,  1612,  1615,  1623,  1627,  1629,  1633,  1637,
+    1638,  1641,  1656,  1660,  1661,  1664,  1676,  1677,  1681,  1683,
+    1687,  1691,  1693,  1695,  1701,  1702,  1707,  1708,  1712,  1714,
+    1723,  1725,  1729,  1733,  1735,  1737,  1741,  1742,  1745,  1765,
+    1772,  1774,  1784,  1801,  1803,  1805,  1809,  1818,  1823,  1830,
+    1831,  1835,  1837,  1841,  1843,  1848,  1849,  1853,  1855,  1857,
+    1859,  1869,  1873,  1874,  1875,  1876,  1879,  1884,  1895,  1902,
+    1907,  1908,  1912,  1914,  1918,  1919,  1922,  1926,  1930,  1934,
+    1943,  1953,  1954,  1959,  1961,  1966,  1971,  1972,  1976,  1978,
+    1982,  1988,  1989,  1993,  1995,  2003,  2004,  2008,  2012,  2015,
+    2019,  2020,  2023,  2027,  2028,  2031,  2035,  2037,  2039,  2041,
+    2045,  2049,  2050,  2063,  2064,  2068,  2069,  2070,  2073,  2074,
+    2077,  2078,  2079,  2080,  2081,  2082,  2085,  2086,  2087,  2088,
+    2096,  2099,  2100,  2113,  2114,  2115,  2116,  2120,  2121,  2124,
+    2125,  2126,  2127,  2128,  2129,  2130,  2131,  2134,  2135,  2136,
+    2139,  2140,  2141,  2142,  2143,  2144,  2145,  2146,  2147,  2148,
+    2149,  2150,  2151,  2152,  2153,  2154,  2155,  2156,  2157,  2158,
+    2159,  2160,  2161,  2167,  2168,  2169,  2170,  2171,  2172,  2173,
+    2174,  2175,  2176,  2177,  2178,  2190,  2198,  2202,  2203,  2206,
+    2207,  2208,  2209,  2210,  2211,  2214,  2216,  2217,  2220,  2221,
+    2224,  2228,  2233
 };
 #endif
 
@@ -1133,35 +1135,36 @@
   "\":vtable\"", "\":lex\"", "\":multi\"", "\":postcomp\"",
   "\":immediate\"", "\":subid\"", "\":instanceof\"", "\":nsentry\"",
   "\":unique_reg\"", "\":named\"", "\":slurpy\"", "\":flat\"",
-  "\":optional\"", "\":opt_flag\"", "\":invocant\"", "\".macro\"",
-  "\".endm\"", "\".macro_local\"", "\".macro_label\"", "\".macro_const\"",
-  "\"macro-label\"", "\"macro-local\"", "\"macro-identifier\"",
-  "\"macro-id-argument\"", "\"macro-argument\"", "\"macro-constant\"",
-  "\"<pasm-input>\"", "\"<pir-input>\"", "\".pcc_sub\"", "\"parrot-op\"",
-  "'('", "')'", "','", "'='", "'['", "']'", "';'", "'{'", "'}'", "'.'",
-  "'-'", "'!'", "'~'", "'+'", "'/'", "'*'", "'%'", "'|'", "'&'", "\"**\"",
-  "$accept", "TOP", "pir_contents", "opt_nl", "pir_chunks", "pir_chunk",
-  "macro_definition", "macro_const", "macro", "macro_header",
-  "macro_parameters", "macro_params", "macro_param", "macro_body",
-  "macro_statements", "macro_statement", "macro_instr", "macro_label_decl",
-  "macro_local_decl", "loadlib", "location_directive", "hll_specifier",
-  "hll_mapping", "namespace_decl", "opt_namespace", "namespace",
-  "namespace_slice", "sub_def", "sub_end", "sub_head", "sub_id",
-  "sub_flags", "sub_flag", "multi_type_list", "opt_multi_types",
-  "multi_types", "multi_type", "parameter_list", "parameters", "parameter",
-  "param", "param_flags", "param_flag", "invocant_param",
-  "unique_reg_flag", "instructions", "instruction", "statement",
-  "annotation", "expansion_stat", "macro_expansion", "opt_macro_args",
-  "macro_args", "macro_arg_list", "macro_arg", "braced_arg",
-  "braced_contents", "braced_item", "empty_stat", "location_stat",
-  "error_stat", "null_stat", "getresults_stat", "parrot_stat",
-  "parrot_instruction", "parrot_op", "opt_op_args", "op_args",
-  "parrot_op_args", "keylist_assignment", "op_arg", "op_arg_expr",
-  "keyaccess", "keylist", "keys", "parrot_op_assign", "assignment_stat",
-  "rhs_ident", "assignment", "binary_expr", "conditional_stat",
-  "conditional_instr", "condition", "int_or_num", "if_unless", "then",
-  "goto_stat", "local_decl", "local_id_list", "local_id", "has_unique_reg",
-  "lex_decl", "invocation_stat", "invocation", "long_invocation_stat",
+  "\":optional\"", "\":opt_flag\"", "\":invocant\"", "\":lookahead\"",
+  "\".macro\"", "\".endm\"", "\".macro_local\"", "\".macro_label\"",
+  "\".macro_const\"", "\"macro-label\"", "\"macro-local\"",
+  "\"macro-identifier\"", "\"macro-id-argument\"", "\"macro-argument\"",
+  "\"macro-constant\"", "\"<pasm-input>\"", "\"<pir-input>\"",
+  "\".pcc_sub\"", "\"parrot-op\"", "'('", "')'", "','", "'='", "'['",
+  "']'", "';'", "'{'", "'}'", "'.'", "'-'", "'!'", "'~'", "'+'", "'/'",
+  "'*'", "'%'", "'|'", "'&'", "\"**\"", "$accept", "TOP", "pir_contents",
+  "opt_nl", "pir_chunks", "pir_chunk", "macro_definition", "macro_const",
+  "macro", "macro_header", "macro_parameters", "macro_params",
+  "macro_param", "macro_body", "macro_statements", "macro_statement",
+  "macro_instr", "macro_label_decl", "macro_local_decl", "loadlib",
+  "location_directive", "hll_specifier", "hll_mapping", "namespace_decl",
+  "opt_namespace", "namespace", "namespace_slice", "sub_def", "sub_end",
+  "sub_head", "sub_id", "sub_flags", "sub_flag", "multi_type_list",
+  "opt_multi_types", "multi_types", "multi_type", "parameter_list",
+  "parameters", "parameter", "param", "param_flags", "param_flag",
+  "lookahead_flag", "invocant_flag", "unique_reg_flag", "instructions",
+  "instruction", "statement", "annotation", "expansion_stat",
+  "macro_expansion", "opt_macro_args", "macro_args", "macro_arg_list",
+  "macro_arg", "braced_arg", "braced_contents", "braced_item",
+  "empty_stat", "location_stat", "error_stat", "null_stat",
+  "getresults_stat", "parrot_stat", "parrot_instruction", "parrot_op",
+  "opt_op_args", "op_args", "parrot_op_args", "keylist_assignment",
+  "op_arg", "op_arg_expr", "keyaccess", "keylist", "keys",
+  "parrot_op_assign", "assignment_stat", "rhs_ident", "assignment",
+  "binary_expr", "conditional_stat", "conditional_instr", "condition",
+  "int_or_num", "if_unless", "then", "goto_stat", "local_decl",
+  "local_id_list", "local_id", "has_unique_reg", "lex_decl",
+  "invocation_stat", "invocation", "long_invocation_stat",
   "opt_long_arguments", "long_arguments", "long_argument",
   "long_invocation", "opt_ret_cont", "opt_long_results", "long_results",
   "long_result", "short_invocation_stat", "short_invocation",
@@ -1200,59 +1203,59 @@
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,    40,
-      41,    44,    61,    91,    93,    59,   123,   125,    46,    45,
-      33,   126,    43,    47,    42,    37,   124,    38,   374
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+      40,    41,    44,    61,    91,    93,    59,   123,   125,    46,
+      45,    33,   126,    43,    47,    42,    37,   124,    38,   375
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   139,   140,   140,   141,   142,   142,   143,   143,   144,
-     144,   144,   144,   144,   144,   144,   144,   144,   145,   145,
-     146,   147,   148,   149,   149,   150,   150,   151,   152,   152,
-     153,   153,   154,   155,   155,   156,   157,   158,   159,   159,
-     160,   161,   162,   163,   163,   164,   164,   165,   166,   167,
-     168,   169,   169,   170,   170,   171,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   171,   172,
-     173,   173,   174,   174,   175,   175,   175,   176,   177,   177,
-     178,   179,   180,   180,   181,   181,   181,   182,   183,   184,
-     184,   185,   185,   186,   186,   186,   186,   186,   186,   186,
-     186,   186,   186,   186,   186,   186,   186,   186,   186,   187,
-     188,   189,   190,   190,   191,   191,   192,   192,   193,   193,
-     193,   193,   194,   195,   195,   196,   196,   196,   196,   197,
-     198,   199,   200,   201,   202,   203,   203,   204,   205,   205,
-     206,   206,   207,   207,   208,   209,   209,   210,   210,   210,
-     210,   211,   212,   213,   213,   214,   214,   214,   215,   216,
-     216,   217,   217,   217,   217,   217,   217,   217,   217,   217,
-     217,   217,   217,   217,   217,   217,   217,   217,   217,   217,
-     217,   218,   218,   218,   218,   218,   218,   218,   218,   219,
-     220,   220,   220,   220,   220,   220,   220,   220,   220,   220,
-     220,   220,   220,   220,   220,   220,   220,   220,   220,   220,
-     220,   220,   220,   220,   221,   221,   221,   221,   221,   221,
-     221,   221,   221,   221,   221,   221,   222,   222,   223,   223,
-     224,   224,   225,   226,   227,   227,   228,   229,   229,   230,
-     231,   232,   232,   233,   234,   234,   235,   235,   236,   237,
-     237,   237,   238,   238,   239,   239,   240,   240,   241,   241,
-     242,   243,   243,   243,   244,   244,   245,   246,   247,   247,
-     248,   248,   248,   248,   249,   249,   250,   251,   251,   252,
-     252,   253,   253,   254,   254,   255,   255,   255,   255,   256,
-     257,   257,   257,   257,   258,   258,   259,   260,   261,   261,
-     262,   262,   263,   263,   264,   265,   266,   267,   268,   269,
-     269,   270,   270,   271,   272,   272,   273,   273,   274,   275,
-     275,   276,   276,   277,   277,   278,   279,   280,   281,   281,
-     282,   283,   283,   284,   285,   285,   285,   285,   286,   287,
-     287,   288,   288,   289,   289,   289,   290,   290,   291,   291,
-     291,   291,   291,   291,   292,   292,   292,   292,   293,   294,
-     294,   295,   295,   295,   295,   296,   296,   297,   297,   297,
-     297,   297,   297,   297,   297,   298,   298,   298,   299,   299,
-     299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
-     299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
-     299,   300,   300,   300,   300,   300,   300,   300,   300,   300,
-     300,   300,   300,   301,   302,   303,   303,   304,   304,   304,
-     304,   304,   304,   305,   305,   305,   306,   306,   307,   308,
-     309
+       0,   140,   141,   141,   142,   143,   143,   144,   144,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   146,   146,
+     147,   148,   149,   150,   150,   151,   151,   152,   153,   153,
+     154,   154,   155,   156,   156,   157,   158,   159,   160,   160,
+     161,   162,   163,   164,   164,   165,   165,   166,   167,   168,
+     169,   170,   170,   171,   171,   172,   172,   172,   172,   172,
+     172,   172,   172,   172,   172,   172,   172,   172,   172,   173,
+     174,   174,   175,   175,   176,   176,   176,   177,   178,   178,
+     179,   180,   181,   181,   182,   182,   182,   182,   183,   184,
+     185,   186,   186,   187,   187,   188,   188,   188,   188,   188,
+     188,   188,   188,   188,   188,   188,   188,   188,   188,   188,
+     188,   189,   190,   191,   192,   192,   193,   193,   194,   194,
+     195,   195,   195,   195,   196,   197,   197,   198,   198,   198,
+     198,   199,   200,   201,   202,   203,   204,   205,   205,   206,
+     207,   207,   208,   208,   209,   209,   210,   211,   211,   212,
+     212,   212,   212,   213,   214,   215,   215,   216,   216,   216,
+     217,   218,   218,   219,   219,   219,   219,   219,   219,   219,
+     219,   219,   219,   219,   219,   219,   219,   219,   219,   219,
+     219,   219,   219,   220,   220,   220,   220,   220,   220,   220,
+     220,   221,   222,   222,   222,   222,   222,   222,   222,   222,
+     222,   222,   222,   222,   222,   222,   222,   222,   222,   222,
+     222,   222,   222,   222,   222,   222,   223,   223,   223,   223,
+     223,   223,   223,   223,   223,   223,   223,   223,   224,   224,
+     225,   225,   226,   226,   227,   228,   229,   229,   230,   231,
+     231,   232,   233,   234,   234,   235,   236,   236,   237,   237,
+     238,   239,   239,   239,   240,   240,   241,   241,   242,   242,
+     243,   243,   244,   245,   245,   245,   246,   246,   247,   248,
+     249,   249,   250,   250,   250,   250,   251,   251,   252,   253,
+     253,   254,   254,   255,   255,   256,   256,   257,   257,   257,
+     257,   258,   259,   259,   259,   259,   260,   260,   261,   262,
+     263,   263,   264,   264,   265,   265,   266,   267,   268,   269,
+     270,   271,   271,   272,   272,   273,   274,   274,   275,   275,
+     276,   277,   277,   278,   278,   279,   279,   280,   281,   282,
+     283,   283,   284,   285,   285,   286,   287,   287,   287,   287,
+     288,   289,   289,   290,   290,   291,   291,   291,   292,   292,
+     293,   293,   293,   293,   293,   293,   294,   294,   294,   294,
+     295,   296,   296,   297,   297,   297,   297,   298,   298,   299,
+     299,   299,   299,   299,   299,   299,   299,   300,   300,   300,
+     301,   301,   301,   301,   301,   301,   301,   301,   301,   301,
+     301,   301,   301,   301,   301,   301,   301,   301,   301,   301,
+     301,   301,   301,   302,   302,   302,   302,   302,   302,   302,
+     302,   302,   302,   302,   302,   303,   304,   305,   305,   306,
+     306,   306,   306,   306,   306,   307,   307,   307,   308,   308,
+     309,   310,   311
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1266,42 +1269,42 @@
        2,     1,     1,     0,     2,     1,     1,     1,     1,     1,
        1,     1,     2,     4,     2,     2,     2,     2,     2,     3,
        0,     1,     1,     3,     1,     1,     1,     1,     0,     2,
-       4,     2,     0,     2,     1,     1,     1,     4,     1,     0,
-       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     5,
-       1,     3,     0,     3,     0,     1,     1,     3,     1,     1,
-       2,     1,     3,     0,     2,     1,     1,     1,     2,     1,
-       2,     2,     3,     3,     2,     2,     1,     1,     1,     1,
-       0,     1,     1,     3,     3,     1,     1,     1,     1,     1,
-       1,     2,     3,     1,     3,     6,     4,     6,     2,     1,
-       1,     3,     3,     3,     3,     3,     3,     4,     4,     4,
-       3,     3,     3,     3,     3,     3,     3,     4,     5,     4,
-       4,     3,     3,     3,     3,     3,     3,     3,     3,     2,
-       5,     5,     5,     5,     5,     5,     5,     5,     5,     4,
-       5,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     1,     1,     1,     1,
-       1,     1,     3,     4,     1,     3,     2,     0,     1,     5,
-       1,     1,     1,     8,     0,     1,     1,     2,     3,     3,
-       2,     5,     0,     2,     0,     1,     1,     2,     3,     1,
-       2,     3,     3,     1,     1,     1,     4,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     3,     0,     1,     1,
-       3,     2,     3,     0,     2,     1,     1,     1,     2,     1,
-       1,     1,     1,     1,     3,     3,     3,     3,     0,     1,
-       1,     3,     1,     1,     3,     2,     1,     5,     5,     0,
-       1,     1,     2,     3,     0,     1,     1,     2,     3,     0,
-       2,     1,     2,     0,     1,     3,     2,     2,     1,     1,
-       2,     1,     1,     2,     4,     4,     4,     4,     4,     1,
+       4,     2,     0,     2,     1,     1,     1,     1,     3,     4,
+       1,     0,     2,     2,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     5,     1,     3,     0,     3,     0,     1,     1,     3,
+       1,     1,     2,     1,     3,     0,     2,     1,     1,     1,
+       2,     1,     2,     2,     3,     3,     2,     2,     1,     1,
+       1,     1,     0,     1,     1,     3,     3,     1,     1,     1,
+       1,     1,     1,     2,     3,     1,     3,     6,     4,     6,
+       2,     1,     1,     3,     3,     3,     3,     3,     3,     4,
+       4,     4,     3,     3,     3,     3,     3,     3,     3,     4,
+       5,     4,     4,     3,     3,     3,     3,     3,     3,     3,
+       3,     2,     5,     5,     5,     5,     5,     5,     5,     5,
+       5,     4,     5,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     1,     1,
+       1,     1,     1,     1,     3,     4,     1,     3,     2,     0,
+       1,     5,     1,     1,     1,     8,     0,     1,     1,     2,
+       3,     3,     2,     5,     0,     2,     0,     1,     1,     2,
+       3,     1,     2,     3,     3,     1,     1,     1,     4,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     0,
+       1,     1,     3,     2,     3,     0,     2,     1,     1,     1,
+       2,     1,     1,     1,     1,     1,     3,     3,     3,     3,
+       0,     1,     1,     3,     1,     1,     3,     2,     1,     5,
+       5,     0,     1,     1,     2,     3,     0,     1,     1,     2,
+       3,     0,     2,     1,     2,     0,     1,     3,     2,     2,
+       1,     1,     2,     1,     1,     2,     4,     4,     4,     4,
+       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     1,     1,     2,     1,     2,     1,
-       2,     2,     1,     2,     2,     1,     1,     1,     3,     1,
-       3
+       1,     1,     1,     1,     1,     2,     1,     1,     2,     1,
+       2,     1,     2,     2,     1,     2,     2,     1,     1,     1,
+       3,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1309,73 +1312,74 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     5,     5,     0,     6,   414,     3,     0,     2,     0,
-       1,     0,     0,     0,     0,     0,   137,     0,     0,   112,
-     429,     0,    18,    19,     0,     0,     0,   422,   140,   419,
-     413,   415,   417,     0,    53,   425,     0,     0,     0,     0,
+       0,     5,     5,     0,     6,   416,     3,     0,     2,     0,
+       1,     0,     0,     0,     0,     0,   139,     0,     0,   114,
+     431,     0,    18,    19,     0,     0,     0,   424,   142,   421,
+     415,   417,   419,     0,    53,   427,     0,     0,     0,     0,
        0,     0,     5,     7,    16,    14,    15,    12,    13,    11,
-       9,    53,    17,    10,     0,    38,    39,    43,   129,   426,
-     423,   427,   365,   370,   371,   373,   372,   367,   368,   374,
-     369,    22,   366,     0,   114,     0,   421,    23,   420,   418,
-     346,   347,   343,   344,   361,   362,   364,   363,     0,     0,
-     141,   142,   145,   150,   146,     0,   147,   345,   149,   148,
-     416,   424,     0,   131,    40,     0,    37,    52,    50,    51,
-       0,     0,     0,   327,     0,     4,     0,     0,    47,     0,
-      44,    45,    20,   112,   118,   119,   123,     0,   115,   116,
-     121,   111,     0,    24,    25,    27,   361,     0,   153,   342,
-     341,   358,   359,   360,   430,     0,   151,   428,    56,    57,
-      58,    55,   323,     0,   323,    59,     0,    60,    61,     0,
-       0,     0,    54,     0,     0,     0,     0,     8,    78,   275,
-       0,   274,    42,     0,   120,     0,   113,     0,     0,     0,
-     152,     0,   143,     0,    64,   324,     0,    65,    70,    62,
-      66,    67,    68,    41,     0,     0,     0,    89,    77,   239,
-      46,   125,   112,   127,   126,   122,   124,   117,    28,    26,
-     154,     0,     0,    75,     0,    71,    72,    76,    74,   334,
-     335,   336,   337,     0,     0,    79,   128,     0,     0,     0,
-      29,    30,     0,    33,    34,   325,    63,    69,     0,    49,
+       9,    53,    17,    10,     0,    38,    39,    43,   131,   428,
+     425,   429,   367,   372,   373,   375,   374,   369,   370,   376,
+     371,    22,   368,     0,   116,     0,   423,    23,   422,   420,
+     348,   349,   345,   346,   363,   364,   366,   365,     0,     0,
+     143,   144,   147,   152,   148,     0,   149,   347,   151,   150,
+     418,   426,     0,   133,    40,     0,    37,    52,    50,    51,
+       0,     0,     0,   329,     0,     4,     0,     0,    47,     0,
+      44,    45,    20,   114,   120,   121,   125,     0,   117,   118,
+     123,   113,     0,    24,    25,    27,   363,     0,   155,   344,
+     343,   360,   361,   362,   432,     0,   153,   430,    56,    57,
+      58,    55,   325,     0,   325,    59,     0,    60,    61,     0,
+       0,     0,    54,     0,     0,     0,     0,     8,    78,   277,
+       0,   276,    42,     0,   122,     0,   115,     0,     0,     0,
+     154,     0,   145,     0,    64,   326,     0,    65,    70,    62,
+      66,    67,    68,    41,     0,     0,     0,    91,    77,   241,
+      46,   127,   114,   129,   128,   124,   126,   119,    28,    26,
+     156,     0,     0,    75,     0,    71,    72,    76,    74,   336,
+     337,   338,   339,     0,     0,    79,   130,     0,     0,     0,
+      29,    30,     0,    33,    34,   327,    63,    69,     0,    49,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   137,   367,   368,   374,   369,   269,   361,   277,
-       0,    48,    90,    92,   107,   106,   110,   104,   105,   108,
-     103,   102,    93,     0,   140,   136,   101,     0,    94,     0,
-       0,    95,    96,    97,   100,   240,   241,   242,     0,   263,
-     265,   264,     0,   268,     0,    99,   289,   290,   292,   291,
-     293,    98,     0,   328,   329,     0,   360,   366,   354,   355,
-     356,   357,    82,     0,     0,    35,    21,    31,    32,    73,
-       0,   333,     0,   330,   331,   332,   298,     0,     0,   309,
-     314,   244,     0,     0,     0,    91,     0,     0,     0,     0,
-       0,   278,   279,   283,   130,   134,   135,   138,   139,   146,
-     158,   189,   365,   370,   371,   373,   372,   367,   368,   374,
-     369,   346,   343,   344,     0,     0,     0,   359,   260,   267,
-       0,     0,   326,   412,   410,   411,     0,     0,   401,   402,
-     403,   404,   406,   407,   405,   408,   409,     0,     0,     0,
-       0,    81,    36,     0,   234,   237,     0,   346,     0,   299,
-     300,   303,   302,   319,   306,   294,   296,     0,     0,   310,
-     311,     0,     0,   315,   316,     0,     0,   245,   246,   133,
-     295,     0,   132,   232,     0,     0,   276,     0,   281,     0,
-     230,   231,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   139,   369,   370,   376,   371,   271,   363,   279,
+       0,    48,    92,    94,   109,   108,   112,   106,   107,   110,
+     105,   104,    95,     0,   142,   138,   103,     0,    96,     0,
+       0,    97,    98,    99,   102,   242,   243,   244,     0,   265,
+     267,   266,     0,   270,     0,   101,   291,   292,   294,   293,
+     295,   100,     0,   330,   331,     0,   362,   368,   356,   357,
+     358,   359,    82,     0,     0,    35,    21,    31,    32,    73,
+       0,   335,     0,   332,   333,   334,   300,     0,     0,   311,
+     316,   246,     0,     0,     0,    93,     0,     0,     0,     0,
+       0,   280,   281,   285,   132,   136,   137,   140,   141,   148,
+     160,   191,   367,   372,   373,   375,   374,   369,   370,   376,
+     371,   348,   345,   346,     0,     0,     0,   361,   262,   269,
+       0,     0,   328,   414,   412,   413,     0,     0,   403,   404,
+     405,   406,   408,   409,   407,   410,   411,     0,     0,     0,
+       0,    81,    36,     0,   236,   239,     0,   348,     0,   301,
+     302,   305,   304,   321,   308,   296,   298,     0,     0,   312,
+     313,     0,     0,   317,   318,     0,     0,   247,   248,   135,
+     297,     0,   134,   234,     0,     0,   278,     0,   283,     0,
+     232,   233,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   348,   349,   350,   351,   353,   352,     0,     0,
-       0,     0,     0,     0,     0,   273,   271,   272,     0,   270,
-     261,   171,   172,   175,   173,   174,   176,   365,   269,   161,
-     162,   361,   375,   376,   377,     0,   165,   166,   262,   163,
-       0,   359,   366,     0,   170,     0,    80,    88,   323,   287,
-     285,   286,     0,    83,    85,    86,    84,   233,     0,   238,
-     236,     0,     0,   297,     0,   305,     0,     0,   312,     0,
-       0,   317,     0,     0,     0,     0,     0,   247,     0,   180,
-     282,   280,   284,   144,   201,   203,   204,   205,   206,   207,
-     208,     0,     0,     0,     0,     0,     0,     0,     0,   369,
-     211,     0,   212,   209,   210,   222,   226,   227,   223,   217,
-     224,   218,   219,   215,   225,   220,   221,   216,   213,   199,
-     214,   202,   266,   400,   395,   397,   396,   399,   398,   388,
-     389,   390,   393,   391,   392,   394,   387,   379,   385,   378,
-     380,   381,   382,   383,   384,   386,     0,     0,     0,   169,
-     156,   167,     0,   168,   177,   179,   288,     0,   235,   338,
-     339,   340,   304,   301,   323,   321,   320,   313,   308,   318,
-     307,   248,     0,   252,   268,   250,   254,   109,   190,   191,
-     192,   193,   194,   195,   196,   198,   197,   200,   184,   183,
-     185,   187,   181,   188,   186,   182,     0,     0,   178,     0,
-     322,     0,     0,   249,     0,   259,     0,   255,   256,   155,
-     157,    87,     0,   253,     0,     0,   257,   251,   258,   243
+       0,     0,   350,   351,   352,   353,   355,   354,     0,     0,
+       0,     0,     0,     0,     0,   275,   273,   274,     0,   272,
+     263,   173,   174,   177,   175,   176,   178,   367,   271,   163,
+     164,   363,   377,   378,   379,     0,   167,   168,   264,   165,
+       0,   361,   368,     0,   172,     0,    80,    90,   325,   289,
+     287,   288,     0,     0,    83,    86,    85,    87,    84,   235,
+       0,   240,   238,     0,     0,   299,     0,   307,     0,     0,
+     314,     0,     0,   319,     0,     0,     0,     0,     0,   249,
+       0,   182,   284,   282,   286,   146,   203,   205,   206,   207,
+     208,   209,   210,     0,     0,     0,     0,     0,     0,     0,
+       0,   371,   213,     0,   214,   211,   212,   224,   228,   229,
+     225,   219,   226,   220,   221,   217,   227,   222,   223,   218,
+     215,   201,   216,   204,   268,   402,   397,   399,   398,   401,
+     400,   390,   391,   392,   395,   393,   394,   396,   389,   381,
+     387,   380,   382,   383,   384,   385,   386,   388,     0,     0,
+       0,   171,   158,   169,     0,   170,   179,   181,   290,     0,
+       0,   237,   340,   341,   342,   306,   303,   325,   323,   322,
+     315,   310,   320,   309,   250,     0,   254,   270,   252,   256,
+     111,   192,   193,   194,   195,   196,   197,   198,   200,   199,
+     202,   186,   185,   187,   189,   183,   190,   188,   184,     0,
+       0,   180,     0,    88,   324,     0,     0,   251,     0,   261,
+       0,   257,   258,   157,   159,    89,     0,   255,     0,     0,
+     259,   253,   260,   245
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1385,425 +1389,425 @@
      132,   133,   134,   229,   230,   231,   232,   233,   234,    45,
       25,    47,    48,    26,   119,   120,   121,    50,   261,    51,
      108,   102,   162,   189,   214,   215,   216,   197,   198,   225,
-     312,   390,   503,   504,   505,   223,   262,   263,   264,   265,
-      27,    75,   127,   128,   129,   130,   175,   206,    59,   268,
-      52,   270,   271,   272,   273,    28,   346,    89,    90,   348,
-      91,    92,    93,    94,   137,   275,   276,   486,   277,   487,
-     278,   279,   364,   558,   280,   432,   281,   282,   393,   394,
-     510,    29,   284,   285,   286,   416,   417,   418,   526,   653,
-     656,   657,   658,   287,   288,   289,   290,   291,   292,   468,
-      95,   294,   340,   341,   342,   428,   506,   295,   296,   297,
-     298,   327,   398,   399,   400,   401,   402,   403,   299,   300,
-     408,   409,   410,   412,   413,   414,   515,   616,   184,   185,
-     301,    53,   302,   303,   323,   304,   113,   325,   609,   404,
-     139,    97,   458,   313,   140,   141,   142,   143,    72,   493,
-     596,   388,     6,     7,    30,    31,    32,    60,    33,    34,
-      35
+     312,   390,   504,   505,   506,   507,   223,   262,   263,   264,
+     265,    27,    75,   127,   128,   129,   130,   175,   206,    59,
+     268,    52,   270,   271,   272,   273,    28,   346,    89,    90,
+     348,    91,    92,    93,    94,   137,   275,   276,   486,   277,
+     487,   278,   279,   364,   560,   280,   432,   281,   282,   393,
+     394,   512,    29,   284,   285,   286,   416,   417,   418,   528,
+     657,   660,   661,   662,   287,   288,   289,   290,   291,   292,
+     468,    95,   294,   340,   341,   342,   428,   508,   295,   296,
+     297,   298,   327,   398,   399,   400,   401,   402,   403,   299,
+     300,   408,   409,   410,   412,   413,   414,   517,   619,   184,
+     185,   301,    53,   302,   303,   323,   304,   113,   325,   612,
+     404,   139,    97,   458,   313,   140,   141,   142,   143,    72,
+     493,   598,   388,     6,     7,    30,    31,    32,    60,    33,
+      34,    35
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -595
+#define YYPACT_NINF -586
 static const yytype_int16 yypact[] =
 {
-     -43,    -9,    -9,    31,  -595,  -595,  -595,    55,  -595,    73,
-    -595,    34,    39,    43,    27,   118,  -595,   226,    80,   -23,
-    -595,    91,  -595,  -595,    11,   105,   129,  -595,   554,  -595,
-      55,  -595,  -595,   118,  -595,  -595,   132,   108,   134,   150,
-     571,   162,   193,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,    49,  -595,  -595,   187,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,   121,    20,   202,  -595,   226,  -595,  -595,
-    -595,  -595,  -595,  -595,   122,  -595,  -595,  -595,   767,   209,
-     125,  -595,  -595,  -595,  -595,   128,  -595,  -595,  -595,   131,
-    -595,  -595,   633,  -595,  -595,   126,  -595,  -595,  -595,  -595,
-     226,   226,   226,  -595,    41,  -595,   387,  1041,  -595,   166,
-     127,  -595,  -595,   -23,  -595,  -595,  -595,   138,   171,  -595,
-    -595,  -595,   139,   173,  -595,  -595,  -595,    63,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,   554,  -595,  -595,  -595,  -595,
-    -595,  -595,   172,   176,   172,  -595,   178,  -595,  -595,   172,
-     172,   172,  -595,   252,   179,   180,   182,  -595,  -595,  -595,
-     264,  -595,  -595,   187,  -595,    -2,  -595,    20,   265,   226,
-    -595,   767,  -595,   261,  -595,  -595,   571,  -595,   170,  -595,
-    -595,  -595,  -595,  -595,   279,   260,   158,  -595,   329,  -595,
-    -595,  -595,   -23,  -595,  -595,  -595,  -595,  -595,   124,  -595,
-    -595,   218,   219,  -595,   220,   222,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,   532,    -4,  -595,  -595,    -4,   235,   240,
-     124,  -595,   311,  -595,  -595,  -595,  -595,  -595,   170,  -595,
-      -4,   162,   119,   230,   230,   315,   316,   317,   237,  1027,
-     309,   622,   707,   807,   824,   398,   226,  -595,    33,   459,
-     322,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,   323,   554,  -595,  -595,   324,  -595,   325,
-     841,  -595,  -595,  -595,  -595,  -595,  -595,  -595,   326,  -595,
-    -595,  -595,   230,   241,   242,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,   328,  -595,  -595,   721,   -99,   128,  -595,  -595,
-    -595,  -595,  -595,   226,   258,  -595,  -595,  -595,  -595,  -595,
-     226,  -595,   226,  -595,  -595,  -595,   858,   336,   337,   353,
-     354,   344,   342,   343,   259,  -595,   357,   358,   257,   347,
-     277,   282,  -595,  -595,  -595,  -595,  -595,  -595,  -595,   283,
-    -595,  -595,    -6,    -6,    -6,    -6,    -6,    -6,    -6,   291,
-       3,   135,   135,   135,   359,    -6,   135,    -6,  -595,  -595,
-    1011,  1027,  -595,  -595,  -595,  -595,   926,   943,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,   236,   767,   284,
-      40,  -595,  -595,   -20,  -595,   310,   292,   369,   304,   305,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,   767,   402,   353,
-    -595,   767,   403,   354,  -595,   767,   115,   344,  -595,  -595,
-    -595,   177,  -595,  -595,   767,   398,  -595,   459,    84,   767,
-    -595,  -595,   226,   226,   226,   226,   226,   226,   226,   382,
-     384,   386,   401,   407,   408,   409,   410,   345,    -6,   226,
-     226,   226,  -595,  -595,  -595,  -595,  -595,  -595,   875,   892,
-     909,   226,   226,   767,   226,  -595,  -595,  -595,   230,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,   273,   623,   637,
-     637,    33,  -595,  -595,  -595,   554,  -595,  -595,  -595,  -595,
-     637,   422,   -11,   767,  -595,   767,  -595,  -595,   172,  -595,
-    -595,  -595,   340,  -595,  -595,  -595,  -595,  -595,   226,  -595,
-    -595,  1055,   767,  -595,   858,    75,   426,   427,  -595,   428,
-     430,  -595,   431,  1041,  1027,  1041,   432,  -595,   434,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,   226,   226,   226,   226,   226,   226,   226,   226,   226,
-    -595,   226,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,   994,   960,   977,  -595,
-     364,   365,   767,  -595,  -595,  -595,  -595,   170,  -595,  -595,
-    -595,  -595,  -595,  -595,   172,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,   452,   367,  -595,  -595,    57,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,   554,   554,  -595,   370,
-    -595,   474,  1041,  -595,   459,  -595,   465,    57,  -595,   125,
-     125,  -595,  1011,  -595,   458,   460,  -595,  -595,  -595,  -595
+      99,    -7,    -7,    25,  -586,  -586,  -586,    37,  -586,    74,
+    -586,    15,    19,    44,   -79,    51,  -586,  1045,    77,    13,
+    -586,    84,  -586,  -586,    24,    92,   146,  -586,   618,  -586,
+      37,  -586,  -586,    51,  -586,  -586,   170,   161,   163,   174,
+    1035,   113,   191,  -586,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,  -586,   109,  -586,  -586,   187,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,   122,    11,   211,  -586,  1045,  -586,  -586,
+    -586,  -586,  -586,  -586,   124,  -586,  -586,  -586,   767,   219,
+     136,  -586,  -586,  -586,  -586,   135,  -586,  -586,  -586,   137,
+    -586,  -586,   693,  -586,  -586,   147,  -586,  -586,  -586,  -586,
+    1045,  1045,  1045,  -586,    26,  -586,   612,  1008,  -586,   148,
+     145,  -586,  -586,    13,  -586,  -586,  -586,   158,   159,  -586,
+    -586,  -586,   165,   166,  -586,  -586,  -586,   -21,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,   618,  -586,  -586,  -586,  -586,
+    -586,  -586,   167,   178,   167,  -586,   180,  -586,  -586,   167,
+     167,   167,  -586,   247,   171,   179,   181,  -586,  -586,  -586,
+     285,  -586,  -586,   187,  -586,   -11,  -586,    11,   286,  1045,
+    -586,   767,  -586,   281,  -586,  -586,  1035,  -586,   433,  -586,
+    -586,  -586,  -586,  -586,   280,   297,   172,  -586,   339,  -586,
+    -586,  -586,    13,  -586,  -586,  -586,  -586,  -586,   128,  -586,
+    -586,   228,   230,  -586,   231,   233,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,   273,   173,  -586,  -586,   173,   240,   250,
+     128,  -586,   322,  -586,  -586,  -586,  -586,  -586,   433,  -586,
+     173,   113,   134,   239,   239,   325,   326,   329,   245,   994,
+     320,   534,   646,   784,   808,   576,  1045,  -586,    21,   411,
+     332,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,   333,   618,  -586,  -586,   334,  -586,   336,
+     825,  -586,  -586,  -586,  -586,  -586,  -586,  -586,   337,  -586,
+    -586,  -586,   239,   244,   251,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,   340,  -586,  -586,   721,   -13,   135,  -586,  -586,
+    -586,  -586,  -586,  1045,   265,  -586,  -586,  -586,  -586,  -586,
+    1045,  -586,  1045,  -586,  -586,  -586,   842,   342,   344,   360,
+     363,   356,   352,   353,   267,  -586,   355,   357,   275,   345,
+     279,   274,  -586,  -586,  -586,  -586,  -586,  -586,  -586,   278,
+    -586,  -586,   -12,   -12,   -12,   -12,   -12,   -12,   -12,   461,
+     -10,   144,   144,   144,   358,   -12,   144,   -12,  -586,  -586,
+     978,   994,  -586,  -586,  -586,  -586,   893,   910,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,   292,   767,   282,
+     126,  -586,  -586,   -16,  -586,   307,   283,   354,   288,   291,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,   767,   384,   360,
+    -586,   767,   389,   363,  -586,   767,    97,   356,  -586,  -586,
+    -586,   229,  -586,  -586,   767,   576,  -586,   411,    65,   767,
+    -586,  -586,  1045,  1045,  1045,  1045,  1045,  1045,  1045,   380,
+     381,   383,   386,   390,   391,   392,   393,  1054,   -12,  1045,
+    1045,  1045,  -586,  -586,  -586,  -586,  -586,  -586,   695,   859,
+     876,  1045,  1045,   767,  1045,  -586,  -586,  -586,   239,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,   556,   130,   626,
+     626,    21,  -586,  -586,  -586,   618,  -586,  -586,  -586,  -586,
+     626,   404,   -15,   767,  -586,   767,  -586,  -586,   167,  -586,
+    -586,  -586,   323,   346,  -586,  -586,  -586,  -586,  -586,  -586,
+    1045,  -586,  -586,  1022,   767,  -586,   842,    32,   405,   407,
+    -586,   424,   430,  -586,   434,  1008,   994,  1008,   445,  -586,
+     446,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,  1045,  1045,  1045,  1045,  1045,  1045,  1045,
+    1045,  1045,  -586,  1045,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,   961,   927,
+     944,  -586,   324,   361,   767,  -586,  -586,  -586,  -586,   433,
+     364,  -586,  -586,  -586,  -586,  -586,  -586,   167,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,   447,   362,  -586,  -586,    39,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,   618,
+     618,  -586,   366,  -586,  -586,   473,  1008,  -586,   411,  -586,
+     462,    39,  -586,   136,   136,  -586,   978,  -586,   455,   456,
+    -586,  -586,  -586,  -586
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -595,  -595,  -595,    17,  -595,   399,     7,  -595,  -595,  -595,
-    -595,  -595,   335,  -595,  -595,   285,  -595,  -595,  -595,  -595,
-      -1,  -595,  -595,     8,  -595,  -595,   346,  -595,  -595,  -595,
-     330,   467,  -595,  -595,  -595,  -595,  -231,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -595,  -595,   270,  -595,  -595,
-    -202,  -105,  -595,  -595,   361,  -595,  -595,  -595,  -201,  -595,
-    -196,  -595,  -595,  -595,  -595,  -213,  -595,   248,  -406,  -595,
-     378,    50,  -595,   -90,  -595,  -595,  -595,  -595,  -595,  -595,
-    -595,  -595,  -595,  -595,  -595,  -251,  -595,  -594,  -595,    28,
-    -595,  -195,  -595,  -595,  -595,  -595,  -595,   123,  -595,  -595,
-    -595,  -595,  -112,  -595,  -595,  -236,  -595,  -595,    22,  -110,
-    -115,   299,  -595,  -595,  -418,  -595,   133,  -595,  -595,  -595,
-    -595,  -230,  -595,  -595,    45,  -595,  -288,    51,  -595,  -595,
-    -595,  -595,   144,  -595,  -595,   142,  -595,  -595,  -150,    59,
-    -595,  -595,  -595,  -595,  -595,  -595,     1,  -595,  -595,   -82,
-     -27,   175,  -164,  -197,  -198,  -595,   -25,   -17,  -211,  -595,
-    -409,  -595,  -595,  -595,  -595,   527,  -595,   531,  -595,  -595,
-      52
+    -586,  -586,  -586,    16,  -586,   378,     7,  -586,  -586,  -586,
+    -586,  -586,   315,  -586,  -586,   277,  -586,  -586,  -586,  -586,
+      -1,  -586,  -586,     8,  -586,  -586,   341,  -586,  -586,  -586,
+     309,   464,  -586,  -586,  -586,  -586,  -231,  -586,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -586,  -586,   246,  -586,
+    -586,  -202,  -113,  -586,  -586,   335,  -586,  -586,  -586,  -155,
+    -586,  -154,  -586,  -586,  -586,  -586,  -211,  -586,   242,  -405,
+    -586,   368,    33,  -586,   -90,  -586,  -586,  -586,  -586,  -586,
+    -586,  -586,  -586,  -586,  -586,  -586,  -301,  -586,  -585,  -586,
+      12,  -586,  -152,  -586,  -586,  -586,  -586,  -586,   100,  -586,
+    -586,  -586,  -586,  -141,  -586,  -586,  -234,  -586,  -586,    -5,
+    -143,  -115,   276,  -586,  -586,  -418,  -586,   111,  -586,  -586,
+    -586,  -586,  -230,  -586,  -586,     9,  -586,  -233,    23,  -586,
+    -586,  -586,  -586,   131,  -586,  -586,   129,  -586,  -586,  -150,
+      -3,  -586,  -586,  -586,  -586,  -586,  -586,    10,  -586,  -586,
+     -66,   -27,   160,  -223,  -168,  -217,  -586,   -25,   -17,  -210,
+    -586,  -398,  -586,  -586,  -586,  -586,   518,  -586,   516,  -586,
+    -586,    50
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -366
+#define YYTABLE_NINF -368
 static const yytype_int16 yytable[] =
 {
-      71,    96,   170,    98,   187,   146,   138,   319,    46,   531,
-     274,    99,   307,   333,   328,   507,    44,    49,   174,     9,
-    -274,   266,   267,   109,  -160,   305,     4,   269,   283,  -274,
-     314,    10,   655,   201,   308,   309,   310,   311,   274,   430,
-     307,    -6,    36,   320,    37,    38,    39,    40,   450,   266,
-     267,    12,    13,   305,    14,   269,   283,   336,    41,   115,
-     135,   343,   369,   655,    11,    12,    13,    61,    14,   240,
-     597,   598,     1,     2,    36,   496,    37,    38,    39,    40,
-      54,   602,   366,    12,    13,    61,    14,    55,   654,    56,
-      41,    15,    16,   164,   165,   166,    74,   226,   217,   210,
-     171,   508,   433,   434,   435,   436,   437,   438,   293,   202,
-     203,   204,    88,    46,   462,   431,   464,    73,    96,   516,
-      98,    44,    49,   519,   451,   205,    76,   522,    99,   523,
-      77,   123,   124,   125,   293,   470,   293,   497,   498,   499,
-      78,   500,   501,   502,   524,    17,   126,   525,   217,    18,
-      57,   488,  -275,    58,   104,    16,    88,   110,   111,    17,
-     112,  -275,   135,    18,    79,   322,    19,   103,   338,   109,
-     117,   218,    20,   614,   485,   615,   492,    17,   473,   476,
-     105,    18,   498,   499,   349,   500,   501,   180,   181,   490,
-     452,   453,   454,   455,   456,   457,   106,   551,   459,   460,
-     110,   111,   463,   112,   221,   222,   306,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,   213,   389,   190,   191,
-     192,   218,   260,    80,    81,    82,    83,   530,   114,   343,
-     227,   228,   171,   118,   306,   122,   664,   131,   572,   337,
-     659,   660,   321,   324,   144,  -275,   145,    96,   163,    98,
-     260,    88,   173,   365,  -274,   367,   293,    99,   176,   178,
-     559,   563,   567,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,   293,   477,    63,    64,    65,    66,    67,    68,
-      69,    70,   478,    81,   479,   480,   481,    85,    86,    87,
-     172,   183,   177,    88,   179,   186,   391,   188,   193,   199,
-     208,   194,   195,   395,   196,   396,   494,   211,  -159,   220,
-    -137,  -137,  -137,  -137,  -137,  -137,  -137,  -137,  -137,  -137,
-    -137,  -137,  -137,  -137,  -137,  -137,  -137,   219,   439,   440,
-     441,   442,   443,   444,   445,   446,   447,   224,   235,   236,
-     237,   448,   529,   238,   315,   316,   318,   533,   606,   326,
-     329,   330,   331,   469,   171,   334,   259,   344,   345,   350,
-     351,   368,   491,   372,   371,   482,   483,   484,   392,   370,
-     306,   405,   406,   407,   415,   411,   649,   419,   420,   424,
-     421,   570,    62,    63,    64,    65,    66,    67,    68,    69,
-     549,   599,   422,   423,   528,   601,  -137,   426,   639,   642,
-     645,   425,   603,   427,   461,   429,   495,   509,   622,   624,
-     625,   604,   449,   605,   511,   534,   535,   536,   537,   538,
-     539,   540,   168,   512,   513,   517,   514,   541,   520,   542,
-     550,   543,   552,   553,   554,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,   568,   569,   544,   571,   136,    85,
-      86,    87,   545,   546,   547,   548,   343,  -164,    96,   607,
-      98,   617,   618,   619,   650,   620,   621,   626,    99,   627,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   610,   646,   647,   651,   652,   662,
-     661,   395,   665,   668,   611,   669,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,   339,   171,   171,   171,   136,
-      85,    86,    87,   167,   209,   317,   212,   217,   116,   200,
-     648,   335,   347,   182,   628,   629,   630,   631,   632,   633,
-     634,   635,   636,    36,   637,   600,   608,   663,   207,   239,
-     527,    11,    12,    13,   240,   666,   623,   332,   241,   242,
-     243,   244,   667,   518,   245,   521,   246,   100,   247,   613,
-     248,   532,   489,   612,   101,   249,   250,    58,   251,   252,
-      63,    64,    65,    66,   253,   254,   255,   256,   257,     0,
-       0,     0,   258,    85,    86,    87,     0,     0,     0,     0,
-     218,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      80,    81,    82,    83,    84,    85,    86,    87,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,   107,     0,    96,
-      96,    98,    98,    36,     0,     0,     0,     0,     0,    99,
-      99,    11,    12,    13,   240,   171,     0,     0,   241,   242,
-     243,   244,     0,    19,   245,   469,   246,     0,   247,     0,
-     248,   259,     0,     0,     0,   249,   250,    58,  -346,   252,
-      63,    64,    65,    66,   253,   254,   255,   256,   257,   147,
-       0,     0,   258,    85,    86,    87,     0,    88,   573,   574,
-     575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
-     585,   586,   573,   574,   575,   576,   577,   578,   579,   580,
-     581,   582,   583,   584,   585,   586,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   148,   149,   150,   151,
+      71,    96,   170,    98,   187,   146,   305,   319,    46,   533,
+     174,    99,   274,   307,   328,   333,    44,    49,     9,   509,
+    -162,   266,   138,   109,   201,    10,    -6,    36,     4,    37,
+      38,    39,    40,   430,   305,   450,    12,    13,   336,    14,
+     274,   307,   343,    41,   659,    57,    11,    12,    13,   266,
+      14,   240,   433,   434,   435,   436,   437,   438,   115,   314,
+     135,    54,   369,   366,   462,    61,   464,    55,   267,   269,
+     658,   283,   320,    15,    16,    36,   659,    37,    38,    39,
+      40,   599,   600,    61,    12,    13,    58,    14,    16,   226,
+      56,    41,   604,   164,   165,   166,   267,   269,   217,   283,
+     171,   202,   203,   204,   180,   181,   510,  -276,   293,    88,
+     431,   525,   451,    46,    73,   210,  -276,   205,    96,    76,
+      98,    44,    49,   123,   124,   125,   526,    78,    99,   527,
+     617,    17,   618,    74,   293,    18,   293,   470,   126,   459,
+     460,  -277,    17,   463,    77,    88,    18,   553,   217,    19,
+    -277,   110,   111,   488,   112,    20,   190,   191,   192,   473,
+     476,   496,   135,   498,   499,  -348,   500,   501,   338,   109,
+     490,   218,   110,   111,   518,   112,   485,   492,   521,    17,
+     322,    79,   524,    18,   349,   575,   576,   577,   578,   579,
+     580,   581,   582,   583,   584,   585,   586,   587,   588,   452,
+     453,   454,   455,   456,   457,   103,   306,   104,   532,   105,
+     343,   308,   309,   310,   311,     1,     2,   389,   221,   222,
+     106,   218,   260,   497,   498,   499,   114,   500,   501,   502,
+     503,   117,   171,   118,   306,   227,   228,   122,   574,   337,
+     668,   561,   565,   569,   663,   664,   131,    96,  -277,    98,
+     260,   321,   324,   365,   144,   367,   293,    99,   145,    88,
+     589,  -276,   590,   591,   592,   593,   594,   595,   596,   597,
+     163,   173,   293,   172,    36,    80,    81,    82,    83,   176,
+     239,   177,    11,    12,    13,   240,   178,   183,   179,   241,
+     242,   243,   244,   193,   194,   245,   391,   246,   186,   247,
+     188,   248,   195,   395,   196,   396,   249,   250,    58,   251,
+     252,    63,    64,    65,    66,   253,   254,   255,   256,   257,
+     199,   208,   494,   258,    85,    86,    87,   211,   219,   477,
+      63,    64,    65,    66,    67,    68,    69,    70,   478,    81,
+     479,   480,   481,    85,    86,    87,   220,   224,   608,   235,
+     315,   236,   237,   469,   171,   238,   316,   318,   531,   326,
+     329,   330,   491,   535,   331,   259,   334,   344,   345,   350,
+     306,   351,   368,   370,   371,   372,   392,   405,   652,   406,
+     407,   642,   645,   648,   411,    19,   415,   419,   420,   421,
+     422,   601,   423,   259,   530,   603,   427,   572,   424,   425,
+     426,   429,   605,   461,   511,   495,   513,   519,   514,   515,
+     625,   627,   628,   516,   522,   536,   537,   538,   539,   540,
+     541,   542,   482,   483,   484,   543,   544,   606,   545,   607,
+     552,   546,   554,   555,   556,   547,   548,   549,   550,  -166,
+     620,   343,   621,   609,   570,   571,   649,   573,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,   339,    96,   622,
+      98,   136,    85,    86,    87,   623,   610,   654,    99,   624,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,   213,
+     629,   630,   655,   650,   656,   653,   613,   665,   666,   669,
+     672,   673,   167,   395,   209,   212,   614,   335,   439,   440,
+     441,   442,   443,   444,   445,   446,   447,   317,   171,   171,
+     171,   448,   207,   182,   200,   116,   347,   529,   602,   217,
+     670,   626,   611,   671,   332,   616,   631,   632,   633,   634,
+     635,   636,   637,   638,   639,    36,   640,   615,   651,   534,
+     520,   667,   523,    11,    12,    13,   240,   489,   100,   101,
+     241,   242,   243,   244,     0,     0,   245,    88,   246,     0,
+     247,     0,   248,     0,     0,     0,     0,   249,   250,    58,
+       0,   252,    63,    64,    65,    66,   253,   254,   255,   256,
+     257,     0,     0,   449,   258,    85,    86,    87,     0,     0,
+       0,  -161,   218,  -139,  -139,  -139,  -139,  -139,  -139,  -139,
+    -139,  -139,  -139,  -139,  -139,  -139,  -139,  -139,  -139,  -139,
+       0,     0,     0,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    96,    96,    98,    98,   136,    85,    86,    87,
+       0,     0,    99,    99,     0,     0,     0,     0,     0,   171,
+       0,     0,     0,     0,     0,     0,    19,   168,     0,   469,
+       0,     0,     0,     0,   259,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    80,    81,    82,    83,    84,    85,
+      86,    87,     0,     0,     0,     0,     0,     0,     0,     0,
+    -139,   575,   576,   577,   578,   579,   580,   581,   582,   583,
+     584,   585,   586,   587,   588,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,     0,
+       0,     0,     0,     0,     0,  -367,  -367,  -367,  -367,  -367,
+    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,   147,
+       0,     0,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,   557,    88,   558,   559,   136,    85,    86,    87,     0,
+       0,     0,     0,     0,     0,     0,   589,     0,   590,   591,
+     592,   593,   594,   595,   596,   597,  -367,     0,     0,  -367,
+       0,     0,     0,     0,     0,  -367,   148,   149,   150,   151,
      152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-       0,     0,     0,    19,     0,     0,     0,     0,     0,     0,
-       0,   259,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   587,     0,   588,   589,   590,   591,   592,   593,
-     594,   595,     0,     0,     0,     0,   587,     0,   588,   589,
-     590,   591,   592,   593,   594,   595,  -365,  -365,  -365,  -365,
-    -365,  -365,  -365,  -365,  -365,  -365,  -365,  -365,  -365,  -365,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
      383,   384,   385,   386,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    80,    81,    82,    83,   136,    85,    86,
-      87,     0,     0,     0,     0,     0,  -365,     0,     0,  -365,
-       0,     0,     0,     0,     0,  -365,     0,     0,     0,     0,
-       0,     0,     0,   387,  -228,  -228,  -228,  -228,  -228,  -228,
-    -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,
-    -228,  -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,
-    -229,  -229,  -229,  -229,  -229,  -229,  -229,  -229,   352,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,    81,   362,
-     363,   136,    85,    86,    87,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,   397,    81,    82,    83,   136,    85,
-      86,    87,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,   555,     0,   556,   557,   136,    85,    86,    87,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,   560,     0,
-     561,   562,   136,    85,    86,    87,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,   564,     0,   565,   566,   136,
+      87,  -230,  -230,  -230,  -230,  -230,  -230,  -230,  -230,  -230,
+    -230,  -230,  -230,  -230,  -230,  -230,  -230,  -230,     0,     0,
+       0,     0,     0,     0,   387,  -231,  -231,  -231,  -231,  -231,
+    -231,  -231,  -231,  -231,  -231,  -231,  -231,  -231,  -231,  -231,
+    -231,  -231,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,    81,   362,   363,   136,    85,    86,    87,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,   397,    81,
+      82,    83,   136,    85,    86,    87,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,   562,     0,   563,   564,   136,
       85,    86,    87,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,     0,     0,   471,   472,   136,    85,    86,    87,
+      69,    70,   566,     0,   567,   568,   136,    85,    86,    87,
       62,    63,    64,    65,    66,    67,    68,    69,    70,     0,
-       0,   474,   475,   136,    85,    86,    87,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,     0,     0,   640,   641,
+       0,   471,   472,   136,    85,    86,    87,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,     0,     0,   474,   475,
      136,    85,    86,    87,    62,    63,    64,    65,    66,    67,
       68,    69,    70,     0,     0,   643,   644,   136,    85,    86,
       87,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-     638,     0,     0,     0,   136,    85,    86,    87,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,   465,     0,     0,
-       0,   466,     0,   467,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,   257,     0,     0,     0,   169,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,     0,     0,     0,
-       0,   169,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    80,    81,    82,    83
+       0,     0,   646,   647,   136,    85,    86,    87,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,   641,     0,     0,
+       0,   136,    85,    86,    87,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,   465,     0,     0,     0,   466,     0,
+     467,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+     257,     0,     0,     0,   169,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,     0,     0,     0,     0,   169,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    80,    81,
+      82,    83,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,   107,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    62,    63,    64,    65,    66,    67,    68,    69,   551
 };
 
 static const yytype_int16 yycheck[] =
 {
-      17,    28,   117,    28,   154,    95,    88,   238,     9,   427,
-     223,    28,   223,   249,   244,    35,     9,     9,   123,     2,
-     119,   223,   223,    40,    35,   223,    35,   223,   223,   128,
-     227,     0,   626,    35,    38,    39,    40,    41,   251,    45,
-     251,     0,     1,   240,     3,     4,     5,     6,    45,   251,
-     251,    10,    11,   251,    13,   251,   251,   255,    17,    42,
-      77,   259,   292,   657,     9,    10,    11,    15,    13,    12,
-     479,   480,   115,   116,     1,    35,     3,     4,     5,     6,
-      46,   490,   280,    10,    11,    33,    13,    48,    31,    46,
-      17,    36,    37,   110,   111,   112,   119,   202,   188,   181,
-     117,   121,   353,   354,   355,   356,   357,   358,   223,   111,
-     112,   113,   123,   114,   365,   121,   367,    37,   145,   407,
-     145,   114,   114,   411,   121,   127,    35,   415,   145,    14,
-     119,   111,   112,   113,   249,   371,   251,    97,    98,    99,
-      35,   101,   102,   103,    29,   104,   126,    32,   238,   108,
-     123,   387,   119,    35,    46,    37,   123,    38,    39,   104,
-      41,   128,   179,   108,    35,    46,   111,    35,   258,   186,
-     121,   188,   117,    98,   387,   100,   387,   104,   376,   377,
-      46,   108,    98,    99,   274,   101,   102,   124,   125,   387,
-      55,    56,    57,    58,    59,    60,    46,   448,   362,   363,
-      38,    39,   366,    41,    46,    47,   223,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,   307,   159,   160,
-     161,   238,   223,    46,    47,    48,    49,   425,    35,   427,
-     106,   107,   249,    46,   251,   114,   654,    35,   468,   256,
-     646,   647,   241,   242,    35,   123,   121,   274,   122,   274,
-     251,   123,   125,   280,   123,   280,   371,   274,   120,   120,
-     458,   459,   460,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,   387,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-     124,   119,   121,   123,   121,   119,   313,   119,    46,    35,
-      35,   122,   122,   320,   122,   322,   388,    46,    35,    49,
+      17,    28,   117,    28,   154,    95,   223,   238,     9,   427,
+     123,    28,   223,   223,   244,   249,     9,     9,     2,    35,
+      35,   223,    88,    40,    35,     0,     0,     1,    35,     3,
+       4,     5,     6,    45,   251,    45,    10,    11,   255,    13,
+     251,   251,   259,    17,   629,   124,     9,    10,    11,   251,
+      13,    12,   353,   354,   355,   356,   357,   358,    42,   227,
+      77,    46,   292,   280,   365,    15,   367,    48,   223,   223,
+      31,   223,   240,    36,    37,     1,   661,     3,     4,     5,
+       6,   479,   480,    33,    10,    11,    35,    13,    37,   202,
+      46,    17,   490,   110,   111,   112,   251,   251,   188,   251,
+     117,   112,   113,   114,   125,   126,   122,   120,   223,   124,
+     122,    14,   122,   114,    37,   181,   129,   128,   145,    35,
+     145,   114,   114,   112,   113,   114,    29,    35,   145,    32,
+      98,   105,   100,   120,   249,   109,   251,   371,   127,   362,
+     363,   120,   105,   366,   120,   124,   109,   448,   238,   112,
+     129,    38,    39,   387,    41,   118,   159,   160,   161,   376,
+     377,    35,   179,    98,    99,    35,   101,   102,   258,   186,
+     387,   188,    38,    39,   407,    41,   387,   387,   411,   105,
+      46,    35,   415,   109,   274,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    55,
+      56,    57,    58,    59,    60,    35,   223,    46,   425,    46,
+     427,    38,    39,    40,    41,   116,   117,   307,    46,    47,
+      46,   238,   223,    97,    98,    99,    35,   101,   102,   103,
+     104,   122,   249,    46,   251,   107,   108,   115,   468,   256,
+     658,   458,   459,   460,   649,   650,    35,   274,   124,   274,
+     251,   241,   242,   280,    35,   280,   371,   274,   122,   124,
+     130,   124,   132,   133,   134,   135,   136,   137,   138,   139,
+     123,   126,   387,   125,     1,    46,    47,    48,    49,   121,
+       7,   122,     9,    10,    11,    12,   121,   120,   122,    16,
+      17,    18,    19,    46,   123,    22,   313,    24,   120,    26,
+     120,    28,   123,   320,   123,   322,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      35,    35,   388,    50,    51,    52,    53,    46,    48,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    49,     8,   498,   121,
+     110,   121,   121,   370,   371,   122,   106,    35,   424,   120,
+      35,    35,   387,   429,    35,   120,    46,    35,    35,    35,
+     387,    35,    35,   129,   123,    35,   111,    35,   609,    35,
+      20,   598,   599,   600,    21,   112,    30,    35,    35,   122,
+      35,   481,    35,   120,   421,   485,   122,   463,   123,    54,
+     121,   123,   492,    45,    97,   123,   123,    23,    54,   121,
+     525,   526,   527,   122,    25,   432,   433,   434,   435,   436,
+     437,   438,   130,   131,   132,    45,    45,   493,    45,   495,
+     447,    45,   449,   450,   451,    45,    45,    45,    45,    35,
+      35,   658,    35,   120,   461,   462,   122,   464,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,   485,    35,
+     485,    50,    51,    52,    53,    35,   120,   617,   485,    35,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    48,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,     8,   120,   120,
-     120,    50,   424,   121,   109,   105,    35,   429,   498,   119,
-      35,    35,    35,   370,   371,    46,   119,    35,    35,    35,
-      35,    35,   387,    35,   122,   129,   130,   131,   110,   128,
-     387,    35,    35,    20,    30,    21,   607,    35,    35,   122,
-     121,   463,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,   481,    35,    35,   421,   485,   123,   120,   596,   597,
-     598,    54,   492,   121,    45,   122,   122,    97,   523,   524,
-     525,   493,   121,   495,   122,   432,   433,   434,   435,   436,
-     437,   438,    35,    54,   120,    23,   121,    45,    25,    45,
-     447,    45,   449,   450,   451,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,   461,   462,    45,   464,    50,    51,
-      52,    53,    45,    45,    45,    45,   654,    35,   485,   119,
-     485,    35,    35,    35,   614,    35,    35,    35,   485,    35,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,   511,   121,   121,    35,   121,    15,
-     120,   508,    27,    35,   511,    35,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,   523,   524,   525,    50,
-      51,    52,    53,   114,   179,   230,   186,   607,    51,   173,
-     602,   251,   274,   145,   541,   542,   543,   544,   545,   546,
-     547,   548,   549,     1,   551,   485,   508,   652,   177,     7,
-     417,     9,    10,    11,    12,   657,   524,   248,    16,    17,
-      18,    19,   662,   409,    22,   413,    24,    30,    26,   514,
-      28,   428,   387,   512,    33,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
-      -1,    -1,    50,    51,    52,    53,    -1,    -1,    -1,    -1,
-     607,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    -1,   646,
-     647,   646,   647,     1,    -1,    -1,    -1,    -1,    -1,   646,
-     647,     9,    10,    11,    12,   652,    -1,    -1,    16,    17,
-      18,    19,    -1,   111,    22,   662,    24,    -1,    26,    -1,
-      28,   119,    -1,    -1,    -1,    33,    34,    35,    35,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    36,
-      -1,    -1,    50,    51,    52,    53,    -1,   123,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,
+      35,    35,    35,   122,   122,   121,   513,   121,    15,    27,
+      35,    35,   114,   510,   179,   186,   513,   251,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,   230,   525,   526,
+     527,    50,   177,   145,   173,    51,   274,   417,   485,   609,
+     661,   526,   510,   666,   248,   516,   543,   544,   545,   546,
+     547,   548,   549,   550,   551,     1,   553,   514,   604,   428,
+     409,   656,   413,     9,    10,    11,    12,   387,    30,    33,
+      16,    17,    18,    19,    -1,    -1,    22,   124,    24,    -1,
+      26,    -1,    28,    -1,    -1,    -1,    -1,    33,    34,    35,
+      -1,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    -1,    -1,   122,    50,    51,    52,    53,    -1,    -1,
+      -1,    35,   609,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      -1,    -1,    -1,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,   649,   650,   649,   650,    50,    51,    52,    53,
+      -1,    -1,   649,   650,    -1,    -1,    -1,    -1,    -1,   656,
+      -1,    -1,    -1,    -1,    -1,    -1,   112,    35,    -1,   666,
+      -1,    -1,    -1,    -1,   120,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     124,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    -1,
+      -1,    -1,    -1,    -1,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    36,
+      -1,    -1,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,   124,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   130,    -1,   132,   133,
+     134,   135,   136,   137,   138,   139,   120,    -1,    -1,   123,
+      -1,    -1,    -1,    -1,    -1,   129,    83,    84,    85,    86,
       87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   129,    -1,   131,   132,   133,   134,   135,   136,
-     137,   138,    -1,    -1,    -1,    -1,   129,    -1,   131,   132,
-     133,   134,   135,   136,   137,   138,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    82,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,   122,
-      -1,    -1,    -1,    -1,    -1,   128,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   122,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    37,    38,    39,    40,    41,
+      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
+      -1,    -1,    -1,    -1,   123,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    -1,    48,    49,    50,    51,    52,    53,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    -1,    48,    49,    50,
       51,    52,    53,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    -1,    -1,    48,    49,    50,    51,    52,    53,
+      44,    45,    46,    -1,    48,    49,    50,    51,    52,    53,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
       -1,    48,    49,    50,    51,    52,    53,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    -1,    -1,    48,    49,
       50,    51,    52,    53,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    -1,    -1,    48,    49,    50,    51,    52,
       53,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    -1,    -1,    -1,    50,    51,    52,    53,    37,    38,
+      -1,    -1,    48,    49,    50,    51,    52,    53,    37,    38,
       39,    40,    41,    42,    43,    44,    45,    46,    -1,    -1,
-      -1,    50,    -1,    52,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    -1,    -1,    -1,    50,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      -1,    50,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49
+      -1,    50,    51,    52,    53,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    -1,    -1,    -1,    50,    -1,
+      52,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    -1,    -1,    -1,    50,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    -1,    -1,    -1,    -1,    50,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    37,    38,    39,    40,    41,    42,    43,    44,    45
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   115,   116,   140,    35,   142,   301,   302,   141,   142,
-       0,     9,    10,    11,    13,    36,    37,   104,   108,   111,
-     117,   145,   146,   147,   148,   159,   162,   189,   204,   230,
-     303,   304,   305,   307,   308,   309,     1,     3,     4,     5,
-       6,    17,   143,   144,   145,   158,   159,   160,   161,   162,
-     166,   168,   199,   280,    46,    48,    46,   123,    35,   197,
-     306,   309,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,   296,   297,    37,   119,   190,    35,   119,    35,    35,
-      46,    47,    48,    49,    50,    51,    52,    53,   123,   206,
-     207,   209,   210,   211,   212,   249,   289,   290,   295,   296,
-     304,   306,   170,    35,    46,    46,    46,    46,   169,   296,
-      38,    39,    41,   285,    35,   142,   170,   121,    46,   163,
-     164,   165,   114,   111,   112,   113,   126,   191,   192,   193,
-     194,    35,   149,   150,   151,   296,    50,   213,   288,   289,
-     293,   294,   295,   296,    35,   121,   212,    36,    83,    84,
+       0,   116,   117,   141,    35,   143,   303,   304,   142,   143,
+       0,     9,    10,    11,    13,    36,    37,   105,   109,   112,
+     118,   146,   147,   148,   149,   160,   163,   191,   206,   232,
+     305,   306,   307,   309,   310,   311,     1,     3,     4,     5,
+       6,    17,   144,   145,   146,   159,   160,   161,   162,   163,
+     167,   169,   201,   282,    46,    48,    46,   124,    35,   199,
+     308,   311,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,   298,   299,    37,   120,   192,    35,   120,    35,    35,
+      46,    47,    48,    49,    50,    51,    52,    53,   124,   208,
+     209,   211,   212,   213,   214,   251,   291,   292,   297,   298,
+     306,   308,   171,    35,    46,    46,    46,    46,   170,   298,
+      38,    39,    41,   287,    35,   143,   171,   122,    46,   164,
+     165,   166,   115,   112,   113,   114,   127,   193,   194,   195,
+     196,    35,   150,   151,   152,   298,    50,   215,   290,   291,
+     295,   296,   297,   298,    35,   122,   214,    36,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,   171,   122,   296,   296,   296,   144,    35,    50,
-     249,   296,   124,   125,   190,   195,   120,   121,   120,   121,
-     124,   125,   209,   119,   277,   278,   119,   277,   119,   172,
-     278,   278,   278,    46,   122,   122,   122,   176,   177,    35,
-     165,    35,   111,   112,   113,   127,   196,   193,    35,   151,
-     288,    46,   169,    46,   173,   174,   175,   212,   296,    48,
-      49,    46,    47,   184,     8,   178,   190,   106,   107,   152,
-     153,   154,   155,   156,   157,   120,   120,   120,   121,     7,
+      95,    96,   172,   123,   298,   298,   298,   145,    35,    50,
+     251,   298,   125,   126,   192,   197,   121,   122,   121,   122,
+     125,   126,   211,   120,   279,   280,   120,   279,   120,   173,
+     280,   280,   280,    46,   123,   123,   123,   177,   178,    35,
+     166,    35,   112,   113,   114,   128,   198,   195,    35,   152,
+     290,    46,   170,    46,   174,   175,   176,   214,   298,    48,
+      49,    46,    47,   186,     8,   179,   192,   107,   108,   153,
+     154,   155,   156,   157,   158,   121,   121,   121,   122,     7,
       12,    16,    17,    18,    19,    22,    24,    26,    28,    33,
-      34,    36,    37,    42,    43,    44,    45,    46,    50,   119,
-     159,   167,   185,   186,   187,   188,   189,   197,   198,   199,
-     200,   201,   202,   203,   204,   214,   215,   217,   219,   220,
-     223,   225,   226,   230,   231,   232,   233,   242,   243,   244,
-     245,   246,   247,   249,   250,   256,   257,   258,   259,   267,
-     268,   279,   281,   282,   284,   293,   296,   297,    38,    39,
-      40,    41,   179,   292,   292,   109,   105,   154,    35,   175,
-     292,   285,    46,   283,   285,   286,   119,   260,   260,    35,
-      35,    35,   250,   244,    46,   186,   293,   296,   212,    46,
-     251,   252,   253,   293,    35,    35,   205,   206,   208,   212,
+      34,    36,    37,    42,    43,    44,    45,    46,    50,   120,
+     160,   168,   187,   188,   189,   190,   191,   199,   200,   201,
+     202,   203,   204,   205,   206,   216,   217,   219,   221,   222,
+     225,   227,   228,   232,   233,   234,   235,   244,   245,   246,
+     247,   248,   249,   251,   252,   258,   259,   260,   261,   269,
+     270,   281,   283,   284,   286,   295,   298,   299,    38,    39,
+      40,    41,   180,   294,   294,   110,   106,   155,    35,   176,
+     294,   287,    46,   285,   287,   288,   120,   262,   262,    35,
+      35,    35,   252,   246,    46,   188,   295,   298,   214,    46,
+     253,   254,   255,   295,    35,    35,   207,   208,   210,   214,
       35,    35,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    48,    49,   221,   289,   293,   295,    35,   260,
-     128,   122,    35,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,   122,   300,   212,
-     180,   296,   110,   227,   228,   296,   296,    46,   261,   262,
-     263,   264,   265,   266,   288,    35,    35,    20,   269,   270,
-     271,    21,   272,   273,   274,    30,   234,   235,   236,    35,
-      35,   121,    35,    35,   122,    54,   120,   121,   254,   122,
-      45,   121,   224,   224,   224,   224,   224,   224,   224,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    50,   121,
-      45,   121,    55,    56,    57,    58,    59,    60,   291,   291,
-     291,    45,   224,   291,   224,    46,    50,    52,   248,   296,
-     244,    48,    49,   293,    48,    49,   293,    37,    46,    48,
-      49,    50,   129,   130,   131,   204,   216,   218,   244,   290,
-     293,   295,   297,   298,   288,   122,    35,    97,    98,    99,
-     101,   102,   103,   181,   182,   183,   255,    35,   121,    97,
-     229,   122,    54,   120,   121,   275,   265,    23,   271,   265,
-      25,   274,   265,    14,    29,    32,   237,   236,   289,   288,
-     293,   253,   255,   288,   296,   296,   296,   296,   296,   296,
-     296,    45,    45,    45,    45,    45,    45,    45,    45,    45,
-     296,   224,   296,   296,   296,    46,    48,    49,   222,   293,
-      46,    48,    49,   293,    46,    48,    49,   293,   296,   296,
-     288,   296,   260,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,   129,   131,   132,
-     133,   134,   135,   136,   137,   138,   299,   299,   299,   212,
-     210,   212,   299,   212,   288,   288,   277,   119,   228,   287,
-     289,   296,   266,   263,    98,   100,   276,    35,    35,    35,
-      35,    35,   249,   247,   249,   249,    35,    35,   296,   296,
-     296,   296,   296,   296,   296,   296,   296,   296,    46,   293,
-      48,    49,   293,    48,    49,   293,   121,   121,   288,   175,
-     277,    35,   121,   238,    31,   226,   239,   240,   241,   207,
-     207,   120,    15,   249,   253,    27,   241,   248,    35,    35
+      45,    46,    48,    49,   223,   291,   295,   297,    35,   262,
+     129,   123,    35,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,   123,   302,   214,
+     181,   298,   111,   229,   230,   298,   298,    46,   263,   264,
+     265,   266,   267,   268,   290,    35,    35,    20,   271,   272,
+     273,    21,   274,   275,   276,    30,   236,   237,   238,    35,
+      35,   122,    35,    35,   123,    54,   121,   122,   256,   123,
+      45,   122,   226,   226,   226,   226,   226,   226,   226,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    50,   122,
+      45,   122,    55,    56,    57,    58,    59,    60,   293,   293,
+     293,    45,   226,   293,   226,    46,    50,    52,   250,   298,
+     246,    48,    49,   295,    48,    49,   295,    37,    46,    48,
+      49,    50,   130,   131,   132,   206,   218,   220,   246,   292,
+     295,   297,   299,   300,   290,   123,    35,    97,    98,    99,
+     101,   102,   103,   104,   182,   183,   184,   185,   257,    35,
+     122,    97,   231,   123,    54,   121,   122,   277,   267,    23,
+     273,   267,    25,   276,   267,    14,    29,    32,   239,   238,
+     291,   290,   295,   255,   257,   290,   298,   298,   298,   298,
+     298,   298,   298,    45,    45,    45,    45,    45,    45,    45,
+      45,    45,   298,   226,   298,   298,   298,    46,    48,    49,
+     224,   295,    46,    48,    49,   295,    46,    48,    49,   295,
+     298,   298,   290,   298,   262,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,   130,
+     132,   133,   134,   135,   136,   137,   138,   139,   301,   301,
+     301,   214,   212,   214,   301,   214,   290,   290,   279,   120,
+     120,   230,   289,   291,   298,   268,   265,    98,   100,   278,
+      35,    35,    35,    35,    35,   251,   249,   251,   251,    35,
+      35,   298,   298,   298,   298,   298,   298,   298,   298,   298,
+     298,    46,   295,    48,    49,   295,    48,    49,   295,   122,
+     122,   290,   176,   121,   279,    35,   122,   240,    31,   228,
+     241,   242,   243,   209,   209,   121,    15,   251,   255,    27,
+     243,   250,    35,    35
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2631,22 +2635,22 @@
   switch (yyn)
     {
         case 4:
-#line 570 "pir.y"
+#line 572 "pir.y"
     { fixup_global_labels(lexer); ;}
     break;
 
   case 20:
-#line 601 "pir.y"
+#line 603 "pir.y"
     { new_macro_const(lexer->macros, (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].sval), yypirget_lineno(yyscanner)); ;}
     break;
 
   case 21:
-#line 607 "pir.y"
+#line 609 "pir.y"
     { /* fprintf(stderr, "macro body: [%s]\n", CURRENT_MACRO(lexer)->body);*/ ;}
     break;
 
   case 22:
-#line 611 "pir.y"
+#line 613 "pir.y"
     {
                           new_macro(lexer->macros, (yyvsp[(2) - (2)].sval), yypirget_lineno(yyscanner), TRUE,
                                     lexer->macro_size);
@@ -2654,17 +2658,17 @@
     break;
 
   case 27:
-#line 626 "pir.y"
+#line 628 "pir.y"
     { add_macro_param(CURRENT_MACRO(lexer), (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 35:
-#line 645 "pir.y"
+#line 647 "pir.y"
     { store_macro_string(CURRENT_MACRO(lexer), "%s\n", (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 36:
-#line 649 "pir.y"
+#line 651 "pir.y"
     {
                           store_macro_string(CURRENT_MACRO(lexer), ".local %s %s\n",
                                              pir_type_names[(yyvsp[(2) - (3)].ival)], (yyvsp[(3) - (3)].sval));
@@ -2672,147 +2676,147 @@
     break;
 
   case 37:
-#line 660 "pir.y"
+#line 662 "pir.y"
     { load_library(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 38:
-#line 664 "pir.y"
+#line 666 "pir.y"
     { yypirset_lineno ((yyvsp[(2) - (2)].ival), yyscanner); ;}
     break;
 
   case 39:
-#line 666 "pir.y"
+#line 668 "pir.y"
     { lexer->filename = (yyvsp[(2) - (2)].sval); ;}
     break;
 
   case 40:
-#line 672 "pir.y"
+#line 674 "pir.y"
     { set_hll(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 41:
-#line 676 "pir.y"
+#line 678 "pir.y"
     { set_hll_map(lexer, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 42:
-#line 680 "pir.y"
+#line 682 "pir.y"
     { set_namespace(lexer, (yyvsp[(3) - (4)].key)); ;}
     break;
 
   case 43:
-#line 684 "pir.y"
+#line 686 "pir.y"
     { (yyval.key) = NULL; ;}
     break;
 
   case 44:
-#line 686 "pir.y"
+#line 688 "pir.y"
     { (yyval.key) = (yyvsp[(1) - (1)].key); ;}
     break;
 
   case 45:
-#line 690 "pir.y"
+#line 692 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 46:
-#line 692 "pir.y"
+#line 694 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 47:
-#line 696 "pir.y"
+#line 698 "pir.y"
     { (yyval.expr) = expr_from_string(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 49:
-#line 706 "pir.y"
+#line 708 "pir.y"
     { close_sub(lexer); ;}
     break;
 
   case 50:
-#line 710 "pir.y"
+#line 712 "pir.y"
     { new_subr(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 55:
-#line 722 "pir.y"
+#line 724 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_ANON);;}
     break;
 
   case 56:
-#line 724 "pir.y"
+#line 726 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_INIT); ;}
     break;
 
   case 57:
-#line 726 "pir.y"
+#line 728 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_LOAD); ;}
     break;
 
   case 58:
-#line 728 "pir.y"
+#line 730 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_MAIN); ;}
     break;
 
   case 59:
-#line 730 "pir.y"
+#line 732 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_LEX); ;}
     break;
 
   case 60:
-#line 732 "pir.y"
+#line 734 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_POSTCOMP); ;}
     break;
 
   case 61:
-#line 734 "pir.y"
+#line 736 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_IMMEDIATE); ;}
     break;
 
   case 62:
-#line 736 "pir.y"
+#line 738 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_MULTI); ;}
     break;
 
   case 63:
-#line 738 "pir.y"
+#line 740 "pir.y"
     { set_sub_outer(lexer, (yyvsp[(3) - (4)].sval)); ;}
     break;
 
   case 64:
-#line 740 "pir.y"
+#line 742 "pir.y"
     { set_sub_methodname(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 65:
-#line 742 "pir.y"
+#line 744 "pir.y"
     { set_sub_vtable(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 66:
-#line 744 "pir.y"
+#line 746 "pir.y"
     { set_sub_subid(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 67:
-#line 746 "pir.y"
+#line 748 "pir.y"
     { set_sub_instanceof(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 68:
-#line 748 "pir.y"
+#line 750 "pir.y"
     { set_sub_nsentry(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 69:
-#line 752 "pir.y"
+#line 754 "pir.y"
     { set_sub_multi_types(lexer, (yyvsp[(2) - (3)].expr)); ;}
     break;
 
   case 70:
-#line 756 "pir.y"
+#line 758 "pir.y"
     {
                           CURRENT_SUB(lexer)->info.num_multi_types = 1;
                           /* n=1 means :multi() -- without any types. */
@@ -2820,12 +2824,12 @@
     break;
 
   case 71:
-#line 761 "pir.y"
+#line 763 "pir.y"
     { (yyval.expr) = (yyvsp[(1) - (1)].expr); ;}
     break;
 
   case 72:
-#line 765 "pir.y"
+#line 767 "pir.y"
     {
                           CURRENT_SUB(lexer)->info.num_multi_types = 2;
                           /* start counting multi types; always 1 higher than actual number
@@ -2837,7 +2841,7 @@
     break;
 
   case 73:
-#line 774 "pir.y"
+#line 776 "pir.y"
     {
                           ++CURRENT_SUB(lexer)->info.num_multi_types;
                           /* link the multi types in reverse other. That's fine,
@@ -2849,22 +2853,22 @@
     break;
 
   case 74:
-#line 785 "pir.y"
+#line 787 "pir.y"
     { (yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 75:
-#line 787 "pir.y"
+#line 789 "pir.y"
     { (yyval.expr) = expr_from_string(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 76:
-#line 789 "pir.y"
+#line 791 "pir.y"
     { (yyval.expr) = expr_from_key(lexer, (yyvsp[(1) - (1)].key)); ;}
     break;
 
   case 77:
-#line 793 "pir.y"
+#line 795 "pir.y"
     {
                            /* if there are parameters, then emit a get_params instruction. */
                            if ((yyvsp[(1) - (1)].uval) > 0)
@@ -2873,12 +2877,12 @@
     break;
 
   case 78:
-#line 801 "pir.y"
+#line 803 "pir.y"
     { (yyval.uval) = 0; ;}
     break;
 
   case 79:
-#line 803 "pir.y"
+#line 805 "pir.y"
     {
                           /* if the :named flag was set, there's an extra
                            * constant string argument for the name. count that too.
@@ -2892,40 +2896,45 @@
     break;
 
   case 80:
-#line 816 "pir.y"
+#line 818 "pir.y"
     { (yyval.targ) = set_param_flag(lexer, (yyvsp[(2) - (4)].targ), (yyvsp[(3) - (4)].ival)); ;}
     break;
 
   case 81:
-#line 820 "pir.y"
+#line 822 "pir.y"
     { (yyval.targ) = add_param(lexer, (yyvsp[(1) - (2)].ival), (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 82:
-#line 824 "pir.y"
+#line 826 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 83:
-#line 826 "pir.y"
+#line 828 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 87:
-#line 835 "pir.y"
+  case 88:
+#line 838 "pir.y"
+    { (yyval.ival) = TARGET_FLAG_LOOKAHEAD; ;}
+    break;
+
+  case 89:
+#line 842 "pir.y"
     { (yyval.ival) = TARGET_FLAG_INVOCANT;
                            /* XXX handle multi_type */
 
                          ;}
     break;
 
-  case 88:
-#line 842 "pir.y"
+  case 90:
+#line 849 "pir.y"
     { (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
     break;
 
-  case 90:
-#line 849 "pir.y"
+  case 92:
+#line 856 "pir.y"
     {
                          ++lexer->stmt_counter;
                          /* increment the logical statement counter; a statement can be
@@ -2935,43 +2944,43 @@
                         ;}
     break;
 
-  case 91:
-#line 859 "pir.y"
+  case 93:
+#line 866 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
-  case 109:
-#line 882 "pir.y"
+  case 111:
+#line 889 "pir.y"
     { annotate(lexer, (yyvsp[(2) - (5)].sval), (yyvsp[(4) - (5)].cval)); ;}
     break;
 
-  case 111:
-#line 892 "pir.y"
+  case 113:
+#line 899 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (3)].mval), (yyvsp[(2) - (3)].pval)); ;}
     break;
 
-  case 112:
-#line 896 "pir.y"
+  case 114:
+#line 903 "pir.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 113:
-#line 898 "pir.y"
+  case 115:
+#line 905 "pir.y"
     { (yyval.pval) = (yyvsp[(2) - (3)].pval); ;}
     break;
 
-  case 114:
-#line 902 "pir.y"
+  case 116:
+#line 909 "pir.y"
     { (yyval.pval) = NULL; ;}
     break;
 
-  case 116:
-#line 907 "pir.y"
+  case 118:
+#line 914 "pir.y"
     { (yyval.pval) = new_macro_param((yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 117:
-#line 909 "pir.y"
+  case 119:
+#line 916 "pir.y"
     {
                           macro_param *param = new_macro_param((yyvsp[(3) - (3)].sval));
                           param->next = (yyvsp[(1) - (3)].pval);
@@ -2979,8 +2988,8 @@
                         ;}
     break;
 
-  case 118:
-#line 917 "pir.y"
+  case 120:
+#line 924 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                           if (sym == NULL) {
@@ -2990,23 +2999,23 @@
                         ;}
     break;
 
-  case 120:
-#line 926 "pir.y"
+  case 122:
+#line 933 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 122:
-#line 931 "pir.y"
+  case 124:
+#line 938 "pir.y"
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
-  case 123:
-#line 936 "pir.y"
+  case 125:
+#line 943 "pir.y"
     { (yyval.sval) = ""; ;}
     break;
 
-  case 124:
-#line 938 "pir.y"
+  case 126:
+#line 945 "pir.y"
     { /* XXX cleanup memory stuff */
                           char *newbuff = (char *)mem_sys_allocate((strlen((yyvsp[(1) - (2)].sval)) + strlen((yyvsp[(2) - (2)].sval)) + 2)
                                                                    * sizeof (char));
@@ -3015,18 +3024,18 @@
                         ;}
     break;
 
-  case 128:
-#line 950 "pir.y"
+  case 130:
+#line 957 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
-  case 129:
-#line 958 "pir.y"
+  case 131:
+#line 965 "pir.y"
     { set_instr(lexer, NULL); ;}
     break;
 
-  case 131:
-#line 966 "pir.y"
+  case 133:
+#line 973 "pir.y"
     {
                            if (lexer->parse_errors > MAX_NUM_ERRORS)
                                panic(lexer, "Too many errors. Compilation aborted.\n");
@@ -3035,24 +3044,24 @@
                          ;}
     break;
 
-  case 132:
-#line 975 "pir.y"
+  case 134:
+#line 982 "pir.y"
     {
                            set_instrf(lexer, "null", "%T", (yyvsp[(2) - (3)].targ));
                            get_opinfo(lexer);
                          ;}
     break;
 
-  case 133:
-#line 982 "pir.y"
+  case 135:
+#line 989 "pir.y"
     {
                            set_instrf(lexer, "get_results", "%T", (yyvsp[(2) - (3)].targ));
                            get_opinfo(lexer);
                          ;}
     break;
 
-  case 137:
-#line 996 "pir.y"
+  case 139:
+#line 1003 "pir.y"
     { /* at this point, TK_IDENT may in fact be a symbol identifier,
                             * not an op, so don't do any checks like is_parrot_op() just yet.
                             */
@@ -3061,8 +3070,8 @@
                          ;}
     break;
 
-  case 138:
-#line 1005 "pir.y"
+  case 140:
+#line 1012 "pir.y"
     { /* when this rule is activated, the initial identifier must
                            * be a parrot op.
                            */
@@ -3071,8 +3080,8 @@
                         ;}
     break;
 
-  case 144:
-#line 1023 "pir.y"
+  case 146:
+#line 1030 "pir.y"
     {
                          /* the "instruction" that was set now appears to be
                           * an identifier; get the name, and check its type.
@@ -3108,41 +3117,41 @@
                        ;}
     break;
 
-  case 145:
-#line 1059 "pir.y"
+  case 147:
+#line 1066 "pir.y"
     { push_operand(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
-  case 146:
-#line 1061 "pir.y"
+  case 148:
+#line 1068 "pir.y"
     { push_operand(lexer, expr_from_key(lexer, (yyvsp[(1) - (1)].key))); ;}
     break;
 
-  case 147:
-#line 1065 "pir.y"
+  case 149:
+#line 1072 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
-  case 148:
-#line 1067 "pir.y"
+  case 150:
+#line 1074 "pir.y"
     { /* this is either a LABEL or a symbol; in the latter case, the type
                             * will be filled in later. */
                            (yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval));
                          ;}
     break;
 
-  case 149:
-#line 1072 "pir.y"
+  case 151:
+#line 1079 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
-  case 150:
-#line 1074 "pir.y"
+  case 152:
+#line 1081 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
-  case 151:
-#line 1078 "pir.y"
+  case 153:
+#line 1085 "pir.y"
     {
                            /* if $1 is a register, just return that */
                            if (TEST_FLAG((yyvsp[(1) - (2)].targ)->flags, TARGET_FLAG_IS_REG))
@@ -3165,23 +3174,23 @@
                          ;}
     break;
 
-  case 152:
-#line 1101 "pir.y"
+  case 154:
+#line 1108 "pir.y"
     { (yyval.key) = (yyvsp[(2) - (3)].key); ;}
     break;
 
-  case 153:
-#line 1105 "pir.y"
+  case 155:
+#line 1112 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
-  case 154:
-#line 1107 "pir.y"
+  case 156:
+#line 1114 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 155:
-#line 1116 "pir.y"
+  case 157:
+#line 1123 "pir.y"
     {
                           /* the instruction is already set in parrot_op rule */
                           unshift_operand(lexer, (yyvsp[(4) - (6)].expr));
@@ -3194,8 +3203,8 @@
                         ;}
     break;
 
-  case 156:
-#line 1127 "pir.y"
+  case 158:
+#line 1134 "pir.y"
     {
                           /* the instruction is already set in parrot_op rule */
                           unshift_operand(lexer, (yyvsp[(4) - (4)].expr));
@@ -3209,8 +3218,8 @@
                         ;}
     break;
 
-  case 157:
-#line 1139 "pir.y"
+  case 159:
+#line 1146 "pir.y"
     {
                           unshift_operand(lexer, expr_from_key(lexer, (yyvsp[(4) - (6)].key)));
                           unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (6)].targ)));
@@ -3220,8 +3229,8 @@
                         ;}
     break;
 
-  case 161:
-#line 1156 "pir.y"
+  case 163:
+#line 1163 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 0)
                               set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3232,8 +3241,8 @@
                         ;}
     break;
 
-  case 162:
-#line 1165 "pir.y"
+  case 164:
+#line 1172 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 0.0)
                               set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3244,24 +3253,24 @@
                         ;}
     break;
 
-  case 163:
-#line 1174 "pir.y"
+  case 165:
+#line 1181 "pir.y"
     {
                           set_instrf(lexer, "set", "%T%C", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].cval));
                           get_opinfo(lexer);
                         ;}
     break;
 
-  case 164:
-#line 1179 "pir.y"
+  case 166:
+#line 1186 "pir.y"
     {
                           set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(lexer);
                         ;}
     break;
 
-  case 165:
-#line 1184 "pir.y"
+  case 167:
+#line 1191 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
                           if (sym) {
@@ -3284,16 +3293,16 @@
                         ;}
     break;
 
-  case 166:
-#line 1205 "pir.y"
+  case 168:
+#line 1212 "pir.y"
     {
                           unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
                           get_opinfo(lexer);
                         ;}
     break;
 
-  case 167:
-#line 1210 "pir.y"
+  case 169:
+#line 1217 "pir.y"
     {
                           /*   $P0 = foo ["bar"]    # PIR style
                            *
@@ -3336,8 +3345,8 @@
                         ;}
     break;
 
-  case 168:
-#line 1251 "pir.y"
+  case 170:
+#line 1258 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(3) - (4)].sval));
                           target *t;
@@ -3357,8 +3366,8 @@
                         ;}
     break;
 
-  case 169:
-#line 1269 "pir.y"
+  case 171:
+#line 1276 "pir.y"
     {
                           target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (4)].ival));
                           set_target_key(preg, (yyvsp[(4) - (4)].key));
@@ -3367,16 +3376,16 @@
                         ;}
     break;
 
-  case 170:
-#line 1276 "pir.y"
+  case 172:
+#line 1283 "pir.y"
     {
                           set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].expr));
                           get_opinfo(lexer);
                         ;}
     break;
 
-  case 171:
-#line 1281 "pir.y"
+  case 173:
+#line 1288 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 1)
                               set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3389,8 +3398,8 @@
                         ;}
     break;
 
-  case 172:
-#line 1292 "pir.y"
+  case 174:
+#line 1299 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 1.0)
                               set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3403,8 +3412,8 @@
                         ;}
     break;
 
-  case 173:
-#line 1303 "pir.y"
+  case 175:
+#line 1310 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 1)
                               set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3417,8 +3426,8 @@
                         ;}
     break;
 
-  case 174:
-#line 1314 "pir.y"
+  case 176:
+#line 1321 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 1.0)
                               set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3431,32 +3440,32 @@
                         ;}
     break;
 
-  case 175:
-#line 1325 "pir.y"
+  case 177:
+#line 1332 "pir.y"
     {
                           set_instrf(lexer, "add", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(lexer);
                         ;}
     break;
 
-  case 176:
-#line 1330 "pir.y"
+  case 178:
+#line 1337 "pir.y"
     {
                           set_instrf(lexer, "sub", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(lexer);
                         ;}
     break;
 
-  case 177:
-#line 1335 "pir.y"
+  case 179:
+#line 1342 "pir.y"
     {
                           set_instrf(lexer, (yyvsp[(3) - (4)].sval), "%T%E", (yyvsp[(1) - (4)].targ), (yyvsp[(4) - (4)].expr));
                           get_opinfo(lexer);
                         ;}
     break;
 
-  case 178:
-#line 1340 "pir.y"
+  case 180:
+#line 1347 "pir.y"
     {
                           if (targets_equal((yyvsp[(1) - (5)].targ), (yyvsp[(3) - (5)].targ))) /* $P0 = $P0 + $P1 ==> $P0 += $P1 */
                               set_instrf(lexer, opnames[(yyvsp[(4) - (5)].ival)], "%T%E", (yyvsp[(1) - (5)].targ), (yyvsp[(5) - (5)].expr));
@@ -3468,8 +3477,8 @@
                         ;}
     break;
 
-  case 179:
-#line 1350 "pir.y"
+  case 181:
+#line 1357 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(1) - (4)].sval));
                           target *t;
@@ -3490,8 +3499,8 @@
                       ;}
     break;
 
-  case 180:
-#line 1369 "pir.y"
+  case 182:
+#line 1376 "pir.y"
     {
                           target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (4)].ival));
                           set_target_key(preg, (yyvsp[(2) - (4)].key));
@@ -3500,98 +3509,98 @@
                         ;}
     break;
 
-  case 181:
-#line 1403 "pir.y"
+  case 183:
+#line 1410 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%i%T", (yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 182:
-#line 1405 "pir.y"
+  case 184:
+#line 1412 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%n%T", (yyvsp[(1) - (3)].dval), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 183:
-#line 1407 "pir.y"
+  case 185:
+#line 1414 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%s%T", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 184:
-#line 1409 "pir.y"
+  case 186:
+#line 1416 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_s_s(yyscanner, (yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval))); ;}
     break;
 
-  case 185:
-#line 1411 "pir.y"
+  case 187:
+#line 1418 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_i_i(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
     break;
 
-  case 186:
-#line 1413 "pir.y"
+  case 188:
+#line 1420 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_n_n(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
     break;
 
-  case 187:
-#line 1415 "pir.y"
+  case 189:
+#line 1422 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_i_n(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
     break;
 
-  case 188:
-#line 1417 "pir.y"
+  case 190:
+#line 1424 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_n_i(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
     break;
 
-  case 189:
-#line 1422 "pir.y"
+  case 191:
+#line 1429 "pir.y"
     { get_opinfo(lexer); ;}
     break;
 
-  case 190:
-#line 1431 "pir.y"
+  case 192:
+#line 1438 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, (yyvsp[(3) - (5)].sval), (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 191:
-#line 1433 "pir.y"
+  case 193:
+#line 1440 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "int", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 192:
-#line 1435 "pir.y"
+  case 194:
+#line 1442 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "num", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 193:
-#line 1437 "pir.y"
+  case 195:
+#line 1444 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "pmc", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 194:
-#line 1439 "pir.y"
+  case 196:
+#line 1446 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "string", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 195:
-#line 1441 "pir.y"
+  case 197:
+#line 1448 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "if", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 196:
-#line 1443 "pir.y"
+  case 198:
+#line 1450 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "unless", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 197:
-#line 1445 "pir.y"
+  case 199:
+#line 1452 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "goto", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 198:
-#line 1447 "pir.y"
+  case 200:
+#line 1454 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "null", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 199:
-#line 1449 "pir.y"
+  case 201:
+#line 1456 "pir.y"
     {
                           int istrue = evaluate_c(lexer, (yyvsp[(2) - (4)].cval));
                           /* if "unless", invert the true-ness */
@@ -3605,76 +3614,76 @@
                         ;}
     break;
 
-  case 200:
-#line 1461 "pir.y"
+  case 202:
+#line 1468 "pir.y"
     {
                           set_instrf(lexer, (yyvsp[(1) - (5)].ival) ? "unless_null" : "if_null", "%T%I",
                                      new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (5)].ival)), (yyvsp[(5) - (5)].sval));
                         ;}
     break;
 
-  case 201:
-#line 1466 "pir.y"
+  case 203:
+#line 1473 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 202:
-#line 1468 "pir.y"
+  case 204:
+#line 1475 "pir.y"
     { set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I", (yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 203:
-#line 1470 "pir.y"
+  case 205:
+#line 1477 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "int", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 204:
-#line 1472 "pir.y"
+  case 206:
+#line 1479 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "num", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 205:
-#line 1474 "pir.y"
+  case 207:
+#line 1481 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "pmc", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 206:
-#line 1476 "pir.y"
+  case 208:
+#line 1483 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "string", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 207:
-#line 1478 "pir.y"
+  case 209:
+#line 1485 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "if", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 208:
-#line 1480 "pir.y"
+  case 210:
+#line 1487 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "unless", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 209:
-#line 1482 "pir.y"
+  case 211:
+#line 1489 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 210:
-#line 1484 "pir.y"
+  case 212:
+#line 1491 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 211:
-#line 1486 "pir.y"
+  case 213:
+#line 1493 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 212:
-#line 1488 "pir.y"
+  case 214:
+#line 1495 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 213:
-#line 1490 "pir.y"
+  case 215:
+#line 1497 "pir.y"
     {
                           if ((yyvsp[(2) - (4)].ival) == COMPUTE_DURING_RUNTIME) {
                              if ((yyvsp[(1) - (4)].ival) == NEED_INVERT_OPNAME) /* "unless" */
@@ -3701,8 +3710,8 @@
                         ;}
     break;
 
-  case 214:
-#line 1521 "pir.y"
+  case 216:
+#line 1528 "pir.y"
     {
                           /* the instructions "gt" and "ge" are converted to "lt" and "le".
                            * if so, then the arguments must be reversed as well. "lt" and
@@ -3730,8 +3739,8 @@
                         ;}
     break;
 
-  case 215:
-#line 1547 "pir.y"
+  case 217:
+#line 1554 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%i", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].ival));
@@ -3741,8 +3750,8 @@
                         ;}
     break;
 
-  case 216:
-#line 1555 "pir.y"
+  case 218:
+#line 1562 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%n", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].dval));
@@ -3753,8 +3762,8 @@
                         ;}
     break;
 
-  case 217:
-#line 1564 "pir.y"
+  case 219:
+#line 1571 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%s", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].sval));
@@ -3765,71 +3774,71 @@
                         ;}
     break;
 
-  case 218:
-#line 1573 "pir.y"
+  case 220:
+#line 1580 "pir.y"
     { (yyval.ival) = evaluate_i_i((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
     break;
 
-  case 219:
-#line 1575 "pir.y"
+  case 221:
+#line 1582 "pir.y"
     { (yyval.ival) = evaluate_i_n((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
     break;
 
-  case 220:
-#line 1577 "pir.y"
+  case 222:
+#line 1584 "pir.y"
     { (yyval.ival) = evaluate_n_i((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
     break;
 
-  case 221:
-#line 1579 "pir.y"
+  case 223:
+#line 1586 "pir.y"
     { (yyval.ival) = evaluate_n_n((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
     break;
 
-  case 222:
-#line 1581 "pir.y"
+  case 224:
+#line 1588 "pir.y"
     { (yyval.ival) = evaluate_s_s((yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 223:
-#line 1585 "pir.y"
+  case 225:
+#line 1592 "pir.y"
     {
                           yypirerror(yyscanner, lexer, "cannot compare string to %s",
                                      (yyvsp[(3) - (3)].ival) == INT_TYPE ? "integer" : "number");
                         ;}
     break;
 
-  case 224:
-#line 1590 "pir.y"
+  case 226:
+#line 1597 "pir.y"
     { yypirerror(yyscanner, lexer, "cannot compare integer to string"); ;}
     break;
 
-  case 225:
-#line 1592 "pir.y"
+  case 227:
+#line 1599 "pir.y"
     { yypirerror(yyscanner, lexer, "cannot compare number to string"); ;}
     break;
 
-  case 226:
-#line 1596 "pir.y"
+  case 228:
+#line 1603 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
-  case 227:
-#line 1597 "pir.y"
+  case 229:
+#line 1604 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
-  case 228:
-#line 1600 "pir.y"
+  case 230:
+#line 1607 "pir.y"
     { (yyval.ival) = DONT_INVERT_OPNAME; /* no need to invert */ ;}
     break;
 
-  case 229:
-#line 1601 "pir.y"
+  case 231:
+#line 1608 "pir.y"
     { (yyval.ival) = NEED_INVERT_OPNAME; /* yes, invert opname */ ;}
     break;
 
-  case 232:
-#line 1609 "pir.y"
+  case 234:
+#line 1616 "pir.y"
     {
                           set_instrf(lexer, "branch", "%I", (yyvsp[(2) - (3)].sval));
                           set_op_labelflag(lexer, BIT(0)); /* bit 0 means: "1 << 0" */
@@ -3837,38 +3846,38 @@
                         ;}
     break;
 
-  case 233:
-#line 1617 "pir.y"
+  case 235:
+#line 1624 "pir.y"
     { declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].symb)); ;}
     break;
 
-  case 234:
-#line 1621 "pir.y"
+  case 236:
+#line 1628 "pir.y"
     { (yyval.symb) = (yyvsp[(1) - (1)].symb); ;}
     break;
 
-  case 235:
-#line 1623 "pir.y"
+  case 237:
+#line 1630 "pir.y"
     { (yyval.symb) = add_local((yyvsp[(1) - (3)].symb), (yyvsp[(3) - (3)].symb)); ;}
     break;
 
-  case 236:
-#line 1627 "pir.y"
+  case 238:
+#line 1634 "pir.y"
     { (yyval.symb) = new_local(lexer, (yyvsp[(1) - (2)].sval), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 237:
-#line 1630 "pir.y"
+  case 239:
+#line 1637 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 238:
-#line 1631 "pir.y"
+  case 240:
+#line 1638 "pir.y"
     { (yyval.ival) = 1; ;}
     break;
 
-  case 239:
-#line 1635 "pir.y"
+  case 241:
+#line 1642 "pir.y"
     { /* if $4 is not a register, it must be a declared symbol */
                           if (!TEST_FLAG((yyvsp[(4) - (5)].targ)->flags, TARGET_FLAG_IS_REG)) {
 
@@ -3880,86 +3889,86 @@
                         ;}
     break;
 
-  case 240:
-#line 1650 "pir.y"
+  case 242:
+#line 1657 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
-  case 243:
-#line 1662 "pir.y"
+  case 245:
+#line 1669 "pir.y"
     { /* $4 contains an invocation object */
                               set_invocation_args(lexer, (yyvsp[(4) - (8)].invo), (yyvsp[(3) - (8)].argm));
                               (yyval.invo) = set_invocation_results(lexer, (yyvsp[(4) - (8)].invo), (yyvsp[(6) - (8)].targ));
                             ;}
     break;
 
-  case 244:
-#line 1669 "pir.y"
+  case 246:
+#line 1676 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 245:
-#line 1671 "pir.y"
+  case 247:
+#line 1678 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 246:
-#line 1675 "pir.y"
+  case 248:
+#line 1682 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 247:
-#line 1677 "pir.y"
+  case 249:
+#line 1684 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
-  case 248:
-#line 1681 "pir.y"
+  case 250:
+#line 1688 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 249:
-#line 1685 "pir.y"
+  case 251:
+#line 1692 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 250:
-#line 1687 "pir.y"
+  case 252:
+#line 1694 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
     break;
 
-  case 251:
-#line 1690 "pir.y"
+  case 253:
+#line 1697 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ), (yyvsp[(5) - (5)].expr)); ;}
     break;
 
-  case 252:
-#line 1694 "pir.y"
+  case 254:
+#line 1701 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 253:
-#line 1696 "pir.y"
+  case 255:
+#line 1703 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
     break;
 
-  case 254:
-#line 1700 "pir.y"
+  case 256:
+#line 1707 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 255:
-#line 1702 "pir.y"
+  case 257:
+#line 1709 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 256:
-#line 1706 "pir.y"
+  case 258:
+#line 1713 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 257:
-#line 1708 "pir.y"
+  case 259:
+#line 1715 "pir.y"
     {
                              if ((yyvsp[(2) - (2)].targ))
                                  (yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].targ));
@@ -3968,33 +3977,33 @@
                            ;}
     break;
 
-  case 258:
-#line 1717 "pir.y"
+  case 260:
+#line 1724 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
     break;
 
-  case 259:
-#line 1719 "pir.y"
+  case 261:
+#line 1726 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 261:
-#line 1727 "pir.y"
+  case 263:
+#line 1734 "pir.y"
     { (yyval.invo) = set_invocation_results(lexer, (yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
     break;
 
-  case 262:
-#line 1729 "pir.y"
+  case 264:
+#line 1736 "pir.y"
     { (yyval.invo) = set_invocation_results(lexer, (yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
     break;
 
-  case 263:
-#line 1731 "pir.y"
+  case 265:
+#line 1738 "pir.y"
     {  (yyval.invo) = set_invocation_results(lexer, (yyvsp[(1) - (1)].invo), NULL); ;}
     break;
 
-  case 266:
-#line 1739 "pir.y"
+  case 268:
+#line 1746 "pir.y"
     {
                              /* if $1 is not a register, check whether the symbol was declared */
                              if (!TEST_FLAG((yyvsp[(1) - (4)].targ)->flags, TARGET_FLAG_IS_REG)) {
@@ -4014,21 +4023,21 @@
                            ;}
     break;
 
-  case 267:
-#line 1759 "pir.y"
+  case 269:
+#line 1766 "pir.y"
     {
                              (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1) - (2)].targ), NULL);
                              set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (2)].argm));
                            ;}
     break;
 
-  case 268:
-#line 1766 "pir.y"
+  case 270:
+#line 1773 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 269:
-#line 1768 "pir.y"
+  case 271:
+#line 1775 "pir.y"
     {
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                              if (sym == NULL)
@@ -4038,8 +4047,8 @@
                            ;}
     break;
 
-  case 270:
-#line 1778 "pir.y"
+  case 272:
+#line 1785 "pir.y"
     { /* check that this identifier was declared */
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
 
@@ -4058,23 +4067,23 @@
                            ;}
     break;
 
-  case 271:
-#line 1795 "pir.y"
+  case 273:
+#line 1802 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival))); ;}
     break;
 
-  case 272:
-#line 1797 "pir.y"
+  case 274:
+#line 1804 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival))); ;}
     break;
 
-  case 273:
-#line 1799 "pir.y"
+  case 275:
+#line 1806 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval))); ;}
     break;
 
-  case 274:
-#line 1803 "pir.y"
+  case 276:
+#line 1810 "pir.y"
     {
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                              if (sym == NULL)
@@ -4085,96 +4094,96 @@
                            ;}
     break;
 
-  case 275:
-#line 1812 "pir.y"
+  case 277:
+#line 1819 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 276:
-#line 1817 "pir.y"
+  case 278:
+#line 1824 "pir.y"
     {
                              (yyval.targ) = (yyvsp[(2) - (3)].targ);
                            ;}
     break;
 
-  case 277:
-#line 1823 "pir.y"
+  case 279:
+#line 1830 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 278:
-#line 1825 "pir.y"
+  case 280:
+#line 1832 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 279:
-#line 1829 "pir.y"
+  case 281:
+#line 1836 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 280:
-#line 1831 "pir.y"
+  case 282:
+#line 1838 "pir.y"
     { (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 281:
-#line 1835 "pir.y"
+  case 283:
+#line 1842 "pir.y"
     { (yyval.targ) = set_param_flag(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 282:
-#line 1837 "pir.y"
+  case 284:
+#line 1844 "pir.y"
     { (yyval.targ) = set_param_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
     break;
 
-  case 283:
-#line 1841 "pir.y"
+  case 285:
+#line 1848 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 284:
-#line 1843 "pir.y"
+  case 286:
+#line 1850 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 285:
-#line 1847 "pir.y"
+  case 287:
+#line 1854 "pir.y"
     { (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
     break;
 
-  case 286:
-#line 1849 "pir.y"
+  case 288:
+#line 1856 "pir.y"
     { (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
     break;
 
-  case 287:
-#line 1851 "pir.y"
+  case 289:
+#line 1858 "pir.y"
     { (yyval.ival) = TARGET_FLAG_SLURPY; ;}
     break;
 
-  case 288:
-#line 1853 "pir.y"
+  case 290:
+#line 1860 "pir.y"
     {
                              (yyval.ival) = TARGET_FLAG_NAMED;
                              set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
                            ;}
     break;
 
-  case 289:
-#line 1863 "pir.y"
+  case 291:
+#line 1870 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
-  case 294:
-#line 1873 "pir.y"
+  case 296:
+#line 1880 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
                             ;}
     break;
 
-  case 295:
-#line 1878 "pir.y"
+  case 297:
+#line 1885 "pir.y"
     { /* was the invocation a method call? then it becomes a method tail
                                * call, otherwise it's just a normal (sub) tail call.
                                */
@@ -4185,200 +4194,200 @@
                             ;}
     break;
 
-  case 296:
-#line 1889 "pir.y"
+  case 298:
+#line 1896 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
                             ;}
     break;
 
-  case 297:
-#line 1896 "pir.y"
+  case 299:
+#line 1903 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 298:
-#line 1900 "pir.y"
+  case 300:
+#line 1907 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 299:
-#line 1902 "pir.y"
+  case 301:
+#line 1909 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 300:
-#line 1906 "pir.y"
+  case 302:
+#line 1913 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 301:
-#line 1908 "pir.y"
+  case 303:
+#line 1915 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
     break;
 
-  case 304:
-#line 1916 "pir.y"
+  case 306:
+#line 1923 "pir.y"
     { (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
     break;
 
-  case 305:
-#line 1920 "pir.y"
+  case 307:
+#line 1927 "pir.y"
     { (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 306:
-#line 1924 "pir.y"
+  case 308:
+#line 1931 "pir.y"
     { (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr)));  ;}
     break;
 
-  case 307:
-#line 1930 "pir.y"
+  case 309:
+#line 1937 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
                             ;}
     break;
 
-  case 308:
-#line 1939 "pir.y"
+  case 310:
+#line 1946 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
                             ;}
     break;
 
-  case 309:
-#line 1946 "pir.y"
+  case 311:
+#line 1953 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 310:
-#line 1948 "pir.y"
+  case 312:
+#line 1955 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 311:
-#line 1953 "pir.y"
+  case 313:
+#line 1960 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 312:
-#line 1955 "pir.y"
+  case 314:
+#line 1962 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
-  case 313:
-#line 1960 "pir.y"
+  case 315:
+#line 1967 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 314:
-#line 1964 "pir.y"
+  case 316:
+#line 1971 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 315:
-#line 1966 "pir.y"
+  case 317:
+#line 1973 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 316:
-#line 1970 "pir.y"
+  case 318:
+#line 1977 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 317:
-#line 1972 "pir.y"
+  case 319:
+#line 1979 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
-  case 318:
-#line 1976 "pir.y"
+  case 320:
+#line 1983 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 319:
-#line 1981 "pir.y"
+  case 321:
+#line 1988 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 320:
-#line 1983 "pir.y"
+  case 322:
+#line 1990 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 321:
-#line 1987 "pir.y"
+  case 323:
+#line 1994 "pir.y"
     { (yyval.ival) = ARG_FLAG_FLAT; ;}
     break;
 
-  case 322:
-#line 1989 "pir.y"
+  case 324:
+#line 1996 "pir.y"
     {
                                (yyval.ival) = ARG_FLAG_NAMED;
                                set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
                              ;}
     break;
 
-  case 323:
-#line 1996 "pir.y"
+  case 325:
+#line 2003 "pir.y"
     { (yyval.sval) = NULL; ;}
     break;
 
-  case 324:
-#line 1998 "pir.y"
+  case 326:
+#line 2005 "pir.y"
     { (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
     break;
 
-  case 325:
-#line 2002 "pir.y"
+  case 327:
+#line 2009 "pir.y"
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
-  case 327:
-#line 2009 "pir.y"
+  case 329:
+#line 2016 "pir.y"
     { store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
     break;
 
-  case 330:
-#line 2017 "pir.y"
+  case 332:
+#line 2024 "pir.y"
     { (yyval.cdec) = (yyvsp[(2) - (2)].cdec); ;}
     break;
 
-  case 333:
-#line 2025 "pir.y"
+  case 335:
+#line 2032 "pir.y"
     { store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
     break;
 
-  case 334:
-#line 2029 "pir.y"
+  case 336:
+#line 2036 "pir.y"
     { (yyval.cdec) = new_named_const(lexer, INT_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
     break;
 
-  case 335:
-#line 2031 "pir.y"
+  case 337:
+#line 2038 "pir.y"
     { (yyval.cdec) = new_named_const(lexer, NUM_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
     break;
 
-  case 336:
-#line 2033 "pir.y"
+  case 338:
+#line 2040 "pir.y"
     { (yyval.cdec) = new_named_const(lexer, STRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 337:
-#line 2035 "pir.y"
+  case 339:
+#line 2042 "pir.y"
     { (yyval.cdec) = new_named_const(lexer, USTRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ustr)); ;}
     break;
 
-  case 338:
-#line 2039 "pir.y"
+  case 340:
+#line 2046 "pir.y"
     { (yyval.cdec) = new_pmc_const(lexer, (yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
     break;
 
-  case 340:
-#line 2044 "pir.y"
+  case 342:
+#line 2051 "pir.y"
     { /* this alternative is necessary, otherwise the parser
                                * just stops when assigning an identifier to a pmc
                                * const, without an error message. That may be
@@ -4388,98 +4397,98 @@
                             ;}
     break;
 
-  case 341:
-#line 2056 "pir.y"
+  case 343:
+#line 2063 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
-  case 342:
-#line 2057 "pir.y"
+  case 344:
+#line 2064 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
-  case 343:
-#line 2061 "pir.y"
+  case 345:
+#line 2068 "pir.y"
     { (yyval.cval) = new_const(lexer, INT_VAL, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 344:
-#line 2062 "pir.y"
+  case 346:
+#line 2069 "pir.y"
     { (yyval.cval) = new_const(lexer, NUM_VAL, (yyvsp[(1) - (1)].dval)); ;}
     break;
 
-  case 345:
-#line 2063 "pir.y"
+  case 347:
+#line 2070 "pir.y"
     { (yyval.cval) = (yyvsp[(1) - (1)].cval); ;}
     break;
 
-  case 346:
-#line 2066 "pir.y"
+  case 348:
+#line 2073 "pir.y"
     { (yyval.cval) = new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 347:
-#line 2067 "pir.y"
+  case 349:
+#line 2074 "pir.y"
     { (yyval.cval) = new_const(lexer, USTRING_VAL, (yyvsp[(1) - (1)].ustr)); ;}
     break;
 
-  case 348:
-#line 2070 "pir.y"
+  case 350:
+#line 2077 "pir.y"
     { (yyval.ival) = OP_NE; ;}
     break;
 
-  case 349:
-#line 2071 "pir.y"
+  case 351:
+#line 2078 "pir.y"
     { (yyval.ival) = OP_EQ; ;}
     break;
 
-  case 350:
-#line 2072 "pir.y"
+  case 352:
+#line 2079 "pir.y"
     { (yyval.ival) = OP_LT; ;}
     break;
 
-  case 351:
-#line 2073 "pir.y"
+  case 353:
+#line 2080 "pir.y"
     { (yyval.ival) = OP_LE; ;}
     break;
 
-  case 352:
-#line 2074 "pir.y"
+  case 354:
+#line 2081 "pir.y"
     { (yyval.ival) = OP_GE; ;}
     break;
 
-  case 353:
-#line 2075 "pir.y"
+  case 355:
+#line 2082 "pir.y"
     { (yyval.ival) = OP_GT; ;}
     break;
 
-  case 354:
-#line 2078 "pir.y"
+  case 356:
+#line 2085 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
-  case 355:
-#line 2079 "pir.y"
+  case 357:
+#line 2086 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
-  case 356:
-#line 2080 "pir.y"
+  case 358:
+#line 2087 "pir.y"
     { (yyval.ival) = PMC_TYPE; ;}
     break;
 
-  case 357:
-#line 2081 "pir.y"
+  case 359:
+#line 2088 "pir.y"
     { (yyval.ival) = STRING_TYPE; ;}
     break;
 
-  case 358:
-#line 2089 "pir.y"
+  case 360:
+#line 2096 "pir.y"
     { set_curtarget(lexer, (yyvsp[(1) - (1)].targ));  ;}
     break;
 
-  case 360:
-#line 2093 "pir.y"
+  case 362:
+#line 2100 "pir.y"
     { /* a symbol must have been declared; check that at this point. */
                            symbol * sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                            if (sym == NULL) {
@@ -4493,278 +4502,278 @@
                          ;}
     break;
 
-  case 361:
-#line 2106 "pir.y"
+  case 363:
+#line 2113 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 362:
-#line 2107 "pir.y"
+  case 364:
+#line 2114 "pir.y"
     { (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 363:
-#line 2108 "pir.y"
+  case 365:
+#line 2115 "pir.y"
     { (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 364:
-#line 2109 "pir.y"
+  case 366:
+#line 2116 "pir.y"
     { (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 367:
-#line 2117 "pir.y"
+  case 369:
+#line 2124 "pir.y"
     { (yyval.sval) = "if"; ;}
     break;
 
-  case 368:
-#line 2118 "pir.y"
+  case 370:
+#line 2125 "pir.y"
     { (yyval.sval) = "unless"; ;}
     break;
 
-  case 369:
-#line 2119 "pir.y"
+  case 371:
+#line 2126 "pir.y"
     { (yyval.sval) = "goto"; ;}
     break;
 
-  case 370:
-#line 2120 "pir.y"
+  case 372:
+#line 2127 "pir.y"
     { (yyval.sval) = "int"; ;}
     break;
 
-  case 371:
-#line 2121 "pir.y"
+  case 373:
+#line 2128 "pir.y"
     { (yyval.sval) = "num"; ;}
     break;
 
-  case 372:
-#line 2122 "pir.y"
+  case 374:
+#line 2129 "pir.y"
     { (yyval.sval) = "string"; ;}
     break;
 
-  case 373:
-#line 2123 "pir.y"
+  case 375:
+#line 2130 "pir.y"
     { (yyval.sval) = "pmc"; ;}
     break;
 
-  case 374:
-#line 2124 "pir.y"
+  case 376:
+#line 2131 "pir.y"
     { (yyval.sval) = "null"; ;}
     break;
 
-  case 375:
-#line 2127 "pir.y"
+  case 377:
+#line 2134 "pir.y"
     { (yyval.sval) = "neg"; ;}
     break;
 
-  case 376:
-#line 2128 "pir.y"
+  case 378:
+#line 2135 "pir.y"
     { (yyval.sval) = "not"; ;}
     break;
 
-  case 377:
-#line 2129 "pir.y"
+  case 379:
+#line 2136 "pir.y"
     { (yyval.sval) = "bnot"; ;}
     break;
 
-  case 378:
-#line 2132 "pir.y"
+  case 380:
+#line 2139 "pir.y"
     { (yyval.ival) = OP_ADD; ;}
     break;
 
-  case 379:
-#line 2133 "pir.y"
+  case 381:
+#line 2140 "pir.y"
     { (yyval.ival) = OP_SUB; ;}
     break;
 
-  case 380:
-#line 2134 "pir.y"
+  case 382:
+#line 2141 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 381:
-#line 2135 "pir.y"
+  case 383:
+#line 2142 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 382:
-#line 2136 "pir.y"
+  case 384:
+#line 2143 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 383:
-#line 2137 "pir.y"
+  case 385:
+#line 2144 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 384:
-#line 2138 "pir.y"
+  case 386:
+#line 2145 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 385:
-#line 2139 "pir.y"
+  case 387:
+#line 2146 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 386:
-#line 2140 "pir.y"
+  case 388:
+#line 2147 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 387:
-#line 2141 "pir.y"
+  case 389:
+#line 2148 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 388:
-#line 2142 "pir.y"
+  case 390:
+#line 2149 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 389:
-#line 2143 "pir.y"
+  case 391:
+#line 2150 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 390:
-#line 2144 "pir.y"
+  case 392:
+#line 2151 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 391:
-#line 2145 "pir.y"
+  case 393:
+#line 2152 "pir.y"
     { (yyval.ival) = OP_OR; ;}
     break;
 
-  case 392:
-#line 2146 "pir.y"
+  case 394:
+#line 2153 "pir.y"
     { (yyval.ival) = OP_AND; ;}
     break;
 
-  case 393:
-#line 2147 "pir.y"
+  case 395:
+#line 2154 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 394:
-#line 2148 "pir.y"
+  case 396:
+#line 2155 "pir.y"
     { (yyval.ival) = OP_XOR; ;}
     break;
 
-  case 395:
-#line 2149 "pir.y"
+  case 397:
+#line 2156 "pir.y"
     { (yyval.ival) = OP_ISEQ; ;}
     break;
 
-  case 396:
-#line 2150 "pir.y"
+  case 398:
+#line 2157 "pir.y"
     { (yyval.ival) = OP_ISLE; ;}
     break;
 
-  case 397:
-#line 2151 "pir.y"
+  case 399:
+#line 2158 "pir.y"
     { (yyval.ival) = OP_ISLT; ;}
     break;
 
-  case 398:
-#line 2152 "pir.y"
+  case 400:
+#line 2159 "pir.y"
     { (yyval.ival) = OP_ISGE; ;}
     break;
 
-  case 399:
-#line 2153 "pir.y"
+  case 401:
+#line 2160 "pir.y"
     { (yyval.ival) = OP_ISGT; ;}
     break;
 
-  case 400:
-#line 2154 "pir.y"
+  case 402:
+#line 2161 "pir.y"
     { (yyval.ival) = OP_ISNE; ;}
     break;
 
-  case 401:
-#line 2160 "pir.y"
+  case 403:
+#line 2167 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 402:
-#line 2161 "pir.y"
+  case 404:
+#line 2168 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 403:
-#line 2162 "pir.y"
+  case 405:
+#line 2169 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 404:
-#line 2163 "pir.y"
+  case 406:
+#line 2170 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 405:
-#line 2164 "pir.y"
+  case 407:
+#line 2171 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 406:
-#line 2165 "pir.y"
+  case 408:
+#line 2172 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 407:
-#line 2166 "pir.y"
+  case 409:
+#line 2173 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 408:
-#line 2167 "pir.y"
+  case 410:
+#line 2174 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 409:
-#line 2168 "pir.y"
+  case 411:
+#line 2175 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 410:
-#line 2169 "pir.y"
+  case 412:
+#line 2176 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 411:
-#line 2170 "pir.y"
+  case 413:
+#line 2177 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 412:
-#line 2171 "pir.y"
+  case 414:
+#line 2178 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 414:
-#line 2192 "pir.y"
+  case 416:
+#line 2199 "pir.y"
     { new_subr(lexer, "@start"); ;}
     break;
 
-  case 423:
-#line 2208 "pir.y"
+  case 425:
+#line 2215 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
-  case 428:
-#line 2218 "pir.y"
+  case 430:
+#line 2225 "pir.y"
     { set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 429:
-#line 2222 "pir.y"
+  case 431:
+#line 2229 "pir.y"
     { new_subr(lexer, NULL); ;}
     break;
 
-  case 430:
-#line 2227 "pir.y"
+  case 432:
+#line 2234 "pir.y"
     {
 
                                   if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval))) {
@@ -4779,7 +4788,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 4783 "pirparser.c"
+#line 4792 "pirparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4993,7 +5002,7 @@
 }
 
 
-#line 2241 "pir.y"
+#line 2248 "pir.y"
 
 
 

Modified: trunk/compilers/pirc/src/pirparser.h
==============================================================================
--- trunk/compilers/pirc/src/pirparser.h	(original)
+++ trunk/compilers/pirc/src/pirparser.h	Sun Jan 11 15:13:58 2009
@@ -140,21 +140,22 @@
      TK_FLAG_OPTIONAL = 356,
      TK_FLAG_OPT_FLAG = 357,
      TK_FLAG_INVOCANT = 358,
-     TK_MACRO = 359,
-     TK_ENDM = 360,
-     TK_MACRO_LOCAL = 361,
-     TK_MACRO_LABEL = 362,
-     TK_MACRO_CONST = 363,
-     TK_MACRO_LABEL_ID = 364,
-     TK_MACRO_LOCAL_ID = 365,
-     TK_MACRO_IDENT = 366,
-     TK_MACRO_ARG_IDENT = 367,
-     TK_MACRO_ARG_OTHER = 368,
-     TK_MACRO_CONST_VAL = 369,
-     TK_PASM_MARKER_START = 370,
-     TK_PIR_MARKER_START = 371,
-     TK_PCC_SUB = 372,
-     TK_PARROT_OP = 373
+     TK_FLAG_LOOKAHEAD = 359,
+     TK_MACRO = 360,
+     TK_ENDM = 361,
+     TK_MACRO_LOCAL = 362,
+     TK_MACRO_LABEL = 363,
+     TK_MACRO_CONST = 364,
+     TK_MACRO_LABEL_ID = 365,
+     TK_MACRO_LOCAL_ID = 366,
+     TK_MACRO_IDENT = 367,
+     TK_MACRO_ARG_IDENT = 368,
+     TK_MACRO_ARG_OTHER = 369,
+     TK_MACRO_CONST_VAL = 370,
+     TK_PASM_MARKER_START = 371,
+     TK_PIR_MARKER_START = 372,
+     TK_PCC_SUB = 373,
+     TK_PARROT_OP = 374
    };
 #endif
 /* Tokens.  */
@@ -259,21 +260,22 @@
 #define TK_FLAG_OPTIONAL 356
 #define TK_FLAG_OPT_FLAG 357
 #define TK_FLAG_INVOCANT 358
-#define TK_MACRO 359
-#define TK_ENDM 360
-#define TK_MACRO_LOCAL 361
-#define TK_MACRO_LABEL 362
-#define TK_MACRO_CONST 363
-#define TK_MACRO_LABEL_ID 364
-#define TK_MACRO_LOCAL_ID 365
-#define TK_MACRO_IDENT 366
-#define TK_MACRO_ARG_IDENT 367
-#define TK_MACRO_ARG_OTHER 368
-#define TK_MACRO_CONST_VAL 369
-#define TK_PASM_MARKER_START 370
-#define TK_PIR_MARKER_START 371
-#define TK_PCC_SUB 372
-#define TK_PARROT_OP 373
+#define TK_FLAG_LOOKAHEAD 359
+#define TK_MACRO 360
+#define TK_ENDM 361
+#define TK_MACRO_LOCAL 362
+#define TK_MACRO_LABEL 363
+#define TK_MACRO_CONST 364
+#define TK_MACRO_LABEL_ID 365
+#define TK_MACRO_LOCAL_ID 366
+#define TK_MACRO_IDENT 367
+#define TK_MACRO_ARG_IDENT 368
+#define TK_MACRO_ARG_OTHER 369
+#define TK_MACRO_CONST_VAL 370
+#define TK_PASM_MARKER_START 371
+#define TK_PIR_MARKER_START 372
+#define TK_PCC_SUB 373
+#define TK_PARROT_OP 374
 
 
 
@@ -300,7 +302,7 @@
     struct macro_param *pval;
 }
 /* Line 1489 of yacc.c.  */
-#line 304 "pirparser.h"
+#line 306 "pirparser.h"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About