develooper Front page | perl.cvs.parrot | Postings from December 2008

[svn:parrot] r34083 - in trunk/compilers/pirc: new t

From:
kjs
Date:
December 18, 2008 13:44
Subject:
[svn:parrot] r34083 - in trunk/compilers/pirc: new t
Message ID:
20081218214349.842F7CBA12@x12.develooper.com
Author: kjs
Date: Thu Dec 18 13:43:48 2008
New Revision: 34083

Modified:
   trunk/compilers/pirc/new/pir.y
   trunk/compilers/pirc/new/pirparser.c
   trunk/compilers/pirc/new/pirparser.h
   trunk/compilers/pirc/t/stmts.t

Log:
[pirc] fix parser; some missing rules. 
+ update a test

Modified: trunk/compilers/pirc/new/pir.y
==============================================================================
--- trunk/compilers/pirc/new/pir.y	(original)
+++ trunk/compilers/pirc/new/pir.y	Thu Dec 18 13:43:48 2008
@@ -46,12 +46,6 @@
 
 =cut
 
-TODO:
-1. test the parser.
-2. generate PBC, using Parrot_PackFile (and related) data structures.
-3. handle branch/invoke instructions to calculate offsets etc.
-4. handle freezing of PMC constants (representing subs)
-
 */
 
 #include <stdio.h>
@@ -528,7 +522,7 @@
  *   action.
  */
 
-/* Top-level rule */
+/* start rule */
 %start TOP
 
 
@@ -1119,11 +1113,54 @@
                           set_instrf(lexer, "set", "%T%s", $1, $3);
                           get_opinfo(yyscanner);
                         }
+                  | target '=' reg
+                        {
+                          set_instrf(lexer, "set", "%T%T", $1, $3);
+                          get_opinfo(yyscanner);
+                        }
+                  | target '=' TK_IDENT
+                        {
+                          symbol *sym = find_symbol(lexer, $3);
+                          if (sym) {
+                              set_instrf(lexer, "set", "%T%T", $1, target_from_symbol(lexer, sym));
+                              get_opinfo(yyscanner);
+                          }
+                          else { /* not a symbol */
+                              if (is_parrot_op(lexer, $3)) {
+                                  set_instrf(lexer, $3, "%T", $1);
+                                  get_opinfo(yyscanner);
+                              }
+                              else {
+                                  yypirerror(yyscanner, lexer, "'%s' is neither a declared symbol "
+                                             "nor a parrot opcode", $3);
+                              }
+                          }
+                        }
+                  | target '=' keyword
+                        {
+                          symbol *sym = find_symbol(lexer, $3);
+                          if (sym) {
+                              set_instrf(lexer, "set", "%T%T", $1, target_from_symbol(lexer, sym));
+                              get_opinfo(yyscanner);
+                          }
+                          else { /* not a symbol */
+                              if (is_parrot_op(lexer, $3)) {
+                                  set_instrf(lexer, $3, "%T", $1);
+                                  get_opinfo(yyscanner);
+                              }
+                              else {
+                                  yypirerror(yyscanner, lexer, "'%s' is neither a declared symbol "
+                                             "nor a parrot opcode", $3);
+                              }
+                          }
+                        }
                   | target '=' binary_expr
                         {
                           unshift_operand(lexer, expr_from_target(lexer, $1));
                           get_opinfo(yyscanner);
                         }
+                  /*********
+                  XXX I think this can be removed alltogether. Fix later.
                   | target '=' parrot_op
                         {
                           symbol *sym = find_symbol(lexer, $3);
@@ -1131,13 +1168,13 @@
                               if (!is_parrot_op(lexer, $3))
                                   yypirerror(yyscanner, lexer, "'%s' is neither a declared symbol "
                                                                "nor a parrot opcode", $3);
-                              else { /* handle it as an op */
+                              else {
                                   unshift_operand(lexer, expr_from_target(lexer, $1));
                                   get_opinfo(yyscanner);
                                   check_first_arg_direction(yyscanner, $3);
                               }
                           }
-                          else { /* handle it as a symbol */
+                          else {
                               update_instr(lexer, "set");
                               unshift_operand(lexer, expr_from_target(lexer,
                                                      target_from_symbol(lexer, sym)));
@@ -1145,6 +1182,7 @@
                               get_opinfo(yyscanner);
                           }
                         }
