[svn:parrot] r39417 - in trunk: compilers/imcc t/compilers/imcc/syn

chromatic at svn.parrot.org chromatic at svn.parrot.org
Sat Jun 6 00:16:19 UTC 2009


Author: chromatic
Date: Sat Jun  6 00:16:18 2009
New Revision: 39417
URL: https://trac.parrot.org/parrot/changeset/39417

Log:
[IMCC] Allowed Unicode identifiers in method names, not only when stored in
STRINGs but appearing directly in source code.  See TT #730.

Modified:
   trunk/compilers/imcc/imcc.y
   trunk/compilers/imcc/imcparser.c
   trunk/compilers/imcc/imcparser.h
   trunk/compilers/imcc/pcc.c
   trunk/t/compilers/imcc/syn/pcc.t

Modified: trunk/compilers/imcc/imcc.y
==============================================================================
--- trunk/compilers/imcc/imcc.y	Fri Jun  5 23:43:47 2009	(r39416)
+++ trunk/compilers/imcc/imcc.y	Sat Jun  6 00:16:18 2009	(r39417)
@@ -800,14 +800,19 @@
 {
     ASSERT_ARGS(IMCC_itcall_sub)
     IMCC_INFO(interp)->cur_call->pcc_sub->sub = sub;
+
     if (IMCC_INFO(interp)->cur_obj) {
         if (IMCC_INFO(interp)->cur_obj->set != 'P')
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "object isn't a PMC");
-        IMCC_INFO(interp)->cur_call->pcc_sub->object = IMCC_INFO(interp)->cur_obj;
+
+        IMCC_INFO(interp)->cur_call->pcc_sub->object =
+            IMCC_INFO(interp)->cur_obj;
         IMCC_INFO(interp)->cur_obj = NULL;
     }
+
     if (IMCC_INFO(interp)->cur_call->pcc_sub->sub->pmc_type == enum_class_NCI)
         IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
+
     if (IMCC_INFO(interp)->cur_unit->type == IMC_PCCSUB)
         IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
 }
@@ -1407,13 +1412,13 @@
      VTABLE_METHOD
          {
            $$ = P_VTABLE;
-           IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
+           IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
          }
    | VTABLE_METHOD '(' STRINGC ')'
          {
            $$ = P_VTABLE;
-           IMCC_INFO(interp)->cur_unit->vtable_name = $3;
+           IMCC_INFO(interp)->cur_unit->vtable_name      = $3;
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
          }
    ;
