Author: kjs
Date: Fri Aug 22 05:55:59 2008
New Revision: 30441
Modified:
trunk/compilers/pirc/new/pir.y
trunk/compilers/pirc/new/pirparser.c
Log:
[pirc/new] give an error message if indexed objects are not of type PMC.
Modified: trunk/compilers/pirc/new/pir.y
==============================================================================
--- trunk/compilers/pirc/new/pir.y (original)
+++ trunk/compilers/pirc/new/pir.y Fri Aug 22 05:55:59 2008
@@ -644,7 +644,11 @@
keyaccess : target keylist
{
- set_target_key($1, $2);
+ if ($1->type != PMC_TYPE)
+ yyerror(yyscanner, lexer, "indexed object is
not of type PMC");
+ else
+ set_target_key($1, $2);
+
$$ = $1;
}
;
Modified: trunk/compilers/pirc/new/pirparser.c
==============================================================================
--- trunk/compilers/pirc/new/pirparser.c (original)
+++ trunk/compilers/pirc/new/pirparser.c Fri Aug 22 05:55:59 2008
@@ -934,32 +934,32 @@
574, 576, 579, 580, 581, 582, 583, 584, 585, 586,
587, 588, 589, 590, 591, 592, 596, 606, 609, 611,
615, 619, 622, 625, 629, 630, 633, 634, 637, 639,
- 641, 645, 652, 656, 658, 663, 666, 667, 674, 682,
- 684, 691, 693, 695, 697, 723, 756, 763, 770, 772,
- 774, 778, 791, 793, 795, 800, 802, 804, 806, 808,
- 810, 812, 814, 819, 821, 823, 830, 837, 844, 846,
- 853, 860, 862, 864, 874, 878, 893, 895, 916, 918,
- 920, 922, 944, 957, 959, 968, 988, 1023, 1030, 1032,
- 1034, 1048, 1059, 1064, 1069, 1080, 1101, 1102, 1103, 1104,
- 1105, 1109, 1112, 1114, 1116, 1142, 1147, 1152, 1157, 1162,
- 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1180, 1181, 1184,
- 1185, 1188, 1192, 1196, 1198, 1202, 1206, 1208, 1215, 1216,
- 1219, 1232, 1233, 1236, 1248, 1249, 1253, 1255, 1259, 1263,
- 1265, 1267, 1273, 1274, 1279, 1280, 1284, 1286, 1290, 1292,
- 1296, 1300, 1302, 1304, 1308, 1309, 1312, 1319, 1326, 1328,
- 1332, 1333, 1336, 1338, 1346, 1350, 1352, 1357, 1362, 1363,
- 1367, 1369, 1373, 1378, 1379, 1383, 1385, 1387, 1389, 1391,
- 1401, 1402, 1405, 1406, 1409, 1414, 1421, 1428, 1433, 1434,
- 1438, 1440, 1444, 1445, 1448, 1452, 1456, 1460, 1469, 1479,
- 1480, 1485, 1487, 1492, 1497, 1498, 1502, 1504, 1508, 1514,
- 1515, 1519, 1521, 1529, 1530, 1534, 1538, 1541, 1542, 1545,
- 1549, 1553, 1555, 1557, 1559, 1577, 1578, 1581, 1582, 1583,
- 1586, 1587, 1588, 1589, 1590, 1591, 1594, 1595, 1596, 1597,
- 1605, 1608, 1609, 1610, 1611, 1612, 1613, 1623, 1624, 1627,
- 1628, 1629, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639,
- 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649,
- 1650, 1651, 1652, 1653, 1654, 1660, 1661, 1662, 1663, 1664,
- 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1674, 1675
+ 641, 645, 656, 660, 662, 667, 670, 671, 678, 686,
+ 688, 695, 697, 699, 701, 727, 760, 767, 774, 776,
+ 778, 782, 795, 797, 799, 804, 806, 808, 810, 812,
+ 814, 816, 818, 823, 825, 827, 834, 841, 848, 850,
+ 857, 864, 866, 868, 878, 882, 897, 899, 920, 922,
+ 924, 926, 948, 961, 963, 972, 992, 1027, 1034, 1036,
+ 1038, 1052, 1063, 1068, 1073, 1084, 1105, 1106, 1107, 1108,
+ 1109, 1113, 1116, 1118, 1120, 1146, 1151, 1156, 1161, 1166,
+ 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1184, 1185, 1188,
+ 1189, 1192, 1196, 1200, 1202, 1206, 1210, 1212, 1219, 1220,
+ 1223, 1236, 1237, 1240, 1252, 1253, 1257, 1259, 1263, 1267,
+ 1269, 1271, 1277, 1278, 1283, 1284, 1288, 1290, 1294, 1296,
+ 1300, 1304, 1306, 1308, 1312, 1313, 1316, 1323, 1330, 1332,
+ 1336, 1337, 1340, 1342, 1350, 1354, 1356, 1361, 1366, 1367,
+ 1371, 1373, 1377, 1382, 1383, 1387, 1389, 1391, 1393, 1395,
+ 1405, 1406, 1409, 1410, 1413, 1418, 1425, 1432, 1437, 1438,
+ 1442, 1444, 1448, 1449, 1452, 1456, 1460, 1464, 1473, 1483,
+ 1484, 1489, 1491, 1496, 1501, 1502, 1506, 1508, 1512, 1518,
+ 1519, 1523, 1525, 1533, 1534, 1538, 1542, 1545, 1546, 1549,
+ 1553, 1557, 1559, 1561, 1563, 1581, 1582, 1585, 1586, 1587,
+ 1590, 1591, 1592, 1593, 1594, 1595, 1598, 1599, 1600, 1601,
+ 1609, 1612, 1613, 1614, 1615, 1616, 1617, 1627, 1628, 1631,
+ 1632, 1633, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643,
+ 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653,
+ 1654, 1655, 1656, 1657, 1658, 1664, 1665, 1666, 1667, 1668,
+ 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1678, 1679
};
#endif
@@ -2509,28 +2509,32 @@
case 91:
#line 646 "pir.y"
{
- set_target_key((yyvsp[(1) - (2)].targ), (yyvsp[(2)
- (2)].key));
+ if ((yyvsp[(1) - (2)].targ)->type != PMC_TYPE)
+ yyerror(yyscanner, lexer, "indexed object is
not of type PMC");
+ else
+ set_target_key((yyvsp[(1) - (2)].targ),
(yyvsp[(2) - (2)].key));
+
(yyval.targ) = (yyvsp[(1) - (2)].targ);
;}
break;
case 92:
-#line 653 "pir.y"
+#line 657 "pir.y"
{ (yyval.key) = (yyvsp[(2) - (3)].key); ;}
break;
case 93:
-#line 657 "pir.y"
+#line 661 "pir.y"
{ (yyval.key) = new_key((yyvsp[(1) - (1)].expr)); ;}
break;
case 94:
-#line 659 "pir.y"
+#line 663 "pir.y"
{ (yyval.key) = add_key((yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr));
;}
break;
case 97:
-#line 668 "pir.y"
+#line 672 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 0) /* x = 0 ->
null x */
set_instrf(lexer, "null", "%T", (yyvsp[(1) -
(3)].targ));
@@ -2540,7 +2544,7 @@
break;
case 98:
-#line 675 "pir.y"
+#line 679 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 0.0) /* x = 0.0 ->
null x */
set_instrf(lexer, "null", "%T", (yyvsp[(1) -
(3)].targ));
@@ -2551,12 +2555,12 @@
break;
case 99:
-#line 683 "pir.y"
+#line 687 "pir.y"
{ set_instrf(lexer, "set", "%T%s", (yyvsp[(1) - (3)].targ), (yyvsp[(3) -
(3)].sval)); ;}
break;
case 100:
-#line 685 "pir.y"
+#line 689 "pir.y"
{
if (targets_equal((yyvsp[(1) - (3)].targ),
(yyvsp[(3) - (3)].targ)))
set_instr(lexer, "nop");
@@ -2566,22 +2570,22 @@
break;
case 101:
-#line 692 "pir.y"
+#line 696 "pir.y"
{ unshift_operand(lexer, expr_from_target((yyvsp[(1) - (2)].targ))); ;}
break;
case 102:
-#line 694 "pir.y"
+#line 698 "pir.y"
{ set_instrf(lexer, (yyvsp[(3) - (4)].sval), "%T%E", (yyvsp[(1) -
(4)].targ), (yyvsp[(4) - (4)].expr)); ;}
break;
case 103:
-#line 696 "pir.y"
+#line 700 "pir.y"
{ unshift_operand(lexer, expr_from_target((yyvsp[(1) - (3)].targ))); ;}
break;
case 104:
-#line 698 "pir.y"
+#line 702 "pir.y"
{
int equal = targets_equal((yyvsp[(1) - (5)].targ),
(yyvsp[(3) - (5)].targ));
if (equal) {
@@ -2610,7 +2614,7 @@
break;
case 105:
-#line 724 "pir.y"
+#line 728 "pir.y"
{
int equal = targets_equal((yyvsp[(1) - (5)].targ),
(yyvsp[(3) - (5)].targ));
if (equal) {
@@ -2646,7 +2650,7 @@
break;
case 106:
-#line 757 "pir.y"
+#line 761 "pir.y"
{
if (targets_equal((yyvsp[(1) - (5)].targ),
(yyvsp[(3) - (5)].targ))) /* x = x . "hi" -> x .= "hi" */
set_instrf(lexer, opnames[(yyvsp[(4) -
(5)].ival)], "%T%s", (yyvsp[(1) - (5)].targ), (yyvsp[(5) - (5)].sval));
@@ -2656,7 +2660,7 @@
break;
case 107:
-#line 764 "pir.y"
+#line 768 "pir.y"
{
if (targets_equal((yyvsp[(1) - (5)].targ),
(yyvsp[(3) - (5)].targ)))
set_instrf(lexer, opnames[(yyvsp[(4) -
(5)].ival)], "%T%T", (yyvsp[(1) - (5)].targ), (yyvsp[(5) - (5)].targ));
@@ -2666,22 +2670,22 @@
break;
case 108:
-#line 771 "pir.y"
+#line 775 "pir.y"
{ set_instrf(lexer, "set", "%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) -
(3)].expr)); ;}
break;
case 109:
-#line 773 "pir.y"
+#line 777 "pir.y"
{ set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) -
(3)].targ)); ;}
break;
case 110:
-#line 775 "pir.y"
+#line 779 "pir.y"
{ unshift_operand(lexer, expr_from_target((yyvsp[(1) - (3)].targ))); ;}
break;
case 111:
-#line 779 "pir.y"
+#line 783 "pir.y"
{
if ((yyvsp[(2) - (2)].ival) == 1) { /*
adding/subtracting 1? */
/* "inc" is sorted right after "add";
@@ -2697,72 +2701,72 @@
break;
case 112:
-#line 792 "pir.y"
+#line 796 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(1) - (2)].ival)], "%n", (yyvsp[(2) -
(2)].dval)); ;}
break;
case 113:
-#line 794 "pir.y"
+#line 798 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(1) - (2)].ival)], "%T", (yyvsp[(2) -
(2)].targ)); ;}
break;
case 114:
-#line 796 "pir.y"
+#line 800 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(1) - (2)].ival)], "%E", (yyvsp[(2) -
(2)].expr)); ;}
break;
case 115:
-#line 801 "pir.y"
+#line 805 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%i%T", (yyvsp[(1) -
(3)].ival), (yyvsp[(3) - (3)].targ)); ;}
break;
case 116:
-#line 803 "pir.y"
+#line 807 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%n%T", (yyvsp[(1) -
(3)].dval), (yyvsp[(3) - (3)].targ)); ;}
break;
case 117:
-#line 805 "pir.y"
+#line 809 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%s%T", (yyvsp[(1) -
(3)].sval), (yyvsp[(3) - (3)].targ)); ;}
break;
case 118:
-#line 807 "pir.y"
+#line 811 "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 119:
-#line 809 "pir.y"
+#line 813 "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 120:
-#line 811 "pir.y"
+#line 815 "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 121:
-#line 813 "pir.y"
+#line 817 "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 122:
-#line 815 "pir.y"
+#line 819 "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 123:
-#line 820 "pir.y"
+#line 824 "pir.y"
{ set_instrf(lexer, "set", "%T%T", (yyvsp[(2) - (4)].targ), (yyvsp[(4) -
(4)].targ)); ;}
break;
case 124:
-#line 822 "pir.y"
+#line 826 "pir.y"
{ set_instrf(lexer, "set", "%T%E", (yyvsp[(2) - (4)].targ), (yyvsp[(4) -
(4)].expr)); ;}
break;
case 125:
-#line 824 "pir.y"
+#line 828 "pir.y"
{
if (targets_equal((yyvsp[(2) - (4)].targ),
(yyvsp[(4) - (4)].targ))) /* set $I0, $I0 -> delete */
set_instr(lexer, "nop");
@@ -2772,7 +2776,7 @@
break;
case 126:
-#line 831 "pir.y"
+#line 835 "pir.y"
{
if ((yyvsp[(4) - (4)].ival) == 0) /* set $I0, 0 ->
null $I0 */
set_instrf(lexer, "null", "%T", (yyvsp[(2) -
(4)].targ));
@@ -2782,7 +2786,7 @@
break;
case 127:
-#line 838 "pir.y"
+#line 842 "pir.y"
{
if ((yyvsp[(4) - (4)].dval) == 0) /* set $N0, 0.0
-> null $N0 */
set_instrf(lexer, "null", "%T", (yyvsp[(2) -
(4)].targ));
@@ -2792,12 +2796,12 @@
break;
case 128:
-#line 845 "pir.y"
+#line 849 "pir.y"
{ set_instrf(lexer, "set", "%T%s", (yyvsp[(2) - (4)].targ), (yyvsp[(4) -
(4)].sval)); ;}
break;
case 129:
-#line 847 "pir.y"
+#line 851 "pir.y"
{
if ((yyvsp[(4) - (4)].ival) == 0) /* $I0 = set 0
-> null $I0 */
set_instrf(lexer, "null", "%T", (yyvsp[(1) -
(4)].targ));
@@ -2807,7 +2811,7 @@
break;
case 130:
-#line 854 "pir.y"
+#line 858 "pir.y"
{
if ((yyvsp[(4) - (4)].dval) == 0) /* $N0 = set 0.0
-> null $N0 */
set_instrf(lexer, "null", "%T", (yyvsp[(1) -
(4)].targ));
@@ -2817,17 +2821,17 @@
break;
case 131:
-#line 861 "pir.y"
+#line 865 "pir.y"
{ set_instrf(lexer, "set", "%T%s", (yyvsp[(1) - (4)].targ), (yyvsp[(4) -
(4)].sval)); ;}
break;
case 132:
-#line 863 "pir.y"
+#line 867 "pir.y"
{ set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (4)].targ), (yyvsp[(4) -
(4)].targ)); ;}
break;
case 133:
-#line 865 "pir.y"
+#line 869 "pir.y"
{
if (targets_equal((yyvsp[(1) - (4)].targ),
(yyvsp[(4) - (4)].targ))) /* $I0 = set $I0 -> delete */
set_instr(lexer, "nop");
@@ -2837,7 +2841,7 @@
break;
case 135:
-#line 879 "pir.y"
+#line 883 "pir.y"
{
if (((yyvsp[(4) - (4)].ival) == 1) && (((yyvsp[(1)
- (4)].ival) == OP_ADD) || ((yyvsp[(1) - (4)].ival) == OP_SUB)))
/* add $I0, 1 -> inc $I0 */
@@ -2855,12 +2859,12 @@
break;
case 136:
-#line 894 "pir.y"
+#line 898 "pir.y"
{ set_instrf(lexer, "set", "%T%C", (yyvsp[(2) - (6)].targ),
fold_i_i(yyscanner, (yyvsp[(4) - (6)].ival), (yyvsp[(1) - (6)].ival),
(yyvsp[(6) - (6)].ival))); ;}
break;
case 137:
-#line 896 "pir.y"
+#line 900 "pir.y"
{
if ((yyvsp[(4) - (4)].dval) == 0) {
if (((yyvsp[(1) - (4)].ival) == OP_ADD) ||
((yyvsp[(1) - (4)].ival) == OP_SUB)) /* add $N0, 0.0 -> delete */
@@ -2884,22 +2888,22 @@
break;
case 138:
-#line 917 "pir.y"
+#line 921 "pir.y"
{ set_instrf(lexer, "set", "%T%C", (yyvsp[(2) - (6)].targ),
fold_i_n(yyscanner, (yyvsp[(4) - (6)].ival), (yyvsp[(1) - (6)].ival),
(yyvsp[(6) - (6)].dval))); ;}
break;
case 139:
-#line 919 "pir.y"
+#line 923 "pir.y"
{ set_instrf(lexer, "set", "%T%C", (yyvsp[(2) - (6)].targ),
fold_n_n(yyscanner, (yyvsp[(4) - (6)].dval), (yyvsp[(1) - (6)].ival),
(yyvsp[(6) - (6)].dval))); ;}
break;
case 140:
-#line 921 "pir.y"
+#line 925 "pir.y"
{ set_instrf(lexer, "set", "%T%C", (yyvsp[(2) - (6)].targ),
fold_n_i(yyscanner, (yyvsp[(4) - (6)].dval), (yyvsp[(1) - (6)].ival),
(yyvsp[(6) - (6)].ival))); ;}
break;
case 141:
-#line 923 "pir.y"
+#line 927 "pir.y"
{
if ((yyvsp[(4) - (6)].ival) == 0) {
if (((yyvsp[(1) - (6)].ival) == OP_ADD) ||
((yyvsp[(1) - (6)].ival) == OP_SUB)) {
@@ -2924,7 +2928,7 @@
break;
case 142:
-#line 945 "pir.y"
+#line 949 "pir.y"
{
if (((yyvsp[(4) - (6)].dval) == 1.0) &&
((yyvsp[(1) - (6)].ival) == OP_MUL)) {
/* mul $N0, 1.0, $N1 -> set $N0, $N1 */
@@ -2940,12 +2944,12 @@
break;
case 143:
-#line 958 "pir.y"
+#line 962 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(1) - (4)].ival)], "%T%T", (yyvsp[(2) -
(4)].targ), (yyvsp[(4) - (4)].targ)); ;}
break;
case 144:
-#line 960 "pir.y"
+#line 964 "pir.y"
{
if (targets_equal((yyvsp[(2) - (6)].targ),
(yyvsp[(4) - (6)].targ)))
/* op $N0, $N0, $N1 -> op $N0, $N1 */
@@ -2957,7 +2961,7 @@
break;
case 145:
-#line 969 "pir.y"
+#line 973 "pir.y"
{
int equal = targets_equal((yyvsp[(2) - (6)].targ),
(yyvsp[(4) - (6)].targ));
if ((yyvsp[(6) - (6)].dval) == 1.0) {
@@ -2980,7 +2984,7 @@
break;
case 146:
-#line 989 "pir.y"
+#line 993 "pir.y"
{
int equal = targets_equal((yyvsp[(2) - (6)].targ),
(yyvsp[(4) - (6)].targ));
if ((yyvsp[(6) - (6)].ival) == 1) {
@@ -3018,7 +3022,7 @@
break;
case 147:
-#line 1024 "pir.y"
+#line 1028 "pir.y"
{
if (targets_equal((yyvsp[(1) - (6)].targ),
(yyvsp[(4) - (6)].targ)))
set_instrf(lexer, opnames[(yyvsp[(3) -
(6)].ival)], "%T%T", (yyvsp[(1) - (6)].targ), (yyvsp[(6) - (6)].targ));
@@ -3028,17 +3032,17 @@
break;
case 148:
-#line 1031 "pir.y"
+#line 1035 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(3) - (6)].ival)], "%T%C", (yyvsp[(1) -
(6)].targ), fold_i_i(yyscanner, (yyvsp[(4) - (6)].ival), (yyvsp[(3) -
(6)].ival), (yyvsp[(6) - (6)].ival))); ;}
break;
case 149:
-#line 1033 "pir.y"
+#line 1037 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(3) - (6)].ival)], "%T%C", (yyvsp[(1) -
(6)].targ), fold_i_n(yyscanner, (yyvsp[(4) - (6)].ival), (yyvsp[(3) -
(6)].ival), (yyvsp[(6) - (6)].dval))); ;}
break;
case 150:
-#line 1035 "pir.y"
+#line 1039 "pir.y"
{
if ((yyvsp[(4) - (4)].ival) == 0 && (((yyvsp[(3) -
(4)].ival) == OP_ADD) || ((yyvsp[(3) - (4)].ival) == OP_SUB))) /* $I0 = add 0
=> delete */
set_instr(lexer, "nop");
@@ -3055,7 +3059,7 @@
break;
case 151:
-#line 1049 "pir.y"
+#line 1053 "pir.y"
{
/* $I0 = add 0 -> delete */
if ((yyvsp[(4) - (4)].dval) == 0 && (((yyvsp[(3) -
(4)].ival) == OP_ADD) || ((yyvsp[(3) - (4)].ival) == OP_SUB)))
@@ -3069,7 +3073,7 @@
break;
case 152:
-#line 1060 "pir.y"
+#line 1064 "pir.y"
{
/* $N0 = add 1.5, 10 -> set $N0, 15 */
set_instrf(lexer, "set", "%T%C", (yyvsp[(1) -
(6)].targ), fold_n_i(yyscanner, (yyvsp[(4) - (6)].dval), (yyvsp[(3) -
(6)].ival), (yyvsp[(6) - (6)].ival)));
@@ -3077,7 +3081,7 @@
break;
case 153:
-#line 1065 "pir.y"
+#line 1069 "pir.y"
{
/* $I0 = add 1, 2 -> $I0 = 3 */
set_instrf(lexer, "set", "%T%C", (yyvsp[(1) -
(6)].targ), fold_n_n(yyscanner, (yyvsp[(4) - (6)].dval), (yyvsp[(3) -
(6)].ival), (yyvsp[(6) - (6)].dval)));
@@ -3085,7 +3089,7 @@
break;
case 154:
-#line 1070 "pir.y"
+#line 1074 "pir.y"
{
if (((yyvsp[(4) - (6)].dval) == 1.0) &&
((yyvsp[(3) - (6)].ival) == OP_MUL))
/* $N0 = mul 1, $N1 -> set $N0, $N1 */
@@ -3099,7 +3103,7 @@
break;
case 155:
-#line 1081 "pir.y"
+#line 1085 "pir.y"
{
int equal = targets_equal((yyvsp[(1) - (6)].targ),
(yyvsp[(4) - (6)].targ));
if (((yyvsp[(6) - (6)].dval) == 1.0) &&
(((yyvsp[(3) - (6)].ival) == OP_MUL) || ((yyvsp[(3) - (6)].ival) == OP_DIV) ||
((yyvsp[(3) - (6)].ival) == OP_FDIV))) {
@@ -3121,42 +3125,42 @@
break;
case 156:
-#line 1101 "pir.y"
+#line 1105 "pir.y"
{ (yyval.ival) = OP_ADD; ;}
break;
case 157:
-#line 1102 "pir.y"
+#line 1106 "pir.y"
{ (yyval.ival) = OP_SUB; ;}
break;
case 158:
-#line 1103 "pir.y"
+#line 1107 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 159:
-#line 1104 "pir.y"
+#line 1108 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 160:
-#line 1105 "pir.y"
+#line 1109 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 162:
-#line 1113 "pir.y"
+#line 1117 "pir.y"
{ set_instrf(lexer, (yyvsp[(1) - (5)].ival) ? "unless_null" : "if_null",
"%E%I", (yyvsp[(3) - (5)].expr), (yyvsp[(5) - (5)].sval)); ;}
break;
case 163:
-#line 1115 "pir.y"
+#line 1119 "pir.y"
{ set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I",
(yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval)); ;}
break;
case 164:
-#line 1117 "pir.y"
+#line 1121 "pir.y"
{
if ((yyvsp[(2) - (4)].ival) == -1) { /* -1 means the
condition is evaluated during runtime */
if ((yyvsp[(1) - (4)].ival)) /* "unless"? if so,
invert the instruction. */
@@ -3179,7 +3183,7 @@
break;
case 165:
-#line 1143 "pir.y"
+#line 1147 "pir.y"
{
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)],
"%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].expr));
(yyval.ival) = -1; /* -1 indicates this is
evaluated at runtime */
@@ -3187,7 +3191,7 @@
break;
case 166:
-#line 1148 "pir.y"
+#line 1152 "pir.y"
{
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)],
"%i%T", (yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].targ));
(yyval.ival) = -1;
@@ -3195,7 +3199,7 @@
break;
case 167:
-#line 1153 "pir.y"
+#line 1157 "pir.y"
{
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)],
"%n%T", (yyvsp[(1) - (3)].dval), (yyvsp[(3) - (3)].targ));
(yyval.ival) = -1;
@@ -3203,7 +3207,7 @@
break;
case 168:
-#line 1158 "pir.y"
+#line 1162 "pir.y"
{
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)],
"%s%T", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].targ));
(yyval.ival) = -1;
@@ -3211,87 +3215,87 @@
break;
case 169:
-#line 1163 "pir.y"
+#line 1167 "pir.y"
{ (yyval.ival) = evaluate_i_i((yyvsp[(1) - (3)].ival), (yyvsp[(2) -
(3)].ival), (yyvsp[(3) - (3)].ival)); ;}
break;
case 170:
-#line 1165 "pir.y"
+#line 1169 "pir.y"
{ (yyval.ival) = evaluate_n_n((yyvsp[(1) - (3)].dval), (yyvsp[(2) -
(3)].ival), (yyvsp[(3) - (3)].dval)); ;}
break;
case 171:
-#line 1167 "pir.y"
+#line 1171 "pir.y"
{ (yyval.ival) = evaluate_i_n((yyvsp[(1) - (3)].ival), (yyvsp[(2) -
(3)].ival), (yyvsp[(3) - (3)].dval)); ;}
break;
case 172:
-#line 1169 "pir.y"
+#line 1173 "pir.y"
{ (yyval.ival) = evaluate_n_i((yyvsp[(1) - (3)].dval), (yyvsp[(2) -
(3)].ival), (yyvsp[(3) - (3)].ival)); ;}
break;
case 173:
-#line 1171 "pir.y"
+#line 1175 "pir.y"
{ (yyval.ival) = evaluate_s_s((yyvsp[(1) - (3)].sval), (yyvsp[(2) -
(3)].ival), (yyvsp[(3) - (3)].sval)); ;}
break;
case 174:
-#line 1173 "pir.y"
+#line 1177 "pir.y"
{ (yyval.ival) = (yyvsp[(1) - (1)].ival) ? 1 : 0; ;}
break;
case 175:
-#line 1175 "pir.y"
+#line 1179 "pir.y"
{ (yyval.ival) = (yyvsp[(1) - (1)].dval) ? 1 : 0; ;}
break;
case 176:
-#line 1177 "pir.y"
+#line 1181 "pir.y"
{ (yyval.ival) = evaluate_s((yyvsp[(1) - (1)].sval)); ;}
break;
case 177:
-#line 1180 "pir.y"
+#line 1184 "pir.y"
{ (yyval.ival) = 0; /* no need to invert */ ;}
break;
case 178:
-#line 1181 "pir.y"
+#line 1185 "pir.y"
{ (yyval.ival) = 1; /* yes, invert opname */ ;}
break;
case 181:
-#line 1189 "pir.y"
+#line 1193 "pir.y"
{ set_instrf(lexer, "branch", "%I", (yyvsp[(2) - (3)].sval)); ;}
break;
case 182:
-#line 1193 "pir.y"
+#line 1197 "pir.y"
{ declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].symb));
;}
break;
case 183:
-#line 1197 "pir.y"
+#line 1201 "pir.y"
{ (yyval.symb) = (yyvsp[(1) - (1)].symb); ;}
break;
case 184:
-#line 1199 "pir.y"
+#line 1203 "pir.y"
{ (yyval.symb) = add_local((yyvsp[(1) - (3)].symb), (yyvsp[(3) -
(3)].symb)); ;}
break;
case 185:
-#line 1203 "pir.y"
+#line 1207 "pir.y"
{ (yyval.symb) = new_local((yyvsp[(1) - (2)].sval), (yyvsp[(2) -
(2)].ival)); ;}
break;
case 186:
-#line 1207 "pir.y"
+#line 1211 "pir.y"
{ (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
break;
case 187:
-#line 1209 "pir.y"
+#line 1213 "pir.y"
{
yyerror(yyscanner, lexer, "local symbol already
declared!");
(yyval.sval) = (yyvsp[(1) - (1)].symb)->name;
@@ -3299,17 +3303,17 @@
break;
case 188:
-#line 1215 "pir.y"
+#line 1219 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 189:
-#line 1216 "pir.y"
+#line 1220 "pir.y"
{ (yyval.ival) = 1; ;}
break;
case 190:
-#line 1220 "pir.y"
+#line 1224 "pir.y"
{
if ((yyvsp[(4) - (5)].targ)->type == PMC_TYPE)
set_lex_flag((yyvsp[(4) - (5)].targ), (yyvsp[(2)
- (5)].sval));
@@ -3320,7 +3324,7 @@
break;
case 193:
-#line 1241 "pir.y"
+#line 1245 "pir.y"
{ /* $4 contains an invocation object */
set_invocation_args((yyvsp[(4) - (8)].invo),
(yyvsp[(3) - (8)].argm));
set_invocation_results((yyvsp[(4) - (8)].invo),
(yyvsp[(6) - (8)].targ));
@@ -3328,102 +3332,102 @@
break;
case 194:
-#line 1248 "pir.y"
+#line 1252 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 195:
-#line 1250 "pir.y"
+#line 1254 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 196:
-#line 1254 "pir.y"
+#line 1258 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 197:
-#line 1256 "pir.y"
+#line 1260 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) -
(2)].argm)); ;}
break;
case 198:
-#line 1260 "pir.y"
+#line 1264 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 199:
-#line 1264 "pir.y"
+#line 1268 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ),
(yyvsp[(3) - (3)].targ)); ;}
break;
case 200:
-#line 1266 "pir.y"
+#line 1270 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
break;
case 201:
-#line 1269 "pir.y"
+#line 1273 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ),
(yyvsp[(5) - (5)].targ)); ;}
break;
case 202:
-#line 1273 "pir.y"
+#line 1277 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 203:
-#line 1275 "pir.y"
+#line 1279 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
break;
case 204:
-#line 1279 "pir.y"
+#line 1283 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 205:
-#line 1281 "pir.y"
+#line 1285 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 206:
-#line 1285 "pir.y"
+#line 1289 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 207:
-#line 1287 "pir.y"
+#line 1291 "pir.y"
{ (yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) -
(2)].targ)); ;}
break;
case 208:
-#line 1291 "pir.y"
+#line 1295 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
break;
case 209:
-#line 1293 "pir.y"
+#line 1297 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 211:
-#line 1301 "pir.y"
+#line 1305 "pir.y"
{ set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) -
(3)].targ)); ;}
break;
case 212:
-#line 1303 "pir.y"
+#line 1307 "pir.y"
{ set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) -
(3)].targ)); ;}
break;
case 213:
-#line 1305 "pir.y"
+#line 1309 "pir.y"
{ set_invocation_results((yyvsp[(1) - (1)].invo), NULL); ;}
break;
case 216:
-#line 1313 "pir.y"
+#line 1317 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_METHOD,
(yyvsp[(1) - (4)].targ), (yyvsp[(3) - (4)].targ));
set_invocation_args((yyval.invo), (yyvsp[(4) -
(4)].argm));
@@ -3431,7 +3435,7 @@
break;
case 217:
-#line 1320 "pir.y"
+#line 1324 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1)
- (2)].targ), NULL);
set_invocation_args((yyval.invo), (yyvsp[(2) -
(2)].argm));
@@ -3439,22 +3443,22 @@
break;
case 218:
-#line 1327 "pir.y"
+#line 1331 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 219:
-#line 1329 "pir.y"
+#line 1333 "pir.y"
{ (yyval.targ) = target_from_string((yyvsp[(1) - (1)].sval)); ;}
break;
case 222:
-#line 1337 "pir.y"
+#line 1341 "pir.y"
{ (yyval.targ) = target_from_ident(PMC_TYPE, (yyvsp[(1) - (1)].sval)); ;}
break;
case 223:
-#line 1339 "pir.y"
+#line 1343 "pir.y"
{ /* local identifiers */
if ((yyvsp[(1) - (1)].symb)->type != PMC_TYPE)
yyerror(yyscanner, lexer,
@@ -3465,82 +3469,82 @@
break;
case 224:
-#line 1347 "pir.y"
+#line 1351 "pir.y"
{ (yyval.targ) = reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 225:
-#line 1351 "pir.y"
+#line 1355 "pir.y"
{ (yyval.targ) = target_from_string((yyvsp[(1) - (1)].sval)); ;}
break;
case 226:
-#line 1353 "pir.y"
+#line 1357 "pir.y"
{ (yyval.targ) = reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 227:
-#line 1358 "pir.y"
+#line 1362 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
break;
case 228:
-#line 1362 "pir.y"
+#line 1366 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 229:
-#line 1364 "pir.y"
+#line 1368 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 230:
-#line 1368 "pir.y"
+#line 1372 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 231:
-#line 1370 "pir.y"
+#line 1374 "pir.y"
{ (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) -
(3)].targ)); ;}
break;
case 232:
-#line 1374 "pir.y"
+#line 1378 "pir.y"
{ (yyval.targ) = set_param_flag((yyvsp[(1) - (2)].targ), (yyvsp[(2) -
(2)].ival)); ;}
break;
case 233:
-#line 1378 "pir.y"
+#line 1382 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 234:
-#line 1380 "pir.y"
+#line 1384 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 235:
-#line 1384 "pir.y"
+#line 1388 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
break;
case 236:
-#line 1386 "pir.y"
+#line 1390 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
break;
case 237:
-#line 1388 "pir.y"
+#line 1392 "pir.y"
{ (yyval.ival) = TARGET_FLAG_SLURPY; ;}
break;
case 238:
-#line 1390 "pir.y"
+#line 1394 "pir.y"
{ (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
break;
case 239:
-#line 1392 "pir.y"
+#line 1396 "pir.y"
{
(yyval.ival) = TARGET_FLAG_NAMED;
set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -3548,7 +3552,7 @@
break;
case 244:
-#line 1410 "pir.y"
+#line 1414 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_RETURN);
set_invocation_args((yyval.invo), (yyvsp[(2) -
(3)].argm));
@@ -3556,7 +3560,7 @@
break;
case 245:
-#line 1415 "pir.y"
+#line 1419 "pir.y"
{ set_invocation_type((yyvsp[(2) - (3)].invo), ((yyvsp[(2) -
(3)].invo)->type == CALL_METHOD)
? CALL_METHOD_TAILCALL
: CALL_TAILCALL);
@@ -3564,7 +3568,7 @@
break;
case 246:
-#line 1422 "pir.y"
+#line 1426 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args((yyval.invo), (yyvsp[(2) -
(3)].argm));
@@ -3572,47 +3576,47 @@
break;
case 247:
-#line 1429 "pir.y"
+#line 1433 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 248:
-#line 1433 "pir.y"
+#line 1437 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 249:
-#line 1435 "pir.y"
+#line 1439 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 250:
-#line 1439 "pir.y"
+#line 1443 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 251:
-#line 1441 "pir.y"
+#line 1445 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) -
(3)].argm)); ;}
break;
case 254:
-#line 1449 "pir.y"
+#line 1453 "pir.y"
{ (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
break;
case 255:
-#line 1453 "pir.y"
+#line 1457 "pir.y"
{ (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
break;
case 256:
-#line 1457 "pir.y"
+#line 1461 "pir.y"
{ (yyval.argm) = set_curarg(lexer, new_argument((yyvsp[(1) - (1)].expr)));
;}
break;
case 257:
-#line 1463 "pir.y"
+#line 1467 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_RETURN);
set_invocation_args((yyval.invo), (yyvsp[(3) -
(5)].argm));
@@ -3620,7 +3624,7 @@
break;
case 258:
-#line 1472 "pir.y"
+#line 1476 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args((yyval.invo), (yyvsp[(3) -
(5)].argm));
@@ -3628,72 +3632,72 @@
break;
case 259:
-#line 1479 "pir.y"
+#line 1483 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 260:
-#line 1481 "pir.y"
+#line 1485 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 261:
-#line 1486 "pir.y"
+#line 1490 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 262:
-#line 1488 "pir.y"
+#line 1492 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) -
(2)].argm)); ;}
break;
case 263:
-#line 1493 "pir.y"
+#line 1497 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 264:
-#line 1497 "pir.y"
+#line 1501 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 265:
-#line 1499 "pir.y"
+#line 1503 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 266:
-#line 1503 "pir.y"
+#line 1507 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 267:
-#line 1505 "pir.y"
+#line 1509 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) -
(2)].argm)); ;}
break;
case 268:
-#line 1509 "pir.y"
+#line 1513 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 269:
-#line 1514 "pir.y"
+#line 1518 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 270:
-#line 1516 "pir.y"
+#line 1520 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 271:
-#line 1520 "pir.y"
+#line 1524 "pir.y"
{ (yyval.ival) = ARG_FLAG_FLAT; ;}
break;
case 272:
-#line 1522 "pir.y"
+#line 1526 "pir.y"
{
(yyval.ival) = ARG_FLAG_NAMED;
set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -3701,157 +3705,157 @@
break;
case 273:
-#line 1529 "pir.y"
+#line 1533 "pir.y"
{ (yyval.sval) = NULL; ;}
break;
case 274:
-#line 1531 "pir.y"
+#line 1535 "pir.y"
{ (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
break;
case 275:
-#line 1535 "pir.y"
+#line 1539 "pir.y"
{ (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
break;
case 279:
-#line 1546 "pir.y"
+#line 1550 "pir.y"
{ store_global_const(lexer, (yyvsp[(2) - (2)].cval)); ;}
break;
case 280:
-#line 1550 "pir.y"
+#line 1554 "pir.y"
{ /* XXX is .globalconst to be kept? */ ;}
break;
case 281:
-#line 1554 "pir.y"
+#line 1558 "pir.y"
{ (yyval.cval) = new_named_const(INT_TYPE, (yyvsp[(2) - (4)].sval),
(yyvsp[(4) - (4)].ival)); ;}
break;
case 282:
-#line 1556 "pir.y"
+#line 1560 "pir.y"
{ (yyval.cval) = new_named_const(NUM_TYPE, (yyvsp[(2) - (4)].sval),
(yyvsp[(4) - (4)].dval)); ;}
break;
case 283:
-#line 1558 "pir.y"
+#line 1562 "pir.y"
{ (yyval.cval) = new_named_const(STRING_TYPE, (yyvsp[(2) - (4)].sval),
(yyvsp[(4) - (4)].sval)); ;}
break;
case 284:
-#line 1560 "pir.y"
+#line 1564 "pir.y"
{ (yyval.cval) = new_named_const(PMC_TYPE, (yyvsp[(2) - (4)].sval),
(yyvsp[(4) - (4)].sval)); ;}
break;
case 285:
-#line 1577 "pir.y"
+#line 1581 "pir.y"
{ (yyval.expr) = expr_from_target((yyvsp[(1) - (1)].targ)); ;}
break;
case 286:
-#line 1578 "pir.y"
+#line 1582 "pir.y"
{ (yyval.expr) = expr_from_const((yyvsp[(1) - (1)].cval)); ;}
break;
case 287:
-#line 1581 "pir.y"
+#line 1585 "pir.y"
{ (yyval.cval) = new_const(STRING_TYPE, (yyvsp[(1) - (1)].sval)); ;}
break;
case 288:
-#line 1582 "pir.y"
+#line 1586 "pir.y"
{ (yyval.cval) = new_const(INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 289:
-#line 1583 "pir.y"
+#line 1587 "pir.y"
{ (yyval.cval) = new_const(NUM_TYPE, (yyvsp[(1) - (1)].dval)); ;}
break;
case 290:
-#line 1586 "pir.y"
+#line 1590 "pir.y"
{ (yyval.ival) = OP_NE; ;}
break;
case 291:
-#line 1587 "pir.y"
+#line 1591 "pir.y"
{ (yyval.ival) = OP_EQ; ;}
break;
case 292:
-#line 1588 "pir.y"
+#line 1592 "pir.y"
{ (yyval.ival) = OP_LT; ;}
break;
case 293:
-#line 1589 "pir.y"
+#line 1593 "pir.y"
{ (yyval.ival) = OP_LE; ;}
break;
case 294:
-#line 1590 "pir.y"
+#line 1594 "pir.y"
{ (yyval.ival) = OP_GE; ;}
break;
case 295:
-#line 1591 "pir.y"
+#line 1595 "pir.y"
{ (yyval.ival) = OP_GT; ;}
break;
case 296:
-#line 1594 "pir.y"
+#line 1598 "pir.y"
{ (yyval.ival) = INT_TYPE; ;}
break;
case 297:
-#line 1595 "pir.y"
+#line 1599 "pir.y"
{ (yyval.ival) = NUM_TYPE; ;}
break;
case 298:
-#line 1596 "pir.y"
+#line 1600 "pir.y"
{ (yyval.ival) = PMC_TYPE; ;}
break;
case 299:
-#line 1597 "pir.y"
+#line 1601 "pir.y"
{ (yyval.ival) = STRING_TYPE; ;}
break;
case 300:
-#line 1605 "pir.y"
+#line 1609 "pir.y"
{ set_curtarget(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 301:
-#line 1608 "pir.y"
+#line 1612 "pir.y"
{ (yyval.targ) = reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 302:
-#line 1609 "pir.y"
+#line 1613 "pir.y"
{ (yyval.targ) = reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 303:
-#line 1610 "pir.y"
+#line 1614 "pir.y"
{ (yyval.targ) = reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 304:
-#line 1611 "pir.y"
+#line 1615 "pir.y"
{ (yyval.targ) = reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 305:
-#line 1612 "pir.y"
+#line 1616 "pir.y"
{ (yyval.targ) = target_from_symbol((yyvsp[(1) - (1)].symb)); ;}
break;
case 306:
-#line 1613 "pir.y"
+#line 1617 "pir.y"
{ /*
* if an TK_IDENT was returned, that means the ID
was not
* declared; emit an error.
@@ -3863,208 +3867,208 @@
break;
case 309:
-#line 1627 "pir.y"
+#line 1631 "pir.y"
{ (yyval.sval) = "neg"; ;}
break;
case 310:
-#line 1628 "pir.y"
+#line 1632 "pir.y"
{ (yyval.sval) = "not"; ;}
break;
case 311:
-#line 1629 "pir.y"
+#line 1633 "pir.y"
{ (yyval.sval) = "bnot"; ;}
break;
case 312:
-#line 1632 "pir.y"
+#line 1636 "pir.y"
{ (yyval.ival) = OP_ADD; ;}
break;
case 313:
-#line 1633 "pir.y"
+#line 1637 "pir.y"
{ (yyval.ival) = OP_SUB; ;}
break;
case 314:
-#line 1634 "pir.y"
+#line 1638 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 315:
-#line 1635 "pir.y"
+#line 1639 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 316:
-#line 1636 "pir.y"
+#line 1640 "pir.y"
{ (yyval.ival) = OP_MOD; ;}
break;
case 317:
-#line 1637 "pir.y"
+#line 1641 "pir.y"
{ (yyval.ival) = OP_BOR; ;}
break;
case 318:
-#line 1638 "pir.y"
+#line 1642 "pir.y"
{ (yyval.ival) = OP_BAND; ;}
break;
case 319:
-#line 1639 "pir.y"
+#line 1643 "pir.y"
{ (yyval.ival) = OP_BXOR; ;}
break;
case 320:
-#line 1640 "pir.y"
+#line 1644 "pir.y"
{ (yyval.ival) = OP_POW; ;}
break;
case 321:
-#line 1641 "pir.y"
+#line 1645 "pir.y"
{ (yyval.ival) = OP_CONCAT; ;}
break;
case 322:
-#line 1642 "pir.y"
+#line 1646 "pir.y"
{ (yyval.ival) = OP_LSR; ;}
break;
case 323:
-#line 1643 "pir.y"
+#line 1647 "pir.y"
{ (yyval.ival) = OP_SHR; ;}
break;
case 324:
-#line 1644 "pir.y"
+#line 1648 "pir.y"
{ (yyval.ival) = OP_SHL; ;}
break;
case 325:
-#line 1645 "pir.y"
+#line 1649 "pir.y"
{ (yyval.ival) = OP_OR; ;}
break;
case 326:
-#line 1646 "pir.y"
+#line 1650 "pir.y"
{ (yyval.ival) = OP_AND; ;}
break;
case 327:
-#line 1647 "pir.y"
+#line 1651 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 328:
-#line 1648 "pir.y"
+#line 1652 "pir.y"
{ (yyval.ival) = OP_XOR; ;}
break;
case 329:
-#line 1649 "pir.y"
+#line 1653 "pir.y"
{ (yyval.ival) = OP_ISEQ; ;}
break;
case 330:
-#line 1650 "pir.y"
+#line 1654 "pir.y"
{ (yyval.ival) = OP_ISLE; ;}
break;
case 331:
-#line 1651 "pir.y"
+#line 1655 "pir.y"
{ (yyval.ival) = OP_ISLT; ;}
break;
case 332:
-#line 1652 "pir.y"
+#line 1656 "pir.y"
{ (yyval.ival) = OP_ISGE; ;}
break;
case 333:
-#line 1653 "pir.y"
+#line 1657 "pir.y"
{ (yyval.ival) = OP_ISGT; ;}
break;
case 334:
-#line 1654 "pir.y"
+#line 1658 "pir.y"
{ (yyval.ival) = OP_ISNE; ;}
break;
case 335:
-#line 1660 "pir.y"
+#line 1664 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 336:
-#line 1661 "pir.y"
+#line 1665 "pir.y"
{ (yyval.ival) = OP_MOD; ;}
break;
case 337:
-#line 1662 "pir.y"
+#line 1666 "pir.y"
{ (yyval.ival) = OP_POW; ;}
break;
case 338:
-#line 1663 "pir.y"
+#line 1667 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 339:
-#line 1664 "pir.y"
+#line 1668 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 340:
-#line 1665 "pir.y"
+#line 1669 "pir.y"
{ (yyval.ival) = OP_BOR; ;}
break;
case 341:
-#line 1666 "pir.y"
+#line 1670 "pir.y"
{ (yyval.ival) = OP_BAND; ;}
break;
case 342:
-#line 1667 "pir.y"
+#line 1671 "pir.y"
{ (yyval.ival) = OP_BXOR; ;}
break;
case 343:
-#line 1668 "pir.y"
+#line 1672 "pir.y"
{ (yyval.ival) = OP_CONCAT; ;}
break;
case 344:
-#line 1669 "pir.y"
+#line 1673 "pir.y"
{ (yyval.ival) = OP_SHR; ;}
break;
case 345:
-#line 1670 "pir.y"
+#line 1674 "pir.y"
{ (yyval.ival) = OP_SHL; ;}
break;
case 346:
-#line 1671 "pir.y"
+#line 1675 "pir.y"
{ (yyval.ival) = OP_LSR; ;}
break;
case 347:
-#line 1674 "pir.y"
+#line 1678 "pir.y"
{ (yyval.ival) = OP_ADD; ;}
break;
case 348:
-#line 1675 "pir.y"
+#line 1679 "pir.y"
{ (yyval.ival) = OP_SUB; ;}
break;
/* Line 1267 of yacc.c. */
-#line 4068 "pirparser.c"
+#line 4072 "pirparser.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4278,7 +4282,7 @@
}
-#line 1678 "pir.y"
+#line 1682 "pir.y"
#include <math.h>