+                  *********/
                   | target '=' parrot_op keylist
                         {
                           /*   $P0 = foo ["bar"]
@@ -2021,7 +2059,6 @@
                                sym = new_symbol(lexer, $1, UNKNOWN_TYPE);
                            }
                            $$ = target_from_symbol(lexer, sym);
-
                          }
             ;
 

Modified: trunk/compilers/pirc/new/pirparser.c
==============================================================================
--- trunk/compilers/pirc/new/pirparser.c	(original)
+++ trunk/compilers/pirc/new/pirparser.c	Thu Dec 18 13:43:48 2008
@@ -361,12 +361,6 @@
 
 =cut
 
-TODO:
-1. test the parser.
-2. generate PBC, using Parrot_PackFile (and related) data structures.
-3. handle branch/invoke instructions to calculate offsets etc.
-4. handle freezing of PMC constants (representing subs)
-
 */
 
 #include <stdio.h>
@@ -567,7 +561,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 238 "pir.y"
+#line 232 "pir.y"
 {
     double              dval;
     int                 ival;
@@ -584,7 +578,7 @@
     struct macro_param *pval;
 }
 /* Line 187 of yacc.c.  */
-#line 588 "pirparser.c"
+#line 582 "pirparser.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -597,7 +591,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 601 "pirparser.c"
+#line 595 "pirparser.c"
 
 #ifdef short
 # undef short
@@ -812,16 +806,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  10
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   981
+#define YYLAST   1053
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  138
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  162
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  412
+#define YYNRULES  414
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  643
+#define YYNSTATES  645
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -893,33 +887,33 @@
      301,   303,   305,   308,   310,   313,   316,   320,   324,   327,
      330,   332,   334,   336,   338,   339,   341,   343,   347,   351,
      353,   355,   357,   359,   361,   363,   366,   370,   372,   376,
-     383,   388,   395,   398,   402,   406,   410,   414,   418,   423,
-     428,   433,   437,   441,   445,   449,   453,   457,   461,   466,
-     472,   477,   482,   486,   490,   494,   498,   502,   506,   510,
-     514,   517,   523,   529,   535,   541,   547,   553,   559,   565,
-     571,   576,   582,   587,   592,   597,   602,   607,   612,   617,
-     622,   627,   632,   637,   642,   647,   651,   655,   659,   663,
-     667,   671,   675,   679,   683,   687,   691,   695,   697,   699,
-     701,   703,   705,   707,   711,   716,   718,   722,   725,   726,
-     728,   734,   736,   738,   740,   749,   750,   752,   754,   757,
-     761,   765,   768,   774,   775,   778,   779,   781,   783,   786,
-     790,   792,   795,   799,   803,   805,   807,   809,   814,   817,
-     819,   821,   823,   825,   827,   829,   831,   833,   837,   838,
-     840,   842,   846,   849,   850,   853,   855,   857,   859,   862,
-     864,   866,   868,   870,   872,   876,   880,   884,   888,   889,
-     891,   893,   897,   899,   901,   905,   908,   910,   916,   922,
-     923,   925,   927,   930,   934,   935,   937,   939,   942,   946,
-     947,   950,   952,   955,   956,   958,   962,   965,   967,   969,
-     972,   975,   980,   985,   990,   995,   997,   999,  1001,  1003,
-    1005,  1007,  1009,  1011,  1013,  1015,  1017,  1019,  1021,  1023,
-    1025,  1027,  1029,  1031,  1033,  1035,  1037,  1039,  1041,  1043,
-    1045,  1047,  1049,  1051,  1053,  1055,  1057,  1059,  1061,  1063,
-    1065,  1067,  1069,  1071,  1073,  1075,  1077,  1079,  1081,  1083,
-    1085,  1087,  1089,  1091,  1093,  1095,  1097,  1099,  1101,  1103,
-    1105,  1107,  1109,  1111,  1113,  1115,  1117,  1119,  1121,  1123,
-    1125,  1127,  1129,  1131,  1133,  1135,  1138,  1140,  1142,  1145,
-    1147,  1150,  1152,  1155,  1158,  1160,  1163,  1166,  1168,  1170,
-    1172,  1176,  1178
+     383,   388,   395,   398,   402,   406,   410,   414,   418,   422,
+     426,   431,   436,   441,   445,   449,   453,   457,   461,   465,
+     469,   474,   480,   485,   490,   494,   498,   502,   506,   510,
+     514,   518,   522,   525,   531,   537,   543,   549,   555,   561,
+     567,   573,   579,   584,   590,   595,   600,   605,   610,   615,
+     620,   625,   630,   635,   640,   645,   650,   655,   659,   663,
+     667,   671,   675,   679,   683,   687,   691,   695,   699,   703,
+     705,   707,   709,   711,   713,   715,   719,   724,   726,   730,
+     733,   734,   736,   742,   744,   746,   748,   757,   758,   760,
+     762,   765,   769,   773,   776,   782,   783,   786,   787,   789,
+     791,   794,   798,   800,   803,   807,   811,   813,   815,   817,
+     822,   825,   827,   829,   831,   833,   835,   837,   839,   841,
+     845,   846,   848,   850,   854,   857,   858,   861,   863,   865,
+     867,   870,   872,   874,   876,   878,   880,   884,   888,   892,
+     896,   897,   899,   901,   905,   907,   909,   913,   916,   918,
+     924,   930,   931,   933,   935,   938,   942,   943,   945,   947,
+     950,   954,   955,   958,   960,   963,   964,   966,   970,   973,
+     975,   977,   980,   983,   988,   993,   998,  1003,  1005,  1007,
+    1009,  1011,  1013,  1015,  1017,  1019,  1021,  1023,  1025,  1027,
+    1029,  1031,  1033,  1035,  1037,  1039,  1041,  1043,  1045,  1047,
+    1049,  1051,  1053,  1055,  1057,  1059,  1061,  1063,  1065,  1067,
+    1069,  1071,  1073,  1075,  1077,  1079,  1081,  1083,  1085,  1087,
+    1089,  1091,  1093,  1095,  1097,  1099,  1101,  1103,  1105,  1107,
+    1109,  1111,  1113,  1115,  1117,  1119,  1121,  1123,  1125,  1127,
+    1129,  1131,  1133,  1135,  1137,  1139,  1141,  1143,  1146,  1148,
+    1150,  1153,  1155,  1158,  1160,  1163,  1166,  1168,  1171,  1174,
+    1176,  1178,  1180,  1184,  1186
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -966,131 +960,131 @@
      120,   203,    -1,   283,   121,   200,   206,    -1,   283,   121,
      200,   208,   120,   203,    -1,   212,    35,    -1,   283,   121,
       47,    -1,   283,   121,    48,    -1,   283,   121,    46,    -1,
-     283,   121,   213,    -1,   283,   121,   200,    -1,   283,   121,
-     200,   208,    -1,   283,   121,   287,   208,    -1,   283,   121,
-      49,   208,    -1,   283,   290,   279,    -1,   283,    71,    47,
-      -1,   283,    71,    48,    -1,   283,    72,    47,    -1,   283,
-      72,    48,    -1,   283,    71,   283,    -1,   283,    72,   283,
-      -1,   283,   121,   288,   279,    -1,   283,   121,   283,   289,
-     279,    -1,   287,   208,   121,   279,    -1,    49,   208,   121,
-     279,    -1,    47,   289,   283,    -1,    48,   289,   283,    -1,
-      46,   289,   283,    -1,    46,   289,    46,    -1,    47,   289,
-      47,    -1,    48,   289,    48,    -1,    47,   289,    48,    -1,
-      48,   289,    47,    -1,   215,    35,    -1,   218,    44,    37,
-      45,   286,    -1,   218,    44,    38,    45,   286,    -1,   218,
-      44,    39,    45,   286,    -1,   218,    44,    40,    45,   286,
-      -1,   218,    44,    41,    45,   286,    -1,   218,    44,    42,
-      45,   286,    -1,   218,    44,    43,    45,   286,    -1,   218,
-      44,    45,    45,   286,    -1,   218,    44,    44,    45,   286,
-      -1,   218,   280,   219,   286,    -1,   218,    44,    49,   219,
-     286,    -1,   218,    37,   219,   286,    -1,   218,   285,   219,
-     286,    -1,   218,    38,   219,   286,    -1,   218,    39,   219,
-     286,    -1,   218,    40,   219,   286,    -1,   218,    41,   219,
-     286,    -1,   218,    42,   219,   286,    -1,   218,    43,   219,
-     286,    -1,   218,    45,    45,   286,    -1,   218,    45,   120,
-     286,    -1,   218,    44,    45,   286,    -1,   218,    44,   120,
-     286,    -1,   218,   216,    45,   286,    -1,   283,   281,   279,
-      -1,    47,   281,   283,    -1,    48,   281,   283,    -1,    46,
-     281,   283,    -1,    47,   281,    47,    -1,    47,   281,    48,
-      -1,    48,   281,    47,    -1,    48,   281,    48,    -1,    46,
-     281,    46,    -1,    46,   281,   217,    -1,    47,   281,    46,
-      -1,    48,   281,    46,    -1,    47,    -1,    48,    -1,    42,
-      -1,    43,    -1,    45,    -1,   120,    -1,    45,   286,    35,
-      -1,    12,   282,   222,    35,    -1,   223,    -1,   222,   120,
-     223,    -1,   286,   224,    -1,    -1,    96,    -1,     9,    46,
-     120,   244,    35,    -1,   227,    -1,   228,    -1,   237,    -1,
-      26,    35,   229,   232,    35,   234,    27,    35,    -1,    -1,
-     230,    -1,   231,    -1,   230,   231,    -1,    30,   260,    35,
-      -1,    29,   244,   233,    -1,    32,   244,    -1,    14,   244,
-      35,    15,   243,    -1,    -1,   120,   244,    -1,    -1,   235,
-      -1,   236,    -1,   235,   236,    -1,    31,   248,    35,    -1,
-     221,    -1,   238,    35,    -1,   245,   121,   239,    -1,   283,
-     121,   239,    -1,   239,    -1,   241,    -1,   240,    -1,   244,
-     127,   243,   255,    -1,   242,   255,    -1,   244,    -1,    46,
-      -1,   286,    -1,    49,    -1,    51,    -1,    46,    -1,   286,
-      -1,    49,    -1,   118,   246,   119,    -1,    -1,   247,    -1,
-     248,    -1,   247,   120,   248,    -1,   283,   249,    -1,    -1,
-     249,   250,    -1,   100,    -1,   101,    -1,    98,    -1,    97,
-     272,    -1,   252,    -1,   253,    -1,   262,    -1,   254,    -1,
-     263,    -1,    18,   255,    35,    -1,    33,   239,    35,    -1,
-      19,   255,    35,    -1,   118,   256,   119,    -1,    -1,   257,
-      -1,   258,    -1,   257,   120,   258,    -1,   260,    -1,   259,
-      -1,    46,    53,   261,    -1,   261,   270,    -1,   279,    -1,
-      24,    35,   267,    25,    35,    -1,    22,    35,   264,    23,
-      35,    -1,    -1,   265,    -1,   266,    -1,   265,   266,    -1,
-      20,   260,    35,    -1,    -1,   268,    -1,   269,    -1,   268,
-     269,    -1,    21,   260,    35,    -1,    -1,   270,   271,    -1,
-      99,    -1,    97,   272,    -1,    -1,   273,    -1,   118,    46,
-     119,    -1,   275,    35,    -1,   276,    -1,   277,    -1,    17,
-     278,    -1,    16,   278,    -1,    38,   286,   121,    47,    -1,
-      39,   286,   121,    48,    -1,    41,   286,   121,    46,    -1,
-      46,   286,   121,   280,    -1,   283,    -1,   280,    -1,    46,
-      -1,    47,    -1,    48,    -1,    54,    -1,    55,    -1,    56,
-      -1,    57,    -1,    59,    -1,    58,    -1,    38,    -1,    39,
-      -1,    40,    -1,    41,    -1,   284,    -1,   285,    -1,   286,
-      -1,    49,    -1,    50,    -1,    52,    -1,    51,    -1,    37,
-      -1,   287,    -1,    42,    -1,    43,    -1,    45,    -1,    38,
-      -1,    39,    -1,    41,    -1,    40,    -1,    44,    -1,   128,
-      -1,   129,    -1,   130,    -1,   131,    -1,   128,    -1,   132,
-      -1,   133,    -1,   134,    -1,   135,    -1,   136,    -1,   130,
-      -1,   137,    -1,    67,    -1,    60,    -1,    61,    -1,    62,
-      -1,    64,    -1,    65,    -1,    63,    -1,    66,    -1,    55,
-      -1,    57,    -1,    56,    -1,    59,    -1,    58,    -1,    54,
-      -1,    73,    -1,    74,    -1,    75,    -1,    76,    -1,    79,
-      -1,    77,    -1,    78,    -1,    80,    -1,    81,    -1,    69,
-      -1,    70,    -1,    68,    -1,   292,   293,    -1,   141,    -1,
-     294,    -1,   293,   294,    -1,   295,    -1,   162,    35,    -1,
-     225,    -1,   158,    35,    -1,   144,    35,    -1,   185,    -1,
-      36,   296,    -1,   297,   296,    -1,   299,    -1,   193,    -1,
-     299,    -1,   298,   170,    36,    -1,   116,    -1,   200,   202,
-      35,    -1
+     283,   121,   285,    -1,   283,   121,    37,    -1,   283,   121,
+     287,    -1,   283,   121,   213,    -1,   283,   121,   200,   208,
+      -1,   283,   121,   287,   208,    -1,   283,   121,    49,   208,
+      -1,   283,   290,   279,    -1,   283,    71,    47,    -1,   283,
+      71,    48,    -1,   283,    72,    47,    -1,   283,    72,    48,
+      -1,   283,    71,   283,    -1,   283,    72,   283,    -1,   283,
+     121,   288,   279,    -1,   283,   121,   283,   289,   279,    -1,
+     287,   208,   121,   279,    -1,    49,   208,   121,   279,    -1,
+      47,   289,   283,    -1,    48,   289,   283,    -1,    46,   289,
+     283,    -1,    46,   289,    46,    -1,    47,   289,    47,    -1,
+      48,   289,    48,    -1,    47,   289,    48,    -1,    48,   289,
+      47,    -1,   215,    35,    -1,   218,    44,    37,    45,   286,
+      -1,   218,    44,    38,    45,   286,    -1,   218,    44,    39,
+      45,   286,    -1,   218,    44,    40,    45,   286,    -1,   218,
+      44,    41,    45,   286,    -1,   218,    44,    42,    45,   286,
+      -1,   218,    44,    43,    45,   286,    -1,   218,    44,    45,
+      45,   286,    -1,   218,    44,    44,    45,   286,    -1,   218,
+     280,   219,   286,    -1,   218,    44,    49,   219,   286,    -1,
+     218,    37,   219,   286,    -1,   218,   285,   219,   286,    -1,
+     218,    38,   219,   286,    -1,   218,    39,   219,   286,    -1,
+     218,    40,   219,   286,    -1,   218,    41,   219,   286,    -1,
+     218,    42,   219,   286,    -1,   218,    43,   219,   286,    -1,
+     218,    45,    45,   286,    -1,   218,    45,   120,   286,    -1,
+     218,    44,    45,   286,    -1,   218,    44,   120,   286,    -1,
+     218,   216,    45,   286,    -1,   283,   281,   279,    -1,    47,
+     281,   283,    -1,    48,   281,   283,    -1,    46,   281,   283,
+      -1,    47,   281,    47,    -1,    47,   281,    48,    -1,    48,
+     281,    47,    -1,    48,   281,    48,    -1,    46,   281,    46,
+      -1,    46,   281,   217,    -1,    47,   281,    46,    -1,    48,
+     281,    46,    -1,    47,    -1,    48,    -1,    42,    -1,    43,
+      -1,    45,    -1,   120,    -1,    45,   286,    35,    -1,    12,
+     282,   222,    35,    -1,   223,    -1,   222,   120,   223,    -1,
+     286,   224,    -1,    -1,    96,    -1,     9,    46,   120,   244,
+      35,    -1,   227,    -1,   228,    -1,   237,    -1,    26,    35,
+     229,   232,    35,   234,    27,    35,    -1,    -1,   230,    -1,
+     231,    -1,   230,   231,    -1,    30,   260,    35,    -1,    29,
+     244,   233,    -1,    32,   244,    -1,    14,   244,    35,    15,
+     243,    -1,    -1,   120,   244,    -1,    -1,   235,    -1,   236,
+      -1,   235,   236,    -1,    31,   248,    35,    -1,   221,    -1,
+     238,    35,    -1,   245,   121,   239,    -1,   283,   121,   239,
+      -1,   239,    -1,   241,    -1,   240,    -1,   244,   127,   243,
+     255,    -1,   242,   255,    -1,   244,    -1,    46,    -1,   286,
+      -1,    49,    -1,    51,    -1,    46,    -1,   286,    -1,    49,
+      -1,   118,   246,   119,    -1,    -1,   247,    -1,   248,    -1,
+     247,   120,   248,    -1,   283,   249,    -1,    -1,   249,   250,
+      -1,   100,    -1,   101,    -1,    98,    -1,    97,   272,    -1,
+     252,    -1,   253,    -1,   262,    -1,   254,    -1,   263,    -1,
+      18,   255,    35,    -1,    33,   239,    35,    -1,    19,   255,
+      35,    -1,   118,   256,   119,    -1,    -1,   257,    -1,   258,
+      -1,   257,   120,   258,    -1,   260,    -1,   259,    -1,    46,
+      53,   261,    -1,   261,   270,    -1,   279,    -1,    24,    35,
+     267,    25,    35,    -1,    22,    35,   264,    23,    35,    -1,
+      -1,   265,    -1,   266,    -1,   265,   266,    -1,    20,   260,
+      35,    -1,    -1,   268,    -1,   269,    -1,   268,   269,    -1,
+      21,   260,    35,    -1,    -1,   270,   271,    -1,    99,    -1,
+      97,   272,    -1,    -1,   273,    -1,   118,    46,   119,    -1,
+     275,    35,    -1,   276,    -1,   277,    -1,    17,   278,    -1,
+      16,   278,    -1,    38,   286,   121,    47,    -1,    39,   286,
+     121,    48,    -1,    41,   286,   121,    46,    -1,    46,   286,
+     121,   280,    -1,   283,    -1,   280,    -1,    46,    -1,    47,
+      -1,    48,    -1,    54,    -1,    55,    -1,    56,    -1,    57,
+      -1,    59,    -1,    58,    -1,    38,    -1,    39,    -1,    40,
+      -1,    41,    -1,   284,    -1,   285,    -1,   286,    -1,    49,
+      -1,    50,    -1,    52,    -1,    51,    -1,    37,    -1,   287,
+      -1,    42,    -1,    43,    -1,    45,    -1,    38,    -1,    39,
+      -1,    41,    -1,    40,    -1,    44,    -1,   128,    -1,   129,
+      -1,   130,    -1,   131,    -1,   128,    -1,   132,    -1,   133,
+      -1,   134,    -1,   135,    -1,   136,    -1,   130,    -1,   137,
+      -1,    67,    -1,    60,    -1,    61,    -1,    62,    -1,    64,
+      -1,    65,    -1,    63,    -1,    66,    -1,    55,    -1,    57,
+      -1,    56,    -1,    59,    -1,    58,    -1,    54,    -1,    73,
+      -1,    74,    -1,    75,    -1,    76,    -1,    79,    -1,    77,
+      -1,    78,    -1,    80,    -1,    81,    -1,    69,    -1,    70,
+      -1,    68,    -1,   292,   293,    -1,   141,    -1,   294,    -1,
+     293,   294,    -1,   295,    -1,   162,    35,    -1,   225,    -1,
+     158,    35,    -1,   144,    35,    -1,   185,    -1,    36,   296,
+      -1,   297,   296,    -1,   299,    -1,   193,    -1,   299,    -1,
+     298,   170,    36,    -1,   116,    -1,   200,   202,    35,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   544,   544,   545,   550,   556,   557,   560,   561,   564,
-     565,   566,   567,   568,   569,   570,   571,   572,   579,   580,
-     583,   587,   593,   600,   601,   604,   605,   608,   612,   613,
-     616,   617,   620,   623,   624,   627,   631,   642,   646,   648,
-     652,   657,   661,   665,   670,   671,   675,   677,   681,   685,
-     691,   695,   699,   700,   703,   704,   707,   709,   711,   713,
-     715,   717,   719,   721,   723,   725,   727,   729,   731,   733,
-     737,   738,   739,   742,   761,   762,   766,   770,   775,   776,
-     780,   781,   782,   785,   792,   798,   799,   809,   811,   814,
-     815,   816,   817,   818,   819,   820,   821,   822,   823,   824,
-     825,   826,   827,   828,   834,   837,   842,   843,   848,   849,
-     852,   854,   862,   870,   871,   873,   876,   882,   883,   892,
-     893,   894,   895,   903,   907,   911,   920,   927,   934,   937,
-     938,   941,   950,   957,   960,   961,   964,   965,   968,  1004,
-    1006,  1013,  1015,  1020,  1022,  1026,  1049,  1053,  1055,  1064,
-    1075,  1087,  1097,  1100,  1109,  1118,  1123,  1128,  1149,  1189,
-    1207,  1214,  1219,  1230,  1241,  1252,  1263,  1268,  1273,  1278,
-    1288,  1307,  1341,  1343,  1345,  1347,  1349,  1351,  1353,  1355,
-    1360,  1369,  1371,  1373,  1375,  1377,  1379,  1381,  1383,  1385,
-    1387,  1399,  1404,  1406,  1408,  1410,  1412,  1414,  1416,  1418,
-    1420,  1422,  1424,  1426,  1428,  1459,  1485,  1493,  1502,  1511,
-    1513,  1515,  1517,  1519,  1523,  1528,  1530,  1535,  1536,  1539,
-    1540,  1543,  1544,  1547,  1555,  1559,  1561,  1565,  1569,  1570,
-    1573,  1588,  1592,  1593,  1596,  1609,  1610,  1614,  1616,  1620,
-    1624,  1626,  1628,  1634,  1635,  1640,  1641,  1645,  1647,  1656,
-    1658,  1662,  1666,  1670,  1674,  1680,  1681,  1684,  1712,  1719,
-    1721,  1730,  1747,  1749,  1751,  1755,  1764,  1769,  1774,  1775,
-    1779,  1781,  1785,  1790,  1791,  1795,  1797,  1799,  1801,  1811,
-    1815,  1816,  1817,  1818,  1821,  1826,  1837,  1844,  1849,  1850,
-    1854,  1856,  1860,  1861,  1864,  1868,  1872,  1876,  1885,  1895,
-    1896,  1901,  1903,  1908,  1913,  1914,  1918,  1920,  1924,  1930,
-    1931,  1935,  1937,  1945,  1946,  1950,  1954,  1957,  1958,  1961,
-    1965,  1969,  1971,  1973,  1975,  1983,  1984,  1988,  1989,  1990,
-    1993,  1994,  1995,  1996,  1997,  1998,  2001,  2002,  2003,  2004,
-    2012,  2015,  2016,  2029,  2030,  2031,  2032,  2036,  2037,  2040,
-    2041,  2042,  2043,  2044,  2045,  2046,  2047,  2050,  2051,  2052,
-    2055,  2056,  2057,  2058,  2059,  2060,  2061,  2062,  2063,  2064,
-    2065,  2066,  2067,  2068,  2069,  2070,  2071,  2072,  2073,  2074,
-    2075,  2076,  2077,  2083,  2084,  2085,  2086,  2087,  2088,  2089,
-    2090,  2091,  2092,  2093,  2094,  2106,  2114,  2118,  2119,  2122,
-    2123,  2124,  2125,  2126,  2127,  2130,  2132,  2133,  2136,  2137,
-    2140,  2144,  2149
+       0,   538,   538,   539,   544,   550,   551,   554,   555,   558,
+     559,   560,   561,   562,   563,   564,   565,   566,   573,   574,
+     577,   581,   587,   594,   595,   598,   599,   602,   606,   607,
+     610,   611,   614,   617,   618,   621,   625,   636,   640,   642,
+     646,   651,   655,   659,   664,   665,   669,   671,   675,   679,
+     685,   689,   693,   694,   697,   698,   701,   703,   705,   707,
+     709,   711,   713,   715,   717,   719,   721,   723,   725,   727,
+     731,   732,   733,   736,   754,   755,   759,   763,   768,   769,
+     773,   774,   775,   778,   785,   791,   792,   802,   804,   807,
+     808,   809,   810,   811,   812,   813,   814,   815,   816,   817,
+     818,   819,   820,   821,   827,   830,   835,   836,   841,   842,
+     845,   847,   855,   863,   864,   866,   869,   875,   876,   885,
+     886,   887,   888,   896,   900,   904,   913,   920,   927,   930,
+     931,   934,   943,   950,   953,   954,   957,   958,   961,   997,
+     999,  1006,  1008,  1013,  1015,  1019,  1042,  1046,  1048,  1057,
+    1068,  1080,  1090,  1093,  1102,  1111,  1116,  1121,  1139,  1157,
+    1186,  1226,  1244,  1251,  1256,  1267,  1278,  1289,  1300,  1305,
+    1310,  1315,  1325,  1344,  1378,  1380,  1382,  1384,  1386,  1388,
+    1390,  1392,  1397,  1406,  1408,  1410,  1412,  1414,  1416,  1418,
+    1420,  1422,  1424,  1436,  1441,  1443,  1445,  1447,  1449,  1451,
+    1453,  1455,  1457,  1459,  1461,  1463,  1465,  1496,  1522,  1530,
+    1539,  1548,  1550,  1552,  1554,  1556,  1560,  1565,  1567,  1572,
+    1573,  1576,  1577,  1580,  1581,  1584,  1592,  1596,  1598,  1602,
+    1606,  1607,  1610,  1625,  1629,  1630,  1633,  1646,  1647,  1651,
+    1653,  1657,  1661,  1663,  1665,  1671,  1672,  1677,  1678,  1682,
+    1684,  1693,  1695,  1699,  1703,  1707,  1711,  1717,  1718,  1721,
+    1749,  1756,  1758,  1767,  1784,  1786,  1788,  1792,  1801,  1806,
+    1811,  1812,  1816,  1818,  1822,  1827,  1828,  1832,  1834,  1836,
+    1838,  1848,  1852,  1853,  1854,  1855,  1858,  1863,  1874,  1881,
+    1886,  1887,  1891,  1893,  1897,  1898,  1901,  1905,  1909,  1913,
+    1922,  1932,  1933,  1938,  1940,  1945,  1950,  1951,  1955,  1957,
+    1961,  1967,  1968,  1972,  1974,  1982,  1983,  1987,  1991,  1994,
+    1995,  1998,  2002,  2006,  2008,  2010,  2012,  2020,  2021,  2025,
+    2026,  2027,  2030,  2031,  2032,  2033,  2034,  2035,  2038,  2039,
+    2040,  2041,  2049,  2052,  2053,  2065,  2066,  2067,  2068,  2072,
+    2073,  2076,  2077,  2078,  2079,  2080,  2081,  2082,  2083,  2086,
+    2087,  2088,  2091,  2092,  2093,  2094,  2095,  2096,  2097,  2098,
+    2099,  2100,  2101,  2102,  2103,  2104,  2105,  2106,  2107,  2108,
+    2109,  2110,  2111,  2112,  2113,  2119,  2120,  2121,  2122,  2123,
+    2124,  2125,  2126,  2127,  2128,  2129,  2130,  2142,  2150,  2154,
+    2155,  2158,  2159,  2160,  2161,  2162,  2163,  2166,  2168,  2169,
+    2172,  2173,  2176,  2180,  2185
 };
 #endif
 
@@ -1212,31 +1206,31 @@
      205,   206,   206,   206,   206,   207,   208,   209,   209,   210,
      210,   210,   211,   212,   212,   212,   212,   212,   212,   212,
      212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   213,   213,   213,   213,   213,   213,   213,   213,
-     214,   215,   215,   215,   215,   215,   215,   215,   215,   215,
+     212,   212,   212,   212,   213,   213,   213,   213,   213,   213,
+     213,   213,   214,   215,   215,   215,   215,   215,   215,   215,
      215,   215,   215,   215,   215,   215,   215,   215,   215,   215,
-     215,   215,   215,   215,   215,   216,   216,   216,   216,   216,
-     216,   216,   216,   216,   216,   216,   216,   217,   217,   218,
-     218,   219,   219,   220,   221,   222,   222,   223,   224,   224,
-     225,   226,   227,   227,   228,   229,   229,   230,   230,   231,
-     232,   232,   232,   233,   233,   234,   234,   235,   235,   236,
-     236,   237,   238,   238,   238,   239,   239,   240,   241,   242,
-     242,   243,   243,   243,   243,   244,   244,   245,   246,   246,
-     247,   247,   248,   249,   249,   250,   250,   250,   250,   251,
-     252,   252,   252,   252,   253,   253,   254,   255,   256,   256,
-     257,   257,   258,   258,   259,   260,   261,   262,   263,   264,
-     264,   265,   265,   266,   267,   267,   268,   268,   269,   270,
-     270,   271,   271,   272,   272,   273,   274,   275,   275,   276,
-     277,   278,   278,   278,   278,   279,   279,   280,   280,   280,
-     281,   281,   281,   281,   281,   281,   282,   282,   282,   282,
-     283,   284,   284,   285,   285,   285,   285,   286,   286,   287,
-     287,   287,   287,   287,   287,   287,   287,   288,   288,   288,
-     289,   289,   289,   289,   289,   289,   289,   289,   289,   289,
+     215,   215,   215,   215,   215,   215,   215,   216,   216,   216,
+     216,   216,   216,   216,   216,   216,   216,   216,   216,   217,
+     217,   218,   218,   219,   219,   220,   221,   222,   222,   223,
+     224,   224,   225,   226,   227,   227,   228,   229,   229,   230,
+     230,   231,   232,   232,   232,   233,   233,   234,   234,   235,
+     235,   236,   236,   237,   238,   238,   238,   239,   239,   240,
+     241,   242,   242,   243,   243,   243,   243,   244,   244,   245,
+     246,   246,   247,   247,   248,   249,   249,   250,   250,   250,
+     250,   251,   252,   252,   252,   252,   253,   253,   254,   255,
+     256,   256,   257,   257,   258,   258,   259,   260,   261,   262,
+     263,   264,   264,   265,   265,   266,   267,   267,   268,   268,
+     269,   270,   270,   271,   271,   272,   272,   273,   274,   275,
+     275,   276,   277,   278,   278,   278,   278,   279,   279,   280,
+     280,   280,   281,   281,   281,   281,   281,   281,   282,   282,
+     282,   282,   283,   284,   284,   285,   285,   285,   285,   286,
+     286,   287,   287,   287,   287,   287,   287,   287,   287,   288,
+     288,   288,   289,   289,   289,   289,   289,   289,   289,   289,
      289,   289,   289,   289,   289,   289,   289,   289,   289,   289,
-     289,   289,   289,   290,   290,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   291,   292,   293,   293,   294,
-     294,   294,   294,   294,   294,   295,   295,   295,   296,   296,
-     297,   298,   299
+     289,   289,   289,   289,   289,   290,   290,   290,   290,   290,
+     290,   290,   290,   290,   290,   290,   290,   291,   292,   293,
+     293,   294,   294,   294,   294,   294,   294,   295,   295,   295,
+     296,   296,   297,   298,   299
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1257,33 +1251,33 @@
        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,     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,     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,     1,     1,     2,
-       2,     4,     4,     4,     4,     1,     1,     1,     1,     1,
+       4,     6,     2,     3,     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,     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,     1,
+       1,     2,     2,     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,     2,     1,     1,     2,     1,
-       2,     1,     2,     2,     1,     2,     2,     1,     1,     1,
-       3,     1,     3
+       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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1291,71 +1285,71 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     5,     5,     0,     6,   396,     3,     0,     2,     0,
+       0,     5,     5,     0,     6,   398,     3,     0,     2,     0,
        1,     0,     0,     0,     0,     0,   131,     0,     0,   106,
-     411,     0,    18,    19,     0,     0,     0,   404,   134,   401,
-     395,   397,   399,     0,    54,   407,     0,     0,     0,     0,
+     413,     0,    18,    19,     0,     0,     0,   406,   134,   403,
+     397,   399,   401,     0,    54,   409,     0,     0,     0,     0,
        0,     0,     5,     7,    17,    14,    15,    16,    12,    13,
-      11,     9,    54,    10,     0,    38,    39,    44,   123,   408,
-     405,   409,   347,   352,   353,   355,   354,   349,   350,   356,
-     351,    22,   348,     0,   108,     0,   403,    23,   402,   400,
-     327,   328,   329,   343,   344,   346,   345,     0,     0,   135,
-     136,   139,   144,   140,     0,   141,   143,   142,   398,   406,
+      11,     9,    54,    10,     0,    38,    39,    44,   123,   410,
+     407,   411,   349,   354,   355,   357,   356,   351,   352,   358,
+     353,    22,   350,     0,   108,     0,   405,    23,   404,   402,
+     329,   330,   331,   345,   346,   348,   347,     0,     0,   135,
+     136,   139,   144,   140,     0,   141,   143,   142,   400,   408,
        0,    41,     0,    37,    53,    51,    52,     0,     0,     0,
-       0,   319,     0,     6,     4,     0,     0,    48,     0,    45,
+       0,   321,     0,     6,     4,     0,     0,    48,     0,    45,
       46,    20,   106,   112,   113,   117,     0,   109,   110,   115,
-     105,     0,    24,    25,    27,   343,     0,   147,   326,   325,
-     340,   341,   342,   412,     0,   145,   410,    57,    58,    59,
-      56,   313,     0,   313,    60,    63,    61,    62,     0,     0,
+     105,     0,    24,    25,    27,   345,     0,   147,   328,   327,
+     342,   343,   344,   414,     0,   145,   412,    57,    58,    59,
+      56,   315,     0,   315,    60,    63,    61,    62,     0,     0,
        0,    55,     0,     0,     0,     0,     0,     0,     8,    74,
-     266,     0,   265,    43,     0,   114,     0,   107,     0,     0,
-       0,   146,     0,   137,     0,    65,   314,     0,    66,    67,
+     268,     0,   267,    43,     0,   114,     0,   107,     0,     0,
+       0,   146,     0,   137,     0,    65,   316,     0,    66,    67,
       68,    69,    42,     0,     0,     0,     0,    40,    85,    73,
-     230,    47,   119,   106,   121,   120,   116,   118,   111,    28,
-      26,   148,     0,     0,   321,   322,   323,   324,     0,     0,
+     232,    47,   119,   106,   121,   120,   116,   118,   111,    28,
+      26,   148,     0,     0,   323,   324,   325,   326,     0,     0,
       75,   122,     0,     0,     0,    29,    30,     0,    33,    34,
-     315,    64,     0,    50,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   347,   349,   350,   356,   351,   260,
-     343,   268,     0,    49,    86,    88,   102,   104,   100,   101,
+     317,    64,     0,    50,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   131,   351,   352,   358,   353,   262,
+     345,   270,     0,    49,    86,    88,   102,   104,   100,   101,
      103,    99,    98,    89,     0,   134,   130,    97,     0,    90,
-       0,     0,    91,    92,    93,    96,   231,   232,   233,     0,
-     254,   256,   255,     0,   259,     0,    95,   279,   280,   282,
-     281,   283,    94,     0,   317,   318,     0,   342,   348,   336,
-     337,   338,   339,    78,     0,     0,    35,    21,    31,    32,
-     125,     0,   320,   288,     0,     0,   299,   304,   235,     0,
-       0,    87,     0,     0,     0,     0,   269,   270,   273,   124,
-     128,   129,   132,   133,   140,   152,   180,   347,   352,   353,
-     355,   354,   349,   350,   356,   351,   327,   328,   329,     0,
-       0,     0,   341,   251,   258,     0,     0,   316,   394,   392,
-     393,     0,     0,   383,   384,   385,   386,   388,   389,   387,
-     390,   391,     0,     0,     0,     0,    77,    36,     0,   225,
-     228,   327,     0,   289,   290,   293,   292,   309,   296,   284,
-     286,     0,     0,   300,   301,     0,     0,   305,   306,     0,
-       0,   236,   237,   127,   285,   126,   223,     0,   267,     0,
-     272,     0,   221,   222,     0,     0,     0,     0,     0,     0,
+       0,     0,    91,    92,    93,    96,   233,   234,   235,     0,
+     256,   258,   257,     0,   261,     0,    95,   281,   282,   284,
+     283,   285,    94,     0,   319,   320,     0,   344,   350,   338,
+     339,   340,   341,    78,     0,     0,    35,    21,    31,    32,
+     125,     0,   322,   290,     0,     0,   301,   306,   237,     0,
+       0,    87,     0,     0,     0,     0,   271,   272,   275,   124,
+     128,   129,   132,   133,   140,   152,   182,   349,   354,   355,
+     357,   356,   351,   352,   358,   353,   329,   330,   331,     0,
+       0,     0,   343,   253,   260,     0,     0,   318,   396,   394,
+     395,     0,     0,   385,   386,   387,   388,   390,   391,   389,
+     392,   393,     0,     0,     0,     0,    77,    36,     0,   227,
+     230,   329,     0,   291,   292,   295,   294,   311,   298,   286,
+     288,     0,     0,   302,   303,     0,     0,   307,   308,     0,
+       0,   238,   239,   127,   287,   126,   225,     0,   269,     0,
+     274,     0,   223,   224,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   330,   331,   332,   333,   335,   334,
-       0,     0,     0,     0,     0,     0,     0,   264,   262,   263,
-       0,   261,   252,   162,   163,   166,   164,   165,   167,   155,
-     153,   154,   343,   357,   358,   359,   157,   156,   253,     0,
-     348,     0,   161,     0,    76,    84,   313,   277,   275,   276,
-       0,    79,    81,    82,    80,   224,     0,   229,   227,     0,
-     287,     0,   295,     0,     0,   302,     0,     0,   307,     0,
-       0,     0,     0,     0,   238,   171,   271,   274,   138,   192,
-     194,   195,   196,   197,   198,   199,     0,     0,     0,     0,
-       0,     0,     0,     0,   351,   202,     0,   203,   200,   201,
-     213,   217,   218,   214,   208,   215,   209,   210,   206,   216,
-     211,   212,   207,   204,   190,   205,   193,   257,   382,   377,
-     379,   378,   381,   380,   370,   371,   372,   375,   373,   374,
-     376,   369,   361,   367,   360,   362,   363,   364,   365,   366,
-     368,     0,     0,     0,   160,   150,   158,     0,   159,   168,
-     170,   278,     0,   226,   294,   291,   313,   311,   310,   303,
-     298,   308,   297,   239,     0,   243,   241,   245,   181,   182,
-     183,   184,   185,   186,   187,   189,   188,   191,   175,   174,
-     176,   178,   172,   179,   177,   173,     0,     0,   169,    71,
-       0,    72,    70,   312,     0,     0,   240,     0,   250,     0,
-     246,   247,   149,   151,    83,     0,   244,     0,     0,   248,
-     242,   249,   234
+       0,     0,     0,     0,   332,   333,   334,   335,   337,   336,
+       0,     0,     0,     0,     0,     0,     0,   266,   264,   265,
+       0,   263,   254,   164,   165,   168,   166,   167,   169,   349,
+     155,   153,   154,   345,   359,   360,   361,     0,   159,   255,
+       0,   343,   350,     0,   163,     0,    76,    84,   315,   279,
+     277,   278,     0,    79,    81,    82,    80,   226,     0,   231,
+     229,     0,   289,     0,   297,     0,     0,   304,     0,     0,
+     309,     0,     0,     0,     0,     0,   240,   173,   273,   276,
+     138,   194,   196,   197,   198,   199,   200,   201,     0,     0,
+       0,     0,     0,     0,     0,     0,   353,   204,     0,   205,
+     202,   203,   215,   219,   220,   216,   210,   217,   211,   212,
+     208,   218,   213,   214,   209,   206,   192,   207,   195,   259,
+     384,   379,   381,   380,   383,   382,   372,   373,   374,   377,
+     375,   376,   378,   371,   363,   369,   362,   364,   365,   366,
+     367,   368,   370,     0,     0,     0,   162,   150,   160,     0,
+     161,   170,   172,   280,     0,   228,   296,   293,   315,   313,
+     312,   305,   300,   310,   299,   241,     0,   245,   243,   247,
+     183,   184,   185,   186,   187,   188,   189,   191,   190,   193,
+     177,   176,   178,   180,   174,   181,   179,   175,     0,     0,
+     171,    71,     0,    72,    70,   314,     0,     0,   242,     0,
+     252,     0,   248,   249,   149,   151,    83,     0,   246,     0,
+       0,   250,   244,   251,   236
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1364,306 +1358,319 @@
       -1,     3,     8,     5,    42,    43,    21,    22,    23,    24,
      131,   132,   133,   224,   225,   226,   227,   228,   229,    45,
       25,    47,    48,    49,    26,   118,   119,   120,    51,   253,
-      52,   105,   100,   161,   620,   198,   199,   220,   303,   375,
-     481,   482,   483,   218,   254,   255,   256,    27,    75,   126,
+      52,   105,   100,   161,   622,   198,   199,   220,   303,   375,
+     483,   484,   485,   218,   254,   255,   256,    27,    75,   126,
      127,   128,   129,   176,   207,    59,   259,   260,   261,   262,
      263,   264,    28,   331,    88,    89,   333,    90,    91,    92,
-      93,   136,   266,   267,   268,   467,   269,   270,   349,   533,
-     271,   414,   272,   273,   378,   379,   488,    29,   275,   276,
-     277,   400,   401,   402,   503,   626,   629,   630,   631,   278,
+      93,   136,   266,   267,   268,   468,   269,   270,   349,   535,
+     271,   414,   272,   273,   378,   379,   490,    29,   275,   276,
+     277,   400,   401,   402,   505,   628,   631,   632,   633,   278,
      279,   280,   281,   282,   283,   450,    94,   285,   325,   326,
-     327,   410,   484,   286,   287,   288,   289,   314,   382,   383,
+     327,   410,   486,   286,   287,   288,   289,   314,   382,   383,
      384,   385,   386,   387,   290,   291,   392,   393,   394,   396,
-     397,   398,   492,   588,   185,   186,   292,   293,    53,   295,
+     397,   398,   494,   590,   185,   186,   292,   293,    53,   295,
      111,   388,   138,   440,   304,   139,   140,   141,   142,    72,
