summaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2012-02-11 00:34:01 -0500
committerRuss Cox <rsc@golang.org>2012-02-11 00:34:01 -0500
commita580fc8a366d05de476350d13a5e06627d7e5c28 (patch)
treee0ec02925907098e0f0f8f6ff9139ffbffa23987 /src/cmd
parentff0d9d70193930ebf585eabdd485ece2a0e5c08e (diff)
downloadgo-a580fc8a366d05de476350d13a5e06627d7e5c28.tar.gz
gc: fix import of struct type in struct literal
Fixes issue 2716. R=ken2 CC=golang-dev http://codereview.appspot.com/5652065
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/gc/go.y18
-rw-r--r--src/cmd/gc/y.tab.c342
2 files changed, 196 insertions, 164 deletions
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index 0561f2bdf..ccbb90f47 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -987,7 +987,10 @@ lbrace:
new_name:
sym
{
- $$ = newname($1);
+ if($1 == S)
+ $$ = N;
+ else
+ $$ = newname($1);
}
dcl_name:
@@ -1418,6 +1421,19 @@ structdcl:
{
NodeList *l;
+ Node *n;
+ if(l != nil && l->next == nil && l->n == nil) {
+ // ? symbol, during import
+ n = $2;
+ if(n->op == OIND)
+ n = n->left;
+ n = embedded(n->sym);
+ n->right = $2;
+ n->val = $3;
+ $$ = list1(n);
+ break;
+ }
+
for(l=$1; l; l=l->next) {
l->n = nod(ODCLFIELD, l->n, $2);
l->n->val = $3;
diff --git a/src/cmd/gc/y.tab.c b/src/cmd/gc/y.tab.c
index b7f7fa96d..d2aaa0504 100644
--- a/src/cmd/gc/y.tab.c
+++ b/src/cmd/gc/y.tab.c
@@ -683,27 +683,27 @@ static const yytype_uint16 yyrline[] =
800, 801, 805, 816, 820, 824, 828, 833, 837, 847,
851, 856, 864, 868, 869, 880, 884, 888, 892, 896,
897, 903, 910, 916, 923, 926, 933, 939, 940, 947,
- 948, 966, 967, 970, 973, 977, 988, 994, 1000, 1003,
- 1006, 1013, 1014, 1020, 1029, 1037, 1049, 1054, 1060, 1061,
- 1062, 1063, 1064, 1065, 1071, 1072, 1073, 1074, 1080, 1081,
- 1082, 1083, 1084, 1090, 1091, 1094, 1097, 1098, 1099, 1100,
- 1101, 1104, 1105, 1118, 1122, 1127, 1132, 1137, 1141, 1142,
- 1145, 1151, 1158, 1164, 1171, 1177, 1188, 1199, 1228, 1267,
- 1290, 1307, 1316, 1319, 1327, 1331, 1335, 1342, 1348, 1353,
- 1365, 1368, 1376, 1377, 1383, 1384, 1390, 1394, 1400, 1401,
- 1407, 1411, 1417, 1426, 1431, 1437, 1443, 1450, 1459, 1468,
- 1483, 1489, 1494, 1498, 1505, 1518, 1519, 1525, 1531, 1534,
- 1538, 1544, 1547, 1556, 1559, 1560, 1564, 1565, 1571, 1572,
- 1573, 1574, 1575, 1577, 1576, 1591, 1596, 1600, 1604, 1608,
- 1612, 1617, 1636, 1642, 1650, 1654, 1660, 1664, 1670, 1674,
- 1680, 1684, 1693, 1697, 1701, 1705, 1711, 1714, 1722, 1723,
- 1725, 1726, 1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750,
- 1753, 1756, 1759, 1762, 1765, 1768, 1774, 1778, 1782, 1786,
- 1790, 1794, 1812, 1819, 1830, 1831, 1832, 1835, 1836, 1839,
- 1843, 1853, 1857, 1861, 1865, 1869, 1873, 1877, 1883, 1889,
- 1897, 1905, 1911, 1918, 1934, 1952, 1956, 1962, 1965, 1968,
- 1972, 1982, 1986, 2001, 2009, 2010, 2020, 2021, 2024, 2028,
- 2034, 2038, 2044, 2048
+ 948, 966, 967, 970, 973, 977, 988, 997, 1003, 1006,
+ 1009, 1016, 1017, 1023, 1032, 1040, 1052, 1057, 1063, 1064,
+ 1065, 1066, 1067, 1068, 1074, 1075, 1076, 1077, 1083, 1084,
+ 1085, 1086, 1087, 1093, 1094, 1097, 1100, 1101, 1102, 1103,
+ 1104, 1107, 1108, 1121, 1125, 1130, 1135, 1140, 1144, 1145,
+ 1148, 1154, 1161, 1167, 1174, 1180, 1191, 1202, 1231, 1270,
+ 1293, 1310, 1319, 1322, 1330, 1334, 1338, 1345, 1351, 1356,
+ 1368, 1371, 1379, 1380, 1386, 1387, 1393, 1397, 1403, 1404,
+ 1410, 1414, 1420, 1442, 1447, 1453, 1459, 1466, 1475, 1484,
+ 1499, 1505, 1510, 1514, 1521, 1534, 1535, 1541, 1547, 1550,
+ 1554, 1560, 1563, 1572, 1575, 1576, 1580, 1581, 1587, 1588,
+ 1589, 1590, 1591, 1593, 1592, 1607, 1612, 1616, 1620, 1624,
+ 1628, 1633, 1652, 1658, 1666, 1670, 1676, 1680, 1686, 1690,
+ 1696, 1700, 1709, 1713, 1717, 1721, 1727, 1730, 1738, 1739,
+ 1741, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766,
+ 1769, 1772, 1775, 1778, 1781, 1784, 1790, 1794, 1798, 1802,
+ 1806, 1810, 1828, 1835, 1846, 1847, 1848, 1851, 1852, 1855,
+ 1859, 1869, 1873, 1877, 1881, 1885, 1889, 1893, 1899, 1905,
+ 1913, 1921, 1927, 1934, 1950, 1968, 1972, 1978, 1981, 1984,
+ 1988, 1998, 2002, 2017, 2025, 2026, 2036, 2037, 2040, 2044,
+ 2050, 2054, 2060, 2064
};
#endif
@@ -3713,14 +3713,17 @@ yyreduce:
/* Line 1455 of yacc.c */
#line 989 "go.y"
{
- (yyval.node) = newname((yyvsp[(1) - (1)].sym));
+ if((yyvsp[(1) - (1)].sym) == S)
+ (yyval.node) = N;
+ else
+ (yyval.node) = newname((yyvsp[(1) - (1)].sym));
}
break;
case 147:
/* Line 1455 of yacc.c */
-#line 995 "go.y"
+#line 998 "go.y"
{
(yyval.node) = dclname((yyvsp[(1) - (1)].sym));
}
@@ -3729,7 +3732,7 @@ yyreduce:
case 148:
/* Line 1455 of yacc.c */
-#line 1000 "go.y"
+#line 1003 "go.y"
{
(yyval.node) = N;
}
@@ -3738,7 +3741,7 @@ yyreduce:
case 150:
/* Line 1455 of yacc.c */
-#line 1007 "go.y"
+#line 1010 "go.y"
{
(yyval.sym) = (yyvsp[(1) - (1)].sym);
// during imports, unqualified non-exported identifiers are from builtinpkg
@@ -3750,7 +3753,7 @@ yyreduce:
case 152:
/* Line 1455 of yacc.c */
-#line 1015 "go.y"
+#line 1018 "go.y"
{
(yyval.sym) = S;
}
@@ -3759,7 +3762,7 @@ yyreduce:
case 153:
/* Line 1455 of yacc.c */
-#line 1021 "go.y"
+#line 1024 "go.y"
{
if((yyvsp[(2) - (4)].val).u.sval->len == 0)
(yyval.sym) = pkglookup((yyvsp[(4) - (4)].sym)->name, importpkg);
@@ -3771,7 +3774,7 @@ yyreduce:
case 154:
/* Line 1455 of yacc.c */
-#line 1030 "go.y"
+#line 1033 "go.y"
{
(yyval.node) = oldname((yyvsp[(1) - (1)].sym));
if((yyval.node)->pack != N)
@@ -3782,7 +3785,7 @@ yyreduce:
case 156:
/* Line 1455 of yacc.c */
-#line 1050 "go.y"
+#line 1053 "go.y"
{
yyerror("final argument in variadic function missing type");
(yyval.node) = nod(ODDD, typenod(typ(TINTER)), N);
@@ -3792,7 +3795,7 @@ yyreduce:
case 157:
/* Line 1455 of yacc.c */
-#line 1055 "go.y"
+#line 1058 "go.y"
{
(yyval.node) = nod(ODDD, (yyvsp[(2) - (2)].node), N);
}
@@ -3801,7 +3804,7 @@ yyreduce:
case 163:
/* Line 1455 of yacc.c */
-#line 1066 "go.y"
+#line 1069 "go.y"
{
(yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N);
}
@@ -3810,7 +3813,7 @@ yyreduce:
case 167:
/* Line 1455 of yacc.c */
-#line 1075 "go.y"
+#line 1078 "go.y"
{
(yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
}
@@ -3819,7 +3822,7 @@ yyreduce:
case 172:
/* Line 1455 of yacc.c */
-#line 1085 "go.y"
+#line 1088 "go.y"
{
(yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N);
}
@@ -3828,7 +3831,7 @@ yyreduce:
case 182:
/* Line 1455 of yacc.c */
-#line 1106 "go.y"
+#line 1109 "go.y"
{
if((yyvsp[(1) - (3)].node)->op == OPACK) {
Sym *s;
@@ -3844,7 +3847,7 @@ yyreduce:
case 183:
/* Line 1455 of yacc.c */
-#line 1119 "go.y"
+#line 1122 "go.y"
{
(yyval.node) = nod(OTARRAY, (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
}
@@ -3853,7 +3856,7 @@ yyreduce:
case 184:
/* Line 1455 of yacc.c */
-#line 1123 "go.y"
+#line 1126 "go.y"
{
// array literal of nelem
(yyval.node) = nod(OTARRAY, nod(ODDD, N, N), (yyvsp[(4) - (4)].node));
@@ -3863,7 +3866,7 @@ yyreduce:
case 185:
/* Line 1455 of yacc.c */
-#line 1128 "go.y"
+#line 1131 "go.y"
{
(yyval.node) = nod(OTCHAN, (yyvsp[(2) - (2)].node), N);
(yyval.node)->etype = Cboth;
@@ -3873,7 +3876,7 @@ yyreduce:
case 186:
/* Line 1455 of yacc.c */
-#line 1133 "go.y"
+#line 1136 "go.y"
{
(yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
(yyval.node)->etype = Csend;
@@ -3883,7 +3886,7 @@ yyreduce:
case 187:
/* Line 1455 of yacc.c */
-#line 1138 "go.y"
+#line 1141 "go.y"
{
(yyval.node) = nod(OTMAP, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
}
@@ -3892,7 +3895,7 @@ yyreduce:
case 190:
/* Line 1455 of yacc.c */
-#line 1146 "go.y"
+#line 1149 "go.y"
{
(yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
}
@@ -3901,7 +3904,7 @@ yyreduce:
case 191:
/* Line 1455 of yacc.c */
-#line 1152 "go.y"
+#line 1155 "go.y"
{
(yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
(yyval.node)->etype = Crecv;
@@ -3911,7 +3914,7 @@ yyreduce:
case 192:
/* Line 1455 of yacc.c */
-#line 1159 "go.y"
+#line 1162 "go.y"
{
(yyval.node) = nod(OTSTRUCT, N, N);
(yyval.node)->list = (yyvsp[(3) - (5)].list);
@@ -3922,7 +3925,7 @@ yyreduce:
case 193:
/* Line 1455 of yacc.c */
-#line 1165 "go.y"
+#line 1168 "go.y"
{
(yyval.node) = nod(OTSTRUCT, N, N);
fixlbrace((yyvsp[(2) - (3)].i));
@@ -3932,7 +3935,7 @@ yyreduce:
case 194:
/* Line 1455 of yacc.c */
-#line 1172 "go.y"
+#line 1175 "go.y"
{
(yyval.node) = nod(OTINTER, N, N);
(yyval.node)->list = (yyvsp[(3) - (5)].list);
@@ -3943,7 +3946,7 @@ yyreduce:
case 195:
/* Line 1455 of yacc.c */
-#line 1178 "go.y"
+#line 1181 "go.y"
{
(yyval.node) = nod(OTINTER, N, N);
fixlbrace((yyvsp[(2) - (3)].i));
@@ -3953,7 +3956,7 @@ yyreduce:
case 196:
/* Line 1455 of yacc.c */
-#line 1189 "go.y"
+#line 1192 "go.y"
{
(yyval.node) = (yyvsp[(2) - (3)].node);
if((yyval.node) == N)
@@ -3967,7 +3970,7 @@ yyreduce:
case 197:
/* Line 1455 of yacc.c */
-#line 1200 "go.y"
+#line 1203 "go.y"
{
Node *t;
@@ -4001,7 +4004,7 @@ yyreduce:
case 198:
/* Line 1455 of yacc.c */
-#line 1229 "go.y"
+#line 1232 "go.y"
{
Node *rcvr, *t;
@@ -4043,7 +4046,7 @@ yyreduce:
case 199:
/* Line 1455 of yacc.c */
-#line 1268 "go.y"
+#line 1271 "go.y"
{
Sym *s;
Type *t;
@@ -4071,7 +4074,7 @@ yyreduce:
case 200:
/* Line 1455 of yacc.c */
-#line 1291 "go.y"
+#line 1294 "go.y"
{
(yyval.node) = methodname1(newname((yyvsp[(4) - (8)].sym)), (yyvsp[(2) - (8)].list)->n->right);
(yyval.node)->type = functype((yyvsp[(2) - (8)].list)->n, (yyvsp[(6) - (8)].list), (yyvsp[(8) - (8)].list));
@@ -4091,7 +4094,7 @@ yyreduce:
case 201:
/* Line 1455 of yacc.c */
-#line 1308 "go.y"
+#line 1311 "go.y"
{
(yyvsp[(3) - (5)].list) = checkarglist((yyvsp[(3) - (5)].list), 1);
(yyval.node) = nod(OTFUNC, N, N);
@@ -4103,7 +4106,7 @@ yyreduce:
case 202:
/* Line 1455 of yacc.c */
-#line 1316 "go.y"
+#line 1319 "go.y"
{
(yyval.list) = nil;
}
@@ -4112,7 +4115,7 @@ yyreduce:
case 203:
/* Line 1455 of yacc.c */
-#line 1320 "go.y"
+#line 1323 "go.y"
{
(yyval.list) = (yyvsp[(2) - (3)].list);
if((yyval.list) == nil)
@@ -4123,7 +4126,7 @@ yyreduce:
case 204:
/* Line 1455 of yacc.c */
-#line 1328 "go.y"
+#line 1331 "go.y"
{
(yyval.list) = nil;
}
@@ -4132,7 +4135,7 @@ yyreduce:
case 205:
/* Line 1455 of yacc.c */
-#line 1332 "go.y"
+#line 1335 "go.y"
{
(yyval.list) = list1(nod(ODCLFIELD, N, (yyvsp[(1) - (1)].node)));
}
@@ -4141,7 +4144,7 @@ yyreduce:
case 206:
/* Line 1455 of yacc.c */
-#line 1336 "go.y"
+#line 1339 "go.y"
{
(yyvsp[(2) - (3)].list) = checkarglist((yyvsp[(2) - (3)].list), 0);
(yyval.list) = (yyvsp[(2) - (3)].list);
@@ -4151,7 +4154,7 @@ yyreduce:
case 207:
/* Line 1455 of yacc.c */
-#line 1343 "go.y"
+#line 1346 "go.y"
{
closurehdr((yyvsp[(1) - (1)].node));
}
@@ -4160,7 +4163,7 @@ yyreduce:
case 208:
/* Line 1455 of yacc.c */
-#line 1349 "go.y"
+#line 1352 "go.y"
{
(yyval.node) = closurebody((yyvsp[(3) - (4)].list));
fixlbrace((yyvsp[(2) - (4)].i));
@@ -4170,7 +4173,7 @@ yyreduce:
case 209:
/* Line 1455 of yacc.c */
-#line 1354 "go.y"
+#line 1357 "go.y"
{
(yyval.node) = closurebody(nil);
}
@@ -4179,7 +4182,7 @@ yyreduce:
case 210:
/* Line 1455 of yacc.c */
-#line 1365 "go.y"
+#line 1368 "go.y"
{
(yyval.list) = nil;
}
@@ -4188,7 +4191,7 @@ yyreduce:
case 211:
/* Line 1455 of yacc.c */
-#line 1369 "go.y"
+#line 1372 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list));
if(nsyntaxerrors == 0)
@@ -4199,7 +4202,7 @@ yyreduce:
case 213:
/* Line 1455 of yacc.c */
-#line 1378 "go.y"
+#line 1381 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
}
@@ -4208,7 +4211,7 @@ yyreduce:
case 215:
/* Line 1455 of yacc.c */
-#line 1385 "go.y"
+#line 1388 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
}
@@ -4217,7 +4220,7 @@ yyreduce:
case 216:
/* Line 1455 of yacc.c */
-#line 1391 "go.y"
+#line 1394 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4226,7 +4229,7 @@ yyreduce:
case 217:
/* Line 1455 of yacc.c */
-#line 1395 "go.y"
+#line 1398 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4235,7 +4238,7 @@ yyreduce:
case 219:
/* Line 1455 of yacc.c */
-#line 1402 "go.y"
+#line 1405 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
}
@@ -4244,7 +4247,7 @@ yyreduce:
case 220:
/* Line 1455 of yacc.c */
-#line 1408 "go.y"
+#line 1411 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4253,7 +4256,7 @@ yyreduce:
case 221:
/* Line 1455 of yacc.c */
-#line 1412 "go.y"
+#line 1415 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4262,10 +4265,23 @@ yyreduce:
case 222:
/* Line 1455 of yacc.c */
-#line 1418 "go.y"
+#line 1421 "go.y"
{
NodeList *l;
+ Node *n;
+ if(l != nil && l->next == nil && l->n == nil) {
+ // ? symbol, during import
+ n = (yyvsp[(2) - (3)].node);
+ if(n->op == OIND)
+ n = n->left;
+ n = embedded(n->sym);
+ n->right = (yyvsp[(2) - (3)].node);
+ n->val = (yyvsp[(3) - (3)].val);
+ (yyval.list) = list1(n);
+ break;
+ }
+
for(l=(yyvsp[(1) - (3)].list); l; l=l->next) {
l->n = nod(ODCLFIELD, l->n, (yyvsp[(2) - (3)].node));
l->n->val = (yyvsp[(3) - (3)].val);
@@ -4276,7 +4292,7 @@ yyreduce:
case 223:
/* Line 1455 of yacc.c */
-#line 1427 "go.y"
+#line 1443 "go.y"
{
(yyvsp[(1) - (2)].node)->val = (yyvsp[(2) - (2)].val);
(yyval.list) = list1((yyvsp[(1) - (2)].node));
@@ -4286,7 +4302,7 @@ yyreduce:
case 224:
/* Line 1455 of yacc.c */
-#line 1432 "go.y"
+#line 1448 "go.y"
{
(yyvsp[(2) - (4)].node)->val = (yyvsp[(4) - (4)].val);
(yyval.list) = list1((yyvsp[(2) - (4)].node));
@@ -4297,7 +4313,7 @@ yyreduce:
case 225:
/* Line 1455 of yacc.c */
-#line 1438 "go.y"
+#line 1454 "go.y"
{
(yyvsp[(2) - (3)].node)->right = nod(OIND, (yyvsp[(2) - (3)].node)->right, N);
(yyvsp[(2) - (3)].node)->val = (yyvsp[(3) - (3)].val);
@@ -4308,7 +4324,7 @@ yyreduce:
case 226:
/* Line 1455 of yacc.c */
-#line 1444 "go.y"
+#line 1460 "go.y"
{
(yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
(yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
@@ -4320,7 +4336,7 @@ yyreduce:
case 227:
/* Line 1455 of yacc.c */
-#line 1451 "go.y"
+#line 1467 "go.y"
{
(yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
(yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
@@ -4332,7 +4348,7 @@ yyreduce:
case 228:
/* Line 1455 of yacc.c */
-#line 1460 "go.y"
+#line 1476 "go.y"
{
Node *n;
@@ -4346,7 +4362,7 @@ yyreduce:
case 229:
/* Line 1455 of yacc.c */
-#line 1469 "go.y"
+#line 1485 "go.y"
{
Pkg *pkg;
@@ -4364,7 +4380,7 @@ yyreduce:
case 230:
/* Line 1455 of yacc.c */
-#line 1484 "go.y"
+#line 1500 "go.y"
{
(yyval.node) = embedded((yyvsp[(1) - (1)].sym));
}
@@ -4373,7 +4389,7 @@ yyreduce:
case 231:
/* Line 1455 of yacc.c */
-#line 1490 "go.y"
+#line 1506 "go.y"
{
(yyval.node) = nod(ODCLFIELD, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
ifacedcl((yyval.node));
@@ -4383,7 +4399,7 @@ yyreduce:
case 232:
/* Line 1455 of yacc.c */
-#line 1495 "go.y"
+#line 1511 "go.y"
{
(yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(1) - (1)].sym)));
}
@@ -4392,7 +4408,7 @@ yyreduce:
case 233:
/* Line 1455 of yacc.c */
-#line 1499 "go.y"
+#line 1515 "go.y"
{
(yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(2) - (3)].sym)));
yyerror("cannot parenthesize embedded type");
@@ -4402,7 +4418,7 @@ yyreduce:
case 234:
/* Line 1455 of yacc.c */
-#line 1506 "go.y"
+#line 1522 "go.y"
{
// without func keyword
(yyvsp[(2) - (4)].list) = checkarglist((yyvsp[(2) - (4)].list), 1);
@@ -4415,7 +4431,7 @@ yyreduce:
case 236:
/* Line 1455 of yacc.c */
-#line 1520 "go.y"
+#line 1536 "go.y"
{
(yyval.node) = nod(ONONAME, N, N);
(yyval.node)->sym = (yyvsp[(1) - (2)].sym);
@@ -4426,7 +4442,7 @@ yyreduce:
case 237:
/* Line 1455 of yacc.c */
-#line 1526 "go.y"
+#line 1542 "go.y"
{
(yyval.node) = nod(ONONAME, N, N);
(yyval.node)->sym = (yyvsp[(1) - (2)].sym);
@@ -4437,7 +4453,7 @@ yyreduce:
case 239:
/* Line 1455 of yacc.c */
-#line 1535 "go.y"
+#line 1551 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4446,7 +4462,7 @@ yyreduce:
case 240:
/* Line 1455 of yacc.c */
-#line 1539 "go.y"
+#line 1555 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4455,7 +4471,7 @@ yyreduce:
case 241:
/* Line 1455 of yacc.c */
-#line 1544 "go.y"
+#line 1560 "go.y"
{
(yyval.list) = nil;
}
@@ -4464,7 +4480,7 @@ yyreduce:
case 242:
/* Line 1455 of yacc.c */
-#line 1548 "go.y"
+#line 1564 "go.y"
{
(yyval.list) = (yyvsp[(1) - (2)].list);
}
@@ -4473,7 +4489,7 @@ yyreduce:
case 243:
/* Line 1455 of yacc.c */
-#line 1556 "go.y"
+#line 1572 "go.y"
{
(yyval.node) = N;
}
@@ -4482,7 +4498,7 @@ yyreduce:
case 245:
/* Line 1455 of yacc.c */
-#line 1561 "go.y"
+#line 1577 "go.y"
{
(yyval.node) = liststmt((yyvsp[(1) - (1)].list));
}
@@ -4491,7 +4507,7 @@ yyreduce:
case 247:
/* Line 1455 of yacc.c */
-#line 1566 "go.y"
+#line 1582 "go.y"
{
(yyval.node) = N;
}
@@ -4500,7 +4516,7 @@ yyreduce:
case 253:
/* Line 1455 of yacc.c */
-#line 1577 "go.y"
+#line 1593 "go.y"
{
(yyvsp[(1) - (2)].node) = nod(OLABEL, (yyvsp[(1) - (2)].node), N);
(yyvsp[(1) - (2)].node)->sym = dclstack; // context, for goto restrictions
@@ -4510,7 +4526,7 @@ yyreduce:
case 254:
/* Line 1455 of yacc.c */
-#line 1582 "go.y"
+#line 1598 "go.y"
{
NodeList *l;
@@ -4525,7 +4541,7 @@ yyreduce:
case 255:
/* Line 1455 of yacc.c */
-#line 1592 "go.y"
+#line 1608 "go.y"
{
// will be converted to OFALL
(yyval.node) = nod(OXFALL, N, N);
@@ -4535,7 +4551,7 @@ yyreduce:
case 256:
/* Line 1455 of yacc.c */
-#line 1597 "go.y"
+#line 1613 "go.y"
{
(yyval.node) = nod(OBREAK, (yyvsp[(2) - (2)].node), N);
}
@@ -4544,7 +4560,7 @@ yyreduce:
case 257:
/* Line 1455 of yacc.c */
-#line 1601 "go.y"
+#line 1617 "go.y"
{
(yyval.node) = nod(OCONTINUE, (yyvsp[(2) - (2)].node), N);
}
@@ -4553,7 +4569,7 @@ yyreduce:
case 258:
/* Line 1455 of yacc.c */
-#line 1605 "go.y"
+#line 1621 "go.y"
{
(yyval.node) = nod(OPROC, (yyvsp[(2) - (2)].node), N);
}
@@ -4562,7 +4578,7 @@ yyreduce:
case 259:
/* Line 1455 of yacc.c */
-#line 1609 "go.y"
+#line 1625 "go.y"
{
(yyval.node) = nod(ODEFER, (yyvsp[(2) - (2)].node), N);
}
@@ -4571,7 +4587,7 @@ yyreduce:
case 260:
/* Line 1455 of yacc.c */
-#line 1613 "go.y"
+#line 1629 "go.y"
{
(yyval.node) = nod(OGOTO, (yyvsp[(2) - (2)].node), N);
(yyval.node)->sym = dclstack; // context, for goto restrictions
@@ -4581,7 +4597,7 @@ yyreduce:
case 261:
/* Line 1455 of yacc.c */
-#line 1618 "go.y"
+#line 1634 "go.y"
{
(yyval.node) = nod(ORETURN, N, N);
(yyval.node)->list = (yyvsp[(2) - (2)].list);
@@ -4603,7 +4619,7 @@ yyreduce:
case 262:
/* Line 1455 of yacc.c */
-#line 1637 "go.y"
+#line 1653 "go.y"
{
(yyval.list) = nil;
if((yyvsp[(1) - (1)].node) != N)
@@ -4614,7 +4630,7 @@ yyreduce:
case 263:
/* Line 1455 of yacc.c */
-#line 1643 "go.y"
+#line 1659 "go.y"
{
(yyval.list) = (yyvsp[(1) - (3)].list);
if((yyvsp[(3) - (3)].node) != N)
@@ -4625,7 +4641,7 @@ yyreduce:
case 264:
/* Line 1455 of yacc.c */
-#line 1651 "go.y"
+#line 1667 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4634,7 +4650,7 @@ yyreduce:
case 265:
/* Line 1455 of yacc.c */
-#line 1655 "go.y"
+#line 1671 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4643,7 +4659,7 @@ yyreduce:
case 266:
/* Line 1455 of yacc.c */
-#line 1661 "go.y"
+#line 1677 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4652,7 +4668,7 @@ yyreduce:
case 267:
/* Line 1455 of yacc.c */
-#line 1665 "go.y"
+#line 1681 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4661,7 +4677,7 @@ yyreduce:
case 268:
/* Line 1455 of yacc.c */
-#line 1671 "go.y"
+#line 1687 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4670,7 +4686,7 @@ yyreduce:
case 269:
/* Line 1455 of yacc.c */
-#line 1675 "go.y"
+#line 1691 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4679,7 +4695,7 @@ yyreduce:
case 270:
/* Line 1455 of yacc.c */
-#line 1681 "go.y"
+#line 1697 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4688,7 +4704,7 @@ yyreduce:
case 271:
/* Line 1455 of yacc.c */
-#line 1685 "go.y"
+#line 1701 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4697,7 +4713,7 @@ yyreduce:
case 272:
/* Line 1455 of yacc.c */
-#line 1694 "go.y"
+#line 1710 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4706,7 +4722,7 @@ yyreduce:
case 273:
/* Line 1455 of yacc.c */
-#line 1698 "go.y"
+#line 1714 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -4715,7 +4731,7 @@ yyreduce:
case 274:
/* Line 1455 of yacc.c */
-#line 1702 "go.y"
+#line 1718 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4724,7 +4740,7 @@ yyreduce:
case 275:
/* Line 1455 of yacc.c */
-#line 1706 "go.y"
+#line 1722 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4733,7 +4749,7 @@ yyreduce:
case 276:
/* Line 1455 of yacc.c */
-#line 1711 "go.y"
+#line 1727 "go.y"
{
(yyval.list) = nil;
}
@@ -4742,7 +4758,7 @@ yyreduce:
case 277:
/* Line 1455 of yacc.c */
-#line 1715 "go.y"
+#line 1731 "go.y"
{
(yyval.list) = (yyvsp[(1) - (2)].list);
}
@@ -4751,7 +4767,7 @@ yyreduce:
case 282:
/* Line 1455 of yacc.c */
-#line 1729 "go.y"
+#line 1745 "go.y"
{
(yyval.node) = N;
}
@@ -4760,7 +4776,7 @@ yyreduce:
case 284:
/* Line 1455 of yacc.c */
-#line 1735 "go.y"
+#line 1751 "go.y"
{
(yyval.list) = nil;
}
@@ -4769,7 +4785,7 @@ yyreduce:
case 286:
/* Line 1455 of yacc.c */
-#line 1741 "go.y"
+#line 1757 "go.y"
{
(yyval.node) = N;
}
@@ -4778,7 +4794,7 @@ yyreduce:
case 288:
/* Line 1455 of yacc.c */
-#line 1747 "go.y"
+#line 1763 "go.y"
{
(yyval.list) = nil;
}
@@ -4787,7 +4803,7 @@ yyreduce:
case 290:
/* Line 1455 of yacc.c */
-#line 1753 "go.y"
+#line 1769 "go.y"
{
(yyval.list) = nil;
}
@@ -4796,7 +4812,7 @@ yyreduce:
case 292:
/* Line 1455 of yacc.c */
-#line 1759 "go.y"
+#line 1775 "go.y"
{
(yyval.list) = nil;
}
@@ -4805,7 +4821,7 @@ yyreduce:
case 294:
/* Line 1455 of yacc.c */
-#line 1765 "go.y"
+#line 1781 "go.y"
{
(yyval.val).ctype = CTxxx;
}
@@ -4814,7 +4830,7 @@ yyreduce:
case 296:
/* Line 1455 of yacc.c */
-#line 1775 "go.y"
+#line 1791 "go.y"
{
importimport((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].val).u.sval);
}
@@ -4823,7 +4839,7 @@ yyreduce:
case 297:
/* Line 1455 of yacc.c */
-#line 1779 "go.y"
+#line 1795 "go.y"
{
importvar((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].type));
}
@@ -4832,7 +4848,7 @@ yyreduce:
case 298:
/* Line 1455 of yacc.c */
-#line 1783 "go.y"
+#line 1799 "go.y"
{
importconst((yyvsp[(2) - (5)].sym), types[TIDEAL], (yyvsp[(4) - (5)].node));
}
@@ -4841,7 +4857,7 @@ yyreduce:
case 299:
/* Line 1455 of yacc.c */
-#line 1787 "go.y"
+#line 1803 "go.y"
{
importconst((yyvsp[(2) - (6)].sym), (yyvsp[(3) - (6)].type), (yyvsp[(5) - (6)].node));
}
@@ -4850,7 +4866,7 @@ yyreduce:
case 300:
/* Line 1455 of yacc.c */
-#line 1791 "go.y"
+#line 1807 "go.y"
{
importtype((yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].type));
}
@@ -4859,7 +4875,7 @@ yyreduce:
case 301:
/* Line 1455 of yacc.c */
-#line 1795 "go.y"
+#line 1811 "go.y"
{
if((yyvsp[(2) - (4)].node) == N)
break;
@@ -4880,7 +4896,7 @@ yyreduce:
case 302:
/* Line 1455 of yacc.c */
-#line 1813 "go.y"
+#line 1829 "go.y"
{
(yyval.sym) = (yyvsp[(1) - (1)].sym);
structpkg = (yyval.sym)->pkg;
@@ -4890,7 +4906,7 @@ yyreduce:
case 303:
/* Line 1455 of yacc.c */
-#line 1820 "go.y"
+#line 1836 "go.y"
{
(yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
importsym((yyvsp[(1) - (1)].sym), OTYPE);
@@ -4900,7 +4916,7 @@ yyreduce:
case 309:
/* Line 1455 of yacc.c */
-#line 1840 "go.y"
+#line 1856 "go.y"
{
(yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
}
@@ -4909,7 +4925,7 @@ yyreduce:
case 310:
/* Line 1455 of yacc.c */
-#line 1844 "go.y"
+#line 1860 "go.y"
{
// predefined name like uint8
(yyvsp[(1) - (1)].sym) = pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg);
@@ -4924,7 +4940,7 @@ yyreduce:
case 311:
/* Line 1455 of yacc.c */
-#line 1854 "go.y"
+#line 1870 "go.y"
{
(yyval.type) = aindex(N, (yyvsp[(3) - (3)].type));
}
@@ -4933,7 +4949,7 @@ yyreduce:
case 312:
/* Line 1455 of yacc.c */
-#line 1858 "go.y"
+#line 1874 "go.y"
{
(yyval.type) = aindex(nodlit((yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].type));
}
@@ -4942,7 +4958,7 @@ yyreduce:
case 313:
/* Line 1455 of yacc.c */
-#line 1862 "go.y"
+#line 1878 "go.y"
{
(yyval.type) = maptype((yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].type));
}
@@ -4951,7 +4967,7 @@ yyreduce:
case 314:
/* Line 1455 of yacc.c */
-#line 1866 "go.y"
+#line 1882 "go.y"
{
(yyval.type) = tostruct((yyvsp[(3) - (4)].list));
}
@@ -4960,7 +4976,7 @@ yyreduce:
case 315:
/* Line 1455 of yacc.c */
-#line 1870 "go.y"
+#line 1886 "go.y"
{
(yyval.type) = tointerface((yyvsp[(3) - (4)].list));
}
@@ -4969,7 +4985,7 @@ yyreduce:
case 316:
/* Line 1455 of yacc.c */
-#line 1874 "go.y"
+#line 1890 "go.y"
{
(yyval.type) = ptrto((yyvsp[(2) - (2)].type));
}
@@ -4978,7 +4994,7 @@ yyreduce:
case 317:
/* Line 1455 of yacc.c */
-#line 1878 "go.y"
+#line 1894 "go.y"
{
(yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(2) - (2)].type);
@@ -4989,7 +5005,7 @@ yyreduce:
case 318:
/* Line 1455 of yacc.c */
-#line 1884 "go.y"
+#line 1900 "go.y"
{
(yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (4)].type);
@@ -5000,7 +5016,7 @@ yyreduce:
case 319:
/* Line 1455 of yacc.c */
-#line 1890 "go.y"
+#line 1906 "go.y"
{
(yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (3)].type);
@@ -5011,7 +5027,7 @@ yyreduce:
case 320:
/* Line 1455 of yacc.c */
-#line 1898 "go.y"
+#line 1914 "go.y"
{
(yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (3)].type);
@@ -5022,7 +5038,7 @@ yyreduce:
case 321:
/* Line 1455 of yacc.c */
-#line 1906 "go.y"
+#line 1922 "go.y"
{
(yyval.type) = functype(nil, (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list));
}
@@ -5031,7 +5047,7 @@ yyreduce:
case 322:
/* Line 1455 of yacc.c */
-#line 1912 "go.y"
+#line 1928 "go.y"
{
(yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(2) - (3)].type)));
if((yyvsp[(1) - (3)].sym))
@@ -5043,7 +5059,7 @@ yyreduce:
case 323:
/* Line 1455 of yacc.c */
-#line 1919 "go.y"
+#line 1935 "go.y"
{
Type *t;
@@ -5062,7 +5078,7 @@ yyreduce:
case 324:
/* Line 1455 of yacc.c */
-#line 1935 "go.y"
+#line 1951 "go.y"
{
Sym *s;
@@ -5083,7 +5099,7 @@ yyreduce:
case 325:
/* Line 1455 of yacc.c */
-#line 1953 "go.y"
+#line 1969 "go.y"
{
(yyval.node) = nod(ODCLFIELD, newname((yyvsp[(1) - (5)].sym)), typenod(functype(fakethis(), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list))));
}
@@ -5092,7 +5108,7 @@ yyreduce:
case 326:
/* Line 1455 of yacc.c */
-#line 1957 "go.y"
+#line 1973 "go.y"
{
(yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type)));
}
@@ -5101,7 +5117,7 @@ yyreduce:
case 327:
/* Line 1455 of yacc.c */
-#line 1962 "go.y"
+#line 1978 "go.y"
{
(yyval.list) = nil;
}
@@ -5110,7 +5126,7 @@ yyreduce:
case 329:
/* Line 1455 of yacc.c */
-#line 1969 "go.y"
+#line 1985 "go.y"
{
(yyval.list) = (yyvsp[(2) - (3)].list);
}
@@ -5119,7 +5135,7 @@ yyreduce:
case 330:
/* Line 1455 of yacc.c */
-#line 1973 "go.y"
+#line 1989 "go.y"
{
(yyval.list) = list1(nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type))));
}
@@ -5128,7 +5144,7 @@ yyreduce:
case 331:
/* Line 1455 of yacc.c */
-#line 1983 "go.y"
+#line 1999 "go.y"
{
(yyval.node) = nodlit((yyvsp[(1) - (1)].val));
}
@@ -5137,7 +5153,7 @@ yyreduce:
case 332:
/* Line 1455 of yacc.c */
-#line 1987 "go.y"
+#line 2003 "go.y"
{
(yyval.node) = nodlit((yyvsp[(2) - (2)].val));
switch((yyval.node)->val.ctype){
@@ -5157,7 +5173,7 @@ yyreduce:
case 333:
/* Line 1455 of yacc.c */
-#line 2002 "go.y"
+#line 2018 "go.y"
{
(yyval.node) = oldname(pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg));
if((yyval.node)->op != OLITERAL)
@@ -5168,7 +5184,7 @@ yyreduce:
case 335:
/* Line 1455 of yacc.c */
-#line 2011 "go.y"
+#line 2027 "go.y"
{
if((yyvsp[(2) - (5)].node)->val.ctype == CTRUNE && (yyvsp[(4) - (5)].node)->val.ctype == CTINT) {
(yyval.node) = (yyvsp[(2) - (5)].node);
@@ -5182,7 +5198,7 @@ yyreduce:
case 338:
/* Line 1455 of yacc.c */
-#line 2025 "go.y"
+#line 2041 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -5191,7 +5207,7 @@ yyreduce:
case 339:
/* Line 1455 of yacc.c */
-#line 2029 "go.y"
+#line 2045 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -5200,7 +5216,7 @@ yyreduce:
case 340:
/* Line 1455 of yacc.c */
-#line 2035 "go.y"
+#line 2051 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -5209,7 +5225,7 @@ yyreduce:
case 341:
/* Line 1455 of yacc.c */
-#line 2039 "go.y"
+#line 2055 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -5218,7 +5234,7 @@ yyreduce:
case 342:
/* Line 1455 of yacc.c */
-#line 2045 "go.y"
+#line 2061 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
@@ -5227,7 +5243,7 @@ yyreduce:
case 343:
/* Line 1455 of yacc.c */
-#line 2049 "go.y"
+#line 2065 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -5236,7 +5252,7 @@ yyreduce:
/* Line 1455 of yacc.c */
-#line 5241 "y.tab.c"
+#line 5257 "y.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5448,7 +5464,7 @@ yyreturn:
/* Line 1675 of yacc.c */
-#line 2053 "go.y"
+#line 2069 "go.y"
static void