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

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

From:
tewk
Date:
December 11, 2008 12:01
Subject:
[svn:parrot] r33806 - in trunk: compilers/imcc t/compilers/imcc/syn t/pmc
Message ID:
20081211200114.613F9CB9AF@x12.develooper.com
Author: tewk
Date: Thu Dec 11 12:01:13 2008
New Revision: 33806

Modified:
   trunk/compilers/imcc/imcc.y
   trunk/compilers/imcc/imcparser.c
   trunk/compilers/imcc/imcparser.h
   trunk/compilers/imcc/pbc.c
   trunk/compilers/imcc/symreg.h
   trunk/t/compilers/imcc/syn/subflags.t
   trunk/t/pmc/key.t

Log:
[subid] passes test 25 now


Modified: trunk/compilers/imcc/imcc.y
==============================================================================
--- trunk/compilers/imcc/imcc.y	(original)
+++ trunk/compilers/imcc/imcc.y	Thu Dec 11 12:01:13 2008
@@ -325,7 +325,7 @@
             if (!ascii)
                 rhs->type |= VT_ENCODED;
 
-            rhs->usage    = U_FIXUP;
+            rhs->usage    = U_FIXUP | U_SUBID_LOOKUP;;
             break;
         default:
             rhs = mk_const(interp, name, 'P');
@@ -381,7 +381,7 @@
         if (!ascii)
             rhs->type |= VT_ENCODED;
 
-        rhs->usage    = U_FIXUP;
+        rhs->usage    = U_FIXUP | U_SUBID_LOOKUP;
     }
     else {
         rhs = mk_const(interp, const_name, 'P');
@@ -992,7 +992,14 @@
          {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, $3);
          }
-     sub_proto '\n'            { IMCC_INFO(interp)->cur_call->pcc_sub->pragma = $5; }
+     sub_proto '\n'            
+        { 
+          IMCC_INFO(interp)->cur_call->pcc_sub->pragma = $5; 
+          if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) {
+            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup(
+            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->name);
+          }
+        }
      sub_params
      sub_body  ESUB            { $$ = 0; IMCC_INFO(interp)->cur_call = NULL; }
    ;
@@ -1107,15 +1114,10 @@
          {
            $$ = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
-           /*
-           IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes($3);
-           mem_sys_free($3);
-           */
          }
    | SUBID '(' any_string ')'
          {
            $$ = 0;
-           /* IMCC_INFO(interp)->cur_unit->subid = $3; */
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, $3, 'S');
            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes($3);
            mem_sys_free($3);