-     471,   571,   373,     6,     7,    30,    31,    32,    60,    33,
+     473,   573,   373,     6,     7,    30,    31,    32,    60,    33,
       34,    35
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -569
+#define YYPACT_NINF -585
 static const yytype_int16 yypact[] =
 {
-      37,     4,     4,    50,  -569,  -569,  -569,    15,  -569,    69,
-    -569,    17,    31,    38,   -28,    -1,  -569,   212,    70,   -13,
-    -569,    74,  -569,  -569,    -6,    85,    89,  -569,   529,  -569,
-      15,  -569,  -569,    -1,  -569,  -569,    80,    95,   102,   603,
-     104,   119,   133,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,    51,  -569,  -569,   135,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,    87,   -42,   167,  -569,   212,  -569,  -569,
-    -569,  -569,  -569,    82,  -569,  -569,  -569,   727,   184,   100,
-    -569,  -569,  -569,  -569,   101,  -569,  -569,   106,  -569,  -569,
-     655,  -569,   108,  -569,  -569,  -569,  -569,   212,   212,   212,
-     212,  -569,   110,    69,  -569,   584,   932,  -569,    99,   113,
-    -569,  -569,   -13,  -569,  -569,  -569,   114,   112,  -569,  -569,
-    -569,   120,   121,  -569,  -569,  -569,   -36,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,   529,  -569,  -569,  -569,  -569,  -569,
-    -569,   127,   129,   127,  -569,  -569,  -569,  -569,   127,   127,
-     127,  -569,   213,   141,   142,   143,   144,   214,  -569,  -569,
-    -569,   231,  -569,  -569,   135,  -569,   -15,  -569,   -42,   233,
-     212,  -569,   727,  -569,   234,  -569,  -569,   603,  -569,  -569,
-    -569,  -569,  -569,   236,   237,   235,    68,  -569,  -569,   281,
-    -569,  -569,  -569,   -13,  -569,  -569,  -569,  -569,  -569,    93,
-    -569,  -569,   171,   173,  -569,  -569,  -569,  -569,   260,   139,
-    -569,  -569,   139,   199,   204,    93,  -569,   278,  -569,  -569,
-    -569,  -569,   289,  -569,   139,   104,   209,   209,   296,   297,
-     298,   216,   919,   507,   415,   743,   759,   437,   212,  -569,
-     -51,   437,   300,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,   301,   529,  -569,  -569,   302,  -569,
-     315,   775,  -569,  -569,  -569,  -569,  -569,  -569,  -569,   316,
-    -569,  -569,  -569,   209,   225,   232,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,   319,  -569,  -569,   642,   -74,   101,  -569,
-    -569,  -569,  -569,  -569,   212,   247,  -569,  -569,  -569,  -569,
-    -569,   212,  -569,   791,   322,   323,   339,   340,   330,   327,
-     329,  -569,   333,   334,   250,   254,   255,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,   253,  -569,  -569,   -31,   -31,   -31,
-     -31,   -31,   -31,   -31,   393,   -22,   158,   158,   158,   332,
-     -31,   158,   -31,  -569,  -569,   277,   919,  -569,  -569,  -569,
-    -569,   855,   871,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,   145,   727,   258,   109,  -569,  -569,   -14,  -569,
-     285,   331,   263,   265,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,   727,   360,   339,  -569,   727,   365,   340,  -569,   727,
-      32,   330,  -569,  -569,  -569,  -569,  -569,   727,  -569,   437,
-      61,   727,  -569,  -569,   212,   212,   212,   212,   212,   212,
-     212,   347,   348,   349,   350,   351,   359,   361,   362,   714,
-     -31,   212,   212,   212,  -569,  -569,  -569,  -569,  -569,  -569,
-     807,   823,   839,   212,   212,   727,   212,  -569,  -569,  -569,
-     209,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,   572,
-     598,   598,   -51,  -569,  -569,  -569,   529,  -569,  -569,   598,
-     101,   727,  -569,   727,  -569,  -569,   127,  -569,  -569,  -569,
-     287,  -569,  -569,  -569,  -569,  -569,   212,  -569,  -569,   727,
-    -569,   791,   -57,   373,   374,  -569,   375,   376,  -569,   378,
-     932,   932,   932,   382,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,  -569,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,  -569,   212,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,   643,   887,   903,  -569,   299,   304,   727,  -569,  -569,
-    -569,  -569,   303,  -569,  -569,  -569,   127,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,   383,   308,  -569,    18,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,  -569,   529,   529,  -569,  -569,
-     324,  -569,  -569,  -569,   405,   932,  -569,   437,  -569,   395,
-      18,  -569,   100,   100,  -569,   277,  -569,   388,   409,  -569,
-    -569,  -569,  -569
+     -38,    -5,    -5,    33,  -585,  -585,  -585,    15,  -585,    69,
+    -585,    -6,    -4,     7,   -65,   136,  -585,   212,    26,   -47,
+    -585,    46,  -585,  -585,   -34,    60,    85,  -585,   531,  -585,
+      15,  -585,  -585,   136,  -585,  -585,    80,   102,   111,   605,
+     104,   119,   133,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,    54,  -585,  -585,   134,  -585,  -585,
+    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,    68,   -42,   177,  -585,   212,  -585,  -585,
+    -585,  -585,  -585,    91,  -585,  -585,  -585,   796,   179,    95,
+    -585,  -585,  -585,  -585,    96,  -585,  -585,    97,  -585,  -585,
+     706,  -585,    99,  -585,  -585,  -585,  -585,   212,   212,   212,
+     212,  -585,   101,    69,  -585,   677,   995,  -585,    94,   100,
+    -585,  -585,   -47,  -585,  -585,  -585,   110,   103,  -585,  -585,
+    -585,   114,   112,  -585,  -585,  -585,   -36,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,   531,  -585,  -585,  -585,  -585,  -585,
+    -585,   121,   125,   121,  -585,  -585,  -585,  -585,   121,   121,
+     121,  -585,   184,   116,   124,   126,   138,   214,  -585,  -585,
+    -585,   227,  -585,  -585,   134,  -585,   -14,  -585,   -42,   228,
+     212,  -585,   796,  -585,   218,  -585,  -585,   605,  -585,  -585,
+    -585,  -585,  -585,   219,   217,   222,   131,  -585,  -585,   272,
+    -585,  -585,  -585,   -47,  -585,  -585,  -585,  -585,  -585,    28,
+    -585,  -585,   162,   164,  -585,  -585,  -585,  -585,   260,   113,
+    -585,  -585,   113,   181,   186,    28,  -585,   250,  -585,  -585,
+    -585,  -585,   257,  -585,   113,   104,   189,   189,   273,   289,
+     292,   195,   676,   509,   705,   819,   835,   439,   212,  -585,
+     -33,   439,   295,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,   305,   531,  -585,  -585,   306,  -585,
+     307,   851,  -585,  -585,  -585,  -585,  -585,  -585,  -585,   308,
+    -585,  -585,  -585,   189,   221,   223,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,   310,  -585,  -585,   734,    14,    96,  -585,
+    -585,  -585,  -585,  -585,   212,   237,  -585,  -585,  -585,  -585,
+    -585,   212,  -585,   867,   314,   315,   331,   332,   322,   319,
+     321,  -585,   323,   324,   236,   241,   242,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,   240,  -585,  -585,   -13,   -13,   -13,
+     -13,   -13,   -13,   -13,   631,   -11,   278,   278,   278,   320,
+     -13,   278,   -13,  -585,  -585,   277,   676,  -585,  -585,  -585,
+    -585,   646,   931,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,   145,   796,   243,   109,  -585,  -585,   -15,  -585,
+     270,   318,   253,   254,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,   796,   352,   331,  -585,   796,   351,   332,  -585,   796,
+      30,   322,  -585,  -585,  -585,  -585,  -585,   796,  -585,   439,
+      61,   796,  -585,  -585,   212,   212,   212,   212,   212,   212,
+     212,   334,   335,   336,   338,   339,   340,   341,   342,  1008,
+     -13,   212,   212,   212,  -585,  -585,  -585,  -585,  -585,  -585,
+     883,   899,   915,   212,   212,   796,   212,  -585,  -585,  -585,
+     189,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,   414,
+     574,   600,   600,   -33,  -585,  -585,  -585,   531,  -585,  -585,
+     600,   357,   -21,   796,  -585,   796,  -585,  -585,   121,  -585,
+    -585,  -585,   276,  -585,  -585,  -585,  -585,  -585,   212,  -585,
+    -585,   796,  -585,   867,   105,   360,   361,  -585,   369,   370,
+    -585,   371,   995,   995,   995,   372,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,   212,   212,
+     212,   212,   212,   212,   212,   212,   212,  -585,   212,  -585,
+    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,   979,   947,   963,  -585,   288,   290,   796,
+    -585,  -585,  -585,  -585,   393,  -585,  -585,  -585,   121,  -585,
+    -585,  -585,  -585,  -585,  -585,  -585,   374,   291,  -585,    11,
+    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,   531,   531,
+    -585,  -585,   294,  -585,  -585,  -585,   402,   995,  -585,   439,
+    -585,   391,    11,  -585,    95,    95,  -585,   277,  -585,   384,
+     385,  -585,  -585,  -585,  -585
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -569,  -569,  -569,    13,  -569,   335,     8,  -569,  -569,  -569,
-    -569,  -569,   266,  -569,  -569,   220,  -569,  -569,  -569,  -569,
-       0,  -569,  -569,  -569,    10,  -569,  -569,   273,  -569,  -569,
-    -569,   264,   416,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -569,  -569,  -569,  -569,   227,  -569,  -200,   -95,  -569,
-    -569,   293,  -569,  -569,  -569,  -187,  -569,  -569,  -569,  -569,
-    -569,  -569,  -208,  -569,   207,  -443,  -569,   346,     7,  -569,
-     -90,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,  -569,
-    -569,  -203,  -569,  -568,  -569,     5,  -569,  -186,  -569,  -569,
-    -569,  -569,  -569,    92,  -569,  -569,  -569,  -569,  -136,  -569,
-    -569,  -226,  -569,  -569,  -569,  -139,  -114,   256,  -569,  -569,
-    -403,  -569,    88,  -569,  -569,  -569,  -569,  -229,  -569,  -569,
-      19,  -569,  -314,    23,  -569,  -569,  -569,  -569,   122,  -569,
-    -569,   117,  -569,  -569,  -146,   -26,  -569,  -569,  -185,  -569,
-     286,   -82,   -27,  -194,  -175,  -206,  -569,   -25,   -17,  -205,
-    -569,  -359,  -569,  -569,  -569,  -569,   490,  -569,   489,  -569,
-    -569,    33
+    -585,  -585,  -585,    16,  -585,   309,     8,  -585,  -585,  -585,
+    -585,  -585,   244,  -585,  -585,   196,  -585,  -585,  -585,  -585,
+      -2,  -585,  -585,  -585,    10,  -585,  -585,   251,  -585,  -585,
+    -585,   256,   376,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -585,  -585,  -585,  -585,   201,  -585,  -189,   -95,  -585,
+    -585,   267,  -585,  -585,  -585,  -187,  -585,  -585,  -585,  -585,
+    -585,  -585,  -208,  -585,   182,  -505,  -585,   302,   -19,  -585,
+     -90,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
+    -585,  -203,  -585,  -584,  -585,   -20,  -585,  -182,  -585,  -585,
+    -585,  -585,  -585,    66,  -585,  -585,  -585,  -585,  -163,  -585,
+    -585,  -226,  -585,  -585,  -585,  -167,  -114,   231,  -585,  -585,
+    -401,  -585,    63,  -585,  -585,  -585,  -585,  -228,  -585,  -585,
+     -18,  -585,  -289,     1,  -585,  -585,  -585,  -585,    81,  -585,
+    -585,    98,  -585,  -585,  -147,    40,  -585,  -585,  -179,  -585,
+     258,   -82,   -27,  -301,  -156,  -206,  -585,   -25,   -17,  -205,
+    -585,  -346,  -585,  -585,  -585,  -585,   466,  -585,   465,  -585,
+    -585,    34
 };
 
 /* 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 -267
+#define YYTABLE_NINF -350
 static const yytype_int16 yytable[] =
 {
-      71,    95,   171,    96,   145,   137,   506,   188,   315,    46,
-     265,    97,   296,   298,   412,     9,   320,    44,   257,    50,
-     202,   485,   106,   432,    11,    12,    13,   175,    14,   628,
-     234,   258,   274,   294,    58,   265,    16,   296,   298,     4,
-     586,   322,   587,   257,  -265,   328,   500,   305,    61,   627,
-      10,    15,    16,  -265,   354,   114,   258,   274,   294,   311,
-     134,   501,   628,    54,   502,   351,    61,  -266,   122,   123,
-     124,    87,    36,    37,    38,    39,  -266,   493,    55,    12,
-      13,   496,    14,   125,    56,   499,    40,   181,   182,   413,
-     163,   164,   165,   166,    57,   203,   204,   205,   433,   172,
-     211,   572,   573,    41,   284,    74,   486,    73,   221,    76,
-     577,   206,    77,    46,    80,    81,    82,    95,    17,    96,
-      78,    44,    18,    50,    79,    19,   101,    97,   284,   284,
-     452,    20,   189,   190,   191,   415,   416,   417,   418,   419,
-     420,   102,   107,   108,   474,   109,   468,   444,   103,   446,
-     110,     1,     2,   441,   442,   455,   458,   445,   476,   477,
-     324,   478,   479,   134,   466,   112,   469,   470,   113,   217,
-     106,   116,    17,   632,   633,   334,    18,   299,   300,   301,
-     302,   117,   244,    63,    64,    65,    66,    67,    68,    69,
-      70,   459,   460,   461,   462,    84,    85,    86,   222,   223,
-     121,   297,   130,   328,  -266,   475,   476,   477,   374,   478,
-     479,   480,   434,   435,   436,   437,   438,   439,   252,   143,
-     144,   547,   173,    87,   637,   172,   297,   526,  -265,   162,
-     167,   323,   178,   177,   534,   538,   542,   174,    95,   179,
-      96,   180,   284,   252,   350,   184,   352,   187,    97,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,   284,   192,
-     197,   232,   193,   194,   195,   196,   200,   233,   209,    11,
-      12,    13,   234,   463,   464,   465,   235,    40,   236,   237,
-     212,   216,   238,   214,   239,   215,   240,   376,   241,   219,
-     230,   472,   231,   242,   380,    58,   243,   244,    63,    64,
-      65,    66,   245,   246,   247,   248,   249,   306,   307,   250,
-      84,    85,    86,   309,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,   447,   310,   505,   448,   313,   449,   508,
-     581,   316,   317,   318,   251,   329,   330,   335,   451,   172,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   619,
-     336,   353,   355,   356,   357,   297,   377,   389,   390,   391,
-     399,   395,   403,   545,   404,   609,   612,   615,   405,   406,
-      19,   407,   574,   408,   411,   409,   576,   443,   251,   473,
-     578,   487,   490,   494,   489,   491,   594,   595,   596,   579,
-     497,   580,   516,   517,   518,   519,   520,   509,   510,   511,
-     512,   513,   514,   515,   521,   582,   522,   523,   589,   590,
-     591,   592,   525,   593,   527,   528,   529,   597,   624,   616,
-     635,   328,   638,   641,   617,    87,   543,   544,   625,   546,
-     421,   422,   423,   424,   425,   426,   427,   428,   429,    95,
-     623,    96,   430,   634,   642,   308,   210,   201,   168,    97,
-    -131,   213,  -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,
-    -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,   115,   380,
-     321,   208,   332,   575,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,   172,   172,   172,   135,    84,    85,    86,
-     183,   583,   621,   504,   639,   618,   640,   319,   507,   598,
-     599,   600,   601,   602,   603,   604,   605,   606,   232,   607,
-     585,   636,   584,   431,   498,   495,    11,    12,    13,   234,
-      98,   312,    99,   235,    40,   236,   237,     0,     0,   238,
-       0,   239,     0,   240,     0,   241,     0,  -131,     0,     0,
-     242,     0,    58,     0,   244,    63,    64,    65,    66,   245,
-     246,   247,   248,   249,     0,     0,   250,    84,    85,    86,
-       0,     0,     0,     0,     0,   622,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    80,    81,    82,    83,    84,
-      85,    86,     0,     0,     0,     0,     0,     0,     0,    95,
-      95,    96,    96,     0,     0,     0,     0,     0,     0,    97,
-      97,     0,     0,     0,     0,     0,     0,     0,   172,     0,
-       0,     0,     0,     0,     0,     0,     0,    19,   451,   169,
-       0,     0,     0,     0,     0,   251,   548,   549,   550,   551,
+      71,    95,   171,    96,   145,   137,   188,    46,   508,   315,
+     265,    97,   296,   298,  -158,   630,   320,    44,     9,    50,
+     487,   202,   106,   234,    11,    12,    13,   175,    14,   257,
+       4,   258,   412,    10,   432,   265,   274,   296,   298,   294,
+      54,   322,   629,    55,   502,   328,   441,   442,   630,    61,
+     445,    15,    16,    56,   257,   354,   258,    57,   114,   503,
+     134,   274,   504,    73,   294,   351,   305,    61,   122,   123,
+     124,    74,    36,    37,    38,    39,     1,     2,   311,    12,
+      13,    76,    14,   125,    77,  -268,    40,   181,   182,    87,
+     163,   164,   165,   166,  -268,    78,   203,   204,   205,   172,
+     211,    87,   495,    41,   284,   488,   498,   413,   221,   433,
+     501,    46,   206,   634,   635,   574,   575,    95,    17,    96,
+      79,    44,    18,    50,   579,    19,   101,    97,   284,   284,
+     452,    20,  -267,   222,   223,   415,   416,   417,   418,   419,
+     420,  -267,   107,   108,   476,   109,   469,   444,   102,   446,
+     110,   299,   300,   301,   302,   455,   458,   103,   478,   479,
+     324,   480,   481,   134,   467,   112,   470,   472,   113,   217,
+     106,    58,    17,    16,   116,   334,    18,    80,    81,    82,
+     117,   121,   459,    63,    64,    65,    66,    67,    68,    69,
+      70,   460,   461,   462,   463,    84,    85,    86,   189,   190,
+     191,   297,   588,   328,   589,   477,   478,   479,   374,   480,
+     481,   482,   130,  -268,   143,   144,   252,   173,    87,  -267,
+     162,   167,   549,   178,   174,   172,   297,   528,   639,   177,
+     192,   323,   180,   179,   536,   540,   544,   193,    95,   184,
+      96,   252,   284,   187,   350,   194,   352,   195,    97,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,   284,   196,
+     197,   232,   200,   209,   212,   215,   214,   233,   216,    11,
+      12,    13,   234,   464,   465,   466,   235,    40,   236,   237,
+     219,   230,   238,   231,   239,   309,   240,   376,   241,   306,
+     307,   474,   310,   242,   380,    58,   243,   244,    63,    64,
+      65,    66,   245,   246,   247,   248,   249,   313,   316,   250,
+      84,    85,    86,   251,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,   447,   317,   507,   448,   318,   449,   510,
+     329,   583,   434,   435,   436,   437,   438,   439,   451,   172,
+     330,   335,   336,   353,   356,   357,   377,   471,   355,   389,
+     390,   391,   399,   395,   403,   297,   404,   407,   405,   406,
+     408,   411,   409,   547,   475,   443,   489,   611,   614,   617,
+      19,   491,   492,   576,   493,   496,   499,   578,   251,   518,
+     519,   520,   580,   521,   522,   523,   524,   525,   596,   597,
+     598,   581,  -156,   582,   584,   591,   592,   511,   512,   513,
+     514,   515,   516,   517,   593,   594,   595,   599,   618,   626,
+     619,   627,   527,   636,   529,   530,   531,   637,   640,   643,
+     644,   308,   168,   328,   210,   201,   545,   546,   115,   548,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,   621,
+      95,   625,    96,   213,   321,   208,   183,   332,   577,  -157,
+      97,  -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,
+    -131,  -131,  -131,  -131,  -131,  -131,  -131,   506,   585,   641,
+     642,   380,   319,   509,   497,   587,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,   172,   172,   172,   135,    84,
+      85,    86,   586,   312,   623,   500,    98,   620,    99,     0,
+       0,   600,   601,   602,   603,   604,   605,   606,   607,   608,
+     232,   609,     0,   638,     0,    87,     0,     0,    11,    12,
+      13,   234,     0,     0,     0,   235,    40,   236,   237,     0,
+       0,   238,     0,   239,     0,   240,  -131,   241,     0,     0,
+       0,     0,   242,     0,    58,     0,   244,    63,    64,    65,
+      66,   245,   246,   247,   248,   249,     0,     0,   250,    84,
+      85,    86,     0,     0,     0,     0,     0,   624,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    80,    81,    82,
+      83,    84,    85,    86,     0,     0,     0,     0,     0,     0,
+       0,    95,    95,    96,    96,     0,     0,     0,     0,     0,
+       0,    97,    97,     0,     0,     0,     0,     0,     0,     0,
+     172,     0,     0,     0,     0,     0,     0,     0,     0,    19,
+     451,     0,     0,     0,     0,     0,     0,   251,   550,   551,
      552,   553,   554,   555,   556,   557,   558,   559,   560,   561,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   104,
-       0,    87,   548,   549,   550,   551,   552,   553,   554,   555,
-     556,   557,   558,   559,   560,   561,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   608,
-    -260,   146,   135,    84,    85,    86,     0,     0,     0,     0,
-     562,     0,   563,   564,   565,   566,   567,   568,   569,   570,
-     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
-     368,   369,   370,   371,     0,     0,   562,     0,   563,   564,
-     565,   566,   567,   568,   569,   570,     0,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,    62,    63,    64,    65,    66,    67,    68,    69,   524,
-       0,     0,     0,   372,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    80,    81,    82,   135,    84,    85,    86,
-    -219,  -219,  -219,  -219,  -219,  -219,  -219,  -219,  -219,  -219,
-    -219,  -219,  -219,  -219,  -219,  -219,  -220,  -220,  -220,  -220,
-    -220,  -220,  -220,  -220,  -220,  -220,  -220,  -220,  -220,  -220,
-    -220,  -220,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   135,    84,    85,    86,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,   381,    81,    82,
+     562,   563,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,   104,     0,    87,   550,   551,   552,   553,   554,   555,
+     556,   557,   558,   559,   560,   561,   562,   563,   421,   422,
+     423,   424,   425,   426,   427,   428,   429,     0,     0,     0,
+     430,     0,     0,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,  -262,   453,   454,   135,    84,    85,    86,     0,
+       0,     0,   564,     0,   565,   566,   567,   568,   569,   570,
+     571,   572,   169,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,   249,     0,     0,   170,     0,     0,   564,     0,
+     565,   566,   567,   568,   569,   570,   571,   572,     0,     0,
+       0,     0,   146,     0,     0,     0,     0,     0,     0,     0,
+       0,   431,     0,     0,     0,     0,     0,     0,     0,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,  -349,  -349,  -349,  -349,  -349,  -349,  -349,
+    -349,  -349,  -349,  -349,  -349,  -349,  -349,     0,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   358,   359,   360,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,     0,     0,     0,     0,
+       0,     0,     0,  -349,     0,     0,  -349,     0,     0,     0,
+       0,     0,  -349,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    80,    81,    82,   135,    84,    85,    86,     0,
+       0,     0,     0,     0,     0,   372,  -221,  -221,  -221,  -221,
+    -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,
+    -221,  -221,  -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,
+    -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,   337,   338,
+     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
      135,    84,    85,    86,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,   530,   531,   532,   135,    84,    85,    86,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   535,
-     536,   537,   135,    84,    85,    86,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,   539,   540,   541,   135,    84,
+      68,    69,    70,   381,    81,    82,   135,    84,    85,    86,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,   532,
+     533,   534,   135,    84,    85,    86,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,   537,   538,   539,   135,    84,
       85,    86,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,     0,   453,   454,   135,    84,    85,    86,    62,    63,
+      70,   541,   542,   543,   135,    84,    85,    86,    62,    63,
       64,    65,    66,    67,    68,    69,    70,     0,   456,   457,
      135,    84,    85,    86,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,     0,   610,   611,   135,    84,    85,    86,
+      68,    69,    70,     0,   612,   613,   135,    84,    85,    86,
       62,    63,    64,    65,    66,    67,    68,    69,    70,     0,
-     613,   614,   135,    84,    85,    86,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,   249,     0,     0,   170,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,     0,     0,
-       0,   170
+     615,   616,   135,    84,    85,    86,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,   610,     0,     0,   135,    84,
+      85,    86,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,     0,     0,     0,   170,    62,    63,    64,    65,    66,
+      67,    68,    69,   526
 };
 
 static const yytype_int16 yycheck[] =
 {
-      17,    28,   116,    28,    94,    87,   409,   153,   237,     9,
-     218,    28,   218,   218,    45,     2,   242,     9,   218,     9,
-      35,    35,    39,    45,     9,    10,    11,   122,    13,   597,
-      12,   218,   218,   218,    35,   243,    37,   243,   243,    35,
-      97,   247,    99,   243,   118,   251,    14,   222,    15,    31,
-       0,    36,    37,   127,   283,    42,   243,   243,   243,   234,
-      77,    29,   630,    46,    32,   271,    33,   118,   110,   111,
-     112,   122,     3,     4,     5,     6,   127,   391,    47,    10,
-      11,   395,    13,   125,    46,   399,    17,   123,   124,   120,
-     107,   108,   109,   110,   122,   110,   111,   112,   120,   116,
-     182,   460,   461,    34,   218,   118,   120,    37,   203,    35,
-     469,   126,   118,   113,    46,    47,    48,   144,   103,   144,
-      35,   113,   107,   113,    35,   110,    46,   144,   242,   243,
-     356,   116,   158,   159,   160,   338,   339,   340,   341,   342,
-     343,    46,    38,    39,    35,    41,   372,   350,    46,   352,
-      46,   114,   115,   347,   348,   361,   362,   351,    97,    98,
+      17,    28,   116,    28,    94,    87,   153,     9,   409,   237,
+     218,    28,   218,   218,    35,   599,   242,     9,     2,     9,
+      35,    35,    39,    12,     9,    10,    11,   122,    13,   218,
+      35,   218,    45,     0,    45,   243,   218,   243,   243,   218,
+      46,   247,    31,    47,    14,   251,   347,   348,   632,    15,
+     351,    36,    37,    46,   243,   283,   243,   122,    42,    29,
+      77,   243,    32,    37,   243,   271,   222,    33,   110,   111,
+     112,   118,     3,     4,     5,     6,   114,   115,   234,    10,
+      11,    35,    13,   125,   118,   118,    17,   123,   124,   122,
+     107,   108,   109,   110,   127,    35,   110,   111,   112,   116,
+     182,   122,   391,    34,   218,   120,   395,   120,   203,   120,
+     399,   113,   126,   618,   619,   461,   462,   144,   103,   144,
+      35,   113,   107,   113,   470,   110,    46,   144,   242,   243,
+     356,   116,   118,   105,   106,   338,   339,   340,   341,   342,
+     343,   127,    38,    39,    35,    41,   372,   350,    46,   352,
+      46,    38,    39,    40,    41,   361,   362,    46,    97,    98,
      250,   100,   101,   180,   372,    46,   372,   372,    35,   196,
-     187,   120,   103,   616,   617,   265,   107,    38,    39,    40,
-      41,    46,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,   105,   106,
-     113,   218,    35,   409,   122,    96,    97,    98,   298,   100,
-     101,   102,    54,    55,    56,    57,    58,    59,   218,    35,
-     120,   450,   123,   122,   627,   242,   243,   430,   122,   121,
-     120,   248,   120,   119,   440,   441,   442,   124,   265,   119,
-     265,   120,   356,   243,   271,   118,   271,   118,   265,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,   372,    46,
-      46,     1,   121,   121,   121,   121,    35,     7,    35,     9,
+     187,    35,   103,    37,   120,   265,   107,    46,    47,    48,
+      46,   113,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,   158,   159,
+     160,   218,    97,   409,    99,    96,    97,    98,   298,   100,
+     101,   102,    35,   122,    35,   120,   218,   123,   122,   122,
+     121,   120,   450,   120,   124,   242,   243,   430,   629,   119,
+      46,   248,   120,   119,   440,   441,   442,   121,   265,   118,
+     265,   243,   356,   118,   271,   121,   271,   121,   265,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,   372,   121,
+      46,     1,    35,    35,    46,    48,    47,     7,    46,     9,
       10,    11,    12,   128,   129,   130,    16,    17,    18,    19,
-      46,    46,    22,    47,    24,    48,    26,   304,    28,     8,
-     119,   373,   119,    33,   311,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,   108,   104,    49,
-      50,    51,    52,    35,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    35,   407,    49,   118,    51,   411,
-     476,    35,    35,    35,   118,    35,    35,    35,   355,   356,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      35,    35,   127,   121,    35,   372,   109,    35,    35,    20,
-      30,    21,    35,   445,    35,   571,   572,   573,    35,    35,
-     110,   121,   462,   119,   121,   120,   466,    45,   118,   121,
-     470,    96,   119,    23,    53,   120,   500,   501,   502,   471,
-      25,   473,    45,    45,    45,    45,    45,   414,   415,   416,
-     417,   418,   419,   420,    45,   118,    45,    45,    35,    35,
-      35,    35,   429,    35,   431,   432,   433,    35,    35,   120,
-      15,   627,    27,    35,   120,   122,   443,   444,   120,   446,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,   466,
-     586,   466,    49,   119,    35,   225,   180,   174,   113,   466,
-      35,   187,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    52,   486,
-     243,   178,   265,   466,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,   500,   501,   502,    49,    50,    51,    52,
-     144,   486,   582,   401,   630,   577,   635,   241,   410,   516,
-     517,   518,   519,   520,   521,   522,   523,   524,     1,   526,
-     491,   625,   489,   120,   397,   393,     9,    10,    11,    12,
-      30,   235,    33,    16,    17,    18,    19,    -1,    -1,    22,
-      -1,    24,    -1,    26,    -1,    28,    -1,   122,    -1,    -1,
-      33,    -1,    35,    -1,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    -1,    -1,    49,    50,    51,    52,
-      -1,    -1,    -1,    -1,    -1,   582,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   616,
-     617,   616,   617,    -1,    -1,    -1,    -1,    -1,    -1,   616,
-     617,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   625,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,   635,    35,
-      -1,    -1,    -1,    -1,    -1,   118,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      -1,   122,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-     118,    36,    49,    50,    51,    52,    -1,    -1,    -1,    -1,
-     128,    -1,   130,   131,   132,   133,   134,   135,   136,   137,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    -1,    -1,   128,    -1,   130,   131,
-     132,   133,   134,   135,   136,   137,    -1,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      -1,    -1,    -1,   121,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+       8,   119,    22,   119,    24,    35,    26,   304,    28,   108,
+     104,   373,    35,    33,   311,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,   118,    35,    49,
+      50,    51,    52,   118,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    35,   407,    49,    35,    51,   411,
+      35,   478,    54,    55,    56,    57,    58,    59,   355,   356,
+      35,    35,    35,    35,   121,    35,   109,   372,   127,    35,
+      35,    20,    30,    21,    35,   372,    35,   121,    35,    35,
+     119,   121,   120,   445,   121,    45,    96,   573,   574,   575,
+     110,    53,   119,   463,   120,    23,    25,   467,   118,    45,
+      45,    45,   472,    45,    45,    45,    45,    45,   502,   503,
+     504,   473,    35,   475,   118,    35,    35,   414,   415,   416,
+     417,   418,   419,   420,    35,    35,    35,    35,   120,    35,
+     120,   120,   429,   119,   431,   432,   433,    15,    27,    35,
+      35,   225,   113,   629,   180,   174,   443,   444,    52,   446,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    37,    38,    39,    40,
+     467,   588,   467,   187,   243,   178,   144,   265,   467,    35,
+     467,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,   401,   488,   632,
+     637,   488,   241,   410,   393,   493,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,   502,   503,   504,    49,    50,
+      51,    52,   491,   235,   584,   397,    30,   579,    33,    -1,
+      -1,   518,   519,   520,   521,   522,   523,   524,   525,   526,
+       1,   528,    -1,   627,    -1,   122,    -1,    -1,     9,    10,
+      11,    12,    -1,    -1,    -1,    16,    17,    18,    19,    -1,
+      -1,    22,    -1,    24,    -1,    26,   122,    28,    -1,    -1,
+      -1,    -1,    33,    -1,    35,    -1,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
+      51,    52,    -1,    -1,    -1,    -1,    -1,   584,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   618,   619,   618,   619,    -1,    -1,    -1,    -1,    -1,
+      -1,   618,   619,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     627,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
+     637,    -1,    -1,    -1,    -1,    -1,    -1,   118,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    -1,   122,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
+      49,    -1,    -1,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,   118,    47,    48,    49,    50,    51,    52,    -1,
+      -1,    -1,   128,    -1,   130,   131,   132,   133,   134,   135,
+     136,   137,    35,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    -1,    -1,    49,    -1,    -1,   128,    -1,
+     130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
+      -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   120,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    -1,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   118,    -1,    -1,   121,    -1,    -1,    -1,
+      -1,    -1,   127,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    -1,
+      -1,    -1,    -1,    -1,    -1,   121,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    37,    38,
@@ -1674,15 +1681,16 @@
       47,    48,    49,    50,    51,    52,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    47,    48,    49,    50,    51,    52,    37,    38,
+      45,    46,    47,    48,    49,    50,    51,    52,    37,    38,
       39,    40,    41,    42,    43,    44,    45,    -1,    47,    48,
       49,    50,    51,    52,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    -1,    47,    48,    49,    50,    51,    52,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
       47,    48,    49,    50,    51,    52,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    -1,    49,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    -1,    -1,
-      -1,    49
+      41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
+      51,    52,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    -1,    -1,    -1,    49,    37,    38,    39,    40,    41,
+      42,    43,    44,    45
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1734,26 +1742,26 @@
      219,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       49,   120,    45,   120,    54,    55,    56,    57,    58,    59,
      281,   281,   281,    45,   219,   281,   219,    46,    49,    51,
-     243,   286,   239,    47,    48,   283,    47,    48,   283,    46,
-      47,    48,    49,   128,   129,   130,   200,   213,   239,   283,
-     287,   288,   279,   121,    35,    96,    97,    98,   100,   101,
-     102,   178,   179,   180,   250,    35,   120,    96,   224,    53,
-     119,   120,   270,   260,    23,   266,   260,    25,   269,   260,
-      14,    29,    32,   232,   231,   279,   248,   250,   279,   286,
-     286,   286,   286,   286,   286,   286,    45,    45,    45,    45,
-      45,    45,    45,    45,    45,   286,   219,   286,   286,   286,
-      46,    47,    48,   217,   283,    46,    47,    48,   283,    46,
-      47,    48,   283,   286,   286,   279,   286,   255,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,   128,   130,   131,   132,   133,   134,   135,   136,
-     137,   289,   289,   289,   208,   206,   208,   289,   208,   279,
-     279,   272,   118,   223,   261,   258,    97,    99,   271,    35,
-      35,    35,    35,    35,   244,   244,   244,    35,   286,   286,
-     286,   286,   286,   286,   286,   286,   286,   286,    46,   283,
-      47,    48,   283,    47,    48,   283,   120,   120,   279,    46,
-     172,   208,   286,   272,    35,   120,   233,    31,   221,   234,
-     235,   236,   203,   203,   119,    15,   244,   248,    27,   236,
-     243,    35,    35
+     243,   286,   239,    47,    48,   283,    47,    48,   283,    37,
+      46,    47,    48,    49,   128,   129,   130,   200,   213,   239,
+     283,   285,   287,   288,   279,   121,    35,    96,    97,    98,
+     100,   101,   102,   178,   179,   180,   250,    35,   120,    96,
+     224,    53,   119,   120,   270,   260,    23,   266,   260,    25,
+     269,   260,    14,    29,    32,   232,   231,   279,   248,   250,
+     279,   286,   286,   286,   286,   286,   286,   286,    45,    45,
+      45,    45,    45,    45,    45,    45,    45,   286,   219,   286,
+     286,   286,    46,    47,    48,   217,   283,    46,    47,    48,
+     283,    46,    47,    48,   283,   286,   286,   279,   286,   255,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,   128,   130,   131,   132,   133,   134,
+     135,   136,   137,   289,   289,   289,   208,   206,   208,   289,
+     208,   279,   279,   272,   118,   223,   261,   258,    97,    99,
+     271,    35,    35,    35,    35,    35,   244,   244,   244,    35,
+     286,   286,   286,   286,   286,   286,   286,   286,   286,   286,
+      46,   283,    47,    48,   283,    47,    48,   283,   120,   120,
+     279,    46,   172,   208,   286,   272,    35,   120,   233,    31,
+     221,   234,   235,   236,   203,   203,   119,    15,   244,   248,
+      27,   236,   243,    35,    35
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2581,22 +2589,22 @@
   switch (yyn)
     {
         case 4:
-#line 553 "pir.y"
+#line 547 "pir.y"
     { fixup_global_labels(lexer); ;}
     break;
 
   case 20:
-#line 584 "pir.y"
+#line 578 "pir.y"
     { new_macro_const(lexer->macros, (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].sval), yypirget_lineno(yyscanner)); ;}
     break;
 
   case 21:
-#line 590 "pir.y"
+#line 584 "pir.y"
     { /* fprintf(stderr, "macro body: [%s]\n", CURRENT_MACRO(lexer)->body);*/ ;}
     break;
 
   case 22:
-#line 594 "pir.y"
+#line 588 "pir.y"
     {
                           new_macro(lexer->macros, (yyvsp[(2) - (2)].sval), yypirget_lineno(yyscanner), TRUE,
                                     lexer->macro_size);
@@ -2604,17 +2612,17 @@
     break;
 
   case 27:
-#line 609 "pir.y"
+#line 603 "pir.y"
     { add_macro_param(CURRENT_MACRO(lexer), (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 35:
-#line 628 "pir.y"
+#line 622 "pir.y"
     { store_macro_string(CURRENT_MACRO(lexer), "%s\n", (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 36:
-#line 632 "pir.y"
+#line 626 "pir.y"
     {
                           store_macro_string(CURRENT_MACRO(lexer), ".local %s %s\n",
                                              pir_type_names[(yyvsp[(2) - (3)].ival)], (yyvsp[(3) - (3)].sval));
@@ -2622,143 +2630,143 @@
     break;
 
   case 37:
-#line 643 "pir.y"
+#line 637 "pir.y"
     { load_library(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 38:
-#line 647 "pir.y"
+#line 641 "pir.y"
     { yypirset_lineno ((yyvsp[(2) - (2)].ival), yyscanner); ;}
     break;
 
   case 39:
-#line 649 "pir.y"
+#line 643 "pir.y"
     { lexer->filename = (yyvsp[(2) - (2)].sval); ;}
     break;
 
   case 41:
-#line 658 "pir.y"
+#line 652 "pir.y"
     { set_hll(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 42:
-#line 662 "pir.y"
+#line 656 "pir.y"
     { set_hll_map(lexer, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 43:
-#line 666 "pir.y"
+#line 660 "pir.y"
     { set_namespace(lexer, (yyvsp[(3) - (4)].key)); ;}
     break;
 
   case 44:
-#line 670 "pir.y"
+#line 664 "pir.y"
     { (yyval.key) = NULL; ;}
     break;
 
   case 45:
-#line 672 "pir.y"
+#line 666 "pir.y"
     { (yyval.key) = (yyvsp[(1) - (1)].key); ;}
     break;
 
   case 46:
-#line 676 "pir.y"
+#line 670 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 47:
-#line 678 "pir.y"
+#line 672 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 48:
-#line 682 "pir.y"
+#line 676 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval))); ;}
     break;
 
   case 50:
-#line 692 "pir.y"
+#line 686 "pir.y"
     { close_sub(lexer); ;}
     break;
 
   case 51:
-#line 696 "pir.y"
+#line 690 "pir.y"
     { new_subr(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 56:
-#line 708 "pir.y"
+#line 702 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_ANON);;}
     break;
 
   case 57:
-#line 710 "pir.y"
+#line 704 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_INIT); ;}
     break;
 
   case 58:
-#line 712 "pir.y"
+#line 706 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_LOAD); ;}
     break;
 
   case 59:
-#line 714 "pir.y"
+#line 708 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_MAIN); ;}
     break;
 
   case 60:
-#line 716 "pir.y"
+#line 710 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_LEX); ;}
     break;
 
   case 61:
-#line 718 "pir.y"
+#line 712 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_POSTCOMP); ;}
     break;
 
   case 62:
-#line 720 "pir.y"
+#line 714 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_IMMEDIATE); ;}
     break;
 
   case 63:
-#line 722 "pir.y"
+#line 716 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_MULTI); ;}
     break;
 
   case 64:
-#line 724 "pir.y"
+#line 718 "pir.y"
     { set_sub_outer(lexer, (yyvsp[(3) - (4)].sval)); ;}
     break;
 
   case 65:
-#line 726 "pir.y"
+#line 720 "pir.y"
     { set_sub_methodname(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 66:
-#line 728 "pir.y"
+#line 722 "pir.y"
     { set_sub_vtable(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 67:
-#line 730 "pir.y"
+#line 724 "pir.y"
     { set_sub_subid(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 68:
-#line 732 "pir.y"
+#line 726 "pir.y"
     { set_sub_instanceof(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 69:
-#line 734 "pir.y"
+#line 728 "pir.y"
     { set_sub_nsentry(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 73:
-#line 743 "pir.y"
-    { /* XXX */
+#line 737 "pir.y"
+    {
                            /* if there are parameters, then emit a get_params instruction. */
                            if ((yyvsp[(1) - (1)].ival) > 0) {
 
@@ -2771,42 +2779,41 @@
                                update_op(lexer, CURRENT_INSTRUCTION(lexer),
                                          PARROT_OP_get_params_pc);
                            }
-
                          ;}
     break;
 
   case 74:
-#line 761 "pir.y"
+#line 754 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 75:
-#line 763 "pir.y"
+#line 756 "pir.y"
     { ++(yyval.ival); /* count number of parameters */ ;}
     break;
 
   case 76:
-#line 767 "pir.y"
+#line 760 "pir.y"
     { set_param_flag(lexer, (yyvsp[(2) - (4)].targ), (yyvsp[(3) - (4)].ival)); ;}
     break;
 
   case 77:
-#line 771 "pir.y"
+#line 764 "pir.y"
     { (yyval.targ) = add_param(lexer, (yyvsp[(1) - (2)].ival), (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 78:
-#line 775 "pir.y"
+#line 768 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 79:
-#line 777 "pir.y"
+#line 770 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 83:
-#line 786 "pir.y"
+#line 779 "pir.y"
     { (yyval.ival) = TARGET_FLAG_INVOCANT;
                            /* XXX handle multi_type */
 
@@ -2814,12 +2821,12 @@
     break;
 
   case 84:
-#line 793 "pir.y"
+#line 786 "pir.y"
     { (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
     break;
 
   case 86:
-#line 800 "pir.y"
+#line 793 "pir.y"
     {
                          ++lexer->stmt_counter;
                          /* increment the logical statement counter; a statement can be
@@ -2830,37 +2837,37 @@
     break;
 
   case 87:
-#line 810 "pir.y"
+#line 803 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
   case 105:
-#line 838 "pir.y"
+#line 831 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (3)].mval), (yyvsp[(2) - (3)].pval)); ;}
     break;
 
   case 106:
-#line 842 "pir.y"
+#line 835 "pir.y"
     { (yyval.pval) = NULL; ;}
     break;
 
   case 107:
-#line 844 "pir.y"
+#line 837 "pir.y"
     { (yyval.pval) = (yyvsp[(2) - (3)].pval); ;}
     break;
 
   case 108:
-#line 848 "pir.y"
+#line 841 "pir.y"
     { (yyval.pval) = NULL; ;}
     break;
 
   case 110:
-#line 853 "pir.y"
+#line 846 "pir.y"
     { (yyval.pval) = new_macro_param((yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 111:
-#line 855 "pir.y"
+#line 848 "pir.y"
     {
                           macro_param *param = new_macro_param((yyvsp[(3) - (3)].sval));
                           param->next = (yyvsp[(1) - (3)].pval);
@@ -2869,7 +2876,7 @@
     break;
 
   case 112:
-#line 863 "pir.y"
+#line 856 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                           if (sym == NULL) {
@@ -2880,22 +2887,22 @@
     break;
 
   case 114:
-#line 872 "pir.y"
+#line 865 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
   case 116:
-#line 877 "pir.y"
+#line 870 "pir.y"
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
   case 117:
-#line 882 "pir.y"
+#line 875 "pir.y"
     { (yyval.sval) = ""; ;}
     break;
 
   case 118:
-#line 884 "pir.y"
+#line 877 "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));
@@ -2905,17 +2912,17 @@
     break;
 
   case 122:
-#line 896 "pir.y"
+#line 889 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
   case 123:
-#line 904 "pir.y"
+#line 897 "pir.y"
     { set_instr(lexer, NULL); ;}
     break;
 
   case 125:
-#line 912 "pir.y"
+#line 905 "pir.y"
     {
                            if (lexer->parse_errors > MAX_NUM_ERRORS)
                                panic(lexer, "Too many errors. Compilation aborted.\n");
@@ -2925,7 +2932,7 @@
     break;
 
   case 126:
-#line 921 "pir.y"
+#line 914 "pir.y"
     {
                            set_instrf(lexer, "null", "%T", (yyvsp[(2) - (3)].targ));
                            get_opinfo(yyscanner);
@@ -2933,7 +2940,7 @@
     break;
 
   case 127:
-#line 928 "pir.y"
+#line 921 "pir.y"
     {
                            set_instrf(lexer, "get_results", "%T", (yyvsp[(2) - (3)].targ));
                            get_opinfo(yyscanner);
@@ -2941,7 +2948,7 @@
     break;
 
   case 131:
-#line 942 "pir.y"
+#line 935 "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.
                             */
@@ -2951,7 +2958,7 @@
     break;
 
   case 132:
-#line 951 "pir.y"
+#line 944 "pir.y"
     { /* when this rule is activated, the initial identifier must
                            * be a parrot op.
                            */
@@ -2961,7 +2968,7 @@
     break;
 
   case 138:
-#line 969 "pir.y"
+#line 962 "pir.y"
     {
                          /* the "instruction" that was set now appears to be
                           * an identifier; get the name, and check its type.
@@ -2998,22 +3005,22 @@
     break;
 
   case 139:
-#line 1005 "pir.y"
+#line 998 "pir.y"
     { push_operand(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 140:
-#line 1010 "pir.y"
+#line 1003 "pir.y"
     { push_operand(lexer, expr_from_key(lexer, (yyvsp[(1) - (1)].key))); ;}
     break;
 
   case 141:
-#line 1014 "pir.y"
+#line 1007 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
   case 142:
-#line 1016 "pir.y"
+#line 1009 "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));
@@ -3021,17 +3028,17 @@
     break;
 
   case 143:
-#line 1021 "pir.y"
+#line 1014 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 144:
-#line 1023 "pir.y"
+#line 1016 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 145:
-#line 1027 "pir.y"
+#line 1020 "pir.y"
     {
                            /* if $1 is a register, just return that */
                            if (TEST_FLAG((yyvsp[(1) - (2)].targ)->flags, TARGET_FLAG_IS_REG))
@@ -3055,22 +3062,22 @@
     break;
 
   case 146:
-#line 1050 "pir.y"
+#line 1043 "pir.y"
     { (yyval.key) = (yyvsp[(2) - (3)].key); ;}
     break;
 
   case 147:
-#line 1054 "pir.y"
+#line 1047 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 148:
-#line 1056 "pir.y"
+#line 1049 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 149:
-#line 1065 "pir.y"
+#line 1058 "pir.y"
     {
                           /* the instruction is already set in parrot_op rule */
                           unshift_operand(lexer, (yyvsp[(4) - (6)].expr));
@@ -3084,7 +3091,7 @@
     break;
 
   case 150:
-#line 1076 "pir.y"
+#line 1069 "pir.y"
     {
                           /* the instruction is already set in parrot_op rule */
                           unshift_operand(lexer, (yyvsp[(4) - (4)].expr));
@@ -3099,7 +3106,7 @@
     break;
 
   case 151:
-#line 1088 "pir.y"
+#line 1081 "pir.y"
     { /* XXX create a PMC const for $4 */
                           unshift_operand(lexer, expr_from_key(lexer, (yyvsp[(4) - (6)].key)));
                           unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (6)].targ)));
@@ -3110,7 +3117,7 @@
     break;
 
   case 153:
-#line 1101 "pir.y"
+#line 1094 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 0)
                               set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3122,7 +3129,7 @@
     break;
 
   case 154:
-#line 1110 "pir.y"
+#line 1103 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 0.0)
                               set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3134,7 +3141,7 @@
     break;
 
   case 155:
-#line 1119 "pir.y"
+#line 1112 "pir.y"
     {
                           set_instrf(lexer, "set", "%T%s", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].sval));
                           get_opinfo(yyscanner);
@@ -3142,39 +3149,65 @@
     break;
 
   case 156:
-#line 1124 "pir.y"
+#line 1117 "pir.y"
     {
-                          unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
+                          set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
   case 157:
-#line 1129 "pir.y"
+#line 1122 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
-                          if (sym == NULL) {
-                              if (!is_parrot_op(lexer, (yyvsp[(3) - (3)].sval)))
-                                  yypirerror(yyscanner, lexer, "'%s' is neither a declared symbol "
-                                                               "nor a parrot opcode", (yyvsp[(3) - (3)].sval));
-                              else { /* handle it as an op */
-                                  unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
+                          if (sym) {
+                              set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), target_from_symbol(lexer, sym));
+                              get_opinfo(yyscanner);
+                          }
+                          else { /* not a symbol */
+                              if (is_parrot_op(lexer, (yyvsp[(3) - (3)].sval))) {
+                                  set_instrf(lexer, (yyvsp[(3) - (3)].sval), "%T", (yyvsp[(1) - (3)].targ));
                                   get_opinfo(yyscanner);
-                                  check_first_arg_direction(yyscanner, (yyvsp[(3) - (3)].sval));
+                              }
+                              else {
+                                  yypirerror(yyscanner, lexer, "'%s' is neither a declared symbol "
+                                             "nor a parrot opcode", (yyvsp[(3) - (3)].sval));
                               }
                           }
-                          else { /* handle it as a symbol */
-                              update_instr(lexer, "set");
-                              unshift_operand(lexer, expr_from_target(lexer,
-                                                     target_from_symbol(lexer, sym)));
-                              unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
+                        ;}
+    break;
+
+  case 158:
+#line 1140 "pir.y"
+    {
+                          symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
+                          if (sym) {
+                              set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), target_from_symbol(lexer, sym));
                               get_opinfo(yyscanner);
                           }
+                          else { /* not a symbol */
+                              if (is_parrot_op(lexer, (yyvsp[(3) - (3)].sval))) {
+                                  set_instrf(lexer, (yyvsp[(3) - (3)].sval), "%T", (yyvsp[(1) - (3)].targ));
+                                  get_opinfo(yyscanner);
+                              }
+                              else {
+                                  yypirerror(yyscanner, lexer, "'%s' is neither a declared symbol "
+                                             "nor a parrot opcode", (yyvsp[(3) - (3)].sval));
+                              }
+                          }
                         ;}
     break;
 
-  case 158:
-#line 1150 "pir.y"
+  case 159:
+#line 1158 "pir.y"
+    {
+                          unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
+                          get_opinfo(yyscanner);
+                        ;}
+    break;
+
+  case 160:
+#line 1187 "pir.y"
     {
                           /*   $P0 = foo ["bar"]
                            *
@@ -3216,8 +3249,8 @@
                         ;}
     break;
 
-  case 159:
-#line 1190 "pir.y"
+  case 161:
+#line 1227 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(3) - (4)].sval));
                           target *t;
@@ -3237,8 +3270,8 @@
                         ;}
     break;
 
-  case 160:
-#line 1208 "pir.y"
+  case 162:
+#line 1245 "pir.y"
     {
                           target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (4)].ival));
                           set_target_key(preg, (yyvsp[(4) - (4)].key));
@@ -3247,16 +3280,16 @@
                         ;}
     break;
 
-  case 161:
-#line 1215 "pir.y"
+  case 163:
+#line 1252 "pir.y"
     {
                           set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].expr));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 162:
-#line 1220 "pir.y"
+  case 164:
+#line 1257 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 1)
                               set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3269,8 +3302,8 @@
                         ;}
     break;
 
-  case 163:
-#line 1231 "pir.y"
+  case 165:
+#line 1268 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 1.0)
                               set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3283,8 +3316,8 @@
                         ;}
     break;
 
-  case 164:
-#line 1242 "pir.y"
+  case 166:
+#line 1279 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 1)
                               set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3297,8 +3330,8 @@
                         ;}
     break;
 
-  case 165:
-#line 1253 "pir.y"
+  case 167:
+#line 1290 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 1.0)
                               set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3311,32 +3344,32 @@
                         ;}
     break;
 
-  case 166:
-#line 1264 "pir.y"
+  case 168:
+#line 1301 "pir.y"
     {
                           set_instrf(lexer, "add", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 167:
-#line 1269 "pir.y"
+  case 169:
+#line 1306 "pir.y"
     {
                           set_instrf(lexer, "sub", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 168:
-#line 1274 "pir.y"
+  case 170:
+#line 1311 "pir.y"
     {
                           set_instrf(lexer, (yyvsp[(3) - (4)].sval), "%T%E", (yyvsp[(1) - (4)].targ), (yyvsp[(4) - (4)].expr));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 169:
-#line 1279 "pir.y"
+  case 171:
+#line 1316 "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));
@@ -3348,8 +3381,8 @@
                         ;}
     break;
 
-  case 170:
-#line 1289 "pir.y"
+  case 172:
+#line 1326 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(1) - (4)].sval));
                           target *t;
@@ -3370,8 +3403,8 @@
                       ;}
     break;
 
-  case 171:
-#line 1308 "pir.y"
+  case 173:
+#line 1345 "pir.y"
     {
                           target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (4)].ival));
                           set_target_key(preg, (yyvsp[(2) - (4)].key));
@@ -3380,98 +3413,98 @@
                         ;}
     break;
 
-  case 172:
-#line 1342 "pir.y"
+  case 174:
+#line 1379 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%i%T", (yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 173:
-#line 1344 "pir.y"
+  case 175:
+#line 1381 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%n%T", (yyvsp[(1) - (3)].dval), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 174:
-#line 1346 "pir.y"
+  case 176:
+#line 1383 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%s%T", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 175:
-#line 1348 "pir.y"
+  case 177:
+#line 1385 "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 176:
-#line 1350 "pir.y"
+  case 178:
+#line 1387 "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 177:
-#line 1352 "pir.y"
+  case 179:
+#line 1389 "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 178:
-#line 1354 "pir.y"
+  case 180:
+#line 1391 "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 179:
-#line 1356 "pir.y"
+  case 181:
+#line 1393 "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 180:
-#line 1361 "pir.y"
+  case 182:
+#line 1398 "pir.y"
     { get_opinfo(yyscanner); ;}
     break;
 
-  case 181:
-#line 1370 "pir.y"
+  case 183:
+#line 1407 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, (yyvsp[(3) - (5)].sval), (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 182:
-#line 1372 "pir.y"
+  case 184:
+#line 1409 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "int", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 183:
-#line 1374 "pir.y"
+  case 185:
+#line 1411 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "num", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 184:
-#line 1376 "pir.y"
+  case 186:
+#line 1413 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "pmc", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 185:
-#line 1378 "pir.y"
+  case 187:
+#line 1415 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "string", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 186:
-#line 1380 "pir.y"
+  case 188:
+#line 1417 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "if", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 187:
-#line 1382 "pir.y"
+  case 189:
+#line 1419 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "unless", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 188:
-#line 1384 "pir.y"
+  case 190:
+#line 1421 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "goto", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 189:
-#line 1386 "pir.y"
+  case 191:
+#line 1423 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "null", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 190:
-#line 1388 "pir.y"
+  case 192:
+#line 1425 "pir.y"
     {
                           int istrue = evaluate_c(lexer, (yyvsp[(2) - (4)].cval));
                           /* if "unless", invert the true-ness */
@@ -3485,76 +3518,76 @@
                         ;}
     break;
 
-  case 191:
-#line 1400 "pir.y"
+  case 193:
+#line 1437 "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 192:
-#line 1405 "pir.y"
+  case 194:
+#line 1442 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 193:
-#line 1407 "pir.y"
+  case 195:
+#line 1444 "pir.y"
     { set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I", (yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 194:
-#line 1409 "pir.y"
+  case 196:
+#line 1446 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "int", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 195:
-#line 1411 "pir.y"
+  case 197:
+#line 1448 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "num", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 196:
-#line 1413 "pir.y"
+  case 198:
+#line 1450 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "pmc", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 197:
-#line 1415 "pir.y"
+  case 199:
+#line 1452 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "string", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 198:
-#line 1417 "pir.y"
+  case 200:
+#line 1454 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "if", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 199:
-#line 1419 "pir.y"
+  case 201:
+#line 1456 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "unless", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 200:
-#line 1421 "pir.y"
+  case 202:
+#line 1458 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 201:
-#line 1423 "pir.y"
+  case 203:
+#line 1460 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 202:
-#line 1425 "pir.y"
+  case 204:
+#line 1462 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 203:
-#line 1427 "pir.y"
+  case 205:
+#line 1464 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 204:
-#line 1429 "pir.y"
+  case 206:
+#line 1466 "pir.y"
     {
                           if ((yyvsp[(2) - (4)].ival) == COMPUTE_DURING_RUNTIME) {
                              if ((yyvsp[(1) - (4)].ival) == NEED_INVERT_OPNAME) /* "unless" */
@@ -3581,8 +3614,8 @@
                         ;}
     break;
 
-  case 205:
-#line 1460 "pir.y"
+  case 207:
+#line 1497 "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
@@ -3610,8 +3643,8 @@
                         ;}
     break;
 
-  case 206:
-#line 1486 "pir.y"
+  case 208:
+#line 1523 "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));
@@ -3621,8 +3654,8 @@
                         ;}
     break;
 
-  case 207:
-#line 1494 "pir.y"
+  case 209:
+#line 1531 "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));
@@ -3633,8 +3666,8 @@
                         ;}
     break;
 
-  case 208:
-#line 1503 "pir.y"
+  case 210:
+#line 1540 "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));
@@ -3645,71 +3678,71 @@
                         ;}
     break;
 
-  case 209:
-#line 1512 "pir.y"
+  case 211:
+#line 1549 "pir.y"
     { (yyval.ival) = evaluate_i_i((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
     break;
 
-  case 210:
-#line 1514 "pir.y"
+  case 212:
+#line 1551 "pir.y"
     { (yyval.ival) = evaluate_i_n((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
     break;
 
-  case 211:
-#line 1516 "pir.y"
+  case 213:
+#line 1553 "pir.y"
     { (yyval.ival) = evaluate_n_i((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
     break;
 
-  case 212:
-#line 1518 "pir.y"
+  case 214:
+#line 1555 "pir.y"
     { (yyval.ival) = evaluate_n_n((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
     break;
 
-  case 213:
-#line 1520 "pir.y"
+  case 215:
+#line 1557 "pir.y"
     { (yyval.ival) = evaluate_s_s((yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 214:
-#line 1524 "pir.y"
+  case 216:
+#line 1561 "pir.y"
     {
                           yypirerror(yyscanner, lexer, "cannot compare string to %s",
                                      (yyvsp[(3) - (3)].ival) == INT_TYPE ? "integer" : "number");
                         ;}
     break;
 
-  case 215:
-#line 1529 "pir.y"
+  case 217:
+#line 1566 "pir.y"
     { yypirerror(yyscanner, lexer, "cannot compare integer to string"); ;}
     break;
 
-  case 216:
-#line 1531 "pir.y"
+  case 218:
+#line 1568 "pir.y"
     { yypirerror(yyscanner, lexer, "cannot compare number to string"); ;}
     break;
 
-  case 217:
-#line 1535 "pir.y"
+  case 219:
+#line 1572 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
-  case 218:
-#line 1536 "pir.y"
+  case 220:
+#line 1573 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
-  case 219:
-#line 1539 "pir.y"
+  case 221:
+#line 1576 "pir.y"
     { (yyval.ival) = DONT_INVERT_OPNAME; /* no need to invert */ ;}
     break;
 
-  case 220:
-#line 1540 "pir.y"
+  case 222:
+#line 1577 "pir.y"
     { (yyval.ival) = NEED_INVERT_OPNAME; /* yes, invert opname */ ;}
     break;
 
-  case 223:
-#line 1548 "pir.y"
+  case 225:
+#line 1585 "pir.y"
     {
                           set_instrf(lexer, "branch", "%I", (yyvsp[(2) - (3)].sval));
                           set_op_labelflag(lexer, BIT(0)); /* bit 0 means: "1 << 0" */
@@ -3717,38 +3750,38 @@
                         ;}
     break;
 
-  case 224:
-#line 1556 "pir.y"
+  case 226:
+#line 1593 "pir.y"
     { declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].symb)); ;}
     break;
 
-  case 225:
-#line 1560 "pir.y"
+  case 227:
+#line 1597 "pir.y"
     { (yyval.symb) = (yyvsp[(1) - (1)].symb); ;}
     break;
 
-  case 226:
-#line 1562 "pir.y"
+  case 228:
+#line 1599 "pir.y"
     { (yyval.symb) = add_local((yyvsp[(1) - (3)].symb), (yyvsp[(3) - (3)].symb)); ;}
     break;
 
-  case 227:
-#line 1566 "pir.y"
+  case 229:
+#line 1603 "pir.y"
     { (yyval.symb) = new_local(lexer, (yyvsp[(1) - (2)].sval), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 228:
-#line 1569 "pir.y"
+  case 230:
+#line 1606 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 229:
-#line 1570 "pir.y"
+  case 231:
+#line 1607 "pir.y"
     { (yyval.ival) = 1; ;}
     break;
 
-  case 230:
-#line 1574 "pir.y"
+  case 232:
+#line 1611 "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)) {
 
@@ -3760,13 +3793,13 @@
                         ;}
     break;
 
-  case 231:
-#line 1589 "pir.y"
+  case 233:
+#line 1626 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
-  case 234:
-#line 1601 "pir.y"
+  case 236:
+#line 1638 "pir.y"
     { /* $4 contains an invocation object */
                               set_invocation_args((yyvsp[(4) - (8)].invo), (yyvsp[(3) - (8)].argm));
                               set_invocation_results((yyvsp[(4) - (8)].invo), (yyvsp[(6) - (8)].targ));
@@ -3774,73 +3807,73 @@
                             ;}
     break;
 
-  case 235:
-#line 1609 "pir.y"
+  case 237:
+#line 1646 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 236:
-#line 1611 "pir.y"
+  case 238:
+#line 1648 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 237:
-#line 1615 "pir.y"
+  case 239:
+#line 1652 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 238:
-#line 1617 "pir.y"
+  case 240:
+#line 1654 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
-  case 239:
-#line 1621 "pir.y"
+  case 241:
+#line 1658 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 240:
-#line 1625 "pir.y"
+  case 242:
+#line 1662 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 241:
-#line 1627 "pir.y"
+  case 243:
+#line 1664 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
     break;
 
-  case 242:
-#line 1630 "pir.y"
+  case 244:
+#line 1667 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ), (yyvsp[(5) - (5)].expr)); ;}
     break;
 
-  case 243:
-#line 1634 "pir.y"
+  case 245:
+#line 1671 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 244:
-#line 1636 "pir.y"
+  case 246:
+#line 1673 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
     break;
 
-  case 245:
-#line 1640 "pir.y"
+  case 247:
+#line 1677 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 246:
-#line 1642 "pir.y"
+  case 248:
+#line 1679 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 247:
-#line 1646 "pir.y"
+  case 249:
+#line 1683 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 248:
-#line 1648 "pir.y"
+  case 250:
+#line 1685 "pir.y"
     {
                                if ((yyvsp[(2) - (2)].targ))
                                    (yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].targ));
@@ -3849,39 +3882,39 @@
                            ;}
     break;
 
-  case 249:
-#line 1657 "pir.y"
+  case 251:
+#line 1694 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
     break;
 
-  case 250:
-#line 1659 "pir.y"
+  case 252:
+#line 1696 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 252:
-#line 1667 "pir.y"
+  case 254:
+#line 1704 "pir.y"
     { set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ));
                              (yyval.invo) = (yyvsp[(3) - (3)].invo);
                            ;}
     break;
 
-  case 253:
-#line 1671 "pir.y"
+  case 255:
+#line 1708 "pir.y"
     { set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ));
                              (yyval.invo) = (yyvsp[(3) - (3)].invo);
                            ;}
     break;
 
-  case 254:
-#line 1675 "pir.y"
+  case 256:
+#line 1712 "pir.y"
     { set_invocation_results((yyvsp[(1) - (1)].invo), NULL);
                              (yyval.invo) = (yyvsp[(1) - (1)].invo);
                            ;}
     break;
 
-  case 257:
-#line 1685 "pir.y"
+  case 259:
+#line 1722 "pir.y"
     {
                              target *invocant;
 
@@ -3909,21 +3942,21 @@
                            ;}
     break;
 
-  case 258:
-#line 1713 "pir.y"
+  case 260:
+#line 1750 "pir.y"
     {
                              (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1) - (2)].targ), NULL);
                              set_invocation_args((yyval.invo), (yyvsp[(2) - (2)].argm));
                            ;}
     break;
 
-  case 259:
-#line 1720 "pir.y"
+  case 261:
+#line 1757 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 260:
-#line 1722 "pir.y"
+  case 262:
+#line 1759 "pir.y"
     {
                                symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                                if (sym == NULL)
@@ -3932,8 +3965,8 @@
                                (yyval.targ) = target_from_symbol(lexer, sym); ;}
     break;
 
-  case 261:
-#line 1731 "pir.y"
+  case 263:
+#line 1768 "pir.y"
     { /* check that this identifier was declared */
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
 
@@ -3952,23 +3985,23 @@
                            ;}
     break;
 
-  case 262:
-#line 1748 "pir.y"
+  case 264:
+#line 1785 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival))); ;}
     break;
 
-  case 263:
-#line 1750 "pir.y"
+  case 265:
+#line 1787 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival))); ;}
     break;
 
-  case 264:
-#line 1752 "pir.y"
+  case 266:
+#line 1789 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval))); ;}
     break;
 
-  case 265:
-#line 1756 "pir.y"
+  case 267:
+#line 1793 "pir.y"
     {
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                              if (sym == NULL)
@@ -3979,89 +4012,89 @@
                            ;}
     break;
 
-  case 266:
-#line 1765 "pir.y"
+  case 268:
+#line 1802 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 267:
-#line 1770 "pir.y"
+  case 269:
+#line 1807 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
     break;
 
-  case 268:
-#line 1774 "pir.y"
+  case 270:
+#line 1811 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 269:
-#line 1776 "pir.y"
+  case 271:
+#line 1813 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 270:
-#line 1780 "pir.y"
+  case 272:
+#line 1817 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 271:
-#line 1782 "pir.y"
+  case 273:
+#line 1819 "pir.y"
     { (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 272:
-#line 1786 "pir.y"
+  case 274:
+#line 1823 "pir.y"
     { (yyval.targ) = set_param_flag(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 273:
-#line 1790 "pir.y"
+  case 275:
+#line 1827 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 274:
-#line 1792 "pir.y"
+  case 276:
+#line 1829 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 275:
-#line 1796 "pir.y"
+  case 277:
+#line 1833 "pir.y"
     { (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
     break;
 
-  case 276:
-#line 1798 "pir.y"
+  case 278:
+#line 1835 "pir.y"
     { (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
     break;
 
-  case 277:
-#line 1800 "pir.y"
+  case 279:
+#line 1837 "pir.y"
     { (yyval.ival) = TARGET_FLAG_SLURPY; ;}
     break;
 
-  case 278:
-#line 1802 "pir.y"
+  case 280:
+#line 1839 "pir.y"
     {
                              (yyval.ival) = TARGET_FLAG_NAMED;
                              set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
                            ;}
     break;
 
-  case 279:
-#line 1812 "pir.y"
+  case 281:
+#line 1849 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
-  case 284:
-#line 1822 "pir.y"
+  case 286:
+#line 1859 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args((yyval.invo), (yyvsp[(2) - (3)].argm));
                             ;}
     break;
 
-  case 285:
-#line 1827 "pir.y"
+  case 287:
+#line 1864 "pir.y"
     { /* was the invocation a method call? then it becomes a method tail
                                * call, otherwise it's just a normal (sub) tail call.
                                */
@@ -4072,270 +4105,270 @@
                             ;}
     break;
 
-  case 286:
-#line 1838 "pir.y"
+  case 288:
+#line 1875 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args((yyval.invo), (yyvsp[(2) - (3)].argm));
                             ;}
     break;
 
-  case 287:
-#line 1845 "pir.y"
+  case 289:
+#line 1882 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 288:
-#line 1849 "pir.y"
+  case 290:
+#line 1886 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 289:
-#line 1851 "pir.y"
+  case 291:
+#line 1888 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 290:
-#line 1855 "pir.y"
+  case 292:
+#line 1892 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 291:
-#line 1857 "pir.y"
+  case 293:
+#line 1894 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
     break;
 
-  case 294:
-#line 1865 "pir.y"
+  case 296:
+#line 1902 "pir.y"
     { (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
     break;
 
-  case 295:
-#line 1869 "pir.y"
+  case 297:
+#line 1906 "pir.y"
     { (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 296:
-#line 1873 "pir.y"
+  case 298:
+#line 1910 "pir.y"
     { (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr)));  ;}
     break;
 
-  case 297:
-#line 1879 "pir.y"
+  case 299:
+#line 1916 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args((yyval.invo), (yyvsp[(3) - (5)].argm));
                             ;}
     break;
 
-  case 298:
-#line 1888 "pir.y"
+  case 300:
+#line 1925 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args((yyval.invo), (yyvsp[(3) - (5)].argm));
                             ;}
     break;
 
-  case 299:
-#line 1895 "pir.y"
+  case 301:
+#line 1932 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 300:
-#line 1897 "pir.y"
+  case 302:
+#line 1934 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 301:
-#line 1902 "pir.y"
+  case 303:
+#line 1939 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 302:
-#line 1904 "pir.y"
+  case 304:
+#line 1941 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
-  case 303:
-#line 1909 "pir.y"
+  case 305:
+#line 1946 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 304:
-#line 1913 "pir.y"
+  case 306:
+#line 1950 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 305:
-#line 1915 "pir.y"
+  case 307:
+#line 1952 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 306:
-#line 1919 "pir.y"
+  case 308:
+#line 1956 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 307:
-#line 1921 "pir.y"
+  case 309:
+#line 1958 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
-  case 308:
-#line 1925 "pir.y"
+  case 310:
+#line 1962 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 309:
-#line 1930 "pir.y"
+  case 311:
+#line 1967 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 310:
-#line 1932 "pir.y"
+  case 312:
+#line 1969 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 311:
-#line 1936 "pir.y"
+  case 313:
+#line 1973 "pir.y"
     { (yyval.ival) = ARG_FLAG_FLAT; ;}
     break;
 
-  case 312:
-#line 1938 "pir.y"
+  case 314:
+#line 1975 "pir.y"
     {
                                (yyval.ival) = ARG_FLAG_NAMED;
                                set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
                              ;}
     break;
 
-  case 313:
-#line 1945 "pir.y"
+  case 315:
+#line 1982 "pir.y"
     { (yyval.sval) = NULL; ;}
     break;
 
-  case 314:
-#line 1947 "pir.y"
+  case 316:
+#line 1984 "pir.y"
     { (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
     break;
 
-  case 315:
-#line 1951 "pir.y"
+  case 317:
+#line 1988 "pir.y"
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
-  case 319:
-#line 1962 "pir.y"
+  case 321:
+#line 1999 "pir.y"
     { store_global_constant(lexer, (yyvsp[(2) - (2)].cval)); ;}
     break;
 
-  case 320:
-#line 1966 "pir.y"
+  case 322:
+#line 2003 "pir.y"
     { /* XXX is .globalconst to be kept? */ ;}
     break;
 
-  case 321:
-#line 1970 "pir.y"
+  case 323:
+#line 2007 "pir.y"
     { (yyval.cval) = new_named_const(lexer, INT_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
     break;
 
-  case 322:
-#line 1972 "pir.y"
+  case 324:
+#line 2009 "pir.y"
     { (yyval.cval) = new_named_const(lexer, NUM_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
     break;
 
-  case 323:
-#line 1974 "pir.y"
+  case 325:
+#line 2011 "pir.y"
     { (yyval.cval) = new_named_const(lexer, STRING_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 324:
-#line 1976 "pir.y"
+  case 326:
+#line 2013 "pir.y"
     { (yyval.cval) = new_pmc_const((yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
     break;
 
-  case 325:
-#line 1983 "pir.y"
+  case 327:
+#line 2020 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
-  case 326:
-#line 1984 "pir.y"
+  case 328:
+#line 2021 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
-  case 327:
-#line 1988 "pir.y"
+  case 329:
+#line 2025 "pir.y"
     { (yyval.cval) = new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 328:
-#line 1989 "pir.y"
+  case 330:
+#line 2026 "pir.y"
     { (yyval.cval) = new_const(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 329:
-#line 1990 "pir.y"
+  case 331:
+#line 2027 "pir.y"
     { (yyval.cval) = new_const(lexer, NUM_TYPE, (yyvsp[(1) - (1)].dval)); ;}
     break;
 
-  case 330:
-#line 1993 "pir.y"
+  case 332:
+#line 2030 "pir.y"
     { (yyval.ival) = OP_NE; ;}
     break;
 
-  case 331:
-#line 1994 "pir.y"
+  case 333:
+#line 2031 "pir.y"
     { (yyval.ival) = OP_EQ; ;}
     break;
 
-  case 332:
-#line 1995 "pir.y"
+  case 334:
+#line 2032 "pir.y"
     { (yyval.ival) = OP_LT; ;}
     break;
 
-  case 333:
-#line 1996 "pir.y"
+  case 335:
+#line 2033 "pir.y"
     { (yyval.ival) = OP_LE; ;}
     break;
 
-  case 334:
-#line 1997 "pir.y"
+  case 336:
+#line 2034 "pir.y"
     { (yyval.ival) = OP_GE; ;}
     break;
 
-  case 335:
-#line 1998 "pir.y"
+  case 337:
+#line 2035 "pir.y"
     { (yyval.ival) = OP_GT; ;}
     break;
 
-  case 336:
-#line 2001 "pir.y"
+  case 338:
+#line 2038 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
-  case 337:
-#line 2002 "pir.y"
+  case 339:
+#line 2039 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
-  case 338:
-#line 2003 "pir.y"
+  case 340:
+#line 2040 "pir.y"
     { (yyval.ival) = PMC_TYPE; ;}
     break;
 
-  case 339:
-#line 2004 "pir.y"
+  case 341:
+#line 2041 "pir.y"
     { (yyval.ival) = STRING_TYPE; ;}
     break;
 
-  case 340:
-#line 2012 "pir.y"
+  case 342:
+#line 2049 "pir.y"
     { set_curtarget(lexer, (yyvsp[(1) - (1)].targ));  ;}
     break;
 
-  case 342:
-#line 2016 "pir.y"
+  case 344:
+#line 2053 "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) {
@@ -4345,282 +4378,281 @@
                                sym = new_symbol(lexer, (yyvsp[(1) - (1)].sval), UNKNOWN_TYPE);
                            }
                            (yyval.targ) = target_from_symbol(lexer, sym);
-
                          ;}
     break;
 
-  case 343:
-#line 2029 "pir.y"
+  case 345:
+#line 2065 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 344:
-#line 2030 "pir.y"
+  case 346:
+#line 2066 "pir.y"
     { (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 345:
-#line 2031 "pir.y"
+  case 347:
+#line 2067 "pir.y"
     { (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 346:
-#line 2032 "pir.y"
+  case 348:
+#line 2068 "pir.y"
     { (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 349:
-#line 2040 "pir.y"
+  case 351:
+#line 2076 "pir.y"
     { (yyval.sval) = "if"; ;}
     break;
 
-  case 350:
-#line 2041 "pir.y"
+  case 352:
+#line 2077 "pir.y"
     { (yyval.sval) = "unless"; ;}
     break;
 
-  case 351:
-#line 2042 "pir.y"
+  case 353:
+#line 2078 "pir.y"
     { (yyval.sval) = "goto"; ;}
     break;
 
-  case 352:
-#line 2043 "pir.y"
+  case 354:
+#line 2079 "pir.y"
     { (yyval.sval) = "int"; ;}
     break;
 
-  case 353:
-#line 2044 "pir.y"
+  case 355:
+#line 2080 "pir.y"
     { (yyval.sval) = "num"; ;}
     break;
 
-  case 354:
-#line 2045 "pir.y"
+  case 356:
+#line 2081 "pir.y"
     { (yyval.sval) = "string"; ;}
     break;
 
-  case 355:
-#line 2046 "pir.y"
+  case 357:
+#line 2082 "pir.y"
     { (yyval.sval) = "pmc"; ;}
     break;
 
-  case 356:
-#line 2047 "pir.y"
+  case 358:
+#line 2083 "pir.y"
     { (yyval.sval) = "null"; ;}
     break;
 
-  case 357:
-#line 2050 "pir.y"
+  case 359:
+#line 2086 "pir.y"
     { (yyval.sval) = "neg"; ;}
     break;
 
-  case 358:
-#line 2051 "pir.y"
+  case 360:
+#line 2087 "pir.y"
     { (yyval.sval) = "not"; ;}
     break;
 
-  case 359:
-#line 2052 "pir.y"
+  case 361:
+#line 2088 "pir.y"
     { (yyval.sval) = "bnot"; ;}
     break;
 
-  case 360:
-#line 2055 "pir.y"
+  case 362:
+#line 2091 "pir.y"
     { (yyval.ival) = OP_ADD; ;}
     break;
 
-  case 361:
-#line 2056 "pir.y"
+  case 363:
+#line 2092 "pir.y"
     { (yyval.ival) = OP_SUB; ;}
     break;
 
-  case 362:
-#line 2057 "pir.y"
+  case 364:
+#line 2093 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 363:
-#line 2058 "pir.y"
+  case 365:
+#line 2094 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 364:
-#line 2059 "pir.y"
+  case 366:
+#line 2095 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 365:
-#line 2060 "pir.y"
+  case 367:
+#line 2096 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 366:
-#line 2061 "pir.y"
+  case 368:
+#line 2097 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 367:
-#line 2062 "pir.y"
+  case 369:
+#line 2098 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 368:
-#line 2063 "pir.y"
+  case 370:
+#line 2099 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 369:
-#line 2064 "pir.y"
+  case 371:
+#line 2100 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 370:
-#line 2065 "pir.y"
+  case 372:
+#line 2101 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 371:
-#line 2066 "pir.y"
+  case 373:
+#line 2102 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 372:
-#line 2067 "pir.y"
+  case 374:
+#line 2103 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 373:
-#line 2068 "pir.y"
+  case 375:
+#line 2104 "pir.y"
     { (yyval.ival) = OP_OR; ;}
     break;
 
-  case 374:
-#line 2069 "pir.y"
+  case 376:
+#line 2105 "pir.y"
     { (yyval.ival) = OP_AND; ;}
     break;
 
-  case 375:
-#line 2070 "pir.y"
+  case 377:
+#line 2106 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 376:
-#line 2071 "pir.y"
+  case 378:
+#line 2107 "pir.y"
     { (yyval.ival) = OP_XOR; ;}
     break;
 
-  case 377:
-#line 2072 "pir.y"
+  case 379:
+#line 2108 "pir.y"
     { (yyval.ival) = OP_ISEQ; ;}
     break;
 
-  case 378:
-#line 2073 "pir.y"
+  case 380:
+#line 2109 "pir.y"
     { (yyval.ival) = OP_ISLE; ;}
     break;
 
-  case 379:
-#line 2074 "pir.y"
+  case 381:
+#line 2110 "pir.y"
     { (yyval.ival) = OP_ISLT; ;}
     break;
 
-  case 380:
-#line 2075 "pir.y"
+  case 382:
+#line 2111 "pir.y"
     { (yyval.ival) = OP_ISGE; ;}
     break;
 
-  case 381:
-#line 2076 "pir.y"
+  case 383:
+#line 2112 "pir.y"
     { (yyval.ival) = OP_ISGT; ;}
     break;
 
-  case 382:
-#line 2077 "pir.y"
+  case 384:
+#line 2113 "pir.y"
     { (yyval.ival) = OP_ISNE; ;}
     break;
 
-  case 383:
-#line 2083 "pir.y"
+  case 385:
+#line 2119 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 384:
-#line 2084 "pir.y"
+  case 386:
+#line 2120 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 385:
-#line 2085 "pir.y"
+  case 387:
+#line 2121 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 386:
-#line 2086 "pir.y"
+  case 388:
+#line 2122 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 387:
-#line 2087 "pir.y"
+  case 389:
+#line 2123 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 388:
-#line 2088 "pir.y"
+  case 390:
+#line 2124 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 389:
-#line 2089 "pir.y"
+  case 391:
+#line 2125 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 390:
-#line 2090 "pir.y"
+  case 392:
+#line 2126 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 391:
-#line 2091 "pir.y"
+  case 393:
+#line 2127 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 392:
-#line 2092 "pir.y"
+  case 394:
+#line 2128 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 393:
-#line 2093 "pir.y"
+  case 395:
+#line 2129 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 394:
-#line 2094 "pir.y"
+  case 396:
+#line 2130 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 396:
-#line 2115 "pir.y"
+  case 398:
+#line 2151 "pir.y"
     { new_subr(lexer, "@start"); ;}
     break;
 
-  case 405:
-#line 2131 "pir.y"
+  case 407:
+#line 2167 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
-  case 410:
-#line 2141 "pir.y"
+  case 412:
+#line 2177 "pir.y"
     { set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 411:
-#line 2145 "pir.y"
+  case 413:
+#line 2181 "pir.y"
     { new_subr(lexer, NULL); ;}
     break;
 
-  case 412:
-#line 2150 "pir.y"
+  case 414:
+#line 2186 "pir.y"
     {
                                   if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval)))
                                       get_opinfo(yyscanner);
@@ -4632,7 +4664,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 4636 "pirparser.c"
+#line 4668 "pirparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4846,7 +4878,7 @@
 }
 
 
-#line 2161 "pir.y"
+#line 2197 "pir.y"
 
 
 

Modified: trunk/compilers/pirc/new/pirparser.h
==============================================================================
--- trunk/compilers/pirc/new/pirparser.h	(original)
+++ trunk/compilers/pirc/new/pirparser.h	Thu Dec 18 13:43:48 2008
@@ -278,7 +278,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 238 "pir.y"
+#line 232 "pir.y"
 {
     double              dval;
     int                 ival;

Modified: trunk/compilers/pirc/t/stmts.t
==============================================================================
--- trunk/compilers/pirc/t/stmts.t	(original)
+++ trunk/compilers/pirc/t/stmts.t	Thu Dec 18 13:43:48 2008
@@ -5,7 +5,7 @@
 use lib "../../lib";
 use Parrot::Test tests => 5;
 
-pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "macro");
+pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "assignments");
 .sub main
     .local pmc x, y, z
     .local string a, b, c
@@ -55,6 +55,7 @@
 .sub int
     .local int if, int, goto
     .local pmc pmc, null
+    if int > if goto goto
     if int > if goto L
 goto:
 L:
@@ -62,6 +63,7 @@
 CODE
 .namespace []
 int:
+    lt I1, I0, 8
     lt I1, I0, 4
 goto:
 L:



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