[svn:parrot] r46444 - trunk/compilers/imcc

plobsing at svn.parrot.org plobsing at svn.parrot.org
Sun May 9 21:23:32 UTC 2010


Author: plobsing
Date: Sun May  9 21:23:31 2010
New Revision: 46444
URL: https://trac.parrot.org/parrot/changeset/46444

Log:
eliminate pcc_sub_t.calls_a_sub, leaving pcc_sub_t.yield

Modified:
   trunk/compilers/imcc/imcc.y
   trunk/compilers/imcc/imcparser.c
   trunk/compilers/imcc/imcparser.h
   trunk/compilers/imcc/parser_util.c
   trunk/compilers/imcc/pbc.c
   trunk/compilers/imcc/symreg.h

Modified: trunk/compilers/imcc/imcc.y
==============================================================================
--- trunk/compilers/imcc/imcc.y	Sun May  9 21:09:50 2010	(r46443)
+++ trunk/compilers/imcc/imcc.y	Sun May  9 21:23:31 2010	(r46444)
@@ -842,9 +842,6 @@
             IMCC_INFO(interp)->cur_obj;
         IMCC_INFO(interp)->cur_obj = NULL;
     }
-
-    if (IMCC_INFO(interp)->cur_unit->type == IMC_PCCSUB)
-        IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
 }
 
 
@@ -867,8 +864,7 @@
     if (!ins || !ins->symregs[0] || !(ins->symregs[0]->type & VT_PCC_SUB))
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "yield or return directive outside pcc subroutine\n");
-    if (yield)
-       ins->symregs[0]->pcc_sub->calls_a_sub = 1 | ITPCCYIELD;
+    ins->symregs[0]->pcc_sub->yield = yield;
     snprintf(name, sizeof (name), yield ? "%cpcc_sub_yield_%d" : "%cpcc_sub_ret_%d",
             IMCC_INTERNAL_CHAR, IMCC_INFO(interp)->cnr++);
     interp->imc_info->sr_return = mk_pcc_sub(interp, name, 0);
@@ -1599,8 +1595,6 @@
             * sub call; the sub is in r[0] of the first ins
             */
            r1 = IMCC_INFO(interp)->cur_unit->instructions->symregs[0];
-           if (r1 && r1->pcc_sub)
-               r1->pcc_sub->calls_a_sub |= 1;
          }
      pcc_args
      opt_invocant

Modified: trunk/compilers/imcc/imcparser.c
==============================================================================
--- trunk/compilers/imcc/imcparser.c	Sun May  9 21:09:50 2010	(r46443)
+++ trunk/compilers/imcc/imcparser.c	Sun May  9 21:23:31 2010	(r46444)
@@ -923,9 +923,6 @@
             IMCC_INFO(interp)->cur_obj;
         IMCC_INFO(interp)->cur_obj = NULL;
     }
-
-    if (IMCC_INFO(interp)->cur_unit->type == IMC_PCCSUB)
-        IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
 }
 
 
@@ -948,8 +945,7 @@
     if (!ins || !ins->symregs[0] || !(ins->symregs[0]->type & VT_PCC_SUB))
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "yield or return directive outside pcc subroutine\n");
-    if (yield)
-       ins->symregs[0]->pcc_sub->calls_a_sub = 1 | ITPCCYIELD;
+    ins->symregs[0]->pcc_sub->yield = yield;
     snprintf(name, sizeof (name), yield ? "%cpcc_sub_yield_%d" : "%cpcc_sub_ret_%d",
             IMCC_INTERNAL_CHAR, IMCC_INFO(interp)->cnr++);
     interp->imc_info->sr_return = mk_pcc_sub(interp, name, 0);
@@ -1151,7 +1147,7 @@
 
 
 /* Line 189 of yacc.c  */
-#line 1144 "compilers/imcc/imcparser.c"
+#line 1140 "compilers/imcc/imcparser.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -1424,7 +1420,7 @@
 {
 
 /* Line 214 of yacc.c  */
-#line 1072 "compilers/imcc/imcc.y"
+#line 1068 "compilers/imcc/imcc.y"
 
     IdList * idlist;
     int t;
@@ -1435,7 +1431,7 @@
 
 
 /* Line 214 of yacc.c  */
-#line 1428 "compilers/imcc/imcparser.c"
+#line 1424 "compilers/imcc/imcparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -1447,7 +1443,7 @@
 
 
 /* Line 264 of yacc.c  */
-#line 1440 "compilers/imcc/imcparser.c"
+#line 1436 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1868,40 +1864,40 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1167,  1167,  1171,  1172,  1176,  1177,  1178,  1184,  1190,
-    1191,  1192,  1193,  1197,  1198,  1207,  1213,  1221,  1233,  1246,
-    1246,  1255,  1255,  1262,  1262,  1271,  1272,  1276,  1277,  1281,
-    1282,  1283,  1284,  1285,  1286,  1287,  1290,  1290,  1299,  1298,
-    1311,  1315,  1328,  1332,  1336,  1336,  1348,  1350,  1354,  1369,
-    1373,  1378,  1382,  1386,  1377,  1398,  1399,  1400,  1413,  1413,
-    1417,  1442,  1446,  1452,  1461,  1467,  1476,  1482,  1491,  1497,
-    1506,  1514,  1519,  1530,  1533,  1538,  1546,  1547,  1548,  1549,
-    1550,  1561,  1572,  1575,  1577,  1582,  1581,  1614,  1615,  1619,
-    1620,  1624,  1625,  1629,  1630,  1634,  1635,  1636,  1637,  1638,
-    1639,  1640,  1641,  1642,  1643,  1644,  1645,  1646,  1647,  1651,
-    1656,  1660,  1664,  1668,  1672,  1677,  1686,  1687,  1699,  1704,
-    1705,  1713,  1714,  1714,  1726,  1727,  1731,  1732,  1733,  1734,
-    1735,  1736,  1737,  1738,  1743,  1743,  1746,  1754,  1754,  1760,
-    1761,  1766,  1774,  1775,  1780,  1788,  1792,  1797,  1796,  1809,
-    1810,  1814,  1815,  1825,  1830,  1840,  1849,  1850,  1862,  1866,
-    1868,  1869,  1870,  1871,  1872,  1876,  1877,  1881,  1882,  1886,
-    1897,  1898,  1909,  1916,  1925,  1933,  1935,  1940,  1941,  1942,
-    1942,  1955,  1972,  1985,  1985,  1992,  1993,  1993,  1999,  2005,
-    2009,  2021,  2022,  2023,  2024,  2025,  2026,  2030,  2031,  2032,
-    2033,  2037,  2039,  2041,  2043,  2045,  2048,  2055,  2054,  2063,
-    2064,  2065,  2066,  2074,  2075,  2076,  2080,  2081,  2082,  2083,
-    2084,  2085,  2086,  2087,  2088,  2089,  2090,  2091,  2092,  2093,
-    2094,  2095,  2096,  2097,  2098,  2099,  2100,  2101,  2102,  2108,
-    2107,  2119,  2124,  2125,  2126,  2127,  2128,  2129,  2130,  2131,
-    2132,  2133,  2134,  2135,  2136,  2141,  2152,  2153,  2154,  2155,
-    2161,  2175,  2181,  2187,  2193,  2192,  2201,  2202,  2212,  2222,
-    2229,  2234,  2244,  2248,  2249,  2253,  2254,  2255,  2258,  2259,
-    2263,  2267,  2277,  2283,  2293,  2298,  2302,  2303,  2307,  2311,
-    2315,  2322,  2326,  2330,  2337,  2338,  2342,  2343,  2344,  2345,
-    2346,  2347,  2351,  2352,  2356,  2357,  2361,  2362,  2366,  2367,
-    2374,  2381,  2382,  2383,  2387,  2388,  2392,  2393,  2397,  2398,
-    2402,  2403,  2407,  2407,  2419,  2419,  2431,  2432,  2440,  2447,
-    2448,  2449,  2450,  2451,  2455,  2456,  2457,  2458
+       0,  1163,  1163,  1167,  1168,  1172,  1173,  1174,  1180,  1186,
+    1187,  1188,  1189,  1193,  1194,  1203,  1209,  1217,  1229,  1242,
+    1242,  1251,  1251,  1258,  1258,  1267,  1268,  1272,  1273,  1277,
+    1278,  1279,  1280,  1281,  1282,  1283,  1286,  1286,  1295,  1294,
+    1307,  1311,  1324,  1328,  1332,  1332,  1344,  1346,  1350,  1365,
+    1369,  1374,  1378,  1382,  1373,  1394,  1395,  1396,  1409,  1409,
+    1413,  1438,  1442,  1448,  1457,  1463,  1472,  1478,  1487,  1493,
+    1502,  1510,  1515,  1526,  1529,  1534,  1542,  1543,  1544,  1545,
+    1546,  1557,  1568,  1571,  1573,  1578,  1577,  1608,  1609,  1613,
+    1614,  1618,  1619,  1623,  1624,  1628,  1629,  1630,  1631,  1632,
+    1633,  1634,  1635,  1636,  1637,  1638,  1639,  1640,  1641,  1645,
+    1650,  1654,  1658,  1662,  1666,  1671,  1680,  1681,  1693,  1698,
+    1699,  1707,  1708,  1708,  1720,  1721,  1725,  1726,  1727,  1728,
+    1729,  1730,  1731,  1732,  1737,  1737,  1740,  1748,  1748,  1754,
+    1755,  1760,  1768,  1769,  1774,  1782,  1786,  1791,  1790,  1803,
+    1804,  1808,  1809,  1819,  1824,  1834,  1843,  1844,  1856,  1860,
+    1862,  1863,  1864,  1865,  1866,  1870,  1871,  1875,  1876,  1880,
+    1891,  1892,  1903,  1910,  1919,  1927,  1929,  1934,  1935,  1936,
+    1936,  1949,  1966,  1979,  1979,  1986,  1987,  1987,  1993,  1999,
+    2003,  2015,  2016,  2017,  2018,  2019,  2020,  2024,  2025,  2026,
+    2027,  2031,  2033,  2035,  2037,  2039,  2042,  2049,  2048,  2057,
+    2058,  2059,  2060,  2068,  2069,  2070,  2074,  2075,  2076,  2077,
+    2078,  2079,  2080,  2081,  2082,  2083,  2084,  2085,  2086,  2087,
+    2088,  2089,  2090,  2091,  2092,  2093,  2094,  2095,  2096,  2102,
+    2101,  2113,  2118,  2119,  2120,  2121,  2122,  2123,  2124,  2125,
+    2126,  2127,  2128,  2129,  2130,  2135,  2146,  2147,  2148,  2149,
+    2155,  2169,  2175,  2181,  2187,  2186,  2195,  2196,  2206,  2216,
+    2223,  2228,  2238,  2242,  2243,  2247,  2248,  2249,  2252,  2253,
+    2257,  2261,  2271,  2277,  2287,  2292,  2296,  2297,  2301,  2305,
+    2309,  2316,  2320,  2324,  2331,  2332,  2336,  2337,  2338,  2339,
+    2340,  2341,  2345,  2346,  2350,  2351,  2355,  2356,  2360,  2361,
+    2368,  2375,  2376,  2377,  2381,  2382,  2386,  2387,  2391,  2392,
+    2396,  2397,  2401,  2401,  2413,  2413,  2425,  2426,  2434,  2441,
+    2442,  2443,  2444,  2445,  2449,  2450,  2451,  2452
 };
 #endif
 