@@ -1423,13 +1428,13 @@
          {
            $$ = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
-           IMCC_INFO(interp)->cur_unit->is_method = 1;
+           IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
    | METHOD '(' any_string ')'
          {
            $$ = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = $3;
-           IMCC_INFO(interp)->cur_unit->is_method = 1;
+           IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
    ;
 
@@ -1437,7 +1442,7 @@
     NS_ENTRY
          {
            $$ = 0;
-           IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
+           IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
          }
    | NS_ENTRY '(' any_string ')'
@@ -2092,9 +2097,9 @@
    ;
 
 the_sub:
-     IDENTIFIER                { $$ = mk_sub_address(interp, $1);  mem_sys_free($1); }
-   | STRINGC                   { $$ = mk_sub_address_fromc(interp, $1); mem_sys_free($1); }
-   | USTRINGC                  { $$ = mk_sub_address_u(interp, $1); mem_sys_free($1); }
+     IDENTIFIER     { $$ = mk_sub_address(interp, $1);       mem_sys_free($1); }
+     | STRINGC      { $$ = mk_sub_address_fromc(interp, $1); mem_sys_free($1); }
+     | USTRINGC     { $$ = mk_sub_address_u(interp, $1);     mem_sys_free($1); }
    | target
          {
            $$ = $1;
@@ -2115,6 +2120,12 @@
             IMCC_INFO(interp)->cur_obj = $1;
             $$                         = $3;
         }
+   | target DOT USTRINGC
+         {
+            IMCC_INFO(interp)->cur_obj = $1;
+            $$                         = mk_const(interp, $3, 'U');
+            mem_sys_free($3);
+         }
    | target DOT STRINGC
          {
             IMCC_INFO(interp)->cur_obj = $1;

Modified: trunk/compilers/imcc/imcparser.c
==============================================================================
--- trunk/compilers/imcc/imcparser.c	Fri Jun  5 23:43:47 2009	(r39416)
+++ trunk/compilers/imcc/imcparser.c	Sat Jun  6 00:16:18 2009	(r39417)
@@ -1124,14 +1124,19 @@
 {
     ASSERT_ARGS(IMCC_itcall_sub)
     IMCC_INFO(interp)->cur_call->pcc_sub->sub = sub;
+
     if (IMCC_INFO(interp)->cur_obj) {
         if (IMCC_INFO(interp)->cur_obj->set != 'P')
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "object isn't a PMC");
-        IMCC_INFO(interp)->cur_call->pcc_sub->object = IMCC_INFO(interp)->cur_obj;
+
+        IMCC_INFO(interp)->cur_call->pcc_sub->object =
+            IMCC_INFO(interp)->cur_obj;
         IMCC_INFO(interp)->cur_obj = NULL;
     }
+
     if (IMCC_INFO(interp)->cur_call->pcc_sub->sub->pmc_type == enum_class_NCI)
         IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
+
     if (IMCC_INFO(interp)->cur_unit->type == IMC_PCCSUB)
         IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
 }
@@ -1371,7 +1376,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 1030 "compilers/imcc/imcc.y"
+#line 1035 "compilers/imcc/imcc.y"
 {
     IdList * idlist;
     int t;
@@ -1380,7 +1385,7 @@
     Instruction *i;
 }
 /* Line 187 of yacc.c.  */
-#line 1373 "compilers/imcc/imcparser.c"
+#line 1378 "compilers/imcc/imcparser.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -1393,7 +1398,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 1386 "compilers/imcc/imcparser.c"
+#line 1391 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1608,16 +1613,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  31
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   676
+#define YYLAST   680
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  138
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  126
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  336
+#define YYNRULES  337
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  542
+#define YYNSTATES  543
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -1700,14 +1705,14 @@
      665,   667,   669,   671,   673,   675,   677,   679,   681,   683,
      685,   686,   692,   696,   698,   700,   702,   704,   706,   708,
      710,   712,   714,   716,   718,   720,   722,   727,   729,   731,
-     733,   735,   739,   743,   747,   748,   754,   755,   759,   761,
-     767,   771,   775,   778,   779,   782,   784,   786,   791,   796,
-     799,   803,   809,   811,   815,   816,   818,   820,   827,   833,
-     838,   843,   850,   856,   858,   860,   862,   864,   866,   868,
-     870,   872,   874,   876,   877,   879,   883,   885,   887,   892,
-     896,   898,   900,   902,   904,   906,   908,   910,   912,   914,
-     916,   918,   919,   922,   923,   926,   928,   932,   934,   936,
-     938,   940,   942,   944,   946,   948,   950
+     733,   735,   739,   743,   747,   751,   752,   758,   759,   763,
+     765,   771,   775,   779,   782,   783,   786,   788,   790,   795,
+     800,   803,   807,   813,   815,   819,   820,   822,   824,   831,
+     837,   842,   847,   854,   860,   862,   864,   866,   868,   870,
+     872,   874,   876,   878,   880,   881,   883,   887,   889,   891,
+     896,   900,   902,   904,   906,   908,   910,   912,   914,   916,
+     918,   920,   922,   923,   926,   927,   930,   932,   936,   938,
+     940,   942,   944,   946,   948,   950,   952,   954
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -1787,67 +1792,67 @@
       40,    -1,    41,    -1,    42,    -1,    46,    -1,    47,    -1,
       48,    -1,   247,   122,   116,   157,    -1,   108,    -1,   112,
       -1,   115,    -1,   247,    -1,   247,   120,   252,    -1,   247,
-     120,   112,    -1,   247,   120,   247,    -1,    -1,   233,   235,
-     125,   236,   126,    -1,    -1,   236,    71,   237,    -1,   237,
-      -1,   236,    71,   112,    21,   255,    -1,   255,    21,   255,
-      -1,   112,    21,   255,    -1,   255,   238,    -1,    -1,   238,
-     239,    -1,    16,    -1,    20,    -1,    20,   125,   115,   126,
-      -1,    20,   125,   112,   126,    -1,   247,   194,    -1,   241,
-      71,   240,    -1,   241,    71,   112,    21,   247,    -1,   240,
-      -1,   112,    21,   247,    -1,    -1,   244,    -1,   243,    -1,
-      12,   255,   246,   255,     9,   253,    -1,    12,    13,   255,
-       9,   253,    -1,    12,   255,   245,   253,    -1,    11,   255,
-     245,   253,    -1,    11,   255,   246,   255,     9,   253,    -1,
-      11,    13,   255,     9,   253,    -1,    71,    -1,     9,    -1,
-      56,    -1,    57,    -1,    58,    -1,    59,    -1,    60,    -1,
-      61,    -1,   117,    -1,   262,    -1,    -1,   249,    -1,   249,
-      71,   250,    -1,   250,    -1,   254,    -1,   247,   123,   256,
-     124,    -1,   123,   258,   124,    -1,   252,    -1,   112,    -1,
-     115,    -1,   108,    -1,   116,    -1,   108,    -1,   116,    -1,
-     253,    -1,   255,    -1,   247,    -1,   263,    -1,    -1,   257,
-     260,    -1,    -1,   259,   260,    -1,   261,    -1,   260,   137,
-     261,    -1,   255,    -1,   104,    -1,   105,    -1,   106,    -1,
-     107,    -1,   109,    -1,   113,    -1,   114,    -1,   112,    -1,
-     115,    -1
+     120,   115,    -1,   247,   120,   112,    -1,   247,   120,   247,
+      -1,    -1,   233,   235,   125,   236,   126,    -1,    -1,   236,
+      71,   237,    -1,   237,    -1,   236,    71,   112,    21,   255,
+      -1,   255,    21,   255,    -1,   112,    21,   255,    -1,   255,
+     238,    -1,    -1,   238,   239,    -1,    16,    -1,    20,    -1,
+      20,   125,   115,   126,    -1,    20,   125,   112,   126,    -1,
+     247,   194,    -1,   241,    71,   240,    -1,   241,    71,   112,
+      21,   247,    -1,   240,    -1,   112,    21,   247,    -1,    -1,
+     244,    -1,   243,    -1,    12,   255,   246,   255,     9,   253,
+      -1,    12,    13,   255,     9,   253,    -1,    12,   255,   245,
+     253,    -1,    11,   255,   245,   253,    -1,    11,   255,   246,
+     255,     9,   253,    -1,    11,    13,   255,     9,   253,    -1,
+      71,    -1,     9,    -1,    56,    -1,    57,    -1,    58,    -1,
+      59,    -1,    60,    -1,    61,    -1,   117,    -1,   262,    -1,
+      -1,   249,    -1,   249,    71,   250,    -1,   250,    -1,   254,
+      -1,   247,   123,   256,   124,    -1,   123,   258,   124,    -1,
+     252,    -1,   112,    -1,   115,    -1,   108,    -1,   116,    -1,
+     108,    -1,   116,    -1,   253,    -1,   255,    -1,   247,    -1,
+     263,    -1,    -1,   257,   260,    -1,    -1,   259,   260,    -1,
+     261,    -1,   260,   137,   261,    -1,   255,    -1,   104,    -1,
+     105,    -1,   106,    -1,   107,    -1,   109,    -1,   113,    -1,
+     114,    -1,   112,    -1,   115,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1125,  1125,  1129,  1130,  1134,  1135,  1136,  1142,  1148,
-    1149,  1150,  1151,  1155,  1156,  1165,  1171,  1179,  1191,  1204,
-    1204,  1213,  1213,  1220,  1220,  1229,  1230,  1234,  1235,  1239,
-    1240,  1241,  1242,  1243,  1244,  1245,  1248,  1248,  1257,  1256,
-    1268,  1272,  1281,  1285,  1289,  1289,  1301,  1303,  1307,  1322,
-    1330,  1335,  1339,  1343,  1334,  1355,  1356,  1357,  1370,  1370,
-    1374,  1388,  1392,  1398,  1407,  1413,  1422,  1428,  1437,  1443,
-    1452,  1460,  1465,  1476,  1479,  1484,  1492,  1493,  1494,  1495,
-    1496,  1507,  1518,  1521,  1523,  1528,  1527,  1560,  1561,  1565,
-    1566,  1570,  1571,  1575,  1576,  1580,  1581,  1582,  1583,  1584,
-    1585,  1586,  1587,  1588,  1589,  1590,  1591,  1592,  1593,  1597,
-    1602,  1606,  1611,  1615,  1619,  1624,  1633,  1634,  1638,  1643,
-    1644,  1652,  1653,  1653,  1668,  1669,  1673,  1674,  1675,  1676,
-    1677,  1678,  1679,  1684,  1684,  1687,  1695,  1695,  1701,  1702,
-    1707,  1715,  1716,  1721,  1729,  1733,  1738,  1737,  1750,  1751,
-    1755,  1756,  1766,  1771,  1781,  1790,  1791,  1803,  1807,  1809,
-    1810,  1811,  1812,  1813,  1817,  1818,  1822,  1823,  1827,  1836,
-    1837,  1848,  1855,  1864,  1874,  1875,  1880,  1881,  1882,  1882,
-    1898,  1903,  1908,  1908,  1915,  1916,  1916,  1922,  1928,  1932,
-    1944,  1945,  1946,  1947,  1948,  1949,  1953,  1954,  1955,  1956,
-    1960,  1973,  1975,  1977,  1979,  1981,  1986,  1989,  1996,  1995,
-    2004,  2005,  2006,  2007,  2015,  2016,  2017,  2021,  2022,  2023,
-    2024,  2025,  2026,  2027,  2028,  2029,  2030,  2031,  2032,  2033,
-    2034,  2035,  2036,  2037,  2038,  2039,  2040,  2041,  2042,  2043,
-    2049,  2048,  2060,  2067,  2068,  2069,  2070,  2071,  2072,  2073,
-    2074,  2075,  2076,  2077,  2078,  2079,  2084,  2095,  2096,  2097,
-    2098,  2104,  2118,  2124,  2130,  2129,  2138,  2139,  2149,  2159,
-    2166,  2171,  2181,  2185,  2186,  2190,  2191,  2194,  2195,  2199,
-    2203,  2213,  2219,  2229,  2234,  2238,  2239,  2243,  2247,  2251,
-    2258,  2262,  2266,  2273,  2274,  2278,  2279,  2280,  2281,  2282,
-    2283,  2287,  2288,  2292,  2293,  2297,  2298,  2302,  2303,  2310,
-    2317,  2318,  2319,  2323,  2324,  2328,  2329,  2333,  2334,  2338,
-    2339,  2343,  2343,  2356,  2356,  2369,  2370,  2378,  2387,  2388,
-    2389,  2390,  2391,  2395,  2396,  2397,  2398
+       0,  1130,  1130,  1134,  1135,  1139,  1140,  1141,  1147,  1153,
+    1154,  1155,  1156,  1160,  1161,  1170,  1176,  1184,  1196,  1209,
+    1209,  1218,  1218,  1225,  1225,  1234,  1235,  1239,  1240,  1244,
+    1245,  1246,  1247,  1248,  1249,  1250,  1253,  1253,  1262,  1261,
+    1273,  1277,  1286,  1290,  1294,  1294,  1306,  1308,  1312,  1327,
+    1335,  1340,  1344,  1348,  1339,  1360,  1361,  1362,  1375,  1375,
+    1379,  1393,  1397,  1403,  1412,  1418,  1427,  1433,  1442,  1448,
+    1457,  1465,  1470,  1481,  1484,  1489,  1497,  1498,  1499,  1500,
+    1501,  1512,  1523,  1526,  1528,  1533,  1532,  1565,  1566,  1570,
+    1571,  1575,  1576,  1580,  1581,  1585,  1586,  1587,  1588,  1589,
+    1590,  1591,  1592,  1593,  1594,  1595,  1596,  1597,  1598,  1602,
+    1607,  1611,  1616,  1620,  1624,  1629,  1638,  1639,  1643,  1648,
+    1649,  1657,  1658,  1658,  1673,  1674,  1678,  1679,  1680,  1681,
+    1682,  1683,  1684,  1689,  1689,  1692,  1700,  1700,  1706,  1707,
+    1712,  1720,  1721,  1726,  1734,  1738,  1743,  1742,  1755,  1756,
+    1760,  1761,  1771,  1776,  1786,  1795,  1796,  1808,  1812,  1814,
+    1815,  1816,  1817,  1818,  1822,  1823,  1827,  1828,  1832,  1841,
+    1842,  1853,  1860,  1869,  1879,  1880,  1885,  1886,  1887,  1887,
+    1903,  1908,  1913,  1913,  1920,  1921,  1921,  1927,  1933,  1937,
+    1949,  1950,  1951,  1952,  1953,  1954,  1958,  1959,  1960,  1961,
+    1965,  1978,  1980,  1982,  1984,  1986,  1991,  1994,  2001,  2000,
+    2009,  2010,  2011,  2012,  2020,  2021,  2022,  2026,  2027,  2028,
+    2029,  2030,  2031,  2032,  2033,  2034,  2035,  2036,  2037,  2038,
+    2039,  2040,  2041,  2042,  2043,  2044,  2045,  2046,  2047,  2048,
+    2054,  2053,  2065,  2072,  2073,  2074,  2075,  2076,  2077,  2078,
+    2079,  2080,  2081,  2082,  2083,  2084,  2089,  2100,  2101,  2102,
+    2103,  2109,  2123,  2129,  2135,  2141,  2140,  2149,  2150,  2160,
+    2170,  2177,  2182,  2192,  2196,  2197,  2201,  2202,  2205,  2206,
+    2210,  2214,  2224,  2230,  2240,  2245,  2249,  2250,  2254,  2258,
+    2262,  2269,  2273,  2277,  2284,  2285,  2289,  2290,  2291,  2292,
+    2293,  2294,  2298,  2299,  2303,  2304,  2308,  2309,  2313,  2314,
+    2321,  2328,  2329,  2330,  2334,  2335,  2339,  2340,  2344,  2345,
+    2349,  2350,  2354,  2354,  2367,  2367,  2380,  2381,  2389,  2398,
+    2399,  2400,  2401,  2402,  2406,  2407,  2408,  2409
 };
 #endif
 
@@ -1955,14 +1960,14 @@
      227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
      229,   228,   230,   231,   231,   231,   231,   231,   231,   231,
      231,   231,   231,   231,   231,   231,   232,   233,   233,   233,
-     233,   233,   233,   233,   235,   234,   236,   236,   236,   236,
-     236,   236,   237,   238,   238,   239,   239,   239,   239,   240,
-     241,   241,   241,   241,   241,   242,   242,   243,   243,   243,
-     244,   244,   244,   245,   245,   246,   246,   246,   246,   246,
-     246,   247,   247,   248,   248,   249,   249,   250,   250,   250,
-     251,   251,   251,   252,   252,   253,   253,   254,   254,   255,
-     255,   257,   256,   259,   258,   260,   260,   261,   262,   262,
-     262,   262,   262,   263,   263,   263,   263
+     233,   233,   233,   233,   233,   235,   234,   236,   236,   236,
+     236,   236,   236,   237,   238,   238,   239,   239,   239,   239,
+     240,   241,   241,   241,   241,   241,   242,   242,   243,   243,
+     243,   244,   244,   244,   245,   245,   246,   246,   246,   246,
+     246,   246,   247,   247,   248,   248,   249,   249,   250,   250,
+     250,   251,   251,   251,   252,   252,   253,   253,   254,   254,
+     255,   255,   257,   256,   259,   258,   260,   260,   261,   262,
+     262,   262,   262,   262,   263,   263,   263,   263
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1994,14 +1999,14 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        0,     5,     3,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     4,     1,     1,     1,
-       1,     3,     3,     3,     0,     5,     0,     3,     1,     5,
-       3,     3,     2,     0,     2,     1,     1,     4,     4,     2,
-       3,     5,     1,     3,     0,     1,     1,     6,     5,     4,
-       4,     6,     5,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     1,     3,     1,     1,     4,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     2,     0,     2,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1
+       1,     3,     3,     3,     3,     0,     5,     0,     3,     1,
+       5,     3,     3,     2,     0,     2,     1,     1,     4,     4,
+       2,     3,     5,     1,     3,     0,     1,     1,     6,     5,
+       4,     4,     6,     5,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     1,     3,     1,     1,     4,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     2,     0,     2,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -2011,59 +2016,59 @@
 {
        0,    12,     0,     0,     0,     0,    51,    19,     0,    44,
        0,     0,     2,     3,    10,    11,     0,     6,     8,     5,
-       7,    18,     0,     0,   321,     0,     0,     0,     0,   164,
+       7,    18,     0,     0,   322,     0,     0,     0,     0,   164,
        9,     1,     4,    13,     0,    16,    50,     0,     0,    48,
-     313,   311,   312,   314,    52,   310,   196,   197,   198,   199,
+     314,   312,   313,   315,    52,   311,   196,   197,   198,   199,
        0,    14,    21,   168,     0,    32,    31,    35,    34,   164,
-      27,     0,    33,    36,   165,   167,     0,    49,   328,   329,
-     330,   331,   332,   335,   333,   334,   336,   301,   319,   327,
-     322,   325,   302,   320,    91,     0,     0,     0,    30,    28,
+      27,     0,    33,    36,   165,   167,     0,    49,   329,   330,
+     331,   332,   333,   336,   334,   335,   337,   302,   320,   328,
+     323,   326,   303,   321,    91,     0,     0,     0,    30,    28,
       45,     0,     0,    38,     0,     0,   166,    15,     0,    97,
       95,    96,    98,    99,    66,   100,     0,   101,     0,    64,
        0,    71,    68,   102,   103,   104,   105,   106,   107,   108,
        0,    92,    93,     0,     0,     0,    40,     0,    91,    29,
-     303,   326,     0,     0,    73,     0,     0,     0,     0,    53,
-      94,    20,   315,   316,   317,     0,   318,     0,     0,     0,
-     323,    37,   319,    43,   304,   306,   307,    25,    26,     0,
-       0,     0,    76,    77,    79,    78,    80,    81,   321,     0,
+     304,   327,     0,     0,    73,     0,     0,     0,     0,    53,
+      94,    20,   316,   317,   318,     0,   319,     0,     0,     0,
+     324,    37,   320,    43,   305,   307,   308,    25,    26,     0,
+       0,     0,    76,    77,    79,    78,    80,    81,   322,     0,
       75,     0,     0,     0,     0,    55,     0,     0,    41,    39,
-       0,     0,   321,     0,    67,    63,    62,     0,     0,    61,
-      65,    70,    72,    69,    56,   157,    22,    24,   309,   324,
-       0,   305,    82,    74,    58,     0,     0,   161,   160,   162,
-     163,     0,     0,   157,     0,   155,   308,     0,     0,   159,
+       0,     0,   322,     0,    67,    63,    62,     0,     0,    61,
+      65,    70,    72,    69,    56,   157,    22,    24,   310,   325,
+       0,   306,    82,    74,    58,     0,     0,   161,   160,   162,
+     163,     0,     0,   157,     0,   155,   309,     0,     0,   159,
       57,    54,   156,     0,   195,   158,    59,     0,     0,   170,
        0,     0,     0,     0,   178,     0,   182,   185,   148,     0,
-     149,   240,     0,     0,     0,   257,   258,   259,   303,   208,
+     149,   240,     0,     0,     0,   257,   258,   259,   304,   208,
      184,   192,   193,   194,   135,     0,     0,   176,   210,   211,
-     212,   264,   191,   177,   286,   285,   260,   124,    17,   188,
+     212,   265,   191,   177,   287,   286,   260,   124,    17,   188,
        0,     0,     0,     0,   190,     0,     0,     0,     0,     0,
-     187,   260,     0,    85,   133,   136,   189,   284,   146,   169,
+     187,   260,     0,    85,   133,   136,   189,   285,   146,   169,
        0,   243,   244,   245,   246,   249,   250,   251,   252,   248,
-     247,   253,   254,   255,     0,     0,   321,     0,    60,     0,
-     294,   295,   296,   297,   298,   299,   300,   293,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   284,   116,
-     138,   141,     0,   282,     0,   124,   150,   266,   262,   263,
-     261,   213,   335,   336,   303,     0,   214,   215,   216,     0,
-     207,   319,   201,     0,   242,   126,   127,   128,   129,   132,
-     125,     0,   290,     0,     0,   289,     0,   174,   179,   171,
-     180,   181,     0,     0,     0,    89,     0,     0,     0,     0,
-       0,   279,   335,     0,   151,   273,   335,     0,   268,   273,
-     256,   200,     0,   202,   222,   231,   232,   236,   225,   226,
-     227,   228,   229,   230,   223,   233,   234,   235,   224,   321,
-     239,   217,   218,   219,   220,   221,   237,   238,     0,     0,
-       0,   292,     0,   288,     0,   175,   173,     0,     0,     0,
-     241,     0,     0,     0,     0,   139,     0,   134,     0,   142,
-       0,   137,     0,   283,     0,   280,     0,     0,     0,   147,
-     272,     0,     0,   265,     0,   321,     0,   203,     0,     0,
-       0,   291,   287,   172,   183,   186,   118,     0,     0,     0,
-       0,    87,   117,   273,   140,   273,   143,     0,     0,   152,
-     335,   153,   275,   276,   274,   271,   335,   267,   270,     0,
-     204,   205,   130,   131,    90,     0,     0,     0,     0,   119,
-       0,   144,   145,   281,   266,     0,     0,     0,   206,   110,
-       0,   111,   113,     0,   112,     0,     0,    88,     0,   154,
-       0,     0,   269,     0,     0,     0,   122,     0,    86,     0,
-     209,   278,   277,   109,   115,   114,     0,   124,   120,     0,
-     121,   123
+     247,   253,   254,   255,     0,     0,   322,     0,    60,     0,
+     295,   296,   297,   298,   299,   300,   301,   294,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   285,   116,
+     138,   141,     0,   283,     0,   124,   150,   267,   263,   262,
+     264,   261,   213,   336,   337,   304,     0,   214,   215,   216,
+       0,   207,   320,   201,     0,   242,   126,   127,   128,   129,
+     132,   125,     0,   291,     0,     0,   290,     0,   174,   179,
+     171,   180,   181,     0,     0,     0,    89,     0,     0,     0,
+       0,     0,   280,   336,     0,   151,   274,   336,     0,   269,
+     274,   256,   200,     0,   202,   222,   231,   232,   236,   225,
+     226,   227,   228,   229,   230,   223,   233,   234,   235,   224,
+     322,   239,   217,   218,   219,   220,   221,   237,   238,     0,
+       0,     0,   293,     0,   289,     0,   175,   173,     0,     0,
+       0,   241,     0,     0,     0,     0,   139,     0,   134,     0,
+     142,     0,   137,     0,   284,     0,   281,     0,     0,     0,
+     147,   273,     0,     0,   266,     0,   322,     0,   203,     0,
+       0,     0,   292,   288,   172,   183,   186,   118,     0,     0,
+       0,     0,    87,   117,   274,   140,   274,   143,     0,     0,
+     152,   336,   153,   276,   277,   275,   272,   336,   268,   271,
+       0,   204,   205,   130,   131,    90,     0,     0,     0,     0,
+     119,     0,   144,   145,   282,   267,     0,     0,     0,   206,
+     110,     0,   111,   113,     0,   112,     0,     0,    88,     0,
+     154,     0,     0,   270,     0,     0,     0,   122,     0,    86,
+       0,   209,   279,   278,   109,   115,   114,     0,   124,   120,
+       0,   121,   123
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -2073,95 +2078,95 @@
       58,    86,    87,   159,    59,    60,    94,    95,   128,   151,
       18,    29,    61,    19,    25,    20,    26,    84,   175,   195,
      211,   217,   226,   113,   114,   115,   116,   117,   118,   119,
-     169,   170,   212,   251,   329,   499,   433,   120,   121,   122,
-     471,   375,   434,   516,   529,   536,   308,   360,   252,   330,
-     253,   331,   376,   377,   438,   442,   254,   336,   255,   383,
-     213,   214,   215,    63,    64,    65,   225,   368,   369,   426,
-     256,   275,   278,   279,    50,   392,   257,   287,   349,   418,
-     258,   282,   259,   307,   260,   261,   262,   290,   387,   388,
-     450,   484,   333,   334,   263,   264,   265,   318,   319,    78,
+     169,   170,   212,   251,   329,   500,   434,   120,   121,   122,
+     472,   376,   435,   517,   530,   537,   308,   361,   252,   330,
+     253,   331,   377,   378,   439,   443,   254,   336,   255,   384,
+     213,   214,   215,    63,    64,    65,   225,   369,   370,   427,
+     256,   275,   278,   279,    50,   393,   257,   287,   350,   419,
+     258,   282,   259,   307,   260,   261,   262,   290,   388,   389,
+     451,   485,   333,   334,   263,   264,   265,   318,   319,    78,
      153,   154,   155,    44,    45,   144,   156,   146,    37,    38,
      180,   181,    80,    81,    82,    83
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -422
+#define YYPACT_NINF -418
 static const yytype_int16 yypact[] =
 {
-       4,  -422,   -77,   -34,   -46,   -31,  -422,  -422,    -4,  -422,
-     106,   139,     4,  -422,  -422,  -422,   186,  -422,  -422,  -422,
-    -422,  -422,   104,   187,    68,   194,   221,   127,   199,    53,
-    -422,  -422,  -422,  -422,    92,  -422,  -422,    84,   489,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-     107,  -422,   101,  -422,   217,  -422,  -422,  -422,  -422,    64,
-    -422,   122,  -422,    14,   125,  -422,   223,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-      98,  -422,  -422,  -422,   493,   118,   129,   131,  -422,  -422,
-    -422,   489,   132,  -422,   241,   130,  -422,  -422,   489,  -422,
-    -422,  -422,  -422,  -422,   123,  -422,   134,  -422,   135,   136,
-     138,   141,   146,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-     245,   493,  -422,    74,   239,   239,  -422,   181,   493,  -422,
-     437,  -422,    40,    56,    -7,   152,   170,    40,    40,  -422,
-    -422,  -422,  -422,  -422,  -422,   163,  -422,   165,   183,   193,
-    -422,  -422,   173,  -422,   226,  -422,  -422,  -422,  -422,   180,
-     188,   189,  -422,  -422,  -422,  -422,  -422,  -422,  -422,   -50,
-    -422,   190,   191,   195,   202,   303,    40,    40,  -422,  -422,
-     206,   489,  -422,   437,  -422,  -422,  -422,   207,    -7,  -422,
-    -422,  -422,  -422,  -422,  -422,    32,  -422,  -422,  -422,    98,
-     208,  -422,  -422,  -422,  -422,   211,   315,  -422,  -422,  -422,
-    -422,   316,   262,    43,   261,  -422,  -422,   127,   267,  -422,
-    -422,  -422,  -422,   336,   415,  -422,  -422,   242,    74,  -422,
-     -36,   105,   124,   489,  -422,    54,    16,  -422,  -422,   171,
-    -422,  -422,   353,   360,   368,  -422,  -422,  -422,   437,  -422,
-    -422,  -422,  -422,  -422,  -422,   249,   371,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,   416,  -422,  -422,  -422,
-     489,   197,   489,   197,  -422,   127,   308,   310,   127,   127,
-    -422,   268,   264,  -422,  -422,  -422,  -422,   278,  -422,  -422,
-     266,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,   196,    18,  -422,   489,    -3,   383,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,   -36,   489,
-     387,   -36,   489,   289,   254,   254,   292,   293,   278,  -422,
-    -422,  -422,   382,  -422,   -42,  -422,   503,   517,  -422,  -422,
-    -422,  -422,   279,   280,   437,   298,  -422,  -422,  -422,   489,
-    -422,   -47,   441,   283,  -422,  -422,  -422,  -422,   286,  -422,
-    -422,   -36,  -422,   403,   -36,  -422,   406,   317,   347,  -422,
-    -422,  -422,   297,   299,   -23,     3,    28,    21,   254,   329,
-     300,    -3,   402,   -14,  -422,  -422,   404,   -13,  -422,   408,
-    -422,  -422,   309,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,   489,   318,
-      58,  -422,   -36,  -422,   -36,  -422,  -422,   289,    74,    74,
-    -422,   489,   489,    -1,   433,  -422,   489,  -422,   435,  -422,
-     489,  -422,   438,  -422,   426,  -422,   171,   489,   531,  -422,
-      69,   489,   545,  -422,   489,  -422,   324,  -422,   489,   333,
-     339,  -422,  -422,  -422,  -422,  -422,  -422,   446,   489,   489,
-     559,   125,  -422,  -422,  -422,  -422,  -422,   254,   343,  -422,
-     449,  -422,  -422,   346,  -422,  -422,   452,  -422,  -422,   350,
-    -422,  -422,  -422,  -422,  -422,    15,   472,    19,    22,  -422,
-     478,    69,    69,  -422,   517,   489,    90,   489,  -422,  -422,
-     489,  -422,  -422,   489,  -422,   489,    -6,  -422,    -9,  -422,
-     357,   359,  -422,   482,   483,   484,  -422,   254,  -422,   488,
-    -422,  -422,  -422,  -422,  -422,  -422,   127,  -422,  -422,   289,
-      -3,  -422
+     252,  -418,   -82,   -71,   -58,   -55,  -418,  -418,    -6,  -418,
+     112,   141,   252,  -418,  -418,  -418,   145,  -418,  -418,  -418,
+    -418,  -418,    87,   169,    68,   194,    48,   184,   200,    11,
+    -418,  -418,  -418,  -418,    94,  -418,  -418,    83,   479,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+     101,  -418,    98,  -418,   211,  -418,  -418,  -418,  -418,   144,
+    -418,   122,  -418,    20,   132,  -418,   235,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+     109,  -418,  -418,  -418,   451,   127,   137,   143,  -418,  -418,
+    -418,   479,   149,  -418,   249,   148,  -418,  -418,   479,  -418,
+    -418,  -418,  -418,  -418,   140,  -418,   146,  -418,   150,   152,
+     154,   155,   158,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+     253,   451,  -418,   173,   464,   464,  -418,   195,   451,  -418,
+     412,  -418,    54,   -41,     5,   156,   180,    54,    54,  -418,
+    -418,  -418,  -418,  -418,  -418,   171,  -418,   174,   188,   203,
+    -418,  -418,   183,  -418,   236,  -418,  -418,  -418,  -418,   189,
+     190,   191,  -418,  -418,  -418,  -418,  -418,  -418,  -418,   -46,
+    -418,   192,   202,   204,   205,   305,    54,    54,  -418,  -418,
+     197,   479,  -418,   412,  -418,  -418,  -418,   198,     5,  -418,
+    -418,  -418,  -418,  -418,  -418,    43,  -418,  -418,  -418,   109,
+     208,  -418,  -418,  -418,  -418,   217,   310,  -418,  -418,  -418,
+    -418,   316,   264,     0,    74,  -418,  -418,   184,   262,  -418,
+    -418,  -418,  -418,   333,   261,  -418,  -418,   230,   173,  -418,
+     -69,   321,   336,   479,  -418,    55,   -50,  -418,  -418,   354,
+    -418,  -418,   338,   340,   341,  -418,  -418,  -418,   412,  -418,
+    -418,  -418,  -418,  -418,  -418,   215,   342,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,   467,  -418,  -418,  -418,
+     479,    75,   479,    75,  -418,   184,   276,   280,   184,   184,
+    -418,   232,   228,  -418,  -418,  -418,  -418,   196,  -418,  -418,
+     231,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,   493,   114,  -418,   479,    -5,   346,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,   -69,   479,
+     348,   -69,   479,   250,   107,   107,   251,   255,   196,  -418,
+    -418,  -418,   339,  -418,   -45,  -418,   507,   521,  -418,  -418,
+    -418,  -418,  -418,   239,   246,   412,   266,  -418,  -418,  -418,
+     479,  -418,   -80,   431,   237,  -418,  -418,  -418,  -418,   247,
+    -418,  -418,   -69,  -418,   366,   -69,  -418,   370,   282,   309,
+    -418,  -418,  -418,   263,   265,   -35,     8,    15,    12,   107,
+     284,   270,    -5,   362,   -27,  -418,  -418,   363,    -2,  -418,
+     376,  -418,  -418,   275,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,   479,
+     283,    72,  -418,   -69,  -418,   -69,  -418,  -418,   250,   173,
+     173,  -418,   479,   479,    89,   398,  -418,   479,  -418,   400,
+    -418,   479,  -418,   402,  -418,   386,  -418,   354,   479,   535,
+    -418,   131,   479,   549,  -418,   479,  -418,   288,  -418,   479,
+     287,   290,  -418,  -418,  -418,  -418,  -418,  -418,   404,   479,
+     479,   563,   132,  -418,  -418,  -418,  -418,  -418,   107,   293,
+    -418,   399,  -418,  -418,   294,  -418,  -418,   401,  -418,  -418,
+     299,  -418,  -418,  -418,  -418,  -418,    17,   420,    18,    19,
+    -418,   425,   131,   131,  -418,   521,   479,    73,   479,  -418,
+    -418,   479,  -418,  -418,   479,  -418,   479,     4,  -418,    -1,
+    -418,   311,   313,  -418,   440,   442,   443,  -418,   107,  -418,
+     448,  -418,  -418,  -418,  -418,  -418,  -418,   184,  -418,  -418,
+     250,    -5,  -418
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -422,  -422,  -422,   491,     9,  -146,  -422,  -422,  -422,  -422,
-     270,  -422,  -422,    47,  -422,   445,  -422,  -422,  -422,   161,
-    -422,  -422,  -422,    12,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,   319,  -422,  -422,  -422,  -422,  -422,   378,  -422,   391,
-    -422,  -422,  -422,  -422,  -422,  -422,  -330,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,   301,   302,  -422,   -63,  -422,  -422,  -418,  -422,
-    -422,  -422,  -422,  -422,  -214,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,    67,  -206,  -422,    11,  -312,
-    -421,  -422,   147,   200,  -422,  -422,  -422,   244,   252,  -128,
-     281,  -422,   335,  -422,   229,  -223,    33,   -38,  -162,  -422,
-    -422,  -422,   354,   436,  -422,  -119
+    -418,  -418,  -418,   444,    14,  -167,  -418,  -418,  -418,  -418,
+     233,  -418,  -418,  -100,  -418,   395,  -418,  -418,  -418,   110,
+    -418,  -418,  -418,    23,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,   277,  -418,  -418,  -418,  -418,  -418,   344,  -418,   343,
+    -418,  -418,  -418,  -418,  -418,  -418,  -330,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,   269,   271,  -418,   -63,  -418,  -418,  -417,  -418,
+    -418,  -418,  -418,  -418,  -214,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,    28,  -205,  -418,   -28,  -327,
+    -319,  -418,    99,   165,  -418,  -418,  -418,   210,   221,  -128,
+     248,  -418,   301,  -418,   193,  -220,    77,   -38,  -162,  -418,
+    -418,  -418,   314,   424,  -418,  -119
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -2171,146 +2176,148 @@
 #define YYTABLE_NINF -261
 static const yytype_int16 yytable[] =
 {
-      79,    96,   152,   227,   141,   381,   187,   269,     1,   463,
-       2,     3,     4,   431,   355,   356,   357,   358,   -42,   509,
-     200,   188,   526,   512,   384,   439,   514,    91,     5,   379,
-       6,   341,   435,   280,     7,    21,   440,   204,    57,     3,
-       4,    62,   436,    92,   162,   163,   164,   165,   379,   209,
-       3,     4,   501,   126,   502,   152,   527,   448,   452,     2,
-      79,   323,   452,   205,   326,   327,    23,   209,    57,   528,
-       2,    62,   142,   304,   205,   468,   189,     5,  -260,    22,
-     143,   469,   470,    52,   380,   482,   510,   432,     5,   483,
-     513,    93,    24,   515,    52,   362,   266,   359,   365,   350,
-       8,   166,   441,   430,   -83,   167,     9,   437,    28,   268,
-      30,   281,   449,   453,    10,   -84,   168,   530,   270,   466,
-     152,   541,    68,    69,    70,    71,   245,    72,   -23,   -21,
-     342,    74,    75,   343,   344,    77,   481,   272,   421,    31,
-     487,   423,   206,    79,   353,   345,   346,   347,   348,     8,
-     207,   208,   157,   206,    53,   158,   -46,   145,   147,   335,
-       8,   207,   208,    54,   160,    53,   276,   -47,   161,   277,
-     459,    55,    56,   460,    54,    34,   339,   351,    46,    47,
-      48,    49,    55,    56,   173,   174,    73,    74,    75,    76,
-      33,    35,    36,   271,   273,   274,   370,   371,    39,   461,
-     335,   462,   520,    51,    66,   521,   310,   540,    67,    68,
-      69,    70,    71,   -23,    72,    85,   152,    73,    74,    75,
-      76,    88,    77,   196,   197,    90,    53,    97,    68,    69,
-      70,    71,   309,    72,   320,    98,    73,    74,    75,    76,
-     123,    77,   124,   125,   127,   129,   130,   456,   132,   139,
-     443,   335,   148,   311,   312,   313,   314,   315,   316,   133,
-     134,   135,   223,   136,   171,  -164,   137,   352,   317,   354,
-    -164,   138,  -164,  -164,  -164,    68,    69,    70,    71,   245,
-      72,   363,   172,   246,   366,   176,   247,   177,    77,  -164,
-    -164,  -164,   178,   489,   179,  -164,   182,   183,   385,   389,
-      68,    69,    70,    71,    40,    72,   184,   194,   338,   464,
-     465,   393,    43,    77,   185,   186,   190,   191,   281,   219,
-     220,   192,   539,   218,  -164,  -164,  -164,  -164,   193,    40,
-     198,   202,   216,    41,   221,  -164,    42,    43,   228,  -164,
-     229,  -164,   498,    68,    69,    70,    71,   142,    72,   503,
-     267,    73,    74,    75,    76,   143,    77,   283,    68,    69,
-      70,    71,    53,    72,   284,  -164,  -164,  -164,  -164,  -164,
-    -164,    77,   285,  -164,   288,   289,  -164,  -164,  -164,   324,
-     457,   325,    68,    69,    70,    71,  -164,    72,   304,   328,
-     332,   337,   361,   385,   467,    77,   364,   367,   473,   537,
-     372,   373,   475,   378,  -258,  -259,   391,   419,   500,   479,
-     385,   420,   422,   485,   385,   424,   488,   425,   427,   428,
-     491,   429,   446,   447,   230,   451,   231,   232,   233,   454,
-     495,   496,   455,    68,    69,    70,    71,   472,    72,   474,
-     458,   444,   476,   234,   235,   236,    77,   477,   490,   237,
-     494,   291,   292,   293,   294,   295,   296,   297,   298,   492,
-     299,   300,   301,   302,   303,   493,   389,   519,   504,   522,
-     505,   506,   523,   507,   508,   524,   511,   525,   238,   239,
-     240,   241,   517,   531,   394,   532,   533,   534,   535,   242,
-     395,   396,   538,   243,   250,   244,   397,   398,   399,   400,
-     401,   402,   403,    32,    89,   390,   149,   203,   404,   405,
-     406,   407,   140,   478,   222,   518,   224,   321,   201,    68,
-      69,    70,    71,   245,    72,   322,   445,   246,   374,   286,
-     247,   248,    77,   340,   131,   199,   304,     0,   305,   306,
-     249,    68,    69,    70,    71,   142,    72,     0,     0,    73,
-      74,    75,    76,   143,    77,     0,     0,     0,     0,     0,
-     150,     0,   408,     0,   409,     0,     0,     0,     0,     0,
-     410,   411,   412,   413,   414,   415,   416,   417,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,     0,
-     110,   111,   112,    68,    69,    70,    71,     0,    72,     0,
-       0,    73,    74,    75,    76,     0,    77,    68,    69,    70,
-      71,     0,    72,     0,     0,   382,    74,    75,    76,     0,
-      77,    68,    69,    70,    71,     0,    72,     0,     0,   386,
+      79,    96,   152,   227,   141,   382,   187,     3,     4,   385,
+     269,   464,   356,   357,   358,   359,   440,     2,   432,   436,
+     200,   510,   513,   515,   -42,   188,   380,   441,   209,   437,
+      21,   205,   527,    91,   280,     5,   380,   173,   174,   142,
+     304,    52,    22,    57,   449,  -260,   209,   143,   204,    92,
+       3,     4,    62,   126,    23,   152,   162,   163,   164,   165,
+      79,   323,   -23,   -21,   326,   327,   528,   160,    24,   453,
+     453,   161,   -84,    57,   205,   223,   196,   197,  -164,   529,
+     189,   381,    62,  -164,   310,  -164,  -164,  -164,   511,   514,
+     516,   431,   433,   442,   438,   360,   266,    93,   363,   450,
+     351,   366,  -164,  -164,  -164,   467,    28,     8,  -164,   268,
+     206,   281,    53,   166,   -46,   -83,    30,   167,   207,   208,
+     152,    54,   482,   542,   454,   531,   488,   342,   168,    55,
+      56,   311,   312,   313,   314,   315,   316,  -164,  -164,  -164,
+    -164,    31,   422,    79,   354,   424,   317,   483,  -164,    33,
+       2,   484,  -164,   206,  -164,   502,    40,   503,    34,   335,
+      41,   207,   208,    42,    43,   469,   157,   276,     5,   158,
+     277,   470,   471,    35,    52,    53,   340,   352,  -164,  -164,
+    -164,  -164,  -164,  -164,   460,   521,  -164,   461,   522,  -164,
+    -164,  -164,    36,   271,   273,   274,   371,   372,    39,  -164,
+     335,   145,   147,   462,    51,   463,    66,    67,   541,    85,
+     -23,    68,    69,    70,    71,    88,    72,   152,    68,    69,
+      70,    71,   245,    72,    77,    90,   343,    74,    75,   344,
+     345,    77,   309,    53,   320,    46,    47,    48,    49,    97,
+       8,   346,   347,   348,   349,    53,    98,   -47,   457,   123,
+     124,   444,   335,   129,    54,   125,     1,   139,     2,     3,
+       4,   127,    55,    56,   130,   132,   148,   353,   171,   355,
+     230,   133,   231,   232,   233,   134,     5,   135,     6,   136,
+     137,   364,     7,   138,   367,    73,    74,    75,    76,   234,
+     235,   236,   172,   176,   490,   237,   177,   178,   386,   390,
+      68,    69,    70,    71,   179,    72,   182,   183,   332,   194,
+     465,   466,   394,    77,   219,   184,   185,   186,   190,   281,
+     220,   198,   202,   540,   238,   239,   240,   241,   191,   218,
+     192,   193,   216,   228,   270,   242,   221,   229,   267,   243,
+     288,   244,   283,   499,   284,   285,   289,   324,     8,   272,
+     504,   325,   304,   328,     9,   362,   337,   365,   368,   373,
+     379,   420,    10,   374,  -258,    68,    69,    70,    71,   245,
+      72,  -259,   421,   246,   392,   423,   247,   248,    77,   425,
+     428,   458,   426,   448,   452,   429,   249,   430,    68,    69,
+      70,    71,   447,    72,   386,   468,   445,   455,   456,   474,
+     538,    77,   473,   476,   475,   459,   477,   478,   495,   501,
+     480,   386,   491,   493,   486,   386,   494,   489,   505,   507,
+     506,   492,   508,   509,   512,    68,    69,    70,    71,   518,
+      72,   496,   497,    73,    74,    75,    76,   532,    77,   533,
+      68,    69,    70,    71,   534,    72,   535,   536,    73,    74,
+      75,    76,   539,    77,    89,   391,    32,   250,    68,    69,
+      70,    71,   245,    72,   140,   203,   246,   390,   520,   247,
+     523,    77,   149,   524,   395,   479,   525,   519,   526,   446,
+     396,   397,   222,   321,   201,   224,   398,   399,   400,   401,
+     402,   403,   404,   375,   322,   199,   286,   341,   405,   406,
+     407,   408,   291,   292,   293,   294,   295,   296,   297,   298,
+       0,   299,   300,   301,   302,   303,    68,    69,    70,    71,
+     142,    72,   131,     0,    73,    74,    75,    76,   143,    77,
+       0,     0,     0,     0,     0,   150,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,     0,   110,   111,
+     112,     0,   409,     0,   410,     0,     0,     0,     0,     0,
+     411,   412,   413,   414,   415,   416,   417,   418,    68,    69,
+      70,    71,   142,    72,     0,     0,    73,    74,    75,    76,
+     143,    77,     0,    68,    69,    70,    71,   304,    72,   305,
+     306,    73,    74,    75,    76,     0,    77,    68,    69,    70,
+      71,    40,    72,     0,     0,   338,     0,     0,   339,    43,
+      77,    68,    69,    70,    71,     0,    72,     0,     0,   383,
       74,    75,    76,     0,    77,    68,    69,    70,    71,     0,
-      72,     0,     0,   480,    74,    75,    76,     0,    77,    68,
-      69,    70,    71,     0,    72,     0,     0,   486,    74,    75,
+      72,     0,     0,   387,    74,    75,    76,     0,    77,    68,
+      69,    70,    71,     0,    72,     0,     0,   481,    74,    75,
       76,     0,    77,    68,    69,    70,    71,     0,    72,     0,
-       0,   497,     0,     0,     0,     0,    77
+       0,   487,    74,    75,    76,     0,    77,    68,    69,    70,
+      71,     0,    72,     0,     0,   498,     0,     0,     0,     0,
+      77
 };
 
 static const yytype_int16 yycheck[] =
 {
-      38,    64,   130,   217,   123,   335,   168,   230,     4,   427,
-       6,     7,     8,    10,    17,    18,    19,    20,     4,     4,
-     182,    71,    28,     4,   336,     4,     4,    13,    24,    71,
-      26,    13,     4,   239,    30,   112,    15,     5,    29,     7,
-       8,    29,    14,    29,    51,    52,    53,    54,    71,   195,
-       7,     8,   473,    91,   475,   183,    62,    71,    71,     6,
-      98,   275,    71,    31,   278,   279,   112,   213,    59,    75,
-       6,    59,   108,   120,    31,    76,   126,    24,   125,   113,
-     116,    82,    83,    30,   126,    16,    71,    84,    24,    20,
-      71,    77,   123,    71,    30,   318,   224,   100,   321,   305,
-      96,   108,    81,   126,    72,   112,   102,    79,   112,   228,
-       4,   239,   126,   126,   110,    72,   123,   126,    13,   431,
-     248,   539,   104,   105,   106,   107,   108,   109,   112,   113,
-     112,   113,   114,   115,   116,   117,   448,    13,   361,     0,
-     452,   364,   110,   181,   306,   127,   128,   129,   130,    96,
-     118,   119,   112,   110,   101,   115,   103,   124,   125,   287,
-      96,   118,   119,   110,   108,   101,   112,   103,   112,   115,
-     112,   118,   119,   115,   110,    71,   304,   305,    51,    52,
-      53,    54,   118,   119,   137,   138,   112,   113,   114,   115,
-       4,     4,   124,   231,   232,   233,   324,   325,     4,   422,
-     328,   424,   112,     4,   112,   115,     9,   537,   124,   104,
-     105,   106,   107,   112,   109,   108,   344,   112,   113,   114,
-     115,     4,   117,   176,   177,   103,   101,     4,   104,   105,
-     106,   107,   270,   109,   272,   137,   112,   113,   114,   115,
-     122,   117,   113,   112,   112,     4,   116,   409,   125,     4,
-     378,   379,    71,    56,    57,    58,    59,    60,    61,   125,
-     125,   125,     1,   125,   112,     4,   125,   305,    71,   307,
-       9,   125,    11,    12,    13,   104,   105,   106,   107,   108,
-     109,   319,   112,   112,   322,   122,   115,   122,   117,    28,
-      29,    30,   109,   455,   101,    34,   123,    71,   336,   337,
-     104,   105,   106,   107,   108,   109,   126,     4,   112,   428,
-     429,   349,   116,   117,   126,   126,   126,   126,   446,     4,
-       4,   126,   536,   112,    63,    64,    65,    66,   126,   108,
-     124,   124,   124,   112,    72,    74,   115,   116,    71,    78,
-       4,    80,   470,   104,   105,   106,   107,   108,   109,   477,
-     108,   112,   113,   114,   115,   116,   117,     4,   104,   105,
-     106,   107,   101,   109,     4,   104,   105,   106,   107,   108,
-     109,   117,     4,   112,   125,     4,   115,   116,   117,    71,
-     418,    71,   104,   105,   106,   107,   125,   109,   120,   125,
-     112,   125,     9,   431,   432,   117,     9,   108,   436,   527,
-     108,   108,   440,    21,   125,   125,   108,   124,   471,   447,
-     448,   125,     9,   451,   452,     9,   454,   100,    71,   122,
-     458,   122,   122,    21,     9,    21,    11,    12,    13,    21,
-     468,   469,   123,   104,   105,   106,   107,     4,   109,     4,
-     122,   112,     4,    28,    29,    30,   117,    21,   124,    34,
-       4,    35,    36,    37,    38,    39,    40,    41,    42,   126,
-      44,    45,    46,    47,    48,   126,   504,   505,   125,   507,
-      21,   125,   510,    21,   124,   513,     4,   515,    63,    64,
-      65,    66,     4,   126,    43,   126,     4,     4,     4,    74,
-      49,    50,     4,    78,   224,    80,    55,    56,    57,    58,
-      59,    60,    61,    12,    59,   344,   128,   188,    67,    68,
-      69,    70,   121,   446,   213,   504,   214,   273,   183,   104,
-     105,   106,   107,   108,   109,   273,   379,   112,   328,   248,
-     115,   116,   117,   304,    98,   181,   120,    -1,   122,   123,
-     125,   104,   105,   106,   107,   108,   109,    -1,    -1,   112,
-     113,   114,   115,   116,   117,    -1,    -1,    -1,    -1,    -1,
-     123,    -1,   121,    -1,   123,    -1,    -1,    -1,    -1,    -1,
-     129,   130,   131,   132,   133,   134,   135,   136,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    98,    99,   104,   105,   106,   107,    -1,   109,    -1,
-      -1,   112,   113,   114,   115,    -1,   117,   104,   105,   106,
-     107,    -1,   109,    -1,    -1,   112,   113,   114,   115,    -1,
+      38,    64,   130,   217,   123,   335,   168,     7,     8,   336,
+     230,   428,    17,    18,    19,    20,     4,     6,    10,     4,
+     182,     4,     4,     4,     4,    71,    71,    15,   195,    14,
+     112,    31,    28,    13,   239,    24,    71,   137,   138,   108,
+     120,    30,   113,    29,    71,   125,   213,   116,     5,    29,
+       7,     8,    29,    91,   112,   183,    51,    52,    53,    54,
+      98,   275,   112,   113,   278,   279,    62,   108,   123,    71,
+      71,   112,    72,    59,    31,     1,   176,   177,     4,    75,
+     126,   126,    59,     9,     9,    11,    12,    13,    71,    71,
+      71,   126,    84,    81,    79,   100,   224,    77,   318,   126,
+     305,   321,    28,    29,    30,   432,   112,    96,    34,   228,
+     110,   239,   101,   108,   103,    72,     4,   112,   118,   119,
+     248,   110,   449,   540,   126,   126,   453,    13,   123,   118,
+     119,    56,    57,    58,    59,    60,    61,    63,    64,    65,
+      66,     0,   362,   181,   306,   365,    71,    16,    74,     4,
+       6,    20,    78,   110,    80,   474,   108,   476,    71,   287,
+     112,   118,   119,   115,   116,    76,   112,   112,    24,   115,
+     115,    82,    83,     4,    30,   101,   304,   305,   104,   105,
+     106,   107,   108,   109,   112,   112,   112,   115,   115,   115,
+     116,   117,   124,   231,   232,   233,   324,   325,     4,   125,
+     328,   124,   125,   423,     4,   425,   112,   124,   538,   108,
+     112,   104,   105,   106,   107,     4,   109,   345,   104,   105,
+     106,   107,   108,   109,   117,   103,   112,   113,   114,   115,
+     116,   117,   270,   101,   272,    51,    52,    53,    54,     4,
+      96,   127,   128,   129,   130,   101,   137,   103,   410,   122,
+     113,   379,   380,     4,   110,   112,     4,     4,     6,     7,
+       8,   112,   118,   119,   116,   125,    71,   305,   112,   307,
+       9,   125,    11,    12,    13,   125,    24,   125,    26,   125,
+     125,   319,    30,   125,   322,   112,   113,   114,   115,    28,
+      29,    30,   112,   122,   456,    34,   122,   109,   336,   337,
+     104,   105,   106,   107,   101,   109,   123,    71,   112,     4,
+     429,   430,   350,   117,     4,   126,   126,   126,   126,   447,
+       4,   124,   124,   537,    63,    64,    65,    66,   126,   112,
+     126,   126,   124,    71,    13,    74,    72,     4,   108,    78,
+     125,    80,     4,   471,     4,     4,     4,    71,    96,    13,
+     478,    71,   120,   125,   102,     9,   125,     9,   108,   108,
+      21,   124,   110,   108,   125,   104,   105,   106,   107,   108,
+     109,   125,   125,   112,   108,     9,   115,   116,   117,     9,
+      71,   419,   100,    21,    21,   122,   125,   122,   104,   105,
+     106,   107,   122,   109,   432,   433,   112,    21,   123,   437,
+     528,   117,     4,   441,     4,   122,     4,    21,     4,   472,
+     448,   449,   124,   126,   452,   453,   126,   455,   125,   125,
+      21,   459,    21,   124,     4,   104,   105,   106,   107,     4,
+     109,   469,   470,   112,   113,   114,   115,   126,   117,   126,
+     104,   105,   106,   107,     4,   109,     4,     4,   112,   113,
+     114,   115,     4,   117,    59,   345,    12,   224,   104,   105,
+     106,   107,   108,   109,   121,   188,   112,   505,   506,   115,
+     508,   117,   128,   511,    43,   447,   514,   505,   516,   380,
+      49,    50,   213,   273,   183,   214,    55,    56,    57,    58,
+      59,    60,    61,   328,   273,   181,   248,   304,    67,    68,
+      69,    70,    35,    36,    37,    38,    39,    40,    41,    42,
+      -1,    44,    45,    46,    47,    48,   104,   105,   106,   107,
+     108,   109,    98,    -1,   112,   113,   114,   115,   116,   117,
+      -1,    -1,    -1,    -1,    -1,   123,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    -1,    97,    98,
+      99,    -1,   121,    -1,   123,    -1,    -1,    -1,    -1,    -1,
+     129,   130,   131,   132,   133,   134,   135,   136,   104,   105,
+     106,   107,   108,   109,    -1,    -1,   112,   113,   114,   115,
+     116,   117,    -1,   104,   105,   106,   107,   120,   109,   122,
+     123,   112,   113,   114,   115,    -1,   117,   104,   105,   106,
+     107,   108,   109,    -1,    -1,   112,    -1,    -1,   115,   116,
      117,   104,   105,   106,   107,    -1,   109,    -1,    -1,   112,
      113,   114,   115,    -1,   117,   104,   105,   106,   107,    -1,
      109,    -1,    -1,   112,   113,   114,   115,    -1,   117,   104,
      105,   106,   107,    -1,   109,    -1,    -1,   112,   113,   114,
      115,    -1,   117,   104,   105,   106,   107,    -1,   109,    -1,
-      -1,   112,    -1,    -1,    -1,    -1,   117
+      -1,   112,   113,   114,   115,    -1,   117,   104,   105,   106,
+     107,    -1,   109,    -1,    -1,   112,    -1,    -1,    -1,    -1,
+     117
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2350,28 +2357,28 @@
       45,    46,    47,    48,   120,   122,   123,   231,   194,   255,
        9,    56,    57,    58,    59,    60,    61,    71,   245,   246,
      255,   245,   246,   222,    71,    71,   222,   222,   125,   182,
-     197,   199,   112,   240,   241,   247,   205,   125,   112,   247,
-     252,    13,   112,   115,   116,   127,   128,   129,   130,   226,
-     234,   247,   255,   256,   255,    17,    18,    19,    20,   100,
-     195,     9,   253,   255,     9,   253,   255,   108,   215,   216,
-     247,   247,   108,   108,   241,   189,   200,   201,    21,    71,
-     126,   194,   112,   207,   237,   255,   112,   236,   237,   255,
-     157,   108,   223,   255,    43,    49,    50,    55,    56,    57,
-      58,    59,    60,    61,    67,    68,    69,    70,   121,   123,
-     129,   130,   131,   132,   133,   134,   135,   136,   227,   124,
-     125,   253,     9,   253,     9,   100,   217,    71,   122,   122,
-     126,    10,    84,   184,   190,     4,    14,    79,   202,     4,
-      15,    81,   203,   247,   112,   240,   122,    21,    71,   126,
-     238,    21,    71,   126,    21,   123,   256,   255,   122,   112,
-     115,   253,   253,   216,   263,   263,   237,   255,    76,    82,
-      83,   188,     4,   255,     4,   255,     4,    21,   233,   255,
-     112,   237,    16,    20,   239,   255,   112,   237,   255,   256,
-     124,   255,   126,   126,     4,   255,   255,   112,   247,   183,
-     213,   238,   238,   247,   125,    21,   125,    21,   124,     4,
-      71,     4,     4,    71,     4,    71,   191,     4,   236,   255,
-     112,   115,   255,   255,   255,   255,    28,    62,    75,   192,
-     126,   126,   126,     4,     4,     4,   193,   247,     4,   222,
-     194,   216
+     197,   199,   112,   240,   241,   247,   205,   125,   112,   115,
+     247,   252,    13,   112,   115,   116,   127,   128,   129,   130,
+     226,   234,   247,   255,   256,   255,    17,    18,    19,    20,
+     100,   195,     9,   253,   255,     9,   253,   255,   108,   215,
+     216,   247,   247,   108,   108,   241,   189,   200,   201,    21,
+      71,   126,   194,   112,   207,   237,   255,   112,   236,   237,
+     255,   157,   108,   223,   255,    43,    49,    50,    55,    56,
+      57,    58,    59,    60,    61,    67,    68,    69,    70,   121,
+     123,   129,   130,   131,   132,   133,   134,   135,   136,   227,
+     124,   125,   253,     9,   253,     9,   100,   217,    71,   122,
+     122,   126,    10,    84,   184,   190,     4,    14,    79,   202,
+       4,    15,    81,   203,   247,   112,   240,   122,    21,    71,
+     126,   238,    21,    71,   126,    21,   123,   256,   255,   122,
+     112,   115,   253,   253,   216,   263,   263,   237,   255,    76,
+      82,    83,   188,     4,   255,     4,   255,     4,    21,   233,
+     255,   112,   237,    16,    20,   239,   255,   112,   237,   255,
+     256,   124,   255,   126,   126,     4,   255,   255,   112,   247,
+     183,   213,   238,   238,   247,   125,    21,   125,    21,   124,
+       4,    71,     4,     4,    71,     4,    71,   191,     4,   236,
+     255,   112,   115,   255,   255,   255,   255,    28,    62,    75,
+     192,   126,   126,   126,     4,     4,     4,   193,   247,     4,
+     222,   194,   216
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3199,22 +3206,22 @@
   switch (yyn)
     {
         case 2:
-#line 1125 "compilers/imcc/imcc.y"
+#line 1130 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
-#line 1134 "compilers/imcc/imcc.y"
+#line 1139 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
-#line 1135 "compilers/imcc/imcc.y"
+#line 1140 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
-#line 1137 "compilers/imcc/imcc.y"
+#line 1142 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3223,7 +3230,7 @@
     break;
 
   case 8:
-#line 1143 "compilers/imcc/imcc.y"
+#line 1148 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3232,32 +3239,32 @@
     break;
 
   case 9:
-#line 1148 "compilers/imcc/imcc.y"
+#line 1153 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
-#line 1149 "compilers/imcc/imcc.y"
+#line 1154 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
-#line 1150 "compilers/imcc/imcc.y"
+#line 1155 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
-#line 1151 "compilers/imcc/imcc.y"
+#line 1156 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
-#line 1155 "compilers/imcc/imcc.y"
+#line 1160 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
-#line 1157 "compilers/imcc/imcc.y"
+#line 1162 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3266,7 +3273,7 @@
     break;
 
   case 15:
-#line 1166 "compilers/imcc/imcc.y"
+#line 1171 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            /* set_filename() frees the STRINGC */
@@ -3275,7 +3282,7 @@
     break;
 
   case 16:
-#line 1172 "compilers/imcc/imcc.y"
+#line 1177 "compilers/imcc/imcc.y"
     {
            /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(2) - (3)].s));
@@ -3283,7 +3290,7 @@
     break;
 
   case 17:
-#line 1180 "compilers/imcc/imcc.y"
+#line 1185 "compilers/imcc/imcc.y"
     {
           /* We'll want to store an entry while emitting instructions, so just
            * store annotation like it's an instruction. */
@@ -3294,7 +3301,7 @@
     break;
 
   case 18:
-#line 1192 "compilers/imcc/imcc.y"
+#line 1197 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
             CONTEXT(interp)->current_HLL =
@@ -3307,12 +3314,12 @@
     break;
 
   case 19:
-#line 1204 "compilers/imcc/imcc.y"
+#line 1209 "compilers/imcc/imcc.y"
     { pesky_global__is_def = 1; }
     break;
 
   case 20:
-#line 1205 "compilers/imcc/imcc.y"
+#line 1210 "compilers/imcc/imcc.y"
     {
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
              mem_sys_free((yyvsp[(4) - (6)].s));
@@ -3321,12 +3328,12 @@
     break;
 
   case 21:
-#line 1213 "compilers/imcc/imcc.y"
+#line 1218 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 22:
-#line 1214 "compilers/imcc/imcc.y"
+#line 1219 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(6) - (6)].s));
@@ -3335,12 +3342,12 @@
     break;
 
   case 23:
-#line 1220 "compilers/imcc/imcc.y"
+#line 1225 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 24:
-#line 1221 "compilers/imcc/imcc.y"
+#line 1226 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(3) - (6)].s));
@@ -3350,37 +3357,37 @@
     break;
 
   case 29:
-#line 1239 "compilers/imcc/imcc.y"
+#line 1244 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 30:
-#line 1240 "compilers/imcc/imcc.y"
+#line 1245 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 31:
-#line 1241 "compilers/imcc/imcc.y"
+#line 1246 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 32:
-#line 1242 "compilers/imcc/imcc.y"
+#line 1247 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 33:
-#line 1243 "compilers/imcc/imcc.y"
+#line 1248 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 36:
-#line 1248 "compilers/imcc/imcc.y"
+#line 1253 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 37:
-#line 1250 "compilers/imcc/imcc.y"
+#line 1255 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3390,7 +3397,7 @@
     break;
 
   case 38:
-#line 1257 "compilers/imcc/imcc.y"
+#line 1262 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
@@ -3398,7 +3405,7 @@
     break;
 
   case 39:
-#line 1262 "compilers/imcc/imcc.y"
+#line 1267 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3408,14 +3415,14 @@
     break;
 
   case 40:
-#line 1269 "compilers/imcc/imcc.y"
+#line 1274 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
          }
     break;
 
   case 41:
-#line 1273 "compilers/imcc/imcc.y"
+#line 1278 "compilers/imcc/imcc.y"
     {
            SymReg *r = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
            SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
@@ -3427,17 +3434,17 @@
     break;
 
   case 42:
-#line 1281 "compilers/imcc/imcc.y"
+#line 1286 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 44:
-#line 1289 "compilers/imcc/imcc.y"
+#line 1294 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 45:
-#line 1292 "compilers/imcc/imcc.y"
+#line 1297 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
                          imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3448,7 +3455,7 @@
     break;
 
   case 48:
-#line 1308 "compilers/imcc/imcc.y"
+#line 1313 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
            (yyval.i) = 0;
@@ -3463,7 +3470,7 @@
     break;
 
   case 49:
-#line 1323 "compilers/imcc/imcc.y"
+#line 1328 "compilers/imcc/imcc.y"
     {
             if (IMCC_INFO(interp)->in_slice)
                 IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3474,26 +3481,26 @@
     break;
 
   case 50:
-#line 1330 "compilers/imcc/imcc.y"
+#line 1335 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 51:
-#line 1335 "compilers/imcc/imcc.y"
+#line 1340 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
          }
     break;
 
   case 52:
-#line 1339 "compilers/imcc/imcc.y"
+#line 1344 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 53:
-#line 1343 "compilers/imcc/imcc.y"
+#line 1348 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t);
           if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) {
@@ -3504,22 +3511,22 @@
     break;
 
   case 54:
-#line 1351 "compilers/imcc/imcc.y"
+#line 1356 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 55:
-#line 1355 "compilers/imcc/imcc.y"
+#line 1360 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 56:
-#line 1356 "compilers/imcc/imcc.y"
+#line 1361 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 57:
-#line 1358 "compilers/imcc/imcc.y"
+#line 1363 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                  add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3532,17 +3539,17 @@
     break;
 
   case 58:
-#line 1370 "compilers/imcc/imcc.y"
+#line 1375 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 59:
-#line 1370 "compilers/imcc/imcc.y"
+#line 1375 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); pesky_global__is_def=0; }
     break;
 
   case 60:
-#line 1375 "compilers/imcc/imcc.y"
+#line 1380 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(3) - (3)].t) & VT_UNIQUE_REG)
                (yyval.sr) = mk_ident_ur(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
@@ -3554,12 +3561,12 @@
     break;
 
   case 61:
-#line 1388 "compilers/imcc/imcc.y"
+#line 1393 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 62:
-#line 1393 "compilers/imcc/imcc.y"
+#line 1398 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3568,7 +3575,7 @@
     break;
 
   case 63:
-#line 1399 "compilers/imcc/imcc.y"
+#line 1404 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3577,52 +3584,52 @@
     break;
 
   case 64:
-#line 1408 "compilers/imcc/imcc.y"
+#line 1413 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
-           IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
+           IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
          }
     break;
 
   case 65:
-#line 1414 "compilers/imcc/imcc.y"
+#line 1419 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
-           IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s);
+           IMCC_INFO(interp)->cur_unit->vtable_name      = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
          }
     break;
 
   case 66:
-#line 1423 "compilers/imcc/imcc.y"
+#line 1428 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
-           IMCC_INFO(interp)->cur_unit->is_method = 1;
+           IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
     break;
 
   case 67:
-#line 1429 "compilers/imcc/imcc.y"
+#line 1434 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
-           IMCC_INFO(interp)->cur_unit->is_method = 1;
+           IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
     break;
 
   case 68:
-#line 1438 "compilers/imcc/imcc.y"
+#line 1443 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
-           IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
+           IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
          }
     break;
 
   case 69:
-#line 1444 "compilers/imcc/imcc.y"
+#line 1449 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3631,7 +3638,7 @@
     break;
 
   case 70:
-#line 1453 "compilers/imcc/imcc.y"
+#line 1458 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
@@ -3639,7 +3646,7 @@
     break;
 
   case 71:
-#line 1461 "compilers/imcc/imcc.y"
+#line 1466 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
@@ -3647,7 +3654,7 @@
     break;
 
   case 72:
-#line 1466 "compilers/imcc/imcc.y"
+#line 1471 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3657,14 +3664,14 @@
     break;
 
   case 73:
-#line 1476 "compilers/imcc/imcc.y"
+#line 1481 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
          }
     break;
 
   case 74:
-#line 1480 "compilers/imcc/imcc.y"
+#line 1485 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
@@ -3672,7 +3679,7 @@
     break;
 
   case 75:
-#line 1485 "compilers/imcc/imcc.y"
+#line 1490 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
@@ -3680,27 +3687,27 @@
     break;
 
   case 76:
-#line 1492 "compilers/imcc/imcc.y"
+#line 1497 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 77:
-#line 1493 "compilers/imcc/imcc.y"
+#line 1498 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 78:
-#line 1494 "compilers/imcc/imcc.y"
+#line 1499 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 79:
-#line 1495 "compilers/imcc/imcc.y"
+#line 1500 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 80:
-#line 1497 "compilers/imcc/imcc.y"
+#line 1502 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3714,7 +3721,7 @@
     break;
 
   case 81:
-#line 1508 "compilers/imcc/imcc.y"
+#line 1513 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3728,12 +3735,12 @@
     break;
 
   case 82:
-#line 1518 "compilers/imcc/imcc.y"
+#line 1523 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 85:
-#line 1528 "compilers/imcc/imcc.y"
+#line 1533 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -3760,82 +3767,82 @@
     break;
 
   case 86:
-#line 1556 "compilers/imcc/imcc.y"
+#line 1561 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 87:
-#line 1560 "compilers/imcc/imcc.y"
+#line 1565 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 88:
-#line 1561 "compilers/imcc/imcc.y"
+#line 1566 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 89:
-#line 1565 "compilers/imcc/imcc.y"
+#line 1570 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 90:
-#line 1566 "compilers/imcc/imcc.y"
+#line 1571 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 91:
-#line 1570 "compilers/imcc/imcc.y"
+#line 1575 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 93:
-#line 1575 "compilers/imcc/imcc.y"
+#line 1580 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 94:
-#line 1576 "compilers/imcc/imcc.y"
+#line 1581 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 95:
-#line 1580 "compilers/imcc/imcc.y"
+#line 1585 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
   case 96:
-#line 1581 "compilers/imcc/imcc.y"
+#line 1586 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
   case 97:
-#line 1582 "compilers/imcc/imcc.y"
+#line 1587 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
   case 98:
-#line 1583 "compilers/imcc/imcc.y"
+#line 1588 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 99:
-#line 1584 "compilers/imcc/imcc.y"
+#line 1589 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 100:
-#line 1585 "compilers/imcc/imcc.y"
+#line 1590 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
   case 101:
-#line 1586 "compilers/imcc/imcc.y"
+#line 1591 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 109:
-#line 1598 "compilers/imcc/imcc.y"
+#line 1603 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3843,14 +3850,14 @@
     break;
 
   case 110:
-#line 1603 "compilers/imcc/imcc.y"
+#line 1608 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 111:
-#line 1607 "compilers/imcc/imcc.y"
+#line 1612 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
@@ -3858,21 +3865,21 @@
     break;
 
   case 112:
-#line 1612 "compilers/imcc/imcc.y"
+#line 1617 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 113:
-#line 1616 "compilers/imcc/imcc.y"
+#line 1621 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
     break;
 
   case 114:
-#line 1620 "compilers/imcc/imcc.y"
+#line 1625 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3880,7 +3887,7 @@
     break;
 
   case 115:
-#line 1625 "compilers/imcc/imcc.y"
+#line 1630 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3888,27 +3895,27 @@
     break;
 
   case 116:
-#line 1633 "compilers/imcc/imcc.y"
+#line 1638 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 117:
-#line 1634 "compilers/imcc/imcc.y"
+#line 1639 "compilers/imcc/imcc.y"
     { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
     break;
 
   case 118:
-#line 1638 "compilers/imcc/imcc.y"
+#line 1643 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 119:
-#line 1643 "compilers/imcc/imcc.y"
+#line 1648 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 120:
-#line 1645 "compilers/imcc/imcc.y"
+#line 1650 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -3916,17 +3923,17 @@
     break;
 
   case 121:
-#line 1652 "compilers/imcc/imcc.y"
+#line 1657 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 122:
-#line 1653 "compilers/imcc/imcc.y"
+#line 1658 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 123:
-#line 1654 "compilers/imcc/imcc.y"
+#line 1659 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -3941,62 +3948,62 @@
     break;
 
   case 124:
-#line 1668 "compilers/imcc/imcc.y"
+#line 1673 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 125:
-#line 1669 "compilers/imcc/imcc.y"
+#line 1674 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 126:
-#line 1673 "compilers/imcc/imcc.y"
+#line 1678 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
   case 127:
-#line 1674 "compilers/imcc/imcc.y"
+#line 1679 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 128:
-#line 1675 "compilers/imcc/imcc.y"
+#line 1680 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 129:
-#line 1676 "compilers/imcc/imcc.y"
+#line 1681 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
   case 130:
-#line 1677 "compilers/imcc/imcc.y"
+#line 1682 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
   case 131:
-#line 1678 "compilers/imcc/imcc.y"
+#line 1683 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 132:
-#line 1679 "compilers/imcc/imcc.y"
+#line 1684 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_UNIQUE_REG; }
     break;
 
   case 133:
-#line 1684 "compilers/imcc/imcc.y"
+#line 1689 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
   case 134:
-#line 1686 "compilers/imcc/imcc.y"
+#line 1691 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 135:
-#line 1688 "compilers/imcc/imcc.y"
+#line 1693 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
@@ -4004,22 +4011,22 @@
     break;
 
   case 136:
-#line 1695 "compilers/imcc/imcc.y"
+#line 1700 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
   case 137:
-#line 1697 "compilers/imcc/imcc.y"
+#line 1702 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 138:
-#line 1701 "compilers/imcc/imcc.y"
+#line 1706 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 139:
-#line 1703 "compilers/imcc/imcc.y"
+#line 1708 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4027,7 +4034,7 @@
     break;
 
   case 140:
-#line 1708 "compilers/imcc/imcc.y"
+#line 1713 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4035,12 +4042,12 @@
     break;
 
   case 141:
-#line 1715 "compilers/imcc/imcc.y"
+#line 1720 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 142:
-#line 1717 "compilers/imcc/imcc.y"
+#line 1722 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4048,7 +4055,7 @@
     break;
 
   case 143:
-#line 1722 "compilers/imcc/imcc.y"
+#line 1727 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4056,17 +4063,17 @@
     break;
 
   case 144:
-#line 1729 "compilers/imcc/imcc.y"
+#line 1734 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 145:
-#line 1733 "compilers/imcc/imcc.y"
+#line 1738 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 146:
-#line 1738 "compilers/imcc/imcc.y"
+#line 1743 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
@@ -4074,7 +4081,7 @@
     break;
 
   case 147:
-#line 1743 "compilers/imcc/imcc.y"
+#line 1748 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
@@ -4082,22 +4089,22 @@
     break;
 
   case 148:
-#line 1750 "compilers/imcc/imcc.y"
+#line 1755 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 149:
-#line 1751 "compilers/imcc/imcc.y"
+#line 1756 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 150:
-#line 1755 "compilers/imcc/imcc.y"
+#line 1760 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 151:
-#line 1757 "compilers/imcc/imcc.y"
+#line 1762 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4110,7 +4117,7 @@
     break;
 
   case 152:
-#line 1767 "compilers/imcc/imcc.y"
+#line 1772 "compilers/imcc/imcc.y"
     {
             SymReg *name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
             add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
@@ -4118,7 +4125,7 @@
     break;
 
   case 153:
-#line 1772 "compilers/imcc/imcc.y"
+#line 1777 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4131,7 +4138,7 @@
     break;
 
   case 154:
-#line 1782 "compilers/imcc/imcc.y"
+#line 1787 "compilers/imcc/imcc.y"
     {
            SymReg *name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
@@ -4139,59 +4146,59 @@
     break;
 
   case 157:
-#line 1803 "compilers/imcc/imcc.y"
+#line 1808 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 158:
-#line 1808 "compilers/imcc/imcc.y"
+#line 1813 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 159:
-#line 1809 "compilers/imcc/imcc.y"
+#line 1814 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 160:
-#line 1810 "compilers/imcc/imcc.y"
+#line 1815 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 161:
-#line 1811 "compilers/imcc/imcc.y"
+#line 1816 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 162:
-#line 1812 "compilers/imcc/imcc.y"
+#line 1817 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 163:
-#line 1813 "compilers/imcc/imcc.y"
+#line 1818 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 164:
-#line 1817 "compilers/imcc/imcc.y"
+#line 1822 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 168:
-#line 1828 "compilers/imcc/imcc.y"
+#line 1833 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
          }
     break;
 
   case 169:
-#line 1836 "compilers/imcc/imcc.y"
+#line 1841 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 170:
-#line 1838 "compilers/imcc/imcc.y"
+#line 1843 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -4202,7 +4209,7 @@
     break;
 
   case 171:
-#line 1849 "compilers/imcc/imcc.y"
+#line 1854 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -4211,7 +4218,7 @@
     break;
 
   case 172:
-#line 1856 "compilers/imcc/imcc.y"
+#line 1861 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -4220,7 +4227,7 @@
     break;
 
   case 173:
-#line 1865 "compilers/imcc/imcc.y"
+#line 1870 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
@@ -4230,22 +4237,22 @@
     break;
 
   case 174:
-#line 1874 "compilers/imcc/imcc.y"
+#line 1879 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 175:
-#line 1875 "compilers/imcc/imcc.y"
+#line 1880 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 178:
-#line 1882 "compilers/imcc/imcc.y"
+#line 1887 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 179:
-#line 1883 "compilers/imcc/imcc.y"
+#line 1888 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -4264,7 +4271,7 @@
     break;
 
   case 180:
-#line 1899 "compilers/imcc/imcc.y"
+#line 1904 "compilers/imcc/imcc.y"
     {
            SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
            set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
@@ -4272,7 +4279,7 @@
     break;
 
   case 181:
-#line 1904 "compilers/imcc/imcc.y"
+#line 1909 "compilers/imcc/imcc.y"
     {
            SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'U');
            set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
@@ -4280,12 +4287,12 @@
     break;
 
   case 182:
-#line 1908 "compilers/imcc/imcc.y"
+#line 1913 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 183:
-#line 1909 "compilers/imcc/imcc.y"
+#line 1914 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            pesky_global__is_def=0;
@@ -4294,12 +4301,12 @@
     break;
 
   case 185:
-#line 1916 "compilers/imcc/imcc.y"
+#line 1921 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 186:
-#line 1917 "compilers/imcc/imcc.y"
+#line 1922 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            pesky_global__is_def=0;
@@ -4308,7 +4315,7 @@
     break;
 
   case 187:
-#line 1923 "compilers/imcc/imcc.y"
+#line 1928 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
@@ -4317,14 +4324,14 @@
     break;
 
   case 188:
-#line 1929 "compilers/imcc/imcc.y"
+#line 1934 "compilers/imcc/imcc.y"
     {
             (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
          }
     break;
 
   case 189:
-#line 1933 "compilers/imcc/imcc.y"
+#line 1938 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4339,47 +4346,47 @@
     break;
 
   case 190:
-#line 1944 "compilers/imcc/imcc.y"
+#line 1949 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 191:
-#line 1945 "compilers/imcc/imcc.y"
+#line 1950 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 192:
-#line 1946 "compilers/imcc/imcc.y"
+#line 1951 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 195:
-#line 1949 "compilers/imcc/imcc.y"
+#line 1954 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 196:
-#line 1953 "compilers/imcc/imcc.y"
+#line 1958 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
   case 197:
-#line 1954 "compilers/imcc/imcc.y"
+#line 1959 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
   case 198:
-#line 1955 "compilers/imcc/imcc.y"
+#line 1960 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
   case 199:
-#line 1956 "compilers/imcc/imcc.y"
+#line 1961 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
   case 200:
-#line 1961 "compilers/imcc/imcc.y"
+#line 1966 "compilers/imcc/imcc.y"
     {
            /* there'd normally be a str_dup() here, but the lexer already
             * copied the string, so it's safe to use directly */
@@ -4392,37 +4399,37 @@
     break;
 
   case 201:
-#line 1974 "compilers/imcc/imcc.y"
+#line 1979 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
   case 202:
-#line 1976 "compilers/imcc/imcc.y"
+#line 1981 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  }
     break;
 
   case 203:
-#line 1978 "compilers/imcc/imcc.y"
+#line 1983 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));  }
     break;
 
   case 204:
-#line 1980 "compilers/imcc/imcc.y"
+#line 1985 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
   case 205:
-#line 1982 "compilers/imcc/imcc.y"
+#line 1987 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 206:
-#line 1987 "compilers/imcc/imcc.y"
+#line 1992 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); }
     break;
 
   case 207:
-#line 1990 "compilers/imcc/imcc.y"
+#line 1995 "compilers/imcc/imcc.y"
     {
            add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4431,14 +4438,14 @@
     break;
 
   case 208:
-#line 1996 "compilers/imcc/imcc.y"
+#line 2001 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
     break;
 
   case 209:
-#line 2000 "compilers/imcc/imcc.y"
+#line 2005 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4446,144 +4453,144 @@
     break;
 
   case 213:
-#line 2008 "compilers/imcc/imcc.y"
+#line 2013 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
     break;
 
   case 214:
-#line 2015 "compilers/imcc/imcc.y"
+#line 2020 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
   case 215:
-#line 2016 "compilers/imcc/imcc.y"
+#line 2021 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 216:
-#line 2017 "compilers/imcc/imcc.y"
+#line 2022 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
   case 217:
-#line 2021 "compilers/imcc/imcc.y"
+#line 2026 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 218:
-#line 2022 "compilers/imcc/imcc.y"
+#line 2027 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 219:
-#line 2023 "compilers/imcc/imcc.y"
+#line 2028 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 220:
-#line 2024 "compilers/imcc/imcc.y"
+#line 2029 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 221:
-#line 2025 "compilers/imcc/imcc.y"
+#line 2030 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 222:
-#line 2026 "compilers/imcc/imcc.y"
+#line 2031 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 223:
-#line 2027 "compilers/imcc/imcc.y"
+#line 2032 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
   case 224:
-#line 2028 "compilers/imcc/imcc.y"
+#line 2033 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 225:
-#line 2029 "compilers/imcc/imcc.y"
+#line 2034 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 226:
-#line 2030 "compilers/imcc/imcc.y"
+#line 2035 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
   case 227:
-#line 2031 "compilers/imcc/imcc.y"
+#line 2036 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 228:
-#line 2032 "compilers/imcc/imcc.y"
+#line 2037 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
   case 229:
-#line 2033 "compilers/imcc/imcc.y"
+#line 2038 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
   case 230:
-#line 2034 "compilers/imcc/imcc.y"
+#line 2039 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
   case 231:
-#line 2035 "compilers/imcc/imcc.y"
+#line 2040 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 232:
-#line 2036 "compilers/imcc/imcc.y"
+#line 2041 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 233:
-#line 2037 "compilers/imcc/imcc.y"
+#line 2042 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 234:
-#line 2038 "compilers/imcc/imcc.y"
+#line 2043 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
   case 235:
-#line 2039 "compilers/imcc/imcc.y"
+#line 2044 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
   case 236:
-#line 2040 "compilers/imcc/imcc.y"
+#line 2045 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
   case 237:
-#line 2041 "compilers/imcc/imcc.y"
+#line 2046 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 238:
-#line 2042 "compilers/imcc/imcc.y"
+#line 2047 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 239:
-#line 2043 "compilers/imcc/imcc.y"
+#line 2048 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 240:
-#line 2049 "compilers/imcc/imcc.y"
+#line 2054 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -4592,84 +4599,84 @@
     break;
 
   case 241:
-#line 2054 "compilers/imcc/imcc.y"
+#line 2059 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
   case 242:
-#line 2061 "compilers/imcc/imcc.y"
+#line 2066 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 243:
-#line 2067 "compilers/imcc/imcc.y"
+#line 2072 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 244:
-#line 2068 "compilers/imcc/imcc.y"
+#line 2073 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 245:
-#line 2069 "compilers/imcc/imcc.y"
+#line 2074 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 246:
-#line 2070 "compilers/imcc/imcc.y"
+#line 2075 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 247:
-#line 2071 "compilers/imcc/imcc.y"
+#line 2076 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 248:
-#line 2072 "compilers/imcc/imcc.y"
+#line 2077 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 249:
-#line 2073 "compilers/imcc/imcc.y"
+#line 2078 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 250:
-#line 2074 "compilers/imcc/imcc.y"
+#line 2079 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 251:
-#line 2075 "compilers/imcc/imcc.y"
+#line 2080 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 252:
-#line 2076 "compilers/imcc/imcc.y"
+#line 2081 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 253:
-#line 2077 "compilers/imcc/imcc.y"
+#line 2082 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 254:
-#line 2078 "compilers/imcc/imcc.y"
+#line 2083 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 255:
-#line 2079 "compilers/imcc/imcc.y"
+#line 2084 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 256:
-#line 2085 "compilers/imcc/imcc.y"
+#line 2090 "compilers/imcc/imcc.y"
     {
         (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
                       IMCC_INFO(interp) -> regs,
@@ -4680,22 +4687,22 @@
     break;
 
   case 257:
-#line 2095 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2100 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));       mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 258:
-#line 2096 "compilers/imcc/imcc.y"
+#line 2101 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 259:
-#line 2097 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2102 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));     mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 260:
-#line 2099 "compilers/imcc/imcc.y"
+#line 2104 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -4704,7 +4711,7 @@
     break;
 
   case 261:
-#line 2105 "compilers/imcc/imcc.y"
+#line 2110 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             char *name = (yyvsp[(3) - (3)].sr)->name;
@@ -4721,39 +4728,48 @@
     break;
 
   case 262:
-#line 2119 "compilers/imcc/imcc.y"
+#line 2124 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
-            (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
+            (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
             mem_sys_free((yyvsp[(3) - (3)].s));
          }
     break;
 
   case 263:
-#line 2124 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
+#line 2130 "compilers/imcc/imcc.y"
+    {
+            IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
+            (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
+            mem_sys_free((yyvsp[(3) - (3)].s));
+         }
     break;
 
   case 264:
-#line 2130 "compilers/imcc/imcc.y"
+#line 2135 "compilers/imcc/imcc.y"
+    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
+    break;
+
+  case 265:
+#line 2141 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
          }
     break;
 
-  case 265:
-#line 2134 "compilers/imcc/imcc.y"
+  case 266:
+#line 2145 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
-  case 266:
-#line 2138 "compilers/imcc/imcc.y"
+  case 267:
+#line 2149 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 267:
-#line 2140 "compilers/imcc/imcc.y"
+  case 268:
+#line 2151 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4765,8 +4781,8 @@
          }
     break;
 
-  case 268:
-#line 2150 "compilers/imcc/imcc.y"
+  case 269:
+#line 2161 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4778,8 +4794,8 @@
          }
     break;
 
-  case 269:
-#line 2160 "compilers/imcc/imcc.y"
+  case 270:
+#line 2171 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -4788,16 +4804,16 @@
          }
     break;
 
-  case 270:
-#line 2167 "compilers/imcc/imcc.y"
+  case 271:
+#line 2178 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 271:
-#line 2172 "compilers/imcc/imcc.y"
+  case 272:
+#line 2183 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -4806,48 +4822,48 @@
          }
     break;
 
-  case 272:
-#line 2181 "compilers/imcc/imcc.y"
+  case 273:
+#line 2192 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 273:
-#line 2185 "compilers/imcc/imcc.y"
+  case 274:
+#line 2196 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 274:
-#line 2186 "compilers/imcc/imcc.y"
+  case 275:
+#line 2197 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 275:
-#line 2190 "compilers/imcc/imcc.y"
+  case 276:
+#line 2201 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT; }
     break;
 
-  case 276:
-#line 2191 "compilers/imcc/imcc.y"
+  case 277:
+#line 2202 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
-  case 277:
-#line 2194 "compilers/imcc/imcc.y"
+  case 278:
+#line 2205 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 278:
-#line 2195 "compilers/imcc/imcc.y"
+  case 279:
+#line 2206 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
-  case 279:
-#line 2199 "compilers/imcc/imcc.y"
+  case 280:
+#line 2210 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 280:
-#line 2204 "compilers/imcc/imcc.y"
+  case 281:
+#line 2215 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4859,8 +4875,8 @@
          }
     break;
 
-  case 281:
-#line 2214 "compilers/imcc/imcc.y"
+  case 282:
+#line 2225 "compilers/imcc/imcc.y"
     {
             add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
             mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
@@ -4868,8 +4884,8 @@
          }
     break;
 
-  case 282:
-#line 2220 "compilers/imcc/imcc.y"
+  case 283:
+#line 2231 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4881,133 +4897,133 @@
          }
     break;
 
-  case 283:
-#line 2230 "compilers/imcc/imcc.y"
+  case 284:
+#line 2241 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
     break;
 
-  case 284:
-#line 2234 "compilers/imcc/imcc.y"
+  case 285:
+#line 2245 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 285:
-#line 2238 "compilers/imcc/imcc.y"
+  case 286:
+#line 2249 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 286:
-#line 2239 "compilers/imcc/imcc.y"
+  case 287:
+#line 2250 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 287:
-#line 2244 "compilers/imcc/imcc.y"
+  case 288:
+#line 2255 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
-  case 288:
-#line 2248 "compilers/imcc/imcc.y"
+  case 289:
+#line 2259 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 289:
-#line 2252 "compilers/imcc/imcc.y"
+  case 290:
+#line 2263 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
-  case 290:
-#line 2259 "compilers/imcc/imcc.y"
+  case 291:
+#line 2270 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
-  case 291:
-#line 2263 "compilers/imcc/imcc.y"
+  case 292:
+#line 2274 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
-  case 292:
-#line 2267 "compilers/imcc/imcc.y"
+  case 293:
+#line 2278 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 293:
-#line 2273 "compilers/imcc/imcc.y"
+  case 294:
+#line 2284 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 294:
-#line 2274 "compilers/imcc/imcc.y"
+  case 295:
+#line 2285 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 295:
-#line 2278 "compilers/imcc/imcc.y"
+  case 296:
+#line 2289 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
-  case 296:
-#line 2279 "compilers/imcc/imcc.y"
+  case 297:
+#line 2290 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
-  case 297:
-#line 2280 "compilers/imcc/imcc.y"
+  case 298:
+#line 2291 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
-  case 298:
-#line 2281 "compilers/imcc/imcc.y"
+  case 299:
+#line 2292 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
-  case 299:
-#line 2282 "compilers/imcc/imcc.y"
+  case 300:
+#line 2293 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
-  case 300:
-#line 2283 "compilers/imcc/imcc.y"
+  case 301:
+#line 2294 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
-  case 303:
-#line 2292 "compilers/imcc/imcc.y"
+  case 304:
+#line 2303 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
-  case 304:
-#line 2293 "compilers/imcc/imcc.y"
+  case 305:
+#line 2304 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 305:
-#line 2297 "compilers/imcc/imcc.y"
+  case 306:
+#line 2308 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
-  case 307:
-#line 2302 "compilers/imcc/imcc.y"
+  case 308:
+#line 2313 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 308:
-#line 2304 "compilers/imcc/imcc.y"
+  case 309:
+#line 2315 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -5016,54 +5032,54 @@
          }
     break;
 
-  case 309:
-#line 2311 "compilers/imcc/imcc.y"
+  case 310:
+#line 2322 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
          }
     break;
 
-  case 311:
-#line 2318 "compilers/imcc/imcc.y"
+  case 312:
+#line 2329 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 312:
-#line 2319 "compilers/imcc/imcc.y"
+  case 313:
+#line 2330 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 313:
-#line 2323 "compilers/imcc/imcc.y"
+  case 314:
+#line 2334 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 314:
-#line 2324 "compilers/imcc/imcc.y"
+  case 315:
+#line 2335 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 315:
-#line 2328 "compilers/imcc/imcc.y"
+  case 316:
+#line 2339 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 316:
-#line 2329 "compilers/imcc/imcc.y"
+  case 317:
+#line 2340 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 321:
-#line 2343 "compilers/imcc/imcc.y"
+  case 322:
+#line 2354 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 322:
-#line 2348 "compilers/imcc/imcc.y"
+  case 323:
+#line 2359 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5071,16 +5087,16 @@
          }
     break;
 
-  case 323:
-#line 2356 "compilers/imcc/imcc.y"
+  case 324:
+#line 2367 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 324:
-#line 2361 "compilers/imcc/imcc.y"
+  case 325:
+#line 2372 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5088,21 +5104,21 @@
          }
     break;
 
