[svn:parrot] r36159 - in trunk: compilers/imcc src/gc t/op

chromatic at svn.parrot.org chromatic at svn.parrot.org
Thu Jan 29 22:29:35 UTC 2009


Author: chromatic
Date: Thu Jan 29 21:04:34 2009
New Revision: 36159
URL: https://trac.parrot.org/parrot/log/branches?rev=36159

Log:
[IMCC] Allowed string registers as names for named parameters in PCC; see
Rakudo's RT #62730 for discussion.

Modified:
   trunk/compilers/imcc/imcc.y
   trunk/compilers/imcc/imcparser.c
   trunk/compilers/imcc/imcparser.h
   trunk/src/gc/mark_sweep.c
   trunk/t/op/calling.t

Modified: trunk/compilers/imcc/imcc.y
==============================================================================
--- trunk/compilers/imcc/imcc.y	Thu Jan 29 21:03:49 2009	(r36158)
+++ trunk/compilers/imcc/imcc.y	Thu Jan 29 21:04:34 2009	(r36159)
@@ -52,6 +52,16 @@
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call);
 
+static void add_pcc_named_arg_var(PARROT_INTERP,
+    ARGMOD(SymReg *cur_call),
+    ARGIN(SymReg *name),
+    ARGIN(SymReg *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*cur_call);
+
 static void add_pcc_named_param(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGIN(const char *name),
@@ -233,6 +243,11 @@
     || PARROT_ASSERT_ARG(cur_call) \
     || PARROT_ASSERT_ARG(name) \
     || PARROT_ASSERT_ARG(value)
+#define ASSERT_ARGS_add_pcc_named_param_var __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(cur_call) \
+    || PARROT_ASSERT_ARG(name) \
+    || PARROT_ASSERT_ARG(value)
 #define ASSERT_ARGS_add_pcc_named_result __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(cur_call) \
@@ -397,7 +412,7 @@
     if (ascii) {
         /* strip delimiters */
         name                   = str_dup(constant + 1);
-        name[strlen(name) - 1] = '\0';
+        name[strlen(name) - 1] = 0;
     }
     else {
         name = str_dup(constant);
@@ -440,7 +455,7 @@
     char   *unquoted_name = str_dup(name + 1);
     size_t  name_length   = strlen(unquoted_name) - 1;
 
-    unquoted_name[name_length] = '\0';
+    unquoted_name[name_length] = 0;
 
     if (left->type == VTADDRESS) {      /* IDENTIFIER */
         if (IMCC_INFO(interp)->state->pasm_file) {
@@ -455,7 +470,7 @@
     if (ascii) {
         /* strip delimiters */
         const_name                         = str_dup(constant + 1);
-        const_name[strlen(const_name) - 1] = '\0';
+        const_name[strlen(const_name) - 1] = 0;
     }
     else {
         const_name = str_dup(constant);
@@ -632,7 +647,7 @@
     /* name is a quoted sub name */
     SymReg *r;
     char *name_copy                  = str_dup(name + 1);
-    name_copy[strlen(name_copy) - 1] = '\0';
+    name_copy[strlen(name_copy) - 1] = 0;
 
     r = mk_sub_address(interp, name_copy);
     mem_sys_free(name_copy);
@@ -721,6 +736,16 @@
 }
 
 static void
+add_pcc_named_arg_var(PARROT_INTERP, ARGMOD(SymReg *cur_call),
+    ARGIN(SymReg *name), ARGIN(SymReg *value))
+{
+    ASSERT_ARGS(add_pcc_named_param_var)
+    name->type |= VT_NAMED;
+    add_pcc_arg(cur_call, name);
+    add_pcc_arg(cur_call, value);
+}
+
+static void
 add_pcc_named_result(PARROT_INTERP, ARGMOD(SymReg *cur_call), ARGIN(const char *name),
         ARGIN(SymReg *value))
 {
@@ -1679,7 +1704,10 @@
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
            IMCC_INFO(interp)->cur_call = NULL;
          }
-   | GOTO label_op { $$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, $2); }
+   | GOTO label_op
+         {
+            $$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, $2);
+         }
    | PARROT_OP vars
          {
            $$ = INS(interp,
@@ -1913,6 +1941,11 @@
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, $3, $5);
            mem_sys_free($3);
          }
+   | var ADV_ARROW var
+         {
+           $$ = 0;
+           add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, $1, $3);
+         }
    | STRINGC ADV_ARROW var
          {
            $$ = 0;

Modified: trunk/compilers/imcc/imcparser.c
==============================================================================
--- trunk/compilers/imcc/imcparser.c	Thu Jan 29 21:03:49 2009	(r36158)
+++ trunk/compilers/imcc/imcparser.c	Thu Jan 29 21:04:34 2009	(r36159)
@@ -378,6 +378,16 @@
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call);
 
+static void add_pcc_named_arg_var(PARROT_INTERP,
+    ARGMOD(SymReg *cur_call),
+    ARGIN(SymReg *name),
+    ARGIN(SymReg *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*cur_call);
+
 static void add_pcc_named_param(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGIN(const char *name),
@@ -559,6 +569,11 @@
     || PARROT_ASSERT_ARG(cur_call) \
     || PARROT_ASSERT_ARG(name) \
     || PARROT_ASSERT_ARG(value)
+#define ASSERT_ARGS_add_pcc_named_param_var __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(cur_call) \
+    || PARROT_ASSERT_ARG(name) \
+    || PARROT_ASSERT_ARG(value)
 #define ASSERT_ARGS_add_pcc_named_result __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(cur_call) \
@@ -723,7 +738,7 @@
     if (ascii) {
         /* strip delimiters */
         name                   = str_dup(constant + 1);
-        name[strlen(name) - 1] = '\0';
+        name[strlen(name) - 1] = 0;
     }
     else {
         name = str_dup(constant);
@@ -766,7 +781,7 @@
     char   *unquoted_name = str_dup(name + 1);
     size_t  name_length   = strlen(unquoted_name) - 1;
 
-    unquoted_name[name_length] = '\0';
+    unquoted_name[name_length] = 0;
 
     if (left->type == VTADDRESS) {      /* IDENTIFIER */
         if (IMCC_INFO(interp)->state->pasm_file) {
@@ -781,7 +796,7 @@
     if (ascii) {
         /* strip delimiters */
         const_name                         = str_dup(constant + 1);
-        const_name[strlen(const_name) - 1] = '\0';
+        const_name[strlen(const_name) - 1] = 0;
     }
     else {
         const_name = str_dup(constant);
@@ -958,7 +973,7 @@
     /* name is a quoted sub name */
     SymReg *r;
     char *name_copy                  = str_dup(name + 1);
-    name_copy[strlen(name_copy) - 1] = '\0';
+    name_copy[strlen(name_copy) - 1] = 0;
 
     r = mk_sub_address(interp, name_copy);
     mem_sys_free(name_copy);
@@ -1047,6 +1062,16 @@
 }
 
 static void
+add_pcc_named_arg_var(PARROT_INTERP, ARGMOD(SymReg *cur_call),
+    ARGIN(SymReg *name), ARGIN(SymReg *value))
+{
+    ASSERT_ARGS(add_pcc_named_param_var)
+    name->type |= VT_NAMED;
+    add_pcc_arg(cur_call, name);
+    add_pcc_arg(cur_call, value);
+}
+
+static void
 add_pcc_named_result(PARROT_INTERP, ARGMOD(SymReg *cur_call), ARGIN(const char *name),
         ARGIN(SymReg *value))
 {
@@ -1128,7 +1153,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 785 "compilers/imcc/imcc.y"
+#line 810 "compilers/imcc/imcc.y"
 {
     IdList * idlist;
     int t;
@@ -1137,7 +1162,7 @@
     Instruction *i;
 }
 /* Line 187 of yacc.c.  */
-#line 1130 "compilers/imcc/imcparser.c"
+#line 1155 "compilers/imcc/imcparser.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -1150,7 +1175,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 1143 "compilers/imcc/imcparser.c"
+#line 1168 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1365,16 +1390,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  33
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   666
+#define YYLAST   641
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  139
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  126
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  333
+#define YYNRULES  334
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  536
+#define YYNSTATES  539
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -1458,13 +1483,13 @@
      681,   687,   691,   693,   695,   697,   699,   701,   703,   705,
      707,   709,   711,   713,   715,   717,   722,   724,   726,   728,
      730,   734,   738,   742,   743,   749,   750,   754,   756,   762,
-     766,   769,   770,   773,   775,   777,   782,   785,   789,   795,
-     797,   801,   802,   804,   806,   813,   819,   824,   829,   836,
-     842,   844,   846,   848,   850,   852,   854,   856,   858,   860,
-     862,   863,   865,   869,   871,   873,   878,   882,   884,   886,
-     888,   890,   892,   894,   896,   898,   900,   902,   904,   905,
-     908,   909,   912,   914,   918,   920,   922,   924,   926,   928,
-     930,   932,   934,   936
+     766,   770,   773,   774,   777,   779,   781,   786,   789,   793,
+     799,   801,   805,   806,   808,   810,   817,   823,   828,   833,
+     840,   846,   848,   850,   852,   854,   856,   858,   860,   862,
+     864,   866,   867,   869,   873,   875,   877,   882,   886,   888,
+     890,   892,   894,   896,   898,   900,   902,   904,   906,   908,
+     909,   912,   913,   916,   918,   922,   924,   926,   928,   930,
+     932,   934,   936,   938,   940
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -1546,63 +1571,64 @@
      248,   121,   253,    -1,   248,   121,   113,    -1,   248,   121,
      248,    -1,    -1,   234,   236,   126,   237,   127,    -1,    -1,
      237,    72,   238,    -1,   238,    -1,   237,    72,   113,    22,
-     256,    -1,   113,    22,   256,    -1,   256,   239,    -1,    -1,
-     239,   240,    -1,    17,    -1,    21,    -1,    21,   126,   113,
-     127,    -1,   248,   195,    -1,   242,    72,   241,    -1,   242,
-      72,   113,    22,   248,    -1,   241,    -1,   113,    22,   248,
-      -1,    -1,   245,    -1,   244,    -1,    13,   256,   247,   256,
-      10,   254,    -1,    13,    14,   256,    10,   254,    -1,    13,
-     256,   246,   254,    -1,    12,   256,   246,   254,    -1,    12,
-     256,   247,   256,    10,   254,    -1,    12,    14,   256,    10,
-     254,    -1,    72,    -1,    10,    -1,    57,    -1,    58,    -1,
-      59,    -1,    60,    -1,    61,    -1,    62,    -1,   118,    -1,
-     263,    -1,    -1,   250,    -1,   250,    72,   251,    -1,   251,
-      -1,   255,    -1,   248,   124,   257,   125,    -1,   124,   259,
-     125,    -1,   253,    -1,   113,    -1,   116,    -1,   109,    -1,
-     117,    -1,   109,    -1,   117,    -1,   254,    -1,   256,    -1,
-     248,    -1,   264,    -1,    -1,   258,   261,    -1,    -1,   260,
-     261,    -1,   262,    -1,   261,   138,   262,    -1,   256,    -1,
-     105,    -1,   106,    -1,   107,    -1,   108,    -1,   110,    -1,
-     114,    -1,   115,    -1,   113,    -1,   116,    -1
+     256,    -1,   256,    22,   256,    -1,   113,    22,   256,    -1,
+     256,   239,    -1,    -1,   239,   240,    -1,    17,    -1,    21,
+      -1,    21,   126,   113,   127,    -1,   248,   195,    -1,   242,
+      72,   241,    -1,   242,    72,   113,    22,   248,    -1,   241,
+      -1,   113,    22,   248,    -1,    -1,   245,    -1,   244,    -1,
+      13,   256,   247,   256,    10,   254,    -1,    13,    14,   256,
+      10,   254,    -1,    13,   256,   246,   254,    -1,    12,   256,
+     246,   254,    -1,    12,   256,   247,   256,    10,   254,    -1,
+      12,    14,   256,    10,   254,    -1,    72,    -1,    10,    -1,
+      57,    -1,    58,    -1,    59,    -1,    60,    -1,    61,    -1,
+      62,    -1,   118,    -1,   263,    -1,    -1,   250,    -1,   250,
+      72,   251,    -1,   251,    -1,   255,    -1,   248,   124,   257,
+     125,    -1,   124,   259,   125,    -1,   253,    -1,   113,    -1,
+     116,    -1,   109,    -1,   117,    -1,   109,    -1,   117,    -1,
+     254,    -1,   256,    -1,   248,    -1,   264,    -1,    -1,   258,
+     261,    -1,    -1,   260,   261,    -1,   262,    -1,   261,   138,
+     262,    -1,   256,    -1,   105,    -1,   106,    -1,   107,    -1,
+     108,    -1,   110,    -1,   114,    -1,   115,    -1,   113,    -1,
+     116,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   880,   880,   884,   885,   889,   890,   891,   897,   903,
-     904,   905,   906,   910,   911,   920,   925,   932,   944,   953,
-     971,   971,   980,   980,   986,   986,   993,   994,   998,   999,
-    1003,  1004,  1005,  1006,  1007,  1008,  1009,  1012,  1012,  1021,
-    1020,  1032,  1036,  1044,  1048,  1052,  1052,  1064,  1066,  1070,
-    1085,  1093,  1098,  1102,  1106,  1097,  1118,  1119,  1120,  1133,
-    1133,  1137,  1151,  1155,  1161,  1170,  1176,  1185,  1191,  1200,
-    1206,  1215,  1223,  1228,  1239,  1242,  1247,  1255,  1256,  1257,
-    1258,  1259,  1270,  1281,  1284,  1286,  1291,  1290,  1323,  1324,
-    1328,  1329,  1333,  1334,  1338,  1339,  1343,  1344,  1345,  1346,
-    1347,  1348,  1349,  1350,  1351,  1352,  1353,  1354,  1355,  1356,
-    1360,  1365,  1369,  1374,  1378,  1382,  1387,  1396,  1397,  1401,
-    1406,  1407,  1415,  1416,  1416,  1431,  1432,  1436,  1437,  1438,
-    1439,  1440,  1441,  1446,  1446,  1449,  1457,  1457,  1463,  1464,
-    1469,  1477,  1478,  1483,  1491,  1495,  1500,  1499,  1512,  1513,
-    1517,  1518,  1528,  1532,  1542,  1550,  1551,  1563,  1567,  1569,
-    1570,  1571,  1572,  1573,  1577,  1578,  1582,  1583,  1587,  1596,
-    1597,  1608,  1615,  1624,  1634,  1635,  1640,  1641,  1642,  1642,
-    1658,  1662,  1662,  1669,  1670,  1670,  1676,  1682,  1683,  1695,
-    1696,  1697,  1698,  1699,  1700,  1704,  1705,  1706,  1707,  1711,
-    1724,  1726,  1728,  1730,  1732,  1737,  1740,  1747,  1746,  1755,
-    1756,  1757,  1758,  1766,  1767,  1768,  1772,  1773,  1774,  1775,
-    1776,  1777,  1778,  1779,  1780,  1781,  1782,  1783,  1784,  1785,
-    1786,  1787,  1788,  1789,  1790,  1791,  1792,  1793,  1794,  1800,
-    1799,  1811,  1818,  1819,  1820,  1821,  1822,  1823,  1824,  1825,
-    1826,  1827,  1828,  1829,  1830,  1835,  1846,  1847,  1848,  1849,
-    1855,  1869,  1875,  1881,  1880,  1889,  1890,  1900,  1910,  1916,
-    1925,  1929,  1930,  1934,  1935,  1938,  1942,  1946,  1956,  1961,
-    1971,  1976,  1980,  1981,  1985,  1989,  1993,  2000,  2004,  2008,
-    2015,  2016,  2020,  2021,  2022,  2023,  2024,  2025,  2029,  2030,
-    2034,  2035,  2039,  2040,  2044,  2045,  2052,  2059,  2060,  2061,
-    2065,  2066,  2070,  2071,  2075,  2076,  2080,  2081,  2085,  2085,
-    2098,  2098,  2111,  2112,  2120,  2129,  2130,  2131,  2132,  2133,
-    2137,  2138,  2139,  2140
+       0,   905,   905,   909,   910,   914,   915,   916,   922,   928,
+     929,   930,   931,   935,   936,   945,   950,   957,   969,   978,
+     996,   996,  1005,  1005,  1011,  1011,  1018,  1019,  1023,  1024,
+    1028,  1029,  1030,  1031,  1032,  1033,  1034,  1037,  1037,  1046,
+    1045,  1057,  1061,  1069,  1073,  1077,  1077,  1089,  1091,  1095,
+    1110,  1118,  1123,  1127,  1131,  1122,  1143,  1144,  1145,  1158,
+    1158,  1162,  1176,  1180,  1186,  1195,  1201,  1210,  1216,  1225,
+    1231,  1240,  1248,  1253,  1264,  1267,  1272,  1280,  1281,  1282,
+    1283,  1284,  1295,  1306,  1309,  1311,  1316,  1315,  1348,  1349,
+    1353,  1354,  1358,  1359,  1363,  1364,  1368,  1369,  1370,  1371,
+    1372,  1373,  1374,  1375,  1376,  1377,  1378,  1379,  1380,  1381,
+    1385,  1390,  1394,  1399,  1403,  1407,  1412,  1421,  1422,  1426,
+    1431,  1432,  1440,  1441,  1441,  1456,  1457,  1461,  1462,  1463,
+    1464,  1465,  1466,  1471,  1471,  1474,  1482,  1482,  1488,  1489,
+    1494,  1502,  1503,  1508,  1516,  1520,  1525,  1524,  1537,  1538,
+    1542,  1543,  1553,  1557,  1567,  1575,  1576,  1588,  1592,  1594,
+    1595,  1596,  1597,  1598,  1602,  1603,  1607,  1608,  1612,  1621,
+    1622,  1633,  1640,  1649,  1659,  1660,  1665,  1666,  1667,  1667,
+    1683,  1687,  1687,  1694,  1695,  1695,  1701,  1707,  1711,  1723,
+    1724,  1725,  1726,  1727,  1728,  1732,  1733,  1734,  1735,  1739,
+    1752,  1754,  1756,  1758,  1760,  1765,  1768,  1775,  1774,  1783,
+    1784,  1785,  1786,  1794,  1795,  1796,  1800,  1801,  1802,  1803,
+    1804,  1805,  1806,  1807,  1808,  1809,  1810,  1811,  1812,  1813,
+    1814,  1815,  1816,  1817,  1818,  1819,  1820,  1821,  1822,  1828,
+    1827,  1839,  1846,  1847,  1848,  1849,  1850,  1851,  1852,  1853,
+    1854,  1855,  1856,  1857,  1858,  1863,  1874,  1875,  1876,  1877,
+    1883,  1897,  1903,  1909,  1908,  1917,  1918,  1928,  1938,  1944,
+    1949,  1958,  1962,  1963,  1967,  1968,  1971,  1975,  1979,  1989,
+    1994,  2004,  2009,  2013,  2014,  2018,  2022,  2026,  2033,  2037,
+    2041,  2048,  2049,  2053,  2054,  2055,  2056,  2057,  2058,  2062,
+    2063,  2067,  2068,  2072,  2073,  2077,  2078,  2085,  2092,  2093,
+    2094,  2098,  2099,  2103,  2104,  2108,  2109,  2113,  2114,  2118,
+    2118,  2131,  2131,  2144,  2145,  2153,  2162,  2163,  2164,  2165,
+    2166,  2170,  2171,  2172,  2173
 };
 #endif
 
@@ -1711,13 +1737,13 @@
      229,   231,   232,   232,   232,   232,   232,   232,   232,   232,
      232,   232,   232,   232,   232,   233,   234,   234,   234,   234,
      234,   234,   234,   236,   235,   237,   237,   237,   237,   237,
-     238,   239,   239,   240,   240,   240,   241,   242,   242,   242,
-     242,   242,   243,   243,   244,   244,   244,   245,   245,   245,
-     246,   246,   247,   247,   247,   247,   247,   247,   248,   248,
-     249,   249,   250,   250,   251,   251,   251,   252,   252,   252,
-     253,   253,   254,   254,   255,   255,   256,   256,   258,   257,
-     260,   259,   261,   261,   262,   263,   263,   263,   263,   263,
-     264,   264,   264,   264
+     237,   238,   239,   239,   240,   240,   240,   241,   242,   242,
+     242,   242,   242,   243,   243,   244,   244,   244,   245,   245,
+     245,   246,   246,   247,   247,   247,   247,   247,   247,   248,
+     248,   249,   249,   250,   250,   251,   251,   251,   252,   252,
+     252,   253,   253,   254,   254,   255,   255,   256,   256,   258,
+     257,   260,   259,   261,   261,   262,   263,   263,   263,   263,
+     263,   264,   264,   264,   264
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1750,13 +1776,13 @@
        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,
-       2,     0,     2,     1,     1,     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
+       3,     2,     0,     2,     1,     1,     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
@@ -1766,58 +1792,58 @@
 {
        0,    12,     0,     0,     0,     0,     0,    52,    20,     0,
       45,     0,     0,     2,     3,    10,    11,     0,     6,     8,
-       5,     7,    18,     0,     0,     0,   318,     0,     0,     0,
+       5,     7,    18,     0,     0,     0,   319,     0,     0,     0,
        0,   164,     9,     1,     4,    13,     0,     0,    16,    51,
-       0,     0,    49,   310,   308,   309,   311,    53,   307,   195,
+       0,     0,    49,   311,   309,   310,   312,    53,   308,   195,
      196,   197,   198,     0,    14,    22,   168,     0,    33,    32,
       36,    35,   164,    28,     0,    34,    37,   165,   167,    19,
-       0,    50,   325,   326,   327,   328,   329,   332,   330,   331,
-     333,   298,   316,   324,   319,   322,   299,   317,    92,     0,
+       0,    50,   326,   327,   328,   329,   330,   333,   331,   332,
+     334,   299,   317,   325,   320,   323,   300,   318,    92,     0,
        0,     0,    31,    29,    46,     0,     0,    39,     0,     0,
      166,    15,     0,    98,    96,    97,    99,   100,    67,   101,
        0,   102,     0,    65,     0,    72,    69,   103,   104,   105,
      106,   107,   108,   109,     0,    93,    94,     0,     0,     0,
-      41,     0,    92,    30,   300,   323,     0,     0,    74,     0,
-       0,     0,     0,    54,    95,    21,   312,   313,   314,     0,
-     315,     0,     0,     0,   320,    38,   316,    44,   301,   303,
-     304,    26,    27,     0,     0,     0,    77,    78,    80,    79,
-      81,    82,   318,     0,    76,     0,     0,     0,     0,    56,
-       0,     0,    42,    40,     0,     0,   318,     0,    68,    64,
+      41,     0,    92,    30,   301,   324,     0,     0,    74,     0,
+       0,     0,     0,    54,    95,    21,   313,   314,   315,     0,
+     316,     0,     0,     0,   321,    38,   317,    44,   302,   304,
+     305,    26,    27,     0,     0,     0,    77,    78,    80,    79,
+      81,    82,   319,     0,    76,     0,     0,     0,     0,    56,
+       0,     0,    42,    40,     0,     0,   319,     0,    68,    64,
       63,     0,     0,    62,    66,    71,    73,    70,    57,   157,
-      23,    25,   306,   321,     0,   302,    83,    75,    59,     0,
+      23,    25,   307,   322,     0,   303,    83,    75,    59,     0,
        0,   161,   160,   162,   163,     0,     0,   157,     0,   155,
-     305,     0,     0,   159,    58,    55,   156,     0,   194,   158,
+     306,     0,     0,   159,    58,    55,   156,     0,   194,   158,
       60,     0,     0,   170,     0,     0,     0,     0,   178,     0,
      181,   184,   148,     0,   149,   239,     0,     0,     0,   256,
-     257,   258,   300,   207,   183,   191,   192,   193,   135,     0,
-       0,   176,   209,   210,   211,   263,   190,   177,   283,   282,
+     257,   258,   301,   207,   183,   191,   192,   193,   135,     0,
+       0,   176,   209,   210,   211,   263,   190,   177,   284,   283,
      259,   125,    17,   187,     0,     0,     0,     0,   189,     0,
        0,     0,     0,   186,   259,     0,    86,   133,   136,   188,
-     281,   146,   169,     0,   242,   243,   244,   245,   248,   249,
-     250,   251,   247,   246,   252,   253,   254,     0,     0,   318,
-       0,    61,     0,   291,   292,   293,   294,   295,   296,   297,
-     290,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     281,   117,   138,   141,     0,   279,     0,   125,   150,   265,
-     261,   262,   260,   212,   332,   333,   300,     0,   213,   214,
-     215,     0,   206,   316,   200,     0,   241,   127,   128,   129,
-     130,   132,   126,     0,   287,     0,     0,   286,     0,   174,
+     282,   146,   169,     0,   242,   243,   244,   245,   248,   249,
+     250,   251,   247,   246,   252,   253,   254,     0,     0,   319,
+       0,    61,     0,   292,   293,   294,   295,   296,   297,   298,
+     291,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     282,   117,   138,   141,     0,   280,     0,   125,   150,   265,
+     261,   262,   260,   212,   333,   334,   301,     0,   213,   214,
+     215,     0,   206,   317,   200,     0,   241,   127,   128,   129,
+     130,   132,   126,     0,   288,     0,     0,   287,     0,   174,
      179,   171,   180,     0,     0,     0,    90,     0,     0,     0,
-       0,     0,   276,   332,     0,   151,   271,   332,     0,   267,
-     255,   199,     0,   201,   221,   230,   231,   235,   224,   225,
-     226,   227,   228,   229,   222,   232,   233,   234,   223,   318,
-     238,   216,   217,   218,   219,   220,   236,   237,     0,     0,
-       0,   289,     0,   285,     0,   175,   173,     0,     0,     0,
-     240,     0,     0,     0,     0,   139,     0,   134,     0,   142,
-       0,   137,     0,   280,     0,   277,     0,     0,     0,   147,
-     270,     0,     0,   264,   318,     0,   202,     0,     0,   288,
-     284,   172,   182,   185,   119,     0,     0,     0,     0,    88,
-     118,   271,   140,   271,   143,     0,     0,   152,   332,   153,
-     273,   274,   272,   269,   332,   266,     0,   203,   204,   131,
-      91,     0,     0,     0,     0,   120,     0,   144,   145,   278,
-     265,     0,     0,     0,   205,   111,     0,   112,   114,     0,
-     113,     0,     0,    89,     0,   154,     0,   268,     0,     0,
-       0,   123,     0,    87,     0,   208,   275,   110,   116,   115,
-       0,   125,   121,     0,   122,   124
+       0,     0,   277,   333,     0,   151,   272,   333,     0,   267,
+     272,   255,   199,     0,   201,   221,   230,   231,   235,   224,
+     225,   226,   227,   228,   229,   222,   232,   233,   234,   223,
+     319,   238,   216,   217,   218,   219,   220,   236,   237,     0,
+       0,     0,   290,     0,   286,     0,   175,   173,     0,     0,
+       0,   240,     0,     0,     0,     0,   139,     0,   134,     0,
+     142,     0,   137,     0,   281,     0,   278,     0,     0,     0,
+     147,   271,     0,     0,   264,     0,   319,     0,   202,     0,
+       0,   289,   285,   172,   182,   185,   119,     0,     0,     0,
+       0,    88,   118,   272,   140,   272,   143,     0,     0,   152,
+     333,   153,   274,   275,   273,   270,   333,   266,   269,     0,
+     203,   204,   131,    91,     0,     0,     0,     0,   120,     0,
+     144,   145,   279,   265,     0,     0,     0,   205,   111,     0,
+     112,   114,     0,   113,     0,     0,    89,     0,   154,     0,
+     268,     0,     0,     0,   123,     0,    87,     0,   208,   276,
+     110,   116,   115,     0,   125,   121,     0,   122,   124
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1827,94 +1853,94 @@
       61,    90,    91,   163,    62,    63,    98,    99,   132,   155,
       19,    31,    64,    20,    27,    21,    28,    88,   179,   199,
      215,   221,   230,   117,   118,   119,   120,   121,   122,   123,
-     173,   174,   216,   255,   331,   495,   433,   124,   125,   126,
-     469,   376,   434,   512,   524,   530,   311,   362,   256,   332,
-     257,   333,   377,   378,   438,   442,   258,   338,   259,   384,
-     217,   218,   219,    66,    67,    68,   229,   370,   371,   426,
-     260,   279,   281,   282,    53,   392,   261,   290,   351,   418,
+     173,   174,   216,   255,   331,   498,   434,   124,   125,   126,
+     471,   376,   435,   515,   527,   533,   311,   362,   256,   332,
+     257,   333,   377,   378,   439,   443,   258,   338,   259,   384,
+     217,   218,   219,    66,    67,    68,   229,   370,   371,   427,
+     260,   279,   281,   282,    53,   393,   261,   290,   351,   419,
      262,   285,   263,   310,   264,   265,   266,   293,   388,   389,
-     450,   482,   335,   336,   267,   268,   269,   321,   322,    82,
+     451,   484,   335,   336,   267,   268,   269,   321,   322,    82,
      157,   158,   159,    47,    48,   148,   160,   150,    40,    41,
      184,   185,    84,    85,    86,    87
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -422
+#define YYPACT_NINF -403
 static const yytype_int16 yypact[] =
 {
-     358,  -422,   -75,   -19,   -67,     1,   -71,  -422,  -422,    20,
-    -422,   145,   150,   358,  -422,  -422,  -422,   155,  -422,  -422,
-    -422,  -422,  -422,    44,    96,   171,    51,   179,     2,   156,
-     184,   110,  -422,  -422,  -422,  -422,    76,    79,  -422,  -422,
-      68,   469,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,    89,  -422,    86,  -422,   199,  -422,  -422,
-    -422,  -422,   216,  -422,   101,  -422,    54,   113,  -422,  -422,
-     202,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,    87,  -422,  -422,  -422,   436,   103,
-     114,   111,  -422,  -422,  -422,   469,   118,  -422,   223,   115,
-    -422,  -422,   469,  -422,  -422,  -422,  -422,  -422,   108,  -422,
-     112,  -422,   117,   120,   122,   131,   132,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,   233,   436,  -422,   104,   455,   455,
-    -422,   167,   436,  -422,   389,  -422,    42,    12,   127,   140,
-     146,    42,    42,  -422,  -422,  -422,  -422,  -422,  -422,   121,
-    -422,   143,   135,   166,  -422,  -422,   152,  -422,   198,  -422,
-    -422,  -422,  -422,   147,   151,   158,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,   -60,  -422,   159,   168,   173,   175,   275,
-      42,    42,  -422,  -422,   157,   469,  -422,   389,  -422,  -422,
-    -422,   169,   127,  -422,  -422,  -422,  -422,  -422,  -422,    34,
-    -422,  -422,  -422,    87,   178,  -422,  -422,  -422,  -422,   170,
-     308,  -422,  -422,  -422,  -422,   310,   246,    37,    21,  -422,
-    -422,   156,   243,  -422,  -422,  -422,  -422,   318,   242,  -422,
-    -422,   215,   104,  -422,   -69,   266,   314,   469,  -422,   212,
-     -49,  -422,  -422,   183,  -422,  -422,   322,   335,   336,  -422,
-    -422,  -422,   389,  -422,  -422,  -422,  -422,  -422,  -422,   217,
-     340,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-     397,  -422,  -422,  -422,   469,   203,   469,   203,  -422,   156,
-     274,   156,   156,  -422,   232,   228,  -422,  -422,  -422,  -422,
-     432,  -422,  -422,   230,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,   224,    56,  -422,
-     469,     8,   347,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,   -69,   469,   351,   -69,   469,   254,   346,   260,   261,
-     432,  -422,  -422,  -422,   353,  -422,   -56,  -422,   483,   497,
-    -422,  -422,  -422,  -422,   252,   262,   389,   277,  -422,  -422,
-    -422,   469,  -422,   -85,   422,   268,  -422,  -422,  -422,  -422,
-     270,  -422,  -422,   -69,  -422,   377,   -69,  -422,   384,   296,
-     326,  -422,  -422,   278,   279,   -55,    -3,    17,     7,   346,
-     539,   281,     8,   378,   -54,  -422,  -422,   383,   -52,  -422,
-    -422,  -422,   284,  -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,   469,   286,
-     299,  -422,   -69,  -422,   -69,  -422,  -422,   254,   104,   104,
-    -422,   469,   469,    22,   409,  -422,   469,  -422,   410,  -422,
-     469,  -422,   411,  -422,   395,  -422,   183,   469,   511,  -422,
-     119,   469,   525,  -422,  -422,   293,  -422,   469,   304,  -422,
-    -422,  -422,  -422,  -422,  -422,   419,   469,   469,   548,   113,
-    -422,  -422,  -422,  -422,  -422,   346,   315,  -422,   425,  -422,
-    -422,   323,  -422,  -422,   426,  -422,   325,  -422,  -422,  -422,
-    -422,     5,   453,     9,    11,  -422,   454,   119,   119,  -422,
-     497,   469,   350,   469,  -422,  -422,   469,  -422,  -422,   469,
-    -422,   469,    15,  -422,   -48,  -422,   344,  -422,   463,   470,
-     471,  -422,   346,  -422,   472,  -422,  -422,  -422,  -422,  -422,
-     156,  -422,  -422,   254,     8,  -422
+      40,  -403,   -98,   -70,   -63,   -49,   -34,  -403,  -403,   -17,
+    -403,    98,   130,    40,  -403,  -403,  -403,   128,  -403,  -403,
+    -403,  -403,  -403,    29,    78,   155,    66,   177,   170,   176,
+     189,   104,  -403,  -403,  -403,  -403,    85,    91,  -403,  -403,
+      88,   435,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,   108,  -403,   107,  -403,   217,  -403,  -403,
+    -403,  -403,   151,  -403,   132,  -403,    23,   135,  -403,  -403,
+     230,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,    94,  -403,  -403,  -403,   425,   116,
+     137,   139,  -403,  -403,  -403,   435,   141,  -403,   252,   143,
+    -403,  -403,   435,  -403,  -403,  -403,  -403,  -403,   140,  -403,
+     142,  -403,   154,   156,   159,   164,   165,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,   257,   425,  -403,   131,   421,   421,
+    -403,   193,   425,  -403,   369,  -403,    86,   -21,   101,   183,
+     195,    86,    86,  -403,  -403,  -403,  -403,  -403,  -403,   149,
+    -403,   188,   203,   214,  -403,  -403,   191,  -403,   253,  -403,
+    -403,  -403,  -403,   197,   205,   212,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,   -55,  -403,   215,   221,   222,   223,   318,
+      86,    86,  -403,  -403,   218,   435,  -403,   369,  -403,  -403,
+    -403,   226,   101,  -403,  -403,  -403,  -403,  -403,  -403,    20,
+    -403,  -403,  -403,    94,   227,  -403,  -403,  -403,  -403,   240,
+     326,  -403,  -403,  -403,  -403,   355,   288,    27,    10,  -403,
+    -403,   176,   290,  -403,  -403,  -403,  -403,   363,   228,  -403,
+    -403,   260,   131,  -403,   -51,   213,   250,   435,  -403,   271,
+      54,  -403,  -403,   343,  -403,  -403,   390,   395,   397,  -403,
+    -403,  -403,   369,  -403,  -403,  -403,  -403,  -403,  -403,   276,
+     399,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+     334,  -403,  -403,  -403,   435,   216,   435,   216,  -403,   176,
+     332,   176,   176,  -403,   285,   283,  -403,  -403,  -403,  -403,
+     505,  -403,  -403,   284,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,   280,    56,  -403,
+     435,    13,   403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,   -51,   435,   405,   -51,   435,   307,   194,   310,   311,
+     505,  -403,  -403,  -403,   400,  -403,   -30,  -403,   449,   463,
+    -403,  -403,  -403,  -403,   295,   299,   369,   317,  -403,  -403,
+    -403,   435,  -403,   -42,   373,   312,  -403,  -403,  -403,  -403,
+     313,  -403,  -403,   -51,  -403,   426,   -51,  -403,   428,   339,
+     374,  -403,  -403,   322,   324,   -22,    -3,     3,     5,   194,
+     514,   331,    13,   438,     6,  -403,  -403,   442,    14,  -403,
+     444,  -403,  -403,   345,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,   435,
+     344,   357,  -403,   -51,  -403,   -51,  -403,  -403,   307,   131,
+     131,  -403,   435,   435,   106,   468,  -403,   435,  -403,   476,
+    -403,   435,  -403,   484,  -403,   459,  -403,   343,   435,   477,
+    -403,   171,   435,   491,  -403,   435,  -403,   364,  -403,   435,
+     365,  -403,  -403,  -403,  -403,  -403,  -403,   486,   435,   435,
+     523,   135,  -403,  -403,  -403,  -403,  -403,   194,   368,  -403,
+     469,  -403,  -403,   370,  -403,  -403,   478,  -403,  -403,   376,
+    -403,  -403,  -403,  -403,     8,   494,     9,    52,  -403,   495,
+     171,   171,  -403,   463,   435,   389,   435,  -403,  -403,   435,
+    -403,  -403,   435,  -403,   435,   146,  -403,    22,  -403,   406,
+    -403,   518,   528,   540,  -403,   194,  -403,   542,  -403,  -403,
+    -403,  -403,  -403,   176,  -403,  -403,   307,    13,  -403
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -422,  -422,  -422,   464,    18,  -162,  -422,  -422,  -422,  -422,
-     257,  -422,  -422,    10,  -422,   424,  -422,  -422,  -422,   141,
-    -422,  -422,  -422,    28,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,   297,  -422,  -422,  -422,  -422,  -422,   356,  -422,   375,
-    -422,  -422,  -422,  -422,  -422,  -422,  -330,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,   291,   283,  -422,   -66,  -422,  -422,  -421,  -422,
-    -422,  -422,  -422,  -422,  -219,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,    63,  -213,  -422,    14,  -328,
-    -397,  -422,   130,   181,  -422,  -422,  -422,   235,   238,  -130,
-     264,  -422,   330,  -422,   226,  -220,   -36,   -41,  -167,  -422,
-    -422,  -422,   334,   439,  -422,  -124
+    -403,  -403,  -403,   534,     7,  -144,  -403,  -403,  -403,  -403,
+     330,  -403,  -403,    38,  -403,   490,  -403,  -403,  -403,   220,
+    -403,  -403,  -403,    37,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,   380,  -403,  -403,  -403,  -403,  -403,   429,  -403,   450,
+    -403,  -403,  -403,  -403,  -403,  -403,  -331,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,   371,   342,  -403,   -66,  -403,  -403,  -402,  -403,
+    -403,  -403,  -403,  -403,  -219,  -403,  -403,  -403,  -403,  -403,
+    -403,  -403,  -403,  -403,  -403,   127,  -213,  -403,    77,  -328,
+    -366,  -403,   206,   259,  -403,  -403,  -403,   323,   325,  -130,
+     351,  -403,   407,  -403,   301,  -218,    83,   -41,  -167,  -403,
+    -403,  -403,   431,   512,  -403,  -124
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1924,144 +1950,140 @@
 #define YYTABLE_NINF -260
 static const yytype_int16 yytable[] =
 {
-      83,   100,   231,   145,   156,   191,   461,   382,   431,   505,
-     385,   439,   192,   508,   273,   510,   380,   380,   448,   204,
-     452,   435,   227,   440,   452,  -164,   357,   358,   359,   360,
-     283,  -164,   436,  -164,  -164,  -164,   307,   213,    22,   208,
-     146,  -259,     4,     5,   521,     4,     5,    24,   147,    60,
-    -164,  -164,  -164,    26,   130,   213,  -164,   156,   -43,    65,
-     326,    83,   328,   329,   -24,   -22,   209,   193,    95,   209,
-     343,   381,   430,   449,   497,   453,   498,   506,   522,   525,
-      60,   509,   432,   511,    96,  -164,  -164,  -164,  -164,   441,
-      65,   523,   149,   151,    23,   352,  -164,   437,   270,   466,
-    -164,   364,  -164,   464,   367,   467,   468,   -84,   272,   361,
-     -85,    43,   535,   284,    25,    44,     2,     3,    45,    46,
-     479,   164,   156,    56,   485,   165,  -164,  -164,  -164,  -164,
-    -164,  -164,    97,    30,  -164,     6,   480,  -164,  -164,  -164,
-     481,    55,   355,   421,    83,   210,   423,  -164,   210,    32,
-      33,   177,   178,   211,   212,   161,   211,   212,   162,    35,
-     337,    72,    73,    74,    75,   249,    76,    36,    37,   344,
-      78,    79,   345,   346,    81,    38,    39,   341,   353,   166,
-     167,   168,   169,    42,   347,   348,   349,   350,    54,    69,
-     200,   201,    70,    71,   275,   277,   278,   372,    89,   -24,
-     337,   534,   459,    92,   460,    94,   101,     9,    49,    50,
-      51,    52,    56,   313,   -47,    56,   156,    77,    78,    79,
-      80,    57,     2,     3,   129,   102,   127,   133,   128,    58,
-      59,   131,   134,   312,   136,   323,   170,   143,   137,   152,
-     171,     6,   455,   138,   180,   182,   139,    55,   140,   443,
-     337,   172,   234,   175,   235,   236,   237,   141,   142,   176,
-     314,   315,   316,   317,   318,   319,   181,   354,   183,   356,
-     187,   238,   239,   240,   188,   320,   186,   241,   189,   198,
-     274,   365,   202,   222,   368,   190,   194,   486,    72,    73,
-      74,    75,   249,    76,   206,   195,   250,   386,   386,   251,
-     196,    81,   197,   220,   462,   463,   242,   243,   244,   245,
-     393,   533,   223,     9,   224,   232,   284,   246,    56,   225,
-     -48,   247,   233,   248,   271,   280,   286,    57,   276,    72,
-      73,    74,    75,    43,    76,    58,    59,   340,   494,   287,
-     288,    46,    81,   291,   292,   499,   327,    72,    73,    74,
-      75,   249,    76,   307,   330,   250,   339,   363,   251,   252,
-      81,   366,     1,   369,     2,     3,     4,     5,   253,   373,
-     374,    72,    73,    74,    75,   379,    76,   456,  -257,    77,
-      78,    79,    80,     6,    81,     7,   391,   422,  -258,     8,
-     386,   465,   531,   419,   424,   471,   420,   425,   427,   473,
-     447,   428,   429,   496,   446,   451,   477,   386,   454,   457,
-     483,   386,   458,   470,   472,   474,   488,   475,   487,    72,
-      73,    74,    75,   490,    76,   491,   492,    77,    78,    79,
-      80,   489,    81,   294,   295,   296,   297,   298,   299,   300,
-     301,   500,   302,   303,   304,   305,   306,   501,   503,   502,
-     504,    72,    73,    74,    75,     9,    76,   507,   513,   386,
-     515,    10,   517,   516,    81,   518,   394,   527,   519,    11,
-     520,   526,   395,   396,   528,   529,   532,    34,   397,   398,
-     399,   400,   401,   402,   403,   254,    93,   390,   153,   207,
-     404,   405,   406,   407,    72,    73,    74,    75,   146,    76,
-     144,   228,    77,    78,    79,    80,   147,    81,   226,   476,
-     445,   375,   324,   154,   514,   325,   289,   205,   307,   203,
-     308,   309,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   342,   114,   115,   116,    72,    73,    74,
-      75,   135,    76,     0,   408,   334,   409,     0,     0,     0,
-      81,     0,   410,   411,   412,   413,   414,   415,   416,   417,
-      72,    73,    74,    75,   146,    76,     0,     0,    77,    78,
-      79,    80,   147,    81,    72,    73,    74,    75,     0,    76,
-       0,     0,    77,    78,    79,    80,     0,    81,    72,    73,
-      74,    75,     0,    76,     0,     0,   383,    78,    79,    80,
-       0,    81,    72,    73,    74,    75,     0,    76,     0,     0,
-     387,    78,    79,    80,     0,    81,    72,    73,    74,    75,
-       0,    76,     0,     0,   478,    78,    79,    80,     0,    81,
-      72,    73,    74,    75,     0,    76,     0,     0,   484,    78,
-      79,    80,     0,    81,    72,    73,    74,    75,     0,    76,
-       0,     0,   444,    72,    73,    74,    75,    81,    76,     0,
-       0,   493,     0,     0,     0,     0,    81
+      83,   100,   231,   145,   156,   191,   382,   436,   432,   440,
+     385,   227,   508,   511,  -164,    22,   273,   192,   437,   204,
+    -164,   441,  -164,  -164,  -164,   208,   463,   -43,     4,     5,
+     283,   357,   358,   359,   360,     4,     5,    95,    60,  -164,
+    -164,  -164,   380,    23,     1,  -164,     2,     3,     4,     5,
+     380,    24,   209,    96,   130,   213,   513,   156,   146,   209,
+     326,    83,   328,   329,    25,     6,   147,     7,    65,    60,
+     343,     8,   193,   213,  -164,  -164,  -164,  -164,   449,   307,
+     509,   512,   433,   438,  -259,  -164,   453,   442,   164,  -164,
+      26,  -164,   165,   -84,   453,   352,    30,   381,   270,    65,
+     -85,    97,    32,   364,   466,   431,   367,   500,   272,   501,
+       2,     3,    56,   284,   361,  -164,  -164,  -164,  -164,  -164,
+    -164,   481,   156,  -164,   514,   487,  -164,  -164,  -164,     6,
+      33,   210,    35,   450,   538,    55,  -164,     9,   210,   211,
+     212,   454,   355,    10,    83,   422,   211,   212,   424,   528,
+      37,    11,    36,   166,   167,   168,   169,     2,     3,    38,
+     337,    72,    73,    74,    75,   249,    76,   -24,   -22,   344,
+      78,    79,   345,   346,    81,   524,     6,   341,   353,   177,
+     178,    42,    55,   468,   347,   348,   349,   350,   482,   469,
+     470,    39,   483,    54,   275,   277,   278,   372,    69,   161,
+     337,     9,   162,   537,    70,   461,    56,   462,   -47,   525,
+     170,   149,   151,    71,   171,    57,   156,    89,   200,   201,
+     -24,    92,   526,    58,    59,   172,   313,   274,    49,    50,
+      51,    52,   102,   312,   101,   323,    94,    56,   234,   127,
+     235,   236,   237,   457,    77,    78,    79,    80,     9,   444,
+     337,   128,   129,    56,   131,   -48,   133,   238,   239,   240,
+     134,   143,    57,   241,   276,   152,   136,   354,   137,   356,
+      58,    59,   180,   314,   315,   316,   317,   318,   319,    43,
+     138,   365,   139,    44,   368,   140,    45,    46,   320,   489,
+     141,   142,   242,   243,   244,   245,   175,   386,   390,    72,
+      73,    74,    75,   246,    76,   464,   465,   247,   176,   248,
+     394,   181,    81,   182,   536,   186,   183,   284,    72,    73,
+      74,    75,   198,    76,   188,   187,    77,    78,    79,    80,
+     223,    81,   189,    72,    73,    74,    75,   249,    76,   190,
+     497,   250,   194,   202,   251,   252,    81,   502,   195,   196,
+     197,   206,   220,   222,   253,    72,    73,    74,    75,   224,
+      76,   225,   232,    77,    78,    79,    80,   233,    81,   271,
+     294,   295,   296,   297,   298,   299,   300,   301,   458,   302,
+     303,   304,   305,   306,   280,    72,    73,    74,    75,    43,
+      76,   386,   467,   340,   286,   534,   473,    46,    81,   287,
+     475,   288,   291,   292,   327,   499,   307,   479,   386,   330,
+     339,   485,   386,   363,   488,   366,   369,   395,   491,   373,
+     374,  -257,   379,   396,   397,  -258,   392,   494,   495,   398,
+     399,   400,   401,   402,   403,   404,   423,   420,   425,   421,
+     426,   405,   406,   407,   408,   429,   428,   430,    72,    73,
+      74,    75,   249,    76,   447,   307,   250,   308,   309,   251,
+     448,    81,   390,   518,   452,   520,   455,   459,   521,   456,
+     460,   522,   472,   523,    72,    73,    74,    75,   146,    76,
+     474,   477,    77,    78,    79,    80,   147,    81,   476,   490,
+     493,   504,   492,   154,   503,   409,   505,   410,   510,   516,
+     506,   507,   519,   411,   412,   413,   414,   415,   416,   417,
+     418,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   530,   114,   115,   116,    72,    73,    74,    75,
+     146,    76,   531,   529,    77,    78,    79,    80,   147,    81,
+      72,    73,    74,    75,   532,    76,   535,    34,    77,    78,
+      79,    80,    93,    81,    72,    73,    74,    75,   254,    76,
+     228,   153,   383,    78,    79,    80,   391,    81,    72,    73,
+      74,    75,   207,    76,   478,   144,   387,    78,    79,    80,
+     517,    81,    72,    73,    74,    75,   446,    76,   226,   375,
+     480,    78,    79,    80,   205,    81,    72,    73,    74,    75,
+     324,    76,   325,   289,   486,    78,    79,    80,   342,    81,
+      72,    73,    74,    75,   135,    76,   203,     0,   334,    72,
+      73,    74,    75,    81,    76,     0,     0,   445,    72,    73,
+      74,    75,    81,    76,     0,     0,   496,     0,     0,     0,
+       0,    81
 };
 
 static const yytype_int16 yycheck[] =
 {
-      41,    67,   221,   127,   134,   172,   427,   337,    11,     4,
-     338,     4,    72,     4,   234,     4,    72,    72,    72,   186,
-      72,     4,     1,    16,    72,     4,    18,    19,    20,    21,
-     243,    10,    15,    12,    13,    14,   121,   199,   113,     5,
-     109,   126,     8,     9,    29,     8,     9,   114,   117,    31,
-      29,    30,    31,   124,    95,   217,    35,   187,     4,    31,
-     279,   102,   281,   282,   113,   114,    32,   127,    14,    32,
-      14,   127,   127,   127,   471,   127,   473,    72,    63,   127,
-      62,    72,    85,    72,    30,    64,    65,    66,    67,    82,
-      62,    76,   128,   129,   113,   308,    75,    80,   228,    77,
-      79,   321,    81,   431,   324,    83,    84,    73,   232,   101,
-      73,   109,   533,   243,   113,   113,     6,     7,   116,   117,
-     448,   109,   252,   102,   452,   113,   105,   106,   107,   108,
-     109,   110,    78,   113,   113,    25,    17,   116,   117,   118,
-      21,    31,   309,   363,   185,   111,   366,   126,   111,     4,
-       0,   141,   142,   119,   120,   113,   119,   120,   116,     4,
-     290,   105,   106,   107,   108,   109,   110,   123,    72,   113,
-     114,   115,   116,   117,   118,     4,   125,   307,   308,    52,
-      53,    54,    55,     4,   128,   129,   130,   131,     4,   113,
-     180,   181,   113,   125,   235,   236,   237,   327,   109,   113,
-     330,   531,   422,     4,   424,   104,     4,    97,    52,    53,
-      54,    55,   102,    10,   104,   102,   346,   113,   114,   115,
-     116,   111,     6,     7,   113,   138,   123,     4,   114,   119,
-     120,   113,   117,   274,   126,   276,   109,     4,   126,    72,
-     113,    25,   409,   126,   123,   110,   126,    31,   126,   379,
-     380,   124,    10,   113,    12,    13,    14,   126,   126,   113,
-      57,    58,    59,    60,    61,    62,   123,   308,   102,   310,
-      72,    29,    30,    31,   127,    72,   124,    35,   127,     4,
-      14,   322,   125,   113,   325,   127,   127,   454,   105,   106,
-     107,   108,   109,   110,   125,   127,   113,   338,   339,   116,
-     127,   118,   127,   125,   428,   429,    64,    65,    66,    67,
-     351,   530,     4,    97,     4,    72,   446,    75,   102,    73,
-     104,    79,     4,    81,   109,   113,     4,   111,    14,   105,
-     106,   107,   108,   109,   110,   119,   120,   113,   468,     4,
-       4,   117,   118,   126,     4,   475,    72,   105,   106,   107,
-     108,   109,   110,   121,   126,   113,   126,    10,   116,   117,
-     118,    10,     4,   109,     6,     7,     8,     9,   126,   109,
-     109,   105,   106,   107,   108,    22,   110,   418,   126,   113,
-     114,   115,   116,    25,   118,    27,   109,    10,   126,    31,
-     431,   432,   522,   125,    10,   436,   126,   101,    72,   440,
-      22,   123,   123,   469,   123,    22,   447,   448,   124,   123,
-     451,   452,   113,     4,     4,     4,   457,    22,   125,   105,
-     106,   107,   108,     4,   110,   466,   467,   113,   114,   115,
-     116,   127,   118,    36,    37,    38,    39,    40,    41,    42,
-      43,   126,    45,    46,    47,    48,    49,    22,    22,   126,
-     125,   105,   106,   107,   108,    97,   110,     4,     4,   500,
-     501,   103,   503,   113,   118,   506,    44,     4,   509,   111,
-     511,   127,    50,    51,     4,     4,     4,    13,    56,    57,
-      58,    59,    60,    61,    62,   228,    62,   346,   132,   192,
-      68,    69,    70,    71,   105,   106,   107,   108,   109,   110,
-     125,   218,   113,   114,   115,   116,   117,   118,   217,   446,
-     380,   330,   277,   124,   500,   277,   252,   187,   121,   185,
-     123,   124,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,   307,    98,    99,   100,   105,   106,   107,
-     108,   102,   110,    -1,   122,   113,   124,    -1,    -1,    -1,
-     118,    -1,   130,   131,   132,   133,   134,   135,   136,   137,
-     105,   106,   107,   108,   109,   110,    -1,    -1,   113,   114,
-     115,   116,   117,   118,   105,   106,   107,   108,    -1,   110,
-      -1,    -1,   113,   114,   115,   116,    -1,   118,   105,   106,
-     107,   108,    -1,   110,    -1,    -1,   113,   114,   115,   116,
-      -1,   118,   105,   106,   107,   108,    -1,   110,    -1,    -1,
-     113,   114,   115,   116,    -1,   118,   105,   106,   107,   108,
-      -1,   110,    -1,    -1,   113,   114,   115,   116,    -1,   118,
-     105,   106,   107,   108,    -1,   110,    -1,    -1,   113,   114,
-     115,   116,    -1,   118,   105,   106,   107,   108,    -1,   110,
-      -1,    -1,   113,   105,   106,   107,   108,   118,   110,    -1,
-      -1,   113,    -1,    -1,    -1,    -1,   118
+      41,    67,   221,   127,   134,   172,   337,     4,    11,     4,
+     338,     1,     4,     4,     4,   113,   234,    72,    15,   186,
+      10,    16,    12,    13,    14,     5,   428,     4,     8,     9,
+     243,    18,    19,    20,    21,     8,     9,    14,    31,    29,
+      30,    31,    72,   113,     4,    35,     6,     7,     8,     9,
+      72,   114,    32,    30,    95,   199,     4,   187,   109,    32,
+     279,   102,   281,   282,   113,    25,   117,    27,    31,    62,
+      14,    31,   127,   217,    64,    65,    66,    67,    72,   121,
+      72,    72,    85,    80,   126,    75,    72,    82,   109,    79,
+     124,    81,   113,    73,    72,   308,   113,   127,   228,    62,
+      73,    78,     4,   321,   432,   127,   324,   473,   232,   475,
+       6,     7,   102,   243,   101,   105,   106,   107,   108,   109,
+     110,   449,   252,   113,    72,   453,   116,   117,   118,    25,
+       0,   111,     4,   127,   536,    31,   126,    97,   111,   119,
+     120,   127,   309,   103,   185,   363,   119,   120,   366,   127,
+      72,   111,   123,    52,    53,    54,    55,     6,     7,     4,
+     290,   105,   106,   107,   108,   109,   110,   113,   114,   113,
+     114,   115,   116,   117,   118,    29,    25,   307,   308,   141,
+     142,     4,    31,    77,   128,   129,   130,   131,    17,    83,
+      84,   125,    21,     4,   235,   236,   237,   327,   113,   113,
+     330,    97,   116,   534,   113,   423,   102,   425,   104,    63,
+     109,   128,   129,   125,   113,   111,   346,   109,   180,   181,
+     113,     4,    76,   119,   120,   124,    10,    14,    52,    53,
+      54,    55,   138,   274,     4,   276,   104,   102,    10,   123,
+      12,    13,    14,   410,   113,   114,   115,   116,    97,   379,
+     380,   114,   113,   102,   113,   104,     4,    29,    30,    31,
+     117,     4,   111,    35,    14,    72,   126,   308,   126,   310,
+     119,   120,   123,    57,    58,    59,    60,    61,    62,   109,
+     126,   322,   126,   113,   325,   126,   116,   117,    72,   456,
+     126,   126,    64,    65,    66,    67,   113,   338,   339,   105,
+     106,   107,   108,    75,   110,   429,   430,    79,   113,    81,
+     351,   123,   118,   110,   533,   124,   102,   447,   105,   106,
+     107,   108,     4,   110,   127,    72,   113,   114,   115,   116,
+       4,   118,   127,   105,   106,   107,   108,   109,   110,   127,
+     470,   113,   127,   125,   116,   117,   118,   477,   127,   127,
+     127,   125,   125,   113,   126,   105,   106,   107,   108,     4,
+     110,    73,    72,   113,   114,   115,   116,     4,   118,   109,
+      36,    37,    38,    39,    40,    41,    42,    43,   419,    45,
+      46,    47,    48,    49,   113,   105,   106,   107,   108,   109,
+     110,   432,   433,   113,     4,   525,   437,   117,   118,     4,
+     441,     4,   126,     4,    72,   471,   121,   448,   449,   126,
+     126,   452,   453,    10,   455,    10,   109,    44,   459,   109,
+     109,   126,    22,    50,    51,   126,   109,   468,   469,    56,
+      57,    58,    59,    60,    61,    62,    10,   125,    10,   126,
+     101,    68,    69,    70,    71,   123,    72,   123,   105,   106,
+     107,   108,   109,   110,   123,   121,   113,   123,   124,   116,
+      22,   118,   503,   504,    22,   506,    22,   123,   509,   124,
+     113,   512,     4,   514,   105,   106,   107,   108,   109,   110,
+       4,    22,   113,   114,   115,   116,   117,   118,     4,   125,
+       4,    22,   127,   124,   126,   122,   126,   124,     4,     4,
+      22,   125,   113,   130,   131,   132,   133,   134,   135,   136,
+     137,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,     4,    98,    99,   100,   105,   106,   107,   108,
+     109,   110,     4,   127,   113,   114,   115,   116,   117,   118,
+     105,   106,   107,   108,     4,   110,     4,    13,   113,   114,
+     115,   116,    62,   118,   105,   106,   107,   108,   228,   110,
+     218,   132,   113,   114,   115,   116,   346,   118,   105,   106,
+     107,   108,   192,   110,   447,   125,   113,   114,   115,   116,
+     503,   118,   105,   106,   107,   108,   380,   110,   217,   330,
+     113,   114,   115,   116,   187,   118,   105,   106,   107,   108,
+     277,   110,   277,   252,   113,   114,   115,   116,   307,   118,
+     105,   106,   107,   108,   102,   110,   185,    -1,   113,   105,
+     106,   107,   108,   118,   110,    -1,    -1,   113,   105,   106,
+     107,   108,   118,   110,    -1,    -1,   113,    -1,    -1,    -1,
+      -1,   118
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2107,21 +2129,21 @@
       21,   101,   196,    10,   254,   256,    10,   254,   256,   109,
      216,   217,   248,   109,   109,   242,   190,   201,   202,    22,
       72,   127,   195,   113,   208,   238,   256,   113,   237,   238,
-     158,   109,   224,   256,    44,    50,    51,    56,    57,    58,
-      59,    60,    61,    62,    68,    69,    70,    71,   122,   124,
-     130,   131,   132,   133,   134,   135,   136,   137,   228,   125,
-     126,   254,    10,   254,    10,   101,   218,    72,   123,   123,
-     127,    11,    85,   185,   191,     4,    15,    80,   203,     4,
-      16,    82,   204,   248,   113,   241,   123,    22,    72,   127,
-     239,    22,    72,   127,   124,   257,   256,   123,   113,   254,
-     254,   217,   264,   264,   238,   256,    77,    83,    84,   189,
-       4,   256,     4,   256,     4,    22,   234,   256,   113,   238,
-      17,    21,   240,   256,   113,   238,   257,   125,   256,   127,
-       4,   256,   256,   113,   248,   184,   214,   239,   239,   248,
-     126,    22,   126,    22,   125,     4,    72,     4,     4,    72,
-       4,    72,   192,     4,   237,   256,   113,   256,   256,   256,
-     256,    29,    63,    76,   193,   127,   127,     4,     4,     4,
-     194,   248,     4,   223,   195,   217
+     256,   158,   109,   224,   256,    44,    50,    51,    56,    57,
+      58,    59,    60,    61,    62,    68,    69,    70,    71,   122,
+     124,   130,   131,   132,   133,   134,   135,   136,   137,   228,
+     125,   126,   254,    10,   254,    10,   101,   218,    72,   123,
+     123,   127,    11,    85,   185,   191,     4,    15,    80,   203,
+       4,    16,    82,   204,   248,   113,   241,   123,    22,    72,
+     127,   239,    22,    72,   127,    22,   124,   257,   256,   123,
+     113,   254,   254,   217,   264,   264,   238,   256,    77,    83,
+      84,   189,     4,   256,     4,   256,     4,    22,   234,   256,
+     113,   238,    17,    21,   240,   256,   113,   238,   256,   257,
+     125,   256,   127,     4,   256,   256,   113,   248,   184,   214,
+     239,   239,   248,   126,    22,   126,    22,   125,     4,    72,
+       4,     4,    72,     4,    72,   192,     4,   237,   256,   113,
+     256,   256,   256,   256,    29,    63,    76,   193,   127,   127,
+       4,     4,     4,   194,   248,     4,   223,   195,   217
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2949,22 +2971,22 @@
   switch (yyn)
     {
         case 2:
-#line 880 "compilers/imcc/imcc.y"
+#line 905 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
-#line 889 "compilers/imcc/imcc.y"
+#line 914 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
-#line 890 "compilers/imcc/imcc.y"
+#line 915 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
-#line 892 "compilers/imcc/imcc.y"
+#line 917 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -2973,7 +2995,7 @@
     break;
 
   case 8:
-#line 898 "compilers/imcc/imcc.y"
+#line 923 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -2982,32 +3004,32 @@
     break;
 
   case 9:
-#line 903 "compilers/imcc/imcc.y"
+#line 928 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
-#line 904 "compilers/imcc/imcc.y"
+#line 929 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
-#line 905 "compilers/imcc/imcc.y"
+#line 930 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
-#line 906 "compilers/imcc/imcc.y"
+#line 931 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
-#line 910 "compilers/imcc/imcc.y"
+#line 935 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
-#line 912 "compilers/imcc/imcc.y"
+#line 937 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3016,7 +3038,7 @@
     break;
 
   case 15:
-#line 921 "compilers/imcc/imcc.y"
+#line 946 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            set_filename(interp, (yyvsp[(4) - (5)].s));
@@ -3024,14 +3046,14 @@
     break;
 
   case 16:
-#line 926 "compilers/imcc/imcc.y"
+#line 951 "compilers/imcc/imcc.y"
     {
            set_filename(interp, (yyvsp[(2) - (3)].s));
          }
     break;
 
   case 17:
-#line 933 "compilers/imcc/imcc.y"
+#line 958 "compilers/imcc/imcc.y"
     {
           /* We'll want to store an entry while emitting instructions, so just
            * store annotation like it's an instruction. */
@@ -3042,7 +3064,7 @@
     break;
 
   case 18:
-#line 945 "compilers/imcc/imcc.y"
+#line 970 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = string_unescape_cstring(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
             CONTEXT(interp)->current_HLL =
@@ -3054,7 +3076,7 @@
     break;
 
   case 19:
-#line 954 "compilers/imcc/imcc.y"
+#line 979 "compilers/imcc/imcc.y"
     {
             Parrot_Context *ctx           = CONTEXT(interp);
             STRING * const  built_in_name =
@@ -3072,12 +3094,12 @@
     break;
 
   case 20:
-#line 971 "compilers/imcc/imcc.y"
+#line 996 "compilers/imcc/imcc.y"
     { is_def = 1; }
     break;
 
   case 21:
-#line 972 "compilers/imcc/imcc.y"
+#line 997 "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));
@@ -3086,12 +3108,12 @@
     break;
 
   case 22:
-#line 980 "compilers/imcc/imcc.y"
+#line 1005 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
   case 23:
-#line 981 "compilers/imcc/imcc.y"
+#line 1006 "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));
            is_def = 0;
@@ -3099,12 +3121,12 @@
     break;
 
   case 24:
-#line 986 "compilers/imcc/imcc.y"
+#line 1011 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
   case 25:
-#line 987 "compilers/imcc/imcc.y"
+#line 1012 "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));
            is_def = 0;
@@ -3112,37 +3134,37 @@
     break;
 
   case 30:
-#line 1003 "compilers/imcc/imcc.y"
+#line 1028 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 31:
-#line 1004 "compilers/imcc/imcc.y"
+#line 1029 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 32:
-#line 1005 "compilers/imcc/imcc.y"
+#line 1030 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 33:
-#line 1006 "compilers/imcc/imcc.y"
+#line 1031 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 34:
-#line 1007 "compilers/imcc/imcc.y"
+#line 1032 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 37:
-#line 1012 "compilers/imcc/imcc.y"
+#line 1037 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 38:
-#line 1014 "compilers/imcc/imcc.y"
+#line 1039 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3152,7 +3174,7 @@
     break;
 
   case 39:
-#line 1021 "compilers/imcc/imcc.y"
+#line 1046 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
@@ -3160,7 +3182,7 @@
     break;
 
   case 40:
-#line 1026 "compilers/imcc/imcc.y"
+#line 1051 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3170,14 +3192,14 @@
     break;
 
   case 41:
-#line 1033 "compilers/imcc/imcc.y"
+#line 1058 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
          }
     break;
 
   case 42:
-#line 1037 "compilers/imcc/imcc.y"
+#line 1062 "compilers/imcc/imcc.y"
     {
            SymReg *r = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
            set_lexical(interp, r, (yyvsp[(2) - (4)].s));
@@ -3188,17 +3210,17 @@
     break;
 
   case 43:
-#line 1044 "compilers/imcc/imcc.y"
+#line 1069 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 45:
-#line 1052 "compilers/imcc/imcc.y"
+#line 1077 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 46:
-#line 1055 "compilers/imcc/imcc.y"
+#line 1080 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
                          imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3209,7 +3231,7 @@
     break;
 
   case 49:
-#line 1071 "compilers/imcc/imcc.y"
+#line 1096 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
            (yyval.i) = 0;
@@ -3224,7 +3246,7 @@
     break;
 
   case 50:
-#line 1086 "compilers/imcc/imcc.y"
+#line 1111 "compilers/imcc/imcc.y"
     {
             if (IMCC_INFO(interp)->in_slice)
                 IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3235,26 +3257,26 @@
     break;
 
   case 51:
-#line 1093 "compilers/imcc/imcc.y"
+#line 1118 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 52:
-#line 1098 "compilers/imcc/imcc.y"
+#line 1123 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
          }
     break;
 
   case 53:
-#line 1102 "compilers/imcc/imcc.y"
+#line 1127 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 54:
-#line 1106 "compilers/imcc/imcc.y"
+#line 1131 "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) {
@@ -3265,22 +3287,22 @@
     break;
 
   case 55:
-#line 1114 "compilers/imcc/imcc.y"
+#line 1139 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 56:
-#line 1118 "compilers/imcc/imcc.y"
+#line 1143 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 57:
-#line 1119 "compilers/imcc/imcc.y"
+#line 1144 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 58:
-#line 1121 "compilers/imcc/imcc.y"
+#line 1146 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                  add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3293,17 +3315,17 @@
     break;
 
   case 59:
-#line 1133 "compilers/imcc/imcc.y"
+#line 1158 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
   case 60:
-#line 1133 "compilers/imcc/imcc.y"
+#line 1158 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); is_def=0; }
     break;
 
   case 61:
-#line 1138 "compilers/imcc/imcc.y"
+#line 1163 "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));
@@ -3315,12 +3337,12 @@
     break;
 
   case 62:
-#line 1151 "compilers/imcc/imcc.y"
+#line 1176 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 63:
-#line 1156 "compilers/imcc/imcc.y"
+#line 1181 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3329,7 +3351,7 @@
     break;
 
   case 64:
-#line 1162 "compilers/imcc/imcc.y"
+#line 1187 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3338,7 +3360,7 @@
     break;
 
   case 65:
-#line 1171 "compilers/imcc/imcc.y"
+#line 1196 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
@@ -3347,7 +3369,7 @@
     break;
 
   case 66:
-#line 1177 "compilers/imcc/imcc.y"
+#line 1202 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s);
@@ -3356,7 +3378,7 @@
     break;
 
   case 67:
-#line 1186 "compilers/imcc/imcc.y"
+#line 1211 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
@@ -3365,7 +3387,7 @@
     break;
 
   case 68:
-#line 1192 "compilers/imcc/imcc.y"
+#line 1217 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
@@ -3374,7 +3396,7 @@
     break;
 
   case 69:
-#line 1201 "compilers/imcc/imcc.y"
+#line 1226 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
@@ -3383,7 +3405,7 @@
     break;
 
   case 70:
-#line 1207 "compilers/imcc/imcc.y"
+#line 1232 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3392,7 +3414,7 @@
     break;
 
   case 71:
-#line 1216 "compilers/imcc/imcc.y"
+#line 1241 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
@@ -3400,7 +3422,7 @@
     break;
 
   case 72:
-#line 1224 "compilers/imcc/imcc.y"
+#line 1249 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
@@ -3408,7 +3430,7 @@
     break;
 
   case 73:
-#line 1229 "compilers/imcc/imcc.y"
+#line 1254 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3418,14 +3440,14 @@
     break;
 
   case 74:
-#line 1239 "compilers/imcc/imcc.y"
+#line 1264 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
          }
     break;
 
   case 75:
-#line 1243 "compilers/imcc/imcc.y"
+#line 1268 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
@@ -3433,7 +3455,7 @@
     break;
 
   case 76:
-#line 1248 "compilers/imcc/imcc.y"
+#line 1273 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
@@ -3441,27 +3463,27 @@
     break;
 
   case 77:
-#line 1255 "compilers/imcc/imcc.y"
+#line 1280 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 78:
-#line 1256 "compilers/imcc/imcc.y"
+#line 1281 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 79:
-#line 1257 "compilers/imcc/imcc.y"
+#line 1282 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 80:
-#line 1258 "compilers/imcc/imcc.y"
+#line 1283 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 81:
-#line 1260 "compilers/imcc/imcc.y"
+#line 1285 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3475,7 +3497,7 @@
     break;
 
   case 82:
-#line 1271 "compilers/imcc/imcc.y"
+#line 1296 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3489,12 +3511,12 @@
     break;
 
   case 83:
-#line 1281 "compilers/imcc/imcc.y"
+#line 1306 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 86:
-#line 1291 "compilers/imcc/imcc.y"
+#line 1316 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -3521,82 +3543,82 @@
     break;
 
   case 87:
-#line 1319 "compilers/imcc/imcc.y"
+#line 1344 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 88:
-#line 1323 "compilers/imcc/imcc.y"
+#line 1348 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 89:
-#line 1324 "compilers/imcc/imcc.y"
+#line 1349 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 90:
-#line 1328 "compilers/imcc/imcc.y"
+#line 1353 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 91:
-#line 1329 "compilers/imcc/imcc.y"
+#line 1354 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 92:
-#line 1333 "compilers/imcc/imcc.y"
+#line 1358 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 94:
-#line 1338 "compilers/imcc/imcc.y"
+#line 1363 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 95:
-#line 1339 "compilers/imcc/imcc.y"
+#line 1364 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 96:
-#line 1343 "compilers/imcc/imcc.y"
+#line 1368 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
   case 97:
-#line 1344 "compilers/imcc/imcc.y"
+#line 1369 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
   case 98:
-#line 1345 "compilers/imcc/imcc.y"
+#line 1370 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
   case 99:
-#line 1346 "compilers/imcc/imcc.y"
+#line 1371 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 100:
-#line 1347 "compilers/imcc/imcc.y"
+#line 1372 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 101:
-#line 1348 "compilers/imcc/imcc.y"
+#line 1373 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
   case 102:
-#line 1349 "compilers/imcc/imcc.y"
+#line 1374 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 110:
-#line 1361 "compilers/imcc/imcc.y"
+#line 1386 "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));
@@ -3604,14 +3626,14 @@
     break;
 
   case 111:
-#line 1366 "compilers/imcc/imcc.y"
+#line 1391 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 112:
-#line 1370 "compilers/imcc/imcc.y"
+#line 1395 "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;
@@ -3619,21 +3641,21 @@
     break;
 
   case 113:
-#line 1375 "compilers/imcc/imcc.y"
+#line 1400 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 114:
-#line 1379 "compilers/imcc/imcc.y"
+#line 1404 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
     break;
 
   case 115:
-#line 1383 "compilers/imcc/imcc.y"
+#line 1408 "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));
@@ -3641,7 +3663,7 @@
     break;
 
   case 116:
-#line 1388 "compilers/imcc/imcc.y"
+#line 1413 "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));
@@ -3649,27 +3671,27 @@
     break;
 
   case 117:
-#line 1396 "compilers/imcc/imcc.y"
+#line 1421 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 118:
-#line 1397 "compilers/imcc/imcc.y"
+#line 1422 "compilers/imcc/imcc.y"
     { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
     break;
 
   case 119:
-#line 1401 "compilers/imcc/imcc.y"
+#line 1426 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 120:
-#line 1406 "compilers/imcc/imcc.y"
+#line 1431 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 121:
-#line 1408 "compilers/imcc/imcc.y"
+#line 1433 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -3677,17 +3699,17 @@
     break;
 
   case 122:
-#line 1415 "compilers/imcc/imcc.y"
+#line 1440 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 123:
-#line 1416 "compilers/imcc/imcc.y"
+#line 1441 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
   case 124:
-#line 1417 "compilers/imcc/imcc.y"
+#line 1442 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -3702,57 +3724,57 @@
     break;
 
   case 125:
-#line 1431 "compilers/imcc/imcc.y"
+#line 1456 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 126:
-#line 1432 "compilers/imcc/imcc.y"
+#line 1457 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 127:
-#line 1436 "compilers/imcc/imcc.y"
+#line 1461 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
   case 128:
-#line 1437 "compilers/imcc/imcc.y"
+#line 1462 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 129:
-#line 1438 "compilers/imcc/imcc.y"
+#line 1463 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 130:
-#line 1439 "compilers/imcc/imcc.y"
+#line 1464 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
   case 131:
-#line 1440 "compilers/imcc/imcc.y"
+#line 1465 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 132:
-#line 1441 "compilers/imcc/imcc.y"
+#line 1466 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_UNIQUE_REG; }
     break;
 
   case 133:
-#line 1446 "compilers/imcc/imcc.y"
+#line 1471 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
   case 134:
-#line 1448 "compilers/imcc/imcc.y"
+#line 1473 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 135:
-#line 1450 "compilers/imcc/imcc.y"
+#line 1475 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
@@ -3760,22 +3782,22 @@
     break;
 
   case 136:
-#line 1457 "compilers/imcc/imcc.y"
+#line 1482 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
   case 137:
-#line 1459 "compilers/imcc/imcc.y"
+#line 1484 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 138:
-#line 1463 "compilers/imcc/imcc.y"
+#line 1488 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 139:
-#line 1465 "compilers/imcc/imcc.y"
+#line 1490 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -3783,7 +3805,7 @@
     break;
 
   case 140:
-#line 1470 "compilers/imcc/imcc.y"
+#line 1495 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -3791,12 +3813,12 @@
     break;
 
   case 141:
-#line 1477 "compilers/imcc/imcc.y"
+#line 1502 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 142:
-#line 1479 "compilers/imcc/imcc.y"
+#line 1504 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -3804,7 +3826,7 @@
     break;
 
   case 143:
-#line 1484 "compilers/imcc/imcc.y"
+#line 1509 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -3812,17 +3834,17 @@
     break;
 
   case 144:
-#line 1491 "compilers/imcc/imcc.y"
+#line 1516 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 145:
-#line 1495 "compilers/imcc/imcc.y"
+#line 1520 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 146:
-#line 1500 "compilers/imcc/imcc.y"
+#line 1525 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
@@ -3830,7 +3852,7 @@
     break;
 
   case 147:
-#line 1505 "compilers/imcc/imcc.y"
+#line 1530 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
@@ -3838,22 +3860,22 @@
     break;
 
   case 148:
-#line 1512 "compilers/imcc/imcc.y"
+#line 1537 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 149:
-#line 1513 "compilers/imcc/imcc.y"
+#line 1538 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 150:
-#line 1517 "compilers/imcc/imcc.y"
+#line 1542 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 151:
-#line 1519 "compilers/imcc/imcc.y"
+#line 1544 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3866,14 +3888,14 @@
     break;
 
   case 152:
-#line 1529 "compilers/imcc/imcc.y"
+#line 1554 "compilers/imcc/imcc.y"
     {
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 153:
-#line 1533 "compilers/imcc/imcc.y"
+#line 1558 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3886,66 +3908,66 @@
     break;
 
   case 154:
-#line 1543 "compilers/imcc/imcc.y"
+#line 1568 "compilers/imcc/imcc.y"
     {
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
          }
     break;
 
   case 157:
-#line 1563 "compilers/imcc/imcc.y"
+#line 1588 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 158:
-#line 1568 "compilers/imcc/imcc.y"
+#line 1593 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 159:
-#line 1569 "compilers/imcc/imcc.y"
+#line 1594 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 160:
-#line 1570 "compilers/imcc/imcc.y"
+#line 1595 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 161:
-#line 1571 "compilers/imcc/imcc.y"
+#line 1596 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 162:
-#line 1572 "compilers/imcc/imcc.y"
+#line 1597 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 163:
-#line 1573 "compilers/imcc/imcc.y"
+#line 1598 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 164:
-#line 1577 "compilers/imcc/imcc.y"
+#line 1602 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 168:
-#line 1588 "compilers/imcc/imcc.y"
+#line 1613 "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 1596 "compilers/imcc/imcc.y"
+#line 1621 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 170:
-#line 1598 "compilers/imcc/imcc.y"
+#line 1623 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -3956,7 +3978,7 @@
     break;
 
   case 171:
-#line 1609 "compilers/imcc/imcc.y"
+#line 1634 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -3965,7 +3987,7 @@
     break;
 
   case 172:
-#line 1616 "compilers/imcc/imcc.y"
+#line 1641 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -3974,7 +3996,7 @@
     break;
 
   case 173:
-#line 1625 "compilers/imcc/imcc.y"
+#line 1650 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
@@ -3984,22 +4006,22 @@
     break;
 
   case 174:
-#line 1634 "compilers/imcc/imcc.y"
+#line 1659 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 175:
-#line 1635 "compilers/imcc/imcc.y"
+#line 1660 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 178:
-#line 1642 "compilers/imcc/imcc.y"
+#line 1667 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
   case 179:
-#line 1643 "compilers/imcc/imcc.y"
+#line 1668 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -4018,19 +4040,19 @@
     break;
 
   case 180:
-#line 1659 "compilers/imcc/imcc.y"
+#line 1684 "compilers/imcc/imcc.y"
     {
            set_lexical(interp, (yyvsp[(4) - (4)].sr), (yyvsp[(2) - (4)].s)); (yyval.i) = 0;
          }
     break;
 
   case 181:
-#line 1662 "compilers/imcc/imcc.y"
+#line 1687 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
   case 182:
-#line 1663 "compilers/imcc/imcc.y"
+#line 1688 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            is_def=0;
@@ -4039,12 +4061,12 @@
     break;
 
   case 184:
-#line 1670 "compilers/imcc/imcc.y"
+#line 1695 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
   case 185:
-#line 1671 "compilers/imcc/imcc.y"
+#line 1696 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            is_def=0;
@@ -4053,7 +4075,7 @@
     break;
 
   case 186:
-#line 1677 "compilers/imcc/imcc.y"
+#line 1702 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
@@ -4062,12 +4084,14 @@
     break;
 
   case 187:
-#line 1682 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr)); }
+#line 1708 "compilers/imcc/imcc.y"
+    {
+            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
+         }
     break;
 
   case 188:
-#line 1684 "compilers/imcc/imcc.y"
+#line 1712 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4082,47 +4106,47 @@
     break;
 
   case 189:
-#line 1695 "compilers/imcc/imcc.y"
+#line 1723 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 190:
-#line 1696 "compilers/imcc/imcc.y"
+#line 1724 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 191:
-#line 1697 "compilers/imcc/imcc.y"
+#line 1725 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 194:
-#line 1700 "compilers/imcc/imcc.y"
+#line 1728 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 195:
-#line 1704 "compilers/imcc/imcc.y"
+#line 1732 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
   case 196:
-#line 1705 "compilers/imcc/imcc.y"
+#line 1733 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
   case 197:
-#line 1706 "compilers/imcc/imcc.y"
+#line 1734 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
   case 198:
-#line 1707 "compilers/imcc/imcc.y"
+#line 1735 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
   case 199:
-#line 1712 "compilers/imcc/imcc.y"
+#line 1740 "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 */
@@ -4135,37 +4159,37 @@
     break;
 
   case 200:
-#line 1725 "compilers/imcc/imcc.y"
+#line 1753 "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 201:
-#line 1727 "compilers/imcc/imcc.y"
+#line 1755 "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 202:
-#line 1729 "compilers/imcc/imcc.y"
+#line 1757 "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 203:
-#line 1731 "compilers/imcc/imcc.y"
+#line 1759 "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 204:
-#line 1733 "compilers/imcc/imcc.y"
+#line 1761 "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 205:
-#line 1738 "compilers/imcc/imcc.y"
+#line 1766 "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 206:
-#line 1741 "compilers/imcc/imcc.y"
+#line 1769 "compilers/imcc/imcc.y"
     {
            add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4174,14 +4198,14 @@
     break;
 
   case 207:
-#line 1747 "compilers/imcc/imcc.y"
+#line 1775 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
     break;
 
   case 208:
-#line 1751 "compilers/imcc/imcc.y"
+#line 1779 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4189,144 +4213,144 @@
     break;
 
   case 212:
-#line 1759 "compilers/imcc/imcc.y"
+#line 1787 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
     break;
 
   case 213:
-#line 1766 "compilers/imcc/imcc.y"
+#line 1794 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
   case 214:
-#line 1767 "compilers/imcc/imcc.y"
+#line 1795 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 215:
-#line 1768 "compilers/imcc/imcc.y"
+#line 1796 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
   case 216:
-#line 1772 "compilers/imcc/imcc.y"
+#line 1800 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 217:
-#line 1773 "compilers/imcc/imcc.y"
+#line 1801 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 218:
-#line 1774 "compilers/imcc/imcc.y"
+#line 1802 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 219:
-#line 1775 "compilers/imcc/imcc.y"
+#line 1803 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 220:
-#line 1776 "compilers/imcc/imcc.y"
+#line 1804 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 221:
-#line 1777 "compilers/imcc/imcc.y"
+#line 1805 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 222:
-#line 1778 "compilers/imcc/imcc.y"
+#line 1806 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
   case 223:
-#line 1779 "compilers/imcc/imcc.y"
+#line 1807 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 224:
-#line 1780 "compilers/imcc/imcc.y"
+#line 1808 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 225:
-#line 1781 "compilers/imcc/imcc.y"
+#line 1809 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
   case 226:
-#line 1782 "compilers/imcc/imcc.y"
+#line 1810 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 227:
-#line 1783 "compilers/imcc/imcc.y"
+#line 1811 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
   case 228:
-#line 1784 "compilers/imcc/imcc.y"
+#line 1812 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
   case 229:
-#line 1785 "compilers/imcc/imcc.y"
+#line 1813 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
   case 230:
-#line 1786 "compilers/imcc/imcc.y"
+#line 1814 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 231:
-#line 1787 "compilers/imcc/imcc.y"
+#line 1815 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 232:
-#line 1788 "compilers/imcc/imcc.y"
+#line 1816 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 233:
-#line 1789 "compilers/imcc/imcc.y"
+#line 1817 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
   case 234:
-#line 1790 "compilers/imcc/imcc.y"
+#line 1818 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
   case 235:
-#line 1791 "compilers/imcc/imcc.y"
+#line 1819 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
   case 236:
-#line 1792 "compilers/imcc/imcc.y"
+#line 1820 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 237:
-#line 1793 "compilers/imcc/imcc.y"
+#line 1821 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 238:
-#line 1794 "compilers/imcc/imcc.y"
+#line 1822 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 239:
-#line 1800 "compilers/imcc/imcc.y"
+#line 1828 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -4335,84 +4359,84 @@
     break;
 
   case 240:
-#line 1805 "compilers/imcc/imcc.y"
+#line 1833 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
   case 241:
-#line 1812 "compilers/imcc/imcc.y"
+#line 1840 "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 242:
-#line 1818 "compilers/imcc/imcc.y"
+#line 1846 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 243:
-#line 1819 "compilers/imcc/imcc.y"
+#line 1847 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 244:
-#line 1820 "compilers/imcc/imcc.y"
+#line 1848 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 245:
-#line 1821 "compilers/imcc/imcc.y"
+#line 1849 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 246:
-#line 1822 "compilers/imcc/imcc.y"
+#line 1850 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 247:
-#line 1823 "compilers/imcc/imcc.y"
+#line 1851 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 248:
-#line 1824 "compilers/imcc/imcc.y"
+#line 1852 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 249:
-#line 1825 "compilers/imcc/imcc.y"
+#line 1853 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 250:
-#line 1826 "compilers/imcc/imcc.y"
+#line 1854 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 251:
-#line 1827 "compilers/imcc/imcc.y"
+#line 1855 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 252:
-#line 1828 "compilers/imcc/imcc.y"
+#line 1856 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 253:
-#line 1829 "compilers/imcc/imcc.y"
+#line 1857 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 254:
-#line 1830 "compilers/imcc/imcc.y"
+#line 1858 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 255:
-#line 1836 "compilers/imcc/imcc.y"
+#line 1864 "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,
@@ -4423,22 +4447,22 @@
     break;
 
   case 256:
-#line 1846 "compilers/imcc/imcc.y"
+#line 1874 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 257:
-#line 1847 "compilers/imcc/imcc.y"
+#line 1875 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 258:
-#line 1848 "compilers/imcc/imcc.y"
+#line 1876 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 259:
-#line 1850 "compilers/imcc/imcc.y"
+#line 1878 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -4447,7 +4471,7 @@
     break;
 
   case 260:
-#line 1856 "compilers/imcc/imcc.y"
+#line 1884 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             char *name = (yyvsp[(3) - (3)].sr)->name;
@@ -4464,7 +4488,7 @@
     break;
 
   case 261:
-#line 1870 "compilers/imcc/imcc.y"
+#line 1898 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
@@ -4473,12 +4497,12 @@
     break;
 
   case 262:
-#line 1875 "compilers/imcc/imcc.y"
+#line 1903 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
   case 263:
-#line 1881 "compilers/imcc/imcc.y"
+#line 1909 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
@@ -4486,17 +4510,17 @@
     break;
 
   case 264:
-#line 1885 "compilers/imcc/imcc.y"
+#line 1913 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
   case 265:
-#line 1889 "compilers/imcc/imcc.y"
+#line 1917 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 266:
-#line 1891 "compilers/imcc/imcc.y"
+#line 1919 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4509,7 +4533,7 @@
     break;
 
   case 267:
-#line 1901 "compilers/imcc/imcc.y"
+#line 1929 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4522,7 +4546,7 @@
     break;
 
   case 268:
-#line 1911 "compilers/imcc/imcc.y"
+#line 1939 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
@@ -4531,7 +4555,15 @@
     break;
 
   case 269:
-#line 1917 "compilers/imcc/imcc.y"
+#line 1945 "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 270:
+#line 1950 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
@@ -4539,43 +4571,43 @@
          }
     break;
 
-  case 270:
-#line 1925 "compilers/imcc/imcc.y"
+  case 271:
+#line 1958 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 271:
-#line 1929 "compilers/imcc/imcc.y"
+  case 272:
+#line 1962 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 272:
-#line 1930 "compilers/imcc/imcc.y"
+  case 273:
+#line 1963 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 273:
-#line 1934 "compilers/imcc/imcc.y"
+  case 274:
+#line 1967 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT; }
     break;
 
-  case 274:
-#line 1935 "compilers/imcc/imcc.y"
+  case 275:
+#line 1968 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
-  case 275:
-#line 1938 "compilers/imcc/imcc.y"
+  case 276:
+#line 1971 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 276:
-#line 1942 "compilers/imcc/imcc.y"
+  case 277:
+#line 1975 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 277:
-#line 1947 "compilers/imcc/imcc.y"
+  case 278:
+#line 1980 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4587,16 +4619,16 @@
          }
     break;
 
-  case 278:
-#line 1957 "compilers/imcc/imcc.y"
+  case 279:
+#line 1990 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
            mem_sys_free((yyvsp[(3) - (5)].s));
          }
     break;
 
-  case 279:
-#line 1962 "compilers/imcc/imcc.y"
+  case 280:
+#line 1995 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4608,133 +4640,133 @@
          }
     break;
 
-  case 280:
-#line 1972 "compilers/imcc/imcc.y"
+  case 281:
+#line 2005 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
     break;
 
-  case 281:
-#line 1976 "compilers/imcc/imcc.y"
+  case 282:
+#line 2009 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 282:
-#line 1980 "compilers/imcc/imcc.y"
+  case 283:
+#line 2013 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 283:
-#line 1981 "compilers/imcc/imcc.y"
+  case 284:
+#line 2014 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 284:
-#line 1986 "compilers/imcc/imcc.y"
+  case 285:
+#line 2019 "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 285:
-#line 1990 "compilers/imcc/imcc.y"
+  case 286:
+#line 2023 "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 286:
-#line 1994 "compilers/imcc/imcc.y"
+  case 287:
+#line 2027 "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 287:
-#line 2001 "compilers/imcc/imcc.y"
+  case 288:
+#line 2034 "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 288:
-#line 2005 "compilers/imcc/imcc.y"
+  case 289:
+#line 2038 "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 289:
-#line 2009 "compilers/imcc/imcc.y"
+  case 290:
+#line 2042 "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 290:
-#line 2015 "compilers/imcc/imcc.y"
+  case 291:
+#line 2048 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 291:
-#line 2016 "compilers/imcc/imcc.y"
+  case 292:
+#line 2049 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 292:
-#line 2020 "compilers/imcc/imcc.y"
+  case 293:
+#line 2053 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
-  case 293:
-#line 2021 "compilers/imcc/imcc.y"
+  case 294:
+#line 2054 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
-  case 294:
-#line 2022 "compilers/imcc/imcc.y"
+  case 295:
+#line 2055 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
-  case 295:
-#line 2023 "compilers/imcc/imcc.y"
+  case 296:
+#line 2056 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
-  case 296:
-#line 2024 "compilers/imcc/imcc.y"
+  case 297:
+#line 2057 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
-  case 297:
-#line 2025 "compilers/imcc/imcc.y"
+  case 298:
+#line 2058 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
-  case 300:
-#line 2034 "compilers/imcc/imcc.y"
+  case 301:
+#line 2067 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
-  case 301:
-#line 2035 "compilers/imcc/imcc.y"
+  case 302:
+#line 2068 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 302:
-#line 2039 "compilers/imcc/imcc.y"
+  case 303:
+#line 2072 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
-  case 304:
-#line 2044 "compilers/imcc/imcc.y"
+  case 305:
+#line 2077 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 305:
-#line 2046 "compilers/imcc/imcc.y"
+  case 306:
+#line 2079 "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);
@@ -4743,54 +4775,54 @@
          }
     break;
 
-  case 306:
-#line 2053 "compilers/imcc/imcc.y"
+  case 307:
+#line 2086 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
          }
     break;
 
-  case 308:
-#line 2060 "compilers/imcc/imcc.y"
+  case 309:
+#line 2093 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 309:
-#line 2061 "compilers/imcc/imcc.y"
+  case 310:
+#line 2094 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 310:
-#line 2065 "compilers/imcc/imcc.y"
+  case 311:
+#line 2098 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 311:
-#line 2066 "compilers/imcc/imcc.y"
+  case 312:
+#line 2099 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 312:
-#line 2070 "compilers/imcc/imcc.y"
+  case 313:
+#line 2103 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 313:
-#line 2071 "compilers/imcc/imcc.y"
+  case 314:
+#line 2104 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 318:
-#line 2085 "compilers/imcc/imcc.y"
+  case 319:
+#line 2118 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 319:
-#line 2090 "compilers/imcc/imcc.y"
+  case 320:
+#line 2123 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -4798,16 +4830,16 @@
          }
     break;
 
-  case 320:
-#line 2098 "compilers/imcc/imcc.y"
+  case 321:
+#line 2131 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 321:
-#line 2103 "compilers/imcc/imcc.y"
+  case 322:
+#line 2136 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -4815,21 +4847,21 @@
          }
     break;
 
-  case 322:
-#line 2111 "compilers/imcc/imcc.y"
+  case 323:
+#line 2144 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 323:
-#line 2113 "compilers/imcc/imcc.y"
+  case 324:
+#line 2146 "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 324:
-#line 2121 "compilers/imcc/imcc.y"
+  case 325:
+#line 2154 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->in_slice)
                (yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE;
@@ -4837,54 +4869,54 @@
          }
     break;
 
-  case 325:
-#line 2129 "compilers/imcc/imcc.y"
+  case 326:
+#line 2162 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
-  case 326:
-#line 2130 "compilers/imcc/imcc.y"
+  case 327:
+#line 2163 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
-  case 327:
-#line 2131 "compilers/imcc/imcc.y"
+  case 328:
+#line 2164 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
-  case 328:
-#line 2132 "compilers/imcc/imcc.y"
+  case 329:
+#line 2165 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
-  case 329:
-#line 2133 "compilers/imcc/imcc.y"
+  case 330:
+#line 2166 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 330:
-#line 2137 "compilers/imcc/imcc.y"
+  case 331:
+#line 2170 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 331:
-#line 2138 "compilers/imcc/imcc.y"
+  case 332:
+#line 2171 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 332:
-#line 2139 "compilers/imcc/imcc.y"
+  case 333:
+#line 2172 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 333:
-#line 2140 "compilers/imcc/imcc.y"
+  case 334:
+#line 2173 "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 4877 "compilers/imcc/imcparser.c"
+#line 4909 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5098,7 +5130,7 @@
 }
 
 
-#line 2146 "compilers/imcc/imcc.y"
+#line 2179 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: trunk/compilers/imcc/imcparser.h
==============================================================================
--- trunk/compilers/imcc/imcparser.h	Thu Jan 29 21:03:49 2009	(r36158)
+++ trunk/compilers/imcc/imcparser.h	Thu Jan 29 21:04:34 2009	(r36159)
@@ -297,7 +297,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 785 "compilers/imcc/imcc.y"
+#line 810 "compilers/imcc/imcc.y"
 {
     IdList * idlist;
     int t;

Modified: trunk/src/gc/mark_sweep.c
==============================================================================
--- trunk/src/gc/mark_sweep.c	Thu Jan 29 21:03:49 2009	(r36158)
+++ trunk/src/gc/mark_sweep.c	Thu Jan 29 21:04:34 2009	(r36159)
@@ -669,7 +669,9 @@
     }
     if (PObj_custom_mark_TEST(obj)) {
         PObj_get_FLAGS(obj) |= PObj_custom_GC_FLAG;
-        VTABLE_mark(interp, obj);
+
+        if (!PObj_constant_TEST(obj))
+            VTABLE_mark(interp, obj);
     }
 }
 

Modified: trunk/t/op/calling.t
==============================================================================
--- trunk/t/op/calling.t	Thu Jan 29 21:03:49 2009	(r36158)
+++ trunk/t/op/calling.t	Thu Jan 29 21:04:34 2009	(r36159)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2001-2008, The Perl Foundation.
+# Copyright (C) 2001-2009, The Perl Foundation.
 # $Id$
 
 use strict;
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 93;
+use Parrot::Test tests => 94;
 
 =head1 NAME
 
@@ -2405,6 +2405,34 @@
 /too many arguments passed\(1\) - 0 params expected/
 OUTPUT
 
+# See Rakudo RT #62730
+pir_output_is( <<'CODE', <<'OUTPUT', "named from register, not constant" );
+.sub 'main'
+    $S0 = 'foo'
+    example('foo' => 42)              # normal named parameter
+    example( $S0  => 42)              # parameter named by non-const register
+    just_a_string( $S0, 'foo' => 42 ) # nameyness should not stick on register
+.end
+
+.sub 'example'
+    .param pmc foo :named('foo')
+    say foo
+.end
+
+.sub 'just_a_string'
+    .param pmc bar
+    .param int baz :named( 'foo' )
+    say bar
+    say baz
+.end
+CODE
+42
+42
+foo
+42
+OUTPUT
+
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4


More information about the parrot-commits mailing list