@@ -3251,28 +3247,28 @@
         case 2:
 
 /* Line 1464 of yacc.c  */
-#line 1167 "compilers/imcc/imcc.y"
+#line 1163 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
 
 /* Line 1464 of yacc.c  */
-#line 1176 "compilers/imcc/imcc.y"
+#line 1172 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
 
 /* Line 1464 of yacc.c  */
-#line 1177 "compilers/imcc/imcc.y"
+#line 1173 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
 
 /* Line 1464 of yacc.c  */
-#line 1179 "compilers/imcc/imcc.y"
+#line 1175 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3283,7 +3279,7 @@
   case 8:
 
 /* Line 1464 of yacc.c  */
-#line 1185 "compilers/imcc/imcc.y"
+#line 1181 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3294,42 +3290,42 @@
   case 9:
 
 /* Line 1464 of yacc.c  */
-#line 1190 "compilers/imcc/imcc.y"
+#line 1186 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
 
 /* Line 1464 of yacc.c  */
-#line 1191 "compilers/imcc/imcc.y"
+#line 1187 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
 
 /* Line 1464 of yacc.c  */
-#line 1192 "compilers/imcc/imcc.y"
+#line 1188 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
 
 /* Line 1464 of yacc.c  */
-#line 1193 "compilers/imcc/imcc.y"
+#line 1189 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
 
 /* Line 1464 of yacc.c  */
-#line 1197 "compilers/imcc/imcc.y"
+#line 1193 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
 
 /* Line 1464 of yacc.c  */
-#line 1199 "compilers/imcc/imcc.y"
+#line 1195 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3340,7 +3336,7 @@
   case 15:
 
 /* Line 1464 of yacc.c  */
-#line 1208 "compilers/imcc/imcc.y"
+#line 1204 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            /* set_filename() frees the STRINGC */
@@ -3351,7 +3347,7 @@
   case 16:
 
 /* Line 1464 of yacc.c  */
-#line 1214 "compilers/imcc/imcc.y"
+#line 1210 "compilers/imcc/imcc.y"
     {
            /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(2) - (3)].s));
@@ -3361,7 +3357,7 @@
   case 17:
 
 /* Line 1464 of yacc.c  */
-#line 1222 "compilers/imcc/imcc.y"
+#line 1218 "compilers/imcc/imcc.y"
     {
           /* We'll want to store an entry while emitting instructions, so just
            * store annotation like it's an instruction. */
@@ -3374,7 +3370,7 @@
   case 18:
 
 /* Line 1464 of yacc.c  */
-#line 1234 "compilers/imcc/imcc.y"
+#line 1230 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
             Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp),
@@ -3389,14 +3385,14 @@
   case 19:
 
 /* Line 1464 of yacc.c  */
-#line 1246 "compilers/imcc/imcc.y"
+#line 1242 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 20:
 
 /* Line 1464 of yacc.c  */
-#line 1247 "compilers/imcc/imcc.y"
+#line 1243 "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));
@@ -3407,14 +3403,14 @@
   case 21:
 
 /* Line 1464 of yacc.c  */
-#line 1255 "compilers/imcc/imcc.y"
+#line 1251 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 22:
 
 /* Line 1464 of yacc.c  */
-#line 1256 "compilers/imcc/imcc.y"
+#line 1252 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(6) - (6)].s));
@@ -3425,14 +3421,14 @@
   case 23:
 
 /* Line 1464 of yacc.c  */
-#line 1262 "compilers/imcc/imcc.y"
+#line 1258 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 24:
 
 /* Line 1464 of yacc.c  */
-#line 1263 "compilers/imcc/imcc.y"
+#line 1259 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(3) - (6)].s));
@@ -3444,49 +3440,49 @@
   case 29:
 
 /* Line 1464 of yacc.c  */
-#line 1281 "compilers/imcc/imcc.y"
+#line 1277 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 30:
 
 /* Line 1464 of yacc.c  */
-#line 1282 "compilers/imcc/imcc.y"
+#line 1278 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 31:
 
 /* Line 1464 of yacc.c  */