-  case 325:
-#line 2369 "compilers/imcc/imcc.y"
+  case 326:
+#line 2380 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 326:
-#line 2371 "compilers/imcc/imcc.y"
+  case 327:
+#line 2382 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
          }
     break;
 
-  case 327:
-#line 2379 "compilers/imcc/imcc.y"
+  case 328:
+#line 2390 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->in_slice)
                (yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE;
@@ -5110,54 +5126,54 @@
          }
     break;
 
-  case 328:
-#line 2387 "compilers/imcc/imcc.y"
+  case 329:
+#line 2398 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
-  case 329:
-#line 2388 "compilers/imcc/imcc.y"
+  case 330:
+#line 2399 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
-  case 330:
-#line 2389 "compilers/imcc/imcc.y"
+  case 331:
+#line 2400 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
-  case 331:
-#line 2390 "compilers/imcc/imcc.y"
+  case 332:
+#line 2401 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
-  case 332:
-#line 2391 "compilers/imcc/imcc.y"
+  case 333:
+#line 2402 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 333:
-#line 2395 "compilers/imcc/imcc.y"
+  case 334:
+#line 2406 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 334:
-#line 2396 "compilers/imcc/imcc.y"
+  case 335:
+#line 2407 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 335:
-#line 2397 "compilers/imcc/imcc.y"
+  case 336:
+#line 2408 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 336:
-#line 2398 "compilers/imcc/imcc.y"
+  case 337:
+#line 2409 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 5150 "compilers/imcc/imcparser.c"
+#line 5166 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5371,7 +5387,7 @@
 }
 
 
