Front page | perl.cvs.parrot |
Postings from January 2009
[svn:parrot] r34918 - trunk/compilers/pirc/src
From:
kjs
Date:
January 4, 2009 06:30
Subject:
[svn:parrot] r34918 - trunk/compilers/pirc/src
Message ID:
20090104142954.1A1A2CB9F9@x12.develooper.com
Author: kjs
Date: Sun Jan 4 06:29:52 2009
New Revision: 34918
Modified:
trunk/compilers/pirc/src/bcgen.c
trunk/compilers/pirc/src/pir.y
trunk/compilers/pirc/src/pircompunit.c
trunk/compilers/pirc/src/pircompunit.h
trunk/compilers/pirc/src/piremit.c
trunk/compilers/pirc/src/pirparser.c
trunk/compilers/pirc/src/pirparser.h
trunk/compilers/pirc/src/pirsymbol.c
trunk/compilers/pirc/src/pirsymbol.h
Log:
[pirc] refactoring for .const.pir
+ new constdecl struct to replace constant for declarations; the latter can now be stripped of its name field.
Modified: trunk/compilers/pirc/src/bcgen.c
==============================================================================
--- trunk/compilers/pirc/src/bcgen.c (original)
+++ trunk/compilers/pirc/src/bcgen.c Sun Jan 4 06:29:52 2009
@@ -118,12 +118,12 @@
/* Update the constant count and reallocate */
if (interp->code->const_table->constants)
- interp->code->const_table->constants =
- mem_realloc_n_typed(interp->code->const_table->constants,
+ interp->code->const_table->constants
+ = mem_realloc_n_typed(interp->code->const_table->constants,
newcount, PackFile_Constant *);
else
- interp->code->const_table->constants =
- mem_allocate_n_typed(newcount, PackFile_Constant *);
+ interp->code->const_table->constants
+ = mem_allocate_n_typed(newcount, PackFile_Constant *);
interp->code->const_table->constants[oldcount] = new_pbc_constant;
interp->code->const_table->const_count = newcount;
Modified: trunk/compilers/pirc/src/pir.y
==============================================================================
--- trunk/compilers/pirc/src/pir.y (original)
+++ trunk/compilers/pirc/src/pir.y Sun Jan 4 06:29:52 2009
@@ -239,6 +239,7 @@
unsigned uval;
char const *sval;
struct constant *cval;
+ struct constdecl *cdec;
struct ucstring *ustr;
struct instruction *instr;
struct expression *expr;
@@ -491,10 +492,14 @@
short_invocation
return_instr
-%type <cval> const_tail
- constant
+%type <cval> constant
stringconst
+%type <cdec> const_tail
+ const_decl
+ globalconst_decl
+ const_stat
+
/* all exported functions start with "yypir", instead of default "yy". */
%name-prefix="yypir"
@@ -1994,6 +1999,7 @@
;
const_decl_stat : const_stat "\n"
+
;
const_stat : const_decl
Modified: trunk/compilers/pirc/src/pircompunit.c
==============================================================================
--- trunk/compilers/pirc/src/pircompunit.c (original)
+++ trunk/compilers/pirc/src/pircompunit.c Sun Jan 4 06:29:52 2009
@@ -1242,9 +1242,8 @@
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
static constant *
-create_const(lexer_state * const lexer, value_type type, char const * const name, va_list arg_ptr) {
+create_const(lexer_state * const lexer, value_type type, va_list arg_ptr) {
constant *c = pir_mem_allocate_zeroed_typed(lexer, constant);
- c->name = name;
c->type = type;
c->next = NULL;
@@ -1274,6 +1273,29 @@
/*
=item C<constant *
+new_const(lexer_state * const lexer, value_type type, ...)>
+
+Creates a new constant node of the given type.
+Wrapper function for C<create_const>
+
+=cut
+
+*/
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+constant *
+new_const(lexer_state * const lexer, value_type type, ...) {
+ constant *c;
+ va_list arg_ptr;
+ va_start(arg_ptr, type);
+ c = create_const(lexer, type, arg_ptr);
+ va_end(arg_ptr);
+ return c;
+}
+
+/*
+
+=item C<constant *
new_named_const(lexer_state * const lexer, value_type type, char * const name, ...)>
Creates a new constant node of the given type, by the given name.
@@ -1284,12 +1306,34 @@
*/
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
-constant *
+constdecl *
new_named_const(lexer_state * const lexer, value_type type, char const * const name, ...) {
- constant *c;
+ constdecl *c = pir_mem_allocate(lexer, sizeof (constdecl));
va_list arg_ptr;
va_start(arg_ptr, name);
- c = create_const(lexer, type, name, arg_ptr);
+
+ /* based on the indicated type, cast the variable argument to the right type. */
+ switch (type) {
+ case INT_VAL:
+ c->val.ival = va_arg(arg_ptr, int);
+ break;
+ case NUM_VAL:
+ c->val.nval = va_arg(arg_ptr, double);
+ break;
+ case PMC_VAL: /* value of a PMC_VAL constant is also a string */
+ case STRING_VAL:
+ c->val.sval = va_arg(arg_ptr, char *);
+ break;
+ case USTRING_VAL:
+ c->val.ustr = va_arg(arg_ptr, ucstring *);
+ break;
+ default:
+ panic(lexer, "unknown data type in create_const() (%d)", type);
+ break;
+ }
+
+ c->name = name;
+ c->type = type;
va_end(arg_ptr);
return c;
}
@@ -1306,7 +1350,7 @@
=cut
*/
-constant *
+constdecl *
new_pmc_const(lexer_state * const lexer, char const * const type,
char const * const name, constant * const value)
{
@@ -1319,6 +1363,7 @@
/* check whether that PMC isa "Sub" */
INTVAL is_a_sub = VTABLE_isa(lexer->interp, constclass, subclassname);
+ constdecl *decl = (constdecl *)pir_mem_allocate(lexer, sizeof (constdecl));
/* fprintf(stderr, "new_pmc_const: is a sub=%d\n", is_a_sub);
*/
@@ -1333,7 +1378,6 @@
declare_local(lexer, PMC_TYPE, constsym);
assign_vanilla_register(lexer, constsym);
- value->name = name; /* set name of constant node */
value->type = PMC_VAL; /* set type of constant node */
value->val.pval = value->val.sval;
@@ -1346,6 +1390,9 @@
push_operand(lexer, expr_from_target(lexer, consttarg));
push_operand(lexer, expr_from_const(lexer, value));
+ decl->name = name;
+ decl->type = PMC_VAL;
+ decl->val.pval = value->val.sval;
}
else if (value->type == INT_VAL) {
@@ -1365,7 +1412,6 @@
declare_local(lexer, PMC_TYPE, constsym);
assign_vanilla_register(lexer, constsym);
- value->name = name;
new_sub_instr(lexer, PARROT_OP_set_p_pc, "set_p_pc", 0);
push_operand(lexer, expr_from_target(lexer, consttarg));
@@ -1394,8 +1440,6 @@
declare_local(lexer, PMC_TYPE, constsym);
assign_vanilla_register(lexer, constsym);
- value->name = name;
-
new_sub_instr(lexer, PARROT_OP_set_p_pc, "set_p_pc", 0);
push_operand(lexer, expr_from_target(lexer, consttarg));
push_operand(lexer, expr_from_int(lexer, index));
@@ -1424,8 +1468,6 @@
declare_local(lexer, PMC_TYPE, constsym);
assign_vanilla_register(lexer, constsym);
- value->name = name;
-
new_sub_instr(lexer, PARROT_OP_set_p_pc, "set_p_pc", 0);
push_operand(lexer, expr_from_target(lexer, consttarg));
push_operand(lexer, expr_from_int(lexer, index));
@@ -1437,31 +1479,10 @@
}
}
- return value;
+ return decl;
}
-/*
-
-=item C<constant *
-new_const(lexer_state * const lexer, value_type type, ...)>
-Creates a new constant node of the given type.
-Wrapper function for C<create_const>
-
-=cut
-
-*/
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-constant *
-new_const(lexer_state * const lexer, value_type type, ...) {
- constant *c;
- va_list arg_ptr;
- va_start(arg_ptr, type);
- c = create_const(lexer, type, NULL, arg_ptr);
- va_end(arg_ptr);
- return c;
-}
/*
Modified: trunk/compilers/pirc/src/pircompunit.h
==============================================================================
--- trunk/compilers/pirc/src/pircompunit.h (original)
+++ trunk/compilers/pirc/src/pircompunit.h Sun Jan 4 06:29:52 2009
@@ -155,10 +155,18 @@
} value;
+/* represent a .const or .globalconst declaration */
+typedef struct constdecl {
+ char const *name;
+ int global;
+ value_type type;
+ value val;
+
+} constdecl;
+
/* literal constants, possibly named */
typedef struct constant {
- char const *name; /* name of the constant, if declared as a constant */
value_type type; /* type of the constant; see enum value_types */
value val; /* value of the constant */
struct constant *next;
@@ -299,7 +307,7 @@
struct symbol *sym;
struct local_label *loc;
struct global_label *glob;
- struct constant *cons;
+ struct constdecl *cons;
} u;
struct bucket *next; /* link to next bucket, in case of hash clash */
@@ -378,12 +386,12 @@
argument *set_arg_alias(struct lexer_state * const lexer, char const * const alias);
/* constructors for constant nodes */
-constant *new_named_const(struct lexer_state * const lexer, value_type type,
+constdecl *new_named_const(struct lexer_state * const lexer, value_type type,
char const * const name, ...);
constant *new_const(struct lexer_state * const lexer, value_type type, ...);
-constant *new_pmc_const(struct lexer_state * const lexer, char const * const type,
+constdecl *new_pmc_const(struct lexer_state * const lexer, char const * const type,
char const * const name, constant * const value);
/* conversion functions, each wrapping its argument in an expression node */
Modified: trunk/compilers/pirc/src/piremit.c
==============================================================================
--- trunk/compilers/pirc/src/piremit.c (original)
+++ trunk/compilers/pirc/src/piremit.c Sun Jan 4 06:29:52 2009
@@ -481,7 +481,7 @@
break;
}
case PMC_VAL: {
- if (c->name) { /* XXX this check necessary? */
+
/* look up the sub by its name stored in c->val.pval, then
* find out what that sub's PMC_CONST is in the constant table,
* and emit that.
@@ -497,7 +497,7 @@
yypirerror(lexer->yyscanner, lexer,
"cannot find referenced sub '%s'", c->val.pval);
}
- }
+
break;
}
case USTRING_VAL: {
Modified: trunk/compilers/pirc/src/pirparser.c
==============================================================================
--- trunk/compilers/pirc/src/pirparser.c (original)
+++ trunk/compilers/pirc/src/pirparser.c Sun Jan 4 06:29:52 2009
@@ -574,6 +574,7 @@
unsigned uval;
char const *sval;
struct constant *cval;
+ struct constdecl *cdec;
struct ucstring *ustr;
struct instruction *instr;
struct expression *expr;
@@ -586,7 +587,7 @@
struct macro_param *pval;
}
/* Line 187 of yacc.c. */
-#line 590 "pirparser.c"
+#line 591 "pirparser.c"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
@@ -599,7 +600,7 @@
/* Line 216 of yacc.c. */
-#line 603 "pirparser.c"
+#line 604 "pirparser.c"
#ifdef short
# undef short
@@ -1055,49 +1056,49 @@
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 553, 553, 554, 559, 565, 566, 569, 570, 573,
- 574, 575, 576, 577, 578, 579, 580, 581, 588, 589,
- 592, 596, 602, 609, 610, 613, 614, 617, 621, 622,
- 625, 626, 629, 632, 633, 636, 640, 651, 655, 657,
- 661, 667, 671, 675, 680, 681, 685, 687, 691, 695,
- 701, 705, 709, 710, 713, 714, 717, 719, 721, 723,
- 725, 727, 729, 731, 733, 735, 737, 739, 741, 743,
- 747, 752, 756, 760, 769, 780, 782, 784, 788, 797,
- 798, 811, 815, 820, 821, 825, 826, 827, 830, 837,
- 843, 844, 854, 856, 859, 860, 861, 862, 863, 864,
- 865, 866, 867, 868, 869, 870, 871, 872, 873, 879,
- 882, 887, 888, 893, 894, 897, 899, 907, 915, 916,
- 918, 921, 927, 928, 937, 938, 939, 940, 948, 952,
- 956, 965, 972, 979, 982, 983, 986, 995, 1002, 1005,
- 1006, 1009, 1010, 1013, 1049, 1051, 1055, 1057, 1062, 1064,
- 1068, 1091, 1095, 1097, 1106, 1117, 1129, 1139, 1142, 1143,
- 1146, 1155, 1164, 1169, 1174, 1195, 1200, 1241, 1259, 1266,
- 1271, 1282, 1293, 1304, 1315, 1320, 1325, 1330, 1340, 1359,
- 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1412, 1421,
- 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1451,
- 1456, 1458, 1460, 1462, 1464, 1466, 1468, 1470, 1472, 1474,
- 1476, 1478, 1480, 1511, 1537, 1545, 1554, 1563, 1565, 1567,
- 1569, 1571, 1575, 1580, 1582, 1587, 1588, 1591, 1592, 1595,
- 1596, 1599, 1607, 1611, 1613, 1617, 1621, 1622, 1625, 1640,
- 1644, 1645, 1648, 1660, 1661, 1665, 1667, 1671, 1675, 1677,
- 1679, 1685, 1686, 1691, 1692, 1696, 1698, 1707, 1709, 1713,
- 1717, 1719, 1721, 1725, 1726, 1729, 1749, 1756, 1758, 1768,
- 1785, 1787, 1789, 1793, 1802, 1807, 1814, 1815, 1819, 1821,
- 1825, 1827, 1832, 1833, 1837, 1839, 1841, 1843, 1853, 1857,
- 1858, 1859, 1860, 1863, 1868, 1879, 1886, 1891, 1892, 1896,
- 1898, 1902, 1903, 1906, 1910, 1914, 1918, 1927, 1937, 1938,
- 1943, 1945, 1950, 1955, 1956, 1960, 1962, 1966, 1972, 1973,
- 1977, 1979, 1987, 1988, 1992, 1996, 1999, 2000, 2003, 2007,
- 2011, 2013, 2015, 2017, 2025, 2026, 2030, 2031, 2032, 2035,
- 2036, 2039, 2040, 2041, 2042, 2043, 2044, 2047, 2048, 2049,
- 2050, 2058, 2061, 2062, 2073, 2074, 2075, 2076, 2080, 2081,
- 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2094, 2095,
- 2096, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107,
- 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117,
- 2118, 2119, 2120, 2121, 2127, 2128, 2129, 2130, 2131, 2132,
- 2133, 2134, 2135, 2136, 2137, 2138, 2150, 2158, 2162, 2163,
- 2166, 2167, 2168, 2169, 2170, 2171, 2174, 2176, 2177, 2180,
- 2181, 2184, 2188, 2193
+ 0, 558, 558, 559, 564, 570, 571, 574, 575, 578,
+ 579, 580, 581, 582, 583, 584, 585, 586, 593, 594,
+ 597, 601, 607, 614, 615, 618, 619, 622, 626, 627,
+ 630, 631, 634, 637, 638, 641, 645, 656, 660, 662,
+ 666, 672, 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, 802,
+ 803, 816, 820, 825, 826, 830, 831, 832, 835, 842,
+ 848, 849, 859, 861, 864, 865, 866, 867, 868, 869,
+ 870, 871, 872, 873, 874, 875, 876, 877, 878, 884,
+ 887, 892, 893, 898, 899, 902, 904, 912, 920, 921,
+ 923, 926, 932, 933, 942, 943, 944, 945, 953, 957,
+ 961, 970, 977, 984, 987, 988, 991, 1000, 1007, 1010,
+ 1011, 1014, 1015, 1018, 1054, 1056, 1060, 1062, 1067, 1069,
+ 1073, 1096, 1100, 1102, 1111, 1122, 1134, 1144, 1147, 1148,
+ 1151, 1160, 1169, 1174, 1179, 1200, 1205, 1246, 1264, 1271,
+ 1276, 1287, 1298, 1309, 1320, 1325, 1330, 1335, 1345, 1364,
+ 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412, 1417, 1426,
+ 1428, 1430, 1432, 1434, 1436, 1438, 1440, 1442, 1444, 1456,
+ 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479,
+ 1481, 1483, 1485, 1516, 1542, 1550, 1559, 1568, 1570, 1572,
+ 1574, 1576, 1580, 1585, 1587, 1592, 1593, 1596, 1597, 1600,
+ 1601, 1604, 1612, 1616, 1618, 1622, 1626, 1627, 1630, 1645,
+ 1649, 1650, 1653, 1665, 1666, 1670, 1672, 1676, 1680, 1682,
+ 1684, 1690, 1691, 1696, 1697, 1701, 1703, 1712, 1714, 1718,
+ 1722, 1724, 1726, 1730, 1731, 1734, 1754, 1761, 1763, 1773,
+ 1790, 1792, 1794, 1798, 1807, 1812, 1819, 1820, 1824, 1826,
+ 1830, 1832, 1837, 1838, 1842, 1844, 1846, 1848, 1858, 1862,
+ 1863, 1864, 1865, 1868, 1873, 1884, 1891, 1896, 1897, 1901,
+ 1903, 1907, 1908, 1911, 1915, 1919, 1923, 1932, 1942, 1943,
+ 1948, 1950, 1955, 1960, 1961, 1965, 1967, 1971, 1977, 1978,
+ 1982, 1984, 1992, 1993, 1997, 2001, 2005, 2006, 2009, 2013,
+ 2017, 2019, 2021, 2023, 2031, 2032, 2036, 2037, 2038, 2041,
+ 2042, 2045, 2046, 2047, 2048, 2049, 2050, 2053, 2054, 2055,
+ 2056, 2064, 2067, 2068, 2079, 2080, 2081, 2082, 2086, 2087,
+ 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2100, 2101,
+ 2102, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113,
+ 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123,
+ 2124, 2125, 2126, 2127, 2133, 2134, 2135, 2136, 2137, 2138,
+ 2139, 2140, 2141, 2142, 2143, 2144, 2156, 2164, 2168, 2169,
+ 2172, 2173, 2174, 2175, 2176, 2177, 2180, 2182, 2183, 2186,
+ 2187, 2190, 2194, 2199
};
#endif
@@ -2611,22 +2612,22 @@
switch (yyn)
{
case 4:
-#line 562 "pir.y"
+#line 567 "pir.y"
{ fixup_global_labels(lexer); ;}
break;
case 20:
-#line 593 "pir.y"
+#line 598 "pir.y"
{ new_macro_const(lexer->macros, (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].sval), yypirget_lineno(yyscanner)); ;}
break;
case 21:
-#line 599 "pir.y"
+#line 604 "pir.y"
{ /* fprintf(stderr, "macro body: [%s]\n", CURRENT_MACRO(lexer)->body);*/ ;}
break;
case 22:
-#line 603 "pir.y"
+#line 608 "pir.y"
{
new_macro(lexer->macros, (yyvsp[(2) - (2)].sval), yypirget_lineno(yyscanner), TRUE,
lexer->macro_size);
@@ -2634,17 +2635,17 @@
break;
case 27:
-#line 618 "pir.y"
+#line 623 "pir.y"
{ add_macro_param(CURRENT_MACRO(lexer), (yyvsp[(1) - (1)].sval)); ;}
break;
case 35:
-#line 637 "pir.y"
+#line 642 "pir.y"
{ store_macro_string(CURRENT_MACRO(lexer), "%s\n", (yyvsp[(2) - (2)].sval)); ;}
break;
case 36:
-#line 641 "pir.y"
+#line 646 "pir.y"
{
store_macro_string(CURRENT_MACRO(lexer), ".local %s %s\n",
pir_type_names[(yyvsp[(2) - (3)].ival)], (yyvsp[(3) - (3)].sval));
@@ -2652,152 +2653,152 @@
break;
case 37:
-#line 652 "pir.y"
+#line 657 "pir.y"
{ load_library(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 38:
-#line 656 "pir.y"
+#line 661 "pir.y"
{ yypirset_lineno ((yyvsp[(2) - (2)].ival), yyscanner); ;}
break;
case 39:
-#line 658 "pir.y"
+#line 663 "pir.y"
{ lexer->filename = (yyvsp[(2) - (2)].sval); ;}
break;
case 40:
-#line 662 "pir.y"
+#line 667 "pir.y"
{ annotate(lexer, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 41:
-#line 668 "pir.y"
+#line 673 "pir.y"
{ set_hll(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 42:
-#line 672 "pir.y"
+#line 677 "pir.y"
{ set_hll_map(lexer, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 43:
-#line 676 "pir.y"
+#line 681 "pir.y"
{ set_namespace(lexer, (yyvsp[(3) - (4)].key)); ;}
break;
case 44:
-#line 680 "pir.y"
+#line 685 "pir.y"
{ (yyval.key) = NULL; ;}
break;
case 45:
-#line 682 "pir.y"
+#line 687 "pir.y"
{ (yyval.key) = (yyvsp[(1) - (1)].key); ;}
break;
case 46:
-#line 686 "pir.y"
+#line 691 "pir.y"
{ (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
break;
case 47:
-#line 688 "pir.y"
+#line 693 "pir.y"
{ (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
break;
case 48:
-#line 692 "pir.y"
+#line 697 "pir.y"
{ (yyval.expr) = expr_from_string(lexer, (yyvsp[(1) - (1)].sval)); ;}
break;
case 50:
-#line 702 "pir.y"
+#line 707 "pir.y"
{ close_sub(lexer); ;}
break;
case 51:
-#line 706 "pir.y"
+#line 711 "pir.y"
{ new_subr(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 56:
-#line 718 "pir.y"
+#line 723 "pir.y"
{ set_sub_flag(lexer, PIRC_SUB_FLAG_ANON);;}
break;
case 57:
-#line 720 "pir.y"
+#line 725 "pir.y"
{ set_sub_flag(lexer, PIRC_SUB_FLAG_INIT); ;}
break;
case 58:
-#line 722 "pir.y"
+#line 727 "pir.y"
{ set_sub_flag(lexer, PIRC_SUB_FLAG_LOAD); ;}
break;
case 59:
-#line 724 "pir.y"
+#line 729 "pir.y"
{ set_sub_flag(lexer, PIRC_SUB_FLAG_MAIN); ;}
break;
case 60:
-#line 726 "pir.y"
+#line 731 "pir.y"
{ set_sub_flag(lexer, PIRC_SUB_FLAG_LEX); ;}
break;
case 61:
-#line 728 "pir.y"
+#line 733 "pir.y"
{ set_sub_flag(lexer, PIRC_SUB_FLAG_POSTCOMP); ;}
break;
case 62:
-#line 730 "pir.y"
+#line 735 "pir.y"
{ set_sub_flag(lexer, PIRC_SUB_FLAG_IMMEDIATE); ;}
break;
case 63:
-#line 732 "pir.y"
+#line 737 "pir.y"
{ set_sub_flag(lexer, PIRC_SUB_FLAG_MULTI); ;}
break;
case 64:
-#line 734 "pir.y"
+#line 739 "pir.y"
{ set_sub_outer(lexer, (yyvsp[(3) - (4)].sval)); ;}
break;
case 65:
-#line 736 "pir.y"
+#line 741 "pir.y"
{ set_sub_methodname(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 66:
-#line 738 "pir.y"
+#line 743 "pir.y"
{ set_sub_vtable(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 67:
-#line 740 "pir.y"
+#line 745 "pir.y"
{ set_sub_subid(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 68:
-#line 742 "pir.y"
+#line 747 "pir.y"
{ set_sub_instanceof(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 69:
-#line 744 "pir.y"
+#line 749 "pir.y"
{ set_sub_nsentry(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 70:
-#line 748 "pir.y"
+#line 753 "pir.y"
{ set_sub_multi_types(lexer, (yyvsp[(2) - (3)].expr)); ;}
break;
case 71:
-#line 752 "pir.y"
+#line 757 "pir.y"
{
CURRENT_SUB(lexer)->info.num_multi_types = 1;
/* n=1 means :multi() -- without any types. */
@@ -2805,12 +2806,12 @@
break;
case 72:
-#line 757 "pir.y"
+#line 762 "pir.y"
{ (yyval.expr) = (yyvsp[(1) - (1)].expr); ;}
break;
case 73:
-#line 761 "pir.y"
+#line 766 "pir.y"
{
CURRENT_SUB(lexer)->info.num_multi_types = 2;
/* start counting multi types; always 1 higher than actual number
@@ -2822,7 +2823,7 @@
break;
case 74:
-#line 770 "pir.y"
+#line 775 "pir.y"
{
++CURRENT_SUB(lexer)->info.num_multi_types;
/* link the multi types in reverse other. That's fine,
@@ -2834,22 +2835,22 @@
break;
case 75:
-#line 781 "pir.y"
+#line 786 "pir.y"
{ (yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval)); ;}
break;
case 76:
-#line 783 "pir.y"
+#line 788 "pir.y"
{ (yyval.expr) = expr_from_string(lexer, (yyvsp[(1) - (1)].sval)); ;}
break;
case 77:
-#line 785 "pir.y"
+#line 790 "pir.y"
{ (yyval.expr) = expr_from_key(lexer, (yyvsp[(1) - (1)].key)); ;}
break;
case 78:
-#line 789 "pir.y"
+#line 794 "pir.y"
{
/* if there are parameters, then emit a get_params instruction. */
if ((yyvsp[(1) - (1)].uval) > 0)
@@ -2858,12 +2859,12 @@
break;
case 79:
-#line 797 "pir.y"
+#line 802 "pir.y"
{ (yyval.uval) = 0; ;}
break;
case 80:
-#line 799 "pir.y"
+#line 804 "pir.y"
{
/* if the :named flag was set, there's an extra
* constant string argument for the name. count that too.
@@ -2877,27 +2878,27 @@
break;
case 81:
-#line 812 "pir.y"
+#line 817 "pir.y"
{ (yyval.targ) = set_param_flag(lexer, (yyvsp[(2) - (4)].targ), (yyvsp[(3) - (4)].ival)); ;}
break;
case 82:
-#line 816 "pir.y"
+#line 821 "pir.y"
{ (yyval.targ) = add_param(lexer, (yyvsp[(1) - (2)].ival), (yyvsp[(2) - (2)].sval)); ;}
break;
case 83:
-#line 820 "pir.y"
+#line 825 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 84:
-#line 822 "pir.y"
+#line 827 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 88:
-#line 831 "pir.y"
+#line 836 "pir.y"
{ (yyval.ival) = TARGET_FLAG_INVOCANT;
/* XXX handle multi_type */
@@ -2905,12 +2906,12 @@
break;
case 89:
-#line 838 "pir.y"
+#line 843 "pir.y"
{ (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
break;
case 91:
-#line 845 "pir.y"
+#line 850 "pir.y"
{
++lexer->stmt_counter;
/* increment the logical statement counter; a statement can be
@@ -2921,37 +2922,37 @@
break;
case 92:
-#line 855 "pir.y"
+#line 860 "pir.y"
{ set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
break;
case 110:
-#line 883 "pir.y"
+#line 888 "pir.y"
{ (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (3)].mval), (yyvsp[(2) - (3)].pval)); ;}
break;
case 111:
-#line 887 "pir.y"
+#line 892 "pir.y"
{ (yyval.pval) = NULL; ;}
break;
case 112:
-#line 889 "pir.y"
+#line 894 "pir.y"
{ (yyval.pval) = (yyvsp[(2) - (3)].pval); ;}
break;
case 113:
-#line 893 "pir.y"
+#line 898 "pir.y"
{ (yyval.pval) = NULL; ;}
break;
case 115:
-#line 898 "pir.y"
+#line 903 "pir.y"
{ (yyval.pval) = new_macro_param((yyvsp[(1) - (1)].sval)); ;}
break;
case 116:
-#line 900 "pir.y"
+#line 905 "pir.y"
{
macro_param *param = new_macro_param((yyvsp[(3) - (3)].sval));
param->next = (yyvsp[(1) - (3)].pval);
@@ -2960,7 +2961,7 @@
break;
case 117:
-#line 908 "pir.y"
+#line 913 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL) {
@@ -2971,22 +2972,22 @@
break;
case 119:
-#line 917 "pir.y"
+#line 922 "pir.y"
{ (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
break;
case 121:
-#line 922 "pir.y"
+#line 927 "pir.y"
{ (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
break;
case 122:
-#line 927 "pir.y"
+#line 932 "pir.y"
{ (yyval.sval) = ""; ;}
break;
case 123:
-#line 929 "pir.y"
+#line 934 "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));
@@ -2996,17 +2997,17 @@
break;
case 127:
-#line 941 "pir.y"
+#line 946 "pir.y"
{ (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
break;
case 128:
-#line 949 "pir.y"
+#line 954 "pir.y"
{ set_instr(lexer, NULL); ;}
break;
case 130:
-#line 957 "pir.y"
+#line 962 "pir.y"
{
if (lexer->parse_errors > MAX_NUM_ERRORS)
panic(lexer, "Too many errors. Compilation aborted.\n");
@@ -3016,7 +3017,7 @@
break;
case 131:
-#line 966 "pir.y"
+#line 971 "pir.y"
{
set_instrf(lexer, "null", "%T", (yyvsp[(2) - (3)].targ));
get_opinfo(yyscanner);
@@ -3024,7 +3025,7 @@
break;
case 132:
-#line 973 "pir.y"
+#line 978 "pir.y"
{
set_instrf(lexer, "get_results", "%T", (yyvsp[(2) - (3)].targ));
get_opinfo(yyscanner);
@@ -3032,7 +3033,7 @@
break;
case 136:
-#line 987 "pir.y"
+#line 992 "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.
*/
@@ -3042,7 +3043,7 @@
break;
case 137:
-#line 996 "pir.y"
+#line 1001 "pir.y"
{ /* when this rule is activated, the initial identifier must
* be a parrot op.
*/
@@ -3052,7 +3053,7 @@
break;
case 143:
-#line 1014 "pir.y"
+#line 1019 "pir.y"
{
/* the "instruction" that was set now appears to be
* an identifier; get the name, and check its type.
@@ -3089,22 +3090,22 @@
break;
case 144:
-#line 1050 "pir.y"
+#line 1055 "pir.y"
{ push_operand(lexer, (yyvsp[(1) - (1)].expr)); ;}
break;
case 145:
-#line 1052 "pir.y"
+#line 1057 "pir.y"
{ push_operand(lexer, expr_from_key(lexer, (yyvsp[(1) - (1)].key))); ;}
break;
case 146:
-#line 1056 "pir.y"
+#line 1061 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
break;
case 147:
-#line 1058 "pir.y"
+#line 1063 "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));
@@ -3112,17 +3113,17 @@
break;
case 148:
-#line 1063 "pir.y"
+#line 1068 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 149:
-#line 1065 "pir.y"
+#line 1070 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 150:
-#line 1069 "pir.y"
+#line 1074 "pir.y"
{
/* if $1 is a register, just return that */
if (TEST_FLAG((yyvsp[(1) - (2)].targ)->flags, TARGET_FLAG_IS_REG))
@@ -3146,22 +3147,22 @@
break;
case 151:
-#line 1092 "pir.y"
+#line 1097 "pir.y"
{ (yyval.key) = (yyvsp[(2) - (3)].key); ;}
break;
case 152:
-#line 1096 "pir.y"
+#line 1101 "pir.y"
{ (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
break;
case 153:
-#line 1098 "pir.y"
+#line 1103 "pir.y"
{ (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
break;
case 154:
-#line 1107 "pir.y"
+#line 1112 "pir.y"
{
/* the instruction is already set in parrot_op rule */
unshift_operand(lexer, (yyvsp[(4) - (6)].expr));
@@ -3175,7 +3176,7 @@
break;
case 155:
-#line 1118 "pir.y"
+#line 1123 "pir.y"
{
/* the instruction is already set in parrot_op rule */
unshift_operand(lexer, (yyvsp[(4) - (4)].expr));
@@ -3190,7 +3191,7 @@
break;
case 156:
-#line 1130 "pir.y"
+#line 1135 "pir.y"
{ /* XXX create a PMC const for $4 */
unshift_operand(lexer, expr_from_key(lexer, (yyvsp[(4) - (6)].key)));
unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (6)].targ)));
@@ -3201,7 +3202,7 @@
break;
case 160:
-#line 1147 "pir.y"
+#line 1152 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 0)
set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3213,7 +3214,7 @@
break;
case 161:
-#line 1156 "pir.y"
+#line 1161 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 0.0)
set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3225,7 +3226,7 @@
break;
case 162:
-#line 1165 "pir.y"
+#line 1170 "pir.y"
{
set_instrf(lexer, "set", "%T%C", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].cval));
get_opinfo(yyscanner);
@@ -3233,7 +3234,7 @@
break;
case 163:
-#line 1170 "pir.y"
+#line 1175 "pir.y"
{
set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
get_opinfo(yyscanner);
@@ -3241,7 +3242,7 @@
break;
case 164:
-#line 1175 "pir.y"
+#line 1180 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
if (sym) {
@@ -3265,7 +3266,7 @@
break;
case 165:
-#line 1196 "pir.y"
+#line 1201 "pir.y"
{
unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
get_opinfo(yyscanner);
@@ -3273,7 +3274,7 @@
break;
case 166:
-#line 1201 "pir.y"
+#line 1206 "pir.y"
{
/* $P0 = foo ["bar"]
*
@@ -3317,7 +3318,7 @@
break;
case 167:
-#line 1242 "pir.y"
+#line 1247 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(3) - (4)].sval));
target *t;
@@ -3338,7 +3339,7 @@
break;
case 168:
-#line 1260 "pir.y"
+#line 1265 "pir.y"
{
target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (4)].ival));
set_target_key(preg, (yyvsp[(4) - (4)].key));
@@ -3348,7 +3349,7 @@
break;
case 169:
-#line 1267 "pir.y"
+#line 1272 "pir.y"
{
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].expr));
get_opinfo(yyscanner);
@@ -3356,7 +3357,7 @@
break;
case 170:
-#line 1272 "pir.y"
+#line 1277 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 1)
set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3370,7 +3371,7 @@
break;
case 171:
-#line 1283 "pir.y"
+#line 1288 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 1.0)
set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3384,7 +3385,7 @@
break;
case 172:
-#line 1294 "pir.y"
+#line 1299 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 1)
set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3398,7 +3399,7 @@
break;
case 173:
-#line 1305 "pir.y"
+#line 1310 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 1.0)
set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3412,7 +3413,7 @@
break;
case 174:
-#line 1316 "pir.y"
+#line 1321 "pir.y"
{
set_instrf(lexer, "add", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
get_opinfo(yyscanner);
@@ -3420,7 +3421,7 @@
break;
case 175:
-#line 1321 "pir.y"
+#line 1326 "pir.y"
{
set_instrf(lexer, "sub", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
get_opinfo(yyscanner);
@@ -3428,7 +3429,7 @@
break;
case 176:
-#line 1326 "pir.y"
+#line 1331 "pir.y"
{
set_instrf(lexer, (yyvsp[(3) - (4)].sval), "%T%E", (yyvsp[(1) - (4)].targ), (yyvsp[(4) - (4)].expr));
get_opinfo(yyscanner);
@@ -3436,7 +3437,7 @@
break;
case 177:
-#line 1331 "pir.y"
+#line 1336 "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));
@@ -3449,7 +3450,7 @@
break;
case 178:
-#line 1341 "pir.y"
+#line 1346 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (4)].sval));
target *t;
@@ -3471,7 +3472,7 @@
break;
case 179:
-#line 1360 "pir.y"
+#line 1365 "pir.y"
{
target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (4)].ival));
set_target_key(preg, (yyvsp[(2) - (4)].key));
@@ -3481,97 +3482,97 @@
break;
case 180:
-#line 1394 "pir.y"
+#line 1399 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%i%T", (yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].targ)); ;}
break;
case 181:
-#line 1396 "pir.y"
+#line 1401 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%n%T", (yyvsp[(1) - (3)].dval), (yyvsp[(3) - (3)].targ)); ;}
break;
case 182:
-#line 1398 "pir.y"
+#line 1403 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%s%T", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].targ)); ;}
break;
case 183:
-#line 1400 "pir.y"
+#line 1405 "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 184:
-#line 1402 "pir.y"
+#line 1407 "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 185:
-#line 1404 "pir.y"
+#line 1409 "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 186:
-#line 1406 "pir.y"
+#line 1411 "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 187:
-#line 1408 "pir.y"
+#line 1413 "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 188:
-#line 1413 "pir.y"
+#line 1418 "pir.y"
{ get_opinfo(yyscanner); ;}
break;
case 189:
-#line 1422 "pir.y"
+#line 1427 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, (yyvsp[(3) - (5)].sval), (yyvsp[(5) - (5)].sval)); ;}
break;
case 190:
-#line 1424 "pir.y"
+#line 1429 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "int", (yyvsp[(5) - (5)].sval)); ;}
break;
case 191:
-#line 1426 "pir.y"
+#line 1431 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "num", (yyvsp[(5) - (5)].sval)); ;}
break;
case 192:
-#line 1428 "pir.y"
+#line 1433 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "pmc", (yyvsp[(5) - (5)].sval)); ;}
break;
case 193:
-#line 1430 "pir.y"
+#line 1435 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "string", (yyvsp[(5) - (5)].sval)); ;}
break;
case 194:
-#line 1432 "pir.y"
+#line 1437 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "if", (yyvsp[(5) - (5)].sval)); ;}
break;
case 195:
-#line 1434 "pir.y"
+#line 1439 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "unless", (yyvsp[(5) - (5)].sval)); ;}
break;
case 196:
-#line 1436 "pir.y"
+#line 1441 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "goto", (yyvsp[(5) - (5)].sval)); ;}
break;
case 197:
-#line 1438 "pir.y"
+#line 1443 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "null", (yyvsp[(5) - (5)].sval)); ;}
break;
case 198:
-#line 1440 "pir.y"
+#line 1445 "pir.y"
{
int istrue = evaluate_c(lexer, (yyvsp[(2) - (4)].cval));
/* if "unless", invert the true-ness */
@@ -3586,7 +3587,7 @@
break;
case 199:
-#line 1452 "pir.y"
+#line 1457 "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));
@@ -3594,67 +3595,67 @@
break;
case 200:
-#line 1457 "pir.y"
+#line 1462 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 201:
-#line 1459 "pir.y"
+#line 1464 "pir.y"
{ set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I", (yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval)); ;}
break;
case 202:
-#line 1461 "pir.y"
+#line 1466 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "int", (yyvsp[(4) - (4)].sval)); ;}
break;
case 203:
-#line 1463 "pir.y"
+#line 1468 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "num", (yyvsp[(4) - (4)].sval)); ;}
break;
case 204:
-#line 1465 "pir.y"
+#line 1470 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "pmc", (yyvsp[(4) - (4)].sval)); ;}
break;
case 205:
-#line 1467 "pir.y"
+#line 1472 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "string", (yyvsp[(4) - (4)].sval)); ;}
break;
case 206:
-#line 1469 "pir.y"
+#line 1474 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "if", (yyvsp[(4) - (4)].sval)); ;}
break;
case 207:
-#line 1471 "pir.y"
+#line 1476 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "unless", (yyvsp[(4) - (4)].sval)); ;}
break;
case 208:
-#line 1473 "pir.y"
+#line 1478 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
break;
case 209:
-#line 1475 "pir.y"
+#line 1480 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
break;
case 210:
-#line 1477 "pir.y"
+#line 1482 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
break;
case 211:
-#line 1479 "pir.y"
+#line 1484 "pir.y"
{ create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
break;
case 212:
-#line 1481 "pir.y"
+#line 1486 "pir.y"
{
if ((yyvsp[(2) - (4)].ival) == COMPUTE_DURING_RUNTIME) {
if ((yyvsp[(1) - (4)].ival) == NEED_INVERT_OPNAME) /* "unless" */
@@ -3682,7 +3683,7 @@
break;
case 213:
-#line 1512 "pir.y"
+#line 1517 "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
@@ -3711,7 +3712,7 @@
break;
case 214:
-#line 1538 "pir.y"
+#line 1543 "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));
@@ -3722,7 +3723,7 @@
break;
case 215:
-#line 1546 "pir.y"
+#line 1551 "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));
@@ -3734,7 +3735,7 @@
break;
case 216:
-#line 1555 "pir.y"
+#line 1560 "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));
@@ -3746,32 +3747,32 @@
break;
case 217:
-#line 1564 "pir.y"
+#line 1569 "pir.y"
{ (yyval.ival) = evaluate_i_i((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
break;
case 218:
-#line 1566 "pir.y"
+#line 1571 "pir.y"
{ (yyval.ival) = evaluate_i_n((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
break;
case 219:
-#line 1568 "pir.y"
+#line 1573 "pir.y"
{ (yyval.ival) = evaluate_n_i((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
break;
case 220:
-#line 1570 "pir.y"
+#line 1575 "pir.y"
{ (yyval.ival) = evaluate_n_n((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
break;
case 221:
-#line 1572 "pir.y"
+#line 1577 "pir.y"
{ (yyval.ival) = evaluate_s_s((yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval)); ;}
break;
case 222:
-#line 1576 "pir.y"
+#line 1581 "pir.y"
{
yypirerror(yyscanner, lexer, "cannot compare string to %s",
(yyvsp[(3) - (3)].ival) == INT_TYPE ? "integer" : "number");
@@ -3779,37 +3780,37 @@
break;
case 223:
-#line 1581 "pir.y"
+#line 1586 "pir.y"
{ yypirerror(yyscanner, lexer, "cannot compare integer to string"); ;}
break;
case 224:
-#line 1583 "pir.y"
+#line 1588 "pir.y"
{ yypirerror(yyscanner, lexer, "cannot compare number to string"); ;}
break;
case 225:
-#line 1587 "pir.y"
+#line 1592 "pir.y"
{ (yyval.ival) = INT_TYPE; ;}
break;
case 226:
-#line 1588 "pir.y"
+#line 1593 "pir.y"
{ (yyval.ival) = NUM_TYPE; ;}
break;
case 227:
-#line 1591 "pir.y"
+#line 1596 "pir.y"
{ (yyval.ival) = DONT_INVERT_OPNAME; /* no need to invert */ ;}
break;
case 228:
-#line 1592 "pir.y"
+#line 1597 "pir.y"
{ (yyval.ival) = NEED_INVERT_OPNAME; /* yes, invert opname */ ;}
break;
case 231:
-#line 1600 "pir.y"
+#line 1605 "pir.y"
{
set_instrf(lexer, "branch", "%I", (yyvsp[(2) - (3)].sval));
set_op_labelflag(lexer, BIT(0)); /* bit 0 means: "1 << 0" */
@@ -3818,37 +3819,37 @@
break;
case 232:
-#line 1608 "pir.y"
+#line 1613 "pir.y"
{ declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].symb)); ;}
break;
case 233:
-#line 1612 "pir.y"
+#line 1617 "pir.y"
{ (yyval.symb) = (yyvsp[(1) - (1)].symb); ;}
break;
case 234:
-#line 1614 "pir.y"
+#line 1619 "pir.y"
{ (yyval.symb) = add_local((yyvsp[(1) - (3)].symb), (yyvsp[(3) - (3)].symb)); ;}
break;
case 235:
-#line 1618 "pir.y"
+#line 1623 "pir.y"
{ (yyval.symb) = new_local(lexer, (yyvsp[(1) - (2)].sval), (yyvsp[(2) - (2)].ival)); ;}
break;
case 236:
-#line 1621 "pir.y"
+#line 1626 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 237:
-#line 1622 "pir.y"
+#line 1627 "pir.y"
{ (yyval.ival) = 1; ;}
break;
case 238:
-#line 1626 "pir.y"
+#line 1631 "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)) {
@@ -3861,12 +3862,12 @@
break;
case 239:
-#line 1641 "pir.y"
+#line 1646 "pir.y"
{ convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
break;
case 242:
-#line 1653 "pir.y"
+#line 1658 "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));
@@ -3874,72 +3875,72 @@
break;
case 243:
-#line 1660 "pir.y"
+#line 1665 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 244:
-#line 1662 "pir.y"
+#line 1667 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 245:
-#line 1666 "pir.y"
+#line 1671 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 246:
-#line 1668 "pir.y"
+#line 1673 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 247:
-#line 1672 "pir.y"
+#line 1677 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 248:
-#line 1676 "pir.y"
+#line 1681 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
break;
case 249:
-#line 1678 "pir.y"
+#line 1683 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
break;
case 250:
-#line 1681 "pir.y"
+#line 1686 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ), (yyvsp[(5) - (5)].expr)); ;}
break;
case 251:
-#line 1685 "pir.y"
+#line 1690 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 252:
-#line 1687 "pir.y"
+#line 1692 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
break;
case 253:
-#line 1691 "pir.y"
+#line 1696 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 254:
-#line 1693 "pir.y"
+#line 1698 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 255:
-#line 1697 "pir.y"
+#line 1702 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 256:
-#line 1699 "pir.y"
+#line 1704 "pir.y"
{
if ((yyvsp[(2) - (2)].targ))
(yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].targ));
@@ -3949,32 +3950,32 @@
break;
case 257:
-#line 1708 "pir.y"
+#line 1713 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
break;
case 258:
-#line 1710 "pir.y"
+#line 1715 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 260:
-#line 1718 "pir.y"
+#line 1723 "pir.y"
{ (yyval.invo) = set_invocation_results(lexer, (yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
break;
case 261:
-#line 1720 "pir.y"
+#line 1725 "pir.y"
{ (yyval.invo) = set_invocation_results(lexer, (yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
break;
case 262:
-#line 1722 "pir.y"
+#line 1727 "pir.y"
{ (yyval.invo) = set_invocation_results(lexer, (yyvsp[(1) - (1)].invo), NULL); ;}
break;
case 265:
-#line 1730 "pir.y"
+#line 1735 "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)) {
@@ -3995,7 +3996,7 @@
break;
case 266:
-#line 1750 "pir.y"
+#line 1755 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1) - (2)].targ), NULL);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (2)].argm));
@@ -4003,12 +4004,12 @@
break;
case 267:
-#line 1757 "pir.y"
+#line 1762 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 268:
-#line 1759 "pir.y"
+#line 1764 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL)
@@ -4019,7 +4020,7 @@
break;
case 269:
-#line 1769 "pir.y"
+#line 1774 "pir.y"
{ /* check that this identifier was declared */
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
@@ -4039,22 +4040,22 @@
break;
case 270:
-#line 1786 "pir.y"
+#line 1791 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival))); ;}
break;
case 271:
-#line 1788 "pir.y"
+#line 1793 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival))); ;}
break;
case 272:
-#line 1790 "pir.y"
+#line 1795 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval))); ;}
break;
case 273:
-#line 1794 "pir.y"
+#line 1799 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL)
@@ -4066,74 +4067,74 @@
break;
case 274:
-#line 1803 "pir.y"
+#line 1808 "pir.y"
{ (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 275:
-#line 1808 "pir.y"
+#line 1813 "pir.y"
{
(yyval.targ) = (yyvsp[(2) - (3)].targ);
;}
break;
case 276:
-#line 1814 "pir.y"
+#line 1819 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 277:
-#line 1816 "pir.y"
+#line 1821 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 278:
-#line 1820 "pir.y"
+#line 1825 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 279:
-#line 1822 "pir.y"
+#line 1827 "pir.y"
{ (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
break;
case 280:
-#line 1826 "pir.y"
+#line 1831 "pir.y"
{ (yyval.targ) = set_param_flag(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].ival)); ;}
break;
case 281:
-#line 1828 "pir.y"
+#line 1833 "pir.y"
{ (yyval.targ) = set_param_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
break;
case 282:
-#line 1832 "pir.y"
+#line 1837 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 283:
-#line 1834 "pir.y"
+#line 1839 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 284:
-#line 1838 "pir.y"
+#line 1843 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
break;
case 285:
-#line 1840 "pir.y"
+#line 1845 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
break;
case 286:
-#line 1842 "pir.y"
+#line 1847 "pir.y"
{ (yyval.ival) = TARGET_FLAG_SLURPY; ;}
break;
case 287:
-#line 1844 "pir.y"
+#line 1849 "pir.y"
{
(yyval.ival) = TARGET_FLAG_NAMED;
set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -4141,12 +4142,12 @@
break;
case 288:
-#line 1854 "pir.y"
+#line 1859 "pir.y"
{ convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
break;
case 293:
-#line 1864 "pir.y"
+#line 1869 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_RETURN);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
@@ -4154,7 +4155,7 @@
break;
case 294:
-#line 1869 "pir.y"
+#line 1874 "pir.y"
{ /* was the invocation a method call? then it becomes a method tail
* call, otherwise it's just a normal (sub) tail call.
*/
@@ -4166,7 +4167,7 @@
break;
case 295:
-#line 1880 "pir.y"
+#line 1885 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
@@ -4174,47 +4175,47 @@
break;
case 296:
-#line 1887 "pir.y"
+#line 1892 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 297:
-#line 1891 "pir.y"
+#line 1896 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 298:
-#line 1893 "pir.y"
+#line 1898 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 299:
-#line 1897 "pir.y"
+#line 1902 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 300:
-#line 1899 "pir.y"
+#line 1904 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
break;
case 303:
-#line 1907 "pir.y"
+#line 1912 "pir.y"
{ (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
break;
case 304:
-#line 1911 "pir.y"
+#line 1916 "pir.y"
{ (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
break;
case 305:
-#line 1915 "pir.y"
+#line 1920 "pir.y"
{ (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr))); ;}
break;
case 306:
-#line 1921 "pir.y"
+#line 1926 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_RETURN);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
@@ -4222,7 +4223,7 @@
break;
case 307:
-#line 1930 "pir.y"
+#line 1935 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
@@ -4230,72 +4231,72 @@
break;
case 308:
-#line 1937 "pir.y"
+#line 1942 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 309:
-#line 1939 "pir.y"
+#line 1944 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 310:
-#line 1944 "pir.y"
+#line 1949 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 311:
-#line 1946 "pir.y"
+#line 1951 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 312:
-#line 1951 "pir.y"
+#line 1956 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 313:
-#line 1955 "pir.y"
+#line 1960 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 314:
-#line 1957 "pir.y"
+#line 1962 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 315:
-#line 1961 "pir.y"
+#line 1966 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 316:
-#line 1963 "pir.y"
+#line 1968 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 317:
-#line 1967 "pir.y"
+#line 1972 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 318:
-#line 1972 "pir.y"
+#line 1977 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 319:
-#line 1974 "pir.y"
+#line 1979 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 320:
-#line 1978 "pir.y"
+#line 1983 "pir.y"
{ (yyval.ival) = ARG_FLAG_FLAT; ;}
break;
case 321:
-#line 1980 "pir.y"
+#line 1985 "pir.y"
{
(yyval.ival) = ARG_FLAG_NAMED;
set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -4303,137 +4304,137 @@
break;
case 322:
-#line 1987 "pir.y"
+#line 1992 "pir.y"
{ (yyval.sval) = NULL; ;}
break;
case 323:
-#line 1989 "pir.y"
+#line 1994 "pir.y"
{ (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
break;
case 324:
-#line 1993 "pir.y"
+#line 1998 "pir.y"
{ (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
break;
case 328:
-#line 2004 "pir.y"
- { store_global_constant(lexer, (yyvsp[(2) - (2)].cval)); ;}
+#line 2010 "pir.y"
+ { store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
break;
case 329:
-#line 2008 "pir.y"
+#line 2014 "pir.y"
{ /* XXX is .globalconst to be kept? */ ;}
break;
case 330:
-#line 2012 "pir.y"
- { (yyval.cval) = new_named_const(lexer, INT_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
+#line 2018 "pir.y"
+ { (yyval.cdec) = new_named_const(lexer, INT_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
break;
case 331:
-#line 2014 "pir.y"
- { (yyval.cval) = new_named_const(lexer, NUM_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
+#line 2020 "pir.y"
+ { (yyval.cdec) = new_named_const(lexer, NUM_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
break;
case 332:
-#line 2016 "pir.y"
- { (yyval.cval) = new_named_const(lexer, STRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
+#line 2022 "pir.y"
+ { (yyval.cdec) = new_named_const(lexer, STRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 333:
-#line 2018 "pir.y"
- { (yyval.cval) = new_pmc_const(lexer, (yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
+#line 2024 "pir.y"
+ { (yyval.cdec) = new_pmc_const(lexer, (yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
break;
case 334:
-#line 2025 "pir.y"
+#line 2031 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 335:
-#line 2026 "pir.y"
+#line 2032 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
break;
case 336:
-#line 2030 "pir.y"
+#line 2036 "pir.y"
{ (yyval.cval) = new_const(lexer, INT_VAL, (yyvsp[(1) - (1)].ival)); ;}
break;
case 337:
-#line 2031 "pir.y"
+#line 2037 "pir.y"
{ (yyval.cval) = new_const(lexer, NUM_VAL, (yyvsp[(1) - (1)].dval)); ;}
break;
case 339:
-#line 2035 "pir.y"
+#line 2041 "pir.y"
{ (yyval.cval) = new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval)); ;}
break;
case 340:
-#line 2036 "pir.y"
+#line 2042 "pir.y"
{ (yyval.cval) = new_const(lexer, USTRING_VAL, (yyvsp[(1) - (1)].ustr)); ;}
break;
case 341:
-#line 2039 "pir.y"
+#line 2045 "pir.y"
{ (yyval.ival) = OP_NE; ;}
break;
case 342:
-#line 2040 "pir.y"
+#line 2046 "pir.y"
{ (yyval.ival) = OP_EQ; ;}
break;
case 343:
-#line 2041 "pir.y"
+#line 2047 "pir.y"
{ (yyval.ival) = OP_LT; ;}
break;
case 344:
-#line 2042 "pir.y"
+#line 2048 "pir.y"
{ (yyval.ival) = OP_LE; ;}
break;
case 345:
-#line 2043 "pir.y"
+#line 2049 "pir.y"
{ (yyval.ival) = OP_GE; ;}
break;
case 346:
-#line 2044 "pir.y"
+#line 2050 "pir.y"
{ (yyval.ival) = OP_GT; ;}
break;
case 347:
-#line 2047 "pir.y"
+#line 2053 "pir.y"
{ (yyval.ival) = INT_TYPE; ;}
break;
case 348:
-#line 2048 "pir.y"
+#line 2054 "pir.y"
{ (yyval.ival) = NUM_TYPE; ;}
break;
case 349:
-#line 2049 "pir.y"
+#line 2055 "pir.y"
{ (yyval.ival) = PMC_TYPE; ;}
break;
case 350:
-#line 2050 "pir.y"
+#line 2056 "pir.y"
{ (yyval.ival) = STRING_TYPE; ;}
break;
case 351:
-#line 2058 "pir.y"
+#line 2064 "pir.y"
{ set_curtarget(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 353:
-#line 2062 "pir.y"
+#line 2068 "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) {
@@ -4446,277 +4447,277 @@
break;
case 354:
-#line 2073 "pir.y"
+#line 2079 "pir.y"
{ (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 355:
-#line 2074 "pir.y"
+#line 2080 "pir.y"
{ (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 356:
-#line 2075 "pir.y"
+#line 2081 "pir.y"
{ (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 357:
-#line 2076 "pir.y"
+#line 2082 "pir.y"
{ (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 360:
-#line 2084 "pir.y"
+#line 2090 "pir.y"
{ (yyval.sval) = "if"; ;}
break;
case 361:
-#line 2085 "pir.y"
+#line 2091 "pir.y"
{ (yyval.sval) = "unless"; ;}
break;
case 362:
-#line 2086 "pir.y"
+#line 2092 "pir.y"
{ (yyval.sval) = "goto"; ;}
break;
case 363:
-#line 2087 "pir.y"
+#line 2093 "pir.y"
{ (yyval.sval) = "int"; ;}
break;
case 364:
-#line 2088 "pir.y"
+#line 2094 "pir.y"
{ (yyval.sval) = "num"; ;}
break;
case 365:
-#line 2089 "pir.y"
+#line 2095 "pir.y"
{ (yyval.sval) = "string"; ;}
break;
case 366:
-#line 2090 "pir.y"
+#line 2096 "pir.y"
{ (yyval.sval) = "pmc"; ;}
break;
case 367:
-#line 2091 "pir.y"
+#line 2097 "pir.y"
{ (yyval.sval) = "null"; ;}
break;
case 368:
-#line 2094 "pir.y"
+#line 2100 "pir.y"
{ (yyval.sval) = "neg"; ;}
break;
case 369:
-#line 2095 "pir.y"
+#line 2101 "pir.y"
{ (yyval.sval) = "not"; ;}
break;
case 370:
-#line 2096 "pir.y"
+#line 2102 "pir.y"
{ (yyval.sval) = "bnot"; ;}
break;
case 371:
-#line 2099 "pir.y"
+#line 2105 "pir.y"
{ (yyval.ival) = OP_ADD; ;}
break;
case 372:
-#line 2100 "pir.y"
+#line 2106 "pir.y"
{ (yyval.ival) = OP_SUB; ;}
break;
case 373:
-#line 2101 "pir.y"
+#line 2107 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 374:
-#line 2102 "pir.y"
+#line 2108 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 375:
-#line 2103 "pir.y"
+#line 2109 "pir.y"
{ (yyval.ival) = OP_MOD; ;}
break;
case 376:
-#line 2104 "pir.y"
+#line 2110 "pir.y"
{ (yyval.ival) = OP_BOR; ;}
break;
case 377:
-#line 2105 "pir.y"
+#line 2111 "pir.y"
{ (yyval.ival) = OP_BAND; ;}
break;
case 378:
-#line 2106 "pir.y"
+#line 2112 "pir.y"
{ (yyval.ival) = OP_BXOR; ;}
break;
case 379:
-#line 2107 "pir.y"
+#line 2113 "pir.y"
{ (yyval.ival) = OP_POW; ;}
break;
case 380:
-#line 2108 "pir.y"
+#line 2114 "pir.y"
{ (yyval.ival) = OP_CONCAT; ;}
break;
case 381:
-#line 2109 "pir.y"
+#line 2115 "pir.y"
{ (yyval.ival) = OP_LSR; ;}
break;
case 382:
-#line 2110 "pir.y"
+#line 2116 "pir.y"
{ (yyval.ival) = OP_SHR; ;}
break;
case 383:
-#line 2111 "pir.y"
+#line 2117 "pir.y"
{ (yyval.ival) = OP_SHL; ;}
break;
case 384:
-#line 2112 "pir.y"
+#line 2118 "pir.y"
{ (yyval.ival) = OP_OR; ;}
break;
case 385:
-#line 2113 "pir.y"
+#line 2119 "pir.y"
{ (yyval.ival) = OP_AND; ;}
break;
case 386:
-#line 2114 "pir.y"
+#line 2120 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 387:
-#line 2115 "pir.y"
+#line 2121 "pir.y"
{ (yyval.ival) = OP_XOR; ;}
break;
case 388:
-#line 2116 "pir.y"
+#line 2122 "pir.y"
{ (yyval.ival) = OP_ISEQ; ;}
break;
case 389:
-#line 2117 "pir.y"
+#line 2123 "pir.y"
{ (yyval.ival) = OP_ISLE; ;}
break;
case 390:
-#line 2118 "pir.y"
+#line 2124 "pir.y"
{ (yyval.ival) = OP_ISLT; ;}
break;
case 391:
-#line 2119 "pir.y"
+#line 2125 "pir.y"
{ (yyval.ival) = OP_ISGE; ;}
break;
case 392:
-#line 2120 "pir.y"
+#line 2126 "pir.y"
{ (yyval.ival) = OP_ISGT; ;}
break;
case 393:
-#line 2121 "pir.y"
+#line 2127 "pir.y"
{ (yyval.ival) = OP_ISNE; ;}
break;
case 394:
-#line 2127 "pir.y"
+#line 2133 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 395:
-#line 2128 "pir.y"
+#line 2134 "pir.y"
{ (yyval.ival) = OP_MOD; ;}
break;
case 396:
-#line 2129 "pir.y"
+#line 2135 "pir.y"
{ (yyval.ival) = OP_POW; ;}
break;
case 397:
-#line 2130 "pir.y"
+#line 2136 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 398:
-#line 2131 "pir.y"
+#line 2137 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 399:
-#line 2132 "pir.y"
+#line 2138 "pir.y"
{ (yyval.ival) = OP_BOR; ;}
break;
case 400:
-#line 2133 "pir.y"
+#line 2139 "pir.y"
{ (yyval.ival) = OP_BAND; ;}
break;
case 401:
-#line 2134 "pir.y"
+#line 2140 "pir.y"
{ (yyval.ival) = OP_BXOR; ;}
break;
case 402:
-#line 2135 "pir.y"
+#line 2141 "pir.y"
{ (yyval.ival) = OP_CONCAT; ;}
break;
case 403:
-#line 2136 "pir.y"
+#line 2142 "pir.y"
{ (yyval.ival) = OP_SHR; ;}
break;
case 404:
-#line 2137 "pir.y"
+#line 2143 "pir.y"
{ (yyval.ival) = OP_SHL; ;}
break;
case 405:
-#line 2138 "pir.y"
+#line 2144 "pir.y"
{ (yyval.ival) = OP_LSR; ;}
break;
case 407:
-#line 2159 "pir.y"
+#line 2165 "pir.y"
{ new_subr(lexer, "@start"); ;}
break;
case 416:
-#line 2175 "pir.y"
+#line 2181 "pir.y"
{ set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
break;
case 421:
-#line 2185 "pir.y"
+#line 2191 "pir.y"
{ set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
break;
case 422:
-#line 2189 "pir.y"
+#line 2195 "pir.y"
{ new_subr(lexer, NULL); ;}
break;
case 423:
-#line 2194 "pir.y"
+#line 2200 "pir.y"
{
if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval)))
get_opinfo(yyscanner);
@@ -4728,7 +4729,7 @@
/* Line 1267 of yacc.c. */
-#line 4732 "pirparser.c"
+#line 4733 "pirparser.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4942,7 +4943,7 @@
}
-#line 2205 "pir.y"
+#line 2211 "pir.y"
Modified: trunk/compilers/pirc/src/pirparser.h
==============================================================================
--- trunk/compilers/pirc/src/pirparser.h (original)
+++ trunk/compilers/pirc/src/pirparser.h Sun Jan 4 06:29:52 2009
@@ -287,6 +287,7 @@
unsigned uval;
char const *sval;
struct constant *cval;
+ struct constdecl *cdec;
struct ucstring *ustr;
struct instruction *instr;
struct expression *expr;
@@ -299,7 +300,7 @@
struct macro_param *pval;
}
/* Line 1489 of yacc.c. */
-#line 303 "pirparser.h"
+#line 304 "pirparser.h"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
Modified: trunk/compilers/pirc/src/pirsymbol.c
==============================================================================
--- trunk/compilers/pirc/src/pirsymbol.c (original)
+++ trunk/compilers/pirc/src/pirsymbol.c Sun Jan 4 06:29:52 2009
@@ -310,7 +310,7 @@
hashtable *table = &CURRENT_SUB(lexer)->symbols;
unsigned long hashcode = get_hashcode(name, table->size);
bucket *buck = get_bucket(table, hashcode);
- constant *c;
+ constdecl *c;
while (buck) {
@@ -613,13 +613,13 @@
*/
void
-store_global_constant(NOTNULL(lexer_state * const lexer), NOTNULL(constant * const c)) {
+store_global_constant(NOTNULL(lexer_state * const lexer), NOTNULL(constdecl * const c)) {
hashtable *table = &lexer->constants;
unsigned long hash = get_hashcode(c->name, table->size);
bucket *b = new_bucket(lexer);
bucket_constant(b) = c;
store_bucket(table, b, hash);
-
+ fprintf(stderr, "store global constant\n");
}
/*
@@ -635,7 +635,7 @@
*/
PARROT_WARN_UNUSED_RESULT
PARROT_CAN_RETURN_NULL
-constant *
+constdecl *
find_global_constant(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const name)) {
hashtable *table = &lexer->constants;
unsigned long hashcode = get_hashcode(name, table->size);
Modified: trunk/compilers/pirc/src/pirsymbol.h
==============================================================================
--- trunk/compilers/pirc/src/pirsymbol.h (original)
+++ trunk/compilers/pirc/src/pirsymbol.h Sun Jan 4 06:29:52 2009
@@ -97,10 +97,10 @@
global_label *find_global_label(struct lexer_state * const lexer, char const * const name);
/* store a global .const symbol */
-void store_global_constant(struct lexer_state * const lexer, constant * const c);
+void store_global_constant(struct lexer_state * const lexer, constdecl * const c);
/* find a global .const symbol */
-constant *find_global_constant(struct lexer_state * const lexer, char const * const name);
+constdecl *find_global_constant(struct lexer_state * const lexer, char const * const name);
void assign_vanilla_register(struct lexer_state * const lexer, symbol * const sym);
-
[svn:parrot] r34918 - trunk/compilers/pirc/src
by kjs