-#line 1283 "compilers/imcc/imcc.y"
+#line 1279 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 32:
 
 /* Line 1464 of yacc.c  */
-#line 1284 "compilers/imcc/imcc.y"
+#line 1280 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 33:
 
 /* Line 1464 of yacc.c  */
-#line 1285 "compilers/imcc/imcc.y"
+#line 1281 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 36:
 
 /* Line 1464 of yacc.c  */
-#line 1290 "compilers/imcc/imcc.y"
+#line 1286 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 37:
 
 /* Line 1464 of yacc.c  */
-#line 1292 "compilers/imcc/imcc.y"
+#line 1288 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3498,7 +3494,7 @@
   case 38:
 
 /* Line 1464 of yacc.c  */
-#line 1299 "compilers/imcc/imcc.y"
+#line 1295 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
@@ -3508,7 +3504,7 @@
   case 39:
 
 /* Line 1464 of yacc.c  */
-#line 1304 "compilers/imcc/imcc.y"
+#line 1300 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3521,7 +3517,7 @@
   case 40:
 
 /* Line 1464 of yacc.c  */
-#line 1312 "compilers/imcc/imcc.y"
+#line 1308 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
          }
@@ -3530,7 +3526,7 @@
   case 41:
 
 /* Line 1464 of yacc.c  */
-#line 1316 "compilers/imcc/imcc.y"
+#line 1312 "compilers/imcc/imcc.y"
     {
            char   *name = mem_sys_strdup((yyvsp[(2) - (4)].s) + 1);
            SymReg *r    = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
@@ -3548,21 +3544,21 @@
   case 42:
 
 /* Line 1464 of yacc.c  */
-#line 1328 "compilers/imcc/imcc.y"
+#line 1324 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 44:
 
 /* Line 1464 of yacc.c  */
-#line 1336 "compilers/imcc/imcc.y"
+#line 1332 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 45:
 
 /* Line 1464 of yacc.c  */
-#line 1339 "compilers/imcc/imcc.y"
+#line 1335 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
                          imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3575,7 +3571,7 @@
   case 48:
 
 /* Line 1464 of yacc.c  */
-#line 1355 "compilers/imcc/imcc.y"
+#line 1351 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
            (yyval.i) = 0;
@@ -3592,7 +3588,7 @@
   case 49:
 
 /* Line 1464 of yacc.c  */
-#line 1370 "compilers/imcc/imcc.y"
+#line 1366 "compilers/imcc/imcc.y"
     {
             (yyval.sr) = (yyvsp[(2) - (3)].sr);
         }
@@ -3601,14 +3597,14 @@
   case 50:
 
 /* Line 1464 of yacc.c  */
-#line 1373 "compilers/imcc/imcc.y"
+#line 1369 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 51:
 
 /* Line 1464 of yacc.c  */
-#line 1378 "compilers/imcc/imcc.y"
+#line 1374 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
          }
@@ -3617,7 +3613,7 @@
   case 52:
 
 /* Line 1464 of yacc.c  */
-#line 1382 "compilers/imcc/imcc.y"
+#line 1378 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
          }
@@ -3626,7 +3622,7 @@
   case 53:
 
 /* Line 1464 of yacc.c  */
-#line 1386 "compilers/imcc/imcc.y"
+#line 1382 "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) {
@@ -3639,28 +3635,28 @@
   case 54:
 
 /* Line 1464 of yacc.c  */
-#line 1394 "compilers/imcc/imcc.y"
+#line 1390 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 55:
 
 /* Line 1464 of yacc.c  */
-#line 1398 "compilers/imcc/imcc.y"
+#line 1394 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 56:
 
 /* Line 1464 of yacc.c  */
-#line 1399 "compilers/imcc/imcc.y"
+#line 1395 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 57:
 
 /* Line 1464 of yacc.c  */
-#line 1401 "compilers/imcc/imcc.y"
+#line 1397 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                  add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3675,21 +3671,21 @@
   case 58:
 
 /* Line 1464 of yacc.c  */
-#line 1413 "compilers/imcc/imcc.y"
+#line 1409 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 59:
 
 /* Line 1464 of yacc.c  */
-#line 1413 "compilers/imcc/imcc.y"
+#line 1409 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); IMCC_INFO(interp)->is_def = 0; }
     break;
 
   case 60:
 
 /* Line 1464 of yacc.c  */
-#line 1418 "compilers/imcc/imcc.y"
+#line 1414 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(3) - (3)].t) & VT_OPT_FLAG && (yyvsp[(1) - (3)].t) != 'I') {
                const char *type;
@@ -3714,14 +3710,14 @@
   case 61:
 
 /* Line 1464 of yacc.c  */
-#line 1442 "compilers/imcc/imcc.y"
+#line 1438 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 62:
 
 /* Line 1464 of yacc.c  */
-#line 1447 "compilers/imcc/imcc.y"
+#line 1443 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3732,7 +3728,7 @@
   case 63:
 
 /* Line 1464 of yacc.c  */
-#line 1453 "compilers/imcc/imcc.y"
+#line 1449 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3743,7 +3739,7 @@
   case 64:
 
 /* Line 1464 of yacc.c  */
-#line 1462 "compilers/imcc/imcc.y"
+#line 1458 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
@@ -3754,7 +3750,7 @@
   case 65:
 
 /* Line 1464 of yacc.c  */
-#line 1468 "compilers/imcc/imcc.y"
+#line 1464 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = (yyvsp[(3) - (4)].s);
@@ -3765,7 +3761,7 @@
   case 66:
 
 /* Line 1464 of yacc.c  */
-#line 1477 "compilers/imcc/imcc.y"
+#line 1473 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
@@ -3776,7 +3772,7 @@
   case 67:
 
 /* Line 1464 of yacc.c  */
-#line 1483 "compilers/imcc/imcc.y"
+#line 1479 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
@@ -3787,7 +3783,7 @@
   case 68:
 
 /* Line 1464 of yacc.c  */
-#line 1492 "compilers/imcc/imcc.y"
+#line 1488 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
@@ -3798,7 +3794,7 @@
   case 69:
 
 /* Line 1464 of yacc.c  */
-#line 1498 "compilers/imcc/imcc.y"
+#line 1494 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3809,7 +3805,7 @@
   case 70:
 
 /* Line 1464 of yacc.c  */
-#line 1507 "compilers/imcc/imcc.y"
+#line 1503 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
@@ -3819,7 +3815,7 @@
   case 71:
 
 /* Line 1464 of yacc.c  */
-#line 1515 "compilers/imcc/imcc.y"
+#line 1511 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
@@ -3829,7 +3825,7 @@
   case 72:
 
 /* Line 1464 of yacc.c  */
-#line 1520 "compilers/imcc/imcc.y"
+#line 1516 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3841,7 +3837,7 @@
   case 73:
 
 /* Line 1464 of yacc.c  */
-#line 1530 "compilers/imcc/imcc.y"
+#line 1526 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL);
          }
@@ -3850,7 +3846,7 @@
   case 74:
 
 /* Line 1464 of yacc.c  */
-#line 1534 "compilers/imcc/imcc.y"
+#line 1530 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
@@ -3860,7 +3856,7 @@
   case 75:
 
 /* Line 1464 of yacc.c  */
-#line 1539 "compilers/imcc/imcc.y"
+#line 1535 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
@@ -3870,35 +3866,35 @@
   case 76:
 
 /* Line 1464 of yacc.c  */
-#line 1546 "compilers/imcc/imcc.y"
+#line 1542 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 77:
 
 /* Line 1464 of yacc.c  */
-#line 1547 "compilers/imcc/imcc.y"
+#line 1543 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 78:
 
 /* Line 1464 of yacc.c  */