-#line 2404 "compilers/imcc/imcc.y"
+#line 2415 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: trunk/compilers/imcc/imcparser.h
==============================================================================
--- trunk/compilers/imcc/imcparser.h	Fri Jun  5 23:43:47 2009	(r39416)
+++ trunk/compilers/imcc/imcparser.h	Sat Jun  6 00:16:18 2009	(r39417)
@@ -295,7 +295,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 1030 "compilers/imcc/imcc.y"
+#line 1035 "compilers/imcc/imcc.y"
 {
     IdList * idlist;
     int t;

Modified: trunk/compilers/imcc/pcc.c
==============================================================================
--- trunk/compilers/imcc/pcc.c	Fri Jun  5 23:43:47 2009	(r39416)
+++ trunk/compilers/imcc/pcc.c	Sat Jun  6 00:16:18 2009	(r39417)
@@ -816,7 +816,12 @@
             if (!(arg->type == VTIDENTIFIER
             ||    arg->type == VTPASM
             ||    arg->type == VTREG))
-                meth = mk_const(interp, arg->name, 'S');
+                if (arg->type & VT_ENCODED) {
+                    meth = mk_const(interp, arg->name, 'U');
+                }
+                else {
+                    meth = mk_const(interp, arg->name, 'S');
+                }
         }
     }
 