Modified: trunk/compilers/imcc/imcparser.c
==============================================================================
--- trunk/compilers/imcc/imcparser.c	(original)
+++ trunk/compilers/imcc/imcparser.c	Thu Dec 11 12:01:13 2008
@@ -1,3 +1,14 @@
+/* ex: set ro ft=c:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from 'compilers/imcc/imcc.y'
+ * by tools/build/fixup_gen_file.pl.
+ *
+ * Any changes made here will be lost!
+ *
+ */
+/* HEADERIZER HFILE: none */
+/* HEADERIZER STOP */
 /* A Bison parser, made by GNU Bison 2.3.  */
 
 /* Skeleton implementation for Bison's Yacc-like parsers in C
@@ -638,7 +649,7 @@
             if (!ascii)
                 rhs->type |= VT_ENCODED;
 
-            rhs->usage    = U_FIXUP;
+            rhs->usage    = U_FIXUP | U_SUBID_LOOKUP;;
             break;
         default:
             rhs = mk_const(interp, name, 'P');
@@ -694,7 +705,7 @@
         if (!ascii)
             rhs->type |= VT_ENCODED;
 
-        rhs->usage    = U_FIXUP;
+        rhs->usage    = U_FIXUP | U_SUBID_LOOKUP;
     }
     else {
         rhs = mk_const(interp, const_name, 'P');
@@ -1472,36 +1483,36 @@
      861,   870,   870,   876,   876,   883,   884,   888,   889,   893,
      894,   895,   896,   897,   898,   899,   902,   902,   911,   910,
      922,   926,   934,   938,   942,   942,   954,   956,   960,   975,
-     983,   988,   992,   995,   987,  1001,  1002,  1003,  1016,  1016,
-    1020,  1034,  1038,  1044,  1053,  1059,  1068,  1074,  1083,  1089,
-    1098,  1106,  1115,  1127,  1130,  1135,  1143,  1144,  1145,  1146,
-    1147,  1158,  1169,  1172,  1174,  1179,  1178,  1211,  1212,  1216,
-    1217,  1221,  1222,  1226,  1227,  1231,  1232,  1233,  1234,  1235,
-    1236,  1237,  1238,  1239,  1240,  1241,  1242,  1243,  1244,  1248,
-    1253,  1257,  1262,  1266,  1270,  1275,  1284,  1285,  1289,  1294,
-    1295,  1303,  1304,  1304,  1319,  1320,  1324,  1325,  1326,  1327,
-    1328,  1329,  1334,  1334,  1337,  1345,  1345,  1351,  1352,  1357,
-    1365,  1366,  1371,  1379,  1383,  1388,  1387,  1400,  1401,  1405,
-    1406,  1416,  1420,  1430,  1438,  1439,  1451,  1455,  1457,  1458,
-    1459,  1460,  1464,  1465,  1469,  1470,  1474,  1483,  1484,  1495,
-    1502,  1511,  1521,  1522,  1527,  1528,  1529,  1529,  1545,  1549,
-    1549,  1556,  1557,  1557,  1563,  1569,  1570,  1582,  1583,  1584,
-    1585,  1586,  1587,  1591,  1592,  1593,  1594,  1598,  1611,  1613,
-    1615,  1617,  1619,  1621,  1623,  1625,  1627,  1629,  1631,  1633,
-    1635,  1639,  1641,  1643,  1646,  1653,  1652,  1661,  1662,  1663,
-    1664,  1672,  1673,  1674,  1678,  1679,  1680,  1681,  1682,  1683,
-    1684,  1685,  1686,  1687,  1688,  1689,  1690,  1691,  1692,  1693,
-    1694,  1695,  1696,  1697,  1698,  1699,  1700,  1706,  1705,  1717,
-    1724,  1725,  1726,  1727,  1728,  1729,  1730,  1731,  1732,  1733,
-    1734,  1735,  1736,  1741,  1752,  1753,  1754,  1755,  1761,  1773,
-    1779,  1785,  1784,  1793,  1794,  1804,  1814,  1820,  1829,  1833,
-    1834,  1838,  1839,  1842,  1846,  1850,  1860,  1865,  1875,  1880,
-    1884,  1885,  1889,  1893,  1897,  1904,  1908,  1912,  1919,  1920,
-    1924,  1925,  1926,  1927,  1928,  1929,  1933,  1934,  1938,  1939,
-    1943,  1944,  1948,  1949,  1956,  1963,  1964,  1965,  1969,  1970,
-    1974,  1975,  1979,  1980,  1984,  1985,  1989,  1989,  2002,  2002,
-    2015,  2016,  2021,  2021,  2030,  2036,  2043,  2044,  2048,  2049,
-    2050,  2051,  2052,  2056,  2057,  2058,  2059
+     983,   988,   992,   996,   987,  1008,  1009,  1010,  1023,  1023,
+    1027,  1041,  1045,  1051,  1060,  1066,  1075,  1081,  1090,  1096,
+    1105,  1113,  1118,  1129,  1132,  1137,  1145,  1146,  1147,  1148,
+    1149,  1160,  1171,  1174,  1176,  1181,  1180,  1213,  1214,  1218,
+    1219,  1223,  1224,  1228,  1229,  1233,  1234,  1235,  1236,  1237,
+    1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,  1246,  1250,
+    1255,  1259,  1264,  1268,  1272,  1277,  1286,  1287,  1291,  1296,
+    1297,  1305,  1306,  1306,  1321,  1322,  1326,  1327,  1328,  1329,
+    1330,  1331,  1336,  1336,  1339,  1347,  1347,  1353,  1354,  1359,
+    1367,  1368,  1373,  1381,  1385,  1390,  1389,  1402,  1403,  1407,
+    1408,  1418,  1422,  1432,  1440,  1441,  1453,  1457,  1459,  1460,
+    1461,  1462,  1466,  1467,  1471,  1472,  1476,  1485,  1486,  1497,
+    1504,  1513,  1523,  1524,  1529,  1530,  1531,  1531,  1547,  1551,
+    1551,  1558,  1559,  1559,  1565,  1571,  1572,  1584,  1585,  1586,
+    1587,  1588,  1589,  1593,  1594,  1595,  1596,  1600,  1613,  1615,
+    1617,  1619,  1621,  1623,  1625,  1627,  1629,  1631,  1633,  1635,
+    1637,  1641,  1643,  1645,  1648,  1655,  1654,  1663,  1664,  1665,
+    1666,  1674,  1675,  1676,  1680,  1681,  1682,  1683,  1684,  1685,
+    1686,  1687,  1688,  1689,  1690,  1691,  1692,  1693,  1694,  1695,
+    1696,  1697,  1698,  1699,  1700,  1701,  1702,  1708,  1707,  1719,
+    1726,  1727,  1728,  1729,  1730,  1731,  1732,  1733,  1734,  1735,
+    1736,  1737,  1738,  1743,  1754,  1755,  1756,  1757,  1763,  1775,
+    1781,  1787,  1786,  1795,  1796,  1806,  1816,  1822,  1831,  1835,
+    1836,  1840,  1841,  1844,  1848,  1852,  1862,  1867,  1877,  1882,
+    1886,  1887,  1891,  1895,  1899,  1906,  1910,  1914,  1921,  1922,
+    1926,  1927,  1928,  1929,  1930,  1931,  1935,  1936,  1940,  1941,
+    1945,  1946,  1950,  1951,  1958,  1965,  1966,  1967,  1971,  1972,
+    1976,  1977,  1981,  1982,  1986,  1987,  1991,  1991,  2004,  2004,
+    2017,  2018,  2023,  2023,  2032,  2038,  2045,  2046,  2050,  2051,
+    2052,  2053,  2054,  2058,  2059,  2060,  2061
 };
 #endif
 
@@ -2866,17 +2877,17 @@
     {
         case 2:
 #line 781 "compilers/imcc/imcc.y"
-    { if (yynerrs) YYABORT; (yyval.i) = 0; ;}
+    { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
 #line 790 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
 #line 791 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
@@ -2885,7 +2896,7 @@
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = 0;
-         ;}
+         }
     break;
 
   case 8:
@@ -2894,32 +2905,32 @@
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = 0;
-         ;}
+         }
     break;
 
   case 9:
 #line 804 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 10:
 #line 805 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 11:
 #line 806 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 12:
 #line 807 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 13:
 #line 811 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 14:
@@ -2928,7 +2939,7 @@
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
            mem_sys_free((yyvsp[(2) - (3)].s));
-         ;}
+         }
     break;
 
   case 15:
@@ -2936,14 +2947,14 @@
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            set_filename(interp, (yyvsp[(4) - (5)].s));
-         ;}
+         }
     break;
 
   case 16:
 #line 827 "compilers/imcc/imcc.y"
     {
            set_filename(interp, (yyvsp[(2) - (3)].s));
-         ;}
+         }
     break;
 
   case 17:
@@ -2955,7 +2966,7 @@
 
             IMCC_INFO(interp)->cur_namespace = NULL;
             (yyval.t) = 0;
-         ;}
+         }
     break;
 
   case 18:
@@ -2973,12 +2984,12 @@
             Parrot_register_HLL_type(interp, ctx->current_HLL,
                 built_in_type, language_type);
             (yyval.t) = 0;
-         ;}
+         }
     break;
 
   case 19:
 #line 861 "compilers/imcc/imcc.y"
-    { is_def = 1; ;}
+    { is_def = 1; }
     break;
 
   case 20:
@@ -2987,12 +2998,12 @@
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
              mem_sys_free((yyvsp[(4) - (6)].s));
              is_def = 0;
-         ;}
+         }
     break;
 
   case 21:
 #line 870 "compilers/imcc/imcc.y"
-    { is_def=1; ;}
+    { is_def=1; }
     break;
 
   case 22:
@@ -3000,12 +3011,12 @@
     {
            (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;
-         ;}
+         }
     break;
 
   case 23:
 #line 876 "compilers/imcc/imcc.y"
-    { is_def=1; ;}
+    { is_def=1; }
     break;
 
   case 24:
@@ -3013,37 +3024,37 @@
     {
            (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;
-         ;}
+         }
     break;
 
   case 29:
 #line 893 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  ;}
+    { (yyval.i) = 0;  }
     break;
 
   case 30:
 #line 894 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  ;}
+    { (yyval.i) = 0;  }
     break;
 
   case 31:
 #line 895 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  ;}
+    { (yyval.i) = 0;  }
     break;
 
   case 32:
 #line 896 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  ;}
+    { (yyval.i) = 0;  }
     break;
 
   case 33:
 #line 897 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 36:
 #line 902 "compilers/imcc/imcc.y"
-    { clear_state(interp); ;}
+    { clear_state(interp); }
     break;
 
   case 37:
@@ -3053,7 +3064,7 @@
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
                     IMCC_INFO(interp)->nargs, IMCC_INFO(interp) -> keyvec, 1);
            /* XXX: can't seem to mem_sys_free($1) here */
-         ;}
+         }
     break;
 
   case 38:
@@ -3061,7 +3072,7 @@
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
-         ;}
+         }
     break;
 
   case 39:
@@ -3071,14 +3082,14 @@
                     IMCC_INFO(interp)->cur_unit,
                     mk_sub_label(interp, (yyvsp[(4) - (4)].s)));
            IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(3) - (4)].t);
-         ;}
+         }
     break;
 
   case 40:
 #line 923 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
-         ;}
+         }
     break;
 
   case 41:
@@ -3089,17 +3100,17 @@
            (yyval.i) = 0;
            mem_sys_free((yyvsp[(2) - (4)].s));
            mem_sys_free((yyvsp[(4) - (4)].s));
-         ;}
+         }
     break;
 
   case 42:
 #line 934 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;;}