-#line 1548 "compilers/imcc/imcc.y"
+#line 1544 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 79:
 
 /* Line 1464 of yacc.c  */
-#line 1549 "compilers/imcc/imcc.y"
+#line 1545 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 80:
 
 /* Line 1464 of yacc.c  */
-#line 1551 "compilers/imcc/imcc.y"
+#line 1547 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3914,7 +3910,7 @@
   case 81:
 
 /* Line 1464 of yacc.c  */
-#line 1562 "compilers/imcc/imcc.y"
+#line 1558 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3930,14 +3926,14 @@
   case 82:
 
 /* Line 1464 of yacc.c  */
-#line 1572 "compilers/imcc/imcc.y"
+#line 1568 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 85:
 
 /* Line 1464 of yacc.c  */
-#line 1582 "compilers/imcc/imcc.y"
+#line 1578 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -3958,120 +3954,118 @@
             * sub call; the sub is in r[0] of the first ins
             */
            r1 = IMCC_INFO(interp)->cur_unit->instructions->symregs[0];
-           if (r1 && r1->pcc_sub)
-               r1->pcc_sub->calls_a_sub |= 1;
          }
     break;
 
   case 86:
 
 /* Line 1464 of yacc.c  */
-#line 1610 "compilers/imcc/imcc.y"
+#line 1604 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 87:
 
 /* Line 1464 of yacc.c  */
-#line 1614 "compilers/imcc/imcc.y"
+#line 1608 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 88:
 
 /* Line 1464 of yacc.c  */
-#line 1615 "compilers/imcc/imcc.y"
+#line 1609 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 89:
 
 /* Line 1464 of yacc.c  */
-#line 1619 "compilers/imcc/imcc.y"
+#line 1613 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 90:
 
 /* Line 1464 of yacc.c  */
-#line 1620 "compilers/imcc/imcc.y"
+#line 1614 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 91:
 
 /* Line 1464 of yacc.c  */
-#line 1624 "compilers/imcc/imcc.y"
+#line 1618 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 93:
 
 /* Line 1464 of yacc.c  */
-#line 1629 "compilers/imcc/imcc.y"
+#line 1623 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 94:
 
 /* Line 1464 of yacc.c  */
-#line 1630 "compilers/imcc/imcc.y"
+#line 1624 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 95:
 
 /* Line 1464 of yacc.c  */
-#line 1634 "compilers/imcc/imcc.y"
+#line 1628 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
   case 96:
 
 /* Line 1464 of yacc.c  */
-#line 1635 "compilers/imcc/imcc.y"
+#line 1629 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
   case 97:
 
 /* Line 1464 of yacc.c  */
-#line 1636 "compilers/imcc/imcc.y"
+#line 1630 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
   case 98:
 
 /* Line 1464 of yacc.c  */
-#line 1637 "compilers/imcc/imcc.y"
+#line 1631 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 99:
 
 /* Line 1464 of yacc.c  */
-#line 1638 "compilers/imcc/imcc.y"
+#line 1632 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 100:
 
 /* Line 1464 of yacc.c  */
-#line 1639 "compilers/imcc/imcc.y"
+#line 1633 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
   case 101:
 
 /* Line 1464 of yacc.c  */
-#line 1640 "compilers/imcc/imcc.y"
+#line 1634 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 109:
 
 /* Line 1464 of yacc.c  */
-#line 1652 "compilers/imcc/imcc.y"
+#line 1646 "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));
@@ -4081,7 +4075,7 @@
   case 110:
 
 /* Line 1464 of yacc.c  */
-#line 1657 "compilers/imcc/imcc.y"
+#line 1651 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
@@ -4090,7 +4084,7 @@
   case 111:
 
 /* Line 1464 of yacc.c  */
-#line 1661 "compilers/imcc/imcc.y"
+#line 1655 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
@@ -4099,7 +4093,7 @@
   case 112:
 
 /* Line 1464 of yacc.c  */
-#line 1665 "compilers/imcc/imcc.y"
+#line 1659 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
@@ -4108,7 +4102,7 @@
   case 113:
 
 /* Line 1464 of yacc.c  */
-#line 1669 "compilers/imcc/imcc.y"
+#line 1663 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
@@ -4117,7 +4111,7 @@
   case 114:
 
 /* Line 1464 of yacc.c  */
-#line 1673 "compilers/imcc/imcc.y"
+#line 1667 "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));
@@ -4127,7 +4121,7 @@
   case 115:
 
 /* Line 1464 of yacc.c  */
-#line 1678 "compilers/imcc/imcc.y"
+#line 1672 "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));
@@ -4137,14 +4131,14 @@
   case 116:
 
 /* Line 1464 of yacc.c  */
-#line 1686 "compilers/imcc/imcc.y"
+#line 1680 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 117:
 
 /* Line 1464 of yacc.c  */
-#line 1687 "compilers/imcc/imcc.y"
+#line 1681 "compilers/imcc/imcc.y"
     {
                                  if (IMCC_INFO(interp)->adv_named_id) {
                                      add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -4159,21 +4153,21 @@
   case 118:
 
 /* Line 1464 of yacc.c  */
-#line 1699 "compilers/imcc/imcc.y"
+#line 1693 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 119:
 
 /* Line 1464 of yacc.c  */
-#line 1704 "compilers/imcc/imcc.y"
+#line 1698 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 120:
 
 /* Line 1464 of yacc.c  */
-#line 1706 "compilers/imcc/imcc.y"
+#line 1700 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -4183,21 +4177,21 @@
   case 121:
 
 /* Line 1464 of yacc.c  */
-#line 1713 "compilers/imcc/imcc.y"
+#line 1707 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 122:
 
 /* Line 1464 of yacc.c  */
-#line 1714 "compilers/imcc/imcc.y"
+#line 1708 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 123:
 
 /* Line 1464 of yacc.c  */
-#line 1715 "compilers/imcc/imcc.y"
+#line 1709 "compilers/imcc/imcc.y"
     {
            IdList * const l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -4211,91 +4205,91 @@
   case 124:
 
 /* Line 1464 of yacc.c  */
-#line 1726 "compilers/imcc/imcc.y"
+#line 1720 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 125:
 
 /* Line 1464 of yacc.c  */
-#line 1727 "compilers/imcc/imcc.y"
+#line 1721 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 126:
 
 /* Line 1464 of yacc.c  */
-#line 1731 "compilers/imcc/imcc.y"
+#line 1725 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
   case 127:
 
 /* Line 1464 of yacc.c  */
-#line 1732 "compilers/imcc/imcc.y"
+#line 1726 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 128:
 
 /* Line 1464 of yacc.c  */
-#line 1733 "compilers/imcc/imcc.y"
+#line 1727 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 129:
 
 /* Line 1464 of yacc.c  */
-#line 1734 "compilers/imcc/imcc.y"
+#line 1728 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
   case 130:
 
 /* Line 1464 of yacc.c  */
-#line 1735 "compilers/imcc/imcc.y"
+#line 1729 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
   case 131:
 
 /* Line 1464 of yacc.c  */
-#line 1736 "compilers/imcc/imcc.y"
+#line 1730 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
   case 132:
 
 /* Line 1464 of yacc.c  */
-#line 1737 "compilers/imcc/imcc.y"
+#line 1731 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 133:
 
 /* Line 1464 of yacc.c  */
-#line 1738 "compilers/imcc/imcc.y"
+#line 1732 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 134:
 
 /* Line 1464 of yacc.c  */
-#line 1743 "compilers/imcc/imcc.y"
+#line 1737 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
   case 135:
 
 /* Line 1464 of yacc.c  */
-#line 1745 "compilers/imcc/imcc.y"
+#line 1739 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 136:
 
 /* Line 1464 of yacc.c  */
-#line 1747 "compilers/imcc/imcc.y"
+#line 1741 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
@@ -4305,28 +4299,28 @@
   case 137:
 
 /* Line 1464 of yacc.c  */
-#line 1754 "compilers/imcc/imcc.y"
+#line 1748 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
   case 138:
 
 /* Line 1464 of yacc.c  */
-#line 1756 "compilers/imcc/imcc.y"
+#line 1750 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 139:
 
 /* Line 1464 of yacc.c  */
-#line 1760 "compilers/imcc/imcc.y"
+#line 1754 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 140:
 
 /* Line 1464 of yacc.c  */
-#line 1762 "compilers/imcc/imcc.y"
+#line 1756 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4336,7 +4330,7 @@
   case 141:
 
 /* Line 1464 of yacc.c  */
-#line 1767 "compilers/imcc/imcc.y"
+#line 1761 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4346,14 +4340,14 @@
   case 142:
 
 /* Line 1464 of yacc.c  */
-#line 1774 "compilers/imcc/imcc.y"
+#line 1768 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 143:
 
 /* Line 1464 of yacc.c  */
-#line 1776 "compilers/imcc/imcc.y"
+#line 1770 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4363,7 +4357,7 @@
   case 144:
 
 /* Line 1464 of yacc.c  */
-#line 1781 "compilers/imcc/imcc.y"
+#line 1775 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4373,21 +4367,21 @@
   case 145:
 
 /* Line 1464 of yacc.c  */
-#line 1788 "compilers/imcc/imcc.y"
+#line 1782 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 146:
 
 /* Line 1464 of yacc.c  */
-#line 1792 "compilers/imcc/imcc.y"
+#line 1786 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 147:
 
 /* Line 1464 of yacc.c  */
-#line 1797 "compilers/imcc/imcc.y"
+#line 1791 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
@@ -4397,7 +4391,7 @@
   case 148:
 
 /* Line 1464 of yacc.c  */
-#line 1802 "compilers/imcc/imcc.y"
+#line 1796 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
@@ -4407,28 +4401,28 @@
   case 149:
 
 /* Line 1464 of yacc.c  */
-#line 1809 "compilers/imcc/imcc.y"
+#line 1803 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 150:
 
 /* Line 1464 of yacc.c  */
-#line 1810 "compilers/imcc/imcc.y"
+#line 1804 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 151:
 
 /* Line 1464 of yacc.c  */
-#line 1814 "compilers/imcc/imcc.y"
+#line 1808 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 152:
 
 /* Line 1464 of yacc.c  */
-#line 1816 "compilers/imcc/imcc.y"
+#line 1810 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4443,7 +4437,7 @@
   case 153:
 
 /* Line 1464 of yacc.c  */
-#line 1826 "compilers/imcc/imcc.y"
+#line 1820 "compilers/imcc/imcc.y"
     {
             SymReg * const name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
             add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
@@ -4453,7 +4447,7 @@
   case 154:
 
 /* Line 1464 of yacc.c  */
-#line 1831 "compilers/imcc/imcc.y"
+#line 1825 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4468,7 +4462,7 @@
   case 155:
 
 /* Line 1464 of yacc.c  */
-#line 1841 "compilers/imcc/imcc.y"
+#line 1835 "compilers/imcc/imcc.y"
     {
            SymReg * const name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
@@ -4478,63 +4472,63 @@
   case 158:
 
 /* Line 1464 of yacc.c  */
-#line 1862 "compilers/imcc/imcc.y"
+#line 1856 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 159:
 
 /* Line 1464 of yacc.c  */
-#line 1867 "compilers/imcc/imcc.y"
+#line 1861 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 160:
 
 /* Line 1464 of yacc.c  */
-#line 1868 "compilers/imcc/imcc.y"
+#line 1862 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 161:
 
 /* Line 1464 of yacc.c  */
-#line 1869 "compilers/imcc/imcc.y"
+#line 1863 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 162:
 
 /* Line 1464 of yacc.c  */
-#line 1870 "compilers/imcc/imcc.y"
+#line 1864 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 163:
 
 /* Line 1464 of yacc.c  */
-#line 1871 "compilers/imcc/imcc.y"
+#line 1865 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 164:
 
 /* Line 1464 of yacc.c  */
-#line 1872 "compilers/imcc/imcc.y"
+#line 1866 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 165:
 
 /* Line 1464 of yacc.c  */
-#line 1876 "compilers/imcc/imcc.y"
+#line 1870 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 169:
 
 /* Line 1464 of yacc.c  */
-#line 1887 "compilers/imcc/imcc.y"
+#line 1881 "compilers/imcc/imcc.y"
     {
              Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
              mem_sys_free((yyvsp[(1) - (1)].s));
@@ -4545,14 +4539,14 @@
   case 170:
 
 /* Line 1464 of yacc.c  */
-#line 1897 "compilers/imcc/imcc.y"
+#line 1891 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 171:
 
 /* Line 1464 of yacc.c  */
-#line 1899 "compilers/imcc/imcc.y"
+#line 1893 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -4565,7 +4559,7 @@
   case 172:
 
 /* Line 1464 of yacc.c  */
-#line 1910 "compilers/imcc/imcc.y"
+#line 1904 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -4576,7 +4570,7 @@
   case 173:
 
 /* Line 1464 of yacc.c  */
-#line 1917 "compilers/imcc/imcc.y"
+#line 1911 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -4587,7 +4581,7 @@
   case 174:
 
 /* Line 1464 of yacc.c  */
-#line 1926 "compilers/imcc/imcc.y"
+#line 1920 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_gc_allocate_n_zeroed_typed(interp, 1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
@@ -4598,14 +4592,14 @@
   case 179:
 
 /* Line 1464 of yacc.c  */
-#line 1942 "compilers/imcc/imcc.y"
+#line 1936 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 180:
 
 /* Line 1464 of yacc.c  */
-#line 1943 "compilers/imcc/imcc.y"
+#line 1937 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -4623,7 +4617,7 @@
   case 181:
 
 /* Line 1464 of yacc.c  */
-#line 1956 "compilers/imcc/imcc.y"
+#line 1950 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
                 mem_sys_free((yyvsp[(2) - (4)].s));
@@ -4645,7 +4639,7 @@
   case 182:
 
 /* Line 1464 of yacc.c  */
-#line 1973 "compilers/imcc/imcc.y"
+#line 1967 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
                 mem_sys_free((yyvsp[(2) - (4)].s));
@@ -4663,14 +4657,14 @@
   case 183:
 
 /* Line 1464 of yacc.c  */
-#line 1985 "compilers/imcc/imcc.y"
+#line 1979 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 184:
 
 /* Line 1464 of yacc.c  */
-#line 1986 "compilers/imcc/imcc.y"
+#line 1980 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            IMCC_INFO(interp)->is_def = 0;
@@ -4681,14 +4675,14 @@
   case 186:
 
 /* Line 1464 of yacc.c  */
-#line 1993 "compilers/imcc/imcc.y"
+#line 1987 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 187:
 
 /* Line 1464 of yacc.c  */
-#line 1994 "compilers/imcc/imcc.y"
+#line 1988 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            IMCC_INFO(interp)->is_def = 0;
@@ -4699,7 +4693,7 @@
   case 188:
 
 /* Line 1464 of yacc.c  */
-#line 2000 "compilers/imcc/imcc.y"
+#line 1994 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->tailcall = 1;
@@ -4710,7 +4704,7 @@
   case 189:
 
 /* Line 1464 of yacc.c  */
-#line 2006 "compilers/imcc/imcc.y"
+#line 2000 "compilers/imcc/imcc.y"
     {
             (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
          }
@@ -4719,7 +4713,7 @@
   case 190:
 
 /* Line 1464 of yacc.c  */
-#line 2010 "compilers/imcc/imcc.y"
+#line 2004 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4736,98 +4730,98 @@
   case 191:
 
 /* Line 1464 of yacc.c  */
-#line 2021 "compilers/imcc/imcc.y"
+#line 2015 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 192:
 
 /* Line 1464 of yacc.c  */
-#line 2022 "compilers/imcc/imcc.y"
+#line 2016 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 193:
 
 /* Line 1464 of yacc.c  */
-#line 2023 "compilers/imcc/imcc.y"
+#line 2017 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 196:
 
 /* Line 1464 of yacc.c  */
-#line 2026 "compilers/imcc/imcc.y"
+#line 2020 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 197:
 
 /* Line 1464 of yacc.c  */
-#line 2030 "compilers/imcc/imcc.y"
+#line 2024 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
   case 198:
 
 /* Line 1464 of yacc.c  */
-#line 2031 "compilers/imcc/imcc.y"
+#line 2025 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
   case 199:
 
 /* Line 1464 of yacc.c  */
-#line 2032 "compilers/imcc/imcc.y"
+#line 2026 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
   case 200:
 
 /* Line 1464 of yacc.c  */
-#line 2033 "compilers/imcc/imcc.y"
+#line 2027 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
   case 201:
 
 /* Line 1464 of yacc.c  */
-#line 2038 "compilers/imcc/imcc.y"
+#line 2032 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
   case 202:
 
 /* Line 1464 of yacc.c  */
-#line 2040 "compilers/imcc/imcc.y"
+#line 2034 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  }
     break;
 
   case 203:
 
 /* Line 1464 of yacc.c  */
-#line 2042 "compilers/imcc/imcc.y"
+#line 2036 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); }
     break;
 
   case 204:
 
 /* Line 1464 of yacc.c  */
-#line 2044 "compilers/imcc/imcc.y"
+#line 2038 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
   case 205:
 
 /* Line 1464 of yacc.c  */
-#line 2046 "compilers/imcc/imcc.y"
+#line 2040 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 206:
 
 /* Line 1464 of yacc.c  */
-#line 2049 "compilers/imcc/imcc.y"
+#line 2043 "compilers/imcc/imcc.y"
     {
            add_pcc_result(interp, (yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4838,7 +4832,7 @@
   case 207:
 
 /* Line 1464 of yacc.c  */
-#line 2055 "compilers/imcc/imcc.y"
+#line 2049 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
@@ -4847,7 +4841,7 @@
   case 208:
 
 /* Line 1464 of yacc.c  */
-#line 2059 "compilers/imcc/imcc.y"
+#line 2053 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4857,7 +4851,7 @@
   case 212:
 
 /* Line 1464 of yacc.c  */
-#line 2067 "compilers/imcc/imcc.y"
+#line 2061 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
@@ -4866,189 +4860,189 @@
   case 213:
 
 /* Line 1464 of yacc.c  */
-#line 2074 "compilers/imcc/imcc.y"
+#line 2068 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
   case 214:
 
 /* Line 1464 of yacc.c  */
-#line 2075 "compilers/imcc/imcc.y"
+#line 2069 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 215:
 
 /* Line 1464 of yacc.c  */
-#line 2076 "compilers/imcc/imcc.y"
+#line 2070 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
   case 216:
 
 /* Line 1464 of yacc.c  */
-#line 2080 "compilers/imcc/imcc.y"
+#line 2074 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 217:
 
 /* Line 1464 of yacc.c  */
-#line 2081 "compilers/imcc/imcc.y"
+#line 2075 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 218:
 
 /* Line 1464 of yacc.c  */
-#line 2082 "compilers/imcc/imcc.y"
+#line 2076 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 219:
 
 /* Line 1464 of yacc.c  */
-#line 2083 "compilers/imcc/imcc.y"
+#line 2077 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 220:
 
 /* Line 1464 of yacc.c  */
-#line 2084 "compilers/imcc/imcc.y"
+#line 2078 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 221:
 
 /* Line 1464 of yacc.c  */
-#line 2085 "compilers/imcc/imcc.y"
+#line 2079 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 222:
 
 /* Line 1464 of yacc.c  */
-#line 2086 "compilers/imcc/imcc.y"
+#line 2080 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
   case 223:
 
 /* Line 1464 of yacc.c  */
-#line 2087 "compilers/imcc/imcc.y"
+#line 2081 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 224:
 
 /* Line 1464 of yacc.c  */
-#line 2088 "compilers/imcc/imcc.y"
+#line 2082 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 225:
 
 /* Line 1464 of yacc.c  */
-#line 2089 "compilers/imcc/imcc.y"
+#line 2083 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
   case 226:
 
 /* Line 1464 of yacc.c  */
-#line 2090 "compilers/imcc/imcc.y"
+#line 2084 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 227:
 
 /* Line 1464 of yacc.c  */
-#line 2091 "compilers/imcc/imcc.y"
+#line 2085 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
   case 228:
 
 /* Line 1464 of yacc.c  */
-#line 2092 "compilers/imcc/imcc.y"
+#line 2086 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
   case 229:
 
 /* Line 1464 of yacc.c  */
-#line 2093 "compilers/imcc/imcc.y"
+#line 2087 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
   case 230:
 
 /* Line 1464 of yacc.c  */
-#line 2094 "compilers/imcc/imcc.y"
+#line 2088 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 231:
 
 /* Line 1464 of yacc.c  */
-#line 2095 "compilers/imcc/imcc.y"
+#line 2089 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 232:
 
 /* Line 1464 of yacc.c  */
-#line 2096 "compilers/imcc/imcc.y"
+#line 2090 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 233:
 
 /* Line 1464 of yacc.c  */
-#line 2097 "compilers/imcc/imcc.y"
+#line 2091 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
   case 234:
 
 /* Line 1464 of yacc.c  */
-#line 2098 "compilers/imcc/imcc.y"
+#line 2092 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
   case 235:
 
 /* Line 1464 of yacc.c  */
-#line 2099 "compilers/imcc/imcc.y"
+#line 2093 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
   case 236:
 
 /* Line 1464 of yacc.c  */
-#line 2100 "compilers/imcc/imcc.y"
+#line 2094 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 237:
 
 /* Line 1464 of yacc.c  */
-#line 2101 "compilers/imcc/imcc.y"
+#line 2095 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 238:
 
 /* Line 1464 of yacc.c  */
-#line 2102 "compilers/imcc/imcc.y"
+#line 2096 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 239:
 
 /* Line 1464 of yacc.c  */
-#line 2108 "compilers/imcc/imcc.y"
+#line 2102 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -5059,112 +5053,112 @@
   case 240:
 
 /* Line 1464 of yacc.c  */
-#line 2113 "compilers/imcc/imcc.y"
+#line 2107 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
   case 241:
 
 /* Line 1464 of yacc.c  */
-#line 2120 "compilers/imcc/imcc.y"
+#line 2114 "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 1464 of yacc.c  */
-#line 2124 "compilers/imcc/imcc.y"
+#line 2118 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 243:
 
 /* Line 1464 of yacc.c  */
-#line 2125 "compilers/imcc/imcc.y"
+#line 2119 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 244:
 
 /* Line 1464 of yacc.c  */
-#line 2126 "compilers/imcc/imcc.y"
+#line 2120 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 245:
 
 /* Line 1464 of yacc.c  */
-#line 2127 "compilers/imcc/imcc.y"
+#line 2121 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 246:
 
 /* Line 1464 of yacc.c  */
-#line 2128 "compilers/imcc/imcc.y"
+#line 2122 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 247:
 
 /* Line 1464 of yacc.c  */
-#line 2129 "compilers/imcc/imcc.y"
+#line 2123 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 248:
 
 /* Line 1464 of yacc.c  */
-#line 2130 "compilers/imcc/imcc.y"
+#line 2124 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 249:
 
 /* Line 1464 of yacc.c  */
-#line 2131 "compilers/imcc/imcc.y"
+#line 2125 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 250:
 
 /* Line 1464 of yacc.c  */
-#line 2132 "compilers/imcc/imcc.y"
+#line 2126 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 251:
 
 /* Line 1464 of yacc.c  */
-#line 2133 "compilers/imcc/imcc.y"
+#line 2127 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 252:
 
 /* Line 1464 of yacc.c  */
-#line 2134 "compilers/imcc/imcc.y"
+#line 2128 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 253:
 
 /* Line 1464 of yacc.c  */
-#line 2135 "compilers/imcc/imcc.y"
+#line 2129 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 254:
 
 /* Line 1464 of yacc.c  */
-#line 2136 "compilers/imcc/imcc.y"
+#line 2130 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 255:
 
 /* Line 1464 of yacc.c  */
-#line 2142 "compilers/imcc/imcc.y"
+#line 2136 "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,
@@ -5177,28 +5171,28 @@
   case 256:
 
 /* Line 1464 of yacc.c  */
-#line 2152 "compilers/imcc/imcc.y"
+#line 2146 "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 1464 of yacc.c  */
-#line 2153 "compilers/imcc/imcc.y"
+#line 2147 "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 1464 of yacc.c  */
-#line 2154 "compilers/imcc/imcc.y"
+#line 2148 "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 1464 of yacc.c  */
-#line 2156 "compilers/imcc/imcc.y"
+#line 2150 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -5209,7 +5203,7 @@
   case 260:
 
 /* Line 1464 of yacc.c  */
-#line 2162 "compilers/imcc/imcc.y"
+#line 2156 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             const char * const name = (yyvsp[(3) - (3)].sr)->name;
@@ -5228,7 +5222,7 @@
   case 261:
 
 /* Line 1464 of yacc.c  */
-#line 2176 "compilers/imcc/imcc.y"
+#line 2170 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
@@ -5239,7 +5233,7 @@
   case 262:
 
 /* Line 1464 of yacc.c  */
-#line 2182 "compilers/imcc/imcc.y"
+#line 2176 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
@@ -5250,14 +5244,14 @@
   case 263:
 
 /* Line 1464 of yacc.c  */
-#line 2187 "compilers/imcc/imcc.y"
+#line 2181 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
   case 264:
 
 /* Line 1464 of yacc.c  */
-#line 2193 "compilers/imcc/imcc.y"
+#line 2187 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
@@ -5267,21 +5261,21 @@
   case 265:
 
 /* Line 1464 of yacc.c  */
-#line 2197 "compilers/imcc/imcc.y"
+#line 2191 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
   case 266:
 
 /* Line 1464 of yacc.c  */
-#line 2201 "compilers/imcc/imcc.y"
+#line 2195 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 267:
 
 /* Line 1464 of yacc.c  */
-#line 2203 "compilers/imcc/imcc.y"
+#line 2197 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5296,7 +5290,7 @@
   case 268:
 
 /* Line 1464 of yacc.c  */
-#line 2213 "compilers/imcc/imcc.y"
+#line 2207 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5311,7 +5305,7 @@
   case 269:
 
 /* Line 1464 of yacc.c  */
-#line 2223 "compilers/imcc/imcc.y"
+#line 2217 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -5323,7 +5317,7 @@
   case 270:
 
 /* Line 1464 of yacc.c  */
-#line 2230 "compilers/imcc/imcc.y"
+#line 2224 "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));
@@ -5333,7 +5327,7 @@
   case 271:
 
 /* Line 1464 of yacc.c  */
-#line 2235 "compilers/imcc/imcc.y"
+#line 2229 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -5345,70 +5339,70 @@
   case 272:
 
 /* Line 1464 of yacc.c  */
-#line 2244 "compilers/imcc/imcc.y"
+#line 2238 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 273:
 
 /* Line 1464 of yacc.c  */
-#line 2248 "compilers/imcc/imcc.y"
+#line 2242 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 274:
 
 /* Line 1464 of yacc.c  */
-#line 2249 "compilers/imcc/imcc.y"
+#line 2243 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 275:
 
 /* Line 1464 of yacc.c  */
-#line 2253 "compilers/imcc/imcc.y"
+#line 2247 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;     }
     break;
 
   case 276:
 
 /* Line 1464 of yacc.c  */
-#line 2254 "compilers/imcc/imcc.y"
+#line 2248 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED;    }
     break;
 
   case 277:
 
 /* Line 1464 of yacc.c  */
-#line 2255 "compilers/imcc/imcc.y"
+#line 2249 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 278:
 
 /* Line 1464 of yacc.c  */
-#line 2258 "compilers/imcc/imcc.y"
+#line 2252 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 279:
 
 /* Line 1464 of yacc.c  */
-#line 2259 "compilers/imcc/imcc.y"
+#line 2253 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
   case 280:
 
 /* Line 1464 of yacc.c  */
-#line 2263 "compilers/imcc/imcc.y"
+#line 2257 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 281:
 
 /* Line 1464 of yacc.c  */
-#line 2268 "compilers/imcc/imcc.y"
+#line 2262 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5423,7 +5417,7 @@
   case 282:
 
 /* Line 1464 of yacc.c  */
-#line 2278 "compilers/imcc/imcc.y"
+#line 2272 "compilers/imcc/imcc.y"
     {
             add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
                     mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
@@ -5434,7 +5428,7 @@
   case 283:
 
 /* Line 1464 of yacc.c  */
-#line 2284 "compilers/imcc/imcc.y"
+#line 2278 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5449,7 +5443,7 @@
   case 284:
 
 /* Line 1464 of yacc.c  */
-#line 2294 "compilers/imcc/imcc.y"
+#line 2288 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
@@ -5459,28 +5453,28 @@
   case 285:
 
 /* Line 1464 of yacc.c  */
-#line 2298 "compilers/imcc/imcc.y"
+#line 2292 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 286:
 
 /* Line 1464 of yacc.c  */
-#line 2302 "compilers/imcc/imcc.y"
+#line 2296 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 287:
 
 /* Line 1464 of yacc.c  */
-#line 2303 "compilers/imcc/imcc.y"
+#line 2297 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 288:
 
 /* Line 1464 of yacc.c  */
-#line 2308 "compilers/imcc/imcc.y"
+#line 2302 "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));
          }
@@ -5489,7 +5483,7 @@
   case 289:
 
 /* Line 1464 of yacc.c  */
-#line 2312 "compilers/imcc/imcc.y"
+#line 2306 "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));
          }
@@ -5498,7 +5492,7 @@
   case 290:
 
 /* Line 1464 of yacc.c  */
-#line 2316 "compilers/imcc/imcc.y"
+#line 2310 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
@@ -5507,7 +5501,7 @@
   case 291:
 
 /* Line 1464 of yacc.c  */
-#line 2323 "compilers/imcc/imcc.y"
+#line 2317 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
@@ -5516,7 +5510,7 @@
   case 292:
 
 /* Line 1464 of yacc.c  */
-#line 2327 "compilers/imcc/imcc.y"
+#line 2321 "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));
          }
@@ -5525,7 +5519,7 @@
   case 293:
 
 /* Line 1464 of yacc.c  */
-#line 2331 "compilers/imcc/imcc.y"
+#line 2325 "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));
          }
@@ -5534,91 +5528,91 @@
   case 294:
 
 /* Line 1464 of yacc.c  */
-#line 2337 "compilers/imcc/imcc.y"
+#line 2331 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 295:
 
 /* Line 1464 of yacc.c  */
-#line 2338 "compilers/imcc/imcc.y"
+#line 2332 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 296:
 
 /* Line 1464 of yacc.c  */
-#line 2342 "compilers/imcc/imcc.y"
+#line 2336 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
   case 297:
 
 /* Line 1464 of yacc.c  */
-#line 2343 "compilers/imcc/imcc.y"
+#line 2337 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
   case 298:
 
 /* Line 1464 of yacc.c  */
-#line 2344 "compilers/imcc/imcc.y"
+#line 2338 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
   case 299:
 
 /* Line 1464 of yacc.c  */
-#line 2345 "compilers/imcc/imcc.y"
+#line 2339 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
   case 300:
 
 /* Line 1464 of yacc.c  */
-#line 2346 "compilers/imcc/imcc.y"
+#line 2340 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
   case 301:
 
 /* Line 1464 of yacc.c  */
-#line 2347 "compilers/imcc/imcc.y"
+#line 2341 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
   case 304:
 
 /* Line 1464 of yacc.c  */
-#line 2356 "compilers/imcc/imcc.y"
+#line 2350 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 305:
 
 /* Line 1464 of yacc.c  */
-#line 2357 "compilers/imcc/imcc.y"
+#line 2351 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 306:
 
 /* Line 1464 of yacc.c  */
-#line 2361 "compilers/imcc/imcc.y"
+#line 2355 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
   case 308:
 
 /* Line 1464 of yacc.c  */
-#line 2366 "compilers/imcc/imcc.y"
+#line 2360 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 309:
 
 /* Line 1464 of yacc.c  */
-#line 2368 "compilers/imcc/imcc.y"
+#line 2362 "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);
@@ -5630,7 +5624,7 @@
   case 310:
 
 /* Line 1464 of yacc.c  */
-#line 2375 "compilers/imcc/imcc.y"
+#line 2369 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
@@ -5640,49 +5634,49 @@
   case 312:
 
 /* Line 1464 of yacc.c  */
-#line 2382 "compilers/imcc/imcc.y"
+#line 2376 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 313:
 
 /* Line 1464 of yacc.c  */
-#line 2383 "compilers/imcc/imcc.y"
+#line 2377 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 314:
 
 /* Line 1464 of yacc.c  */
-#line 2387 "compilers/imcc/imcc.y"
+#line 2381 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 315:
 
 /* Line 1464 of yacc.c  */
-#line 2388 "compilers/imcc/imcc.y"
+#line 2382 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 316:
 
 /* Line 1464 of yacc.c  */
-#line 2392 "compilers/imcc/imcc.y"
+#line 2386 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 317:
 
 /* Line 1464 of yacc.c  */
-#line 2393 "compilers/imcc/imcc.y"
+#line 2387 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 322:
 
 /* Line 1464 of yacc.c  */
-#line 2407 "compilers/imcc/imcc.y"
+#line 2401 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
          }
@@ -5691,7 +5685,7 @@
   case 323:
 
 /* Line 1464 of yacc.c  */
-#line 2411 "compilers/imcc/imcc.y"
+#line 2405 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5702,7 +5696,7 @@
   case 324:
 
 /* Line 1464 of yacc.c  */
-#line 2419 "compilers/imcc/imcc.y"
+#line 2413 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
          }
@@ -5711,7 +5705,7 @@
   case 325:
 
 /* Line 1464 of yacc.c  */
-#line 2423 "compilers/imcc/imcc.y"
+#line 2417 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5722,14 +5716,14 @@
   case 326:
 
 /* Line 1464 of yacc.c  */
-#line 2431 "compilers/imcc/imcc.y"
+#line 2425 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 327:
 
 /* Line 1464 of yacc.c  */
-#line 2433 "compilers/imcc/imcc.y"
+#line 2427 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
@@ -5739,7 +5733,7 @@
   case 328:
 
 /* Line 1464 of yacc.c  */
-#line 2441 "compilers/imcc/imcc.y"
+#line 2435 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
          }
@@ -5748,70 +5742,70 @@
   case 329:
 
 /* Line 1464 of yacc.c  */
-#line 2447 "compilers/imcc/imcc.y"
+#line 2441 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
   case 330:
 
 /* Line 1464 of yacc.c  */
-#line 2448 "compilers/imcc/imcc.y"
+#line 2442 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
   case 331:
 
 /* Line 1464 of yacc.c  */
-#line 2449 "compilers/imcc/imcc.y"
+#line 2443 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
   case 332:
 
 /* Line 1464 of yacc.c  */
-#line 2450 "compilers/imcc/imcc.y"
+#line 2444 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
   case 333:
 
 /* Line 1464 of yacc.c  */
-#line 2451 "compilers/imcc/imcc.y"
+#line 2445 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 334:
 
 /* Line 1464 of yacc.c  */
-#line 2455 "compilers/imcc/imcc.y"
+#line 2449 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 335:
 
 /* Line 1464 of yacc.c  */
-#line 2456 "compilers/imcc/imcc.y"
+#line 2450 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 336:
 
 /* Line 1464 of yacc.c  */
-#line 2457 "compilers/imcc/imcc.y"
+#line 2451 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 337:
 
 /* Line 1464 of yacc.c  */
-#line 2458 "compilers/imcc/imcc.y"
+#line 2452 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
 
 
 /* Line 1464 of yacc.c  */
-#line 5804 "compilers/imcc/imcparser.c"
+#line 5798 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -6023,7 +6017,7 @@
 
 
 /* Line 1684 of yacc.c  */
-#line 2464 "compilers/imcc/imcc.y"
+#line 2458 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: trunk/compilers/imcc/imcparser.h
==============================================================================
--- trunk/compilers/imcc/imcparser.h	Sun May  9 21:09:50 2010	(r46443)
+++ trunk/compilers/imcc/imcparser.h	Sun May  9 21:23:31 2010	(r46444)
@@ -295,7 +295,7 @@
 {
 
 /* Line 1685 of yacc.c  */
-#line 1072 "compilers/imcc/imcc.y"
+#line 1068 "compilers/imcc/imcc.y"
 
     IdList * idlist;
     int t;

Modified: trunk/compilers/imcc/parser_util.c
==============================================================================
--- trunk/compilers/imcc/parser_util.c	Sun May  9 21:09:50 2010	(r46443)
+++ trunk/compilers/imcc/parser_util.c	Sun May  9 21:23:31 2010	(r46444)
@@ -474,13 +474,7 @@
                 IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "Cannot yield from non-continuation\n");
 
-            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub
-                |= 1 | ITPCCYIELD;
-        }
-        else if ((strncmp(name, "invoke", 6) == 0) ||
-                 (strncmp(name, "callmethod", 10) == 0)) {
-            if (IMCC_INFO(interp)->cur_unit->type & IMC_PCCSUB)
-                IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
+            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->yield = 1;
         }
 
         /* set up branch flags

Modified: trunk/compilers/imcc/pbc.c
==============================================================================
--- trunk/compilers/imcc/pbc.c	Sun May  9 21:09:50 2010	(r46443)
+++ trunk/compilers/imcc/pbc.c	Sun May  9 21:23:31 2010	(r46444)
@@ -1270,7 +1270,7 @@
         IMCC_INFO(interp)->globals->cs->subs->unit;
 
     INTVAL               type         =
-        (r->pcc_sub->calls_a_sub & ITPCCYIELD) ?
+        (r->pcc_sub->yield) ?
             enum_class_Coroutine : enum_class_Sub;
 
     int                  i;

Modified: trunk/compilers/imcc/symreg.h
==============================================================================
--- trunk/compilers/imcc/symreg.h	Sun May  9 21:09:50 2010	(r46443)
+++ trunk/compilers/imcc/symreg.h	Sun May  9 21:23:31 2010	(r46444)
@@ -450,7 +450,7 @@
     int     nargs;
     int     nret;
     int     nmulti;
-    int     calls_a_sub;
+    int     yield;
     int     tailcall;
     int     label;
     INTVAL  pragma;


More information about the parrot-commits mailing list