[svn:parrot] r42075 - trunk/compilers/pirc/src

kjs at svn.parrot.org kjs at svn.parrot.org
Sat Oct 24 10:08:37 UTC 2009


Author: kjs
Date: Sat Oct 24 10:08:35 2009
New Revision: 42075
URL: https://trac.parrot.org/parrot/changeset/42075

Log:
[pirc] first C-string argument converted into STRING. Needs lots of hacks currently, to keep things working. Currently all strings are stored twice: once as a STRING, once as a C string. Once all is converted to STRINGs, the C-string stuff can be removed.

Modified:
   trunk/compilers/pirc/src/pir.y
   trunk/compilers/pirc/src/pircompunit.c
   trunk/compilers/pirc/src/pircompunit.h
   trunk/compilers/pirc/src/pirparser.c
   trunk/compilers/pirc/src/pirparser.h

Modified: trunk/compilers/pirc/src/pir.y
==============================================================================
--- trunk/compilers/pirc/src/pir.y	Sat Oct 24 09:36:28 2009	(r42074)
+++ trunk/compilers/pirc/src/pir.y	Sat Oct 24 10:08:35 2009	(r42075)
@@ -250,6 +250,7 @@
     struct symbol      *symb;
     struct macro_def   *mval;
     struct macro_param *pval;
+    STRING             *parrotstring;
 }
 
 
@@ -707,7 +708,7 @@
                   ;
 
 sub_head          : ".sub" sub_id
-                         { new_subr(lexer, $2); }
+                         { new_subr(lexer, lexer->sval /*$2*/); }
                   ;
 
 sub_id            : identifier
@@ -2199,7 +2200,7 @@
  * not allowed, so we don't have any name collisions.
  */
 pasm_init                 : opt_nl
-                                { new_subr(lexer, "@start"); }
+                                { new_subr(lexer, Parrot_str_new(lexer->interp, "@start", 6)); }
                           ;
 
 pasm_lines                : pasm_line

Modified: trunk/compilers/pirc/src/pircompunit.c
==============================================================================
--- trunk/compilers/pirc/src/pircompunit.c	Sat Oct 24 09:36:28 2009	(r42074)
+++ trunk/compilers/pirc/src/pircompunit.c	Sat Oct 24 10:08:35 2009	(r42075)
@@ -328,14 +328,16 @@
 
 */
 void
