Author: tewk
Date: Wed Dec 3 08:19:36 2008
New Revision: 33458
Modified:
trunk/compilers/imcc/imcc.y
trunk/compilers/imcc/imcparser.c
trunk/compilers/imcc/pbc.c
trunk/compilers/imcc/symreg.c
trunk/compilers/imcc/symreg.h
trunk/include/parrot/string_primitives.h
trunk/src/string_primitives.c
trunk/t/compilers/imcc/syn/subflags.t
Log:
[subid] lookup by subid, then by sub name, then by find_sub_not_null_p_sc
works, all tests pass
Modified: trunk/compilers/imcc/imcc.y
==============================================================================
--- trunk/compilers/imcc/imcc.y (original)
+++ trunk/compilers/imcc/imcc.y Wed Dec 3 08:19:36 2008
@@ -1115,6 +1115,7 @@
{
$$ = 0;
IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, $3, 'S');
+ IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid =
str_dup_remove_quotes($3);
mem_sys_free($3);
}
;
Modified: trunk/compilers/imcc/imcparser.c
==============================================================================
--- trunk/compilers/imcc/imcparser.c (original)
+++ trunk/compilers/imcc/imcparser.c Wed Dec 3 08:19:36 2008
@@ -1490,35 +1490,35 @@
922, 930, 934, 938, 938, 950, 952, 956, 971, 979,
984, 988, 991, 983, 997, 998, 999, 1012, 1012, 1016,
1027, 1042, 1046, 1052, 1061, 1067, 1076, 1082, 1091, 1097,
- 1106, 1114, 1124, 1127, 1132, 1140, 1141, 1142, 1143, 1144,
- 1155, 1166, 1169, 1171, 1176, 1175, 1208, 1209, 1213, 1214,
- 1218, 1219, 1223, 1224, 1228, 1229, 1230, 1231, 1232, 1233,
- 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1245, 1250,
- 1254, 1259, 1263, 1267, 1272, 1281, 1282, 1286, 1291, 1292,
- 1300, 1301, 1301, 1316, 1317, 1321, 1322, 1323, 1324, 1325,
- 1326, 1331, 1331, 1334, 1342, 1342, 1348, 1349, 1354, 1362,
- 1363, 1368, 1376, 1380, 1385, 1384, 1397, 1398, 1402, 1403,
- 1413, 1417, 1427, 1435, 1436, 1448, 1452, 1454, 1455, 1456,
- 1457, 1461, 1462, 1466, 1467, 1471, 1480, 1481, 1492, 1499,
- 1508, 1518, 1519, 1524, 1525, 1526, 1527, 1528, 1528, 1544,
- 1548, 1548, 1555, 1556, 1556, 1562, 1568, 1569, 1581, 1582,
- 1583, 1584, 1585, 1586, 1590, 1591, 1592, 1593, 1597, 1610,
- 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630,
- 1632, 1634, 1636, 1638, 1642, 1644, 1646, 1649, 1656, 1655,
- 1664, 1665, 1666, 1667, 1675, 1676, 1677, 1681, 1682, 1683,
- 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693,
- 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
- 1709, 1708, 1720, 1727, 1728, 1729, 1730, 1731, 1732, 1733,
- 1734, 1735, 1736, 1737, 1738, 1739, 1744, 1755, 1756, 1757,
- 1758, 1764, 1776, 1782, 1788, 1787, 1796, 1797, 1807, 1817,
- 1823, 1832, 1836, 1837, 1841, 1842, 1845, 1849, 1853, 1863,
- 1868, 1878, 1883, 1887, 1888, 1892, 1896, 1900, 1907, 1911,
- 1915, 1922, 1923, 1927, 1928, 1929, 1930, 1931, 1932, 1936,
- 1937, 1941, 1942, 1946, 1947, 1951, 1952, 1959, 1966, 1967,
- 1968, 1972, 1973, 1977, 1978, 1982, 1983, 1987, 1988, 1992,
- 1992, 2005, 2005, 2018, 2019, 2024, 2024, 2033, 2039, 2046,
- 2047, 2051, 2052, 2053, 2054, 2055, 2059, 2060, 2061, 2062,
- 2066, 2067
+ 1106, 1114, 1125, 1128, 1133, 1141, 1142, 1143, 1144, 1145,
+ 1156, 1167, 1170, 1172, 1177, 1176, 1209, 1210, 1214, 1215,
+ 1219, 1220, 1224, 1225, 1229, 1230, 1231, 1232, 1233, 1234,
+ 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1246, 1251,
+ 1255, 1260, 1264, 1268, 1273, 1282, 1283, 1287, 1292, 1293,
+ 1301, 1302, 1302, 1317, 1318, 1322, 1323, 1324, 1325, 1326,
+ 1327, 1332, 1332, 1335, 1343, 1343, 1349, 1350, 1355, 1363,
+ 1364, 1369, 1377, 1381, 1386, 1385, 1398, 1399, 1403, 1404,
+ 1414, 1418, 1428, 1436, 1437, 1449, 1453, 1455, 1456, 1457,
+ 1458, 1462, 1463, 1467, 1468, 1472, 1481, 1482, 1493, 1500,
+ 1509, 1519, 1520, 1525, 1526, 1527, 1528, 1529, 1529, 1545,
+ 1549, 1549, 1556, 1557, 1557, 1563, 1569, 1570, 1582, 1583,
+ 1584, 1585, 1586, 1587, 1591, 1592, 1593, 1594, 1598, 1611,
+ 1613, 1615, 1617, 1619, 1621, 1623, 1625, 1627, 1629, 1631,
+ 1633, 1635, 1637, 1639, 1643, 1645, 1647, 1650, 1657, 1656,
+ 1665, 1666, 1667, 1668, 1676, 1677, 1678, 1682, 1683, 1684,
+ 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694,
+ 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704,
+ 1710, 1709, 1721, 1728, 1729, 1730, 1731, 1732, 1733, 1734,
+ 1735, 1736, 1737, 1738, 1739, 1740, 1745, 1756, 1757, 1758,
+ 1759, 1765, 1777, 1783, 1789, 1788, 1797, 1798, 1808, 1818,
+ 1824, 1833, 1837, 1838, 1842, 1843, 1846, 1850, 1854, 1864,
+ 1869, 1879, 1884, 1888, 1889, 1893, 1897, 1901, 1908, 1912,
+ 1916, 1923, 1924, 1928, 1929, 1930, 1931, 1932, 1933, 1937,
+ 1938, 1942, 1943, 1947, 1948, 1952, 1953, 1960, 1967, 1968,
+ 1969, 1973, 1974, 1978, 1979, 1983, 1984, 1988, 1989, 1993,
+ 1993, 2006, 2006, 2019, 2020, 2025, 2025, 2034, 2040, 2047,
+ 2048, 2052, 2053, 2054, 2055, 2056, 2060, 2061, 2062, 2063,
+ 2067, 2068
};
#endif
@@ -3343,19 +3343,20 @@
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) -
(4)].s), 'S');
+ IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid =
str_dup_remove_quotes((yyvsp[(3) - (4)].s));
mem_sys_free((yyvsp[(3) - (4)].s));
}
break;
case 72:
-#line 1124 "compilers/imcc/imcc.y"
+#line 1125 "compilers/imcc/imcc.y"
{
add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
}
break;
case 73:
-#line 1128 "compilers/imcc/imcc.y"
+#line 1129 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
@@ -3363,7 +3364,7 @@
break;
case 74:
-#line 1133 "compilers/imcc/imcc.y"
+#line 1134 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
@@ -3371,27 +3372,27 @@
break;
case 75:
-#line 1140 "compilers/imcc/imcc.y"
+#line 1141 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, "INTVAL", 'S'); }
break;
case 76:
-#line 1141 "compilers/imcc/imcc.y"
+#line 1142 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
break;
case 77:
-#line 1142 "compilers/imcc/imcc.y"
+#line 1143 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, "PMC", 'S'); }
break;
case 78:
-#line 1143 "compilers/imcc/imcc.y"
+#line 1144 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, "STRING", 'S'); }
break;
case 79:
-#line 1145 "compilers/imcc/imcc.y"
+#line 1146 "compilers/imcc/imcc.y"
{
SymReg *r;
if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3405,7 +3406,7 @@
break;
case 80:
-#line 1156 "compilers/imcc/imcc.y"
+#line 1157 "compilers/imcc/imcc.y"
{
SymReg *r;
if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3419,12 +3420,12 @@
break;
case 81:
-#line 1166 "compilers/imcc/imcc.y"
+#line 1167 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (3)].sr); }
break;
case 84:
-#line 1176 "compilers/imcc/imcc.y"
+#line 1177 "compilers/imcc/imcc.y"
{
char name[128];
SymReg *r, *r1;
@@ -3451,82 +3452,82 @@
break;
case 85:
-#line 1204 "compilers/imcc/imcc.y"
+#line 1205 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
break;
case 86:
-#line 1208 "compilers/imcc/imcc.y"
+#line 1209 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
break;
case 87:
-#line 1209 "compilers/imcc/imcc.y"
+#line 1210 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
break;
case 88:
-#line 1213 "compilers/imcc/imcc.y"
+#line 1214 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; }
break;
case 89:
-#line 1214 "compilers/imcc/imcc.y"
+#line 1215 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->object =
(yyvsp[(2) - (3)].sr); }
break;
case 90:
-#line 1218 "compilers/imcc/imcc.y"
+#line 1219 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 92:
-#line 1223 "compilers/imcc/imcc.y"
+#line 1224 "compilers/imcc/imcc.y"
{ (yyval.t) = (yyvsp[(1) - (1)].t); }
break;
case 93:
-#line 1224 "compilers/imcc/imcc.y"
+#line 1225 "compilers/imcc/imcc.y"
{ (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
break;
case 94:
-#line 1228 "compilers/imcc/imcc.y"
+#line 1229 "compilers/imcc/imcc.y"
{ (yyval.t) = P_LOAD; }
break;
case 95:
-#line 1229 "compilers/imcc/imcc.y"
+#line 1230 "compilers/imcc/imcc.y"
{ (yyval.t) = P_INIT; }
break;
case 96:
-#line 1230 "compilers/imcc/imcc.y"
+#line 1231 "compilers/imcc/imcc.y"
{ (yyval.t) = P_MAIN; }
break;
case 97:
-#line 1231 "compilers/imcc/imcc.y"
+#line 1232 "compilers/imcc/imcc.y"
{ (yyval.t) = P_IMMEDIATE; }
break;
case 98:
-#line 1232 "compilers/imcc/imcc.y"
+#line 1233 "compilers/imcc/imcc.y"
{ (yyval.t) = P_POSTCOMP; }
break;
case 99:
-#line 1233 "compilers/imcc/imcc.y"
+#line 1234 "compilers/imcc/imcc.y"
{ (yyval.t) = P_ANON; }
break;
case 100:
-#line 1234 "compilers/imcc/imcc.y"
+#line 1235 "compilers/imcc/imcc.y"
{ (yyval.t) = P_NEED_LEX; }
break;
case 108:
-#line 1246 "compilers/imcc/imcc.y"
+#line 1247 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3534,14 +3535,14 @@
break;
case 109:
-#line 1251 "compilers/imcc/imcc.y"
+#line 1252 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
}
break;
case 110:
-#line 1255 "compilers/imcc/imcc.y"
+#line 1256 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
@@ -3549,21 +3550,21 @@
break;
case 111:
-#line 1260 "compilers/imcc/imcc.y"
+#line 1261 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
}
break;
case 112:
-#line 1264 "compilers/imcc/imcc.y"
+#line 1265 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp,
(yyvsp[(2) - (3)].s), 'S'));
}
break;
case 113:
-#line 1268 "compilers/imcc/imcc.y"
+#line 1269 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3571,7 +3572,7 @@
break;
case 114:
-#line 1273 "compilers/imcc/imcc.y"
+#line 1274 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp,
(yyvsp[(2) - (5)].s), 'S'));
add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3579,27 +3580,27 @@
break;
case 115:
-#line 1281 "compilers/imcc/imcc.y"
+#line 1282 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 116:
-#line 1282 "compilers/imcc/imcc.y"
+#line 1283 "compilers/imcc/imcc.y"
{ add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
break;
case 117:
-#line 1286 "compilers/imcc/imcc.y"
+#line 1287 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (2)].sr); }
break;
case 118:
-#line 1291 "compilers/imcc/imcc.y"
+#line 1292 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 119:
-#line 1293 "compilers/imcc/imcc.y"
+#line 1294 "compilers/imcc/imcc.y"
{
if ((yyvsp[(2) - (3)].sr))
add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) -
(3)].sr));
@@ -3607,17 +3608,17 @@
break;
case 120:
-#line 1300 "compilers/imcc/imcc.y"
+#line 1301 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) -
(3)].t); }
break;
case 121:
-#line 1301 "compilers/imcc/imcc.y"
+#line 1302 "compilers/imcc/imcc.y"
{ is_def=1; }
break;
case 122:
-#line 1302 "compilers/imcc/imcc.y"
+#line 1303 "compilers/imcc/imcc.y"
{
IdList *l = (yyvsp[(4) - (4)].idlist);
SymReg *ignored;
@@ -3632,57 +3633,57 @@
break;
case 123:
-#line 1316 "compilers/imcc/imcc.y"
+#line 1317 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 124:
-#line 1317 "compilers/imcc/imcc.y"
+#line 1318 "compilers/imcc/imcc.y"
{ (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
break;
case 125:
-#line 1321 "compilers/imcc/imcc.y"
+#line 1322 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_FLAT; }
break;
case 126:
-#line 1322 "compilers/imcc/imcc.y"
+#line 1323 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_OPTIONAL; }
break;
case 127:
-#line 1323 "compilers/imcc/imcc.y"
+#line 1324 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_OPT_FLAG; }
break;
case 128:
-#line 1324 "compilers/imcc/imcc.y"
+#line 1325 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_NAMED; }
break;
case 129:
-#line 1325 "compilers/imcc/imcc.y"
+#line 1326 "compilers/imcc/imcc.y"
{ adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
break;
case 130:
-#line 1326 "compilers/imcc/imcc.y"
+#line 1327 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_UNIQUE_REG; }
break;
case 131:
-#line 1331 "compilers/imcc/imcc.y"
+#line 1332 "compilers/imcc/imcc.y"
{ begin_return_or_yield(interp, 0); }
break;
case 132:
-#line 1333 "compilers/imcc/imcc.y"
+#line 1334 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
break;
case 133:
-#line 1335 "compilers/imcc/imcc.y"
+#line 1336 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->asm_state = AsmDefault;
(yyval.i) = 0;
@@ -3690,22 +3691,22 @@
break;
case 134:
-#line 1342 "compilers/imcc/imcc.y"
+#line 1343 "compilers/imcc/imcc.y"
{ begin_return_or_yield(interp, 1); }
break;
case 135:
-#line 1344 "compilers/imcc/imcc.y"
+#line 1345 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
break;
case 136:
-#line 1348 "compilers/imcc/imcc.y"
+#line 1349 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 137:
-#line 1350 "compilers/imcc/imcc.y"
+#line 1351 "compilers/imcc/imcc.y"
{
if ((yyvsp[(1) - (2)].sr))
add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) -
(2)].sr));
@@ -3713,7 +3714,7 @@
break;
case 138:
-#line 1355 "compilers/imcc/imcc.y"
+#line 1356 "compilers/imcc/imcc.y"
{
if ((yyvsp[(2) - (3)].sr))
add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) -
(3)].sr));
@@ -3721,12 +3722,12 @@
break;
case 139:
-#line 1362 "compilers/imcc/imcc.y"
+#line 1363 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 140:
-#line 1364 "compilers/imcc/imcc.y"
+#line 1365 "compilers/imcc/imcc.y"
{
if ((yyvsp[(1) - (2)].sr))
add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) -
(2)].sr));
@@ -3734,7 +3735,7 @@
break;
case 141:
-#line 1369 "compilers/imcc/imcc.y"
+#line 1370 "compilers/imcc/imcc.y"
{
if ((yyvsp[(2) - (3)].sr))
add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) -
(3)].sr));
@@ -3742,17 +3743,17 @@
break;
case 142:
-#line 1376 "compilers/imcc/imcc.y"
+#line 1377 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) -
(3)].t); }
break;
case 143:
-#line 1380 "compilers/imcc/imcc.y"
+#line 1381 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) -
(3)].t); }
break;
case 144:
-#line 1385 "compilers/imcc/imcc.y"
+#line 1386 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->asm_state == AsmDefault)
begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
@@ -3760,7 +3761,7 @@
break;
case 145:
-#line 1390 "compilers/imcc/imcc.y"
+#line 1391 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->asm_state = AsmDefault;
(yyval.t) = 0;
@@ -3768,22 +3769,22 @@
break;
case 146:
-#line 1397 "compilers/imcc/imcc.y"
+#line 1398 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 147:
-#line 1398 "compilers/imcc/imcc.y"
+#line 1399 "compilers/imcc/imcc.y"
{ (yyval.t) = 1; }
break;
case 148:
-#line 1402 "compilers/imcc/imcc.y"
+#line 1403 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 149:
-#line 1404 "compilers/imcc/imcc.y"
+#line 1405 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->adv_named_id) {
add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3796,14 +3797,14 @@
break;
case 150:
-#line 1414 "compilers/imcc/imcc.y"
+#line 1415 "compilers/imcc/imcc.y"
{
add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
(yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
}
break;
case 151:
-#line 1418 "compilers/imcc/imcc.y"
+#line 1419 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->adv_named_id) {
add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3816,61 +3817,61 @@
break;
case 152:
-#line 1428 "compilers/imcc/imcc.y"
+#line 1429 "compilers/imcc/imcc.y"
{
add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
(yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
}
break;
case 155:
-#line 1448 "compilers/imcc/imcc.y"
+#line 1449 "compilers/imcc/imcc.y"
{ clear_state(interp); }
break;
case 156:
-#line 1453 "compilers/imcc/imcc.y"
+#line 1454 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(2) - (2)].i); }
break;
case 157:
-#line 1454 "compilers/imcc/imcc.y"
+#line 1455 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 158:
-#line 1455 "compilers/imcc/imcc.y"
+#line 1456 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 159:
-#line 1456 "compilers/imcc/imcc.y"
+#line 1457 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 160:
-#line 1457 "compilers/imcc/imcc.y"
+#line 1458 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 161:
-#line 1461 "compilers/imcc/imcc.y"
+#line 1462 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; }
break;
case 165:
-#line 1472 "compilers/imcc/imcc.y"
+#line 1473 "compilers/imcc/imcc.y"
{
(yyval.i) = iLABEL(interp, IMCC_INFO(interp)->cur_unit,
mk_local_label(interp, (yyvsp[(1) - (1)].s)));
}
break;
case 166:
-#line 1480 "compilers/imcc/imcc.y"
+#line 1481 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(2) - (3)].i); }
break;
case 167:
-#line 1482 "compilers/imcc/imcc.y"
+#line 1483 "compilers/imcc/imcc.y"
{
if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -3881,7 +3882,7 @@
break;
case 168:
-#line 1493 "compilers/imcc/imcc.y"
+#line 1494 "compilers/imcc/imcc.y"
{
IdList* l = (yyvsp[(1) - (1)].idlist);
l->next = NULL;
@@ -3890,7 +3891,7 @@
break;
case 169:
-#line 1500 "compilers/imcc/imcc.y"
+#line 1501 "compilers/imcc/imcc.y"
{
IdList* l = (yyvsp[(3) - (3)].idlist);
l->next = (yyvsp[(1) - (3)].idlist);
@@ -3899,7 +3900,7 @@
break;
case 170:
-#line 1509 "compilers/imcc/imcc.y"
+#line 1510 "compilers/imcc/imcc.y"
{
IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
l->id = (yyvsp[(1) - (2)].s);
@@ -3909,32 +3910,32 @@
break;
case 171:
-#line 1518 "compilers/imcc/imcc.y"
+#line 1519 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 172:
-#line 1519 "compilers/imcc/imcc.y"
+#line 1520 "compilers/imcc/imcc.y"
{ (yyval.t) = 1; }
break;
case 175:
-#line 1526 "compilers/imcc/imcc.y"
+#line 1527 "compilers/imcc/imcc.y"
{ push_namespace(interp, (yyvsp[(2) - (2)].s)); mem_sys_free((yyvsp[(2) -
(2)].s)); }
break;
case 176:
-#line 1527 "compilers/imcc/imcc.y"
+#line 1528 "compilers/imcc/imcc.y"
{ pop_namespace(interp, (yyvsp[(2) - (2)].s)); mem_sys_free((yyvsp[(2) -
(2)].s)); }
break;
case 177:
-#line 1528 "compilers/imcc/imcc.y"
+#line 1529 "compilers/imcc/imcc.y"
{ is_def=1; }
break;
case 178:
-#line 1529 "compilers/imcc/imcc.y"
+#line 1530 "compilers/imcc/imcc.y"
{
IdList *l = (yyvsp[(4) - (4)].idlist);
while (l) {
@@ -3953,19 +3954,19 @@
break;
case 179:
-#line 1545 "compilers/imcc/imcc.y"
+#line 1546 "compilers/imcc/imcc.y"
{
set_lexical(interp, (yyvsp[(4) - (4)].sr), (yyvsp[(2) - (4)].s));
(yyval.i) = 0;
}
break;
case 180:
-#line 1548 "compilers/imcc/imcc.y"
+#line 1549 "compilers/imcc/imcc.y"
{ is_def=1; }
break;
case 181:
-#line 1549 "compilers/imcc/imcc.y"
+#line 1550 "compilers/imcc/imcc.y"
{
mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t),
(yyvsp[(6) - (6)].sr), 0);
is_def=0;
@@ -3974,12 +3975,12 @@
break;
case 183:
-#line 1556 "compilers/imcc/imcc.y"
+#line 1557 "compilers/imcc/imcc.y"
{ is_def=1; }
break;
case 184:
-#line 1557 "compilers/imcc/imcc.y"
+#line 1558 "compilers/imcc/imcc.y"
{
mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t),
(yyvsp[(6) - (6)].sr), 1);
is_def=0;
@@ -3988,7 +3989,7 @@
break;
case 185:
-#line 1563 "compilers/imcc/imcc.y"
+#line 1564 "compilers/imcc/imcc.y"
{
(yyval.i) = NULL;
IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
@@ -3997,12 +3998,12 @@
break;
case 186:
-#line 1568 "compilers/imcc/imcc.y"
+#line 1569 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1,
(yyvsp[(2) - (2)].sr)); }
break;
case 187:
-#line 1570 "compilers/imcc/imcc.y"
+#line 1571 "compilers/imcc/imcc.y"
{
(yyval.i) = INS(interp,
IMCC_INFO(interp)->cur_unit,
@@ -4017,47 +4018,47 @@
break;
case 188:
-#line 1581 "compilers/imcc/imcc.y"
+#line 1582 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1,
(yyvsp[(2) - (2)].sr)); }
break;
case 189:
-#line 1582 "compilers/imcc/imcc.y"
+#line 1583 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
break;
case 190:
-#line 1583 "compilers/imcc/imcc.y"
+#line 1584 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 193:
-#line 1586 "compilers/imcc/imcc.y"
+#line 1587 "compilers/imcc/imcc.y"
{ (yyval.i) = 0;}
break;
case 194:
-#line 1590 "compilers/imcc/imcc.y"
+#line 1591 "compilers/imcc/imcc.y"
{ (yyval.t) = 'I'; }
break;
case 195:
-#line 1591 "compilers/imcc/imcc.y"
+#line 1592 "compilers/imcc/imcc.y"
{ (yyval.t) = 'N'; }
break;
case 196:
-#line 1592 "compilers/imcc/imcc.y"
+#line 1593 "compilers/imcc/imcc.y"
{ (yyval.t) = 'S'; }
break;
case 197:
-#line 1593 "compilers/imcc/imcc.y"
+#line 1594 "compilers/imcc/imcc.y"
{ (yyval.t) = 'P'; }
break;
case 198:
-#line 1598 "compilers/imcc/imcc.y"
+#line 1599 "compilers/imcc/imcc.y"
{
/* there'd normally be a str_dup() here, but the lexer already
* copied the string, so it's safe to use directly */
@@ -4070,97 +4071,97 @@
break;
case 199:
-#line 1611 "compilers/imcc/imcc.y"
+#line 1612 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2,
(yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); }
break;
case 200:
-#line 1613 "compilers/imcc/imcc.y"
+#line 1614 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) -
(4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
break;
case 201:
-#line 1615 "compilers/imcc/imcc.y"
+#line 1616 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) -
(5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) -
(5)].sr)); }
break;
case 202:
-#line 1617 "compilers/imcc/imcc.y"
+#line 1618 "compilers/imcc/imcc.y"
{ (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1)
- (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
break;
case 203:
-#line 1619 "compilers/imcc/imcc.y"
+#line 1620 "compilers/imcc/imcc.y"
{ (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) -
(6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
break;
case 204:
-#line 1621 "compilers/imcc/imcc.y"
+#line 1622 "compilers/imcc/imcc.y"
{ (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) -
(6)].sr), (yyvsp[(4) - (6)].s), (yyvsp[(6) - (6)].sr), 1); }
break;
case 205:
-#line 1623 "compilers/imcc/imcc.y"
+#line 1624 "compilers/imcc/imcc.y"
{ (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) -
(7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); }
break;
case 206:
-#line 1625 "compilers/imcc/imcc.y"
+#line 1626 "compilers/imcc/imcc.y"
{ (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) -
(4)].sr), (yyvsp[(4) - (4)].s), NULL, 1); }
break;
case 207:
-#line 1627 "compilers/imcc/imcc.y"
+#line 1628 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2,
(yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
break;
case 208:
-#line 1629 "compilers/imcc/imcc.y"
+#line 1630 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2,
(yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
break;
case 209:
-#line 1631 "compilers/imcc/imcc.y"
+#line 1632 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3,
(yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
break;
case 210:
-#line 1633 "compilers/imcc/imcc.y"
+#line 1634 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3,
(yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
break;
case 211:
-#line 1635 "compilers/imcc/imcc.y"
+#line 1636 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3,
(yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); }
break;
case 212:
-#line 1637 "compilers/imcc/imcc.y"
+#line 1638 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "find_global", 2,
(yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));}
break;
case 213:
-#line 1639 "compilers/imcc/imcc.y"
+#line 1640 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "store_global", 2,
(yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
break;
case 214:
-#line 1643 "compilers/imcc/imcc.y"
+#line 1644 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2,
(yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
break;
case 215:
-#line 1645 "compilers/imcc/imcc.y"
+#line 1646 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3,
(yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
break;
case 216:
-#line 1647 "compilers/imcc/imcc.y"
+#line 1648 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3,
(yyvsp[(2) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); }
break;
case 217:
-#line 1650 "compilers/imcc/imcc.y"
+#line 1651 "compilers/imcc/imcc.y"
{
add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) -
(3)].sr));
IMCC_INFO(interp)->cur_call = NULL;
@@ -4169,14 +4170,14 @@
break;
case 218:
-#line 1656 "compilers/imcc/imcc.y"
+#line 1657 "compilers/imcc/imcc.y"
{
(yyval.i) = IMCC_create_itcall_label(interp);
}
break;
case 219:
-#line 1660 "compilers/imcc/imcc.y"
+#line 1661 "compilers/imcc/imcc.y"
{
IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
IMCC_INFO(interp)->cur_call = NULL;
@@ -4184,144 +4185,144 @@
break;
case 223:
-#line 1668 "compilers/imcc/imcc.y"
+#line 1669 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1,
(yyvsp[(1) - (3)].sr));
}
break;
case 224:
-#line 1675 "compilers/imcc/imcc.y"
+#line 1676 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"not"; }
break;
case 225:
-#line 1676 "compilers/imcc/imcc.y"
+#line 1677 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bnot"; }
break;
case 226:
-#line 1677 "compilers/imcc/imcc.y"
+#line 1678 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"neg"; }
break;
case 227:
-#line 1681 "compilers/imcc/imcc.y"
+#line 1682 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"sub"; }
break;
case 228:
-#line 1682 "compilers/imcc/imcc.y"
+#line 1683 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"add"; }
break;
case 229:
-#line 1683 "compilers/imcc/imcc.y"
+#line 1684 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"mul"; }
break;
case 230:
-#line 1684 "compilers/imcc/imcc.y"
+#line 1685 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"div"; }
break;
case 231:
-#line 1685 "compilers/imcc/imcc.y"
+#line 1686 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"mod"; }
break;
case 232:
-#line 1686 "compilers/imcc/imcc.y"
+#line 1687 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"fdiv"; }
break;
case 233:
-#line 1687 "compilers/imcc/imcc.y"
+#line 1688 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"pow"; }
break;
case 234:
-#line 1688 "compilers/imcc/imcc.y"
+#line 1689 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"concat"; }
break;
case 235:
-#line 1689 "compilers/imcc/imcc.y"
+#line 1690 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"iseq"; }
break;
case 236:
-#line 1690 "compilers/imcc/imcc.y"
+#line 1691 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"isne"; }
break;
case 237:
-#line 1691 "compilers/imcc/imcc.y"
+#line 1692 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"isgt"; }
break;
case 238:
-#line 1692 "compilers/imcc/imcc.y"
+#line 1693 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"isge"; }
break;
case 239:
-#line 1693 "compilers/imcc/imcc.y"
+#line 1694 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"islt"; }
break;
case 240:
-#line 1694 "compilers/imcc/imcc.y"
+#line 1695 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"isle"; }
break;
case 241:
-#line 1695 "compilers/imcc/imcc.y"
+#line 1696 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"shl"; }
break;
case 242:
-#line 1696 "compilers/imcc/imcc.y"
+#line 1697 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"shr"; }
break;
case 243:
-#line 1697 "compilers/imcc/imcc.y"
+#line 1698 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"lsr"; }
break;
case 244:
-#line 1698 "compilers/imcc/imcc.y"
+#line 1699 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"and"; }
break;
case 245:
-#line 1699 "compilers/imcc/imcc.y"
+#line 1700 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"or"; }
break;
case 246:
-#line 1700 "compilers/imcc/imcc.y"
+#line 1701 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"xor"; }
break;
case 247:
-#line 1701 "compilers/imcc/imcc.y"
+#line 1702 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"band"; }
break;
case 248:
-#line 1702 "compilers/imcc/imcc.y"
+#line 1703 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bor"; }
break;
case 249:
-#line 1703 "compilers/imcc/imcc.y"
+#line 1704 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bxor"; }
break;
case 250:
-#line 1709 "compilers/imcc/imcc.y"
+#line 1710 "compilers/imcc/imcc.y"
{
(yyval.i) = IMCC_create_itcall_label(interp);
(yyval.i)->type &= ~ITCALL;
@@ -4330,84 +4331,84 @@
break;
case 251:
-#line 1714 "compilers/imcc/imcc.y"
+#line 1715 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 252:
-#line 1721 "compilers/imcc/imcc.y"
+#line 1722 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) -
(3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
}
break;
case 253:
-#line 1727 "compilers/imcc/imcc.y"
+#line 1728 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"add"; }
break;
case 254:
-#line 1728 "compilers/imcc/imcc.y"
+#line 1729 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"sub"; }
break;
case 255:
-#line 1729 "compilers/imcc/imcc.y"
+#line 1730 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"mul"; }
break;
case 256:
-#line 1730 "compilers/imcc/imcc.y"
+#line 1731 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"div"; }
break;
case 257:
-#line 1731 "compilers/imcc/imcc.y"
+#line 1732 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"mod"; }
break;
case 258:
-#line 1732 "compilers/imcc/imcc.y"
+#line 1733 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"fdiv"; }
break;
case 259:
-#line 1733 "compilers/imcc/imcc.y"
+#line 1734 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"concat"; }
break;
case 260:
-#line 1734 "compilers/imcc/imcc.y"
+#line 1735 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"band"; }
break;
case 261:
-#line 1735 "compilers/imcc/imcc.y"
+#line 1736 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bor"; }
break;
case 262:
-#line 1736 "compilers/imcc/imcc.y"
+#line 1737 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bxor"; }
break;
case 263:
-#line 1737 "compilers/imcc/imcc.y"
+#line 1738 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"shr"; }
break;
case 264:
-#line 1738 "compilers/imcc/imcc.y"
+#line 1739 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"shl"; }
break;
case 265:
-#line 1739 "compilers/imcc/imcc.y"
+#line 1740 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"lsr"; }
break;
case 266:
-#line 1745 "compilers/imcc/imcc.y"
+#line 1746 "compilers/imcc/imcc.y"
{
(yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) -
(4)].sr), (yyvsp[(3) - (4)].s),
IMCC_INFO(interp) -> regs,
@@ -4418,22 +4419,22 @@
break;
case 267:
-#line 1755 "compilers/imcc/imcc.y"
+#line 1756 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 268:
-#line 1756 "compilers/imcc/imcc.y"
+#line 1757 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 269:
-#line 1757 "compilers/imcc/imcc.y"
+#line 1758 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 270:
-#line 1759 "compilers/imcc/imcc.y"
+#line 1760 "compilers/imcc/imcc.y"
{
(yyval.sr) = (yyvsp[(1) - (1)].sr);
if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -4442,7 +4443,7 @@
break;
case 271:
-#line 1765 "compilers/imcc/imcc.y"
+#line 1766 "compilers/imcc/imcc.y"
{
/* disallow bareword method names; SREG name constants are fine */
char *name = (yyvsp[(3) - (3)].sr)->name;
@@ -4457,7 +4458,7 @@
break;
case 272:
-#line 1777 "compilers/imcc/imcc.y"
+#line 1778 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
(yyval.sr) = mk_const(interp, (yyvsp[(3) -
(3)].s), 'S');
@@ -4466,12 +4467,12 @@
break;
case 273:
-#line 1782 "compilers/imcc/imcc.y"
+#line 1783 "compilers/imcc/imcc.y"
{ IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) =
(yyvsp[(3) - (3)].sr); }
break;
case 274:
-#line 1788 "compilers/imcc/imcc.y"
+#line 1789 "compilers/imcc/imcc.y"
{
(yyval.i) = IMCC_create_itcall_label(interp);
IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
@@ -4479,17 +4480,17 @@
break;
case 275:
-#line 1792 "compilers/imcc/imcc.y"
+#line 1793 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(2) - (5)].i); }
break;
case 276:
-#line 1796 "compilers/imcc/imcc.y"
+#line 1797 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 277:
-#line 1798 "compilers/imcc/imcc.y"
+#line 1799 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
if (IMCC_INFO(interp)->adv_named_id) {
@@ -4502,7 +4503,7 @@
break;
case 278:
-#line 1808 "compilers/imcc/imcc.y"
+#line 1809 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
if (IMCC_INFO(interp)->adv_named_id) {
@@ -4515,7 +4516,7 @@
break;
case 279:
-#line 1818 "compilers/imcc/imcc.y"
+#line 1819 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) -
(5)].s), (yyvsp[(5) - (5)].sr));
@@ -4524,7 +4525,7 @@
break;
case 280:
-#line 1824 "compilers/imcc/imcc.y"
+#line 1825 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) -
(3)].s), (yyvsp[(3) - (3)].sr));
@@ -4533,42 +4534,42 @@
break;
case 281:
-#line 1832 "compilers/imcc/imcc.y"
+#line 1833 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) -
(2)].t); }
break;
case 282:
-#line 1836 "compilers/imcc/imcc.y"
+#line 1837 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 283:
-#line 1837 "compilers/imcc/imcc.y"
+#line 1838 "compilers/imcc/imcc.y"
{ (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
break;
case 284:
-#line 1841 "compilers/imcc/imcc.y"
+#line 1842 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_FLAT; }
break;
case 285:
-#line 1842 "compilers/imcc/imcc.y"
+#line 1843 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_NAMED; }
break;
case 286:
-#line 1845 "compilers/imcc/imcc.y"
+#line 1846 "compilers/imcc/imcc.y"
{ adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
break;
case 287:
-#line 1849 "compilers/imcc/imcc.y"
+#line 1850 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) -
(2)].t); }
break;
case 288:
-#line 1854 "compilers/imcc/imcc.y"
+#line 1855 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
if (IMCC_INFO(interp)->adv_named_id) {
@@ -4581,7 +4582,7 @@
break;
case 289:
-#line 1864 "compilers/imcc/imcc.y"
+#line 1865 "compilers/imcc/imcc.y"
{
add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
(yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
mem_sys_free((yyvsp[(3) - (5)].s));
@@ -4589,7 +4590,7 @@
break;
case 290:
-#line 1869 "compilers/imcc/imcc.y"
+#line 1870 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
if (IMCC_INFO(interp)->adv_named_id) {
@@ -4602,7 +4603,7 @@
break;
case 291:
-#line 1879 "compilers/imcc/imcc.y"
+#line 1880 "compilers/imcc/imcc.y"
{
add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
(yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
mem_sys_free((yyvsp[(1) - (3)].s));
@@ -4610,124 +4611,124 @@
break;
case 292:
-#line 1883 "compilers/imcc/imcc.y"
+#line 1884 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 293:
-#line 1887 "compilers/imcc/imcc.y"
+#line 1888 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(1) - (1)].i); }
break;
case 294:
-#line 1888 "compilers/imcc/imcc.y"
+#line 1889 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(1) - (1)].i); }
break;
case 295:
-#line 1893 "compilers/imcc/imcc.y"
+#line 1894 "compilers/imcc/imcc.y"
{
(yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit,
inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr),
(yyvsp[(6) - (6)].sr));
}
break;
case 296:
-#line 1897 "compilers/imcc/imcc.y"
+#line 1898 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit,
"unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
}
break;
case 297:
-#line 1901 "compilers/imcc/imcc.y"
+#line 1902 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2,
(yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
}
break;
case 298:
-#line 1908 "compilers/imcc/imcc.y"
+#line 1909 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2,
(yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
}
break;
case 299:
-#line 1912 "compilers/imcc/imcc.y"
+#line 1913 "compilers/imcc/imcc.y"
{
(yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) -
(6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) -
(6)].sr));
}
break;
case 300:
-#line 1916 "compilers/imcc/imcc.y"
+#line 1917 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2,
(yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
}
break;
case 301:
-#line 1922 "compilers/imcc/imcc.y"
+#line 1923 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 302:
-#line 1923 "compilers/imcc/imcc.y"
+#line 1924 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 303:
-#line 1927 "compilers/imcc/imcc.y"
+#line 1928 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"eq"; }
break;
case 304:
-#line 1928 "compilers/imcc/imcc.y"
+#line 1929 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"ne"; }
break;
case 305:
-#line 1929 "compilers/imcc/imcc.y"
+#line 1930 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"gt"; }
break;
case 306:
-#line 1930 "compilers/imcc/imcc.y"
+#line 1931 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"ge"; }
break;
case 307:
-#line 1931 "compilers/imcc/imcc.y"
+#line 1932 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"lt"; }
break;
case 308:
-#line 1932 "compilers/imcc/imcc.y"
+#line 1933 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"le"; }
break;
case 311:
-#line 1941 "compilers/imcc/imcc.y"
+#line 1942 "compilers/imcc/imcc.y"
{ (yyval.sr) = NULL; }
break;
case 312:
-#line 1942 "compilers/imcc/imcc.y"
+#line 1943 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(1) - (1)].sr); }
break;
case 313:
-#line 1946 "compilers/imcc/imcc.y"
+#line 1947 "compilers/imcc/imcc.y"
{ (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
break;
case 315:
-#line 1951 "compilers/imcc/imcc.y"
+#line 1952 "compilers/imcc/imcc.y"
{ IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) -
(1)].sr); }
break;
case 316:
-#line 1953 "compilers/imcc/imcc.y"
+#line 1954 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1)
- (4)].sr);
IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -4737,7 +4738,7 @@
break;
case 317:
-#line 1960 "compilers/imcc/imcc.y"
+#line 1961 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2)
- (3)].sr);
(yyval.sr) = (yyvsp[(2) - (3)].sr);
@@ -4745,37 +4746,37 @@
break;
case 319:
-#line 1967 "compilers/imcc/imcc.y"
+#line 1968 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 320:
-#line 1968 "compilers/imcc/imcc.y"
+#line 1969 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 321:
-#line 1972 "compilers/imcc/imcc.y"
+#line 1973 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 322:
-#line 1973 "compilers/imcc/imcc.y"
+#line 1974 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 323:
-#line 1977 "compilers/imcc/imcc.y"
+#line 1978 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 324:
-#line 1978 "compilers/imcc/imcc.y"
+#line 1979 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 329:
-#line 1992 "compilers/imcc/imcc.y"
+#line 1993 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->nkeys = 0;
IMCC_INFO(interp)->in_slice = 0;
@@ -4783,7 +4784,7 @@
break;
case 330:
-#line 1997 "compilers/imcc/imcc.y"
+#line 1998 "compilers/imcc/imcc.y"
{
(yyval.sr) = link_keys(interp,
IMCC_INFO(interp)->nkeys,
@@ -4792,7 +4793,7 @@
break;
case 331:
-#line 2005 "compilers/imcc/imcc.y"
+#line 2006 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->nkeys = 0;
IMCC_INFO(interp)->in_slice = 0;
@@ -4800,7 +4801,7 @@
break;
case 332:
-#line 2010 "compilers/imcc/imcc.y"
+#line 2011 "compilers/imcc/imcc.y"
{
(yyval.sr) = link_keys(interp,
IMCC_INFO(interp)->nkeys,
@@ -4809,12 +4810,12 @@
break;
case 333:
-#line 2018 "compilers/imcc/imcc.y"
+#line 2019 "compilers/imcc/imcc.y"
{ IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) -
(1)].sr); }
break;
case 334:
-#line 2020 "compilers/imcc/imcc.y"
+#line 2021 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) -
(3)].sr);
(yyval.sr) = IMCC_INFO(interp)->keys[0];
@@ -4822,12 +4823,12 @@
break;
case 335:
-#line 2024 "compilers/imcc/imcc.y"
+#line 2025 "compilers/imcc/imcc.y"
{ IMCC_INFO(interp)->in_slice = 1; }
break;
case 336:
-#line 2026 "compilers/imcc/imcc.y"
+#line 2027 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(4) -
(4)].sr);
(yyval.sr) = IMCC_INFO(interp)->keys[0];
@@ -4835,7 +4836,7 @@
break;
case 337:
-#line 2034 "compilers/imcc/imcc.y"
+#line 2035 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->in_slice)
(yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE;
@@ -4844,7 +4845,7 @@
break;
case 338:
-#line 2040 "compilers/imcc/imcc.y"
+#line 2041 "compilers/imcc/imcc.y"
{
(yyvsp[(1) - (3)].sr)->type |= VT_START_SLICE;
(yyvsp[(3) - (3)].sr)->type |= VT_END_SLICE;
@@ -4854,73 +4855,73 @@
break;
case 339:
-#line 2046 "compilers/imcc/imcc.y"
+#line 2047 "compilers/imcc/imcc.y"
{ (yyvsp[(2) - (2)].sr)->type |= VT_START_ZERO | VT_END_SLICE; (yyval.sr)
= (yyvsp[(2) - (2)].sr); }
break;
case 340:
-#line 2047 "compilers/imcc/imcc.y"
+#line 2048 "compilers/imcc/imcc.y"
{ (yyvsp[(1) - (2)].sr)->type |= VT_START_SLICE | VT_END_INF; (yyval.sr) =
(yyvsp[(1) - (2)].sr); }
break;
case 341:
-#line 2051 "compilers/imcc/imcc.y"
+#line 2052 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
break;
case 342:
-#line 2052 "compilers/imcc/imcc.y"
+#line 2053 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
break;
case 343:
-#line 2053 "compilers/imcc/imcc.y"
+#line 2054 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
break;
case 344:
-#line 2054 "compilers/imcc/imcc.y"
+#line 2055 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
break;
case 345:
-#line 2055 "compilers/imcc/imcc.y"
+#line 2056 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s));
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 346:
-#line 2059 "compilers/imcc/imcc.y"
+#line 2060 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I');
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 347:
-#line 2060 "compilers/imcc/imcc.y"
+#line 2061 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N');
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 348:
-#line 2061 "compilers/imcc/imcc.y"
+#line 2062 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S');
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 349:
-#line 2062 "compilers/imcc/imcc.y"
+#line 2063 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U');
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 350:
-#line 2066 "compilers/imcc/imcc.y"
+#line 2067 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S');
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 351:
-#line 2067 "compilers/imcc/imcc.y"
+#line 2068 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S');
mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
/* Line 1267 of yacc.c. */
-#line 4913 "compilers/imcc/imcparser.c"
+#line 4914 "compilers/imcc/imcparser.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5134,7 +5135,7 @@
}
-#line 2072 "compilers/imcc/imcc.y"
+#line 2073 "compilers/imcc/imcc.y"
/* I need this prototype somewhere... */
Modified: trunk/compilers/imcc/pbc.c
==============================================================================
--- trunk/compilers/imcc/pbc.c (original)
+++ trunk/compilers/imcc/pbc.c Wed Dec 3 08:19:36 2008
@@ -664,10 +664,11 @@
SymReg * const r = s->unit->instructions->symregs[0];
/* if names and namespaces are matching - ok */
- if (r && (strcmp(r->name, name) == 0)
+ if (r && ((r->subid && (strcmp(r->subid, name) == 0))
+ || (r->name && (strcmp(r->name, name) == 0)))
&& ((sym->unit->_namespace && s->unit->_namespace
- && (strcmp(sym->unit->_namespace->name,
s->unit->_namespace->name) == 0))
- || (!sym->unit->_namespace && !s->unit->_namespace)))
+ && (strcmp(sym->unit->_namespace->name,
s->unit->_namespace->name) == 0))
+ || (!sym->unit->_namespace && !s->unit->_namespace)))
return s;
*pc += s->size;
@@ -1229,7 +1230,8 @@
if (unit->is_method == 1) {
/* Work out the name of the method. */
if (unit->method_name)
- sub->method_name = string_from_cstring(interp, unit->method_name,
0);
+ sub->method_name = string_from_cstring(interp, unit->method_name +
1,
+ strlen(unit->method_name) - 2);
else
sub->method_name = sub->name;
}
@@ -1240,7 +1242,8 @@
if (unit->has_ns_entry_name == 1) {
/* Work out the name of the ns entry. */
if (unit->ns_entry_name)
- sub->ns_entry_name = string_from_cstring(interp,
unit->ns_entry_name, 0);
+ sub->ns_entry_name = string_from_cstring(interp,
unit->ns_entry_name +1,
+ strlen(unit->ns_entry_name) - 2);
else
sub->ns_entry_name = sub->name;
}
Modified: trunk/compilers/imcc/symreg.c
==============================================================================
--- trunk/compilers/imcc/symreg.c (original)
+++ trunk/compilers/imcc/symreg.c Wed Dec 3 08:19:36 2008
@@ -1165,6 +1165,7 @@
}
}
+ mem_sys_free(r->subid);
mem_sys_free(r->name);
mem_sys_free(r);
}
Modified: trunk/compilers/imcc/symreg.h
==============================================================================
--- trunk/compilers/imcc/symreg.h (original)
+++ trunk/compilers/imcc/symreg.h Wed Dec 3 08:19:36 2008
@@ -65,6 +65,7 @@
typedef struct _SymReg {
char *name;
+ char *subid;
INTVAL type; /* Variable type */
INTVAL usage; /* s. USAGE above */
int set; /* parent register set/file */
Modified: trunk/include/parrot/string_primitives.h
==============================================================================
--- trunk/include/parrot/string_primitives.h (original)
+++ trunk/include/parrot/string_primitives.h Wed Dec 3 08:19:36 2008
@@ -29,6 +29,12 @@
__attribute__nonnull__(1);
PARROT_EXPORT
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+char * str_dup_remove_quotes(ARGIN(const char *old))
+ __attribute__nonnull__(1);
+
+PARROT_EXPORT
void string_set_data_directory(PARROT_INTERP, ARGIN(const char *dir))
__attribute__nonnull__(1)
__attribute__nonnull__(2);
Modified: trunk/src/string_primitives.c
==============================================================================
--- trunk/src/string_primitives.c (original)
+++ trunk/src/string_primitives.c Wed Dec 3 08:19:36 2008
@@ -357,6 +357,31 @@
/*
+=item C<char * str_dup>
+
+Duplicate a C string. Just like strdup(), except it dies if it runs
+out of memory.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+char *
+str_dup_remove_quotes(ARGIN(const char * old))
+{
+ const size_t oldlen = strlen(old) + 1;
+ const size_t newlen = oldlen - 2; /* 2 for the beginning and ending quote
chars */
+ char * const copy = (char *)mem_sys_allocate(newlen);
+ memcpy(copy, old+1, newlen);
+ copy[newlen - 1] = 0;
+ return copy;
+}
+
+/*
+
=back
=head1 SEE ALSO
Modified: trunk/t/compilers/imcc/syn/subflags.t
==============================================================================
--- trunk/t/compilers/imcc/syn/subflags.t (original)
+++ trunk/t/compilers/imcc/syn/subflags.t Wed Dec 3 08:19:36 2008
@@ -26,7 +26,7 @@
test_namespace.'export_to'(curr_namespace, exports)
## set our plan
- plan(15)
+ plan(18)
.local pmc pmcnull
null pmcnull
@@ -68,7 +68,17 @@
$P0 = get_global 'method1'
$I0 = isnull $P0
todo($I0, ":method sub not found in namespace")
-.end
+
+ ## :subid subs
+ .const 'Sub' $P40 = 'subid1'
+ isa_ok($P40, 'Sub', ':subid found w/.const')
+ $P0 = get_global 'subid1'
+ $I0 = isnull $P0
+ ok($I0, ":subid not found in namespace")
+ $P0 = get_global '_subid1_'
+ $I0 = issame $P40, $P0
+ ok($I0, ":subid found under sub's name in namespace")
+ .end
.sub 'is_same'
@@ -108,3 +118,6 @@
.end
+.sub '_subid1_' :subid('subid1')
+ .return ('subid1')
+.end