Modified: trunk/t/compilers/imcc/syn/pcc.t
==============================================================================
--- trunk/t/compilers/imcc/syn/pcc.t	Fri Jun  5 23:43:47 2009	(r39416)
+++ trunk/t/compilers/imcc/syn/pcc.t	Sat Jun  6 00:16:18 2009	(r39417)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2001-2005, Parrot Foundation.
+# Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
 use Parrot::Config;
-use Parrot::Test tests => 22;
+use Parrot::Test tests => 23;
 
 ##############################
 # Parrot Calling Conventions
@@ -542,6 +542,27 @@
 
 pir_output_is( $too_many_params, "didn't segfault\n", "calling a sub with way too many params" );
 
+pir_output_is( <<'CODE', <<'OUT', 'Unicode allowed in method names, TT #730' );
+.sub 'main' :main
+    $P0 = newclass 'Foo'
+    $P1 = new $P0
+    $S0 = unicode:"foo\x{b1}"
+    $P1.$S0(1)
+    $P1.unicode:"foo\x{b1}"(2)
+.end
+
+.namespace ['Foo']
+.sub unicode:"foo\x{b1}" :method
+    .param int count
+    print 'ok '
+    print count
+    say ' - Unicode method names allowed'
+.end
+CODE
+ok 1 - Unicode method names allowed
+ok 2 - Unicode method names allowed
+OUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4


More information about the parrot-commits mailing list