-new_subr(lexer_state * const lexer, char const * const subname) {
+new_subr(lexer_state * const lexer, STRING *subname) {
     subroutine *newsub       = pir_mem_allocate_zeroed_typed(lexer, subroutine);
     int         index;
 
     /* set the sub fields */
-    newsub->info.subname     = subname;
+    newsub->info.subname1    = subname;
+    newsub->info.subname     = Parrot_str_to_cstring(lexer->interp, subname);
     /* set default lexid */
-    newsub->info.subid       = subname;
+    newsub->info.subid1      = subname;
+    newsub->info.subid       = Parrot_str_to_cstring(lexer->interp, subname);
     /* take namespace of this sub of the lexer, which keeps track of that */
     newsub->name_space       = lexer->current_ns;
 
@@ -368,7 +370,7 @@
     CURRENT_SUB(lexer) = newsub;
 
     /* store the subroutine identifier as a global label */
-    store_global_label(lexer, subname);
+    store_global_label(lexer, Parrot_str_to_cstring(lexer->interp, subname));
 
     /* vanilla register allocator is reset for each sub */
     reset_register_allocator(lexer);

Modified: trunk/compilers/pirc/src/pircompunit.h
==============================================================================
--- trunk/compilers/pirc/src/pircompunit.h	Sat Oct 24 09:36:28 2009	(r42074)
+++ trunk/compilers/pirc/src/pircompunit.h	Sat Oct 24 10:08:35 2009	(r42075)
@@ -408,7 +408,7 @@
 void set_sub_multi_types(struct lexer_state * const lexer, expression * const multitype);
 
 /* install a new subroutine node */
-void new_subr(struct lexer_state * const lexer, char const * const subname);
+void new_subr(struct lexer_state * const lexer, STRING *subname);
 
 void set_sub_name(struct lexer_state * const lexer, char const * const subname);
 

Modified: trunk/compilers/pirc/src/pirparser.c
==============================================================================
--- trunk/compilers/pirc/src/pirparser.c	Sat Oct 24 09:36:28 2009	(r42074)
+++ trunk/compilers/pirc/src/pirparser.c	Sat Oct 24 10:08:35 2009	(r42075)
@@ -585,9 +585,10 @@
     struct symbol      *symb;
     struct macro_def   *mval;
     struct macro_param *pval;
+    STRING             *parrotstring;
 }
 /* Line 193 of yacc.c.  */
-#line 591 "pirparser.c"
+#line 592 "pirparser.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -600,7 +601,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 604 "pirparser.c"
+#line 605 "pirparser.c"
 
 #ifdef short
 # undef short
@@ -1059,50 +1060,50 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   562,   562,   563,   568,   574,   575,   578,   582,   583,
-     586,   587,   588,   589,   590,   591,   592,   593,   600,   601,
-     604,   608,   614,   621,   622,   625,   626,   629,   633,   634,
-     637,   638,   641,   644,   645,   648,   652,   663,   667,   669,
-     675,   679,   684,   685,   689,   691,   695,   699,   705,   709,
-     713,   714,   717,   718,   721,   723,   725,   727,   729,   731,
-     733,   735,   737,   739,   741,   743,   745,   747,   751,   756,
-     760,   764,   773,   784,   786,   788,   792,   797,   798,   811,
-     815,   820,   821,   825,   826,   827,   828,   831,   838,   845,
-     851,   852,   862,   864,   867,   868,   869,   870,   871,   872,
-     873,   874,   875,   876,   877,   878,   879,   880,   881,   882,
-     885,   892,   895,   900,   901,   906,   907,   910,   912,   920,
-     928,   929,   931,   934,   940,   941,   950,   952,   953,   954,
-     962,   966,   970,   979,   986,   992,   995,   996,   999,  1008,
-    1015,  1018,  1019,  1022,  1023,  1026,  1062,  1064,  1068,  1070,
-    1075,  1077,  1081,  1104,  1108,  1110,  1119,  1130,  1142,  1152,
-    1155,  1156,  1159,  1168,  1177,  1182,  1187,  1208,  1213,  1254,
-    1272,  1279,  1284,  1295,  1306,  1317,  1328,  1333,  1338,  1343,
-    1353,  1372,  1406,  1408,  1410,  1412,  1414,  1416,  1418,  1420,
-    1425,  1434,  1436,  1438,  1440,  1442,  1444,  1446,  1448,  1450,
-    1452,  1464,  1471,  1473,  1479,  1481,  1483,  1485,  1487,  1489,
-    1491,  1493,  1495,  1497,  1499,  1530,  1556,  1564,  1573,  1582,
-    1584,  1586,  1588,  1590,  1594,  1599,  1601,  1606,  1607,  1610,
-    1611,  1614,  1615,  1618,  1626,  1630,  1632,  1636,  1640,  1641,
-    1644,  1659,  1663,  1664,  1667,  1679,  1680,  1684,  1686,  1690,
-    1694,  1696,  1698,  1704,  1705,  1710,  1711,  1715,  1717,  1726,
-    1728,  1732,  1736,  1738,  1740,  1744,  1745,  1748,  1768,  1775,
-    1777,  1787,  1804,  1806,  1808,  1812,  1821,  1826,  1833,  1834,
-    1838,  1840,  1844,  1846,  1851,  1852,  1856,  1858,  1860,  1862,
-    1872,  1876,  1877,  1878,  1879,  1882,  1887,  1898,  1905,  1910,
-    1911,  1915,  1917,  1921,  1922,  1925,  1929,  1933,  1937,  1946,
-    1956,  1957,  1962,  1964,  1969,  1974,  1975,  1979,  1981,  1985,
-    1991,  1992,  1996,  1998,  2006,  2007,  2011,  2015,  2018,  2022,
-    2023,  2026,  2030,  2031,  2034,  2038,  2040,  2042,  2044,  2048,
-    2052,  2053,  2066,  2067,  2071,  2072,  2073,  2076,  2077,  2080,
-    2081,  2082,  2083,  2084,  2085,  2088,  2089,  2090,  2091,  2099,
-    2102,  2103,  2116,  2117,  2118,  2119,  2123,  2124,  2127,  2128,
-    2129,  2130,  2131,  2132,  2133,  2134,  2137,  2138,  2139,  2142,
-    2143,  2144,  2145,  2146,  2147,  2148,  2149,  2150,  2151,  2152,
-    2153,  2154,  2155,  2156,  2157,  2158,  2159,  2160,  2161,  2162,
-    2163,  2164,  2170,  2171,  2172,  2173,  2174,  2175,  2176,  2177,
-    2178,  2179,  2180,  2181,  2193,  2201,  2205,  2206,  2209,  2210,
-    2211,  2212,  2213,  2214,  2217,  2219,  2220,  2223,  2224,  2227,
-    2231,  2236
+       0,   563,   563,   564,   569,   575,   576,   579,   583,   584,
+     587,   588,   589,   590,   591,   592,   593,   594,   601,   602,
+     605,   609,   615,   622,   623,   626,   627,   630,   634,   635,
+     638,   639,   642,   645,   646,   649,   653,   664,   668,   670,
+     676,   680,   685,   686,   690,   692,   696,   700,   706,   710,
+     714,   715,   718,   719,   722,   724,   726,   728,   730,   732,
+     734,   736,   738,   740,   742,   744,   746,   748,   752,   757,
+     761,   765,   774,   785,   787,   789,   793,   798,   799,   812,
+     816,   821,   822,   826,   827,   828,   829,   832,   839,   846,
+     852,   853,   863,   865,   868,   869,   870,   871,   872,   873,
+     874,   875,   876,   877,   878,   879,   880,   881,   882,   883,
+     886,   893,   896,   901,   902,   907,   908,   911,   913,   921,
+     929,   930,   932,   935,   941,   942,   951,   953,   954,   955,
+     963,   967,   971,   980,   987,   993,   996,   997,  1000,  1009,
+    1016,  1019,  1020,  1023,  1024,  1027,  1063,  1065,  1069,  1071,
+    1076,  1078,  1082,  1105,  1109,  1111,  1120,  1131,  1143,  1153,
+    1156,  1157,  1160,  1169,  1178,  1183,  1188,  1209,  1214,  1255,
+    1273,  1280,  1285,  1296,  1307,  1318,  1329,  1334,  1339,  1344,
+    1354,  1373,  1407,  1409,  1411,  1413,  1415,  1417,  1419,  1421,
+    1426,  1435,  1437,  1439,  1441,  1443,  1445,  1447,  1449,  1451,
+    1453,  1465,  1472,  1474,  1480,  1482,  1484,  1486,  1488,  1490,
+    1492,  1494,  1496,  1498,  1500,  1531,  1557,  1565,  1574,  1583,
+    1585,  1587,  1589,  1591,  1595,  1600,  1602,  1607,  1608,  1611,
+    1612,  1615,  1616,  1619,  1627,  1631,  1633,  1637,  1641,  1642,
+    1645,  1660,  1664,  1665,  1668,  1680,  1681,  1685,  1687,  1691,
+    1695,  1697,  1699,  1705,  1706,  1711,  1712,  1716,  1718,  1727,
+    1729,  1733,  1737,  1739,  1741,  1745,  1746,  1749,  1769,  1776,
+    1778,  1788,  1805,  1807,  1809,  1813,  1822,  1827,  1834,  1835,
+    1839,  1841,  1845,  1847,  1852,  1853,  1857,  1859,  1861,  1863,
+    1873,  1877,  1878,  1879,  1880,  1883,  1888,  1899,  1906,  1911,
+    1912,  1916,  1918,  1922,  1923,  1926,  1930,  1934,  1938,  1947,
+    1957,  1958,  1963,  1965,  1970,  1975,  1976,  1980,  1982,  1986,
+    1992,  1993,  1997,  1999,  2007,  2008,  2012,  2016,  2019,  2023,
+    2024,  2027,  2031,  2032,  2035,  2039,  2041,  2043,  2045,  2049,
+    2053,  2054,  2067,  2068,  2072,  2073,  2074,  2077,  2078,  2081,
+    2082,  2083,  2084,  2085,  2086,  2089,  2090,  2091,  2092,  2100,
+    2103,  2104,  2117,  2118,  2119,  2120,  2124,  2125,  2128,  2129,
+    2130,  2131,  2132,  2133,  2134,  2135,  2138,  2139,  2140,  2143,
+    2144,  2145,  2146,  2147,  2148,  2149,  2150,  2151,  2152,  2153,
+    2154,  2155,  2156,  2157,  2158,  2159,  2160,  2161,  2162,  2163,
+    2164,  2165,  2171,  2172,  2173,  2174,  2175,  2176,  2177,  2178,
+    2179,  2180,  2181,  2182,  2194,  2202,  2206,  2207,  2210,  2211,
+    2212,  2213,  2214,  2215,  2218,  2220,  2221,  2224,  2225,  2228,
+    2232,  2237
 };
 #endif
 
@@ -2645,27 +2646,27 @@
   switch (yyn)
     {
         case 4:
-#line 571 "pir.y"
+#line 572 "pir.y"
     { fixup_global_labels(lexer); ;}
     break;
 
   case 7:
-#line 579 "pir.y"
+#line 580 "pir.y"
     { lexer->linenr += (yyvsp[(1) - (1)].ival); ;}
     break;
 
   case 20:
-#line 605 "pir.y"
+#line 606 "pir.y"
     { new_macro_const(lexer->macros, (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].sval), yypirget_lineno(yyscanner)); ;}
     break;
 
   case 21:
-#line 611 "pir.y"
+#line 612 "pir.y"
     { /* fprintf(stderr, "macro body: [%s]\n", CURRENT_MACRO(lexer)->body);*/ ;}
     break;
 
   case 22:
-#line 615 "pir.y"
+#line 616 "pir.y"
     {
                           new_macro(lexer->macros, (yyvsp[(2) - (2)].sval), yypirget_lineno(yyscanner), TRUE,
                                     lexer->macro_size);
@@ -2673,17 +2674,17 @@
     break;
 
   case 27:
-#line 630 "pir.y"
+#line 631 "pir.y"
     { add_macro_param(CURRENT_MACRO(lexer), (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 35:
-#line 649 "pir.y"
+#line 650 "pir.y"
     { store_macro_string(CURRENT_MACRO(lexer), "%s\n", (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 36:
-#line 653 "pir.y"
+#line 654 "pir.y"
     {
                           store_macro_string(CURRENT_MACRO(lexer), ".local %s %s\n",
                                              pir_type_names[(yyvsp[(2) - (3)].ival)], (yyvsp[(3) - (3)].sval));
@@ -2691,142 +2692,142 @@
     break;
 
   case 37:
-#line 664 "pir.y"
+#line 665 "pir.y"
     { load_library(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 38:
-#line 668 "pir.y"
+#line 669 "pir.y"
     { yypirset_lineno ((yyvsp[(2) - (2)].ival), yyscanner); ;}
     break;
 
   case 39:
-#line 670 "pir.y"
+#line 671 "pir.y"
     { lexer->filename = (yyvsp[(2) - (2)].sval); ;}
     break;
 
   case 40:
-#line 676 "pir.y"
+#line 677 "pir.y"
     { set_hll(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 41:
-#line 680 "pir.y"
+#line 681 "pir.y"
     { set_namespace(lexer, (yyvsp[(3) - (4)].key)); ;}
     break;
 
   case 42:
-#line 684 "pir.y"
+#line 685 "pir.y"
     { (yyval.key) = NULL; ;}
     break;
 
   case 43:
-#line 686 "pir.y"
+#line 687 "pir.y"
     { (yyval.key) = (yyvsp[(1) - (1)].key); ;}
     break;
 
   case 44:
-#line 690 "pir.y"
+#line 691 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 45:
-#line 692 "pir.y"
+#line 693 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 46:
-#line 696 "pir.y"
+#line 697 "pir.y"
     { (yyval.expr) = expr_from_string(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 48:
-#line 706 "pir.y"
+#line 707 "pir.y"
     { close_sub(lexer); ;}
     break;
 
   case 49:
-#line 710 "pir.y"
-    { new_subr(lexer, (yyvsp[(2) - (2)].sval)); ;}
+#line 711 "pir.y"
+    { new_subr(lexer, lexer->sval /*$2*/); ;}
     break;
 
   case 54:
-#line 722 "pir.y"
+#line 723 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_ANON);;}
     break;
 
   case 55:
-#line 724 "pir.y"
+#line 725 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_INIT); ;}
     break;
 
   case 56:
-#line 726 "pir.y"
+#line 727 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_LOAD); ;}
     break;
 
   case 57:
-#line 728 "pir.y"
+#line 729 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_MAIN); ;}
     break;
 
   case 58:
-#line 730 "pir.y"
+#line 731 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_LEX); ;}
     break;
 
   case 59:
-#line 732 "pir.y"
+#line 733 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_POSTCOMP); ;}
     break;
 
   case 60:
-#line 734 "pir.y"
+#line 735 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_IMMEDIATE); ;}
     break;
 
   case 61:
-#line 736 "pir.y"
+#line 737 "pir.y"
     { set_sub_flag(lexer, PIRC_SUB_FLAG_MULTI); ;}
     break;
 
   case 62:
-#line 738 "pir.y"
+#line 739 "pir.y"
     { set_sub_outer(lexer, (yyvsp[(3) - (4)].sval)); ;}
     break;
 
   case 63:
-#line 740 "pir.y"
+#line 741 "pir.y"
     { set_sub_methodname(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 64:
-#line 742 "pir.y"
+#line 743 "pir.y"
     { set_sub_vtable(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 65:
-#line 744 "pir.y"
+#line 745 "pir.y"
     { set_sub_subid(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 66:
-#line 746 "pir.y"
+#line 747 "pir.y"
     { set_sub_instanceof(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 67:
-#line 748 "pir.y"
+#line 749 "pir.y"
     { set_sub_nsentry(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 68:
-#line 752 "pir.y"
+#line 753 "pir.y"
     { set_sub_multi_types(lexer, (yyvsp[(2) - (3)].expr)); ;}
     break;
 
   case 69:
-#line 756 "pir.y"
+#line 757 "pir.y"
     {
                           CURRENT_SUB(lexer)->info.num_multi_types = 1;
                           /* n=1 means :multi() -- without any types. */
@@ -2834,12 +2835,12 @@
     break;
 
   case 70:
-#line 761 "pir.y"
+#line 762 "pir.y"
     { (yyval.expr) = (yyvsp[(1) - (1)].expr); ;}
     break;
 
   case 71:
-#line 765 "pir.y"
+#line 766 "pir.y"
     {
                           CURRENT_SUB(lexer)->info.num_multi_types = 2;
                           /* start counting multi types; always 1 higher than actual number
@@ -2851,7 +2852,7 @@
     break;
 
   case 72:
-#line 774 "pir.y"
+#line 775 "pir.y"
     {
                           ++CURRENT_SUB(lexer)->info.num_multi_types;
                           /* link the multi types in reverse other. That's fine,
@@ -2863,32 +2864,32 @@
     break;
 
   case 73:
-#line 785 "pir.y"
+#line 786 "pir.y"
     { (yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 74:
-#line 787 "pir.y"
+#line 788 "pir.y"
     { (yyval.expr) = expr_from_string(lexer, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 75:
-#line 789 "pir.y"
+#line 790 "pir.y"
     { (yyval.expr) = expr_from_key(lexer, (yyvsp[(1) - (1)].key)); ;}
     break;
 
   case 76:
-#line 793 "pir.y"
+#line 794 "pir.y"
     { generate_parameters_instr(lexer, (yyvsp[(1) - (1)].uval)); ;}
     break;
 
   case 77:
-#line 797 "pir.y"
+#line 798 "pir.y"
     { (yyval.uval) = 0; ;}
     break;
 
   case 78:
-#line 799 "pir.y"
+#line 800 "pir.y"
     {
                           /* if the :named flag was set, there's an extra
                            * constant string argument for the name. count that too.
@@ -2902,27 +2903,27 @@
     break;
 
   case 79:
-#line 812 "pir.y"
+#line 813 "pir.y"
     { (yyval.targ) = set_param_flag(lexer, (yyvsp[(2) - (4)].targ), (yyvsp[(3) - (4)].ival)); ;}
     break;
 
   case 80:
-#line 816 "pir.y"
+#line 817 "pir.y"
     { (yyval.targ) = add_param(lexer, (yyvsp[(1) - (2)].ival), (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 81:
-#line 820 "pir.y"
+#line 821 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 82:
-#line 822 "pir.y"
+#line 823 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 87:
-#line 832 "pir.y"
+#line 833 "pir.y"
     {
                            (yyval.ival) = TARGET_FLAG_LOOKAHEAD;
                            set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -2930,7 +2931,7 @@
     break;
 
   case 88:
-#line 839 "pir.y"
+#line 840 "pir.y"
     { (yyval.ival) = TARGET_FLAG_INVOCANT;
                            /* XXX handle multi_type */
 
@@ -2938,12 +2939,12 @@
     break;
 
   case 89:
-#line 846 "pir.y"
+#line 847 "pir.y"
     { (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
     break;
 
   case 91:
-#line 853 "pir.y"
+#line 854 "pir.y"
     {
                          ++lexer->stmt_counter;
                          /* increment the logical statement counter; a statement can be
@@ -2954,42 +2955,42 @@
     break;
 
   case 92:
-#line 863 "pir.y"
+#line 864 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
   case 110:
-#line 886 "pir.y"
+#line 887 "pir.y"
     { annotate(lexer, (yyvsp[(2) - (5)].sval), (yyvsp[(4) - (5)].cval)); ;}
     break;
 
   case 112:
-#line 896 "pir.y"
+#line 897 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (3)].mval), (yyvsp[(2) - (3)].pval)); ;}
     break;
 
   case 113:
-#line 900 "pir.y"
+#line 901 "pir.y"
     { (yyval.pval) = NULL; ;}
     break;
 
   case 114:
-#line 902 "pir.y"
+#line 903 "pir.y"
     { (yyval.pval) = (yyvsp[(2) - (3)].pval); ;}
     break;
 
   case 115:
-#line 906 "pir.y"
+#line 907 "pir.y"
     { (yyval.pval) = NULL; ;}
     break;
 
   case 117:
-#line 911 "pir.y"
+#line 912 "pir.y"
     { (yyval.pval) = new_macro_param((yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 118:
-#line 913 "pir.y"
+#line 914 "pir.y"
     {
                           macro_param *param = new_macro_param((yyvsp[(3) - (3)].sval));
                           param->next = (yyvsp[(1) - (3)].pval);
@@ -2998,7 +2999,7 @@
     break;
 
   case 119:
-#line 921 "pir.y"
+#line 922 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                           if (sym == NULL) {
@@ -3009,22 +3010,22 @@
     break;
 
   case 121:
-#line 930 "pir.y"
+#line 931 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
   case 123:
-#line 935 "pir.y"
+#line 936 "pir.y"
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
   case 124:
-#line 940 "pir.y"
+#line 941 "pir.y"
     { (yyval.sval) = ""; ;}
     break;
 
   case 125:
-#line 942 "pir.y"
+#line 943 "pir.y"
     { /* XXX cleanup memory stuff */
                           char *newbuff = (char *)mem_sys_allocate((strlen((yyvsp[(1) - (2)].sval)) + strlen((yyvsp[(2) - (2)].sval)) + 2)
                                                                    * sizeof (char));
@@ -3034,22 +3035,22 @@
     break;
 
   case 126:
-#line 951 "pir.y"
+#line 952 "pir.y"
     { (yyval.sval) = "\n"; ;}
     break;
 
   case 129:
-#line 955 "pir.y"
+#line 956 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
   case 130:
-#line 963 "pir.y"
+#line 964 "pir.y"
     { set_instr(lexer, NULL); ;}
     break;
 
   case 132:
-#line 971 "pir.y"
+#line 972 "pir.y"
     {
                            if (lexer->parse_errors > MAX_NUM_ERRORS)
                                panic(lexer, "Too many errors. Compilation aborted.\n");
@@ -3059,7 +3060,7 @@
     break;
 
   case 133:
-#line 980 "pir.y"
+#line 981 "pir.y"
     {
                            set_instrf(lexer, "null", "%T", (yyvsp[(2) - (3)].targ));
                            get_opinfo(lexer);
@@ -3067,14 +3068,14 @@
     break;
 
   case 134:
-#line 987 "pir.y"
+#line 988 "pir.y"
     {
                            generate_getresults_instr(lexer, (yyvsp[(2) - (3)].targ));
                          ;}
     break;
 
   case 138:
-#line 1000 "pir.y"
+#line 1001 "pir.y"
     { /* at this point, TK_IDENT may in fact be a symbol identifier,
                             * not an op, so don't do any checks like is_parrot_op() just yet.
                             */
@@ -3084,7 +3085,7 @@
     break;
 
   case 139:
-#line 1009 "pir.y"
+#line 1010 "pir.y"
     { /* when this rule is activated, the initial identifier must
                            * be a parrot op.
                            */
@@ -3094,7 +3095,7 @@
     break;
 
   case 145:
-#line 1027 "pir.y"
+#line 1028 "pir.y"
     {
                          /* the "instruction" that was set now appears to be
                           * an identifier; get the name, and check its type.
@@ -3131,22 +3132,22 @@
     break;
 
   case 146:
-#line 1063 "pir.y"
+#line 1064 "pir.y"
     { push_operand(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 147:
-#line 1065 "pir.y"
+#line 1066 "pir.y"
     { push_operand(lexer, expr_from_key(lexer, (yyvsp[(1) - (1)].key))); ;}
     break;
 
   case 148:
-#line 1069 "pir.y"
+#line 1070 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
   case 149:
-#line 1071 "pir.y"
+#line 1072 "pir.y"
     { /* this is either a LABEL or a symbol; in the latter case, the type
                             * will be filled in later. */
                            (yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval));
@@ -3154,17 +3155,17 @@
     break;
 
   case 150:
-#line 1076 "pir.y"
+#line 1077 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 151:
-#line 1078 "pir.y"
+#line 1079 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 152:
-#line 1082 "pir.y"
+#line 1083 "pir.y"
     {
                            /* if $1 is a register, just return that */
                            if (TEST_FLAG((yyvsp[(1) - (2)].targ)->flags, TARGET_FLAG_IS_REG))
@@ -3188,22 +3189,22 @@
     break;
 
   case 153:
-#line 1105 "pir.y"
+#line 1106 "pir.y"
     { (yyval.key) = (yyvsp[(2) - (3)].key); ;}
     break;
 
   case 154:
-#line 1109 "pir.y"
+#line 1110 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 155:
-#line 1111 "pir.y"
+#line 1112 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 156:
-#line 1120 "pir.y"
+#line 1121 "pir.y"
     {
                           /* the instruction is already set in parrot_op rule */
                           unshift_operand(lexer, (yyvsp[(4) - (6)].expr));
@@ -3217,7 +3218,7 @@
     break;
 
   case 157:
-#line 1131 "pir.y"
+#line 1132 "pir.y"
     {
                           /* the instruction is already set in parrot_op rule */
                           unshift_operand(lexer, (yyvsp[(4) - (4)].expr));
@@ -3232,7 +3233,7 @@
     break;
 
   case 158:
-#line 1143 "pir.y"
+#line 1144 "pir.y"
     {
                           unshift_operand(lexer, expr_from_key(lexer, (yyvsp[(4) - (6)].key)));
                           unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (6)].targ)));
@@ -3243,7 +3244,7 @@
     break;
 
   case 162:
-#line 1160 "pir.y"
+#line 1161 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 0)
                               set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3255,7 +3256,7 @@
     break;
 
   case 163:
-#line 1169 "pir.y"
+#line 1170 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 0.0)
                               set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3267,7 +3268,7 @@
     break;
 
   case 164:
-#line 1178 "pir.y"
+#line 1179 "pir.y"
     {
                           set_instrf(lexer, "set", "%T%C", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].cval));
                           get_opinfo(lexer);
@@ -3275,7 +3276,7 @@
     break;
 
   case 165:
-#line 1183 "pir.y"
+#line 1184 "pir.y"
     {
                           set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(lexer);
@@ -3283,7 +3284,7 @@
     break;
 
   case 166:
-#line 1188 "pir.y"
+#line 1189 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
                           if (sym) {
@@ -3307,7 +3308,7 @@
     break;
 
   case 167:
-#line 1209 "pir.y"
+#line 1210 "pir.y"
     {
                           unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
                           get_opinfo(lexer);
@@ -3315,7 +3316,7 @@
     break;
 
   case 168:
-#line 1214 "pir.y"
+#line 1215 "pir.y"
     {
                           /*   $P0 = foo ["bar"]    # PIR style
                            *
@@ -3359,7 +3360,7 @@
     break;
 
   case 169:
-#line 1255 "pir.y"
+#line 1256 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(3) - (4)].sval));
                           target *t;
@@ -3380,7 +3381,7 @@
     break;
 
   case 170:
-#line 1273 "pir.y"
+#line 1274 "pir.y"
     {
                           target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (4)].ival));
                           set_target_key(preg, (yyvsp[(4) - (4)].key));
@@ -3390,7 +3391,7 @@
     break;
 
   case 171:
-#line 1280 "pir.y"
+#line 1281 "pir.y"
     {
                           set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].expr));
                           get_opinfo(lexer);
@@ -3398,7 +3399,7 @@
     break;
 
   case 172:
-#line 1285 "pir.y"
+#line 1286 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 1)
                               set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3412,7 +3413,7 @@
     break;
 
   case 173:
-#line 1296 "pir.y"
+#line 1297 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 1.0)
                               set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3426,7 +3427,7 @@
     break;
 
   case 174:
-#line 1307 "pir.y"
+#line 1308 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 1)
                               set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3440,7 +3441,7 @@
     break;
 
   case 175:
-#line 1318 "pir.y"
+#line 1319 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 1.0)
                               set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3454,7 +3455,7 @@
     break;
 
   case 176:
-#line 1329 "pir.y"
+#line 1330 "pir.y"
     {
                           set_instrf(lexer, "add", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(lexer);
@@ -3462,7 +3463,7 @@
     break;
 
   case 177:
-#line 1334 "pir.y"
+#line 1335 "pir.y"
     {
                           set_instrf(lexer, "sub", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(lexer);
@@ -3470,7 +3471,7 @@
     break;
 
   case 178:
-#line 1339 "pir.y"
+#line 1340 "pir.y"
     {
                           set_instrf(lexer, (yyvsp[(3) - (4)].sval), "%T%E", (yyvsp[(1) - (4)].targ), (yyvsp[(4) - (4)].expr));
                           get_opinfo(lexer);
@@ -3478,7 +3479,7 @@
     break;
 
   case 179:
-#line 1344 "pir.y"
+#line 1345 "pir.y"
     {
                           if (targets_equal((yyvsp[(1) - (5)].targ), (yyvsp[(3) - (5)].targ))) /* $P0 = $P0 + $P1 ==> $P0 += $P1 */
                               set_instrf(lexer, opnames[(yyvsp[(4) - (5)].ival)], "%T%E", (yyvsp[(1) - (5)].targ), (yyvsp[(5) - (5)].expr));
@@ -3491,7 +3492,7 @@
     break;
 
   case 180:
-#line 1354 "pir.y"
+#line 1355 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(1) - (4)].sval));
                           target *t;
@@ -3513,7 +3514,7 @@
     break;
 
   case 181:
-#line 1373 "pir.y"
+#line 1374 "pir.y"
     {
                           target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (4)].ival));
                           set_target_key(preg, (yyvsp[(2) - (4)].key));
@@ -3523,97 +3524,97 @@
     break;
 
   case 182:
-#line 1407 "pir.y"
+#line 1408 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%i%T", (yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
   case 183:
-#line 1409 "pir.y"
+#line 1410 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%n%T", (yyvsp[(1) - (3)].dval), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
   case 184:
-#line 1411 "pir.y"
+#line 1412 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%s%T", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
   case 185:
-#line 1413 "pir.y"
+#line 1414 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_s_s(yyscanner, (yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval))); ;}
     break;
 
   case 186:
-#line 1415 "pir.y"
+#line 1416 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_i_i(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
     break;
 
   case 187:
-#line 1417 "pir.y"
+#line 1418 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_n_n(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
     break;
 
   case 188:
-#line 1419 "pir.y"
+#line 1420 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_i_n(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
     break;
 
   case 189:
-#line 1421 "pir.y"
+#line 1422 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_n_i(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
     break;
 
   case 190:
-#line 1426 "pir.y"
+#line 1427 "pir.y"
     { get_opinfo(lexer); ;}
     break;
 
   case 191:
-#line 1435 "pir.y"
+#line 1436 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, (yyvsp[(3) - (5)].sval), (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 192:
-#line 1437 "pir.y"
+#line 1438 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "int", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 193:
-#line 1439 "pir.y"
+#line 1440 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "num", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 194:
-#line 1441 "pir.y"
+#line 1442 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "pmc", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 195:
-#line 1443 "pir.y"
+#line 1444 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "string", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 196:
-#line 1445 "pir.y"
+#line 1446 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "if", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 197:
-#line 1447 "pir.y"
+#line 1448 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "unless", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 198:
-#line 1449 "pir.y"
+#line 1450 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "goto", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 199:
-#line 1451 "pir.y"
+#line 1452 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "null", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
   case 200:
-#line 1453 "pir.y"
+#line 1454 "pir.y"
     {
                           int istrue = evaluate_c(lexer, (yyvsp[(2) - (4)].cval));
                           /* if "unless", invert the true-ness */
@@ -3628,7 +3629,7 @@
     break;
 
   case 201:
-#line 1465 "pir.y"
+#line 1466 "pir.y"
     {
                           set_instrf(lexer, (yyvsp[(1) - (5)].ival) ? "unless_null" : "if_null", "%T%I",
                                      new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (5)].ival)), (yyvsp[(5) - (5)].sval));
@@ -3638,12 +3639,12 @@
     break;
 
   case 202:
-#line 1472 "pir.y"
+#line 1473 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 203:
-#line 1474 "pir.y"
+#line 1475 "pir.y"
     {
                           set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I", (yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval));
                           /* set a flag indicating that the 2nd operand is a label */
@@ -3652,57 +3653,57 @@
     break;
 
   case 204:
-#line 1480 "pir.y"
+#line 1481 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "int", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 205:
-#line 1482 "pir.y"
+#line 1483 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "num", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 206:
-#line 1484 "pir.y"
+#line 1485 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "pmc", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 207:
-#line 1486 "pir.y"
+#line 1487 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "string", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 208:
-#line 1488 "pir.y"
+#line 1489 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "if", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 209:
-#line 1490 "pir.y"
+#line 1491 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "unless", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 210:
-#line 1492 "pir.y"
+#line 1493 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 211:
-#line 1494 "pir.y"
+#line 1495 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 212:
-#line 1496 "pir.y"
+#line 1497 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 213:
-#line 1498 "pir.y"
+#line 1499 "pir.y"
     { create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 214:
-#line 1500 "pir.y"
+#line 1501 "pir.y"
     {
                           if ((yyvsp[(2) - (4)].ival) == COMPUTE_DURING_RUNTIME) {
                              if ((yyvsp[(1) - (4)].ival) == NEED_INVERT_OPNAME) /* "unless" */
@@ -3730,7 +3731,7 @@
     break;
 
   case 215:
-#line 1531 "pir.y"
+#line 1532 "pir.y"
     {
                           /* the instructions "gt" and "ge" are converted to "lt" and "le".
                            * if so, then the arguments must be reversed as well. "lt" and
@@ -3759,7 +3760,7 @@
     break;
 
   case 216:
-#line 1557 "pir.y"
+#line 1558 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%i", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].ival));
@@ -3770,7 +3771,7 @@
     break;
 
   case 217:
-#line 1565 "pir.y"
+#line 1566 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%n", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].dval));
@@ -3782,7 +3783,7 @@
     break;
 
   case 218:
-#line 1574 "pir.y"
+#line 1575 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%s", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].sval));
@@ -3794,32 +3795,32 @@
     break;
 
   case 219:
-#line 1583 "pir.y"
+#line 1584 "pir.y"
     { (yyval.ival) = evaluate_i_i((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
     break;
 
   case 220:
-#line 1585 "pir.y"
+#line 1586 "pir.y"
     { (yyval.ival) = evaluate_i_n((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
     break;
 
   case 221:
-#line 1587 "pir.y"
+#line 1588 "pir.y"
     { (yyval.ival) = evaluate_n_i((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
     break;
 
   case 222:
-#line 1589 "pir.y"
+#line 1590 "pir.y"
     { (yyval.ival) = evaluate_n_n((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
     break;
 
   case 223:
-#line 1591 "pir.y"
+#line 1592 "pir.y"
     { (yyval.ival) = evaluate_s_s((yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval)); ;}
     break;
 
   case 224:
-#line 1595 "pir.y"
+#line 1596 "pir.y"
     {
                           yypirerror(yyscanner, lexer, "cannot compare string to %s",
                                      (yyvsp[(3) - (3)].ival) == INT_TYPE ? "integer" : "number");
@@ -3827,37 +3828,37 @@
     break;
 
   case 225:
-#line 1600 "pir.y"
+#line 1601 "pir.y"
     { yypirerror(yyscanner, lexer, "cannot compare integer to string"); ;}
     break;
 
   case 226:
-#line 1602 "pir.y"
+#line 1603 "pir.y"
     { yypirerror(yyscanner, lexer, "cannot compare number to string"); ;}
     break;
 
   case 227:
-#line 1606 "pir.y"
+#line 1607 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
   case 228:
-#line 1607 "pir.y"
+#line 1608 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
   case 229:
-#line 1610 "pir.y"
+#line 1611 "pir.y"
     { (yyval.ival) = DONT_INVERT_OPNAME; /* no need to invert */ ;}
     break;
 
   case 230:
-#line 1611 "pir.y"
+#line 1612 "pir.y"
     { (yyval.ival) = NEED_INVERT_OPNAME; /* yes, invert opname */ ;}
     break;
 
   case 233:
-#line 1619 "pir.y"
+#line 1620 "pir.y"
     {
                           set_instrf(lexer, "branch", "%I", (yyvsp[(2) - (3)].sval));
                           set_op_labelflag(lexer, BIT(0)); /* bit 0 means: "1 << 0" */
@@ -3866,37 +3867,37 @@
     break;
 
   case 234:
-#line 1627 "pir.y"
+#line 1628 "pir.y"
     { declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].symb)); ;}
     break;
 
   case 235:
-#line 1631 "pir.y"
+#line 1632 "pir.y"
     { (yyval.symb) = (yyvsp[(1) - (1)].symb); ;}
     break;
 
   case 236:
-#line 1633 "pir.y"
+#line 1634 "pir.y"
     { (yyval.symb) = add_local((yyvsp[(1) - (3)].symb), (yyvsp[(3) - (3)].symb)); ;}
     break;
 
   case 237:
-#line 1637 "pir.y"
+#line 1638 "pir.y"
     { (yyval.symb) = new_local(lexer, (yyvsp[(1) - (2)].sval), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 238:
-#line 1640 "pir.y"
+#line 1641 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 239:
-#line 1641 "pir.y"
+#line 1642 "pir.y"
     { (yyval.ival) = 1; ;}
     break;
 
   case 240:
-#line 1645 "pir.y"
+#line 1646 "pir.y"
     { /* if $4 is not a register, it must be a declared symbol */
                           if (!TEST_FLAG((yyvsp[(4) - (5)].targ)->flags, TARGET_FLAG_IS_REG)) {
 
@@ -3909,12 +3910,12 @@
     break;
 
   case 241:
-#line 1660 "pir.y"
+#line 1661 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
   case 244:
-#line 1672 "pir.y"
+#line 1673 "pir.y"
     { /* $4 contains an invocation object */
                               set_invocation_args(lexer, (yyvsp[(4) - (8)].invo), (yyvsp[(3) - (8)].argm));
                               (yyval.invo) = set_invocation_results(lexer, (yyvsp[(4) - (8)].invo), (yyvsp[(6) - (8)].targ));
@@ -3922,72 +3923,72 @@
     break;
 
   case 245:
-#line 1679 "pir.y"
+#line 1680 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
   case 246:
-#line 1681 "pir.y"
+#line 1682 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 247:
-#line 1685 "pir.y"
+#line 1686 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 248:
-#line 1687 "pir.y"
+#line 1688 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
   case 249:
-#line 1691 "pir.y"
+#line 1692 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 250:
-#line 1695 "pir.y"
+#line 1696 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
   case 251:
-#line 1697 "pir.y"
+#line 1698 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
     break;
 
   case 252:
-#line 1700 "pir.y"
+#line 1701 "pir.y"
     { (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ), (yyvsp[(5) - (5)].expr)); ;}
     break;
 
   case 253:
-#line 1704 "pir.y"
+#line 1705 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
   case 254:
-#line 1706 "pir.y"
+#line 1707 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
     break;
 
   case 255:
-#line 1710 "pir.y"
+#line 1711 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
   case 256:
-#line 1712 "pir.y"
+#line 1713 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
   case 257:
-#line 1716 "pir.y"
+#line 1717 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
   case 258:
-#line 1718 "pir.y"
+#line 1719 "pir.y"
     {
                              if ((yyvsp[(2) - (2)].targ))
                                  (yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].targ));
@@ -3997,32 +3998,32 @@
     break;
 
   case 259:
-#line 1727 "pir.y"
+#line 1728 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
     break;
 
   case 260:
-#line 1729 "pir.y"
+#line 1730 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
   case 262:
-#line 1737 "pir.y"
+#line 1738 "pir.y"
     { (yyval.invo) = set_invocation_results(lexer, (yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
     break;
 
   case 263:
-#line 1739 "pir.y"
+#line 1740 "pir.y"
     { (yyval.invo) = set_invocation_results(lexer, (yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
     break;
 
   case 264:
-#line 1741 "pir.y"
+#line 1742 "pir.y"
     {  (yyval.invo) = set_invocation_results(lexer, (yyvsp[(1) - (1)].invo), NULL); ;}
     break;
 
   case 267:
-#line 1749 "pir.y"
+#line 1750 "pir.y"
     {
                              /* if $1 is not a register, check whether the symbol was declared */
                              if (!TEST_FLAG((yyvsp[(1) - (4)].targ)->flags, TARGET_FLAG_IS_REG)) {
@@ -4043,7 +4044,7 @@
     break;
 
   case 268:
-#line 1769 "pir.y"
+#line 1770 "pir.y"
     {
                              (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1) - (2)].targ), NULL);
                              set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (2)].argm));
@@ -4051,12 +4052,12 @@
     break;
 
   case 269:
-#line 1776 "pir.y"
+#line 1777 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
   case 270:
-#line 1778 "pir.y"
+#line 1779 "pir.y"
     {
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                              if (sym == NULL)
@@ -4067,7 +4068,7 @@
     break;
 
   case 271:
-#line 1788 "pir.y"
+#line 1789 "pir.y"
     { /* check that this identifier was declared */
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
 
@@ -4087,22 +4088,22 @@
     break;
 
   case 272:
-#line 1805 "pir.y"
+#line 1806 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival))); ;}
     break;
 
   case 273:
-#line 1807 "pir.y"
+#line 1808 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival))); ;}
     break;
 
   case 274:
-#line 1809 "pir.y"
+#line 1810 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval))); ;}
     break;
 
   case 275:
-#line 1813 "pir.y"
+#line 1814 "pir.y"
     {
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                              if (sym == NULL)
@@ -4114,74 +4115,74 @@
     break;
 
   case 276:
-#line 1822 "pir.y"
+#line 1823 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
   case 277:
-#line 1827 "pir.y"
+#line 1828 "pir.y"
     {
                              (yyval.targ) = (yyvsp[(2) - (3)].targ);
                            ;}
     break;
 
   case 278:
-#line 1833 "pir.y"
+#line 1834 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
   case 279:
-#line 1835 "pir.y"
+#line 1836 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
   case 280:
-#line 1839 "pir.y"
+#line 1840 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
   case 281:
-#line 1841 "pir.y"
+#line 1842 "pir.y"
     { (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
   case 282:
-#line 1845 "pir.y"
+#line 1846 "pir.y"
     { (yyval.targ) = set_param_flag(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 283:
-#line 1847 "pir.y"
+#line 1848 "pir.y"
     { (yyval.targ) = set_param_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
     break;
 
   case 284:
-#line 1851 "pir.y"
+#line 1852 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 285:
-#line 1853 "pir.y"
+#line 1854 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 286:
-#line 1857 "pir.y"
+#line 1858 "pir.y"
     { (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
     break;
 
   case 287:
-#line 1859 "pir.y"
+#line 1860 "pir.y"
     { (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
     break;
 
   case 288:
-#line 1861 "pir.y"
+#line 1862 "pir.y"
     { (yyval.ival) = TARGET_FLAG_SLURPY; ;}
     break;
 
   case 289:
-#line 1863 "pir.y"
+#line 1864 "pir.y"
     {
                              (yyval.ival) = TARGET_FLAG_NAMED;
                              set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -4189,12 +4190,12 @@
     break;
 
   case 290:
-#line 1873 "pir.y"
+#line 1874 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
   case 295:
-#line 1883 "pir.y"
+#line 1884 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
@@ -4202,7 +4203,7 @@
     break;
 
   case 296:
-#line 1888 "pir.y"
+#line 1889 "pir.y"
     { /* was the invocation a method call? then it becomes a method tail
                                * call, otherwise it's just a normal (sub) tail call.
                                */
@@ -4214,7 +4215,7 @@
     break;
 
   case 297:
-#line 1899 "pir.y"
+#line 1900 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
@@ -4222,47 +4223,47 @@
     break;
 
   case 298:
-#line 1906 "pir.y"
+#line 1907 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 299:
-#line 1910 "pir.y"
+#line 1911 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
   case 300:
-#line 1912 "pir.y"
+#line 1913 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 301:
-#line 1916 "pir.y"
+#line 1917 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 302:
-#line 1918 "pir.y"
+#line 1919 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
     break;
 
   case 305:
-#line 1926 "pir.y"
+#line 1927 "pir.y"
     { (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
     break;
 
   case 306:
-#line 1930 "pir.y"
+#line 1931 "pir.y"
     { (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 307:
-#line 1934 "pir.y"
+#line 1935 "pir.y"
     { (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr)));  ;}
     break;
 
   case 308:
-#line 1940 "pir.y"
+#line 1941 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
@@ -4270,7 +4271,7 @@
     break;
 
   case 309:
-#line 1949 "pir.y"
+#line 1950 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
@@ -4278,72 +4279,72 @@
     break;
 
   case 310:
-#line 1956 "pir.y"
+#line 1957 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
   case 311:
-#line 1958 "pir.y"
+#line 1959 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 312:
-#line 1963 "pir.y"
+#line 1964 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 313:
-#line 1965 "pir.y"
+#line 1966 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
   case 314:
-#line 1970 "pir.y"
+#line 1971 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 315:
-#line 1974 "pir.y"
+#line 1975 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
   case 316:
-#line 1976 "pir.y"
+#line 1977 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 317:
-#line 1980 "pir.y"
+#line 1981 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 318:
-#line 1982 "pir.y"
+#line 1983 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
   case 319:
-#line 1986 "pir.y"
+#line 1987 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 320:
-#line 1991 "pir.y"
+#line 1992 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 321:
-#line 1993 "pir.y"
+#line 1994 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 322:
-#line 1997 "pir.y"
+#line 1998 "pir.y"
     { (yyval.ival) = ARG_FLAG_FLAT; ;}
     break;
 
   case 323:
-#line 1999 "pir.y"
+#line 2000 "pir.y"
     {
                                (yyval.ival) = ARG_FLAG_NAMED;
                                set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -4351,62 +4352,62 @@
     break;
 
   case 324:
-#line 2006 "pir.y"
+#line 2007 "pir.y"
     { (yyval.sval) = NULL; ;}
     break;
 
   case 325:
-#line 2008 "pir.y"
+#line 2009 "pir.y"
     { (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
     break;
 
   case 326:
-#line 2012 "pir.y"
+#line 2013 "pir.y"
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
   case 328:
-#line 2019 "pir.y"
+#line 2020 "pir.y"
     { store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
     break;
 
   case 331:
-#line 2027 "pir.y"
+#line 2028 "pir.y"
     { (yyval.cdec) = (yyvsp[(2) - (2)].cdec); ;}
     break;
 
   case 334:
-#line 2035 "pir.y"
+#line 2036 "pir.y"
     { store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
     break;
 
   case 335:
-#line 2039 "pir.y"
+#line 2040 "pir.y"
     { (yyval.cdec) = new_named_const(lexer, INT_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
     break;
 
   case 336:
-#line 2041 "pir.y"
+#line 2042 "pir.y"
     { (yyval.cdec) = new_named_const(lexer, NUM_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
     break;
 
   case 337:
-#line 2043 "pir.y"
+#line 2044 "pir.y"
     { (yyval.cdec) = new_named_const(lexer, STRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 338:
-#line 2045 "pir.y"
+#line 2046 "pir.y"
     { (yyval.cdec) = new_named_const(lexer, USTRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ustr)); ;}
     break;
 
   case 339:
-#line 2049 "pir.y"
+#line 2050 "pir.y"
     { (yyval.cdec) = new_pmc_const(lexer, (yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
     break;
 
   case 341:
-#line 2054 "pir.y"
+#line 2055 "pir.y"
     { /* this alternative is necessary, otherwise the parser
                                * just stops when assigning an identifier to a pmc
                                * const, without an error message. That may be
@@ -4417,97 +4418,97 @@
     break;
 
   case 342:
-#line 2066 "pir.y"
+#line 2067 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 343:
-#line 2067 "pir.y"
+#line 2068 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
   case 344:
-#line 2071 "pir.y"
+#line 2072 "pir.y"
     { (yyval.cval) = new_const(lexer, INT_VAL, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
   case 345:
-#line 2072 "pir.y"
+#line 2073 "pir.y"
     { (yyval.cval) = new_const(lexer, NUM_VAL, (yyvsp[(1) - (1)].dval)); ;}
     break;
 
   case 346:
-#line 2073 "pir.y"
+#line 2074 "pir.y"
     { (yyval.cval) = (yyvsp[(1) - (1)].cval); ;}
     break;
 
   case 347:
-#line 2076 "pir.y"
+#line 2077 "pir.y"
     { (yyval.cval) = new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 348:
-#line 2077 "pir.y"
+#line 2078 "pir.y"
     { (yyval.cval) = new_const(lexer, USTRING_VAL, (yyvsp[(1) - (1)].ustr)); ;}
     break;
 
   case 349:
-#line 2080 "pir.y"
+#line 2081 "pir.y"
     { (yyval.ival) = OP_NE; ;}
     break;
 
   case 350:
-#line 2081 "pir.y"
+#line 2082 "pir.y"
     { (yyval.ival) = OP_EQ; ;}
     break;
 
   case 351:
-#line 2082 "pir.y"
+#line 2083 "pir.y"
     { (yyval.ival) = OP_LT; ;}
     break;
 
   case 352:
-#line 2083 "pir.y"
+#line 2084 "pir.y"
     { (yyval.ival) = OP_LE; ;}
     break;
 
   case 353:
-#line 2084 "pir.y"
+#line 2085 "pir.y"
     { (yyval.ival) = OP_GE; ;}
     break;
 
   case 354:
-#line 2085 "pir.y"
+#line 2086 "pir.y"
     { (yyval.ival) = OP_GT; ;}
     break;
 
   case 355:
-#line 2088 "pir.y"
+#line 2089 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
   case 356:
-#line 2089 "pir.y"
+#line 2090 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
   case 357:
-#line 2090 "pir.y"
+#line 2091 "pir.y"
     { (yyval.ival) = PMC_TYPE; ;}
     break;
 
   case 358:
-#line 2091 "pir.y"
+#line 2092 "pir.y"
     { (yyval.ival) = STRING_TYPE; ;}
     break;
 
   case 359:
-#line 2099 "pir.y"
+#line 2100 "pir.y"
     { set_curtarget(lexer, (yyvsp[(1) - (1)].targ));  ;}
     break;
 
   case 361:
-#line 2103 "pir.y"
+#line 2104 "pir.y"
     { /* a symbol must have been declared; check that at this point. */
                            symbol * sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                            if (sym == NULL) {
@@ -4522,277 +4523,277 @@
     break;
 
   case 362:
-#line 2116 "pir.y"
+#line 2117 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
   case 363:
-#line 2117 "pir.y"
+#line 2118 "pir.y"
     { (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
   case 364:
-#line 2118 "pir.y"
+#line 2119 "pir.y"
     { (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
   case 365:
-#line 2119 "pir.y"
+#line 2120 "pir.y"
     { (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
   case 368:
-#line 2127 "pir.y"
+#line 2128 "pir.y"
     { (yyval.sval) = "if"; ;}
     break;
 
   case 369:
-#line 2128 "pir.y"
+#line 2129 "pir.y"
     { (yyval.sval) = "unless"; ;}
     break;
 
   case 370:
-#line 2129 "pir.y"
+#line 2130 "pir.y"
     { (yyval.sval) = "goto"; ;}
     break;
 
   case 371:
-#line 2130 "pir.y"
+#line 2131 "pir.y"
     { (yyval.sval) = "int"; ;}
     break;
 
   case 372:
-#line 2131 "pir.y"
+#line 2132 "pir.y"
     { (yyval.sval) = "num"; ;}
     break;
 
   case 373:
-#line 2132 "pir.y"
+#line 2133 "pir.y"
     { (yyval.sval) = "string"; ;}
     break;
 
   case 374:
-#line 2133 "pir.y"
+#line 2134 "pir.y"
     { (yyval.sval) = "pmc"; ;}
     break;
 
   case 375:
-#line 2134 "pir.y"
+#line 2135 "pir.y"
     { (yyval.sval) = "null"; ;}
     break;
 
   case 376:
-#line 2137 "pir.y"
+#line 2138 "pir.y"
     { (yyval.sval) = "neg"; ;}
     break;
 
   case 377:
-#line 2138 "pir.y"
+#line 2139 "pir.y"
     { (yyval.sval) = "not"; ;}
     break;
 
   case 378:
-#line 2139 "pir.y"
+#line 2140 "pir.y"
     { (yyval.sval) = "bnot"; ;}
     break;
 
   case 379:
-#line 2142 "pir.y"
+#line 2143 "pir.y"
     { (yyval.ival) = OP_ADD; ;}
     break;
 
   case 380:
-#line 2143 "pir.y"
+#line 2144 "pir.y"
     { (yyval.ival) = OP_SUB; ;}
     break;
 
   case 381:
-#line 2144 "pir.y"
+#line 2145 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
   case 382:
-#line 2145 "pir.y"
+#line 2146 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
   case 383:
-#line 2146 "pir.y"
+#line 2147 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
   case 384:
-#line 2147 "pir.y"
+#line 2148 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
   case 385:
-#line 2148 "pir.y"
+#line 2149 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
   case 386:
-#line 2149 "pir.y"
+#line 2150 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
   case 387:
-#line 2150 "pir.y"
+#line 2151 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
   case 388:
-#line 2151 "pir.y"
+#line 2152 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
   case 389:
-#line 2152 "pir.y"
+#line 2153 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
   case 390:
-#line 2153 "pir.y"
+#line 2154 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
   case 391:
-#line 2154 "pir.y"
+#line 2155 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
   case 392:
-#line 2155 "pir.y"
+#line 2156 "pir.y"
     { (yyval.ival) = OP_OR; ;}
     break;
 
   case 393:
-#line 2156 "pir.y"
+#line 2157 "pir.y"
     { (yyval.ival) = OP_AND; ;}
     break;
 
   case 394:
-#line 2157 "pir.y"
+#line 2158 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
   case 395:
-#line 2158 "pir.y"
+#line 2159 "pir.y"
     { (yyval.ival) = OP_XOR; ;}
     break;
 
   case 396:
-#line 2159 "pir.y"
+#line 2160 "pir.y"
     { (yyval.ival) = OP_ISEQ; ;}
     break;
 
   case 397:
-#line 2160 "pir.y"
+#line 2161 "pir.y"
     { (yyval.ival) = OP_ISLE; ;}
     break;
 
   case 398:
-#line 2161 "pir.y"
+#line 2162 "pir.y"
     { (yyval.ival) = OP_ISLT; ;}
     break;
 
   case 399:
-#line 2162 "pir.y"
+#line 2163 "pir.y"
     { (yyval.ival) = OP_ISGE; ;}
     break;
 
   case 400:
-#line 2163 "pir.y"
+#line 2164 "pir.y"
     { (yyval.ival) = OP_ISGT; ;}
     break;
 
   case 401:
-#line 2164 "pir.y"
+#line 2165 "pir.y"
     { (yyval.ival) = OP_ISNE; ;}
     break;
 
   case 402:
-#line 2170 "pir.y"
+#line 2171 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
   case 403:
-#line 2171 "pir.y"
+#line 2172 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
   case 404:
-#line 2172 "pir.y"
+#line 2173 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
   case 405:
-#line 2173 "pir.y"
+#line 2174 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
   case 406:
-#line 2174 "pir.y"
+#line 2175 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
   case 407:
-#line 2175 "pir.y"
+#line 2176 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
   case 408:
-#line 2176 "pir.y"
+#line 2177 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
   case 409:
-#line 2177 "pir.y"
+#line 2178 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
   case 410:
-#line 2178 "pir.y"
+#line 2179 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
   case 411:
-#line 2179 "pir.y"
+#line 2180 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
   case 412:
-#line 2180 "pir.y"
+#line 2181 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
   case 413:
-#line 2181 "pir.y"
+#line 2182 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
   case 415:
-#line 2202 "pir.y"
-    { new_subr(lexer, "@start"); ;}
+#line 2203 "pir.y"
+    { new_subr(lexer, Parrot_str_new(lexer->interp, "@start", 6)); ;}
     break;
 
   case 424:
-#line 2218 "pir.y"
+#line 2219 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
   case 429:
-#line 2228 "pir.y"
+#line 2229 "pir.y"
     { set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
     break;
 
   case 430:
-#line 2232 "pir.y"
+#line 2233 "pir.y"
     { new_subr(lexer, NULL); ;}
     break;
 
   case 431:
-#line 2237 "pir.y"
+#line 2238 "pir.y"
     {
 
                                   if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval))) {
@@ -4807,7 +4808,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 4811 "pirparser.c"
+#line 4812 "pirparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5021,7 +5022,7 @@
 }
 
 
-#line 2251 "pir.y"
+#line 2252 "pir.y"
 
 
 

Modified: trunk/compilers/pirc/src/pirparser.h
==============================================================================
--- trunk/compilers/pirc/src/pirparser.h	Sat Oct 24 09:36:28 2009	(r42074)
+++ trunk/compilers/pirc/src/pirparser.h	Sat Oct 24 10:08:35 2009	(r42075)
@@ -298,9 +298,10 @@
     struct symbol      *symb;
     struct macro_def   *mval;
     struct macro_param *pval;
+    STRING             *parrotstring;
 }
 /* Line 1529 of yacc.c.  */
-#line 304 "pirparser.h"
+#line 305 "pirparser.h"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1


More information about the parrot-commits mailing list