Commit 389093fe authored by David Symonds's avatar David Symonds

cmd/gc: preserve safe annotation of package def.

A package file may begin as either "package foo" or
"package foo safe". The latter is relevant when using -u.
https://golang.org/cl/6903059 resulted in the distinction
being dropped when a package was read for the second or later time.
This CL records whether that "safe" tag was present,
and includes it in the dummy statement generated for the lexer.

R=golang-dev, r, minux.ma, daniel.morsing, iant
CC=golang-dev
https://golang.org/cl/8255044
parent 019c8fc6
...@@ -394,6 +394,7 @@ struct Pkg ...@@ -394,6 +394,7 @@ struct Pkg
uchar imported; // export data of this package was parsed uchar imported; // export data of this package was parsed
char exported; // import line written in export data char exported; // import line written in export data
char direct; // imported directly char direct; // imported directly
char safe; // whether the package is marked as safe
}; };
typedef struct Iter Iter; typedef struct Iter Iter;
......
...@@ -251,6 +251,7 @@ import_package: ...@@ -251,6 +251,7 @@ import_package:
} else if(strcmp(importpkg->name, $2->name) != 0) } else if(strcmp(importpkg->name, $2->name) != 0)
yyerror("conflicting names %s and %s for package \"%Z\"", importpkg->name, $2->name, importpkg->path); yyerror("conflicting names %s and %s for package \"%Z\"", importpkg->name, $2->name, importpkg->path);
importpkg->direct = 1; importpkg->direct = 1;
importpkg->safe = curio.importsafe;
if(safemode && !curio.importsafe) if(safemode && !curio.importsafe)
yyerror("cannot import unsafe package \"%Z\"", importpkg->path); yyerror("cannot import unsafe package \"%Z\"", importpkg->path);
......
...@@ -602,7 +602,7 @@ void ...@@ -602,7 +602,7 @@ void
importfile(Val *f, int line) importfile(Val *f, int line)
{ {
Biobuf *imp; Biobuf *imp;
char *file, *p, *q; char *file, *p, *q, *tag;
int32 c; int32 c;
int len; int len;
Strlit *path; Strlit *path;
...@@ -610,8 +610,6 @@ importfile(Val *f, int line) ...@@ -610,8 +610,6 @@ importfile(Val *f, int line)
USED(line); USED(line);
// TODO(rsc): don't bother reloading imports more than once?
if(f->ctype != CTSTR) { if(f->ctype != CTSTR) {
yyerror("import statement not a string"); yyerror("import statement not a string");
fakeimport(); fakeimport();
...@@ -686,7 +684,11 @@ importfile(Val *f, int line) ...@@ -686,7 +684,11 @@ importfile(Val *f, int line)
// to the lexer to avoid parsing export data twice. // to the lexer to avoid parsing export data twice.
if(importpkg->imported) { if(importpkg->imported) {
file = strdup(namebuf); file = strdup(namebuf);
p = smprint("package %s\n$$\n", importpkg->name); tag = "";
if(importpkg->safe) {
tag = "safe";
}
p = smprint("package %s %s\n$$\n", importpkg->name, tag);
cannedimports(file, p); cannedimports(file, p);
return; return;
} }
......
...@@ -658,39 +658,39 @@ static const yytype_uint16 yyrline[] = ...@@ -658,39 +658,39 @@ static const yytype_uint16 yyrline[] =
{ {
0, 124, 124, 133, 140, 151, 151, 166, 167, 170, 0, 124, 124, 133, 140, 151, 151, 166, 167, 170,
171, 172, 175, 208, 219, 220, 223, 230, 237, 246, 171, 172, 175, 208, 219, 220, 223, 230, 237, 246,
259, 260, 267, 267, 280, 284, 285, 289, 294, 300, 260, 261, 268, 268, 281, 285, 286, 290, 295, 301,
304, 308, 312, 318, 324, 330, 335, 339, 343, 349, 305, 309, 313, 319, 325, 331, 336, 340, 344, 350,
355, 359, 363, 369, 373, 379, 380, 384, 390, 399, 356, 360, 364, 370, 374, 380, 381, 385, 391, 400,
405, 423, 428, 440, 456, 461, 468, 488, 506, 515, 406, 424, 429, 441, 457, 462, 469, 489, 507, 516,
534, 533, 548, 547, 578, 581, 588, 587, 598, 604, 535, 534, 549, 548, 579, 582, 589, 588, 599, 605,
613, 624, 630, 633, 641, 640, 651, 657, 669, 673, 614, 625, 631, 634, 642, 641, 652, 658, 670, 674,
678, 668, 699, 698, 711, 714, 720, 723, 735, 739, 679, 669, 700, 699, 712, 715, 721, 724, 736, 740,
734, 757, 756, 772, 773, 777, 781, 785, 789, 793, 735, 758, 757, 773, 774, 778, 782, 786, 790, 794,
797, 801, 805, 809, 813, 817, 821, 825, 829, 833, 798, 802, 806, 810, 814, 818, 822, 826, 830, 834,
837, 841, 845, 850, 856, 857, 861, 872, 876, 880, 838, 842, 846, 851, 857, 858, 862, 873, 877, 881,
884, 889, 893, 903, 907, 912, 920, 924, 925, 936, 885, 890, 894, 904, 908, 913, 921, 925, 926, 937,
940, 944, 948, 952, 953, 959, 966, 972, 979, 982, 941, 945, 949, 953, 954, 960, 967, 973, 980, 983,
989, 995, 1012, 1019, 1020, 1027, 1028, 1047, 1048, 1051, 990, 996, 1013, 1020, 1021, 1028, 1029, 1048, 1049, 1052,
1054, 1058, 1069, 1078, 1084, 1087, 1090, 1097, 1098, 1104, 1055, 1059, 1070, 1079, 1085, 1088, 1091, 1098, 1099, 1105,
1119, 1127, 1139, 1144, 1150, 1151, 1152, 1153, 1154, 1155, 1120, 1128, 1140, 1145, 1151, 1152, 1153, 1154, 1155, 1156,
1161, 1162, 1163, 1164, 1170, 1171, 1172, 1173, 1174, 1180, 1162, 1163, 1164, 1165, 1171, 1172, 1173, 1174, 1175, 1181,
1181, 1184, 1187, 1188, 1189, 1190, 1191, 1194, 1195, 1208, 1182, 1185, 1188, 1189, 1190, 1191, 1192, 1195, 1196, 1209,
1212, 1217, 1222, 1227, 1231, 1232, 1235, 1241, 1248, 1254, 1213, 1218, 1223, 1228, 1232, 1233, 1236, 1242, 1249, 1255,
1261, 1267, 1278, 1292, 1321, 1361, 1386, 1404, 1413, 1416, 1262, 1268, 1279, 1293, 1322, 1362, 1387, 1405, 1414, 1417,
1424, 1428, 1432, 1439, 1445, 1450, 1462, 1465, 1475, 1476, 1425, 1429, 1433, 1440, 1446, 1451, 1463, 1466, 1476, 1477,
1482, 1483, 1489, 1493, 1499, 1500, 1506, 1510, 1516, 1539, 1483, 1484, 1490, 1494, 1500, 1501, 1507, 1511, 1517, 1540,
1544, 1550, 1556, 1563, 1572, 1581, 1596, 1602, 1607, 1611, 1545, 1551, 1557, 1564, 1573, 1582, 1597, 1603, 1608, 1612,
1618, 1631, 1632, 1638, 1644, 1647, 1651, 1657, 1660, 1669, 1619, 1632, 1633, 1639, 1645, 1648, 1652, 1658, 1661, 1670,
1672, 1673, 1677, 1678, 1684, 1685, 1686, 1687, 1688, 1690, 1673, 1674, 1678, 1679, 1685, 1686, 1687, 1688, 1689, 1691,
1689, 1704, 1709, 1713, 1717, 1721, 1725, 1730, 1749, 1755, 1690, 1705, 1710, 1714, 1718, 1722, 1726, 1731, 1750, 1756,
1763, 1767, 1773, 1777, 1783, 1787, 1793, 1797, 1806, 1810, 1764, 1768, 1774, 1778, 1784, 1788, 1794, 1798, 1807, 1811,
1814, 1818, 1824, 1827, 1835, 1836, 1838, 1839, 1842, 1845, 1815, 1819, 1825, 1828, 1836, 1837, 1839, 1840, 1843, 1846,
1848, 1851, 1854, 1857, 1860, 1863, 1866, 1869, 1872, 1875, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876,
1878, 1881, 1887, 1891, 1895, 1899, 1903, 1907, 1927, 1934, 1879, 1882, 1888, 1892, 1896, 1900, 1904, 1908, 1928, 1935,
1945, 1946, 1947, 1950, 1951, 1954, 1958, 1968, 1972, 1976, 1946, 1947, 1948, 1951, 1952, 1955, 1959, 1969, 1973, 1977,
1980, 1984, 1988, 1992, 1998, 2004, 2012, 2020, 2026, 2033, 1981, 1985, 1989, 1993, 1999, 2005, 2013, 2021, 2027, 2034,
2049, 2067, 2071, 2077, 2080, 2083, 2087, 2097, 2101, 2116, 2050, 2068, 2072, 2078, 2081, 2084, 2088, 2098, 2102, 2117,
2124, 2125, 2137, 2138, 2141, 2145, 2151, 2155, 2161, 2165 2125, 2126, 2138, 2139, 2142, 2146, 2152, 2156, 2162, 2166
}; };
#endif #endif
...@@ -2494,6 +2494,7 @@ yyreduce: ...@@ -2494,6 +2494,7 @@ yyreduce:
} else if(strcmp(importpkg->name, (yyvsp[(2) - (4)].sym)->name) != 0) } else if(strcmp(importpkg->name, (yyvsp[(2) - (4)].sym)->name) != 0)
yyerror("conflicting names %s and %s for package \"%Z\"", importpkg->name, (yyvsp[(2) - (4)].sym)->name, importpkg->path); yyerror("conflicting names %s and %s for package \"%Z\"", importpkg->name, (yyvsp[(2) - (4)].sym)->name, importpkg->path);
importpkg->direct = 1; importpkg->direct = 1;
importpkg->safe = curio.importsafe;
if(safemode && !curio.importsafe) if(safemode && !curio.importsafe)
yyerror("cannot import unsafe package \"%Z\"", importpkg->path); yyerror("cannot import unsafe package \"%Z\"", importpkg->path);
...@@ -2501,7 +2502,7 @@ yyreduce: ...@@ -2501,7 +2502,7 @@ yyreduce:
break; break;
case 21: case 21:
#line 261 "go.y" #line 262 "go.y"
{ {
if(strcmp((yyvsp[(1) - (1)].sym)->name, "safe") == 0) if(strcmp((yyvsp[(1) - (1)].sym)->name, "safe") == 0)
curio.importsafe = 1; curio.importsafe = 1;
...@@ -2509,14 +2510,14 @@ yyreduce: ...@@ -2509,14 +2510,14 @@ yyreduce:
break; break;
case 22: case 22:
#line 267 "go.y" #line 268 "go.y"
{ {
defercheckwidth(); defercheckwidth();
} }
break; break;
case 23: case 23:
#line 271 "go.y" #line 272 "go.y"
{ {
resumecheckwidth(); resumecheckwidth();
unimportfile(); unimportfile();
...@@ -2524,7 +2525,7 @@ yyreduce: ...@@ -2524,7 +2525,7 @@ yyreduce:
break; break;
case 24: case 24:
#line 280 "go.y" #line 281 "go.y"
{ {
yyerror("empty top-level declaration"); yyerror("empty top-level declaration");
(yyval.list) = nil; (yyval.list) = nil;
...@@ -2532,14 +2533,14 @@ yyreduce: ...@@ -2532,14 +2533,14 @@ yyreduce:
break; break;
case 26: case 26:
#line 286 "go.y" #line 287 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 27: case 27:
#line 290 "go.y" #line 291 "go.y"
{ {
yyerror("non-declaration statement outside function body"); yyerror("non-declaration statement outside function body");
(yyval.list) = nil; (yyval.list) = nil;
...@@ -2547,35 +2548,35 @@ yyreduce: ...@@ -2547,35 +2548,35 @@ yyreduce:
break; break;
case 28: case 28:
#line 295 "go.y" #line 296 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 29: case 29:
#line 301 "go.y" #line 302 "go.y"
{ {
(yyval.list) = (yyvsp[(2) - (2)].list); (yyval.list) = (yyvsp[(2) - (2)].list);
} }
break; break;
case 30: case 30:
#line 305 "go.y" #line 306 "go.y"
{ {
(yyval.list) = (yyvsp[(3) - (5)].list); (yyval.list) = (yyvsp[(3) - (5)].list);
} }
break; break;
case 31: case 31:
#line 309 "go.y" #line 310 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 32: case 32:
#line 313 "go.y" #line 314 "go.y"
{ {
(yyval.list) = (yyvsp[(2) - (2)].list); (yyval.list) = (yyvsp[(2) - (2)].list);
iota = -100000; iota = -100000;
...@@ -2584,7 +2585,7 @@ yyreduce: ...@@ -2584,7 +2585,7 @@ yyreduce:
break; break;
case 33: case 33:
#line 319 "go.y" #line 320 "go.y"
{ {
(yyval.list) = (yyvsp[(3) - (5)].list); (yyval.list) = (yyvsp[(3) - (5)].list);
iota = -100000; iota = -100000;
...@@ -2593,7 +2594,7 @@ yyreduce: ...@@ -2593,7 +2594,7 @@ yyreduce:
break; break;
case 34: case 34:
#line 325 "go.y" #line 326 "go.y"
{ {
(yyval.list) = concat((yyvsp[(3) - (7)].list), (yyvsp[(5) - (7)].list)); (yyval.list) = concat((yyvsp[(3) - (7)].list), (yyvsp[(5) - (7)].list));
iota = -100000; iota = -100000;
...@@ -2602,7 +2603,7 @@ yyreduce: ...@@ -2602,7 +2603,7 @@ yyreduce:
break; break;
case 35: case 35:
#line 331 "go.y" #line 332 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
iota = -100000; iota = -100000;
...@@ -2610,84 +2611,84 @@ yyreduce: ...@@ -2610,84 +2611,84 @@ yyreduce:
break; break;
case 36: case 36:
#line 336 "go.y" #line 337 "go.y"
{ {
(yyval.list) = list1((yyvsp[(2) - (2)].node)); (yyval.list) = list1((yyvsp[(2) - (2)].node));
} }
break; break;
case 37: case 37:
#line 340 "go.y" #line 341 "go.y"
{ {
(yyval.list) = (yyvsp[(3) - (5)].list); (yyval.list) = (yyvsp[(3) - (5)].list);
} }
break; break;
case 38: case 38:
#line 344 "go.y" #line 345 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 39: case 39:
#line 350 "go.y" #line 351 "go.y"
{ {
iota = 0; iota = 0;
} }
break; break;
case 40: case 40:
#line 356 "go.y" #line 357 "go.y"
{ {
(yyval.list) = variter((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node), nil); (yyval.list) = variter((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node), nil);
} }
break; break;
case 41: case 41:
#line 360 "go.y" #line 361 "go.y"
{ {
(yyval.list) = variter((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].list)); (yyval.list) = variter((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].list));
} }
break; break;
case 42: case 42:
#line 364 "go.y" #line 365 "go.y"
{ {
(yyval.list) = variter((yyvsp[(1) - (3)].list), nil, (yyvsp[(3) - (3)].list)); (yyval.list) = variter((yyvsp[(1) - (3)].list), nil, (yyvsp[(3) - (3)].list));
} }
break; break;
case 43: case 43:
#line 370 "go.y" #line 371 "go.y"
{ {
(yyval.list) = constiter((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].list)); (yyval.list) = constiter((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].list));
} }
break; break;
case 44: case 44:
#line 374 "go.y" #line 375 "go.y"
{ {
(yyval.list) = constiter((yyvsp[(1) - (3)].list), N, (yyvsp[(3) - (3)].list)); (yyval.list) = constiter((yyvsp[(1) - (3)].list), N, (yyvsp[(3) - (3)].list));
} }
break; break;
case 46: case 46:
#line 381 "go.y" #line 382 "go.y"
{ {
(yyval.list) = constiter((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node), nil); (yyval.list) = constiter((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node), nil);
} }
break; break;
case 47: case 47:
#line 385 "go.y" #line 386 "go.y"
{ {
(yyval.list) = constiter((yyvsp[(1) - (1)].list), N, nil); (yyval.list) = constiter((yyvsp[(1) - (1)].list), N, nil);
} }
break; break;
case 48: case 48:
#line 391 "go.y" #line 392 "go.y"
{ {
// different from dclname because the name // different from dclname because the name
// becomes visible right here, not at the end // becomes visible right here, not at the end
...@@ -2697,14 +2698,14 @@ yyreduce: ...@@ -2697,14 +2698,14 @@ yyreduce:
break; break;
case 49: case 49:
#line 400 "go.y" #line 401 "go.y"
{ {
(yyval.node) = typedcl1((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node), 1); (yyval.node) = typedcl1((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node), 1);
} }
break; break;
case 50: case 50:
#line 406 "go.y" #line 407 "go.y"
{ {
(yyval.node) = (yyvsp[(1) - (1)].node); (yyval.node) = (yyvsp[(1) - (1)].node);
...@@ -2725,7 +2726,7 @@ yyreduce: ...@@ -2725,7 +2726,7 @@ yyreduce:
break; break;
case 51: case 51:
#line 424 "go.y" #line 425 "go.y"
{ {
(yyval.node) = nod(OASOP, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OASOP, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
(yyval.node)->etype = (yyvsp[(2) - (3)].i); // rathole to pass opcode (yyval.node)->etype = (yyvsp[(2) - (3)].i); // rathole to pass opcode
...@@ -2733,7 +2734,7 @@ yyreduce: ...@@ -2733,7 +2734,7 @@ yyreduce:
break; break;
case 52: case 52:
#line 429 "go.y" #line 430 "go.y"
{ {
if((yyvsp[(1) - (3)].list)->next == nil && (yyvsp[(3) - (3)].list)->next == nil) { if((yyvsp[(1) - (3)].list)->next == nil && (yyvsp[(3) - (3)].list)->next == nil) {
// simple // simple
...@@ -2748,7 +2749,7 @@ yyreduce: ...@@ -2748,7 +2749,7 @@ yyreduce:
break; break;
case 53: case 53:
#line 441 "go.y" #line 442 "go.y"
{ {
if((yyvsp[(3) - (3)].list)->n->op == OTYPESW) { if((yyvsp[(3) - (3)].list)->n->op == OTYPESW) {
(yyval.node) = nod(OTYPESW, N, (yyvsp[(3) - (3)].list)->n->right); (yyval.node) = nod(OTYPESW, N, (yyvsp[(3) - (3)].list)->n->right);
...@@ -2767,7 +2768,7 @@ yyreduce: ...@@ -2767,7 +2768,7 @@ yyreduce:
break; break;
case 54: case 54:
#line 457 "go.y" #line 458 "go.y"
{ {
(yyval.node) = nod(OASOP, (yyvsp[(1) - (2)].node), nodintconst(1)); (yyval.node) = nod(OASOP, (yyvsp[(1) - (2)].node), nodintconst(1));
(yyval.node)->etype = OADD; (yyval.node)->etype = OADD;
...@@ -2775,7 +2776,7 @@ yyreduce: ...@@ -2775,7 +2776,7 @@ yyreduce:
break; break;
case 55: case 55:
#line 462 "go.y" #line 463 "go.y"
{ {
(yyval.node) = nod(OASOP, (yyvsp[(1) - (2)].node), nodintconst(1)); (yyval.node) = nod(OASOP, (yyvsp[(1) - (2)].node), nodintconst(1));
(yyval.node)->etype = OSUB; (yyval.node)->etype = OSUB;
...@@ -2783,7 +2784,7 @@ yyreduce: ...@@ -2783,7 +2784,7 @@ yyreduce:
break; break;
case 56: case 56:
#line 469 "go.y" #line 470 "go.y"
{ {
Node *n, *nn; Node *n, *nn;
...@@ -2806,7 +2807,7 @@ yyreduce: ...@@ -2806,7 +2807,7 @@ yyreduce:
break; break;
case 57: case 57:
#line 489 "go.y" #line 490 "go.y"
{ {
Node *n; Node *n;
...@@ -2827,7 +2828,7 @@ yyreduce: ...@@ -2827,7 +2828,7 @@ yyreduce:
break; break;
case 58: case 58:
#line 507 "go.y" #line 508 "go.y"
{ {
// will be converted to OCASE // will be converted to OCASE
// right will point to next case // right will point to next case
...@@ -2839,7 +2840,7 @@ yyreduce: ...@@ -2839,7 +2840,7 @@ yyreduce:
break; break;
case 59: case 59:
#line 516 "go.y" #line 517 "go.y"
{ {
Node *n, *nn; Node *n, *nn;
...@@ -2858,14 +2859,14 @@ yyreduce: ...@@ -2858,14 +2859,14 @@ yyreduce:
break; break;
case 60: case 60:
#line 534 "go.y" #line 535 "go.y"
{ {
markdcl(); markdcl();
} }
break; break;
case 61: case 61:
#line 538 "go.y" #line 539 "go.y"
{ {
if((yyvsp[(3) - (4)].list) == nil) if((yyvsp[(3) - (4)].list) == nil)
(yyval.node) = nod(OEMPTY, N, N); (yyval.node) = nod(OEMPTY, N, N);
...@@ -2876,7 +2877,7 @@ yyreduce: ...@@ -2876,7 +2877,7 @@ yyreduce:
break; break;
case 62: case 62:
#line 548 "go.y" #line 549 "go.y"
{ {
// If the last token read by the lexer was consumed // If the last token read by the lexer was consumed
// as part of the case, clear it (parser has cleared yychar). // as part of the case, clear it (parser has cleared yychar).
...@@ -2889,7 +2890,7 @@ yyreduce: ...@@ -2889,7 +2890,7 @@ yyreduce:
break; break;
case 63: case 63:
#line 558 "go.y" #line 559 "go.y"
{ {
int last; int last;
...@@ -2911,28 +2912,28 @@ yyreduce: ...@@ -2911,28 +2912,28 @@ yyreduce:
break; break;
case 64: case 64:
#line 578 "go.y" #line 579 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 65: case 65:
#line 582 "go.y" #line 583 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); (yyval.list) = list((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node));
} }
break; break;
case 66: case 66:
#line 588 "go.y" #line 589 "go.y"
{ {
markdcl(); markdcl();
} }
break; break;
case 67: case 67:
#line 592 "go.y" #line 593 "go.y"
{ {
(yyval.list) = (yyvsp[(3) - (4)].list); (yyval.list) = (yyvsp[(3) - (4)].list);
popdcl(); popdcl();
...@@ -2940,7 +2941,7 @@ yyreduce: ...@@ -2940,7 +2941,7 @@ yyreduce:
break; break;
case 68: case 68:
#line 599 "go.y" #line 600 "go.y"
{ {
(yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node)); (yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node));
(yyval.node)->list = (yyvsp[(1) - (4)].list); (yyval.node)->list = (yyvsp[(1) - (4)].list);
...@@ -2949,7 +2950,7 @@ yyreduce: ...@@ -2949,7 +2950,7 @@ yyreduce:
break; break;
case 69: case 69:
#line 605 "go.y" #line 606 "go.y"
{ {
(yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node)); (yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node));
(yyval.node)->list = (yyvsp[(1) - (4)].list); (yyval.node)->list = (yyvsp[(1) - (4)].list);
...@@ -2959,7 +2960,7 @@ yyreduce: ...@@ -2959,7 +2960,7 @@ yyreduce:
break; break;
case 70: case 70:
#line 614 "go.y" #line 615 "go.y"
{ {
// init ; test ; incr // init ; test ; incr
if((yyvsp[(5) - (5)].node) != N && (yyvsp[(5) - (5)].node)->colas != 0) if((yyvsp[(5) - (5)].node) != N && (yyvsp[(5) - (5)].node)->colas != 0)
...@@ -2973,7 +2974,7 @@ yyreduce: ...@@ -2973,7 +2974,7 @@ yyreduce:
break; break;
case 71: case 71:
#line 625 "go.y" #line 626 "go.y"
{ {
// normal test // normal test
(yyval.node) = nod(OFOR, N, N); (yyval.node) = nod(OFOR, N, N);
...@@ -2982,7 +2983,7 @@ yyreduce: ...@@ -2982,7 +2983,7 @@ yyreduce:
break; break;
case 73: case 73:
#line 634 "go.y" #line 635 "go.y"
{ {
(yyval.node) = (yyvsp[(1) - (2)].node); (yyval.node) = (yyvsp[(1) - (2)].node);
(yyval.node)->nbody = concat((yyval.node)->nbody, (yyvsp[(2) - (2)].list)); (yyval.node)->nbody = concat((yyval.node)->nbody, (yyvsp[(2) - (2)].list));
...@@ -2990,14 +2991,14 @@ yyreduce: ...@@ -2990,14 +2991,14 @@ yyreduce:
break; break;
case 74: case 74:
#line 641 "go.y" #line 642 "go.y"
{ {
markdcl(); markdcl();
} }
break; break;
case 75: case 75:
#line 645 "go.y" #line 646 "go.y"
{ {
(yyval.node) = (yyvsp[(3) - (3)].node); (yyval.node) = (yyvsp[(3) - (3)].node);
popdcl(); popdcl();
...@@ -3005,7 +3006,7 @@ yyreduce: ...@@ -3005,7 +3006,7 @@ yyreduce:
break; break;
case 76: case 76:
#line 652 "go.y" #line 653 "go.y"
{ {
// test // test
(yyval.node) = nod(OIF, N, N); (yyval.node) = nod(OIF, N, N);
...@@ -3014,7 +3015,7 @@ yyreduce: ...@@ -3014,7 +3015,7 @@ yyreduce:
break; break;
case 77: case 77:
#line 658 "go.y" #line 659 "go.y"
{ {
// init ; test // init ; test
(yyval.node) = nod(OIF, N, N); (yyval.node) = nod(OIF, N, N);
...@@ -3025,14 +3026,14 @@ yyreduce: ...@@ -3025,14 +3026,14 @@ yyreduce:
break; break;
case 78: case 78:
#line 669 "go.y" #line 670 "go.y"
{ {
markdcl(); markdcl();
} }
break; break;
case 79: case 79:
#line 673 "go.y" #line 674 "go.y"
{ {
if((yyvsp[(3) - (3)].node)->ntest == N) if((yyvsp[(3) - (3)].node)->ntest == N)
yyerror("missing condition in if statement"); yyerror("missing condition in if statement");
...@@ -3040,14 +3041,14 @@ yyreduce: ...@@ -3040,14 +3041,14 @@ yyreduce:
break; break;
case 80: case 80:
#line 678 "go.y" #line 679 "go.y"
{ {
(yyvsp[(3) - (5)].node)->nbody = (yyvsp[(5) - (5)].list); (yyvsp[(3) - (5)].node)->nbody = (yyvsp[(5) - (5)].list);
} }
break; break;
case 81: case 81:
#line 682 "go.y" #line 683 "go.y"
{ {
Node *n; Node *n;
NodeList *nn; NodeList *nn;
...@@ -3065,14 +3066,14 @@ yyreduce: ...@@ -3065,14 +3066,14 @@ yyreduce:
break; break;
case 82: case 82:
#line 699 "go.y" #line 700 "go.y"
{ {
markdcl(); markdcl();
} }
break; break;
case 83: case 83:
#line 703 "go.y" #line 704 "go.y"
{ {
if((yyvsp[(4) - (5)].node)->ntest == N) if((yyvsp[(4) - (5)].node)->ntest == N)
yyerror("missing condition in if statement"); yyerror("missing condition in if statement");
...@@ -3082,28 +3083,28 @@ yyreduce: ...@@ -3082,28 +3083,28 @@ yyreduce:
break; break;
case 84: case 84:
#line 711 "go.y" #line 712 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 85: case 85:
#line 715 "go.y" #line 716 "go.y"
{ {
(yyval.list) = concat((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); (yyval.list) = concat((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list));
} }
break; break;
case 86: case 86:
#line 720 "go.y" #line 721 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 87: case 87:
#line 724 "go.y" #line 725 "go.y"
{ {
NodeList *node; NodeList *node;
...@@ -3115,14 +3116,14 @@ yyreduce: ...@@ -3115,14 +3116,14 @@ yyreduce:
break; break;
case 88: case 88:
#line 735 "go.y" #line 736 "go.y"
{ {
markdcl(); markdcl();
} }
break; break;
case 89: case 89:
#line 739 "go.y" #line 740 "go.y"
{ {
Node *n; Node *n;
n = (yyvsp[(3) - (3)].node)->ntest; n = (yyvsp[(3) - (3)].node)->ntest;
...@@ -3133,7 +3134,7 @@ yyreduce: ...@@ -3133,7 +3134,7 @@ yyreduce:
break; break;
case 90: case 90:
#line 747 "go.y" #line 748 "go.y"
{ {
(yyval.node) = (yyvsp[(3) - (7)].node); (yyval.node) = (yyvsp[(3) - (7)].node);
(yyval.node)->op = OSWITCH; (yyval.node)->op = OSWITCH;
...@@ -3144,14 +3145,14 @@ yyreduce: ...@@ -3144,14 +3145,14 @@ yyreduce:
break; break;
case 91: case 91:
#line 757 "go.y" #line 758 "go.y"
{ {
typesw = nod(OXXX, typesw, N); typesw = nod(OXXX, typesw, N);
} }
break; break;
case 92: case 92:
#line 761 "go.y" #line 762 "go.y"
{ {
(yyval.node) = nod(OSELECT, N, N); (yyval.node) = nod(OSELECT, N, N);
(yyval.node)->lineno = typesw->lineno; (yyval.node)->lineno = typesw->lineno;
...@@ -3161,154 +3162,154 @@ yyreduce: ...@@ -3161,154 +3162,154 @@ yyreduce:
break; break;
case 94: case 94:
#line 774 "go.y" #line 775 "go.y"
{ {
(yyval.node) = nod(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 95: case 95:
#line 778 "go.y" #line 779 "go.y"
{ {
(yyval.node) = nod(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 96: case 96:
#line 782 "go.y" #line 783 "go.y"
{ {
(yyval.node) = nod(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 97: case 97:
#line 786 "go.y" #line 787 "go.y"
{ {
(yyval.node) = nod(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 98: case 98:
#line 790 "go.y" #line 791 "go.y"
{ {
(yyval.node) = nod(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 99: case 99:
#line 794 "go.y" #line 795 "go.y"
{ {
(yyval.node) = nod(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 100: case 100:
#line 798 "go.y" #line 799 "go.y"
{ {
(yyval.node) = nod(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 101: case 101:
#line 802 "go.y" #line 803 "go.y"
{ {
(yyval.node) = nod(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 102: case 102:
#line 806 "go.y" #line 807 "go.y"
{ {
(yyval.node) = nod(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 103: case 103:
#line 810 "go.y" #line 811 "go.y"
{ {
(yyval.node) = nod(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 104: case 104:
#line 814 "go.y" #line 815 "go.y"
{ {
(yyval.node) = nod(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 105: case 105:
#line 818 "go.y" #line 819 "go.y"
{ {
(yyval.node) = nod(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 106: case 106:
#line 822 "go.y" #line 823 "go.y"
{ {
(yyval.node) = nod(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 107: case 107:
#line 826 "go.y" #line 827 "go.y"
{ {
(yyval.node) = nod(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 108: case 108:
#line 830 "go.y" #line 831 "go.y"
{ {
(yyval.node) = nod(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 109: case 109:
#line 834 "go.y" #line 835 "go.y"
{ {
(yyval.node) = nod(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 110: case 110:
#line 838 "go.y" #line 839 "go.y"
{ {
(yyval.node) = nod(OANDNOT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OANDNOT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 111: case 111:
#line 842 "go.y" #line 843 "go.y"
{ {
(yyval.node) = nod(OLSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OLSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 112: case 112:
#line 846 "go.y" #line 847 "go.y"
{ {
(yyval.node) = nod(ORSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(ORSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 113: case 113:
#line 851 "go.y" #line 852 "go.y"
{ {
(yyval.node) = nod(OSEND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OSEND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 115: case 115:
#line 858 "go.y" #line 859 "go.y"
{ {
(yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 116: case 116:
#line 862 "go.y" #line 863 "go.y"
{ {
if((yyvsp[(2) - (2)].node)->op == OCOMPLIT) { if((yyvsp[(2) - (2)].node)->op == OCOMPLIT) {
// Special case for &T{...}: turn into (*T){...}. // Special case for &T{...}: turn into (*T){...}.
...@@ -3322,28 +3323,28 @@ yyreduce: ...@@ -3322,28 +3323,28 @@ yyreduce:
break; break;
case 117: case 117:
#line 873 "go.y" #line 874 "go.y"
{ {
(yyval.node) = nod(OPLUS, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OPLUS, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 118: case 118:
#line 877 "go.y" #line 878 "go.y"
{ {
(yyval.node) = nod(OMINUS, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OMINUS, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 119: case 119:
#line 881 "go.y" #line 882 "go.y"
{ {
(yyval.node) = nod(ONOT, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(ONOT, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 120: case 120:
#line 885 "go.y" #line 886 "go.y"
{ {
yyerror("the bitwise complement operator is ^"); yyerror("the bitwise complement operator is ^");
(yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N);
...@@ -3351,28 +3352,28 @@ yyreduce: ...@@ -3351,28 +3352,28 @@ yyreduce:
break; break;
case 121: case 121:
#line 890 "go.y" #line 891 "go.y"
{ {
(yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 122: case 122:
#line 894 "go.y" #line 895 "go.y"
{ {
(yyval.node) = nod(ORECV, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(ORECV, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 123: case 123:
#line 904 "go.y" #line 905 "go.y"
{ {
(yyval.node) = nod(OCALL, (yyvsp[(1) - (3)].node), N); (yyval.node) = nod(OCALL, (yyvsp[(1) - (3)].node), N);
} }
break; break;
case 124: case 124:
#line 908 "go.y" #line 909 "go.y"
{ {
(yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N); (yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N);
(yyval.node)->list = (yyvsp[(3) - (5)].list); (yyval.node)->list = (yyvsp[(3) - (5)].list);
...@@ -3380,7 +3381,7 @@ yyreduce: ...@@ -3380,7 +3381,7 @@ yyreduce:
break; break;
case 125: case 125:
#line 913 "go.y" #line 914 "go.y"
{ {
(yyval.node) = nod(OCALL, (yyvsp[(1) - (6)].node), N); (yyval.node) = nod(OCALL, (yyvsp[(1) - (6)].node), N);
(yyval.node)->list = (yyvsp[(3) - (6)].list); (yyval.node)->list = (yyvsp[(3) - (6)].list);
...@@ -3389,14 +3390,14 @@ yyreduce: ...@@ -3389,14 +3390,14 @@ yyreduce:
break; break;
case 126: case 126:
#line 921 "go.y" #line 922 "go.y"
{ {
(yyval.node) = nodlit((yyvsp[(1) - (1)].val)); (yyval.node) = nodlit((yyvsp[(1) - (1)].val));
} }
break; break;
case 128: case 128:
#line 926 "go.y" #line 927 "go.y"
{ {
if((yyvsp[(1) - (3)].node)->op == OPACK) { if((yyvsp[(1) - (3)].node)->op == OPACK) {
Sym *s; Sym *s;
...@@ -3410,35 +3411,35 @@ yyreduce: ...@@ -3410,35 +3411,35 @@ yyreduce:
break; break;
case 129: case 129:
#line 937 "go.y" #line 938 "go.y"
{ {
(yyval.node) = nod(ODOTTYPE, (yyvsp[(1) - (5)].node), (yyvsp[(4) - (5)].node)); (yyval.node) = nod(ODOTTYPE, (yyvsp[(1) - (5)].node), (yyvsp[(4) - (5)].node));
} }
break; break;
case 130: case 130:
#line 941 "go.y" #line 942 "go.y"
{ {
(yyval.node) = nod(OTYPESW, N, (yyvsp[(1) - (5)].node)); (yyval.node) = nod(OTYPESW, N, (yyvsp[(1) - (5)].node));
} }
break; break;
case 131: case 131:
#line 945 "go.y" #line 946 "go.y"
{ {
(yyval.node) = nod(OINDEX, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)); (yyval.node) = nod(OINDEX, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
} }
break; break;
case 132: case 132:
#line 949 "go.y" #line 950 "go.y"
{ {
(yyval.node) = nod(OSLICE, (yyvsp[(1) - (6)].node), nod(OKEY, (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node))); (yyval.node) = nod(OSLICE, (yyvsp[(1) - (6)].node), nod(OKEY, (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node)));
} }
break; break;
case 134: case 134:
#line 954 "go.y" #line 955 "go.y"
{ {
// conversion // conversion
(yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N); (yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N);
...@@ -3447,7 +3448,7 @@ yyreduce: ...@@ -3447,7 +3448,7 @@ yyreduce:
break; break;
case 135: case 135:
#line 960 "go.y" #line 961 "go.y"
{ {
(yyval.node) = (yyvsp[(3) - (5)].node); (yyval.node) = (yyvsp[(3) - (5)].node);
(yyval.node)->right = (yyvsp[(1) - (5)].node); (yyval.node)->right = (yyvsp[(1) - (5)].node);
...@@ -3457,7 +3458,7 @@ yyreduce: ...@@ -3457,7 +3458,7 @@ yyreduce:
break; break;
case 136: case 136:
#line 967 "go.y" #line 968 "go.y"
{ {
(yyval.node) = (yyvsp[(3) - (5)].node); (yyval.node) = (yyvsp[(3) - (5)].node);
(yyval.node)->right = (yyvsp[(1) - (5)].node); (yyval.node)->right = (yyvsp[(1) - (5)].node);
...@@ -3466,7 +3467,7 @@ yyreduce: ...@@ -3466,7 +3467,7 @@ yyreduce:
break; break;
case 137: case 137:
#line 973 "go.y" #line 974 "go.y"
{ {
yyerror("cannot parenthesize type in composite literal"); yyerror("cannot parenthesize type in composite literal");
(yyval.node) = (yyvsp[(5) - (7)].node); (yyval.node) = (yyvsp[(5) - (7)].node);
...@@ -3476,7 +3477,7 @@ yyreduce: ...@@ -3476,7 +3477,7 @@ yyreduce:
break; break;
case 139: case 139:
#line 982 "go.y" #line 983 "go.y"
{ {
// composite expression. // composite expression.
// make node early so we get the right line number. // make node early so we get the right line number.
...@@ -3485,14 +3486,14 @@ yyreduce: ...@@ -3485,14 +3486,14 @@ yyreduce:
break; break;
case 140: case 140:
#line 990 "go.y" #line 991 "go.y"
{ {
(yyval.node) = nod(OKEY, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); (yyval.node) = nod(OKEY, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
} }
break; break;
case 141: case 141:
#line 996 "go.y" #line 997 "go.y"
{ {
// These nodes do not carry line numbers. // These nodes do not carry line numbers.
// Since a composite literal commonly spans several lines, // Since a composite literal commonly spans several lines,
...@@ -3512,7 +3513,7 @@ yyreduce: ...@@ -3512,7 +3513,7 @@ yyreduce:
break; break;
case 142: case 142:
#line 1013 "go.y" #line 1014 "go.y"
{ {
(yyval.node) = (yyvsp[(2) - (4)].node); (yyval.node) = (yyvsp[(2) - (4)].node);
(yyval.node)->list = (yyvsp[(3) - (4)].list); (yyval.node)->list = (yyvsp[(3) - (4)].list);
...@@ -3520,7 +3521,7 @@ yyreduce: ...@@ -3520,7 +3521,7 @@ yyreduce:
break; break;
case 144: case 144:
#line 1021 "go.y" #line 1022 "go.y"
{ {
(yyval.node) = (yyvsp[(2) - (4)].node); (yyval.node) = (yyvsp[(2) - (4)].node);
(yyval.node)->list = (yyvsp[(3) - (4)].list); (yyval.node)->list = (yyvsp[(3) - (4)].list);
...@@ -3528,7 +3529,7 @@ yyreduce: ...@@ -3528,7 +3529,7 @@ yyreduce:
break; break;
case 146: case 146:
#line 1029 "go.y" #line 1030 "go.y"
{ {
(yyval.node) = (yyvsp[(2) - (3)].node); (yyval.node) = (yyvsp[(2) - (3)].node);
...@@ -3548,21 +3549,21 @@ yyreduce: ...@@ -3548,21 +3549,21 @@ yyreduce:
break; break;
case 150: case 150:
#line 1055 "go.y" #line 1056 "go.y"
{ {
(yyval.i) = LBODY; (yyval.i) = LBODY;
} }
break; break;
case 151: case 151:
#line 1059 "go.y" #line 1060 "go.y"
{ {
(yyval.i) = '{'; (yyval.i) = '{';
} }
break; break;
case 152: case 152:
#line 1070 "go.y" #line 1071 "go.y"
{ {
if((yyvsp[(1) - (1)].sym) == S) if((yyvsp[(1) - (1)].sym) == S)
(yyval.node) = N; (yyval.node) = N;
...@@ -3572,21 +3573,21 @@ yyreduce: ...@@ -3572,21 +3573,21 @@ yyreduce:
break; break;
case 153: case 153:
#line 1079 "go.y" #line 1080 "go.y"
{ {
(yyval.node) = dclname((yyvsp[(1) - (1)].sym)); (yyval.node) = dclname((yyvsp[(1) - (1)].sym));
} }
break; break;
case 154: case 154:
#line 1084 "go.y" #line 1085 "go.y"
{ {
(yyval.node) = N; (yyval.node) = N;
} }
break; break;
case 156: case 156:
#line 1091 "go.y" #line 1092 "go.y"
{ {
(yyval.sym) = (yyvsp[(1) - (1)].sym); (yyval.sym) = (yyvsp[(1) - (1)].sym);
// during imports, unqualified non-exported identifiers are from builtinpkg // during imports, unqualified non-exported identifiers are from builtinpkg
...@@ -3596,14 +3597,14 @@ yyreduce: ...@@ -3596,14 +3597,14 @@ yyreduce:
break; break;
case 158: case 158:
#line 1099 "go.y" #line 1100 "go.y"
{ {
(yyval.sym) = S; (yyval.sym) = S;
} }
break; break;
case 159: case 159:
#line 1105 "go.y" #line 1106 "go.y"
{ {
Pkg *p; Pkg *p;
...@@ -3619,7 +3620,7 @@ yyreduce: ...@@ -3619,7 +3620,7 @@ yyreduce:
break; break;
case 160: case 160:
#line 1120 "go.y" #line 1121 "go.y"
{ {
(yyval.node) = oldname((yyvsp[(1) - (1)].sym)); (yyval.node) = oldname((yyvsp[(1) - (1)].sym));
if((yyval.node)->pack != N) if((yyval.node)->pack != N)
...@@ -3628,7 +3629,7 @@ yyreduce: ...@@ -3628,7 +3629,7 @@ yyreduce:
break; break;
case 162: case 162:
#line 1140 "go.y" #line 1141 "go.y"
{ {
yyerror("final argument in variadic function missing type"); yyerror("final argument in variadic function missing type");
(yyval.node) = nod(ODDD, typenod(typ(TINTER)), N); (yyval.node) = nod(ODDD, typenod(typ(TINTER)), N);
...@@ -3636,35 +3637,35 @@ yyreduce: ...@@ -3636,35 +3637,35 @@ yyreduce:
break; break;
case 163: case 163:
#line 1145 "go.y" #line 1146 "go.y"
{ {
(yyval.node) = nod(ODDD, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(ODDD, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 169: case 169:
#line 1156 "go.y" #line 1157 "go.y"
{ {
(yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N); (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N);
} }
break; break;
case 173: case 173:
#line 1165 "go.y" #line 1166 "go.y"
{ {
(yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 178: case 178:
#line 1175 "go.y" #line 1176 "go.y"
{ {
(yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N); (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N);
} }
break; break;
case 188: case 188:
#line 1196 "go.y" #line 1197 "go.y"
{ {
if((yyvsp[(1) - (3)].node)->op == OPACK) { if((yyvsp[(1) - (3)].node)->op == OPACK) {
Sym *s; Sym *s;
...@@ -3678,14 +3679,14 @@ yyreduce: ...@@ -3678,14 +3679,14 @@ yyreduce:
break; break;
case 189: case 189:
#line 1209 "go.y" #line 1210 "go.y"
{ {
(yyval.node) = nod(OTARRAY, (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node)); (yyval.node) = nod(OTARRAY, (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
} }
break; break;
case 190: case 190:
#line 1213 "go.y" #line 1214 "go.y"
{ {
// array literal of nelem // array literal of nelem
(yyval.node) = nod(OTARRAY, nod(ODDD, N, N), (yyvsp[(4) - (4)].node)); (yyval.node) = nod(OTARRAY, nod(ODDD, N, N), (yyvsp[(4) - (4)].node));
...@@ -3693,7 +3694,7 @@ yyreduce: ...@@ -3693,7 +3694,7 @@ yyreduce:
break; break;
case 191: case 191:
#line 1218 "go.y" #line 1219 "go.y"
{ {
(yyval.node) = nod(OTCHAN, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OTCHAN, (yyvsp[(2) - (2)].node), N);
(yyval.node)->etype = Cboth; (yyval.node)->etype = Cboth;
...@@ -3701,7 +3702,7 @@ yyreduce: ...@@ -3701,7 +3702,7 @@ yyreduce:
break; break;
case 192: case 192:
#line 1223 "go.y" #line 1224 "go.y"
{ {
(yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N); (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
(yyval.node)->etype = Csend; (yyval.node)->etype = Csend;
...@@ -3709,21 +3710,21 @@ yyreduce: ...@@ -3709,21 +3710,21 @@ yyreduce:
break; break;
case 193: case 193:
#line 1228 "go.y" #line 1229 "go.y"
{ {
(yyval.node) = nod(OTMAP, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)); (yyval.node) = nod(OTMAP, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
} }
break; break;
case 196: case 196:
#line 1236 "go.y" #line 1237 "go.y"
{ {
(yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 197: case 197:
#line 1242 "go.y" #line 1243 "go.y"
{ {
(yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N); (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
(yyval.node)->etype = Crecv; (yyval.node)->etype = Crecv;
...@@ -3731,7 +3732,7 @@ yyreduce: ...@@ -3731,7 +3732,7 @@ yyreduce:
break; break;
case 198: case 198:
#line 1249 "go.y" #line 1250 "go.y"
{ {
(yyval.node) = nod(OTSTRUCT, N, N); (yyval.node) = nod(OTSTRUCT, N, N);
(yyval.node)->list = (yyvsp[(3) - (5)].list); (yyval.node)->list = (yyvsp[(3) - (5)].list);
...@@ -3740,7 +3741,7 @@ yyreduce: ...@@ -3740,7 +3741,7 @@ yyreduce:
break; break;
case 199: case 199:
#line 1255 "go.y" #line 1256 "go.y"
{ {
(yyval.node) = nod(OTSTRUCT, N, N); (yyval.node) = nod(OTSTRUCT, N, N);
fixlbrace((yyvsp[(2) - (3)].i)); fixlbrace((yyvsp[(2) - (3)].i));
...@@ -3748,7 +3749,7 @@ yyreduce: ...@@ -3748,7 +3749,7 @@ yyreduce:
break; break;
case 200: case 200:
#line 1262 "go.y" #line 1263 "go.y"
{ {
(yyval.node) = nod(OTINTER, N, N); (yyval.node) = nod(OTINTER, N, N);
(yyval.node)->list = (yyvsp[(3) - (5)].list); (yyval.node)->list = (yyvsp[(3) - (5)].list);
...@@ -3757,7 +3758,7 @@ yyreduce: ...@@ -3757,7 +3758,7 @@ yyreduce:
break; break;
case 201: case 201:
#line 1268 "go.y" #line 1269 "go.y"
{ {
(yyval.node) = nod(OTINTER, N, N); (yyval.node) = nod(OTINTER, N, N);
fixlbrace((yyvsp[(2) - (3)].i)); fixlbrace((yyvsp[(2) - (3)].i));
...@@ -3765,7 +3766,7 @@ yyreduce: ...@@ -3765,7 +3766,7 @@ yyreduce:
break; break;
case 202: case 202:
#line 1279 "go.y" #line 1280 "go.y"
{ {
(yyval.node) = (yyvsp[(2) - (3)].node); (yyval.node) = (yyvsp[(2) - (3)].node);
if((yyval.node) == N) if((yyval.node) == N)
...@@ -3780,7 +3781,7 @@ yyreduce: ...@@ -3780,7 +3781,7 @@ yyreduce:
break; break;
case 203: case 203:
#line 1293 "go.y" #line 1294 "go.y"
{ {
Node *t; Node *t;
...@@ -3812,7 +3813,7 @@ yyreduce: ...@@ -3812,7 +3813,7 @@ yyreduce:
break; break;
case 204: case 204:
#line 1322 "go.y" #line 1323 "go.y"
{ {
Node *rcvr, *t; Node *rcvr, *t;
...@@ -3853,7 +3854,7 @@ yyreduce: ...@@ -3853,7 +3854,7 @@ yyreduce:
break; break;
case 205: case 205:
#line 1362 "go.y" #line 1363 "go.y"
{ {
Sym *s; Sym *s;
Type *t; Type *t;
...@@ -3881,7 +3882,7 @@ yyreduce: ...@@ -3881,7 +3882,7 @@ yyreduce:
break; break;
case 206: case 206:
#line 1387 "go.y" #line 1388 "go.y"
{ {
(yyval.node) = methodname1(newname((yyvsp[(4) - (8)].sym)), (yyvsp[(2) - (8)].list)->n->right); (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)); (yyval.node)->type = functype((yyvsp[(2) - (8)].list)->n, (yyvsp[(6) - (8)].list), (yyvsp[(8) - (8)].list));
...@@ -3900,7 +3901,7 @@ yyreduce: ...@@ -3900,7 +3901,7 @@ yyreduce:
break; break;
case 207: case 207:
#line 1405 "go.y" #line 1406 "go.y"
{ {
(yyvsp[(3) - (5)].list) = checkarglist((yyvsp[(3) - (5)].list), 1); (yyvsp[(3) - (5)].list) = checkarglist((yyvsp[(3) - (5)].list), 1);
(yyval.node) = nod(OTFUNC, N, N); (yyval.node) = nod(OTFUNC, N, N);
...@@ -3910,14 +3911,14 @@ yyreduce: ...@@ -3910,14 +3911,14 @@ yyreduce:
break; break;
case 208: case 208:
#line 1413 "go.y" #line 1414 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 209: case 209:
#line 1417 "go.y" #line 1418 "go.y"
{ {
(yyval.list) = (yyvsp[(2) - (3)].list); (yyval.list) = (yyvsp[(2) - (3)].list);
if((yyval.list) == nil) if((yyval.list) == nil)
...@@ -3926,21 +3927,21 @@ yyreduce: ...@@ -3926,21 +3927,21 @@ yyreduce:
break; break;
case 210: case 210:
#line 1425 "go.y" #line 1426 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 211: case 211:
#line 1429 "go.y" #line 1430 "go.y"
{ {
(yyval.list) = list1(nod(ODCLFIELD, N, (yyvsp[(1) - (1)].node))); (yyval.list) = list1(nod(ODCLFIELD, N, (yyvsp[(1) - (1)].node)));
} }
break; break;
case 212: case 212:
#line 1433 "go.y" #line 1434 "go.y"
{ {
(yyvsp[(2) - (3)].list) = checkarglist((yyvsp[(2) - (3)].list), 0); (yyvsp[(2) - (3)].list) = checkarglist((yyvsp[(2) - (3)].list), 0);
(yyval.list) = (yyvsp[(2) - (3)].list); (yyval.list) = (yyvsp[(2) - (3)].list);
...@@ -3948,14 +3949,14 @@ yyreduce: ...@@ -3948,14 +3949,14 @@ yyreduce:
break; break;
case 213: case 213:
#line 1440 "go.y" #line 1441 "go.y"
{ {
closurehdr((yyvsp[(1) - (1)].node)); closurehdr((yyvsp[(1) - (1)].node));
} }
break; break;
case 214: case 214:
#line 1446 "go.y" #line 1447 "go.y"
{ {
(yyval.node) = closurebody((yyvsp[(3) - (4)].list)); (yyval.node) = closurebody((yyvsp[(3) - (4)].list));
fixlbrace((yyvsp[(2) - (4)].i)); fixlbrace((yyvsp[(2) - (4)].i));
...@@ -3963,21 +3964,21 @@ yyreduce: ...@@ -3963,21 +3964,21 @@ yyreduce:
break; break;
case 215: case 215:
#line 1451 "go.y" #line 1452 "go.y"
{ {
(yyval.node) = closurebody(nil); (yyval.node) = closurebody(nil);
} }
break; break;
case 216: case 216:
#line 1462 "go.y" #line 1463 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 217: case 217:
#line 1466 "go.y" #line 1467 "go.y"
{ {
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list));
if(nsyntaxerrors == 0) if(nsyntaxerrors == 0)
...@@ -3988,56 +3989,56 @@ yyreduce: ...@@ -3988,56 +3989,56 @@ yyreduce:
break; break;
case 219: case 219:
#line 1477 "go.y" #line 1478 "go.y"
{ {
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
} }
break; break;
case 221: case 221:
#line 1484 "go.y" #line 1485 "go.y"
{ {
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
} }
break; break;
case 222: case 222:
#line 1490 "go.y" #line 1491 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 223: case 223:
#line 1494 "go.y" #line 1495 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 225: case 225:
#line 1501 "go.y" #line 1502 "go.y"
{ {
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
} }
break; break;
case 226: case 226:
#line 1507 "go.y" #line 1508 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 227: case 227:
#line 1511 "go.y" #line 1512 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 228: case 228:
#line 1517 "go.y" #line 1518 "go.y"
{ {
NodeList *l; NodeList *l;
...@@ -4063,7 +4064,7 @@ yyreduce: ...@@ -4063,7 +4064,7 @@ yyreduce:
break; break;
case 229: case 229:
#line 1540 "go.y" #line 1541 "go.y"
{ {
(yyvsp[(1) - (2)].node)->val = (yyvsp[(2) - (2)].val); (yyvsp[(1) - (2)].node)->val = (yyvsp[(2) - (2)].val);
(yyval.list) = list1((yyvsp[(1) - (2)].node)); (yyval.list) = list1((yyvsp[(1) - (2)].node));
...@@ -4071,7 +4072,7 @@ yyreduce: ...@@ -4071,7 +4072,7 @@ yyreduce:
break; break;
case 230: case 230:
#line 1545 "go.y" #line 1546 "go.y"
{ {
(yyvsp[(2) - (4)].node)->val = (yyvsp[(4) - (4)].val); (yyvsp[(2) - (4)].node)->val = (yyvsp[(4) - (4)].val);
(yyval.list) = list1((yyvsp[(2) - (4)].node)); (yyval.list) = list1((yyvsp[(2) - (4)].node));
...@@ -4080,7 +4081,7 @@ yyreduce: ...@@ -4080,7 +4081,7 @@ yyreduce:
break; break;
case 231: case 231:
#line 1551 "go.y" #line 1552 "go.y"
{ {
(yyvsp[(2) - (3)].node)->right = nod(OIND, (yyvsp[(2) - (3)].node)->right, N); (yyvsp[(2) - (3)].node)->right = nod(OIND, (yyvsp[(2) - (3)].node)->right, N);
(yyvsp[(2) - (3)].node)->val = (yyvsp[(3) - (3)].val); (yyvsp[(2) - (3)].node)->val = (yyvsp[(3) - (3)].val);
...@@ -4089,7 +4090,7 @@ yyreduce: ...@@ -4089,7 +4090,7 @@ yyreduce:
break; break;
case 232: case 232:
#line 1557 "go.y" #line 1558 "go.y"
{ {
(yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N); (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
(yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val); (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
...@@ -4099,7 +4100,7 @@ yyreduce: ...@@ -4099,7 +4100,7 @@ yyreduce:
break; break;
case 233: case 233:
#line 1564 "go.y" #line 1565 "go.y"
{ {
(yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N); (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
(yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val); (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
...@@ -4109,7 +4110,7 @@ yyreduce: ...@@ -4109,7 +4110,7 @@ yyreduce:
break; break;
case 234: case 234:
#line 1573 "go.y" #line 1574 "go.y"
{ {
Node *n; Node *n;
...@@ -4121,7 +4122,7 @@ yyreduce: ...@@ -4121,7 +4122,7 @@ yyreduce:
break; break;
case 235: case 235:
#line 1582 "go.y" #line 1583 "go.y"
{ {
Pkg *pkg; Pkg *pkg;
...@@ -4137,14 +4138,14 @@ yyreduce: ...@@ -4137,14 +4138,14 @@ yyreduce:
break; break;
case 236: case 236:
#line 1597 "go.y" #line 1598 "go.y"
{ {
(yyval.node) = embedded((yyvsp[(1) - (1)].sym)); (yyval.node) = embedded((yyvsp[(1) - (1)].sym));
} }
break; break;
case 237: case 237:
#line 1603 "go.y" #line 1604 "go.y"
{ {
(yyval.node) = nod(ODCLFIELD, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); (yyval.node) = nod(ODCLFIELD, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
ifacedcl((yyval.node)); ifacedcl((yyval.node));
...@@ -4152,14 +4153,14 @@ yyreduce: ...@@ -4152,14 +4153,14 @@ yyreduce:
break; break;
case 238: case 238:
#line 1608 "go.y" #line 1609 "go.y"
{ {
(yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(1) - (1)].sym))); (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(1) - (1)].sym)));
} }
break; break;
case 239: case 239:
#line 1612 "go.y" #line 1613 "go.y"
{ {
(yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(2) - (3)].sym))); (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(2) - (3)].sym)));
yyerror("cannot parenthesize embedded type"); yyerror("cannot parenthesize embedded type");
...@@ -4167,7 +4168,7 @@ yyreduce: ...@@ -4167,7 +4168,7 @@ yyreduce:
break; break;
case 240: case 240:
#line 1619 "go.y" #line 1620 "go.y"
{ {
// without func keyword // without func keyword
(yyvsp[(2) - (4)].list) = checkarglist((yyvsp[(2) - (4)].list), 1); (yyvsp[(2) - (4)].list) = checkarglist((yyvsp[(2) - (4)].list), 1);
...@@ -4178,7 +4179,7 @@ yyreduce: ...@@ -4178,7 +4179,7 @@ yyreduce:
break; break;
case 242: case 242:
#line 1633 "go.y" #line 1634 "go.y"
{ {
(yyval.node) = nod(ONONAME, N, N); (yyval.node) = nod(ONONAME, N, N);
(yyval.node)->sym = (yyvsp[(1) - (2)].sym); (yyval.node)->sym = (yyvsp[(1) - (2)].sym);
...@@ -4187,7 +4188,7 @@ yyreduce: ...@@ -4187,7 +4188,7 @@ yyreduce:
break; break;
case 243: case 243:
#line 1639 "go.y" #line 1640 "go.y"
{ {
(yyval.node) = nod(ONONAME, N, N); (yyval.node) = nod(ONONAME, N, N);
(yyval.node)->sym = (yyvsp[(1) - (2)].sym); (yyval.node)->sym = (yyvsp[(1) - (2)].sym);
...@@ -4196,56 +4197,56 @@ yyreduce: ...@@ -4196,56 +4197,56 @@ yyreduce:
break; break;
case 245: case 245:
#line 1648 "go.y" #line 1649 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 246: case 246:
#line 1652 "go.y" #line 1653 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 247: case 247:
#line 1657 "go.y" #line 1658 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 248: case 248:
#line 1661 "go.y" #line 1662 "go.y"
{ {
(yyval.list) = (yyvsp[(1) - (2)].list); (yyval.list) = (yyvsp[(1) - (2)].list);
} }
break; break;
case 249: case 249:
#line 1669 "go.y" #line 1670 "go.y"
{ {
(yyval.node) = N; (yyval.node) = N;
} }
break; break;
case 251: case 251:
#line 1674 "go.y" #line 1675 "go.y"
{ {
(yyval.node) = liststmt((yyvsp[(1) - (1)].list)); (yyval.node) = liststmt((yyvsp[(1) - (1)].list));
} }
break; break;
case 253: case 253:
#line 1679 "go.y" #line 1680 "go.y"
{ {
(yyval.node) = N; (yyval.node) = N;
} }
break; break;
case 259: case 259:
#line 1690 "go.y" #line 1691 "go.y"
{ {
(yyvsp[(1) - (2)].node) = nod(OLABEL, (yyvsp[(1) - (2)].node), N); (yyvsp[(1) - (2)].node) = nod(OLABEL, (yyvsp[(1) - (2)].node), N);
(yyvsp[(1) - (2)].node)->sym = dclstack; // context, for goto restrictions (yyvsp[(1) - (2)].node)->sym = dclstack; // context, for goto restrictions
...@@ -4253,7 +4254,7 @@ yyreduce: ...@@ -4253,7 +4254,7 @@ yyreduce:
break; break;
case 260: case 260:
#line 1695 "go.y" #line 1696 "go.y"
{ {
NodeList *l; NodeList *l;
...@@ -4266,7 +4267,7 @@ yyreduce: ...@@ -4266,7 +4267,7 @@ yyreduce:
break; break;
case 261: case 261:
#line 1705 "go.y" #line 1706 "go.y"
{ {
// will be converted to OFALL // will be converted to OFALL
(yyval.node) = nod(OXFALL, N, N); (yyval.node) = nod(OXFALL, N, N);
...@@ -4274,35 +4275,35 @@ yyreduce: ...@@ -4274,35 +4275,35 @@ yyreduce:
break; break;
case 262: case 262:
#line 1710 "go.y" #line 1711 "go.y"
{ {
(yyval.node) = nod(OBREAK, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OBREAK, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 263: case 263:
#line 1714 "go.y" #line 1715 "go.y"
{ {
(yyval.node) = nod(OCONTINUE, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OCONTINUE, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 264: case 264:
#line 1718 "go.y" #line 1719 "go.y"
{ {
(yyval.node) = nod(OPROC, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OPROC, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 265: case 265:
#line 1722 "go.y" #line 1723 "go.y"
{ {
(yyval.node) = nod(ODEFER, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(ODEFER, (yyvsp[(2) - (2)].node), N);
} }
break; break;
case 266: case 266:
#line 1726 "go.y" #line 1727 "go.y"
{ {
(yyval.node) = nod(OGOTO, (yyvsp[(2) - (2)].node), N); (yyval.node) = nod(OGOTO, (yyvsp[(2) - (2)].node), N);
(yyval.node)->sym = dclstack; // context, for goto restrictions (yyval.node)->sym = dclstack; // context, for goto restrictions
...@@ -4310,7 +4311,7 @@ yyreduce: ...@@ -4310,7 +4311,7 @@ yyreduce:
break; break;
case 267: case 267:
#line 1731 "go.y" #line 1732 "go.y"
{ {
(yyval.node) = nod(ORETURN, N, N); (yyval.node) = nod(ORETURN, N, N);
(yyval.node)->list = (yyvsp[(2) - (2)].list); (yyval.node)->list = (yyvsp[(2) - (2)].list);
...@@ -4330,7 +4331,7 @@ yyreduce: ...@@ -4330,7 +4331,7 @@ yyreduce:
break; break;
case 268: case 268:
#line 1750 "go.y" #line 1751 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
if((yyvsp[(1) - (1)].node) != N) if((yyvsp[(1) - (1)].node) != N)
...@@ -4339,7 +4340,7 @@ yyreduce: ...@@ -4339,7 +4340,7 @@ yyreduce:
break; break;
case 269: case 269:
#line 1756 "go.y" #line 1757 "go.y"
{ {
(yyval.list) = (yyvsp[(1) - (3)].list); (yyval.list) = (yyvsp[(1) - (3)].list);
if((yyvsp[(3) - (3)].node) != N) if((yyvsp[(3) - (3)].node) != N)
...@@ -4348,189 +4349,189 @@ yyreduce: ...@@ -4348,189 +4349,189 @@ yyreduce:
break; break;
case 270: case 270:
#line 1764 "go.y" #line 1765 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 271: case 271:
#line 1768 "go.y" #line 1769 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 272: case 272:
#line 1774 "go.y" #line 1775 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 273: case 273:
#line 1778 "go.y" #line 1779 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 274: case 274:
#line 1784 "go.y" #line 1785 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 275: case 275:
#line 1788 "go.y" #line 1789 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 276: case 276:
#line 1794 "go.y" #line 1795 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 277: case 277:
#line 1798 "go.y" #line 1799 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 278: case 278:
#line 1807 "go.y" #line 1808 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 279: case 279:
#line 1811 "go.y" #line 1812 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 280: case 280:
#line 1815 "go.y" #line 1816 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 281: case 281:
#line 1819 "go.y" #line 1820 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 282: case 282:
#line 1824 "go.y" #line 1825 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 283: case 283:
#line 1828 "go.y" #line 1829 "go.y"
{ {
(yyval.list) = (yyvsp[(1) - (2)].list); (yyval.list) = (yyvsp[(1) - (2)].list);
} }
break; break;
case 288: case 288:
#line 1842 "go.y" #line 1843 "go.y"
{ {
(yyval.node) = N; (yyval.node) = N;
} }
break; break;
case 290: case 290:
#line 1848 "go.y" #line 1849 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 292: case 292:
#line 1854 "go.y" #line 1855 "go.y"
{ {
(yyval.node) = N; (yyval.node) = N;
} }
break; break;
case 294: case 294:
#line 1860 "go.y" #line 1861 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 296: case 296:
#line 1866 "go.y" #line 1867 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 298: case 298:
#line 1872 "go.y" #line 1873 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 300: case 300:
#line 1878 "go.y" #line 1879 "go.y"
{ {
(yyval.val).ctype = CTxxx; (yyval.val).ctype = CTxxx;
} }
break; break;
case 302: case 302:
#line 1888 "go.y" #line 1889 "go.y"
{ {
importimport((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].val).u.sval); importimport((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].val).u.sval);
} }
break; break;
case 303: case 303:
#line 1892 "go.y" #line 1893 "go.y"
{ {
importvar((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].type)); importvar((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].type));
} }
break; break;
case 304: case 304:
#line 1896 "go.y" #line 1897 "go.y"
{ {
importconst((yyvsp[(2) - (5)].sym), types[TIDEAL], (yyvsp[(4) - (5)].node)); importconst((yyvsp[(2) - (5)].sym), types[TIDEAL], (yyvsp[(4) - (5)].node));
} }
break; break;
case 305: case 305:
#line 1900 "go.y" #line 1901 "go.y"
{ {
importconst((yyvsp[(2) - (6)].sym), (yyvsp[(3) - (6)].type), (yyvsp[(5) - (6)].node)); importconst((yyvsp[(2) - (6)].sym), (yyvsp[(3) - (6)].type), (yyvsp[(5) - (6)].node));
} }
break; break;
case 306: case 306:
#line 1904 "go.y" #line 1905 "go.y"
{ {
importtype((yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].type)); importtype((yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].type));
} }
break; break;
case 307: case 307:
#line 1908 "go.y" #line 1909 "go.y"
{ {
if((yyvsp[(2) - (4)].node) == N) { if((yyvsp[(2) - (4)].node) == N) {
dclcontext = PEXTERN; // since we skip the funcbody below dclcontext = PEXTERN; // since we skip the funcbody below
...@@ -4551,7 +4552,7 @@ yyreduce: ...@@ -4551,7 +4552,7 @@ yyreduce:
break; break;
case 308: case 308:
#line 1928 "go.y" #line 1929 "go.y"
{ {
(yyval.sym) = (yyvsp[(1) - (1)].sym); (yyval.sym) = (yyvsp[(1) - (1)].sym);
structpkg = (yyval.sym)->pkg; structpkg = (yyval.sym)->pkg;
...@@ -4559,7 +4560,7 @@ yyreduce: ...@@ -4559,7 +4560,7 @@ yyreduce:
break; break;
case 309: case 309:
#line 1935 "go.y" #line 1936 "go.y"
{ {
(yyval.type) = pkgtype((yyvsp[(1) - (1)].sym)); (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
importsym((yyvsp[(1) - (1)].sym), OTYPE); importsym((yyvsp[(1) - (1)].sym), OTYPE);
...@@ -4567,14 +4568,14 @@ yyreduce: ...@@ -4567,14 +4568,14 @@ yyreduce:
break; break;
case 315: case 315:
#line 1955 "go.y" #line 1956 "go.y"
{ {
(yyval.type) = pkgtype((yyvsp[(1) - (1)].sym)); (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
} }
break; break;
case 316: case 316:
#line 1959 "go.y" #line 1960 "go.y"
{ {
// predefined name like uint8 // predefined name like uint8
(yyvsp[(1) - (1)].sym) = pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg); (yyvsp[(1) - (1)].sym) = pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg);
...@@ -4587,49 +4588,49 @@ yyreduce: ...@@ -4587,49 +4588,49 @@ yyreduce:
break; break;
case 317: case 317:
#line 1969 "go.y" #line 1970 "go.y"
{ {
(yyval.type) = aindex(N, (yyvsp[(3) - (3)].type)); (yyval.type) = aindex(N, (yyvsp[(3) - (3)].type));
} }
break; break;
case 318: case 318:
#line 1973 "go.y" #line 1974 "go.y"
{ {
(yyval.type) = aindex(nodlit((yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].type)); (yyval.type) = aindex(nodlit((yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].type));
} }
break; break;
case 319: case 319:
#line 1977 "go.y" #line 1978 "go.y"
{ {
(yyval.type) = maptype((yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].type)); (yyval.type) = maptype((yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].type));
} }
break; break;
case 320: case 320:
#line 1981 "go.y" #line 1982 "go.y"
{ {
(yyval.type) = tostruct((yyvsp[(3) - (4)].list)); (yyval.type) = tostruct((yyvsp[(3) - (4)].list));
} }
break; break;
case 321: case 321:
#line 1985 "go.y" #line 1986 "go.y"
{ {
(yyval.type) = tointerface((yyvsp[(3) - (4)].list)); (yyval.type) = tointerface((yyvsp[(3) - (4)].list));
} }
break; break;
case 322: case 322:
#line 1989 "go.y" #line 1990 "go.y"
{ {
(yyval.type) = ptrto((yyvsp[(2) - (2)].type)); (yyval.type) = ptrto((yyvsp[(2) - (2)].type));
} }
break; break;
case 323: case 323:
#line 1993 "go.y" #line 1994 "go.y"
{ {
(yyval.type) = typ(TCHAN); (yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(2) - (2)].type); (yyval.type)->type = (yyvsp[(2) - (2)].type);
...@@ -4638,7 +4639,7 @@ yyreduce: ...@@ -4638,7 +4639,7 @@ yyreduce:
break; break;
case 324: case 324:
#line 1999 "go.y" #line 2000 "go.y"
{ {
(yyval.type) = typ(TCHAN); (yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (4)].type); (yyval.type)->type = (yyvsp[(3) - (4)].type);
...@@ -4647,7 +4648,7 @@ yyreduce: ...@@ -4647,7 +4648,7 @@ yyreduce:
break; break;
case 325: case 325:
#line 2005 "go.y" #line 2006 "go.y"
{ {
(yyval.type) = typ(TCHAN); (yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (3)].type); (yyval.type)->type = (yyvsp[(3) - (3)].type);
...@@ -4656,7 +4657,7 @@ yyreduce: ...@@ -4656,7 +4657,7 @@ yyreduce:
break; break;
case 326: case 326:
#line 2013 "go.y" #line 2014 "go.y"
{ {
(yyval.type) = typ(TCHAN); (yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (3)].type); (yyval.type)->type = (yyvsp[(3) - (3)].type);
...@@ -4665,14 +4666,14 @@ yyreduce: ...@@ -4665,14 +4666,14 @@ yyreduce:
break; break;
case 327: case 327:
#line 2021 "go.y" #line 2022 "go.y"
{ {
(yyval.type) = functype(nil, (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list)); (yyval.type) = functype(nil, (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list));
} }
break; break;
case 328: case 328:
#line 2027 "go.y" #line 2028 "go.y"
{ {
(yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(2) - (3)].type))); (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(2) - (3)].type)));
if((yyvsp[(1) - (3)].sym)) if((yyvsp[(1) - (3)].sym))
...@@ -4682,7 +4683,7 @@ yyreduce: ...@@ -4682,7 +4683,7 @@ yyreduce:
break; break;
case 329: case 329:
#line 2034 "go.y" #line 2035 "go.y"
{ {
Type *t; Type *t;
...@@ -4699,7 +4700,7 @@ yyreduce: ...@@ -4699,7 +4700,7 @@ yyreduce:
break; break;
case 330: case 330:
#line 2050 "go.y" #line 2051 "go.y"
{ {
Sym *s; Sym *s;
...@@ -4718,49 +4719,49 @@ yyreduce: ...@@ -4718,49 +4719,49 @@ yyreduce:
break; break;
case 331: case 331:
#line 2068 "go.y" #line 2069 "go.y"
{ {
(yyval.node) = nod(ODCLFIELD, newname((yyvsp[(1) - (5)].sym)), typenod(functype(fakethis(), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list)))); (yyval.node) = nod(ODCLFIELD, newname((yyvsp[(1) - (5)].sym)), typenod(functype(fakethis(), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list))));
} }
break; break;
case 332: case 332:
#line 2072 "go.y" #line 2073 "go.y"
{ {
(yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type))); (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type)));
} }
break; break;
case 333: case 333:
#line 2077 "go.y" #line 2078 "go.y"
{ {
(yyval.list) = nil; (yyval.list) = nil;
} }
break; break;
case 335: case 335:
#line 2084 "go.y" #line 2085 "go.y"
{ {
(yyval.list) = (yyvsp[(2) - (3)].list); (yyval.list) = (yyvsp[(2) - (3)].list);
} }
break; break;
case 336: case 336:
#line 2088 "go.y" #line 2089 "go.y"
{ {
(yyval.list) = list1(nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type)))); (yyval.list) = list1(nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type))));
} }
break; break;
case 337: case 337:
#line 2098 "go.y" #line 2099 "go.y"
{ {
(yyval.node) = nodlit((yyvsp[(1) - (1)].val)); (yyval.node) = nodlit((yyvsp[(1) - (1)].val));
} }
break; break;
case 338: case 338:
#line 2102 "go.y" #line 2103 "go.y"
{ {
(yyval.node) = nodlit((yyvsp[(2) - (2)].val)); (yyval.node) = nodlit((yyvsp[(2) - (2)].val));
switch((yyval.node)->val.ctype){ switch((yyval.node)->val.ctype){
...@@ -4778,7 +4779,7 @@ yyreduce: ...@@ -4778,7 +4779,7 @@ yyreduce:
break; break;
case 339: case 339:
#line 2117 "go.y" #line 2118 "go.y"
{ {
(yyval.node) = oldname(pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg)); (yyval.node) = oldname(pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg));
if((yyval.node)->op != OLITERAL) if((yyval.node)->op != OLITERAL)
...@@ -4787,7 +4788,7 @@ yyreduce: ...@@ -4787,7 +4788,7 @@ yyreduce:
break; break;
case 341: case 341:
#line 2126 "go.y" #line 2127 "go.y"
{ {
if((yyvsp[(2) - (5)].node)->val.ctype == CTRUNE && (yyvsp[(4) - (5)].node)->val.ctype == CTINT) { if((yyvsp[(2) - (5)].node)->val.ctype == CTRUNE && (yyvsp[(4) - (5)].node)->val.ctype == CTINT) {
(yyval.node) = (yyvsp[(2) - (5)].node); (yyval.node) = (yyvsp[(2) - (5)].node);
...@@ -4801,42 +4802,42 @@ yyreduce: ...@@ -4801,42 +4802,42 @@ yyreduce:
break; break;
case 344: case 344:
#line 2142 "go.y" #line 2143 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 345: case 345:
#line 2146 "go.y" #line 2147 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 346: case 346:
#line 2152 "go.y" #line 2153 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 347: case 347:
#line 2156 "go.y" #line 2157 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
break; break;
case 348: case 348:
#line 2162 "go.y" #line 2163 "go.y"
{ {
(yyval.list) = list1((yyvsp[(1) - (1)].node)); (yyval.list) = list1((yyvsp[(1) - (1)].node));
} }
break; break;
case 349: case 349:
#line 2166 "go.y" #line 2167 "go.y"
{ {
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
} }
...@@ -4844,7 +4845,7 @@ yyreduce: ...@@ -4844,7 +4845,7 @@ yyreduce:
/* Line 1267 of yacc.c. */ /* Line 1267 of yacc.c. */
#line 4849 "y.tab.c" #line 4850 "y.tab.c"
default: break; default: break;
} }
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
...@@ -5058,7 +5059,7 @@ yyreturn: ...@@ -5058,7 +5059,7 @@ yyreturn:
} }
#line 2170 "go.y" #line 2171 "go.y"
static void static void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment