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

[svn:parrot] r34695 - trunk/compilers/pirc/new

From:
kjs
Date:
December 31, 2008 02:26
Subject:
[svn:parrot] r34695 - trunk/compilers/pirc/new
Message ID:
20081231102538.BA4FFCB9FA@x12.develooper.com
Author: kjs
Date: Wed Dec 31 02:25:33 2008
New Revision: 34695

Modified:
   trunk/compilers/pirc/new/main.c
   trunk/compilers/pirc/new/pir.y
   trunk/compilers/pirc/new/pircompunit.c
   trunk/compilers/pirc/new/piremit.c
   trunk/compilers/pirc/new/pirparser.c
   trunk/compilers/pirc/new/pirpcc.c

Log:
[pirc] add syntax rule for ("x" => foo) = bar(), which was missing.
+ :named results don't work now; some debug stuff is added.
+ fix will follow.

Modified: trunk/compilers/pirc/new/main.c
==============================================================================
--- trunk/compilers/pirc/new/main.c	(original)
+++ trunk/compilers/pirc/new/main.c	Wed Dec 31 02:25:33 2008
@@ -172,6 +172,7 @@
     /* go parse */
     yypirparse(yyscanner, lexer);
 
+
     if (lexer->parse_errors == 0) {
         char outfile[20];
         sprintf(outfile, "output_thr_%d", thr_id);

Modified: trunk/compilers/pirc/new/pir.y
==============================================================================
--- trunk/compilers/pirc/new/pir.y	(original)
+++ trunk/compilers/pirc/new/pir.y	Wed Dec 31 02:25:33 2008
@@ -1820,6 +1820,8 @@
 
 result_target        : target target_flags
                            { $$ = set_param_flag(lexer, $1, $2); }
+                     | TK_STRINGC "=>" target
+                           { $$ = set_param_alias(lexer, $1); }
                      ;
 
 target_flags         : /* empty */
@@ -1838,6 +1840,8 @@
                            {
                              $$ = TARGET_FLAG_NAMED;
                              set_param_alias(lexer, $2);
+                             if (TEST_FLAG(lexer->curtarget->flags, TARGET_FLAG_NAMED))
+                                fprintf(stderr, "alias: %s\n", lexer->curtarget->alias);
                            }
                      ;
 

Modified: trunk/compilers/pirc/new/pircompunit.c
==============================================================================
--- trunk/compilers/pirc/new/pircompunit.c	(original)
+++ trunk/compilers/pirc/new/pircompunit.c	Wed Dec 31 02:25:33 2008
@@ -680,6 +680,7 @@
     PARROT_ASSERT(lexer->curtarget != NULL);
     lexer->curtarget->alias = alias;
     SET_FLAG(lexer->curtarget->flags, TARGET_FLAG_NAMED);
+    fprintf(stderr, "lexer->curtarget->alias = %s\n", lexer->curtarget->alias);
     return lexer->curtarget;
 }
 
@@ -809,8 +810,10 @@
 argument *
 set_arg_alias(lexer_state * const lexer, char const * const alias) {
     PARROT_ASSERT(lexer->curarg != NULL);
+    fprintf(stderr, "set arg_alias attempt...\n");
     lexer->curarg->alias = alias;
     SET_FLAG(lexer->curarg->flags, ARG_FLAG_NAMED);
+    fprintf(stderr, "set_arg_alias ok\n");
     return lexer->curarg;
 }
 
@@ -1267,6 +1270,7 @@
     c->type     = type;
     c->next     = NULL;
 
+    /* based on the indicated type, cast the variable argument to the right type. */
     switch (type) {
         case INT_TYPE:
             c->val.ival = va_arg(arg_ptr, int);
@@ -1374,10 +1378,6 @@
 PARROT_CANNOT_RETURN_NULL
 static invocation *
 new_invocation(lexer_state * const lexer) {
-    /*
-    invocation *inv = (invocation *)malloc(sizeof (invocation));
-    PARROT_ASSERT(inv);
-    */
     /* optimization: return the address of the cached object */
     invocation *inv = &lexer->obj_cache.inv_cache;
     /* clear all fields */
@@ -1414,7 +1414,9 @@
 =item C<target *
 new_reg(lexer_state * const lexer, int type, int regno)>
 
-Create a C<target> node from a register. Returns the newly created register.
+Create a C<target> node from a register. A new C<pir_reg> object is
+created of type C<type> and PIR register number C<regno>. The target
+node is returned.
 
 =cut
 
@@ -1428,6 +1430,7 @@
 
     color_reg(lexer, type, regno);
     reg     = find_register(lexer, type, regno);
+    /* set a pointer to the pir_reg's info field. */
     t->info = &reg->info;
 
     /* set a flag on this target node saying it's a register */
@@ -1934,7 +1937,8 @@
 
 /*
 
-=item C<add_key(key *keylist, expression * const exprkey)>
+=item C<key *
+add_key(lexer_state * const lexer, key * keylist, expression * const exprkey)>
 
 Adds a new, nested key (in C<exprkey>) to the current key,
 pointed to by C<keylist>. C<keylist> is returned.
@@ -1962,7 +1966,7 @@
 /*
 
 =item C<symbol *
-add_local(symbol *list, symbol *local)>
+add_local(symbol * const list, symbol * const local)>
 
 Add local C<local> to the list pointed to by C<list>. The new object
 is inserted at the front of the list. C<list> is returned
@@ -2241,8 +2245,7 @@
              */
 
             /* create an operand that refers to a constant PMC */
-            new_second_operand = expr_from_const(lexer, new_const(lexer, INT_TYPE,
-                                                                  glob->const_table_index));
+            new_second_operand = expr_from_int(lexer, glob->const_table_index);
             /* link it into the list of operands; the /current/ second operand should be removed,
              * so insert the new expression as second operand, and make sure the old second
              * operand is no longer in the list.

Modified: trunk/compilers/pirc/new/piremit.c
==============================================================================
--- trunk/compilers/pirc/new/piremit.c	(original)
+++ trunk/compilers/pirc/new/piremit.c	Wed Dec 31 02:25:33 2008
@@ -117,7 +117,7 @@
 */
 void
 print_target(lexer_state * const lexer, target * const t) {
-    if (t->info)
+    PARROT_ASSERT(t->info);
     fprintf(out, "%c%d", pir_register_types[t->info->type], t->info->color);
 
     /* if the target has a key, print that too */

Modified: trunk/compilers/pirc/new/pirparser.c
==============================================================================
--- trunk/compilers/pirc/new/pirparser.c	(original)
+++ trunk/compilers/pirc/new/pirparser.c	Wed Dec 31 02:25:33 2008
@@ -812,16 +812,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  10
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1073
+#define YYLAST   1050
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  139
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  166
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  421
+#define YYNRULES  422
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  656
+#define YYNSTATES  659
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -906,21 +906,21 @@
      790,   796,   797,   800,   801,   803,   805,   808,   812,   814,
      817,   821,   825,   827,   829,   831,   836,   839,   841,   843,
      845,   847,   849,   851,   853,   855,   859,   860,   862,   864,
-     868,   871,   872,   875,   877,   879,   881,   884,   886,   888,
-     890,   892,   894,   898,   902,   906,   910,   911,   913,   915,
-     919,   921,   923,   927,   930,   932,   938,   944,   945,   947,
-     949,   952,   956,   957,   959,   961,   964,   968,   969,   972,
-     974,   977,   978,   980,   984,   987,   989,   991,   994,   997,
-    1002,  1007,  1012,  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,  1145,  1147,  1149,
-    1151,  1153,  1155,  1157,  1159,  1162,  1164,  1166,  1169,  1171,
-    1174,  1176,  1179,  1182,  1184,  1187,  1190,  1192,  1194,  1196,
-    1200,  1202
+     868,   871,   875,   876,   879,   881,   883,   885,   888,   890,
+     892,   894,   896,   898,   902,   906,   910,   914,   915,   917,
+     919,   923,   925,   927,   931,   934,   936,   942,   948,   949,
+     951,   953,   956,   960,   961,   963,   965,   968,   972,   973,
+     976,   978,   981,   982,   984,   988,   991,   993,   995,   998,
+    1001,  1006,  1011,  1016,  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,  1145,  1147,  1149,  1151,
+    1153,  1155,  1157,  1159,  1161,  1163,  1166,  1168,  1170,  1173,
+    1175,  1178,  1180,  1183,  1186,  1188,  1191,  1194,  1196,  1198,
+    1200,  1204,  1206
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -1013,40 +1013,40 @@
       -1,    46,    -1,   291,    -1,    49,    -1,    51,    -1,    46,
       -1,   291,    -1,    49,    -1,   119,   251,   120,    -1,    -1,
      252,    -1,   253,    -1,   252,   121,   253,    -1,   288,   254,
-      -1,    -1,   254,   255,    -1,   101,    -1,   102,    -1,    99,
-      -1,    98,   277,    -1,   257,    -1,   258,    -1,   267,    -1,
-     259,    -1,   268,    -1,    18,   260,    35,    -1,    33,   244,
-      35,    -1,    19,   260,    35,    -1,   119,   261,   120,    -1,
-      -1,   262,    -1,   263,    -1,   262,   121,   263,    -1,   265,
-      -1,   264,    -1,    46,    54,   266,    -1,   266,   275,    -1,
-     284,    -1,    24,    35,   272,    25,    35,    -1,    22,    35,
-     269,    23,    35,    -1,    -1,   270,    -1,   271,    -1,   270,
-     271,    -1,    20,   265,    35,    -1,    -1,   273,    -1,   274,
-      -1,   273,   274,    -1,    21,   265,    35,    -1,    -1,   275,
-     276,    -1,   100,    -1,    98,   277,    -1,    -1,   278,    -1,
-     119,    46,   120,    -1,   280,    35,    -1,   281,    -1,   282,
-      -1,    17,   283,    -1,    16,   283,    -1,    38,   291,   122,
-      47,    -1,    39,   291,   122,    48,    -1,    41,   291,   122,
-      46,    -1,    46,   291,   122,   285,    -1,   288,    -1,   285,
-      -1,    46,    -1,    47,    -1,    48,    -1,    53,    -1,    55,
-      -1,    56,    -1,    57,    -1,    58,    -1,    60,    -1,    59,
-      -1,    38,    -1,    39,    -1,    40,    -1,    41,    -1,   289,
-      -1,   290,    -1,   291,    -1,    49,    -1,    50,    -1,    52,
-      -1,    51,    -1,    37,    -1,   292,    -1,    42,    -1,    43,
-      -1,    45,    -1,    38,    -1,    39,    -1,    41,    -1,    40,
-      -1,    44,    -1,   129,    -1,   130,    -1,   131,    -1,   132,
-      -1,   129,    -1,   133,    -1,   134,    -1,   135,    -1,   136,
-      -1,   137,    -1,   131,    -1,   138,    -1,    68,    -1,    61,
-      -1,    62,    -1,    63,    -1,    65,    -1,    66,    -1,    64,
-      -1,    67,    -1,    56,    -1,    58,    -1,    57,    -1,    60,
-      -1,    59,    -1,    55,    -1,    74,    -1,    75,    -1,    76,
-      -1,    77,    -1,    80,    -1,    78,    -1,    79,    -1,    81,
-      -1,    82,    -1,    70,    -1,    71,    -1,    69,    -1,   297,
-     298,    -1,   142,    -1,   299,    -1,   298,   299,    -1,   300,
-      -1,   163,    35,    -1,   230,    -1,   159,    35,    -1,   145,
-      35,    -1,   189,    -1,    36,   301,    -1,   302,   301,    -1,
-     304,    -1,   197,    -1,   304,    -1,   303,   171,    36,    -1,
-     117,    -1,   204,   206,    35,    -1
+      -1,    46,    54,   288,    -1,    -1,   254,   255,    -1,   101,
+      -1,   102,    -1,    99,    -1,    98,   277,    -1,   257,    -1,
+     258,    -1,   267,    -1,   259,    -1,   268,    -1,    18,   260,
+      35,    -1,    33,   244,    35,    -1,    19,   260,    35,    -1,
+     119,   261,   120,    -1,    -1,   262,    -1,   263,    -1,   262,
+     121,   263,    -1,   265,    -1,   264,    -1,    46,    54,   266,
+      -1,   266,   275,    -1,   284,    -1,    24,    35,   272,    25,
+      35,    -1,    22,    35,   269,    23,    35,    -1,    -1,   270,
+      -1,   271,    -1,   270,   271,    -1,    20,   265,    35,    -1,
+      -1,   273,    -1,   274,    -1,   273,   274,    -1,    21,   265,
+      35,    -1,    -1,   275,   276,    -1,   100,    -1,    98,   277,
+      -1,    -1,   278,    -1,   119,    46,   120,    -1,   280,    35,
+      -1,   281,    -1,   282,    -1,    17,   283,    -1,    16,   283,
+      -1,    38,   291,   122,    47,    -1,    39,   291,   122,    48,
+      -1,    41,   291,   122,    46,    -1,    46,   291,   122,   285,
+      -1,   288,    -1,   285,    -1,    46,    -1,    47,    -1,    48,
+      -1,    53,    -1,    55,    -1,    56,    -1,    57,    -1,    58,
+      -1,    60,    -1,    59,    -1,    38,    -1,    39,    -1,    40,
+      -1,    41,    -1,   289,    -1,   290,    -1,   291,    -1,    49,
+      -1,    50,    -1,    52,    -1,    51,    -1,    37,    -1,   292,
+      -1,    42,    -1,    43,    -1,    45,    -1,    38,    -1,    39,
+      -1,    41,    -1,    40,    -1,    44,    -1,   129,    -1,   130,
+      -1,   131,    -1,   132,    -1,   129,    -1,   133,    -1,   134,
+      -1,   135,    -1,   136,    -1,   137,    -1,   131,    -1,   138,
+      -1,    68,    -1,    61,    -1,    62,    -1,    63,    -1,    65,
+      -1,    66,    -1,    64,    -1,    67,    -1,    56,    -1,    58,
+      -1,    57,    -1,    60,    -1,    59,    -1,    55,    -1,    74,
+      -1,    75,    -1,    76,    -1,    77,    -1,    80,    -1,    78,
+      -1,    79,    -1,    81,    -1,    82,    -1,    70,    -1,    71,
+      -1,    69,    -1,   297,   298,    -1,   142,    -1,   299,    -1,
+     298,   299,    -1,   300,    -1,   163,    35,    -1,   230,    -1,
+     159,    35,    -1,   145,    35,    -1,   189,    -1,    36,   301,
+      -1,   302,   301,    -1,   304,    -1,   197,    -1,   304,    -1,
+     303,   171,    36,    -1,   117,    -1,   204,   206,    35,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1080,21 +1080,21 @@
     1677,  1683,  1684,  1689,  1690,  1694,  1696,  1705,  1707,  1711,
     1715,  1717,  1719,  1723,  1724,  1727,  1747,  1754,  1756,  1766,
     1783,  1785,  1787,  1791,  1800,  1805,  1810,  1811,  1815,  1817,
-    1821,  1826,  1827,  1831,  1833,  1835,  1837,  1847,  1851,  1852,
-    1853,  1854,  1857,  1862,  1873,  1880,  1885,  1886,  1890,  1892,
-    1896,  1897,  1900,  1904,  1908,  1912,  1921,  1931,  1932,  1937,
-    1939,  1944,  1949,  1950,  1954,  1956,  1960,  1966,  1967,  1971,
-    1973,  1981,  1982,  1986,  1990,  1993,  1994,  1997,  2001,  2005,
-    2007,  2009,  2011,  2019,  2020,  2024,  2025,  2026,  2027,  2030,
-    2031,  2032,  2033,  2034,  2035,  2038,  2039,  2040,  2041,  2049,
-    2052,  2053,  2064,  2065,  2066,  2067,  2071,  2072,  2075,  2076,
-    2077,  2078,  2079,  2080,  2081,  2082,  2085,  2086,  2087,  2090,
-    2091,  2092,  2093,  2094,  2095,  2096,  2097,  2098,  2099,  2100,
-    2101,  2102,  2103,  2104,  2105,  2106,  2107,  2108,  2109,  2110,
-    2111,  2112,  2118,  2119,  2120,  2121,  2122,  2123,  2124,  2125,
-    2126,  2127,  2128,  2129,  2141,  2149,  2153,  2154,  2157,  2158,
-    2159,  2160,  2161,  2162,  2165,  2167,  2168,  2171,  2172,  2175,
-    2179,  2184
+    1821,  1823,  1828,  1829,  1833,  1835,  1837,  1839,  1851,  1855,
+    1856,  1857,  1858,  1861,  1866,  1877,  1884,  1889,  1890,  1894,
+    1896,  1900,  1901,  1904,  1908,  1912,  1916,  1925,  1935,  1936,
+    1941,  1943,  1948,  1953,  1954,  1958,  1960,  1964,  1970,  1971,
+    1975,  1977,  1985,  1986,  1990,  1994,  1997,  1998,  2001,  2005,
+    2009,  2011,  2013,  2015,  2023,  2024,  2028,  2029,  2030,  2031,
+    2034,  2035,  2036,  2037,  2038,  2039,  2042,  2043,  2044,  2045,
+    2053,  2056,  2057,  2068,  2069,  2070,  2071,  2075,  2076,  2079,
+    2080,  2081,  2082,  2083,  2084,  2085,  2086,  2089,  2090,  2091,
+    2094,  2095,  2096,  2097,  2098,  2099,  2100,  2101,  2102,  2103,
+    2104,  2105,  2106,  2107,  2108,  2109,  2110,  2111,  2112,  2113,
+    2114,  2115,  2116,  2122,  2123,  2124,  2125,  2126,  2127,  2128,
+    2129,  2130,  2131,  2132,  2133,  2145,  2153,  2157,  2158,  2161,
+    2162,  2163,  2164,  2165,  2166,  2169,  2171,  2172,  2175,  2176,
+    2179,  2183,  2188
 };
 #endif
 
@@ -1228,21 +1228,21 @@
      237,   238,   238,   239,   239,   240,   240,   241,   241,   242,
      243,   243,   243,   244,   244,   245,   246,   247,   247,   248,
      248,   248,   248,   249,   249,   250,   251,   251,   252,   252,
-     253,   254,   254,   255,   255,   255,   255,   256,   257,   257,
-     257,   257,   258,   258,   259,   260,   261,   261,   262,   262,
-     263,   263,   264,   265,   266,   267,   268,   269,   269,   270,
-     270,   271,   272,   272,   273,   273,   274,   275,   275,   276,
-     276,   277,   277,   278,   279,   280,   280,   281,   282,   283,
-     283,   283,   283,   284,   284,   285,   285,   285,   285,   286,
-     286,   286,   286,   286,   286,   287,   287,   287,   287,   288,
-     289,   289,   290,   290,   290,   290,   291,   291,   292,   292,
-     292,   292,   292,   292,   292,   292,   293,   293,   293,   294,
+     253,   253,   254,   254,   255,   255,   255,   255,   256,   257,
+     257,   257,   257,   258,   258,   259,   260,   261,   261,   262,
+     262,   263,   263,   264,   265,   266,   267,   268,   269,   269,
+     270,   270,   271,   272,   272,   273,   273,   274,   275,   275,
+     276,   276,   277,   277,   278,   279,   280,   280,   281,   282,
+     283,   283,   283,   283,   284,   284,   285,   285,   285,   285,
+     286,   286,   286,   286,   286,   286,   287,   287,   287,   287,
+     288,   289,   289,   290,   290,   290,   290,   291,   291,   292,
+     292,   292,   292,   292,   292,   292,   292,   293,   293,   293,
      294,   294,   294,   294,   294,   294,   294,   294,   294,   294,
      294,   294,   294,   294,   294,   294,   294,   294,   294,   294,
-     294,   294,   295,   295,   295,   295,   295,   295,   295,   295,
-     295,   295,   295,   295,   296,   297,   298,   298,   299,   299,
-     299,   299,   299,   299,   300,   300,   300,   301,   301,   302,
-     303,   304
+     294,   294,   294,   295,   295,   295,   295,   295,   295,   295,
+     295,   295,   295,   295,   295,   296,   297,   298,   298,   299,
+     299,   299,   299,   299,   299,   300,   300,   300,   301,   301,
+     302,   303,   304
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1276,21 +1276,21 @@
        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,
+       2,     3,     0,     2,     1,     1,     1,     2,     1,     1,
+       1,     1,     1,     3,     3,     3,     3,     0,     1,     1,
+       3,     1,     1,     3,     2,     1,     5,     5,     0,     1,
+       1,     2,     3,     0,     1,     1,     2,     3,     0,     2,
+       1,     2,     0,     1,     3,     2,     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,     1,     1,     2,     1,     1,     2,     1,     2,
-       1,     2,     2,     1,     2,     2,     1,     1,     1,     3,
-       1,     3
+       1,     1,     1,     1,     1,     2,     1,     1,     2,     1,
+       2,     1,     2,     2,     1,     2,     2,     1,     1,     1,
+       3,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1298,72 +1298,72 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     5,     5,     0,     6,   405,     3,     0,     2,     0,
+       0,     5,     5,     0,     6,   406,     3,     0,     2,     0,
        1,     0,     0,     0,     0,     0,   136,     0,     0,   111,
-     420,     0,    18,    19,     0,     0,     0,   413,   139,   410,
-     404,   406,   408,     0,    54,   416,     0,     0,     0,     0,
+     421,     0,    18,    19,     0,     0,     0,   414,   139,   411,
+     405,   407,   409,     0,    54,   417,     0,     0,     0,     0,
        0,     0,     5,     7,    17,    14,    15,    16,    12,    13,
-      11,     9,    54,    10,     0,    38,    39,    44,   128,   417,
-     414,   418,   356,   361,   362,   364,   363,   358,   359,   365,
-     360,    22,   357,     0,   113,     0,   412,    23,   411,   409,
-     335,   336,   337,   352,   353,   355,   354,   338,     0,     0,
-     140,   141,   144,   149,   145,     0,   146,   148,   147,   407,
-     415,     0,    41,     0,    37,    53,    51,    52,     0,     0,
-       0,     0,   327,     0,     6,     4,     0,     0,    48,     0,
+      11,     9,    54,    10,     0,    38,    39,    44,   128,   418,
+     415,   419,   357,   362,   363,   365,   364,   359,   360,   366,
+     361,    22,   358,     0,   113,     0,   413,    23,   412,   410,
+     336,   337,   338,   353,   354,   356,   355,   339,     0,     0,
+     140,   141,   144,   149,   145,     0,   146,   148,   147,   408,
+     416,     0,    41,     0,    37,    53,    51,    52,     0,     0,
+       0,     0,   328,     0,     6,     4,     0,     0,    48,     0,
       45,    46,    20,   111,   117,   118,   122,     0,   114,   115,
-     120,   110,     0,    24,    25,    27,   352,     0,   152,   334,
-     333,   349,   350,   351,   421,     0,   150,   419,    57,    58,
-      59,    56,   321,     0,   321,    60,     0,    61,    62,     0,
+     120,   110,     0,    24,    25,    27,   353,     0,   152,   335,
+     334,   350,   351,   352,   422,     0,   150,   420,    57,    58,
+      59,    56,   322,     0,   322,    60,     0,    61,    62,     0,
        0,     0,    55,     0,     0,     0,     0,     0,     0,     8,
       79,   274,     0,   273,    43,     0,   119,     0,   112,     0,
-       0,     0,   151,     0,   142,     0,    65,   322,     0,    66,
+       0,     0,   151,     0,   142,     0,    65,   323,     0,    66,
       71,    63,    67,    68,    69,    42,     0,     0,     0,     0,
       40,    90,    78,   238,    47,   124,   111,   126,   125,   121,
      123,   116,    28,    26,   153,     0,     0,    76,     0,    72,
-      73,    77,    75,   329,   330,   331,   332,     0,     0,    80,
-     127,     0,     0,     0,    29,    30,     0,    33,    34,   323,
+      73,    77,    75,   330,   331,   332,   333,     0,     0,    80,
+     127,     0,     0,     0,    29,    30,     0,    33,    34,   324,
       64,    70,     0,     0,    50,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   136,   358,   359,   365,   360,
-     268,   352,   276,     0,    49,    91,    93,   107,   109,   105,
+       0,     0,     0,     0,     0,   136,   359,   360,   366,   361,
+     268,   353,   276,     0,    49,    91,    93,   107,   109,   105,
      106,   108,   104,   103,    94,     0,   139,   135,   102,     0,
       95,     0,     0,    96,    97,    98,   101,   239,   240,   241,
-       0,   262,   264,   263,     0,   267,     0,   100,   287,   288,
-     290,   289,   291,    99,     0,   325,   326,     0,   351,   357,
-     345,   346,   347,   348,    83,     0,     0,    35,    21,    31,
-      32,    74,   130,     0,   328,   296,     0,     0,   307,   312,
-     243,     0,     0,    92,     0,     0,     0,     0,   277,   278,
-     281,   129,   133,   134,   137,   138,   145,   157,   188,   356,
-     361,   362,   364,   363,   358,   359,   365,   360,   335,   336,
-     337,     0,     0,     0,   350,   259,   266,     0,     0,   324,
-     403,   401,   402,     0,     0,   392,   393,   394,   395,   397,
-     398,   396,   399,   400,     0,     0,     0,     0,    82,    36,
-       0,   233,   236,   335,     0,   297,   298,   301,   300,   317,
-     304,   292,   294,     0,     0,   308,   309,     0,     0,   313,
-     314,     0,     0,   244,   245,   132,   293,   131,   231,     0,
-     275,     0,   280,     0,   229,   230,     0,     0,     0,     0,
+       0,   262,   264,   263,     0,   267,     0,   100,   288,   289,
+     291,   290,   292,    99,     0,   326,   327,     0,   352,   358,
+     346,   347,   348,   349,    83,     0,     0,    35,    21,    31,
+      32,    74,   130,     0,   329,   297,     0,     0,   308,   313,
+     243,     0,     0,    92,     0,     0,     0,     0,     0,   277,
+     278,   282,   129,   133,   134,   137,   138,   145,   157,   188,
+     357,   362,   363,   365,   364,   359,   360,   366,   361,   336,
+     337,   338,     0,     0,     0,   351,   259,   266,     0,     0,
+     325,   404,   402,   403,     0,     0,   393,   394,   395,   396,
+     398,   399,   397,   400,   401,     0,     0,     0,     0,    82,
+      36,     0,   233,   236,   336,     0,   298,   299,   302,   301,
+     318,   305,   293,   295,     0,     0,   309,   310,     0,     0,
+     314,   315,     0,     0,   244,   245,   132,   294,   131,   231,
+       0,     0,   275,     0,   280,     0,   229,   230,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   339,   340,   341,   342,
-     344,   343,     0,     0,     0,     0,     0,     0,     0,   272,
-     270,   271,     0,   269,   260,   170,   171,   174,   172,   173,
-     175,   356,   162,   160,   161,   352,   366,   367,   368,     0,
-     164,   165,   261,     0,   350,   357,     0,   169,     0,    81,
-      89,   321,   285,   283,   284,     0,    84,    86,    87,    85,
-     232,     0,   237,   235,     0,   295,     0,   303,     0,     0,
-     310,     0,     0,   315,     0,     0,     0,     0,     0,   246,
-     179,   279,   282,   143,   200,   202,   203,   204,   205,   206,
-     207,     0,     0,     0,     0,     0,     0,     0,     0,   360,
-     210,     0,   211,   208,   209,   221,   225,   226,   222,   216,
-     223,   217,   218,   214,   224,   219,   220,   215,   212,   198,
-     213,   201,   265,   391,   386,   388,   387,   390,   389,   379,
-     380,   381,   384,   382,   383,   385,   378,   370,   376,   369,
-     371,   372,   373,   374,   375,   377,     0,     0,     0,   168,
-     155,   166,     0,   167,   176,   178,   286,     0,   234,   302,
-     299,   321,   319,   318,   311,   306,   316,   305,   247,     0,
-     251,   267,   249,   253,   189,   190,   191,   192,   193,   194,
-     195,   197,   196,   199,   183,   182,   184,   186,   180,   187,
-     185,   181,     0,     0,   177,     0,   320,     0,     0,   248,
-       0,   258,     0,   254,   255,   154,   156,    88,     0,   252,
-       0,     0,   256,   250,   257,   242
+       0,     0,     0,     0,     0,     0,     0,     0,   340,   341,
+     342,   343,   345,   344,     0,     0,     0,     0,     0,     0,
+       0,   272,   270,   271,     0,   269,   260,   170,   171,   174,
+     172,   173,   175,   357,   162,   160,   161,   353,   367,   368,
+     369,     0,   164,   165,   261,     0,   351,   358,     0,   169,
+       0,    81,    89,   322,   286,   284,   285,     0,    84,    86,
+      87,    85,   232,     0,   237,   235,     0,   296,     0,   304,
+       0,     0,   311,     0,     0,   316,     0,     0,     0,     0,
+       0,   246,   179,   281,   279,   283,   143,   200,   202,   203,
+     204,   205,   206,   207,     0,     0,     0,     0,     0,     0,
+       0,     0,   361,   210,     0,   211,   208,   209,   221,   225,
+     226,   222,   216,   223,   217,   218,   214,   224,   219,   220,
+     215,   212,   198,   213,   201,   265,   392,   387,   389,   388,
+     391,   390,   380,   381,   382,   385,   383,   384,   386,   379,
+     371,   377,   370,   372,   373,   374,   375,   376,   378,     0,
+       0,     0,   168,   155,   166,     0,   167,   176,   178,   287,
+       0,   234,   303,   300,   322,   320,   319,   312,   307,   317,
+     306,   247,     0,   251,   267,   249,   253,   189,   190,   191,
+     192,   193,   194,   195,   197,   196,   199,   183,   182,   184,
+     186,   180,   187,   185,   181,     0,     0,   177,     0,   321,
+       0,     0,   248,     0,   258,     0,   254,   255,   154,   156,
+      88,     0,   252,     0,     0,   256,   250,   257,   242
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1373,343 +1373,339 @@
      132,   133,   134,   233,   234,   235,   236,   237,   238,    45,
       25,    47,    48,    49,    26,   119,   120,   121,    51,   264,
       52,   106,   101,   162,   191,   218,   219,   220,   201,   202,
-     229,   314,   387,   496,   497,   498,   227,   265,   266,   267,
+     229,   314,   388,   498,   499,   500,   227,   265,   266,   267,
       27,    75,   127,   128,   129,   130,   177,   210,    59,   270,
-     271,   272,   273,   274,   275,    28,   343,    89,    90,   345,
-      91,    92,    93,    94,   137,   277,   278,   480,   279,   481,
-     280,   281,   361,   548,   282,   426,   283,   284,   390,   391,
-     503,    29,   286,   287,   288,   412,   413,   414,   518,   639,
-     642,   643,   644,   289,   290,   291,   292,   293,   294,   462,
-      95,   296,   337,   338,   339,   422,   499,   297,   298,   299,
-     300,   326,   394,   395,   396,   397,   398,   399,   301,   302,
-     404,   405,   406,   408,   409,   410,   507,   603,   186,   187,
-     303,   304,    53,   306,   112,   400,   139,   452,   315,   140,
-     141,   142,   143,    72,   486,   586,   385,     6,     7,    30,
+     271,   272,   273,   274,   275,    28,   344,    89,    90,   346,
+      91,    92,    93,    94,   137,   277,   278,   482,   279,   483,
+     280,   281,   362,   551,   282,   428,   283,   284,   391,   392,
+     505,    29,   286,   287,   288,   413,   414,   415,   520,   642,
+     645,   646,   647,   289,   290,   291,   292,   293,   294,   464,
+      95,   296,   338,   339,   340,   424,   501,   297,   298,   299,
+     300,   326,   395,   396,   397,   398,   399,   400,   301,   302,
+     405,   406,   407,   409,   410,   411,   509,   606,   186,   187,
+     303,   304,    53,   306,   112,   401,   139,   454,   315,   140,
+     141,   142,   143,    72,   488,   589,   386,     6,     7,    30,
       31,    32,    60,    33,    34,    35
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -587
+#define YYPACT_NINF -597
 static const yytype_int16 yypact[] =
 {
-      99,    -2,    -2,    53,  -587,  -587,  -587,    15,  -587,    32,
-    -587,    17,    -6,    44,   -21,    41,  -587,  1019,    67,    -9,
-    -587,    89,  -587,  -587,    22,   115,   117,  -587,   426,  -587,
-      15,  -587,  -587,    41,  -587,  -587,   129,   173,   174,   405,
-     116,   175,   121,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,    42,  -587,  -587,   176,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,   109,     4,   193,  -587,  1019,  -587,  -587,
-    -587,  -587,  -587,   106,  -587,  -587,  -587,  -587,   770,   195,
-     111,  -587,  -587,  -587,  -587,   108,  -587,  -587,   112,  -587,
-    -587,   639,  -587,   118,  -587,  -587,  -587,  -587,  1019,  1019,
-    1019,  1019,  -587,   113,    32,  -587,   502,  1006,  -587,   114,
-     122,  -587,  -587,    -9,  -587,  -587,  -587,   119,   120,  -587,
-    -587,  -587,   123,   127,  -587,  -587,  -587,    36,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,   426,  -587,  -587,  -587,  -587,
-    -587,  -587,   133,   137,   133,  -587,   139,  -587,  -587,   133,
-     133,   133,  -587,   187,   128,   148,   151,   152,   225,  -587,
-    -587,  -587,   240,  -587,  -587,   176,  -587,    -5,  -587,     4,
-     241,  1019,  -587,   770,  -587,   231,  -587,  -587,   405,  -587,
-     245,  -587,  -587,  -587,  -587,  -587,   234,   244,   247,   131,
-    -587,  -587,   286,  -587,  -587,  -587,    -9,  -587,  -587,  -587,
-    -587,  -587,    61,  -587,  -587,   177,   179,  -587,   180,   181,
-    -587,  -587,  -587,  -587,  -587,  -587,  -587,   524,   142,  -587,
-    -587,   142,   186,   191,    61,  -587,   266,  -587,  -587,  -587,
-    -587,  -587,   245,   269,  -587,   142,   116,   215,   215,   300,
-     304,   305,   224,   672,   628,   710,   810,   827,   452,  1019,
-    -587,    30,   452,   307,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,   311,   426,  -587,  -587,   312,
-    -587,   313,   844,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-     314,  -587,  -587,  -587,   215,   226,   230,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,   318,  -587,  -587,   724,   -88,   108,
-    -587,  -587,  -587,  -587,  -587,  1019,   246,  -587,  -587,  -587,
-    -587,  -587,  -587,  1019,  -587,   861,   320,   322,   338,   340,
-     332,   328,   329,  -587,   330,   331,   248,   249,   250,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,   251,  -587,  -587,   -24,
-     -24,   -24,   -24,   -24,   -24,   -24,   223,   -16,   147,   147,
-     147,   327,   -24,   147,   -24,  -587,  -587,   287,   672,  -587,
-    -587,  -587,  -587,   926,   942,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,   149,   770,   252,    45,  -587,  -587,
-     -12,  -587,   279,   323,   261,   262,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,   770,   359,   338,  -587,   770,   360,   340,
-    -587,   770,    33,   332,  -587,  -587,  -587,  -587,  -587,   770,
-    -587,   452,   110,   770,  -587,  -587,  1019,  1019,  1019,  1019,
-    1019,  1019,  1019,   341,   342,   344,   345,   346,   347,   350,
-     351,  1028,   -24,  1019,  1019,  1019,  -587,  -587,  -587,  -587,
-    -587,  -587,   878,   894,   910,  1019,  1019,   770,  1019,  -587,
-    -587,  -587,   215,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,   270,   626,   640,   640,    30,  -587,  -587,  -587,   426,
-    -587,  -587,  -587,   640,   362,   -20,   770,  -587,   770,  -587,
-    -587,   133,  -587,  -587,  -587,   280,  -587,  -587,  -587,  -587,
-    -587,  1019,  -587,  -587,   770,  -587,   861,    13,   363,   368,
-    -587,   370,   372,  -587,   373,  1006,   672,  1006,   381,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  1019,  1019,  1019,  1019,  1019,  1019,  1019,  1019,  1019,
-    -587,  1019,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,   990,   958,   974,  -587,
-     296,   297,   770,  -587,  -587,  -587,  -587,   245,  -587,  -587,
-    -587,   133,  -587,  -587,  -587,  -587,  -587,  -587,  -587,   384,
-     299,  -587,  -587,    52,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,   426,   426,  -587,   301,  -587,   407,  1006,  -587,
-     452,  -587,   396,    52,  -587,   111,   111,  -587,   287,  -587,
-     390,   394,  -587,  -587,  -587,  -587
+     -54,    -4,    -4,    38,  -597,  -597,  -597,    15,  -597,    29,
+    -597,    11,    32,    49,   -15,   195,  -597,   996,    74,    -5,
+    -597,   101,  -597,  -597,    33,   134,   140,  -597,   244,  -597,
+      15,  -597,  -597,   195,  -597,  -597,   156,   159,   167,   986,
+     165,   171,   189,  -597,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,   106,  -597,  -597,   194,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,   127,     4,   208,  -597,   996,  -597,  -597,
+    -597,  -597,  -597,   121,  -597,  -597,  -597,  -597,   745,   213,
+     129,  -597,  -597,  -597,  -597,   135,  -597,  -597,   137,  -597,
+    -597,   382,  -597,   130,  -597,  -597,  -597,  -597,   996,   996,
+     996,   996,  -597,   150,    29,  -597,   241,   973,  -597,   132,
+     147,  -597,  -597,    -5,  -597,  -597,  -597,   154,   178,  -597,
+    -597,  -597,   155,   179,  -597,  -597,  -597,    59,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,   244,  -597,  -597,  -597,  -597,
+    -597,  -597,   158,   183,   158,  -597,   184,  -597,  -597,   158,
+     158,   158,  -597,   255,   217,   218,   219,   220,   300,  -597,
+    -597,  -597,   312,  -597,  -597,   194,  -597,    -6,  -597,     4,
+     313,   996,  -597,   745,  -597,   303,  -597,  -597,   986,  -597,
+      44,  -597,  -597,  -597,  -597,  -597,   306,   302,   308,   108,
+    -597,  -597,   347,  -597,  -597,  -597,    -5,  -597,  -597,  -597,
+    -597,  -597,   128,  -597,  -597,   236,   237,  -597,   238,   240,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,   527,   182,  -597,
+    -597,   182,   250,   257,   128,  -597,   328,  -597,  -597,  -597,
+    -597,  -597,    44,   329,  -597,   182,   165,   247,   247,   334,
+     335,   336,   253,   450,   631,   517,   762,   779,   408,   996,
+    -597,    30,   694,   338,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,   339,   244,  -597,  -597,   340,
+    -597,   341,   796,  -597,  -597,  -597,  -597,  -597,  -597,  -597,
+     343,  -597,  -597,  -597,   247,   251,   261,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,   349,  -597,  -597,   646,     6,   135,
+    -597,  -597,  -597,  -597,  -597,   996,   275,  -597,  -597,  -597,
+    -597,  -597,  -597,   996,  -597,   813,   352,   353,   369,   370,
+     362,   359,   360,  -597,   363,   364,   278,   351,   277,   280,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,   285,  -597,  -597,
+     -24,   -24,   -24,   -24,   -24,   -24,   -24,   224,   -18,   122,
+     122,   122,   365,   -24,   122,   -24,  -597,  -597,   958,   450,
+    -597,  -597,  -597,  -597,   878,   894,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,   149,   745,   287,    45,  -597,
+    -597,   -12,  -597,   322,   366,   301,   304,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,   745,   399,   369,  -597,   745,   398,
+     370,  -597,   745,    27,   362,  -597,  -597,  -597,  -597,  -597,
+     745,   408,  -597,   694,    61,   745,  -597,  -597,   996,   996,
+     996,   996,   996,   996,   996,   379,   386,   387,   388,   390,
+     391,   392,   393,  1005,   -24,   996,   996,   996,  -597,  -597,
+    -597,  -597,  -597,  -597,   830,   846,   862,   996,   996,   745,
+     996,  -597,  -597,  -597,   247,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,   270,   629,   643,   643,    30,  -597,  -597,
+    -597,   244,  -597,  -597,  -597,   643,   404,   -21,   745,  -597,
+     745,  -597,  -597,   158,  -597,  -597,  -597,   323,  -597,  -597,
+    -597,  -597,  -597,   996,  -597,  -597,   745,  -597,   813,   133,
+     409,   426,  -597,   427,   428,  -597,   444,   973,   450,   973,
+     445,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,   996,   996,   996,   996,   996,   996,
+     996,   996,   996,  -597,   996,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,   942,
+     910,   926,  -597,   361,   376,   745,  -597,  -597,  -597,  -597,
+      44,  -597,  -597,  -597,   158,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,   446,   377,  -597,  -597,    24,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,   244,   244,  -597,   307,  -597,
+     468,   973,  -597,   694,  -597,   457,    24,  -597,   129,   129,
+    -597,   958,  -597,   469,   470,  -597,  -597,  -597,  -597
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -587,  -587,  -587,    16,  -587,   316,     7,  -587,  -587,  -587,
-    -587,  -587,   253,  -587,  -587,   197,  -587,  -587,  -587,  -587,
-       0,  -587,  -587,  -587,    11,  -587,  -587,   258,  -587,  -587,
-    -587,   265,   383,  -587,  -587,  -587,  -587,  -237,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,  -587,  -587,  -587,   182,  -587,
-    -195,  -110,  -587,  -587,   277,  -587,  -587,  -587,  -193,  -587,
-    -587,  -587,  -587,  -587,  -587,  -215,  -587,   161,  -416,  -587,
-     295,   -22,  -587,   -91,  -587,  -587,  -587,  -587,  -587,  -587,
-    -587,  -587,  -587,  -587,  -587,  -283,  -587,  -586,  -587,   -43,
-    -587,  -179,  -587,  -587,  -587,  -587,  -587,    46,  -587,  -587,
-    -587,  -587,  -183,  -587,  -587,  -239,  -587,  -587,   -55,  -168,
-    -115,   229,  -587,  -587,  -414,  -587,    60,  -587,  -587,  -587,
-    -587,  -238,  -587,  -587,   -23,  -587,  -276,   -19,  -587,  -587,
-    -587,  -587,    81,  -587,  -587,    78,  -587,  -587,  -146,   -75,
-    -587,  -587,  -172,  -587,   242,   -82,   -27,  -226,  -158,  -208,
-    -587,   -25,   -17,  -210,  -587,  -385,  -587,  -587,  -587,  -587,
-     475,  -587,   474,  -587,  -587,    62
+    -597,  -597,  -597,    28,  -597,   371,     8,  -597,  -597,  -597,
+    -597,  -597,   325,  -597,  -597,   269,  -597,  -597,  -597,  -597,
+      -1,  -597,  -597,  -597,    10,  -597,  -597,   332,  -597,  -597,
+    -597,   320,   458,  -597,  -597,  -597,  -597,  -235,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,  -597,  -597,  -597,   258,  -597,
+    -183,  -108,  -597,  -597,   337,  -597,  -597,  -597,  -180,  -597,
+    -597,  -597,  -597,  -597,  -597,  -217,  -597,   235,  -397,  -597,
+     384,    34,  -597,   -91,  -597,  -597,  -597,  -597,  -597,  -597,
+    -597,  -597,  -597,  -597,  -597,  -287,  -597,  -596,  -597,    37,
+    -597,  -179,  -597,  -597,  -597,  -597,  -597,   100,  -597,  -597,
+    -597,  -597,  -116,  -597,  -597,  -240,  -597,  -597,    13,  -119,
+    -115,   281,  -597,  -597,  -414,  -597,   111,  -597,  -597,  -597,
+    -597,  -236,  -597,  -597,    40,  -597,  -277,    35,  -597,  -597,
+    -597,  -597,   136,  -597,  -597,   142,  -597,  -597,  -149,    48,
+    -597,  -597,  -150,  -597,   310,   -82,   -27,  -145,  -135,  -209,
+    -597,   -25,   -17,  -211,  -597,  -335,  -597,  -597,  -597,  -597,
+     520,  -597,   514,  -597,  -597,    39
 };
 
 /* 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 -357
+#define YYTABLE_NINF -358
 static const yytype_int16 yytable[] =
 {
-      71,    96,   172,    97,   146,   321,   138,   521,   189,    46,
-     327,    98,   276,   176,   332,  -159,    44,   309,     9,   307,
-      50,   424,   107,   500,    11,    12,    13,   641,    14,   444,
-     205,  -273,   268,     4,   269,    36,    37,    38,    39,   276,
-    -273,    55,    12,    13,   309,    14,   307,   515,   285,    40,
-     334,    15,    16,    10,   340,   305,   366,   641,   115,   268,
-     135,   269,   516,    54,   245,   517,    41,   427,   428,   429,
-     430,   431,   432,   316,   363,   285,    58,    61,    16,   456,
-     489,   458,   305,   640,   192,   193,   194,   323,   587,   588,
-      56,   164,   165,   166,   167,    61,   230,   425,   592,   221,
-     173,   214,    57,    88,    73,   445,   206,   207,   208,   501,
-      74,   601,   295,   602,    46,   123,   124,   125,    96,    17,
-      97,    44,   209,    18,    76,    50,    19,   508,    98,   464,
-     126,   511,    20,   453,   454,   514,    17,   457,   295,   295,
-      18,    77,   490,   491,   492,   482,   493,   494,   495,  -274,
-      78,   221,    79,    88,   108,   109,   114,   110,  -274,   541,
-     182,   183,   111,   117,   135,   467,   470,   231,   232,   479,
-     336,   107,   226,   222,   485,   102,   483,    80,    81,    82,
-     310,   311,   312,   313,    87,   346,   471,    63,    64,    65,
-      66,    67,    68,    69,    70,   472,   473,   474,   475,    84,
-      85,    86,   446,   447,   448,   449,   450,   451,   491,   492,
-     308,   493,   494,   340,     1,     2,   645,   646,   386,   103,
-     104,   113,   118,   122,   562,   222,   650,   263,   131,  -274,
-     144,    88,   145,   195,   168,  -273,   173,   308,   174,   178,
-     163,   179,   335,   180,   549,   553,   557,   175,   181,    96,
-     196,    97,   185,   295,   263,   362,   188,   364,   190,    98,
-     433,   434,   435,   436,   437,   438,   439,   440,   441,   295,
-     197,   200,   442,   198,   199,   203,   212,   215,   476,   477,
-     478,   223,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,   217,   224,   225,   228,   317,   318,   239,   388,   240,
-     241,   320,   242,   487,   322,  -158,   392,  -136,  -136,  -136,
+      71,    96,   172,    97,   146,   189,   138,   321,    46,   524,
+     276,    98,   327,   332,  -159,   176,   309,    44,   307,    50,
+     644,   426,   107,   502,    11,    12,    13,   446,    14,   205,
+       9,     4,    36,    37,    38,    39,   245,   276,    10,    12,
+      13,   517,    14,   309,   268,   307,    40,   269,   285,   334,
+     644,    15,    16,   341,    61,   643,   518,    54,   367,   519,
+     135,     1,     2,    41,   429,   430,   431,   432,   433,   434,
+     115,   268,    61,   364,   269,   285,   458,   305,   460,    55,
+     491,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+     217,   164,   165,   166,   167,    56,   316,   427,   230,   221,
+     173,   214,    88,   447,   305,   206,   207,   208,    57,   503,
+     323,    73,   295,    46,    74,   123,   124,   125,    96,    17,
+      97,   209,    44,    18,    50,  -273,    19,   510,    98,   466,
+     126,   513,    20,    17,  -273,   516,    76,    18,   295,   295,
+     590,   591,   492,   493,   494,   484,   495,   496,   497,  -274,
+     595,   221,    77,    88,    80,    81,    82,   544,  -274,   493,
+     494,    87,   495,   496,   135,   469,   472,    88,   481,    78,
+     336,   107,   226,   222,   487,    79,   485,   448,   449,   450,
+     451,   452,   453,   182,   183,   347,   473,    63,    64,    65,
+      66,    67,    68,    69,    70,   474,   475,   476,   477,    84,
+      85,    86,   102,   108,   109,   103,   110,   192,   193,   194,
+     308,   111,   523,   104,   341,   455,   456,   113,   387,   459,
+     310,   311,   312,   313,   114,   222,   263,   117,   565,   653,
+      58,   604,    16,   605,   231,   232,   173,   308,   648,   649,
+     118,   122,   335,   131,  -274,   552,   556,   560,   144,    96,
+     145,    97,   163,   263,   295,   363,   174,   365,    88,    98,
+    -273,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     295,   168,   175,   444,   178,   180,   170,   185,   478,   479,
+     480,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      80,    81,    82,    83,    84,    85,    86,    87,   389,   179,
+     181,   195,   188,   190,   489,  -158,   393,  -136,  -136,  -136,
     -136,  -136,  -136,  -136,  -136,  -136,  -136,  -136,  -136,  -136,
-    -136,  -136,  -136,  -136,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,   459,   325,   328,   460,   520,   461,   329,
-     330,   523,   341,   262,   443,   596,   342,   347,   348,   365,
-     463,   173,   368,   369,   367,   401,   389,   402,   403,   484,
-     635,   407,   411,   415,   416,   417,   418,   308,    88,   420,
-     419,   421,   455,   423,   488,   560,   502,   504,   625,   628,
-     631,   505,   509,   506,   589,   512,   531,   532,   591,   533,
-     534,   535,   536,  -136,   593,   537,   538,  -163,   604,   597,
-     609,   611,   612,   605,   594,   606,   595,   607,   608,   524,
-     525,   526,   527,   528,   529,   530,   613,   632,   633,   637,
-     638,   647,   648,   651,   540,   654,   542,   543,   544,   655,
-     169,   319,   340,   204,   213,   116,   333,   344,   558,   559,
-     184,   561,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,   105,    96,   216,    97,   636,   211,   590,   598,   519,
-     652,   610,    98,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    80,    81,    82,    83,    84,    85,    86,    87,
-     653,   331,   522,   600,   392,   599,   510,   513,   324,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,   173,   173,
-     173,   136,    84,    85,    86,    99,   221,   100,     0,     0,
-     634,     0,     0,     0,   614,   615,   616,   617,   618,   619,
-     620,   621,   622,   649,   623,   243,     0,     0,     0,     0,
-       0,   244,     0,    11,    12,    13,   245,   170,     0,     0,
-     246,    40,   247,   248,     0,     0,   249,     0,   250,    88,
-     251,     0,   252,     0,     0,     0,     0,   253,     0,    58,
-     254,   255,    63,    64,    65,    66,   256,   257,   258,   259,
-     260,     0,     0,   261,    84,    85,    86,     0,     0,     0,
-     222,     0,     0,     0,     0,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,     0,
-       0,     0,     0,     0,     0,    96,    96,    97,    97,     0,
-       0,     0,     0,     0,     0,    98,    98,     0,     0,     0,
-       0,   173,     0,     0,     0,     0,     0,     0,     0,   243,
-       0,   463,     0,     0,     0,    19,     0,    11,    12,    13,
-     245,     0,     0,   262,   246,    40,   247,   248,     0,     0,
-     249,     0,   250,     0,   251,     0,   252,     0,     0,     0,
-       0,   253,     0,    58,     0,   255,    63,    64,    65,    66,
-     256,   257,   258,   259,   260,   147,     0,   261,    84,    85,
-      86,   563,   564,   565,   566,   567,   568,   569,   570,   571,
-     572,   573,   574,   575,   576,   563,   564,   565,   566,   567,
-     568,   569,   570,   571,   572,   573,   574,   575,   576,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,   260,     0,
-       0,   171,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,     0,     0,     0,    19,
-       0,     0,     0,     0,     0,  -268,     0,   262,     0,     0,
-       0,     0,     0,     0,     0,   577,     0,   578,   579,   580,
-     581,   582,   583,   584,   585,     0,     0,     0,     0,   577,
-       0,   578,   579,   580,   581,   582,   583,   584,   585,  -356,
-    -356,  -356,  -356,  -356,  -356,  -356,  -356,  -356,  -356,  -356,
-    -356,  -356,  -356,   370,   371,   372,   373,   374,   375,   376,
-     377,   378,   379,   380,   381,   382,   383,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    80,    81,    82,   136,
-      84,    85,    86,    87,     0,     0,     0,     0,     0,  -356,
-       0,     0,  -356,     0,     0,     0,     0,     0,  -356,     0,
-       0,     0,     0,     0,     0,     0,   384,  -227,  -227,  -227,
+    -136,  -136,  -136,  -136,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   522,   196,
+     197,   198,   199,   526,   599,   445,   200,   203,   212,   215,
+     224,   465,   173,   223,   225,   228,   239,   240,   241,   317,
+     486,   242,   318,   320,   322,   638,   325,    88,   308,   328,
+     329,   330,   262,   342,   343,   348,   349,   563,   366,   368,
+     628,   631,   634,   369,   370,   390,   592,   402,   403,   404,
+     594,   408,   412,  -136,   416,   417,   596,   422,   418,   419,
+     420,   423,   612,   614,   615,   421,   597,   425,   598,   490,
+     457,   527,   528,   529,   530,   531,   532,   533,   147,   504,
+     506,   507,   511,   514,   534,   508,   543,   650,   545,   546,
+     547,   535,   536,   537,   341,   538,   539,   540,   541,  -163,
+     561,   562,   600,   564,   607,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    96,   639,    97,   136,    84,    85,
+      86,   608,   609,   610,    98,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   611,
+     616,   640,   635,   651,   654,   169,   393,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,   260,   636,   641,   171,
+     173,   173,   173,   319,   657,   658,   213,   204,   216,   221,
+     116,   345,   333,   637,   521,   593,   211,   617,   618,   619,
+     620,   621,   622,   623,   624,   625,   652,   626,   243,   184,
+     655,   613,   656,   331,   244,   525,    11,    12,    13,   245,
+     601,   602,   512,   246,    40,   247,   248,   100,   603,   249,
+      99,   250,   515,   251,     0,   252,   324,     0,     0,     0,
+     253,     0,    58,   254,   255,    63,    64,    65,    66,   256,
+     257,   258,   259,   260,     0,     0,   261,    84,    85,    86,
+       0,     0,     0,   222,     0,     0,  -357,  -357,  -357,  -357,
+    -357,  -357,  -357,  -357,  -357,  -357,  -357,  -357,  -357,  -357,
+       0,     0,     0,     0,     0,     0,     0,     0,    96,    96,
+      97,    97,     0,     0,     0,     0,     0,     0,    98,    98,
+       0,     0,     0,     0,   173,     0,     0,     0,     0,     0,
+       0,     0,   243,     0,   465,     0,  -357,     0,    19,  -357,
+      11,    12,    13,   245,     0,  -357,   262,   246,    40,   247,
+     248,     0,     0,   249,     0,   250,     0,   251,     0,   252,
+       0,     0,     0,     0,   253,     0,    58,     0,   255,    63,
+      64,    65,    66,   256,   257,   258,   259,   260,     0,     0,
+     261,    84,    85,    86,   566,   567,   568,   569,   570,   571,
+     572,   573,   574,   575,   576,   577,   578,   579,   566,   567,
+     568,   569,   570,   571,   572,   573,   574,   575,   576,   577,
+     578,   579,     0,     0,     0,   371,   372,   373,   374,   375,
+     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
+       0,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+     337,     0,    19,   136,    84,    85,    86,     0,  -268,     0,
+     262,     0,     0,     0,     0,     0,     0,     0,   580,     0,
+     581,   582,   583,   584,   585,   586,   587,   588,   385,     0,
+       0,     0,   580,     0,   581,   582,   583,   584,   585,   586,
+     587,   588,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    80,    81,    82,   136,    84,    85,    86,    87,  -227,
     -227,  -227,  -227,  -227,  -227,  -227,  -227,  -227,  -227,  -227,
-    -227,  -227,  -227,  -227,  -228,  -228,  -228,  -228,  -228,  -228,
+    -227,  -227,  -227,  -227,  -227,  -227,  -228,  -228,  -228,  -228,
     -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,
-    -228,   349,   350,   351,   352,   353,   354,   355,   356,   357,
-     358,   359,   360,   136,    84,    85,    86,    87,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,   393,    81,    82,
-     136,    84,    85,    86,    87,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,   545,   546,   547,   136,    84,    85,
-      86,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-     550,   551,   552,   136,    84,    85,    86,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,   554,   555,   556,   136,
+    -228,  -228,  -228,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   136,    84,    85,    86,    87,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,   394,
+      81,    82,   136,    84,    85,    86,    87,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,   548,   549,   550,   136,
       84,    85,    86,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,     0,   465,   466,   136,    84,    85,    86,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,     0,   468,
-     469,   136,    84,    85,    86,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,     0,   626,   627,   136,    84,    85,
+      69,    70,   553,   554,   555,   136,    84,    85,    86,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,   557,   558,
+     559,   136,    84,    85,    86,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,     0,   467,   468,   136,    84,    85,
       86,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-       0,   629,   630,   136,    84,    85,    86,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,   624,     0,     0,   136,
+       0,   470,   471,   136,    84,    85,    86,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,     0,   629,   630,   136,
       84,    85,    86,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,     0,     0,     0,   171,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    62,    63,    64,    65,    66,
-      67,    68,    69,   539
+      69,    70,     0,   632,   633,   136,    84,    85,    86,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,   627,     0,
+       0,   136,    84,    85,    86,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,   461,     0,     0,   462,     0,   463,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,     0,
+       0,     0,   171,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,   105,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    62,    63,    64,    65,    66,    67,    68,    69,
+     542
 };
 
 static const yytype_int16 yycheck[] =
 {
-      17,    28,   117,    28,    95,   242,    88,   421,   154,     9,
-     248,    28,   227,   123,   253,    35,     9,   227,     2,   227,
-       9,    45,    39,    35,     9,    10,    11,   613,    13,    45,
-      35,   119,   227,    35,   227,     3,     4,     5,     6,   254,
-     128,    47,    10,    11,   254,    13,   254,    14,   227,    17,
-     258,    36,    37,     0,   262,   227,   294,   643,    42,   254,
-      77,   254,    29,    46,    12,    32,    34,   350,   351,   352,
-     353,   354,   355,   231,   282,   254,    35,    15,    37,   362,
-      35,   364,   254,    31,   159,   160,   161,   245,   473,   474,
-      46,   108,   109,   110,   111,    33,   206,   121,   483,   190,
-     117,   183,   123,   123,    37,   121,   111,   112,   113,   121,
-     119,    98,   227,   100,   114,   111,   112,   113,   145,   104,
-     145,   114,   127,   108,    35,   114,   111,   403,   145,   368,
-     126,   407,   117,   359,   360,   411,   104,   363,   253,   254,
-     108,   119,    97,    98,    99,   384,   101,   102,   103,   119,
-      35,   242,    35,   123,    38,    39,    35,    41,   128,   442,
-     124,   125,    46,   121,   181,   373,   374,   106,   107,   384,
-     261,   188,   199,   190,   384,    46,   384,    46,    47,    48,
-      38,    39,    40,    41,    53,   276,    37,    38,    39,    40,
+      17,    28,   117,    28,    95,   154,    88,   242,     9,   423,
+     227,    28,   248,   253,    35,   123,   227,     9,   227,     9,
+     616,    45,    39,    35,     9,    10,    11,    45,    13,    35,
+       2,    35,     3,     4,     5,     6,    12,   254,     0,    10,
+      11,    14,    13,   254,   227,   254,    17,   227,   227,   258,
+     646,    36,    37,   262,    15,    31,    29,    46,   294,    32,
+      77,   115,   116,    34,   351,   352,   353,   354,   355,   356,
+      42,   254,    33,   282,   254,   254,   363,   227,   365,    47,
+      35,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,   108,   109,   110,   111,    46,   231,   121,   206,   190,
+     117,   183,   123,   121,   254,   111,   112,   113,   123,   121,
+     245,    37,   227,   114,   119,   111,   112,   113,   145,   104,
+     145,   127,   114,   108,   114,   119,   111,   404,   145,   369,
+     126,   408,   117,   104,   128,   412,    35,   108,   253,   254,
+     475,   476,    97,    98,    99,   385,   101,   102,   103,   119,
+     485,   242,   119,   123,    46,    47,    48,   444,   128,    98,
+      99,    53,   101,   102,   181,   374,   375,   123,   385,    35,
+     261,   188,   199,   190,   385,    35,   385,    55,    56,    57,
+      58,    59,    60,   124,   125,   276,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    55,    56,    57,    58,    59,    60,    98,    99,
-     227,   101,   102,   421,   115,   116,   632,   633,   309,    46,
-      46,    46,    46,   114,   462,   242,   640,   227,    35,   123,
-      35,   123,   121,    46,   121,   123,   253,   254,   124,   120,
-     122,   121,   259,   120,   452,   453,   454,   125,   121,   276,
-     122,   276,   119,   368,   254,   282,   119,   282,   119,   276,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,   384,
-     122,    46,    49,   122,   122,    35,    35,    46,   129,   130,
-     131,    47,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    48,    46,     8,   109,   105,   120,   315,   120,
-     120,    35,   121,   385,    35,    35,   323,    37,    38,    39,
+      51,    52,    46,    38,    39,    46,    41,   159,   160,   161,
+     227,    46,   421,    46,   423,   360,   361,    46,   309,   364,
+      38,    39,    40,    41,    35,   242,   227,   121,   464,   643,
+      35,    98,    37,   100,   106,   107,   253,   254,   635,   636,
+      46,   114,   259,    35,   123,   454,   455,   456,    35,   276,
+     121,   276,   122,   254,   369,   282,   124,   282,   123,   276,
+     123,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+     385,   121,   125,    49,   120,   120,    35,   119,   129,   130,
+     131,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,   315,   121,
+     121,    46,   119,   119,   386,    35,   323,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,   119,    35,    49,   419,    51,    35,
-      35,   423,    35,   119,   121,   491,    35,    35,    35,    35,
-     367,   368,   122,    35,   128,    35,   110,    35,    20,   384,
-     597,    21,    30,    35,    35,    35,    35,   384,   123,   120,
-     122,   121,    45,   122,   122,   457,    97,    54,   586,   587,
-     588,   120,    23,   121,   475,    25,    45,    45,   479,    45,
-      45,    45,    45,   123,   485,    45,    45,    35,    35,   119,
-     515,   516,   517,    35,   486,    35,   488,    35,    35,   426,
-     427,   428,   429,   430,   431,   432,    35,   121,   121,    35,
-     121,   120,    15,    27,   441,    35,   443,   444,   445,    35,
-     114,   234,   640,   175,   181,    52,   254,   276,   455,   456,
-     145,   458,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,   479,   188,   479,   601,   179,   479,   501,   413,
-     643,   516,   479,    37,    38,    39,    40,    41,    42,    43,
+      50,    51,    52,    53,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,   420,   122,
+     122,   122,   122,   425,   493,   121,    46,    35,    35,    46,
+      48,   368,   369,    47,    46,     8,   120,   120,   120,   109,
+     385,   121,   105,    35,    35,   600,   119,   123,   385,    35,
+      35,    35,   119,    35,    35,    35,    35,   459,    35,   128,
+     589,   590,   591,   122,    35,   110,   477,    35,    35,    20,
+     481,    21,    30,   123,    35,    35,   487,   120,    35,    35,
+     122,   121,   517,   518,   519,    54,   488,   122,   490,   122,
+      45,   428,   429,   430,   431,   432,   433,   434,    36,    97,
+      54,   120,    23,    25,    45,   121,   443,   120,   445,   446,
+     447,    45,    45,    45,   643,    45,    45,    45,    45,    35,
+     457,   458,   119,   460,    35,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,   481,   604,   481,    49,    50,    51,
+      52,    35,    35,    35,   481,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    35,
+      35,    35,   121,    15,    27,   114,   503,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,   121,   121,    49,
+     517,   518,   519,   234,    35,    35,   181,   175,   188,   600,
+      52,   276,   254,   595,   414,   481,   179,   534,   535,   536,
+     537,   538,   539,   540,   541,   542,   641,   544,     1,   145,
+     646,   518,   651,   252,     7,   424,     9,    10,    11,    12,
+     503,   506,   406,    16,    17,    18,    19,    33,   508,    22,
+      30,    24,   410,    26,    -1,    28,   246,    -1,    -1,    -1,
+      33,    -1,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    -1,    -1,    49,    50,    51,    52,
+      -1,    -1,    -1,   600,    -1,    -1,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,
+     635,   636,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,
+      -1,    -1,    -1,    -1,   641,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     1,    -1,   651,    -1,   119,    -1,   111,   122,
+       9,    10,    11,    12,    -1,   128,   119,    16,    17,    18,
+      19,    -1,    -1,    22,    -1,    24,    -1,    26,    -1,    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,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    -1,    -1,    -1,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    -1,   111,    49,    50,    51,    52,    -1,   119,    -1,
+     119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,    -1,
+     131,   132,   133,   134,   135,   136,   137,   138,   122,    -1,
+      -1,    -1,   129,    -1,   131,   132,   133,   134,   135,   136,
+     137,   138,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-     648,   252,   422,   506,   501,   504,   405,   409,   246,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,   515,   516,
-     517,    49,    50,    51,    52,    30,   597,    33,    -1,    -1,
-     592,    -1,    -1,    -1,   531,   532,   533,   534,   535,   536,
-     537,   538,   539,   638,   541,     1,    -1,    -1,    -1,    -1,
-      -1,     7,    -1,     9,    10,    11,    12,    35,    -1,    -1,
-      16,    17,    18,    19,    -1,    -1,    22,    -1,    24,   123,
-      26,    -1,    28,    -1,    -1,    -1,    -1,    33,    -1,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    -1,    -1,    49,    50,    51,    52,    -1,    -1,    -1,
-     597,    -1,    -1,    -1,    -1,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    -1,
-      -1,    -1,    -1,    -1,    -1,   632,   633,   632,   633,    -1,
-      -1,    -1,    -1,    -1,    -1,   632,   633,    -1,    -1,    -1,
-      -1,   638,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,
-      -1,   648,    -1,    -1,    -1,   111,    -1,     9,    10,    11,
-      12,    -1,    -1,   119,    16,    17,    18,    19,    -1,    -1,
-      22,    -1,    24,    -1,    26,    -1,    28,    -1,    -1,    -1,
-      -1,    33,    -1,    35,    -1,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    36,    -1,    49,    50,    51,
-      52,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
-      -1,    49,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    -1,    -1,    -1,   111,
-      -1,    -1,    -1,    -1,    -1,   119,    -1,   119,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   129,    -1,   131,   132,   133,
-     134,   135,   136,   137,   138,    -1,    -1,    -1,    -1,   129,
-      -1,   131,   132,   133,   134,   135,   136,   137,   138,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    -1,    -1,    -1,    -1,    -1,   119,
-      -1,    -1,   122,    -1,    -1,    -1,    -1,    -1,   128,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   122,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    37,    38,    39,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    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,
+      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,    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,
+      40,    41,    42,    43,    44,    45,    -1,    47,    48,    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,    37,    38,    39,    40,    41,
-      42,    43,    44,    45
+      44,    45,    -1,    47,    48,    49,    50,    51,    52,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
+      -1,    49,    50,    51,    52,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    -1,    -1,    49,    -1,    51,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
+      -1,    -1,    49,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    37,    38,    39,    40,    41,    42,    43,    44,
+      45
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1749,39 +1745,39 @@
      259,   267,   268,   279,   280,   281,   282,   288,   291,   292,
       38,    39,    40,    41,   180,   287,   287,   109,   105,   154,
       35,   176,    35,   287,   283,   119,   260,   260,    35,    35,
-      35,   250,   244,   187,   288,   291,   212,   251,   252,   253,
-     288,    35,    35,   205,   206,   208,   212,    35,    35,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,   221,   285,   288,   290,    35,   260,   128,   122,    35,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,   122,   295,   212,   181,   291,   110,
-     227,   228,   291,    46,   261,   262,   263,   264,   265,   266,
-     284,    35,    35,    20,   269,   270,   271,    21,   272,   273,
-     274,    30,   234,   235,   236,    35,    35,    35,    35,   122,
-     120,   121,   254,   122,    45,   121,   224,   224,   224,   224,
-     224,   224,   224,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    49,   121,    45,   121,    55,    56,    57,    58,
-      59,    60,   286,   286,   286,    45,   224,   286,   224,    46,
-      49,    51,   248,   291,   244,    47,    48,   288,    47,    48,
-     288,    37,    46,    47,    48,    49,   129,   130,   131,   204,
-     216,   218,   244,   288,   290,   292,   293,   284,   122,    35,
-      97,    98,    99,   101,   102,   103,   182,   183,   184,   255,
-      35,   121,    97,   229,    54,   120,   121,   275,   265,    23,
-     271,   265,    25,   274,   265,    14,    29,    32,   237,   236,
-     284,   253,   255,   284,   291,   291,   291,   291,   291,   291,
-     291,    45,    45,    45,    45,    45,    45,    45,    45,    45,
-     291,   224,   291,   291,   291,    46,    47,    48,   222,   288,
-      46,    47,    48,   288,    46,    47,    48,   288,   291,   291,
-     284,   291,   260,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,   129,   131,   132,
-     133,   134,   135,   136,   137,   138,   294,   294,   294,   212,
-     210,   212,   294,   212,   284,   284,   277,   119,   228,   266,
-     263,    98,   100,   276,    35,    35,    35,    35,    35,   249,
-     247,   249,   249,    35,   291,   291,   291,   291,   291,   291,
-     291,   291,   291,   291,    46,   288,    47,    48,   288,    47,
-      48,   288,   121,   121,   284,   176,   277,    35,   121,   238,
-      31,   226,   239,   240,   241,   207,   207,   120,    15,   249,
-     253,    27,   241,   248,    35,    35
+      35,   250,   244,   187,   288,   291,   212,    46,   251,   252,
+     253,   288,    35,    35,   205,   206,   208,   212,    35,    35,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,   221,   285,   288,   290,    35,   260,   128,   122,
+      35,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,   122,   295,   212,   181,   291,
+     110,   227,   228,   291,    46,   261,   262,   263,   264,   265,
+     266,   284,    35,    35,    20,   269,   270,   271,    21,   272,
+     273,   274,    30,   234,   235,   236,    35,    35,    35,    35,
+     122,    54,   120,   121,   254,   122,    45,   121,   224,   224,
+     224,   224,   224,   224,   224,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    49,   121,    45,   121,    55,    56,
+      57,    58,    59,    60,   286,   286,   286,    45,   224,   286,
+     224,    46,    49,    51,   248,   291,   244,    47,    48,   288,
+      47,    48,   288,    37,    46,    47,    48,    49,   129,   130,
+     131,   204,   216,   218,   244,   288,   290,   292,   293,   284,
+     122,    35,    97,    98,    99,   101,   102,   103,   182,   183,
+     184,   255,    35,   121,    97,   229,    54,   120,   121,   275,
+     265,    23,   271,   265,    25,   274,   265,    14,    29,    32,
+     237,   236,   284,   288,   253,   255,   284,   291,   291,   291,
+     291,   291,   291,   291,    45,    45,    45,    45,    45,    45,
+      45,    45,    45,   291,   224,   291,   291,   291,    46,    47,
+      48,   222,   288,    46,    47,    48,   288,    46,    47,    48,
+     288,   291,   291,   284,   291,   260,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+     129,   131,   132,   133,   134,   135,   136,   137,   138,   294,
+     294,   294,   212,   210,   212,   294,   212,   284,   284,   277,
+     119,   228,   266,   263,    98,   100,   276,    35,    35,    35,
+      35,    35,   249,   247,   249,   249,    35,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,    46,   288,    47,
+      48,   288,    47,    48,   288,   121,   121,   284,   176,   277,
+      35,   121,   238,    31,   226,   239,   240,   241,   207,   207,
+     120,    15,   249,   253,    27,   241,   248,    35,    35
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -4094,53 +4090,60 @@
     break;
 
   case 281:
-#line 1826 "pir.y"
-    { (yyval.ival) = 0; ;}
+#line 1824 "pir.y"
+    { (yyval.targ) = set_param_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
     break;
 
   case 282:
 #line 1828 "pir.y"
-    { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
+    { (yyval.ival) = 0; ;}
     break;
 
   case 283:
-#line 1832 "pir.y"
-    { (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
+#line 1830 "pir.y"
+    { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 284:
 #line 1834 "pir.y"
-    { (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
+    { (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
     break;
 
   case 285:
 #line 1836 "pir.y"
-    { (yyval.ival) = TARGET_FLAG_SLURPY; ;}
+    { (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
     break;
 
   case 286:
 #line 1838 "pir.y"
+    { (yyval.ival) = TARGET_FLAG_SLURPY; ;}
+    break;
+
+  case 287:
+#line 1840 "pir.y"
     {
                              (yyval.ival) = TARGET_FLAG_NAMED;
                              set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
+                             if (TEST_FLAG(lexer->curtarget->flags, TARGET_FLAG_NAMED))
+                                fprintf(stderr, "alias: %s\n", lexer->curtarget->alias);
                            ;}
     break;
 
-  case 287:
-#line 1848 "pir.y"
+  case 288:
+#line 1852 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
-  case 292:
-#line 1858 "pir.y"
+  case 293:
+#line 1862 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
                             ;}
     break;
 
-  case 293:
-#line 1863 "pir.y"
+  case 294:
+#line 1867 "pir.y"
     { /* was the invocation a method call? then it becomes a method tail
                                * call, otherwise it's just a normal (sub) tail call.
                                */
@@ -4151,27 +4154,22 @@
                             ;}
     break;
 
-  case 294:
-#line 1874 "pir.y"
+  case 295:
+#line 1878 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
                             ;}
     break;
 
-  case 295:
-#line 1881 "pir.y"
-    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
-    break;
-
   case 296:
 #line 1885 "pir.y"
-    { (yyval.argm) = NULL; ;}
+    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 297:
-#line 1887 "pir.y"
-    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
+#line 1889 "pir.y"
+    { (yyval.argm) = NULL; ;}
     break;
 
   case 298:
@@ -4180,74 +4178,74 @@
     break;
 
   case 299:
-#line 1893 "pir.y"
-    { (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
+#line 1895 "pir.y"
+    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 302:
-#line 1901 "pir.y"
-    { (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
+  case 300:
+#line 1897 "pir.y"
+    { (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
     break;
 
   case 303:
 #line 1905 "pir.y"
-    { (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
+    { (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
     break;
 
   case 304:
 #line 1909 "pir.y"
-    { (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr)));  ;}
+    { (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 305:
-#line 1915 "pir.y"
+#line 1913 "pir.y"
+    { (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr)));  ;}
+    break;
+
+  case 306:
+#line 1919 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
                             ;}
     break;
 
-  case 306:
-#line 1924 "pir.y"
+  case 307:
+#line 1928 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
                             ;}
     break;
 
-  case 307:
-#line 1931 "pir.y"
-    { (yyval.argm) = NULL; ;}
-    break;
-
   case 308:
-#line 1933 "pir.y"
-    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
+#line 1935 "pir.y"
+    { (yyval.argm) = NULL; ;}
     break;
 
   case 309:
-#line 1938 "pir.y"
+#line 1937 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 310:
-#line 1940 "pir.y"
-    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
+#line 1942 "pir.y"
+    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 311:
-#line 1945 "pir.y"
-    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
+#line 1944 "pir.y"
+    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
   case 312:
 #line 1949 "pir.y"
-    { (yyval.argm) = NULL; ;}
+    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 313:
-#line 1951 "pir.y"
-    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
+#line 1953 "pir.y"
+    { (yyval.argm) = NULL; ;}
     break;
 
   case 314:
@@ -4256,170 +4254,175 @@
     break;
 
   case 315:
-#line 1957 "pir.y"
-    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
+#line 1959 "pir.y"
+    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 316:
 #line 1961 "pir.y"
-    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
+    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
   case 317:
-#line 1966 "pir.y"
-    { (yyval.ival) = 0; ;}
+#line 1965 "pir.y"
+    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 318:
-#line 1968 "pir.y"
-    { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
+#line 1970 "pir.y"
+    { (yyval.ival) = 0; ;}
     break;
 
   case 319:
 #line 1972 "pir.y"
-    { (yyval.ival) = ARG_FLAG_FLAT; ;}
+    { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 320:
-#line 1974 "pir.y"
+#line 1976 "pir.y"
+    { (yyval.ival) = ARG_FLAG_FLAT; ;}
+    break;
+
+  case 321:
+#line 1978 "pir.y"
     {
                                (yyval.ival) = ARG_FLAG_NAMED;
                                set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
                              ;}
     break;
 
-  case 321:
-#line 1981 "pir.y"
-    { (yyval.sval) = NULL; ;}
-    break;
-
   case 322:
-#line 1983 "pir.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
+#line 1985 "pir.y"
+    { (yyval.sval) = NULL; ;}
     break;
 
   case 323:
 #line 1987 "pir.y"
-    { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
+    { (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
     break;
 
-  case 327:
-#line 1998 "pir.y"
-    { store_global_constant(lexer, (yyvsp[(2) - (2)].cval)); ;}
+  case 324:
+#line 1991 "pir.y"
+    { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
   case 328:
 #line 2002 "pir.y"
-    { /* XXX is .globalconst to be kept? */ ;}
+    { store_global_constant(lexer, (yyvsp[(2) - (2)].cval)); ;}
     break;
 
   case 329:
 #line 2006 "pir.y"
-    { (yyval.cval) = new_named_const(lexer, INT_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
+    { /* XXX is .globalconst to be kept? */ ;}
     break;
 
   case 330:
-#line 2008 "pir.y"
-    { (yyval.cval) = new_named_const(lexer, NUM_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
+#line 2010 "pir.y"
+    { (yyval.cval) = new_named_const(lexer, INT_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
     break;
 
   case 331:
-#line 2010 "pir.y"
-    { (yyval.cval) = new_named_const(lexer, STRING_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
+#line 2012 "pir.y"
+    { (yyval.cval) = new_named_const(lexer, NUM_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
     break;
 
   case 332:
-#line 2012 "pir.y"
-    { (yyval.cval) = new_pmc_const((yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
+#line 2014 "pir.y"
+    { (yyval.cval) = new_named_const(lexer, STRING_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 333:
-#line 2019 "pir.y"
-    { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
+#line 2016 "pir.y"
+    { (yyval.cval) = new_pmc_const((yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
     break;
 
   case 334:
-#line 2020 "pir.y"
-    { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
+#line 2023 "pir.y"
+    { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 335:
 #line 2024 "pir.y"
-    { (yyval.cval) = new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval)); ;}
+    { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
   case 336:
-#line 2025 "pir.y"
-    { (yyval.cval) = new_const(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
+#line 2028 "pir.y"
+    { (yyval.cval) = new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 337:
-#line 2026 "pir.y"
-    { (yyval.cval) = new_const(lexer, NUM_TYPE, (yyvsp[(1) - (1)].dval)); ;}
+#line 2029 "pir.y"
+    { (yyval.cval) = new_const(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
   case 338:
-#line 2027 "pir.y"
-    { (yyval.cval) = (yyvsp[(1) - (1)].cval); ;}
+#line 2030 "pir.y"
+    { (yyval.cval) = new_const(lexer, NUM_TYPE, (yyvsp[(1) - (1)].dval)); ;}
     break;
 
   case 339:
-#line 2030 "pir.y"
-    { (yyval.ival) = OP_NE; ;}
+#line 2031 "pir.y"
+    { (yyval.cval) = (yyvsp[(1) - (1)].cval); ;}
     break;
 
   case 340:
-#line 2031 "pir.y"
-    { (yyval.ival) = OP_EQ; ;}
+#line 2034 "pir.y"
+    { (yyval.ival) = OP_NE; ;}
     break;
 
   case 341:
-#line 2032 "pir.y"
-    { (yyval.ival) = OP_LT; ;}
+#line 2035 "pir.y"
+    { (yyval.ival) = OP_EQ; ;}
     break;
 
   case 342:
-#line 2033 "pir.y"
-    { (yyval.ival) = OP_LE; ;}
+#line 2036 "pir.y"
+    { (yyval.ival) = OP_LT; ;}
     break;
 
   case 343:
-#line 2034 "pir.y"
-    { (yyval.ival) = OP_GE; ;}
+#line 2037 "pir.y"
+    { (yyval.ival) = OP_LE; ;}
     break;
 
   case 344:
-#line 2035 "pir.y"
-    { (yyval.ival) = OP_GT; ;}
+#line 2038 "pir.y"
+    { (yyval.ival) = OP_GE; ;}
     break;
 
   case 345:
-#line 2038 "pir.y"
-    { (yyval.ival) = INT_TYPE; ;}
+#line 2039 "pir.y"
+    { (yyval.ival) = OP_GT; ;}
     break;
 
   case 346:
-#line 2039 "pir.y"
-    { (yyval.ival) = NUM_TYPE; ;}
+#line 2042 "pir.y"
+    { (yyval.ival) = INT_TYPE; ;}
     break;
 
   case 347:
-#line 2040 "pir.y"
-    { (yyval.ival) = PMC_TYPE; ;}
+#line 2043 "pir.y"
+    { (yyval.ival) = NUM_TYPE; ;}
     break;
 
   case 348:
-#line 2041 "pir.y"
-    { (yyval.ival) = STRING_TYPE; ;}
+#line 2044 "pir.y"
+    { (yyval.ival) = PMC_TYPE; ;}
     break;
 
   case 349:
-#line 2049 "pir.y"
-    { set_curtarget(lexer, (yyvsp[(1) - (1)].targ));  ;}
+#line 2045 "pir.y"
+    { (yyval.ival) = STRING_TYPE; ;}
     break;
 
-  case 351:
+  case 350:
 #line 2053 "pir.y"
+    { set_curtarget(lexer, (yyvsp[(1) - (1)].targ));  ;}
+    break;
+
+  case 352:
+#line 2057 "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) {
@@ -4431,278 +4434,278 @@
                          ;}
     break;
 
-  case 352:
-#line 2064 "pir.y"
+  case 353:
+#line 2068 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 353:
-#line 2065 "pir.y"
+  case 354:
+#line 2069 "pir.y"
     { (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 354:
-#line 2066 "pir.y"
+  case 355:
+#line 2070 "pir.y"
     { (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 355:
-#line 2067 "pir.y"
+  case 356:
+#line 2071 "pir.y"
     { (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 358:
-#line 2075 "pir.y"
+  case 359:
+#line 2079 "pir.y"
     { (yyval.sval) = "if"; ;}
     break;
 
-  case 359:
-#line 2076 "pir.y"
+  case 360:
+#line 2080 "pir.y"
     { (yyval.sval) = "unless"; ;}
     break;
 
-  case 360:
-#line 2077 "pir.y"
+  case 361:
+#line 2081 "pir.y"
     { (yyval.sval) = "goto"; ;}
     break;
 
-  case 361:
-#line 2078 "pir.y"
+  case 362:
+#line 2082 "pir.y"
     { (yyval.sval) = "int"; ;}
     break;
 
-  case 362:
-#line 2079 "pir.y"
+  case 363:
+#line 2083 "pir.y"
     { (yyval.sval) = "num"; ;}
     break;
 
-  case 363:
-#line 2080 "pir.y"
+  case 364:
+#line 2084 "pir.y"
     { (yyval.sval) = "string"; ;}
     break;
 
-  case 364:
-#line 2081 "pir.y"
+  case 365:
+#line 2085 "pir.y"
     { (yyval.sval) = "pmc"; ;}
     break;
 
-  case 365:
-#line 2082 "pir.y"
+  case 366:
+#line 2086 "pir.y"
     { (yyval.sval) = "null"; ;}
     break;
 
-  case 366:
-#line 2085 "pir.y"
+  case 367:
+#line 2089 "pir.y"
     { (yyval.sval) = "neg"; ;}
     break;
 
-  case 367:
-#line 2086 "pir.y"
+  case 368:
+#line 2090 "pir.y"
     { (yyval.sval) = "not"; ;}
     break;
 
-  case 368:
-#line 2087 "pir.y"
+  case 369:
+#line 2091 "pir.y"
     { (yyval.sval) = "bnot"; ;}
     break;
 
-  case 369:
-#line 2090 "pir.y"
+  case 370:
+#line 2094 "pir.y"
     { (yyval.ival) = OP_ADD; ;}
     break;
 
-  case 370:
-#line 2091 "pir.y"
+  case 371:
+#line 2095 "pir.y"
     { (yyval.ival) = OP_SUB; ;}
     break;
 
-  case 371:
-#line 2092 "pir.y"
+  case 372:
+#line 2096 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 372:
-#line 2093 "pir.y"
+  case 373:
+#line 2097 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 373:
-#line 2094 "pir.y"
+  case 374:
+#line 2098 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 374:
-#line 2095 "pir.y"
+  case 375:
+#line 2099 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 375:
-#line 2096 "pir.y"
+  case 376:
+#line 2100 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 376:
-#line 2097 "pir.y"
+  case 377:
+#line 2101 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 377:
-#line 2098 "pir.y"
+  case 378:
+#line 2102 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 378:
-#line 2099 "pir.y"
+  case 379:
+#line 2103 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 379:
-#line 2100 "pir.y"
+  case 380:
+#line 2104 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 380:
-#line 2101 "pir.y"
+  case 381:
+#line 2105 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 381:
-#line 2102 "pir.y"
+  case 382:
+#line 2106 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 382:
-#line 2103 "pir.y"
+  case 383:
+#line 2107 "pir.y"
     { (yyval.ival) = OP_OR; ;}
     break;
 
-  case 383:
-#line 2104 "pir.y"
+  case 384:
+#line 2108 "pir.y"
     { (yyval.ival) = OP_AND; ;}
     break;
 
-  case 384:
-#line 2105 "pir.y"
+  case 385:
+#line 2109 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 385:
-#line 2106 "pir.y"
+  case 386:
+#line 2110 "pir.y"
     { (yyval.ival) = OP_XOR; ;}
     break;
 
-  case 386:
-#line 2107 "pir.y"
+  case 387:
+#line 2111 "pir.y"
     { (yyval.ival) = OP_ISEQ; ;}
     break;
 
-  case 387:
-#line 2108 "pir.y"
+  case 388:
+#line 2112 "pir.y"
     { (yyval.ival) = OP_ISLE; ;}
     break;
 
-  case 388:
-#line 2109 "pir.y"
+  case 389:
+#line 2113 "pir.y"
     { (yyval.ival) = OP_ISLT; ;}
     break;
 
-  case 389:
-#line 2110 "pir.y"
+  case 390:
+#line 2114 "pir.y"
     { (yyval.ival) = OP_ISGE; ;}
     break;
 
-  case 390:
-#line 2111 "pir.y"
+  case 391:
+#line 2115 "pir.y"
     { (yyval.ival) = OP_ISGT; ;}
     break;
 
-  case 391:
-#line 2112 "pir.y"
+  case 392:
+#line 2116 "pir.y"
     { (yyval.ival) = OP_ISNE; ;}
     break;
 
-  case 392:
-#line 2118 "pir.y"
+  case 393:
+#line 2122 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 393:
-#line 2119 "pir.y"
+  case 394:
+#line 2123 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 394:
-#line 2120 "pir.y"
+  case 395:
+#line 2124 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 395:
-#line 2121 "pir.y"
+  case 396:
+#line 2125 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 396:
-#line 2122 "pir.y"
+  case 397:
+#line 2126 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 397:
-#line 2123 "pir.y"
+  case 398:
+#line 2127 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 398:
-#line 2124 "pir.y"
+  case 399:
+#line 2128 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 399:
-#line 2125 "pir.y"
+  case 400:
+#line 2129 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 400:
-#line 2126 "pir.y"
+  case 401:
+#line 2130 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 401:
-#line 2127 "pir.y"
+  case 402:
+#line 2131 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 402:
-#line 2128 "pir.y"
+  case 403:
+#line 2132 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 403:
-#line 2129 "pir.y"
+  case 404:
+#line 2133 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 405:
-#line 2150 "pir.y"
+  case 406:
+#line 2154 "pir.y"
     { new_subr(lexer, "@start"); ;}
     break;
 
-  case 414:
-#line 2166 "pir.y"
+  case 415:
+#line 2170 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
-  case 419:
-#line 2176 "pir.y"
+  case 420:
+#line 2180 "pir.y"
     { set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 420:
-#line 2180 "pir.y"
+  case 421:
+#line 2184 "pir.y"
     { new_subr(lexer, NULL); ;}
     break;
 
-  case 421:
-#line 2185 "pir.y"
+  case 422:
+#line 2189 "pir.y"
     {
                                   if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval)))
                                       get_opinfo(yyscanner);
@@ -4714,7 +4717,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 4718 "pirparser.c"
+#line 4721 "pirparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4928,7 +4931,7 @@
 }
 
 
-#line 2196 "pir.y"
+#line 2200 "pir.y"
 
 
 

Modified: trunk/compilers/pirc/new/pirpcc.c
==============================================================================
--- trunk/compilers/pirc/new/pirpcc.c	(original)
+++ trunk/compilers/pirc/new/pirpcc.c	Wed Dec 31 02:25:33 2008
@@ -195,6 +195,8 @@
     if (num_targets == 0)
         return;
 
+    fprintf(stderr, "targets 2 operands\n");
+
     /* retrieve the FixedIntegerArray PMC */
     signature_array = get_pmc_const(lexer->bc, array_index);
 
@@ -213,12 +215,25 @@
             VTABLE_set_integer_keyed_int(lexer->interp, signature_array, i,
                                          PARROT_ARG_NAME | PARROT_ARG_SC);
 
-            push_operand(lexer, expr_from_string(lexer, iter->alias));
-            ++i;
+            PARROT_ASSERT(iter->alias);
+
+            if (iter->alias == NULL)
+                fprintf(stderr, "no alias!\n");
+            else {
+                fprintf(stderr, "alias: %s\n", iter->alias);
+                push_operand(lexer, expr_from_string(lexer, iter->alias));
+                ++i;
+
+            }
 
             /* clear flag on the target that was marked :named XXX is this correct? */
             CLEAR_FLAG(iter->flags, TARGET_FLAG_NAMED);
         }
+        else {
+            if (iter->alias) {
+                fprintf(stderr, "no named flag but still an alias! (%s)\n", iter->alias);
+            }
+        }
 
         flag = calculate_pcc_target_flags(iter);
 
@@ -236,6 +251,7 @@
         iter = iter->next;
     }
 
+    fprintf(stderr, "targets 2 operands ok\n");
 }
 
 /*



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