+    { (yyval.i) = 0;}
     break;
 
   case 44:
 #line 942 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); ;}
+    { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 45:
@@ -3110,7 +3121,7 @@
                          emit_flush(interp);
            */
            (yyval.i) = 0;
-         ;}
+         }
     break;
 
   case 48:
@@ -3125,7 +3136,7 @@
            IMCC_INFO(interp)->cur_namespace = (yyvsp[(2) - (3)].sr);
            if (re_open)
                IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
-         ;}
+         }
     break;
 
   case 49:
@@ -3136,50 +3147,56 @@
                     "Slice not allowed in namespace.");
 
             (yyval.sr) = (yyvsp[(2) - (3)].sr);
-        ;}
+        }
     break;
 
   case 50:
 #line 983 "compilers/imcc/imcc.y"
-    { (yyval.sr) = NULL; ;}
+    { (yyval.sr) = NULL; }
     break;
 
   case 51:
 #line 988 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
-         ;}
+         }
     break;
 
   case 52:
 #line 992 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 53:
-#line 995 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t); ;}
+#line 996 "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) {
+            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup(
+            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->name);
+          }
+        }
     break;
 
   case 54:
-#line 997 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; ;}
+#line 1004 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 55:
-#line 1001 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+#line 1008 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 56:
-#line 1002 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+#line 1009 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 57:
-#line 1004 "compilers/imcc/imcc.y"
+#line 1011 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                  add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3188,21 +3205,21 @@
            }
            else
                add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 58:
-#line 1016 "compilers/imcc/imcc.y"
-    { is_def=1; ;}
+#line 1023 "compilers/imcc/imcc.y"
+    { is_def=1; }
     break;
 
   case 59:
-#line 1016 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(3) - (3)].sr); is_def=0; ;}
+#line 1023 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(3) - (3)].sr); is_def=0; }
     break;
 
   case 60:
-#line 1021 "compilers/imcc/imcc.y"
+#line 1028 "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));
@@ -3210,162 +3227,157 @@
                (yyval.sr) = mk_ident(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
            (yyval.sr)->type |= (yyvsp[(3) - (3)].t);
            mem_sys_free((yyvsp[(2) - (3)].s));
-          ;}
+          }
     break;
 
   case 61:
-#line 1034 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+#line 1041 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 62:
-#line 1039 "compilers/imcc/imcc.y"
+#line 1046 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
            mem_sys_free((yyvsp[(3) - (4)].s));
-         ;}
+         }
     break;
 
   case 63:
-#line 1045 "compilers/imcc/imcc.y"
+#line 1052 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
            mem_sys_free((yyvsp[(3) - (4)].s));
-         ;}
+         }
     break;
 
   case 64:
-#line 1054 "compilers/imcc/imcc.y"
+#line 1061 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
-         ;}
+         }
     break;
 
   case 65:
-#line 1060 "compilers/imcc/imcc.y"
+#line 1067 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
-         ;}
+         }
     break;
 
   case 66:
-#line 1069 "compilers/imcc/imcc.y"
+#line 1076 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
            IMCC_INFO(interp)->cur_unit->is_method = 1;
-         ;}
+         }
     break;
 
   case 67:
-#line 1075 "compilers/imcc/imcc.y"
+#line 1082 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->is_method = 1;
-         ;}
+         }
     break;
 
   case 68:
-#line 1084 "compilers/imcc/imcc.y"
+#line 1091 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
-         ;}
+         }
     break;
 
   case 69:
-#line 1090 "compilers/imcc/imcc.y"
+#line 1097 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
-         ;}
+         }
     break;
 
   case 70:
-#line 1099 "compilers/imcc/imcc.y"
+#line 1106 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
-         ;}
+         }
     break;
 
   case 71:
-#line 1107 "compilers/imcc/imcc.y"
+#line 1114 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
-           /*
-           IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes($3);
-           mem_sys_free($3);
-           */
-         ;}
+         }
     break;
 
   case 72:
-#line 1116 "compilers/imcc/imcc.y"
+#line 1119 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
-           /* IMCC_INFO(interp)->cur_unit->subid = $3; */
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes((yyvsp[(3) - (4)].s));
            mem_sys_free((yyvsp[(3) - (4)].s));
-         ;}
+         }
     break;
 
   case 73:
-#line 1127 "compilers/imcc/imcc.y"
+#line 1129 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
-         ;}
+         }
     break;
 
   case 74:
-#line 1131 "compilers/imcc/imcc.y"
+#line 1133 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 75:
-#line 1136 "compilers/imcc/imcc.y"
+#line 1138 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 76:
-#line 1143 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); ;}
+#line 1145 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 77:
-#line 1144 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); ;}
+#line 1146 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 78:
-#line 1145 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, "PMC",      'S'); ;}
+#line 1147 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 79:
-#line 1146 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, "STRING",   'S'); ;}
+#line 1148 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 80:
-#line 1148 "compilers/imcc/imcc.y"
+#line 1150 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3375,11 +3387,11 @@
            }
            mem_sys_free((yyvsp[(1) - (1)].s));
            (yyval.sr) = r;
-         ;}
+         }
     break;
 
   case 81:
-#line 1159 "compilers/imcc/imcc.y"
+#line 1161 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3389,16 +3401,16 @@
            }
            mem_sys_free((yyvsp[(1) - (1)].s));
            (yyval.sr) = r;
-         ;}
+         }
     break;
 
   case 82:
-#line 1169 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (3)].sr); ;}
+#line 1171 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 85:
-#line 1179 "compilers/imcc/imcc.y"
+#line 1181 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -3421,177 +3433,177 @@
            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 1207 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; ;}
+#line 1209 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 87:
-#line 1211 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; ;}
+#line 1213 "compilers/imcc/imcc.y"
+    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 88:
-#line 1212 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; ;}
+#line 1214 "compilers/imcc/imcc.y"
+    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 89:
-#line 1216 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL; ;}
+#line 1218 "compilers/imcc/imcc.y"
+    { (yyval.i) = NULL; }
     break;
 
   case 90:
-#line 1217 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); ;}
+#line 1219 "compilers/imcc/imcc.y"
+    { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 91:
-#line 1221 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+#line 1223 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 93:
-#line 1226 "compilers/imcc/imcc.y"
-    { (yyval.t) = (yyvsp[(1) - (1)].t); ;}
+#line 1228 "compilers/imcc/imcc.y"
+    { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 94:
-#line 1227 "compilers/imcc/imcc.y"
-    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); ;}
+#line 1229 "compilers/imcc/imcc.y"
+    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 95:
-#line 1231 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_LOAD; ;}
+#line 1233 "compilers/imcc/imcc.y"
+    { (yyval.t) = P_LOAD; }
     break;
 
   case 96:
-#line 1232 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_INIT; ;}
+#line 1234 "compilers/imcc/imcc.y"
+    { (yyval.t) = P_INIT; }
     break;
 
   case 97:
-#line 1233 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_MAIN; ;}
+#line 1235 "compilers/imcc/imcc.y"
+    { (yyval.t) = P_MAIN; }
     break;
 
   case 98:
-#line 1234 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_IMMEDIATE; ;}
+#line 1236 "compilers/imcc/imcc.y"
+    { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 99:
-#line 1235 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_POSTCOMP; ;}
+#line 1237 "compilers/imcc/imcc.y"
+    { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 100:
-#line 1236 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_ANON; ;}
+#line 1238 "compilers/imcc/imcc.y"
+    { (yyval.t) = P_ANON; }
     break;
 
   case 101:
-#line 1237 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_NEED_LEX; ;}
+#line 1239 "compilers/imcc/imcc.y"
+    { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 109:
-#line 1249 "compilers/imcc/imcc.y"
+#line 1251 "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));
-         ;}
+         }
     break;
 
   case 110:
-#line 1254 "compilers/imcc/imcc.y"
+#line 1256 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 111:
-#line 1258 "compilers/imcc/imcc.y"
+#line 1260 "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;
-         ;}
+         }
     break;
 
   case 112:
-#line 1263 "compilers/imcc/imcc.y"
+#line 1265 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 113:
-#line 1267 "compilers/imcc/imcc.y"
+#line 1269 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
-         ;}
+         }
     break;
 
   case 114:
-#line 1271 "compilers/imcc/imcc.y"
+#line 1273 "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));
-         ;}
+         }
     break;
 
   case 115:
-#line 1276 "compilers/imcc/imcc.y"
+#line 1278 "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));
-         ;}
+         }
     break;
 
   case 116:
-#line 1284 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+#line 1286 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 117:
-#line 1285 "compilers/imcc/imcc.y"
-    { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); ;}
+#line 1287 "compilers/imcc/imcc.y"
+    { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
     break;
 
   case 118:
-#line 1289 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (2)].sr); ;}
+#line 1291 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 119:
-#line 1294 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+#line 1296 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 120:
-#line 1296 "compilers/imcc/imcc.y"
+#line 1298 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 121:
-#line 1303 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); ;}
+#line 1305 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 122:
-#line 1304 "compilers/imcc/imcc.y"
-    { is_def=1; ;}
+#line 1306 "compilers/imcc/imcc.y"
+    { is_def=1; }
     break;
 
   case 123:
-#line 1305 "compilers/imcc/imcc.y"
+#line 1307 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -3602,162 +3614,162 @@
            UNUSED(ignored);
            is_def=0;
            (yyval.sr)=0;
-         ;}
+         }
     break;
 
   case 124:
-#line 1319 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+#line 1321 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 125:
-#line 1320 "compilers/imcc/imcc.y"
-    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); ;}
+#line 1322 "compilers/imcc/imcc.y"
+    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 126:
-#line 1324 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_FLAT;   ;}
+#line 1326 "compilers/imcc/imcc.y"
+    { (yyval.t) = VT_FLAT;   }
     break;
 
   case 127:
-#line 1325 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_OPTIONAL; ;}
+#line 1327 "compilers/imcc/imcc.y"
+    { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 128:
-#line 1326 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_OPT_FLAG; ;}
+#line 1328 "compilers/imcc/imcc.y"
+    { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 129:
-#line 1327 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_NAMED; ;}
+#line 1329 "compilers/imcc/imcc.y"
+    { (yyval.t) = VT_NAMED; }
     break;
 
   case 130:
-#line 1328 "compilers/imcc/imcc.y"
-    { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; ;}
+#line 1330 "compilers/imcc/imcc.y"
+    { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 131:
-#line 1329 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_UNIQUE_REG; ;}
+#line 1331 "compilers/imcc/imcc.y"
+    { (yyval.t) = VT_UNIQUE_REG; }
     break;
 
   case 132:
-#line 1334 "compilers/imcc/imcc.y"
-    { begin_return_or_yield(interp, 0); ;}
+#line 1336 "compilers/imcc/imcc.y"
+    { begin_return_or_yield(interp, 0); }
     break;
 
   case 133:
-#line 1336 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; ;}
+#line 1338 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 134:
-#line 1338 "compilers/imcc/imcc.y"
+#line 1340 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
-         ;}
+         }
     break;
 
   case 135:
-#line 1345 "compilers/imcc/imcc.y"
-    { begin_return_or_yield(interp, 1); ;}
+#line 1347 "compilers/imcc/imcc.y"
+    { begin_return_or_yield(interp, 1); }
     break;
 
   case 136:
-#line 1347 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; ;}
+#line 1349 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 137:
-#line 1351 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+#line 1353 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 138:
-#line 1353 "compilers/imcc/imcc.y"
+#line 1355 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
-         ;}
+         }
     break;
 
   case 139:
-#line 1358 "compilers/imcc/imcc.y"
+#line 1360 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 140:
-#line 1365 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+#line 1367 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 141:
-#line 1367 "compilers/imcc/imcc.y"
+#line 1369 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
-         ;}
+         }
     break;
 
   case 142:
-#line 1372 "compilers/imcc/imcc.y"
+#line 1374 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 143:
-#line 1379 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); ;}
+#line 1381 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 144:
-#line 1383 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); ;}
+#line 1385 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 145:
-#line 1388 "compilers/imcc/imcc.y"
+#line 1390 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
-        ;}
+        }
     break;
 
   case 146:
-#line 1393 "compilers/imcc/imcc.y"
+#line 1395 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
-        ;}
+        }
     break;
 
   case 147:
-#line 1400 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+#line 1402 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 148:
-#line 1401 "compilers/imcc/imcc.y"
-    { (yyval.t) = 1; ;}
+#line 1403 "compilers/imcc/imcc.y"
+    { (yyval.t) = 1; }
     break;
 
   case 149:
-#line 1405 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+#line 1407 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; }
     break;
 
   case 150:
-#line 1407 "compilers/imcc/imcc.y"
+#line 1409 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3766,18 +3778,18 @@
            }
            else
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 151:
-#line 1417 "compilers/imcc/imcc.y"
+#line 1419 "compilers/imcc/imcc.y"
     {
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 152:
-#line 1421 "compilers/imcc/imcc.y"
+#line 1423 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3786,119 +3798,119 @@
              }
              else
                  add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 153:
-#line 1431 "compilers/imcc/imcc.y"
+#line 1433 "compilers/imcc/imcc.y"
     {
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
-         ;}
+         }
     break;
 
   case 156:
-#line 1451 "compilers/imcc/imcc.y"
-    { clear_state(interp); ;}
+#line 1453 "compilers/imcc/imcc.y"
+    { clear_state(interp); }
     break;
 
   case 157:
-#line 1456 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(2) - (2)].i); ;}
+#line 1458 "compilers/imcc/imcc.y"
+    { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 158:
-#line 1457 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+#line 1459 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; }
     break;
 
   case 159:
-#line 1458 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+#line 1460 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; }
     break;
 
   case 160:
-#line 1459 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+#line 1461 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; }
     break;
 
   case 161:
-#line 1460 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+#line 1462 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; }
     break;
 
   case 162:
-#line 1464 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL; ;}
+#line 1466 "compilers/imcc/imcc.y"
+    { (yyval.i) = NULL; }
     break;
 
   case 166:
-#line 1475 "compilers/imcc/imcc.y"
+#line 1477 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
-         ;}
+         }
     break;
 
   case 167:
-#line 1483 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(2) - (3)].i); ;}
+#line 1485 "compilers/imcc/imcc.y"
+    { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 168:
-#line 1485 "compilers/imcc/imcc.y"
+#line 1487 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
                YYABORT;
            }
            yyerrok;
-         ;}
+         }
     break;
 
   case 169:
-#line 1496 "compilers/imcc/imcc.y"
+#line 1498 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
            (yyval.idlist) = l;
-         ;}
+         }
     break;
 
   case 170:
-#line 1503 "compilers/imcc/imcc.y"
+#line 1505 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
            (yyval.idlist) = l;
-         ;}
+         }
     break;
 
   case 171:
-#line 1512 "compilers/imcc/imcc.y"
+#line 1514 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
            l->unique_reg   = (yyvsp[(2) - (2)].t);
            (yyval.idlist) = l;
-         ;}
+         }
     break;
 
   case 172:
-#line 1521 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+#line 1523 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 173:
-#line 1522 "compilers/imcc/imcc.y"
-    { (yyval.t) = 1; ;}
+#line 1524 "compilers/imcc/imcc.y"
+    { (yyval.t) = 1; }
     break;
 
   case 176:
-#line 1529 "compilers/imcc/imcc.y"
-    { is_def=1; ;}
+#line 1531 "compilers/imcc/imcc.y"
+    { is_def=1; }
     break;
 
   case 177:
-#line 1530 "compilers/imcc/imcc.y"
+#line 1532 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -3913,60 +3925,60 @@
                mem_sys_free(l1);
            }
            is_def=0; (yyval.i)=0;
-         ;}
+         }
     break;
 
   case 178:
-#line 1546 "compilers/imcc/imcc.y"
+#line 1548 "compilers/imcc/imcc.y"
     {
            set_lexical(interp, (yyvsp[(4) - (4)].sr), (yyvsp[(2) - (4)].s)); (yyval.i) = 0;
-         ;}
+         }
     break;
 
   case 179:
-#line 1549 "compilers/imcc/imcc.y"
-    { is_def=1; ;}
+#line 1551 "compilers/imcc/imcc.y"
+    { is_def=1; }
     break;
 
   case 180:
-#line 1550 "compilers/imcc/imcc.y"
+#line 1552 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            is_def=0;
            mem_sys_free((yyvsp[(4) - (6)].s));
-         ;}
+         }
     break;
 
   case 182:
-#line 1557 "compilers/imcc/imcc.y"
-    { is_def=1; ;}
+#line 1559 "compilers/imcc/imcc.y"
+    { is_def=1; }
     break;
 
   case 183:
-#line 1558 "compilers/imcc/imcc.y"
+#line 1560 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            is_def=0;
            mem_sys_free((yyvsp[(4) - (6)].s));
-         ;}
+         }
     break;
 
   case 184:
-#line 1564 "compilers/imcc/imcc.y"
+#line 1566 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
            IMCC_INFO(interp)->cur_call = NULL;
-         ;}
+         }
     break;
 
   case 185:
-#line 1569 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr)); ;}
+#line 1571 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 186:
-#line 1571 "compilers/imcc/imcc.y"
+#line 1573 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3977,51 +3989,51 @@
                     IMCC_INFO(interp)->keyvec,
                     1);
            mem_sys_free((yyvsp[(1) - (2)].s));
-         ;}
+         }
     break;
 
   case 187:
-#line 1582 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); ;}
+#line 1584 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 188:
-#line 1583 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; ;}
+#line 1585 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 189:
-#line 1584 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+#line 1586 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; }
     break;
 
   case 192:
-#line 1587 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;;}
+#line 1589 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0;}
     break;
 
   case 193:
-#line 1591 "compilers/imcc/imcc.y"
-    { (yyval.t) = 'I'; ;}
+#line 1593 "compilers/imcc/imcc.y"
+    { (yyval.t) = 'I'; }
     break;
 
   case 194:
-#line 1592 "compilers/imcc/imcc.y"
-    { (yyval.t) = 'N'; ;}
+#line 1594 "compilers/imcc/imcc.y"
+    { (yyval.t) = 'N'; }
     break;
 
   case 195:
-#line 1593 "compilers/imcc/imcc.y"
-    { (yyval.t) = 'S'; ;}
+#line 1595 "compilers/imcc/imcc.y"
+    { (yyval.t) = 'S'; }
     break;
 
   case 196:
-#line 1594 "compilers/imcc/imcc.y"
-    { (yyval.t) = 'P'; ;}
+#line 1596 "compilers/imcc/imcc.y"
+    { (yyval.t) = 'P'; }
     break;
 
   case 197:
-#line 1599 "compilers/imcc/imcc.y"
+#line 1601 "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 */
@@ -4030,373 +4042,373 @@
                IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "Unknown PMC type '%s'\n", (yyvsp[(1) - (1)].s));
            }
-         ;}
+         }
     break;
 
   case 198:
-#line 1612 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  ;}
+#line 1614 "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 199:
-#line 1614 "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));  ;}
+#line 1616 "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 200:
-#line 1616 "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));  ;}
+#line 1618 "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 201:
-#line 1618 "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)); ;}
+#line 1620 "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 202:
-#line 1620 "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)); ;}
+#line 1622 "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 203:
-#line 1622 "compilers/imcc/imcc.y"
-    { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].s), (yyvsp[(6) - (6)].sr), 1); ;}
+#line 1624 "compilers/imcc/imcc.y"
+    { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].s), (yyvsp[(6) - (6)].sr), 1); }
     break;
 
   case 204:
-#line 1624 "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); ;}
+#line 1626 "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 205:
-#line 1626 "compilers/imcc/imcc.y"
-    { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].s), NULL, 1); ;}
+#line 1628 "compilers/imcc/imcc.y"
+    { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].s), NULL, 1); }
     break;
 
   case 206:
-#line 1628 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); ;}
+#line 1630 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
   case 207:
-#line 1630 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); ;}
+#line 1632 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
   case 208:
-#line 1632 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); ;}
+#line 1634 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 209:
-#line 1634 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); ;}
+#line 1636 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 210:
-#line 1636 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); ;}
+#line 1638 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); }
     break;
 
   case 211:
-#line 1640 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); ;}
+#line 1642 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
   case 212:
-#line 1642 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); ;}
+#line 1644 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 213:
-#line 1644 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); ;}
+#line 1646 "compilers/imcc/imcc.y"
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); }
     break;
 
   case 214:
-#line 1647 "compilers/imcc/imcc.y"
+#line 1649 "compilers/imcc/imcc.y"
     {
            add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
            (yyval.i) = 0;
-         ;}
+         }
     break;
 
   case 215:
-#line 1653 "compilers/imcc/imcc.y"
+#line 1655 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
-         ;}
+         }
     break;
 
   case 216:
-#line 1657 "compilers/imcc/imcc.y"
+#line 1659 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
-         ;}
+         }
     break;
 
   case 220:
-#line 1665 "compilers/imcc/imcc.y"
+#line 1667 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
-         ;}
+         }
     break;
 
   case 221:
-#line 1672 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"not"; ;}
+#line 1674 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"not"; }
     break;
 
   case 222:
-#line 1673 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bnot"; ;}
+#line 1675 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 223:
-#line 1674 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"neg"; ;}
+#line 1676 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"neg"; }
     break;
 
   case 224:
-#line 1678 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"sub"; ;}
+#line 1680 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"sub"; }
     break;
 
   case 225:
-#line 1679 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"add"; ;}
+#line 1681 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"add"; }
     break;
 
   case 226:
-#line 1680 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"mul"; ;}
+#line 1682 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"mul"; }
     break;
 
   case 227:
-#line 1681 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"div"; ;}
+#line 1683 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"div"; }
     break;
 
   case 228:
-#line 1682 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"mod"; ;}
+#line 1684 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"mod"; }
     break;
 
   case 229:
-#line 1683 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"fdiv"; ;}
+#line 1685 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 230:
-#line 1684 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"pow"; ;}
+#line 1686 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"pow"; }
     break;
 
   case 231:
-#line 1685 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"concat"; ;}
+#line 1687 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"concat"; }
     break;
 
   case 232:
-#line 1686 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"iseq"; ;}
+#line 1688 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 233:
-#line 1687 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"isne"; ;}
+#line 1689 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"isne"; }
     break;
 
   case 234:
-#line 1688 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"isgt"; ;}
+#line 1690 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 235:
-#line 1689 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"isge"; ;}
+#line 1691 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"isge"; }
     break;
 
   case 236:
-#line 1690 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"islt"; ;}
+#line 1692 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"islt"; }
     break;
 
   case 237:
-#line 1691 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"isle"; ;}
+#line 1693 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"isle"; }
     break;
 
   case 238:
-#line 1692 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"shl"; ;}
+#line 1694 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"shl"; }
     break;
 
   case 239:
-#line 1693 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"shr"; ;}
+#line 1695 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"shr"; }
     break;
 
   case 240:
-#line 1694 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"lsr"; ;}
+#line 1696 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 241:
-#line 1695 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"and"; ;}
+#line 1697 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"and"; }
     break;
 
   case 242:
-#line 1696 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"or"; ;}
+#line 1698 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"or"; }
     break;
 
   case 243:
-#line 1697 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"xor"; ;}
+#line 1699 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"xor"; }
     break;
 
   case 244:
-#line 1698 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"band"; ;}
+#line 1700 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"band"; }
     break;
 
   case 245:
-#line 1699 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bor"; ;}
+#line 1701 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"bor"; }
     break;
 
   case 246:
-#line 1700 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bxor"; ;}
+#line 1702 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 247:
-#line 1706 "compilers/imcc/imcc.y"
+#line 1708 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
            (yyval.i)->type |= ITRESULT;
-         ;}
+         }
     break;
 
   case 248:
-#line 1711 "compilers/imcc/imcc.y"
-    {  (yyval.i) = 0; ;}
+#line 1713 "compilers/imcc/imcc.y"
+    {  (yyval.i) = 0; }
     break;
 
   case 249:
-#line 1718 "compilers/imcc/imcc.y"
+#line 1720 "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 250:
-#line 1724 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"add"; ;}
+#line 1726 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"add"; }
     break;
 
   case 251:
-#line 1725 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"sub"; ;}
+#line 1727 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"sub"; }
     break;
 
   case 252:
-#line 1726 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"mul"; ;}
+#line 1728 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"mul"; }
     break;
 
   case 253:
-#line 1727 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"div"; ;}
+#line 1729 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"div"; }
     break;
 
   case 254:
-#line 1728 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"mod"; ;}
+#line 1730 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"mod"; }
     break;
 
   case 255:
-#line 1729 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"fdiv"; ;}
+#line 1731 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 256:
-#line 1730 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"concat"; ;}
+#line 1732 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"concat"; }
     break;
 
   case 257:
-#line 1731 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"band"; ;}
+#line 1733 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"band"; }
     break;
 
   case 258:
-#line 1732 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bor"; ;}
+#line 1734 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"bor"; }
     break;
 
   case 259:
-#line 1733 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bxor"; ;}
+#line 1735 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 260:
-#line 1734 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"shr"; ;}
+#line 1736 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"shr"; }
     break;
 
   case 261:
-#line 1735 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"shl"; ;}
+#line 1737 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"shl"; }
     break;
 
   case 262:
-#line 1736 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"lsr"; ;}
+#line 1738 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 263:
-#line 1742 "compilers/imcc/imcc.y"
+#line 1744 "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,
                       IMCC_INFO(interp) -> nargs,
                       IMCC_INFO(interp) -> keyvec, 1);
          mem_sys_free((yyvsp[(3) - (4)].s));
-       ;}
+       }
     break;
 
   case 264:
-#line 1752 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1754 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 265:
-#line 1753 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1755 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 266:
-#line 1754 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1756 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 267:
-#line 1756 "compilers/imcc/imcc.y"
+#line 1758 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
                IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "Sub isn't a PMC");
-         ;}
+         }
     break;
 
   case 268:
-#line 1762 "compilers/imcc/imcc.y"
+#line 1764 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             char *name = (yyvsp[(3) - (3)].sr)->name;
@@ -4407,43 +4419,43 @@
 
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = (yyvsp[(3) - (3)].sr);
-        ;}
+        }
     break;
 
   case 269:
-#line 1774 "compilers/imcc/imcc.y"
+#line 1776 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
             mem_sys_free((yyvsp[(3) - (3)].s));
-         ;}
+         }
     break;
 
   case 270:
-#line 1779 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); ;}
+#line 1781 "compilers/imcc/imcc.y"
+    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
   case 271:
-#line 1785 "compilers/imcc/imcc.y"
+#line 1787 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 272:
-#line 1789 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(2) - (5)].i); ;}
+#line 1791 "compilers/imcc/imcc.y"
+    { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
   case 273:
-#line 1793 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+#line 1795 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 274:
-#line 1795 "compilers/imcc/imcc.y"
+#line 1797 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4452,11 +4464,11 @@
            }
            else
                add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 275:
-#line 1805 "compilers/imcc/imcc.y"
+#line 1807 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4465,64 +4477,64 @@
            }
            else
                add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 276:
-#line 1815 "compilers/imcc/imcc.y"
+#line 1817 "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));
            mem_sys_free((yyvsp[(3) - (5)].s));
-         ;}
+         }
     break;
 
   case 277:
-#line 1821 "compilers/imcc/imcc.y"
+#line 1823 "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));
            mem_sys_free((yyvsp[(1) - (3)].s));
-         ;}
+         }
     break;
 
   case 278:
-#line 1829 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); ;}
+#line 1831 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 279:
-#line 1833 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+#line 1835 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 280:
-#line 1834 "compilers/imcc/imcc.y"
-    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); ;}
+#line 1836 "compilers/imcc/imcc.y"
+    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 281:
-#line 1838 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_FLAT; ;}
+#line 1840 "compilers/imcc/imcc.y"
+    { (yyval.t) = VT_FLAT; }
     break;
 
   case 282:
-#line 1839 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_NAMED; ;}
+#line 1841 "compilers/imcc/imcc.y"
+    { (yyval.t) = VT_NAMED; }
     break;
 
   case 283:
-#line 1842 "compilers/imcc/imcc.y"
-    { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; ;}
+#line 1844 "compilers/imcc/imcc.y"
+    { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 284:
-#line 1846 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); ;}
+#line 1848 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 285:
-#line 1851 "compilers/imcc/imcc.y"
+#line 1853 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4531,19 +4543,19 @@
            }
            else
                add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 286:
-#line 1861 "compilers/imcc/imcc.y"
+#line 1863 "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 287:
-#line 1866 "compilers/imcc/imcc.y"
+#line 1868 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4552,319 +4564,319 @@
            }
            else
                add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 288:
-#line 1876 "compilers/imcc/imcc.y"
+#line 1878 "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 289:
-#line 1880 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+#line 1882 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 290:
-#line 1884 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+#line 1886 "compilers/imcc/imcc.y"
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 291:
-#line 1885 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+#line 1887 "compilers/imcc/imcc.y"
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 292:
-#line 1890 "compilers/imcc/imcc.y"
+#line 1892 "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 293:
-#line 1894 "compilers/imcc/imcc.y"
+#line 1896 "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 294:
-#line 1898 "compilers/imcc/imcc.y"
+#line 1900 "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 295:
-#line 1905 "compilers/imcc/imcc.y"
+#line 1907 "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 296:
-#line 1909 "compilers/imcc/imcc.y"
+#line 1911 "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 297:
-#line 1913 "compilers/imcc/imcc.y"
+#line 1915 "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 298:
-#line 1919 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+#line 1921 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 299:
-#line 1920 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+#line 1922 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 300:
-#line 1924 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"eq"; ;}
+#line 1926 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"eq"; }
     break;
 
   case 301:
-#line 1925 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"ne"; ;}
+#line 1927 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"ne"; }
     break;
 
   case 302:
-#line 1926 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"gt"; ;}
+#line 1928 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"gt"; }
     break;
 
   case 303:
-#line 1927 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"ge"; ;}
+#line 1929 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"ge"; }
     break;
 
   case 304:
-#line 1928 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"lt"; ;}
+#line 1930 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"lt"; }
     break;
 
   case 305:
-#line 1929 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"le"; ;}
+#line 1931 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"le"; }
     break;
 
   case 308:
-#line 1938 "compilers/imcc/imcc.y"
-    { (yyval.sr) = NULL; ;}
+#line 1940 "compilers/imcc/imcc.y"
+    { (yyval.sr) = NULL; }
     break;
 
   case 309:
-#line 1939 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(1) - (1)].sr); ;}
+#line 1941 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 310:
-#line 1943 "compilers/imcc/imcc.y"
-    { (yyval.sr) = IMCC_INFO(interp)->regs[0]; ;}
+#line 1945 "compilers/imcc/imcc.y"
+    { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
   case 312:
-#line 1948 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); ;}
+#line 1950 "compilers/imcc/imcc.y"
+    { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 313:
-#line 1950 "compilers/imcc/imcc.y"
+#line 1952 "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);
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(3) - (4)].sr);
            (yyval.sr) = (yyvsp[(1) - (4)].sr);
-         ;}
+         }
     break;
 
   case 314:
-#line 1957 "compilers/imcc/imcc.y"
+#line 1959 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
-         ;}
+         }
     break;
 
   case 316:
-#line 1964 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1966 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 317:
-#line 1965 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1967 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 318:
-#line 1969 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1971 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 319:
-#line 1970 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1972 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 320:
-#line 1974 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1976 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 321:
-#line 1975 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 1977 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 326:
-#line 1989 "compilers/imcc/imcc.y"
+#line 1991 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
            IMCC_INFO(interp)->in_slice = 0;
-         ;}
+         }
     break;
 
   case 327:
-#line 1994 "compilers/imcc/imcc.y"
+#line 1996 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
                           IMCC_INFO(interp)->keys, 0);
-         ;}
+         }
     break;
 
   case 328:
-#line 2002 "compilers/imcc/imcc.y"
+#line 2004 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
            IMCC_INFO(interp)->in_slice = 0;
-         ;}
+         }
     break;
 
   case 329:
-#line 2007 "compilers/imcc/imcc.y"
+#line 2009 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
                           IMCC_INFO(interp)->keys, 1);
-         ;}
+         }
     break;
 
   case 330:
-#line 2015 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); ;}
+#line 2017 "compilers/imcc/imcc.y"
+    { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 331:
-#line 2017 "compilers/imcc/imcc.y"
+#line 2019 "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 332:
-#line 2021 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->in_slice = 1; ;}
+#line 2023 "compilers/imcc/imcc.y"
+    { IMCC_INFO(interp)->in_slice = 1; }
     break;
 
   case 333:
-#line 2023 "compilers/imcc/imcc.y"
+#line 2025 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(4) - (4)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
-         ;}
+         }
     break;
 
   case 334:
-#line 2031 "compilers/imcc/imcc.y"
+#line 2033 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->in_slice)
                (yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE;
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
-         ;}
+         }
     break;
 
   case 335:
-#line 2037 "compilers/imcc/imcc.y"
+#line 2039 "compilers/imcc/imcc.y"
     {
            (yyvsp[(1) - (3)].sr)->type |= VT_START_SLICE;
            (yyvsp[(3) - (3)].sr)->type |= VT_END_SLICE;
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (3)].sr);
            (yyval.sr) = (yyvsp[(3) - (3)].sr);
-         ;}
+         }
     break;
 
   case 336:
-#line 2043 "compilers/imcc/imcc.y"
-    { (yyvsp[(2) - (2)].sr)->type |= VT_START_ZERO | VT_END_SLICE; (yyval.sr) = (yyvsp[(2) - (2)].sr); ;}
+#line 2045 "compilers/imcc/imcc.y"
+    { (yyvsp[(2) - (2)].sr)->type |= VT_START_ZERO | VT_END_SLICE; (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 337:
-#line 2044 "compilers/imcc/imcc.y"
-    { (yyvsp[(1) - (2)].sr)->type |= VT_START_SLICE | VT_END_INF; (yyval.sr) = (yyvsp[(1) - (2)].sr); ;}
+#line 2046 "compilers/imcc/imcc.y"
+    { (yyvsp[(1) - (2)].sr)->type |= VT_START_SLICE | VT_END_INF; (yyval.sr) = (yyvsp[(1) - (2)].sr); }
     break;
 
   case 338:
-#line 2048 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); ;}
+#line 2050 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
   case 339:
-#line 2049 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); ;}
+#line 2051 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
   case 340:
-#line 2050 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); ;}
+#line 2052 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
   case 341:
-#line 2051 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); ;}
+#line 2053 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
   case 342:
-#line 2052 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 2054 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 343:
-#line 2056 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 2058 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 344:
-#line 2057 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 2059 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 345:
-#line 2058 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 2060 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 346:
-#line 2059 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+#line 2061 "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 4868 "compilers/imcc/imcparser.c"
+#line 4869 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5078,7 +5090,7 @@
 }
 
 
-#line 2065 "compilers/imcc/imcc.y"
+#line 2067 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: trunk/compilers/imcc/imcparser.h
==============================================================================
--- trunk/compilers/imcc/imcparser.h	(original)
+++ trunk/compilers/imcc/imcparser.h	Thu Dec 11 12:01:13 2008
@@ -1,3 +1,14 @@
+/* ex: set ro ft=c:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from 'compilers/imcc/imcc.y'
+ * by tools/build/fixup_gen_file.pl.
+ *
+ * Any changes made here will be lost!
+ *
+ */
+/* HEADERIZER HFILE: none */
+/* HEADERIZER STOP */
 /* A Bison parser, made by GNU Bison 2.3.  */
 
 /* Skeleton interface for Bison's Yacc-like parsers in C

Modified: trunk/compilers/imcc/pbc.c
==============================================================================
--- trunk/compilers/imcc/pbc.c	(original)
+++ trunk/compilers/imcc/pbc.c	Thu Dec 11 12:01:13 2008
@@ -113,15 +113,12 @@
 static subs_t * find_global_label(PARROT_INTERP,
     ARGIN(const char *name),
     ARGIN(const subs_t *sym),
-    ARGOUT(int *pc),
-    ARGOUT(int *sub_id))
+    ARGOUT(int *pc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*pc)
-        FUNC_MODIFIES(*sub_id);
+        FUNC_MODIFIES(*pc);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
@@ -562,6 +559,9 @@
     if (r->type & VT_ENCODED)
         fixup->type |= VT_ENCODED;
 
+    if (r->usage & U_SUBID_LOOKUP)
+      fixup->usage = U_SUBID_LOOKUP;
+
     /* set_p_pc   = 2  */
     fixup->color  = pc;
     fixup->offset = offset;
@@ -659,7 +659,7 @@
 PARROT_CAN_RETURN_NULL
 static subs_t *
 find_global_label(PARROT_INTERP, ARGIN(const char *name),
-    ARGIN(const subs_t *sym), ARGOUT(int *pc), ARGOUT(int *subid_matched))
+    ARGIN(const subs_t *sym), ARGOUT(int *pc))
 {
     subs_t *s;
 
@@ -668,11 +668,8 @@
     for (s = IMCC_INFO(interp)->globals->cs->first; s; s = s->next) {
         SymReg * const r = s->unit->instructions->symregs[0];
 
-        *subid_matched = r && (r->subid && (strcmp(r->subid, name) == 0));
-
         /* if names and namespaces are matching - ok */
-        if (r && (*subid_matched
-                    || (r->name && (strcmp(r->name, name) == 0)))
+        if (r && r->name && (strcmp(r->name, name) == 0)
                 && ((sym->unit->_namespace && s->unit->_namespace
                         && (strcmp(sym->unit->_namespace->name, s->unit->_namespace->name) == 0))
                     || (!sym->unit->_namespace && !s->unit->_namespace)))
@@ -680,10 +677,37 @@
 
         *pc += s->size;
     }
-
     return NULL;
 }
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static subs_t *
+find_sub_by_subid(PARROT_INTERP, ARGIN(const char *lookup),
+    ARGIN(const subs_t *sym), ARGOUT(int *pc))
+{
+    subs_t *s;
+
+    *pc = 0;
+
+    for (s = IMCC_INFO(interp)->globals->cs->first; s; s = s->next) {
+        SymReg * const r = s->unit->instructions->symregs[0];
+
+        /* if subid matches - ok */
+        if (r && (r->subid && (strcmp(r->subid, lookup) == 0)))
+            return s;
+
+        /* if names and namespaces are matching - ok */
+        if (r && r->name && (strcmp(r->name, lookup) == 0)
+                && ((sym->unit->_namespace && s->unit->_namespace
+                        && (strcmp(sym->unit->_namespace->name, s->unit->_namespace->name) == 0))
+                    || (!sym->unit->_namespace && !s->unit->_namespace)))
+            return s;
+
+        *pc += s->size;
+    }
+    return NULL;
+}
 
 /*
 
@@ -711,10 +735,17 @@
             for (fixup = hsh->data[i]; fixup; fixup = fixup->next) {
                 int pc, pmc_const;
                 int addr = jumppc + fixup->color;
-                int subid_matched = 0;
+                int subid_lookup = 0;
+                subs_t *s1;
 
                 /* check in matching namespace */
-                subs_t *s1 = find_global_label(interp, fixup->name, s, &pc, &subid_matched);
+                if (fixup->usage & U_SUBID_LOOKUP) {
+                    subid_lookup = 1;
+                    /* s1 = find_sub_by_subid(interp, fixup->name, &pc); */
+                    s1 = find_sub_by_subid(interp, fixup->name, s, &pc);
+                }
+                else
+                    s1 = find_global_label(interp, fixup->name, s, &pc);
 
                 /*
                  * if failed change opcode:
@@ -738,7 +769,7 @@
                         PARROT_ASSERT(pcc_sub);
 
                         /* if the sub is multi, don't insert constant */
-                        if (pcc_sub->nmulti && !subid_matched)
+                        if (pcc_sub->nmulti && !subid_lookup)
                             s1 = NULL;
                     }
                 }

Modified: trunk/compilers/imcc/symreg.h
==============================================================================
--- trunk/compilers/imcc/symreg.h	(original)
+++ trunk/compilers/imcc/symreg.h	Thu Dec 11 12:01:13 2008
@@ -60,7 +60,8 @@
     U_GLOBAL        = 1 << 3,       /* symbol is global (fixup) */
     U_LEXICAL       = 1 << 4,       /* symbol is lexical */
     U_FIXUP         = 1 << 5,       /* maybe not global, force fixup */
-    U_NON_VOLATILE  = 1 << 6        /* needs preserving */
+    U_NON_VOLATILE  = 1 << 6,       /* needs preserving */
+    U_SUBID_LOOKUP  = 1 << 7        /* .const 'Sub' lookup is done by subid */
 };
 
 typedef struct _SymReg {

Modified: trunk/t/compilers/imcc/syn/subflags.t
==============================================================================
--- trunk/t/compilers/imcc/syn/subflags.t	(original)
+++ trunk/t/compilers/imcc/syn/subflags.t	Thu Dec 11 12:01:13 2008
@@ -108,7 +108,7 @@
   subid4_done:
     pop_eh
     $I0 = isa $P70, 'Sub'
-    todo($I0, 'subid4 in another ns found w/.const')
+    ok($I0, 'subid4 in another ns found w/.const')
 
     ## find multis via subid
     .const 'Sub' $P0 = 'above'

Modified: trunk/t/pmc/key.t
==============================================================================
--- trunk/t/pmc/key.t	(original)
+++ trunk/t/pmc/key.t	Thu Dec 11 12:01:13 2008
@@ -24,7 +24,8 @@
     traverse_key_chain()
     extract_int_from_string_keys()
     extract_string_from_int_keys()
-    do_not_collect_string_keys_early_rt_60128()
+    #do_not_collect_string_keys_early_rt_60128()
+    todo(0, 'register and non-register string keys should be COW (RT #60128)' )
 .end
 
 .sub traverse_key_chain



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