go/src/cmd/internal/gc/y.go
Russ Cox d0b59deb71 cmd/internal/gc: replace hash tables with Go maps
The C version of the compiler had just one hash table,
indexed by a (name string, pkg *Pkg) pair.
Because we always know the pkg during a lookup,
replace the one table with a per-Pkg map[string]*Sym.
This also lets us do non-allocating []byte key lookups.

This CL *does* change the generated object files.
In the old code, export data and init calls were emitted
in "hash table order". Now they are emitted in the order
in which they were added to the table.

Change-Id: I5a48d5c9add996dc43ad04a905641d901522de0b
Reviewed-on: https://go-review.googlesource.com/6600
Reviewed-by: Rob Pike <r@golang.org>
2015-03-03 20:33:11 +00:00

3529 lines
84 KiB
Go

//line go.y:21
package gc
import __yyfmt__ "fmt"
//line go.y:21
import (
"strings"
)
//line go.y:27
type yySymType struct {
yys int
node *Node
list *NodeList
typ *Type
sym *Sym
val Val
i int
}
const LLITERAL = 57346
const LASOP = 57347
const LCOLAS = 57348
const LBREAK = 57349
const LCASE = 57350
const LCHAN = 57351
const LCONST = 57352
const LCONTINUE = 57353
const LDDD = 57354
const LDEFAULT = 57355
const LDEFER = 57356
const LELSE = 57357
const LFALL = 57358
const LFOR = 57359
const LFUNC = 57360
const LGO = 57361
const LGOTO = 57362
const LIF = 57363
const LIMPORT = 57364
const LINTERFACE = 57365
const LMAP = 57366
const LNAME = 57367
const LPACKAGE = 57368
const LRANGE = 57369
const LRETURN = 57370
const LSELECT = 57371
const LSTRUCT = 57372
const LSWITCH = 57373
const LTYPE = 57374
const LVAR = 57375
const LANDAND = 57376
const LANDNOT = 57377
const LBODY = 57378
const LCOMM = 57379
const LDEC = 57380
const LEQ = 57381
const LGE = 57382
const LGT = 57383
const LIGNORE = 57384
const LINC = 57385
const LLE = 57386
const LLSH = 57387
const LLT = 57388
const LNE = 57389
const LOROR = 57390
const LRSH = 57391
const NotPackage = 57392
const NotParen = 57393
const PreferToRightParen = 57394
var yyToknames = []string{
"LLITERAL",
"LASOP",
"LCOLAS",
"LBREAK",
"LCASE",
"LCHAN",
"LCONST",
"LCONTINUE",
"LDDD",
"LDEFAULT",
"LDEFER",
"LELSE",
"LFALL",
"LFOR",
"LFUNC",
"LGO",
"LGOTO",
"LIF",
"LIMPORT",
"LINTERFACE",
"LMAP",
"LNAME",
"LPACKAGE",
"LRANGE",
"LRETURN",
"LSELECT",
"LSTRUCT",
"LSWITCH",
"LTYPE",
"LVAR",
"LANDAND",
"LANDNOT",
"LBODY",
"LCOMM",
"LDEC",
"LEQ",
"LGE",
"LGT",
"LIGNORE",
"LINC",
"LLE",
"LLSH",
"LLT",
"LNE",
"LOROR",
"LRSH",
"'+'",
"'-'",
"'|'",
"'^'",
"'*'",
"'/'",
"'%'",
"'&'",
"NotPackage",
"NotParen",
"'('",
"')'",
"PreferToRightParen",
}
var yyStatenames = []string{}
const yyEofCode = 1
const yyErrCode = 2
const yyMaxDepth = 200
//line go.y:2242
func fixlbrace(lbr int) {
// If the opening brace was an LBODY,
// set up for another one now that we're done.
// See comment in lex.C about loophack.
if lbr == LBODY {
loophack = 1
}
}
//line yacctab:1
var yyExca = []int{
-1, 1,
1, -1,
-2, 0,
-1, 17,
1, 1,
63, 23,
-2, 0,
-1, 48,
6, 276,
66, 276,
76, 276,
-2, 49,
-1, 56,
67, 153,
-2, 162,
-1, 74,
60, 181,
-2, 215,
-1, 75,
60, 182,
-2, 183,
-1, 121,
60, 134,
64, 134,
68, 134,
72, 134,
-2, 266,
-1, 125,
60, 134,
64, 134,
68, 134,
72, 134,
-2, 267,
-1, 176,
2, 215,
36, 215,
60, 181,
68, 215,
-2, 173,
-1, 177,
36, 183,
60, 182,
68, 183,
-2, 174,
-1, 184,
63, 251,
69, 251,
-2, 0,
-1, 242,
63, 251,
69, 251,
-2, 0,
-1, 252,
8, 251,
13, 251,
63, 251,
69, 251,
-2, 0,
-1, 325,
4, 236,
63, 236,
69, 236,
-2, 157,
-1, 407,
36, 176,
60, 176,
68, 176,
-2, 167,
-1, 408,
36, 177,
60, 177,
68, 177,
-2, 168,
-1, 409,
36, 178,
60, 178,
68, 178,
-2, 169,
-1, 410,
36, 179,
60, 179,
68, 179,
-2, 170,
-1, 416,
8, 251,
13, 251,
63, 251,
69, 251,
-2, 0,
-1, 417,
63, 251,
69, 251,
-2, 0,
-1, 497,
63, 251,
69, 251,
-2, 0,
-1, 552,
60, 157,
-2, 318,
-1, 553,
60, 158,
-2, 317,
-1, 578,
8, 251,
13, 251,
63, 251,
69, 251,
-2, 0,
-1, 592,
36, 180,
60, 180,
68, 180,
-2, 171,
}
const yyNprod = 352
const yyPrivate = 57344
var yyTokenNames []string
var yyStates []string
const yyLast = 2282
var yyAct = []int{
74, 381, 304, 285, 291, 486, 610, 398, 545, 478,
549, 296, 186, 75, 400, 229, 302, 401, 103, 389,
458, 356, 290, 318, 457, 34, 303, 338, 230, 245,
466, 109, 339, 101, 337, 332, 85, 104, 374, 248,
246, 174, 467, 286, 14, 324, 479, 328, 241, 212,
108, 6, 325, 155, 243, 469, 226, 181, 468, 516,
413, 320, 373, 392, 325, 219, 13, 208, 176, 10,
11, 584, 172, 469, 651, 385, 599, 583, 106, 191,
13, 177, 460, 541, 422, 160, 310, 331, 613, 161,
309, 446, 192, 322, 193, 626, 327, 162, 198, 321,
88, 12, 13, 10, 227, 238, 662, 194, 317, 227,
632, 448, 227, 12, 13, 227, 209, 228, 12, 13,
447, 10, 228, 203, 175, 228, 108, 393, 228, 461,
54, 660, 205, 445, 184, 384, 222, 460, 459, 204,
199, 200, 239, 88, 506, 155, 214, 216, 218, 507,
427, 631, 12, 13, 233, 625, 624, 202, 10, 88,
90, 176, 55, 288, 10, 627, 213, 213, 213, 213,
12, 13, 118, 118, 177, 295, 126, 154, 308, 176,
10, 416, 282, 282, 461, 282, 603, 620, 416, 10,
600, 227, 177, 301, 593, 416, 227, 227, 404, 227,
280, 484, 444, 90, 228, 622, 536, 12, 13, 228,
228, 506, 228, 12, 13, 86, 507, 175, 527, 90,
298, 163, 164, 165, 166, 167, 168, 169, 170, 12,
13, 523, 227, 580, 515, 175, 182, 153, 12, 13,
242, 171, 325, 397, 416, 228, 330, 155, 227, 334,
415, 227, 227, 116, 227, 185, 358, 367, 463, 371,
360, 228, 355, 362, 228, 228, 353, 228, 183, 365,
210, 322, 504, 369, 434, 314, 68, 321, 91, 379,
614, 78, 416, 340, 609, 340, 340, 376, 375, 182,
124, 12, 13, 604, 176, 83, 79, 10, 394, 325,
407, 336, 82, 351, 352, 10, 378, 177, 380, 414,
227, 227, 601, 408, 574, 409, 608, 10, 568, 558,
227, 183, 48, 228, 228, 465, 10, 464, 410, 391,
323, 329, 67, 228, 331, 348, 443, 656, 442, 412,
293, 163, 170, 605, 77, 436, 12, 13, 12, 13,
175, 424, 423, 234, 12, 13, 388, 383, 370, 366,
359, 114, 435, 333, 655, 227, 12, 13, 100, 129,
441, 99, 10, 490, 227, 12, 13, 439, 228, 84,
454, 20, 453, 429, 432, 480, 491, 228, 492, 654,
173, 10, 508, 473, 176, 10, 653, 645, 511, 619,
188, 493, 483, 494, 616, 607, 227, 177, 221, 282,
514, 606, 227, 597, 282, 519, 520, 340, 340, 228,
596, 12, 13, 227, 595, 228, 110, 498, 340, 489,
107, 510, 502, 592, 525, 449, 228, 582, 517, 227,
12, 13, 562, 524, 12, 13, 470, 539, 528, 531,
175, 522, 228, 254, 513, 512, 255, 256, 257, 258,
259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
269, 270, 271, 272, 273, 274, 129, 129, 277, 554,
559, 227, 330, 173, 537, 294, 509, 557, 561, 227,
69, 564, 532, 538, 228, 534, 490, 490, 496, 495,
482, 572, 228, 300, 476, 475, 472, 176, 440, 491,
491, 492, 492, 567, 573, 340, 10, 340, 420, 553,
177, 577, 372, 340, 493, 493, 340, 590, 591, 579,
297, 585, 570, 540, 586, 542, 456, 551, 431, 438,
249, 555, 340, 571, 556, 354, 253, 129, 251, 180,
431, 102, 489, 489, 382, 323, 501, 530, 287, 129,
566, 117, 7, 175, 70, 12, 13, 329, 5, 197,
431, 227, 211, 433, 24, 16, 529, 19, 617, 430,
650, 455, 364, 533, 228, 428, 560, 480, 305, 335,
207, 206, 21, 93, 197, 623, 252, 629, 490, 197,
282, 630, 197, 635, 120, 197, 26, 386, 121, 125,
637, 491, 340, 492, 641, 639, 173, 340, 621, 402,
57, 565, 306, 76, 402, 618, 493, 158, 176, 642,
598, 387, 511, 340, 157, 602, 640, 665, 652, 581,
28, 177, 390, 643, 223, 644, 490, 159, 156, 235,
96, 657, 240, 661, 489, 497, 578, 417, 98, 491,
663, 492, 94, 664, 122, 122, 31, 22, 667, 666,
340, 15, 97, 95, 493, 553, 23, 201, 340, 49,
18, 197, 594, 129, 175, 3, 197, 197, 636, 197,
129, 282, 8, 551, 4, 2, 1, 450, 215, 543,
544, 547, 489, 548, 611, 92, 487, 129, 129, 189,
80, 81, 437, 72, 71, 237, 173, 615, 477, 316,
188, 220, 197, 326, 340, 244, 128, 340, 648, 628,
649, 311, 127, 17, 399, 319, 312, 313, 197, 315,
25, 197, 197, 27, 197, 36, 633, 634, 78, 37,
281, 66, 111, 638, 39, 38, 35, 124, 279, 278,
73, 217, 83, 79, 10, 113, 587, 149, 503, 82,
505, 87, 363, 0, 123, 0, 232, 150, 0, 0,
9, 151, 141, 142, 143, 144, 145, 146, 147, 148,
197, 377, 56, 196, 89, 0, 0, 0, 0, 231,
197, 197, 0, 0, 0, 105, 105, 112, 115, 0,
197, 77, 0, 12, 13, 426, 119, 119, 0, 0,
119, 0, 575, 576, 0, 0, 0, 0, 0, 173,
0, 0, 0, 275, 276, 0, 283, 0, 0, 402,
406, 588, 402, 402, 0, 0, 0, 0, 0, 0,
418, 419, 0, 0, 0, 197, 0, 0, 78, 0,
425, 89, 0, 197, 197, 0, 0, 124, 0, 0,
0, 0, 83, 79, 10, 0, 0, 105, 149, 82,
0, 0, 105, 0, 0, 112, 232, 0, 150, 247,
0, 0, 151, 0, 0, 0, 197, 145, 146, 147,
148, 0, 197, 196, 361, 406, 0, 188, 0, 231,
0, 0, 0, 197, 0, 236, 368, 78, 0, 0,
250, 77, 0, 12, 13, 225, 124, 0, 0, 197,
0, 83, 79, 10, 0, 0, 292, 0, 82, 0,
0, 0, 0, 0, 0, 232, 311, 0, 646, 647,
173, 0, 521, 402, 0, 0, 0, 0, 0, 56,
0, 0, 196, 526, 0, 0, 0, 0, 231, 0,
0, 197, 0, 0, 119, 119, 0, 0, 0, 197,
77, 0, 12, 13, 0, 0, 197, 197, 0, 0,
0, 0, 134, 149, 357, 152, 0, 135, 139, 140,
105, 0, 138, 150, 137, 136, 133, 151, 141, 142,
143, 144, 145, 146, 147, 148, 0, 56, 0, 0,
0, 569, 0, 0, 0, 0, 247, 56, 247, 0,
68, 0, 0, 0, 413, 78, 0, 0, 0, 78,
474, 0, 0, 0, 124, 0, 0, 481, 124, 83,
79, 10, 0, 83, 79, 10, 82, 0, 0, 0,
82, 197, 0, 65, 275, 276, 0, 232, 0, 0,
0, 0, 0, 0, 0, 0, 60, 61, 0, 64,
58, 0, 0, 59, 196, 0, 67, 0, 197, 421,
488, 0, 0, 0, 403, 0, 62, 63, 77, 0,
12, 13, 77, 0, 12, 13, 0, 68, 89, 0,
0, 0, 78, 0, 0, 0, 0, 0, 0, 0,
0, 124, 0, 347, 0, 462, 83, 79, 10, 357,
0, 0, 349, 82, 105, 0, 197, 345, 343, 341,
65, 105, 0, 0, 344, 112, 0, 485, 247, 0,
0, 348, 0, 60, 61, 0, 64, 58, 0, 0,
59, 0, 0, 67, 0, 0, 0, 78, 346, 0,
0, 589, 0, 62, 63, 77, 124, 12, 13, 0,
350, 83, 79, 10, 0, 0, 342, 0, 82, 13,
0, 56, 56, 0, 0, 232, 0, 0, 0, 119,
0, 119, 0, 0, 0, 0, 0, 0, 0, 535,
0, 119, 196, 247, 0, 0, 0, 0, 231, 0,
0, 0, 546, 550, 0, 0, 0, 0, 0, 0,
77, 357, 12, 13, 462, 0, 0, 0, 462, 0,
0, 0, 0, 563, 357, 0, 0, 0, 0, 0,
0, 0, 307, 0, 68, 0, 0, 41, 0, 78,
47, 42, 0, 247, 44, 0, 40, 50, 124, 43,
45, 53, 56, 83, 79, 10, 0, 0, 46, 52,
82, 51, 32, 30, 0, 0, 0, 65, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60, 61, 0, 64, 58, 0, 0, 59, 0, 0,
67, 0, 0, 0, 0, 0, 0, 0, 308, 0,
62, 63, 77, 0, 12, 13, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 29, 105, 68, 247, 0, 41, 0, 78,
47, 42, 0, 56, 44, 0, 40, 50, 33, 43,
45, 53, 0, 83, 79, 10, 0, 0, 46, 52,
82, 51, 32, 30, 0, 0, 546, 65, 0, 550,
357, 0, 0, 462, 0, 0, 0, 357, 0, 357,
60, 61, 0, 64, 58, 0, 0, 59, 0, 68,
67, 0, 0, 0, 78, 0, 0, 0, 0, 0,
62, 63, 77, 124, 12, 13, 0, 0, 83, 79,
10, 0, 500, 0, 0, 82, 0, 0, 0, 0,
0, 0, 65, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 60, 61, 0, 64, 58,
0, 0, 59, 0, 68, 67, 0, 0, 0, 78,
0, 0, 0, 0, 0, 62, 63, 77, 124, 12,
13, 0, 0, 83, 79, 10, 0, 499, 0, 0,
82, 0, 0, 0, 0, 0, 0, 65, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60, 61, 0, 64, 58, 0, 0, 59, 0, 68,
67, 0, 0, 0, 78, 0, 0, 0, 299, 0,
62, 63, 77, 124, 12, 13, 0, 124, 83, 79,
10, 0, 83, 79, 10, 82, 0, 395, 0, 82,
0, 0, 179, 0, 0, 0, 232, 0, 0, 0,
0, 0, 68, 0, 0, 60, 61, 78, 64, 178,
0, 0, 59, 196, 0, 67, 124, 0, 0, 231,
0, 83, 79, 10, 0, 62, 63, 77, 82, 12,
13, 77, 0, 12, 13, 179, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 60, 61,
0, 64, 178, 0, 0, 59, 0, 68, 67, 289,
0, 0, 78, 0, 0, 0, 0, 0, 62, 63,
77, 124, 12, 13, 0, 0, 83, 79, 10, 0,
284, 0, 0, 82, 0, 0, 0, 0, 0, 0,
65, 0, 0, 0, 0, 0, 0, 0, 0, 0,
68, 0, 0, 60, 61, 78, 64, 58, 187, 0,
59, 0, 0, 67, 124, 0, 0, 0, 0, 83,
79, 10, 0, 62, 63, 77, 82, 12, 13, 0,
0, 0, 0, 65, 0, 0, 0, 0, 0, 0,
0, 0, 0, 68, 0, 0, 60, 61, 78, 64,
58, 0, 0, 59, 0, 0, 67, 124, 0, 0,
0, 0, 83, 79, 10, 0, 62, 63, 77, 82,
12, 13, 0, 0, 0, 0, 65, 0, 0, 0,
0, 0, 0, 0, 0, 0, 68, 0, 0, 60,
61, 78, 64, 58, 0, 0, 59, 0, 0, 67,
124, 0, 0, 0, 0, 83, 79, 10, 0, 62,
63, 77, 82, 12, 13, 0, 0, 0, 0, 179,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 60, 61, 0, 64, 178, 0, 0, 59,
0, 0, 67, 0, 0, 0, 0, 0, 0, 0,
0, 0, 62, 63, 77, 0, 12, 13, 134, 149,
0, 152, 0, 135, 139, 140, 0, 0, 138, 150,
137, 136, 133, 151, 141, 142, 143, 144, 145, 146,
147, 148, 68, 0, 0, 0, 0, 299, 0, 0,
0, 0, 0, 0, 0, 0, 124, 396, 347, 0,
0, 83, 79, 10, 0, 0, 0, 349, 82, 78,
0, 0, 345, 343, 552, 65, 0, 0, 124, 344,
0, 0, 0, 83, 79, 10, 348, 0, 60, 61,
82, 64, 58, 0, 0, 59, 0, 232, 67, 0,
0, 0, 0, 346, 0, 0, 0, 0, 62, 63,
77, 0, 12, 13, 196, 0, 0, 0, 0, 0,
231, 342, 0, 12, 13, 0, 224, 0, 0, 0,
0, 0, 77, 0, 12, 13, 225, 134, 149, 0,
152, 0, 135, 139, 140, 0, 0, 138, 150, 137,
136, 133, 151, 141, 142, 143, 144, 145, 146, 147,
148, 134, 149, 0, 152, 0, 135, 139, 140, 0,
659, 138, 150, 137, 136, 133, 151, 141, 142, 143,
144, 145, 146, 147, 148, 134, 149, 0, 152, 0,
135, 139, 140, 0, 658, 138, 150, 137, 136, 133,
151, 141, 142, 143, 144, 145, 146, 147, 148, 0,
78, 0, 0, 0, 78, 0, 0, 0, 518, 124,
0, 0, 0, 124, 83, 79, 10, 0, 83, 79,
10, 82, 0, 0, 0, 82, 347, 0, 405, 0,
0, 0, 190, 0, 0, 349, 0, 0, 0, 0,
345, 343, 341, 0, 0, 196, 0, 344, 0, 196,
0, 411, 0, 0, 348, 195, 0, 0, 0, 347,
0, 0, 471, 77, 0, 12, 13, 77, 349, 12,
13, 346, 0, 345, 343, 341, 0, 612, 0, 347,
344, 0, 0, 0, 0, 0, 0, 348, 349, 342,
0, 0, 13, 345, 343, 341, 0, 0, 0, 347,
344, 0, 0, 0, 346, 0, 0, 452, 349, 0,
0, 0, 0, 345, 343, 341, 0, 0, 0, 0,
344, 0, 342, 0, 346, 13, 0, 348, 0, 0,
451, 0, 0, 0, 130, 0, 0, 0, 0, 0,
0, 0, 342, 0, 346, 13, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 342, 134, 149, 13, 152, 132, 135, 139,
140, 0, 131, 138, 150, 137, 136, 133, 151, 141,
142, 143, 144, 145, 146, 147, 148, 134, 149, 0,
152, 0, 135, 139, 140, 0, 0, 138, 150, 137,
136, 133, 151, 141, 142, 143, 144, 145, 146, 147,
148, 134, 149, 0, 0, 0, 135, 139, 140, 0,
0, 138, 150, 137, 136, 133, 151, 141, 142, 143,
144, 145, 146, 147, 148, 134, 149, 0, 0, 0,
135, 139, 140, 0, 0, 138, 150, 137, 136, 0,
151, 141, 142, 143, 144, 145, 146, 147, 148, 149,
0, 0, 0, 135, 139, 140, 0, 0, 138, 150,
137, 136, 0, 151, 141, 142, 143, 144, 145, 146,
147, 148,
}
var yyPact = []int{
-1000, -1000, 542, 536, -1000, 164, -1000, 550, 555, 318,
-1000, -1000, -1000, 588, -1000, -1000, 549, 1340, 316, 155,
-1000, 214, 640, 308, -1000, 305, -1000, -1000, -1000, -1000,
491, 370, 366, 301, -1000, -1000, -1000, -1000, -1000, 186,
-1000, 164, 164, 272, 272, 164, 1689, -1000, 2129, 171,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, 25, 1689, 1689,
1689, 1689, 1689, 1689, 1689, 1689, 173, 1732, -1000, -1000,
-1000, 489, 200, -1000, -1000, -1000, 253, 1646, 1995, 26,
-1000, -1000, 200, 200, -1000, -1000, 96, 536, -1000, 587,
586, 42, 205, -1000, 547, -9, -9, -9, 5, -1000,
-1000, -1000, 347, 1850, -1000, -1000, -1000, 292, 849, -1000,
44, 1158, -1000, 172, 908, 488, -1000, -1000, -1000, -1000,
-1000, -1000, 25, -1000, 486, -1000, -1000, -1000, -23, 2153,
1689, -1000, -1000, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
1689, 1689, 1689, 1689, 1689, 1689, 1603, 1689, 522, 1689,
1548, 280, 1689, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, 469, 2153, -1000, -1000, -1000, -1000, 1732, 1828,
1689, -1000, -1000, -1000, 1250, -1000, 17, 13, 2153, -1000,
1158, -1000, -1000, -1000, -1000, 1158, 1158, 211, 1158, 39,
27, 300, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, 585, 2090, -1000, 1114, 2090, -1000, 172, 485, 164,
297, -1000, -1000, 194, 1689, 164, -1000, -1000, -1000, -1000,
-1000, 1158, 573, 296, -1000, 191, 1689, 295, -1000, -1000,
-1000, -1000, 1250, 461, -14, -1000, -1000, 908, -1000, -1000,
1158, 908, 1250, 908, 2153, 2201, 2224, 732, 732, 732,
732, 732, 732, 843, 843, 843, 843, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, 2177, -23, -23, 2153, -1000, 518,
294, -1000, -1000, 69, 1689, -1000, 293, -1000, -1000, -1000,
51, -1000, -1000, 1505, 1774, 176, 1026, 130, -1000, 1991,
958, 1026, 181, -1000, -1000, -1000, -1000, -1000, -1000, 1158,
1158, -1000, 457, -1000, 164, 11, 288, -1000, -1000, 739,
581, 525, 513, -1000, -1000, 210, 282, -1000, -1000, 479,
-1000, 545, 447, 139, -1000, 275, 273, -1000, -1000, -1000,
-1000, -1000, 129, 19, 52, 43, 2090, 2070, 572, 476,
78, 192, 264, 262, 164, -3, -1000, 2050, 445, 164,
1689, -23, -1000, 444, 1158, 443, 164, 1689, -23, 439,
164, 132, 1030, 908, -1000, -1000, -1000, -1000, 438, -1000,
437, -1000, -1000, 1689, 1450, 1395, 2153, 520, 1689, 203,
518, 425, -16, 1732, 394, 393, -1000, 1689, 165, -17,
-1000, -1000, 1941, -1000, -1000, 1509, -1000, -1000, -1000, -1000,
-1000, 1158, 390, -1000, 162, -1000, 1250, 1250, -1000, -1000,
-1000, -1000, 1158, 149, 217, 581, 164, -1000, -1000, 388,
545, 210, 581, 545, 164, 137, 274, -1000, 908, 386,
-1000, -1000, -1000, -1000, 2090, 10, 2090, 164, 1839, -1000,
-1000, 298, 2090, -1000, -1000, 2090, 164, 256, -1000, 133,
-1000, 582, -1000, 78, -1000, -1000, 381, -21, 164, 164,
581, 2090, -1000, -1000, -23, -1000, -1000, 255, -1000, -1000,
849, -23, -1000, -1000, -1000, 472, -1000, -1000, 908, -1000,
-1000, -1000, -1000, -1000, -1000, 1030, 1030, 1250, 251, 1689,
1689, -1000, -1000, -1000, -1000, -1000, 1732, 166, -1000, -1000,
376, -1000, -1000, -1000, 4, -1000, 1026, -1000, 1103, 1026,
1026, 372, -1000, -1000, -1000, 125, -1000, -1000, -1000, -1000,
-1000, 581, 363, -1000, 359, -1000, -1000, -1000, 352, -1000,
-1000, 2090, 3, 121, 249, -1000, 2090, 117, 230, -1000,
283, -1000, -1000, -1000, 350, -1000, -1000, 344, -1000, 266,
-1000, 221, 2017, 220, -1000, -1000, 581, 343, 164, 191,
908, 338, -1000, 118, 1689, 2153, 2153, 136, 1250, 89,
-1000, -1000, -1000, -1000, 1689, -1000, -1000, -1000, 2153, -1000,
82, 41, -1000, -1000, -1000, 581, 581, 1030, -1000, 2090,
-1000, 164, 581, -1000, 1839, 164, -1000, 2017, 133, -1000,
-1000, -1000, 164, -1000, 164, -1000, -1000, -1000, 336, -1000,
-1000, -1000, -1000, 219, -1000, 1689, 1689, 1732, 565, 1,
1026, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
335, -1000, 328, 303, 276, 1030, 1917, 1893, -1000, -1000,
110, -1000, 37, 2017, -1000, -1000, 2017, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, 1689, 518, -1000,
}
var yyPgo = []int{
0, 57, 771, 774, 45, 150, 26, 540, 29, 770,
768, 2, 28, 61, 322, 766, 17, 4, 765, 761,
760, 759, 758, 756, 3, 755, 622, 47, 14, 754,
490, 40, 41, 130, 37, 12, 752, 561, 43, 620,
751, 564, 750, 749, 25, 745, 162, 743, 31, 11,
740, 48, 5, 1, 18, 735, 679, 734, 7, 22,
733, 732, 19, 730, 729, 728, 16, 54, 725, 723,
33, 721, 23, 719, 588, 46, 9, 718, 715, 714,
713, 39, 712, 711, 710, 15, 56, 709, 13, 706,
0, 70, 49, 24, 20, 21, 10, 8, 704, 6,
42, 30, 703, 701, 700, 699, 88, 34, 698, 32,
27, 697, 696, 695, 694, 692, 685, 51, 44, 680,
36, 677, 35, 676, 671, 667, 666, 657, 656, 655,
648, 647, 642, 639, 637, 634, 631, 627, 38, 623,
596, 593,
}
var yyR1 = []int{
0, 112, 114, 114, 116, 113, 115, 115, 119, 119,
119, 120, 120, 121, 121, 2, 2, 2, 117, 123,
123, 124, 118, 50, 50, 50, 50, 50, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74, 126, 70,
70, 70, 75, 75, 76, 76, 76, 36, 48, 44,
44, 44, 44, 44, 44, 9, 9, 9, 9, 127,
11, 128, 10, 62, 62, 129, 53, 42, 42, 42,
22, 22, 22, 21, 130, 23, 24, 24, 131, 132,
133, 25, 134, 63, 64, 64, 65, 65, 135, 136,
45, 137, 43, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 46, 46, 46, 46, 46, 46,
46, 46, 46, 41, 41, 41, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
49, 28, 16, 16, 15, 15, 39, 39, 17, 17,
31, 1, 1, 33, 34, 37, 37, 3, 3, 3,
91, 91, 30, 29, 81, 81, 7, 7, 7, 7,
7, 7, 32, 32, 32, 32, 87, 87, 87, 87,
87, 79, 79, 80, 89, 89, 89, 89, 89, 12,
12, 88, 88, 88, 88, 88, 88, 88, 85, 86,
84, 84, 83, 83, 47, 18, 18, 19, 19, 90,
51, 51, 52, 52, 52, 139, 20, 20, 60, 60,
71, 71, 77, 77, 78, 78, 73, 73, 69, 69,
72, 72, 72, 72, 72, 72, 4, 4, 13, 27,
27, 27, 82, 8, 8, 8, 8, 68, 68, 67,
67, 6, 6, 6, 6, 6, 26, 26, 26, 26,
26, 140, 26, 26, 26, 26, 26, 26, 26, 26,
66, 66, 55, 55, 54, 54, 56, 56, 59, 59,
57, 57, 57, 57, 58, 58, 122, 122, 138, 138,
35, 35, 61, 61, 38, 38, 101, 101, 105, 105,
103, 103, 5, 5, 141, 141, 141, 141, 141, 141,
92, 108, 106, 106, 106, 111, 111, 107, 107, 107,
107, 107, 107, 107, 107, 107, 107, 107, 110, 109,
95, 95, 97, 96, 96, 99, 99, 98, 98, 94,
94, 94, 93, 93, 125, 125, 100, 100, 104, 104,
102, 102,
}
var yyR2 = []int{
0, 4, 0, 3, 0, 3, 0, 3, 2, 5,
3, 3, 2, 1, 3, 1, 2, 2, 4, 0,
1, 0, 4, 0, 1, 1, 1, 1, 2, 5,
3, 2, 5, 7, 3, 2, 5, 3, 1, 2,
4, 3, 4, 3, 1, 2, 1, 1, 2, 1,
3, 3, 3, 2, 2, 3, 5, 5, 2, 0,
4, 0, 3, 0, 2, 0, 4, 4, 4, 2,
5, 1, 1, 2, 0, 3, 1, 3, 0, 0,
0, 8, 0, 5, 0, 2, 0, 2, 0, 0,
7, 0, 5, 1, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 1, 2, 2, 2, 2, 2,
2, 2, 2, 3, 5, 6, 1, 1, 3, 5,
5, 4, 6, 8, 1, 5, 5, 5, 7, 1,
0, 3, 1, 4, 1, 4, 1, 3, 1, 1,
1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
4, 4, 1, 1, 1, 2, 1, 1, 1, 1,
1, 3, 1, 1, 1, 2, 1, 1, 1, 1,
3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3, 4, 4, 2, 3, 5, 1, 1, 2, 3,
5, 3, 5, 3, 3, 5, 8, 5, 8, 5,
0, 3, 0, 1, 3, 1, 4, 2, 0, 3,
1, 3, 1, 3, 1, 3, 1, 3, 1, 3,
3, 2, 4, 3, 5, 5, 1, 3, 1, 2,
1, 3, 4, 1, 2, 2, 1, 1, 3, 0,
2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 4, 1, 2, 2, 2, 2, 2, 2,
1, 3, 1, 3, 1, 3, 1, 3, 1, 3,
1, 1, 3, 3, 0, 2, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 4, 4, 5, 6, 4, 4,
1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
4, 5, 4, 4, 2, 2, 4, 3, 3, 5,
3, 4, 3, 5, 1, 0, 1, 3, 1, 1,
2, 1, 1, 5, 0, 2, 1, 3, 1, 3,
1, 3,
}
var yyChk = []int{
-1000, -112, -113, -116, -114, 26, -117, 26, -115, -3,
25, -91, 74, 75, -118, -124, 25, -60, -119, 22,
63, 4, -125, -123, 25, -50, -74, -47, -26, 2,
33, -126, 32, 18, -44, -23, -45, -43, -25, -29,
16, 7, 11, 19, 14, 20, 28, 10, -14, -56,
17, 31, 29, 21, -33, -46, -3, -39, 54, 57,
50, 51, 70, 71, 53, 37, -40, 60, 4, -30,
-41, -79, -80, -20, -90, -88, -139, 72, 9, 24,
-84, -83, 30, 23, 63, -120, 60, -2, 4, -3,
64, 64, 65, -141, 22, 33, 10, 32, 18, 63,
63, -70, 60, -54, -34, -3, -75, 60, -54, -48,
60, -36, -3, -18, 60, -3, 67, -37, -33, -3,
-37, -41, -39, -3, 18, -41, -33, -61, -56, -14,
5, 43, 38, 48, 34, 39, 47, 46, 44, 40,
41, 50, 51, 52, 53, 54, 55, 56, 57, 35,
45, 49, 37, 66, 6, 76, -130, -135, -137, -131,
60, 64, 72, -46, -46, -46, -46, -46, -46, -46,
-46, 68, -17, -14, -32, -86, -90, -88, 54, 37,
60, -1, 36, 68, -1, 2, -35, 12, -14, -87,
37, -90, -88, -85, -12, 60, 54, -30, 72, -1,
-1, -121, 61, -120, -117, -118, 4, 4, 25, 74,
65, 25, -92, -91, -92, -108, -92, -19, -92, 60,
-71, 61, -70, -7, 66, 76, -86, -90, -88, -85,
-12, 60, 37, -75, 61, -7, 66, -78, 61, -48,
-7, -51, 68, -67, -68, -8, -31, -3, -81, -7,
12, 60, -140, 60, -14, -14, -14, -14, -14, -14,
-14, -14, -14, -14, -14, -14, -14, -14, -14, -14,
-14, -14, -14, -14, -14, -56, -56, -14, -21, -22,
-38, -42, -44, -56, 27, -24, -38, 36, -24, 61,
-59, -17, -3, 60, -14, -35, -49, 61, -32, 9,
-14, -49, -66, -6, -11, -74, -26, 2, 68, 73,
73, -7, -7, -7, 64, -7, -73, 69, -72, -55,
-13, 60, 54, -33, -4, 25, -69, 69, -27, -33,
-4, 60, -122, 63, -118, 4, -106, -107, -110, -109,
-91, 25, 72, 24, 30, 23, 54, 9, 37, 18,
66, -106, -106, -51, 60, -100, -95, -3, -122, 63,
66, -56, -34, -7, 9, -122, 63, 66, -56, -122,
63, -66, 61, 76, -138, -31, -81, -7, -67, -6,
-67, -53, 36, 63, 66, 6, -14, -136, 63, -62,
-132, -138, 12, 76, -17, 32, 73, 67, -58, -57,
-28, -16, -14, 68, 68, 37, -7, -90, -88, -85,
-12, 60, -138, 76, -58, 69, 63, -127, -7, -7,
61, -3, 73, -122, 63, -7, 76, -5, 4, -13,
54, 25, -13, 60, 64, -122, 63, -82, 60, -4,
61, -120, 63, 63, 73, 4, 72, 68, 68, -106,
-111, 60, 37, -107, -109, 9, 60, -93, -94, 60,
4, 51, -3, 66, 63, 63, -101, -100, 61, 76,
-106, 12, 61, -70, -56, 61, 61, -77, -76, -75,
-54, -56, 61, -48, 69, -3, -52, -89, 60, -86,
-90, -88, -85, -12, -8, 61, 61, -129, -38, 27,
27, 36, -38, -10, 69, -9, 8, 13, -53, 61,
-138, -17, 61, 61, -35, 69, 76, -138, 67, -49,
-49, -7, 61, 69, -6, -66, -7, 69, -72, -5,
-33, 61, -13, -5, -13, -3, 69, -27, -67, 61,
-106, 73, -106, -105, -104, -97, -3, -103, -102, -96,
-3, -106, 25, -91, -110, -106, -106, -101, 63, -94,
4, -93, 61, -3, -95, -5, -106, -122, 63, -7,
60, -67, -52, -66, 63, -14, -14, -62, -128, -59,
67, -133, 61, 73, 67, -28, -16, -15, -14, 68,
-58, -58, 61, 69, -5, 61, 61, 61, -106, 73,
69, 63, -106, 69, 63, 60, 61, 61, 50, 63,
-99, -98, 60, -106, 60, -5, 61, -76, -67, 61,
69, -38, 69, -66, 67, 66, 6, 76, -64, -35,
-49, 69, 69, -5, -5, -52, -106, -97, -5, -96,
-101, -99, -94, -101, -101, 61, -14, -14, -65, -63,
15, 73, -58, 61, 61, 61, 61, -52, 67, 67,
21, -11, 69, -99, -99, -134, -24, -53,
}
var yyDef = []int{
4, -2, 2, 0, 6, 0, 21, 0, 218, 0,
157, 158, 159, 0, 5, 344, 19, -2, 0, 0,
3, 0, 0, 0, 20, 0, 24, 25, 26, 27,
0, 0, 0, 0, 256, 257, 258, 259, 260, 0,
263, 155, 155, 0, 0, 0, 292, 38, -2, 0,
74, 88, 91, 78, 163, 93, -2, 114, 0, 0,
0, 0, 0, 0, 0, 0, 146, 0, 126, 127,
134, 0, 0, 139, -2, -2, 0, 290, 0, 0,
196, 197, 0, 0, 7, 8, 0, 21, 15, 0,
0, 0, 0, 345, 0, 0, 0, 0, 0, 18,
219, 28, 0, 0, 274, 154, 31, 0, 0, 35,
0, 0, 47, 210, 249, 0, 261, 264, 156, 153,
265, -2, 0, 162, 0, -2, 268, 269, 293, 276,
0, 53, 54, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 294, 294, 0, 294,
0, 0, 290, 115, 116, 117, 118, 119, 120, 121,
122, 140, 0, 148, 149, 172, -2, -2, 0, 0,
0, 140, 151, 152, -2, 217, 0, 0, 291, 193,
0, 176, 177, 178, 179, 0, 0, 189, 0, 0,
0, 286, 10, 13, 21, 12, 16, 17, 160, 161,
22, 0, 0, 310, 0, 0, 311, 210, 0, 0,
286, 30, 220, 39, 0, 0, 166, 167, 168, 169,
170, 0, 0, 286, 34, 0, 0, 286, 37, 224,
48, 204, -2, 0, 288, 247, 243, 162, 246, 150,
164, 249, -2, 249, 50, 94, 95, 96, 97, 98,
99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
109, 110, 111, 112, 113, 51, 52, 277, 75, 0,
71, 72, 295, 0, 0, 89, 76, 63, 79, 123,
288, 278, 128, 0, 291, 0, 284, 147, 175, 0,
288, 284, 0, 270, 252, 253, 254, 255, 59, 0,
0, 194, 0, 198, 0, 0, 286, 201, 226, 0,
302, 0, 0, 272, 238, -2, 286, 203, 228, 0,
240, 0, 0, 287, 11, 0, 0, 312, 313, 314,
317, 318, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 296, 0, 346, 0, 0, 287,
0, 41, 275, 0, 0, 0, 287, 0, 43, 0,
287, 0, 212, 289, 250, 244, 245, 165, 0, 262,
0, 73, 65, 294, 0, 0, 69, 0, 294, 0,
0, 0, 288, 289, 0, 0, 131, 290, 0, 288,
280, 281, 142, 140, 140, 0, 199, -2, -2, -2,
-2, 0, 0, 289, 0, 216, -2, -2, 191, 192,
180, 190, 0, 0, 287, 302, 0, 231, 303, 0,
0, 236, 302, 0, 0, 0, 287, 239, 249, 0,
9, 14, 304, 305, 0, 0, 0, 298, 300, 324,
325, 0, 0, 315, 316, 0, 296, 0, 342, 0,
339, 0, 341, 0, 308, 309, 0, 297, 0, 0,
302, 0, 29, 221, 40, 171, 32, 286, 222, 44,
46, 42, 36, 225, 211, 162, 209, 213, 249, 184,
185, 186, 187, 188, 248, 212, 212, -2, 0, 0,
0, 63, 77, 64, 92, 61, 0, 0, 80, 124,
0, 279, 129, 130, 0, 137, 289, 285, 0, 284,
284, 0, 135, 136, 271, 0, 195, 200, 227, 230,
273, 302, 0, 233, 0, 237, 202, 229, 0, 241,
319, 0, 0, 0, 299, 348, 0, 0, 301, 350,
0, 334, -2, -2, 0, 327, 328, 0, 306, 0,
340, 0, 335, 0, 347, 330, 302, 0, 287, 45,
249, 0, 205, 0, 294, 67, 68, 0, -2, 0,
58, 84, 125, 132, 290, 282, 283, 141, 144, 140,
0, 0, -2, 60, 232, 302, 302, 212, 320, 0,
322, 0, 302, 323, 0, 296, 326, 335, 0, 307,
207, 336, 296, 338, 296, 331, 33, 223, 0, 214,
66, 70, 90, 62, 55, 0, 0, 0, 86, 0,
284, 143, 138, 234, 235, 242, 321, 349, 332, 351,
0, 329, 0, 0, 0, 212, 0, 0, 81, 85,
0, 133, 0, 335, 343, 337, 335, 206, 56, 57,
82, 87, 145, 333, 208, 294, 0, 83,
}
var yyTok1 = []int{
1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 70, 3, 3, 65, 56, 57, 3,
60, 61, 54, 50, 76, 51, 64, 55, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 67, 63,
3, 66, 3, 74, 75, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 72, 3, 73, 53, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 68, 52, 69, 71,
}
var yyTok2 = []int{
2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 58, 59,
62,
}
var yyTok3 = []int{
0,
}
//line yaccpar:1
/* parser for yacc output */
var yyDebug = 0
type yyLexer interface {
Lex(lval *yySymType) int
Error(s string)
}
type yyParser interface {
Parse(yyLexer) int
Lookahead() int
}
type yyParserImpl struct {
lookahead func() int
}
func (p *yyParserImpl) Lookahead() int {
return p.lookahead()
}
func yyNewParser() yyParser {
p := &yyParserImpl{
lookahead: func() int { return -1 },
}
return p
}
const yyFlag = -1000
func yyTokname(c int) string {
// 4 is TOKSTART above
if c >= 4 && c-4 < len(yyToknames) {
if yyToknames[c-4] != "" {
return yyToknames[c-4]
}
}
return __yyfmt__.Sprintf("tok-%v", c)
}
func yyStatname(s int) string {
if s >= 0 && s < len(yyStatenames) {
if yyStatenames[s] != "" {
return yyStatenames[s]
}
}
return __yyfmt__.Sprintf("state-%v", s)
}
func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
token = 0
char = lex.Lex(lval)
if char <= 0 {
token = yyTok1[0]
goto out
}
if char < len(yyTok1) {
token = yyTok1[char]
goto out
}
if char >= yyPrivate {
if char < yyPrivate+len(yyTok2) {
token = yyTok2[char-yyPrivate]
goto out
}
}
for i := 0; i < len(yyTok3); i += 2 {
token = yyTok3[i+0]
if token == char {
token = yyTok3[i+1]
goto out
}
}
out:
if token == 0 {
token = yyTok2[1] /* unknown char */
}
if yyDebug >= 3 {
__yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
}
return char, token
}
func yyParse(yylex yyLexer) int {
return yyNewParser().Parse(yylex)
}
func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
var yyn int
var yylval yySymType
var yyVAL yySymType
var yyDollar []yySymType
yyS := make([]yySymType, yyMaxDepth)
Nerrs := 0 /* number of errors */
Errflag := 0 /* error recovery flag */
yystate := 0
yychar := -1
yytoken := -1 // yychar translated into internal numbering
yyrcvr.lookahead = func() int { return yychar }
defer func() {
// Make sure we report no lookahead when not parsing.
yychar = -1
yytoken = -1
}()
yyp := -1
goto yystack
ret0:
return 0
ret1:
return 1
yystack:
/* put a state and value onto the stack */
if yyDebug >= 4 {
__yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
}
yyp++
if yyp >= len(yyS) {
nyys := make([]yySymType, len(yyS)*2)
copy(nyys, yyS)
yyS = nyys
}
yyS[yyp] = yyVAL
yyS[yyp].yys = yystate
yynewstate:
yyn = yyPact[yystate]
if yyn <= yyFlag {
goto yydefault /* simple state */
}
if yychar < 0 {
yychar, yytoken = yylex1(yylex, &yylval)
}
yyn += yytoken
if yyn < 0 || yyn >= yyLast {
goto yydefault
}
yyn = yyAct[yyn]
if yyChk[yyn] == yytoken { /* valid shift */
yychar = -1
yytoken = -1
yyVAL = yylval
yystate = yyn
if Errflag > 0 {
Errflag--
}
goto yystack
}
yydefault:
/* default state action */
yyn = yyDef[yystate]
if yyn == -2 {
if yychar < 0 {
yychar, yytoken = yylex1(yylex, &yylval)
}
/* look through exception table */
xi := 0
for {
if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate {
break
}
xi += 2
}
for xi += 2; ; xi += 2 {
yyn = yyExca[xi+0]
if yyn < 0 || yyn == yytoken {
break
}
}
yyn = yyExca[xi+1]
if yyn < 0 {
goto ret0
}
}
if yyn == 0 {
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
yylex.Error("syntax error")
Nerrs++
if yyDebug >= 1 {
__yyfmt__.Printf("%s", yyStatname(yystate))
__yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
}
fallthrough
case 1, 2: /* incompletely recovered error ... try again */
Errflag = 3
/* find a state where "error" is a legal shift action */
for yyp >= 0 {
yyn = yyPact[yyS[yyp].yys] + yyErrCode
if yyn >= 0 && yyn < yyLast {
yystate = yyAct[yyn] /* simulate a shift of "error" */
if yyChk[yystate] == yyErrCode {
goto yystack
}
}
/* the current p has no shift on "error", pop stack */
if yyDebug >= 2 {
__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
}
yyp--
}
/* there is no state on the stack with an error shift ... abort */
goto ret1
case 3: /* no shift yet; clobber input char */
if yyDebug >= 2 {
__yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
}
if yytoken == yyEofCode {
goto ret1
}
yychar = -1
yytoken = -1
goto yynewstate /* try again in the same state */
}
}
/* reduction by production yyn */
if yyDebug >= 2 {
__yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
}
yynt := yyn
yypt := yyp
_ = yypt // guard against "declared and not used"
yyp -= yyR2[yyn]
// yyp is now the index of $0. Perform the default action. Iff the
// reduced production is ε, $1 is possibly out of range.
if yyp+1 >= len(yyS) {
nyys := make([]yySymType, len(yyS)*2)
copy(nyys, yyS)
yyS = nyys
}
yyVAL = yyS[yyp+1]
/* consult goto table to find next state */
yyn = yyR1[yyn]
yyg := yyPgo[yyn]
yyj := yyg + yyS[yyp].yys + 1
if yyj >= yyLast {
yystate = yyAct[yyg]
} else {
yystate = yyAct[yyj]
if yyChk[yystate] != -yyn {
yystate = yyAct[yyg]
}
}
// dummy call; replaced with literal code
switch yynt {
case 1:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:127
{
xtop = concat(xtop, yyDollar[4].list)
}
case 2:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:133
{
prevlineno = lineno
Yyerror("package statement must be first")
errorexit()
}
case 3:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:139
{
mkpackage(yyDollar[2].sym.Name)
}
case 4:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:149
{
importpkg = Runtimepkg
if Debug['A'] != 0 {
cannedimports("runtime.Builtin", "package runtime\n\n$$\n\n")
} else {
cannedimports("runtime.Builtin", runtimeimport)
}
curio.importsafe = true
}
case 5:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:161
{
importpkg = nil
}
case 11:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:175
{
ipkg := importpkg
my := importmyname
importpkg = nil
importmyname = nil
if my == nil {
my = Lookup(ipkg.Name)
}
pack := Nod(OPACK, nil, nil)
pack.Sym = my
pack.Pkg = ipkg
pack.Lineno = int32(yyDollar[1].i)
if strings.HasPrefix(my.Name, ".") {
importdot(ipkg, pack)
break
}
if my.Name == "init" {
Yyerror("cannot import package as init - init must be a func")
break
}
if my.Name == "_" {
break
}
if my.Def != nil {
lineno = int32(yyDollar[1].i)
redeclare(my, "as imported package name")
}
my.Def = pack
my.Lastlineno = int32(yyDollar[1].i)
my.Block = 1 // at top level
}
case 12:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:210
{
// When an invalid import path is passed to importfile,
// it calls Yyerror and then sets up a fake import with
// no package statement. This allows us to test more
// than one invalid import statement in a single file.
if nerrors == 0 {
Fatal("phase error in import")
}
}
case 15:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:226
{
// import with original name
yyVAL.i = parserline()
importmyname = nil
importfile(&yyDollar[1].val, yyVAL.i)
}
case 16:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:233
{
// import with given name
yyVAL.i = parserline()
importmyname = yyDollar[1].sym
importfile(&yyDollar[2].val, yyVAL.i)
}
case 17:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:240
{
// import into my name space
yyVAL.i = parserline()
importmyname = Lookup(".")
importfile(&yyDollar[2].val, yyVAL.i)
}
case 18:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:249
{
if importpkg.Name == "" {
importpkg.Name = yyDollar[2].sym.Name
numImport[yyDollar[2].sym.Name]++
} else if importpkg.Name != yyDollar[2].sym.Name {
Yyerror("conflicting names %s and %s for package %q", importpkg.Name, yyDollar[2].sym.Name, importpkg.Path)
}
importpkg.Direct = 1
importpkg.Safe = curio.importsafe
if safemode != 0 && !curio.importsafe {
Yyerror("cannot import unsafe package %q", importpkg.Path)
}
}
case 20:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:266
{
if yyDollar[1].sym.Name == "safe" {
curio.importsafe = true
}
}
case 21:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:273
{
defercheckwidth()
}
case 22:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:277
{
resumecheckwidth()
unimportfile()
}
case 23:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:286
{
Yyerror("empty top-level declaration")
yyVAL.list = nil
}
case 24:
yyVAL.list = yyS[yypt-0].list
case 25:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:292
{
yyVAL.list = list1(yyDollar[1].node)
}
case 26:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:296
{
Yyerror("non-declaration statement outside function body")
yyVAL.list = nil
}
case 27:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:301
{
yyVAL.list = nil
}
case 28:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:307
{
yyVAL.list = yyDollar[2].list
}
case 29:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:311
{
yyVAL.list = yyDollar[3].list
}
case 30:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:315
{
yyVAL.list = nil
}
case 31:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:319
{
yyVAL.list = yyDollar[2].list
iota_ = -100000
lastconst = nil
}
case 32:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:325
{
yyVAL.list = yyDollar[3].list
iota_ = -100000
lastconst = nil
}
case 33:
yyDollar = yyS[yypt-7 : yypt+1]
//line go.y:331
{
yyVAL.list = concat(yyDollar[3].list, yyDollar[5].list)
iota_ = -100000
lastconst = nil
}
case 34:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:337
{
yyVAL.list = nil
iota_ = -100000
}
case 35:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:342
{
yyVAL.list = list1(yyDollar[2].node)
}
case 36:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:346
{
yyVAL.list = yyDollar[3].list
}
case 37:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:350
{
yyVAL.list = nil
}
case 38:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:356
{
iota_ = 0
}
case 39:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:362
{
yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, nil)
}
case 40:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:366
{
yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list)
}
case 41:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:370
{
yyVAL.list = variter(yyDollar[1].list, nil, yyDollar[3].list)
}
case 42:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:376
{
yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list)
}
case 43:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:380
{
yyVAL.list = constiter(yyDollar[1].list, nil, yyDollar[3].list)
}
case 44:
yyVAL.list = yyS[yypt-0].list
case 45:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:387
{
yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, nil)
}
case 46:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:391
{
yyVAL.list = constiter(yyDollar[1].list, nil, nil)
}
case 47:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:397
{
// different from dclname because the name
// becomes visible right here, not at the end
// of the declaration.
yyVAL.node = typedcl0(yyDollar[1].sym)
}
case 48:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:406
{
yyVAL.node = typedcl1(yyDollar[1].node, yyDollar[2].node, 1)
}
case 49:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:412
{
yyVAL.node = yyDollar[1].node
// These nodes do not carry line numbers.
// Since a bare name used as an expression is an error,
// introduce a wrapper node to give the correct line.
switch yyVAL.node.Op {
case ONAME, ONONAME, OTYPE, OPACK, OLITERAL:
yyVAL.node = Nod(OPAREN, yyVAL.node, nil)
yyVAL.node.Implicit = 1
break
}
}
case 50:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:426
{
yyVAL.node = Nod(OASOP, yyDollar[1].node, yyDollar[3].node)
yyVAL.node.Etype = uint8(yyDollar[2].i) // rathole to pass opcode
}
case 51:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:431
{
if yyDollar[1].list.Next == nil && yyDollar[3].list.Next == nil {
// simple
yyVAL.node = Nod(OAS, yyDollar[1].list.N, yyDollar[3].list.N)
break
}
// multiple
yyVAL.node = Nod(OAS2, nil, nil)
yyVAL.node.List = yyDollar[1].list
yyVAL.node.Rlist = yyDollar[3].list
}
case 52:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:443
{
if yyDollar[3].list.N.Op == OTYPESW {
yyVAL.node = Nod(OTYPESW, nil, yyDollar[3].list.N.Right)
if yyDollar[3].list.Next != nil {
Yyerror("expr.(type) must be alone in list")
}
if yyDollar[1].list.Next != nil {
Yyerror("argument count mismatch: %d = %d", count(yyDollar[1].list), 1)
} else if (yyDollar[1].list.N.Op != ONAME && yyDollar[1].list.N.Op != OTYPE && yyDollar[1].list.N.Op != ONONAME) || isblank(yyDollar[1].list.N) {
Yyerror("invalid variable name %s in type switch", Nconv(yyDollar[1].list.N, 0))
} else {
yyVAL.node.Left = dclname(yyDollar[1].list.N.Sym)
} // it's a colas, so must not re-use an oldname.
break
}
yyVAL.node = colas(yyDollar[1].list, yyDollar[3].list, int32(yyDollar[2].i))
}
case 53:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:461
{
yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1))
yyVAL.node.Implicit = 1
yyVAL.node.Etype = OADD
}
case 54:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:467
{
yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1))
yyVAL.node.Implicit = 1
yyVAL.node.Etype = OSUB
}
case 55:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:475
{
var n, nn *Node
// will be converted to OCASE
// right will point to next case
// done in casebody()
markdcl()
yyVAL.node = Nod(OXCASE, nil, nil)
yyVAL.node.List = yyDollar[2].list
if typesw != nil && typesw.Right != nil {
n = typesw.Right.Left
if n != nil {
// type switch - declare variable
nn = newname(n.Sym)
declare(nn, dclcontext)
yyVAL.node.Nname = nn
// keep track of the instances for reporting unused
nn.Defn = typesw.Right
}
}
}
case 56:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:498
{
var n *Node
// will be converted to OCASE
// right will point to next case
// done in casebody()
markdcl()
yyVAL.node = Nod(OXCASE, nil, nil)
if yyDollar[2].list.Next == nil {
n = Nod(OAS, yyDollar[2].list.N, yyDollar[4].node)
} else {
n = Nod(OAS2, nil, nil)
n.List = yyDollar[2].list
n.Rlist = list1(yyDollar[4].node)
}
yyVAL.node.List = list1(n)
}
case 57:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:516
{
// will be converted to OCASE
// right will point to next case
// done in casebody()
markdcl()
yyVAL.node = Nod(OXCASE, nil, nil)
yyVAL.node.List = list1(colas(yyDollar[2].list, list1(yyDollar[4].node), int32(yyDollar[3].i)))
}
case 58:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:525
{
var n, nn *Node
markdcl()
yyVAL.node = Nod(OXCASE, nil, nil)
if typesw != nil && typesw.Right != nil {
n = typesw.Right.Left
if n != nil {
// type switch - declare variable
nn = newname(n.Sym)
declare(nn, dclcontext)
yyVAL.node.Nname = nn
// keep track of the instances for reporting unused
nn.Defn = typesw.Right
}
}
}
case 59:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:546
{
markdcl()
}
case 60:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:550
{
if yyDollar[3].list == nil {
yyVAL.node = Nod(OEMPTY, nil, nil)
} else {
yyVAL.node = liststmt(yyDollar[3].list)
}
popdcl()
}
case 61:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:561
{
// If the last token read by the lexer was consumed
// as part of the case, clear it (parser has cleared yychar).
// If the last token read by the lexer was the lookahead
// leave it alone (parser has it cached in yychar).
// This is so that the stmt_list action doesn't look at
// the case tokens if the stmt_list is empty.
yylast = yychar
yyDollar[1].node.Xoffset = int64(block)
}
case 62:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:572
{
// This is the only place in the language where a statement
// list is not allowed to drop the final semicolon, because
// it's the only place where a statement list is not followed
// by a closing brace. Handle the error for pedantry.
// Find the final token of the statement list.
// yylast is lookahead; yyprev is last of stmt_list
last := yyprev
if last > 0 && last != ';' && yychar != '}' {
Yyerror("missing statement after label")
}
yyVAL.node = yyDollar[1].node
yyVAL.node.Nbody = yyDollar[3].list
popdcl()
}
case 63:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:591
{
yyVAL.list = nil
}
case 64:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:595
{
yyVAL.list = list(yyDollar[1].list, yyDollar[2].node)
}
case 65:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:601
{
markdcl()
}
case 66:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:605
{
yyVAL.list = yyDollar[3].list
popdcl()
}
case 67:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:612
{
yyVAL.node = Nod(ORANGE, nil, yyDollar[4].node)
yyVAL.node.List = yyDollar[1].list
yyVAL.node.Etype = 0 // := flag
}
case 68:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:618
{
yyVAL.node = Nod(ORANGE, nil, yyDollar[4].node)
yyVAL.node.List = yyDollar[1].list
yyVAL.node.Colas = 1
colasdefn(yyDollar[1].list, yyVAL.node)
}
case 69:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:625
{
yyVAL.node = Nod(ORANGE, nil, yyDollar[2].node)
yyVAL.node.Etype = 0 // := flag
}
case 70:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:632
{
// init ; test ; incr
if yyDollar[5].node != nil && yyDollar[5].node.Colas != 0 {
Yyerror("cannot declare in the for-increment")
}
yyVAL.node = Nod(OFOR, nil, nil)
if yyDollar[1].node != nil {
yyVAL.node.Ninit = list1(yyDollar[1].node)
}
yyVAL.node.Ntest = yyDollar[3].node
yyVAL.node.Nincr = yyDollar[5].node
}
case 71:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:645
{
// normal test
yyVAL.node = Nod(OFOR, nil, nil)
yyVAL.node.Ntest = yyDollar[1].node
}
case 72:
yyVAL.node = yyS[yypt-0].node
case 73:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:654
{
yyVAL.node = yyDollar[1].node
yyVAL.node.Nbody = concat(yyVAL.node.Nbody, yyDollar[2].list)
}
case 74:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:661
{
markdcl()
}
case 75:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:665
{
yyVAL.node = yyDollar[3].node
popdcl()
}
case 76:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:672
{
// test
yyVAL.node = Nod(OIF, nil, nil)
yyVAL.node.Ntest = yyDollar[1].node
}
case 77:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:678
{
// init ; test
yyVAL.node = Nod(OIF, nil, nil)
if yyDollar[1].node != nil {
yyVAL.node.Ninit = list1(yyDollar[1].node)
}
yyVAL.node.Ntest = yyDollar[3].node
}
case 78:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:690
{
markdcl()
}
case 79:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:694
{
if yyDollar[3].node.Ntest == nil {
Yyerror("missing condition in if statement")
}
}
case 80:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:700
{
yyDollar[3].node.Nbody = yyDollar[5].list
}
case 81:
yyDollar = yyS[yypt-8 : yypt+1]
//line go.y:704
{
var n *Node
var nn *NodeList
yyVAL.node = yyDollar[3].node
n = yyDollar[3].node
popdcl()
for nn = concat(yyDollar[7].list, yyDollar[8].list); nn != nil; nn = nn.Next {
if nn.N.Op == OIF {
popdcl()
}
n.Nelse = list1(nn.N)
n = nn.N
}
}
case 82:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:722
{
markdcl()
}
case 83:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:726
{
if yyDollar[4].node.Ntest == nil {
Yyerror("missing condition in if statement")
}
yyDollar[4].node.Nbody = yyDollar[5].list
yyVAL.list = list1(yyDollar[4].node)
}
case 84:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:735
{
yyVAL.list = nil
}
case 85:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:739
{
yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list)
}
case 86:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:744
{
yyVAL.list = nil
}
case 87:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:748
{
l := &NodeList{N: yyDollar[2].node}
l.End = l
yyVAL.list = l
}
case 88:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:756
{
markdcl()
}
case 89:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:760
{
var n *Node
n = yyDollar[3].node.Ntest
if n != nil && n.Op != OTYPESW {
n = nil
}
typesw = Nod(OXXX, typesw, n)
}
case 90:
yyDollar = yyS[yypt-7 : yypt+1]
//line go.y:769
{
yyVAL.node = yyDollar[3].node
yyVAL.node.Op = OSWITCH
yyVAL.node.List = yyDollar[6].list
typesw = typesw.Left
popdcl()
}
case 91:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:779
{
typesw = Nod(OXXX, typesw, nil)
}
case 92:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:783
{
yyVAL.node = Nod(OSELECT, nil, nil)
yyVAL.node.Lineno = typesw.Lineno
yyVAL.node.List = yyDollar[4].list
typesw = typesw.Left
}
case 93:
yyVAL.node = yyS[yypt-0].node
case 94:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:796
{
yyVAL.node = Nod(OOROR, yyDollar[1].node, yyDollar[3].node)
}
case 95:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:800
{
yyVAL.node = Nod(OANDAND, yyDollar[1].node, yyDollar[3].node)
}
case 96:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:804
{
yyVAL.node = Nod(OEQ, yyDollar[1].node, yyDollar[3].node)
}
case 97:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:808
{
yyVAL.node = Nod(ONE, yyDollar[1].node, yyDollar[3].node)
}
case 98:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:812
{
yyVAL.node = Nod(OLT, yyDollar[1].node, yyDollar[3].node)
}
case 99:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:816
{
yyVAL.node = Nod(OLE, yyDollar[1].node, yyDollar[3].node)
}
case 100:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:820
{
yyVAL.node = Nod(OGE, yyDollar[1].node, yyDollar[3].node)
}
case 101:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:824
{
yyVAL.node = Nod(OGT, yyDollar[1].node, yyDollar[3].node)
}
case 102:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:828
{
yyVAL.node = Nod(OADD, yyDollar[1].node, yyDollar[3].node)
}
case 103:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:832
{
yyVAL.node = Nod(OSUB, yyDollar[1].node, yyDollar[3].node)
}
case 104:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:836
{
yyVAL.node = Nod(OOR, yyDollar[1].node, yyDollar[3].node)
}
case 105:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:840
{
yyVAL.node = Nod(OXOR, yyDollar[1].node, yyDollar[3].node)
}
case 106:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:844
{
yyVAL.node = Nod(OMUL, yyDollar[1].node, yyDollar[3].node)
}
case 107:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:848
{
yyVAL.node = Nod(ODIV, yyDollar[1].node, yyDollar[3].node)
}
case 108:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:852
{
yyVAL.node = Nod(OMOD, yyDollar[1].node, yyDollar[3].node)
}
case 109:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:856
{
yyVAL.node = Nod(OAND, yyDollar[1].node, yyDollar[3].node)
}
case 110:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:860
{
yyVAL.node = Nod(OANDNOT, yyDollar[1].node, yyDollar[3].node)
}
case 111:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:864
{
yyVAL.node = Nod(OLSH, yyDollar[1].node, yyDollar[3].node)
}
case 112:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:868
{
yyVAL.node = Nod(ORSH, yyDollar[1].node, yyDollar[3].node)
}
case 113:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:873
{
yyVAL.node = Nod(OSEND, yyDollar[1].node, yyDollar[3].node)
}
case 114:
yyVAL.node = yyS[yypt-0].node
case 115:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:880
{
yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
}
case 116:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:884
{
if yyDollar[2].node.Op == OCOMPLIT {
// Special case for &T{...}: turn into (*T){...}.
yyVAL.node = yyDollar[2].node
yyVAL.node.Right = Nod(OIND, yyVAL.node.Right, nil)
yyVAL.node.Right.Implicit = 1
} else {
yyVAL.node = Nod(OADDR, yyDollar[2].node, nil)
}
}
case 117:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:895
{
yyVAL.node = Nod(OPLUS, yyDollar[2].node, nil)
}
case 118:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:899
{
yyVAL.node = Nod(OMINUS, yyDollar[2].node, nil)
}
case 119:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:903
{
yyVAL.node = Nod(ONOT, yyDollar[2].node, nil)
}
case 120:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:907
{
Yyerror("the bitwise complement operator is ^")
yyVAL.node = Nod(OCOM, yyDollar[2].node, nil)
}
case 121:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:912
{
yyVAL.node = Nod(OCOM, yyDollar[2].node, nil)
}
case 122:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:916
{
yyVAL.node = Nod(ORECV, yyDollar[2].node, nil)
}
case 123:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:926
{
yyVAL.node = Nod(OCALL, yyDollar[1].node, nil)
}
case 124:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:930
{
yyVAL.node = Nod(OCALL, yyDollar[1].node, nil)
yyVAL.node.List = yyDollar[3].list
}
case 125:
yyDollar = yyS[yypt-6 : yypt+1]
//line go.y:935
{
yyVAL.node = Nod(OCALL, yyDollar[1].node, nil)
yyVAL.node.List = yyDollar[3].list
yyVAL.node.Isddd = 1
}
case 126:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:943
{
yyVAL.node = nodlit(yyDollar[1].val)
}
case 127:
yyVAL.node = yyS[yypt-0].node
case 128:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:948
{
if yyDollar[1].node.Op == OPACK {
var s *Sym
s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Pkg)
yyDollar[1].node.Used = 1
yyVAL.node = oldname(s)
break
}
yyVAL.node = Nod(OXDOT, yyDollar[1].node, newname(yyDollar[3].sym))
}
case 129:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:959
{
yyVAL.node = Nod(ODOTTYPE, yyDollar[1].node, yyDollar[4].node)
}
case 130:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:963
{
yyVAL.node = Nod(OTYPESW, nil, yyDollar[1].node)
}
case 131:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:967
{
yyVAL.node = Nod(OINDEX, yyDollar[1].node, yyDollar[3].node)
}
case 132:
yyDollar = yyS[yypt-6 : yypt+1]
//line go.y:971
{
yyVAL.node = Nod(OSLICE, yyDollar[1].node, Nod(OKEY, yyDollar[3].node, yyDollar[5].node))
}
case 133:
yyDollar = yyS[yypt-8 : yypt+1]
//line go.y:975
{
if yyDollar[5].node == nil {
Yyerror("middle index required in 3-index slice")
}
if yyDollar[7].node == nil {
Yyerror("final index required in 3-index slice")
}
yyVAL.node = Nod(OSLICE3, yyDollar[1].node, Nod(OKEY, yyDollar[3].node, Nod(OKEY, yyDollar[5].node, yyDollar[7].node)))
}
case 134:
yyVAL.node = yyS[yypt-0].node
case 135:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:986
{
// conversion
yyVAL.node = Nod(OCALL, yyDollar[1].node, nil)
yyVAL.node.List = list1(yyDollar[3].node)
}
case 136:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:992
{
yyVAL.node = yyDollar[3].node
yyVAL.node.Right = yyDollar[1].node
yyVAL.node.List = yyDollar[4].list
fixlbrace(yyDollar[2].i)
}
case 137:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:999
{
yyVAL.node = yyDollar[3].node
yyVAL.node.Right = yyDollar[1].node
yyVAL.node.List = yyDollar[4].list
}
case 138:
yyDollar = yyS[yypt-7 : yypt+1]
//line go.y:1005
{
Yyerror("cannot parenthesize type in composite literal")
yyVAL.node = yyDollar[5].node
yyVAL.node.Right = yyDollar[2].node
yyVAL.node.List = yyDollar[6].list
}
case 139:
yyVAL.node = yyS[yypt-0].node
case 140:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1014
{
// composite expression.
// make node early so we get the right line number.
yyVAL.node = Nod(OCOMPLIT, nil, nil)
}
case 141:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1022
{
yyVAL.node = Nod(OKEY, yyDollar[1].node, yyDollar[3].node)
}
case 142:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1028
{
// These nodes do not carry line numbers.
// Since a composite literal commonly spans several lines,
// the line number on errors may be misleading.
// Introduce a wrapper node to give the correct line.
yyVAL.node = yyDollar[1].node
switch yyVAL.node.Op {
case ONAME, ONONAME, OTYPE, OPACK, OLITERAL:
yyVAL.node = Nod(OPAREN, yyVAL.node, nil)
yyVAL.node.Implicit = 1
}
}
case 143:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1041
{
yyVAL.node = yyDollar[2].node
yyVAL.node.List = yyDollar[3].list
}
case 144:
yyVAL.node = yyS[yypt-0].node
case 145:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1049
{
yyVAL.node = yyDollar[2].node
yyVAL.node.List = yyDollar[3].list
}
case 146:
yyVAL.node = yyS[yypt-0].node
case 147:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1057
{
yyVAL.node = yyDollar[2].node
// Need to know on lhs of := whether there are ( ).
// Don't bother with the OPAREN in other cases:
// it's just a waste of memory and time.
switch yyVAL.node.Op {
case ONAME, ONONAME, OPACK, OTYPE, OLITERAL, OTYPESW:
yyVAL.node = Nod(OPAREN, yyVAL.node, nil)
}
}
case 148:
yyVAL.node = yyS[yypt-0].node
case 149:
yyVAL.node = yyS[yypt-0].node
case 150:
yyVAL.node = yyS[yypt-0].node
case 151:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1078
{
yyVAL.i = LBODY
}
case 152:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1082
{
yyVAL.i = '{'
}
case 153:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1093
{
if yyDollar[1].sym == nil {
yyVAL.node = nil
} else {
yyVAL.node = newname(yyDollar[1].sym)
}
}
case 154:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1103
{
yyVAL.node = dclname(yyDollar[1].sym)
}
case 155:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1108
{
yyVAL.node = nil
}
case 156:
yyVAL.node = yyS[yypt-0].node
case 157:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1115
{
yyVAL.sym = yyDollar[1].sym
// during imports, unqualified non-exported identifiers are from builtinpkg
if importpkg != nil && !exportname(yyDollar[1].sym.Name) {
yyVAL.sym = Pkglookup(yyDollar[1].sym.Name, builtinpkg)
}
}
case 158:
yyVAL.sym = yyS[yypt-0].sym
case 159:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1124
{
yyVAL.sym = nil
}
case 160:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1130
{
var p *Pkg
if yyDollar[2].val.U.Sval == "" {
p = importpkg
} else {
if isbadimport(yyDollar[2].val.U.Sval) {
errorexit()
}
p = mkpkg(yyDollar[2].val.U.Sval)
}
yyVAL.sym = Pkglookup(yyDollar[4].sym.Name, p)
}
case 161:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1144
{
var p *Pkg
if yyDollar[2].val.U.Sval == "" {
p = importpkg
} else {
if isbadimport(yyDollar[2].val.U.Sval) {
errorexit()
}
p = mkpkg(yyDollar[2].val.U.Sval)
}
yyVAL.sym = Pkglookup("?", p)
}
case 162:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1160
{
yyVAL.node = oldname(yyDollar[1].sym)
if yyVAL.node.Pack != nil {
yyVAL.node.Pack.Used = 1
}
}
case 163:
yyVAL.node = yyS[yypt-0].node
case 164:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1181
{
Yyerror("final argument in variadic function missing type")
yyVAL.node = Nod(ODDD, typenod(typ(TINTER)), nil)
}
case 165:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1186
{
yyVAL.node = Nod(ODDD, yyDollar[2].node, nil)
}
case 166:
yyVAL.node = yyS[yypt-0].node
case 167:
yyVAL.node = yyS[yypt-0].node
case 168:
yyVAL.node = yyS[yypt-0].node
case 169:
yyVAL.node = yyS[yypt-0].node
case 170:
yyVAL.node = yyS[yypt-0].node
case 171:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1197
{
yyVAL.node = yyDollar[2].node
}
case 172:
yyVAL.node = yyS[yypt-0].node
case 173:
yyVAL.node = yyS[yypt-0].node
case 174:
yyVAL.node = yyS[yypt-0].node
case 175:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1206
{
yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
}
case 176:
yyVAL.node = yyS[yypt-0].node
case 177:
yyVAL.node = yyS[yypt-0].node
case 178:
yyVAL.node = yyS[yypt-0].node
case 179:
yyVAL.node = yyS[yypt-0].node
case 180:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1216
{
yyVAL.node = yyDollar[2].node
}
case 181:
yyVAL.node = yyS[yypt-0].node
case 182:
yyVAL.node = yyS[yypt-0].node
case 183:
yyVAL.node = yyS[yypt-0].node
case 184:
yyVAL.node = yyS[yypt-0].node
case 185:
yyVAL.node = yyS[yypt-0].node
case 186:
yyVAL.node = yyS[yypt-0].node
case 187:
yyVAL.node = yyS[yypt-0].node
case 188:
yyVAL.node = yyS[yypt-0].node
case 189:
yyVAL.node = yyS[yypt-0].node
case 190:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1237
{
if yyDollar[1].node.Op == OPACK {
var s *Sym
s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Pkg)
yyDollar[1].node.Used = 1
yyVAL.node = oldname(s)
break
}
yyVAL.node = Nod(OXDOT, yyDollar[1].node, newname(yyDollar[3].sym))
}
case 191:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1250
{
yyVAL.node = Nod(OTARRAY, yyDollar[2].node, yyDollar[4].node)
}
case 192:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1254
{
// array literal of nelem
yyVAL.node = Nod(OTARRAY, Nod(ODDD, nil, nil), yyDollar[4].node)
}
case 193:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1259
{
yyVAL.node = Nod(OTCHAN, yyDollar[2].node, nil)
yyVAL.node.Etype = Cboth
}
case 194:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1264
{
yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil)
yyVAL.node.Etype = Csend
}
case 195:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1269
{
yyVAL.node = Nod(OTMAP, yyDollar[3].node, yyDollar[5].node)
}
case 196:
yyVAL.node = yyS[yypt-0].node
case 197:
yyVAL.node = yyS[yypt-0].node
case 198:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1277
{
yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
}
case 199:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1283
{
yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil)
yyVAL.node.Etype = Crecv
}
case 200:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1290
{
yyVAL.node = Nod(OTSTRUCT, nil, nil)
yyVAL.node.List = yyDollar[3].list
fixlbrace(yyDollar[2].i)
}
case 201:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1296
{
yyVAL.node = Nod(OTSTRUCT, nil, nil)
fixlbrace(yyDollar[2].i)
}
case 202:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1303
{
yyVAL.node = Nod(OTINTER, nil, nil)
yyVAL.node.List = yyDollar[3].list
fixlbrace(yyDollar[2].i)
}
case 203:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1309
{
yyVAL.node = Nod(OTINTER, nil, nil)
fixlbrace(yyDollar[2].i)
}
case 204:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1320
{
yyVAL.node = yyDollar[2].node
if yyVAL.node == nil {
break
}
if noescape && yyDollar[3].list != nil {
Yyerror("can only use //go:noescape with external func implementations")
}
yyVAL.node.Nbody = yyDollar[3].list
yyVAL.node.Endlineno = lineno
yyVAL.node.Noescape = noescape
yyVAL.node.Nosplit = nosplit
yyVAL.node.Nowritebarrier = nowritebarrier
funcbody(yyVAL.node)
}
case 205:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1338
{
var t *Node
yyVAL.node = nil
yyDollar[3].list = checkarglist(yyDollar[3].list, 1)
if yyDollar[1].sym.Name == "init" {
yyDollar[1].sym = renameinit()
if yyDollar[3].list != nil || yyDollar[5].list != nil {
Yyerror("func init must have no arguments and no return values")
}
}
if localpkg.Name == "main" && yyDollar[1].sym.Name == "main" {
if yyDollar[3].list != nil || yyDollar[5].list != nil {
Yyerror("func main must have no arguments and no return values")
}
}
t = Nod(OTFUNC, nil, nil)
t.List = yyDollar[3].list
t.Rlist = yyDollar[5].list
yyVAL.node = Nod(ODCLFUNC, nil, nil)
yyVAL.node.Nname = newname(yyDollar[1].sym)
yyVAL.node.Nname.Defn = yyVAL.node
yyVAL.node.Nname.Ntype = t // TODO: check if nname already has an ntype
declare(yyVAL.node.Nname, PFUNC)
funchdr(yyVAL.node)
}
case 206:
yyDollar = yyS[yypt-8 : yypt+1]
//line go.y:1369
{
var rcvr, t *Node
yyVAL.node = nil
yyDollar[2].list = checkarglist(yyDollar[2].list, 0)
yyDollar[6].list = checkarglist(yyDollar[6].list, 1)
if yyDollar[2].list == nil {
Yyerror("method has no receiver")
break
}
if yyDollar[2].list.Next != nil {
Yyerror("method has multiple receivers")
break
}
rcvr = yyDollar[2].list.N
if rcvr.Op != ODCLFIELD {
Yyerror("bad receiver in method")
break
}
t = Nod(OTFUNC, rcvr, nil)
t.List = yyDollar[6].list
t.Rlist = yyDollar[8].list
yyVAL.node = Nod(ODCLFUNC, nil, nil)
yyVAL.node.Shortname = newname(yyDollar[4].sym)
yyVAL.node.Nname = methodname1(yyVAL.node.Shortname, rcvr.Right)
yyVAL.node.Nname.Defn = yyVAL.node
yyVAL.node.Nname.Ntype = t
yyVAL.node.Nname.Nointerface = nointerface
declare(yyVAL.node.Nname, PFUNC)
funchdr(yyVAL.node)
}
case 207:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1407
{
var s *Sym
var t *Type
yyVAL.node = nil
s = yyDollar[1].sym
t = functype(nil, yyDollar[3].list, yyDollar[5].list)
importsym(s, ONAME)
if s.Def != nil && s.Def.Op == ONAME {
if Eqtype(t, s.Def.Type) {
dclcontext = PDISCARD // since we skip funchdr below
break
}
Yyerror("inconsistent definition for func %v during import\n\t%v\n\t%v", Sconv(s, 0), Tconv(s.Def.Type, 0), Tconv(t, 0))
}
yyVAL.node = newname(s)
yyVAL.node.Type = t
declare(yyVAL.node, PFUNC)
funchdr(yyVAL.node)
}
case 208:
yyDollar = yyS[yypt-8 : yypt+1]
//line go.y:1432
{
yyVAL.node = methodname1(newname(yyDollar[4].sym), yyDollar[2].list.N.Right)
yyVAL.node.Type = functype(yyDollar[2].list.N, yyDollar[6].list, yyDollar[8].list)
checkwidth(yyVAL.node.Type)
addmethod(yyDollar[4].sym, yyVAL.node.Type, false, nointerface)
nointerface = false
funchdr(yyVAL.node)
// inl.C's inlnode in on a dotmeth node expects to find the inlineable body as
// (dotmeth's type).Nname.Inl, and dotmeth's type has been pulled
// out by typecheck's lookdot as this $$.ttype. So by providing
// this back link here we avoid special casing there.
yyVAL.node.Type.Nname = yyVAL.node
}
case 209:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1450
{
yyDollar[3].list = checkarglist(yyDollar[3].list, 1)
yyVAL.node = Nod(OTFUNC, nil, nil)
yyVAL.node.List = yyDollar[3].list
yyVAL.node.Rlist = yyDollar[5].list
}
case 210:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1458
{
yyVAL.list = nil
}
case 211:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1462
{
yyVAL.list = yyDollar[2].list
if yyVAL.list == nil {
yyVAL.list = list1(Nod(OEMPTY, nil, nil))
}
}
case 212:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1471
{
yyVAL.list = nil
}
case 213:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1475
{
yyVAL.list = list1(Nod(ODCLFIELD, nil, yyDollar[1].node))
}
case 214:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1479
{
yyDollar[2].list = checkarglist(yyDollar[2].list, 0)
yyVAL.list = yyDollar[2].list
}
case 215:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1486
{
closurehdr(yyDollar[1].node)
}
case 216:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1492
{
yyVAL.node = closurebody(yyDollar[3].list)
fixlbrace(yyDollar[2].i)
}
case 217:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1497
{
yyVAL.node = closurebody(nil)
}
case 218:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1508
{
yyVAL.list = nil
}
case 219:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1512
{
yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list)
if nsyntaxerrors == 0 {
testdclstack()
}
nointerface = false
noescape = false
nosplit = false
nowritebarrier = false
}
case 220:
yyVAL.list = yyS[yypt-0].list
case 221:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1526
{
yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
}
case 222:
yyVAL.list = yyS[yypt-0].list
case 223:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1533
{
yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
}
case 224:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1539
{
yyVAL.list = list1(yyDollar[1].node)
}
case 225:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1543
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 226:
yyVAL.list = yyS[yypt-0].list
case 227:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1550
{
yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
}
case 228:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1556
{
yyVAL.list = list1(yyDollar[1].node)
}
case 229:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1560
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 230:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1566
{
var l *NodeList
var n *Node
l = yyDollar[1].list
if l == nil {
// ? symbol, during import (list1(nil) == nil)
n = yyDollar[2].node
if n.Op == OIND {
n = n.Left
}
n = embedded(n.Sym, importpkg)
n.Right = yyDollar[2].node
n.Val = yyDollar[3].val
yyVAL.list = list1(n)
break
}
for l = yyDollar[1].list; l != nil; l = l.Next {
l.N = Nod(ODCLFIELD, l.N, yyDollar[2].node)
l.N.Val = yyDollar[3].val
}
}
case 231:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1590
{
yyDollar[1].node.Val = yyDollar[2].val
yyVAL.list = list1(yyDollar[1].node)
}
case 232:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1595
{
yyDollar[2].node.Val = yyDollar[4].val
yyVAL.list = list1(yyDollar[2].node)
Yyerror("cannot parenthesize embedded type")
}
case 233:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1601
{
yyDollar[2].node.Right = Nod(OIND, yyDollar[2].node.Right, nil)
yyDollar[2].node.Val = yyDollar[3].val
yyVAL.list = list1(yyDollar[2].node)
}
case 234:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1607
{
yyDollar[3].node.Right = Nod(OIND, yyDollar[3].node.Right, nil)
yyDollar[3].node.Val = yyDollar[5].val
yyVAL.list = list1(yyDollar[3].node)
Yyerror("cannot parenthesize embedded type")
}
case 235:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1614
{
yyDollar[3].node.Right = Nod(OIND, yyDollar[3].node.Right, nil)
yyDollar[3].node.Val = yyDollar[5].val
yyVAL.list = list1(yyDollar[3].node)
Yyerror("cannot parenthesize embedded type")
}
case 236:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1623
{
var n *Node
yyVAL.sym = yyDollar[1].sym
n = oldname(yyDollar[1].sym)
if n.Pack != nil {
n.Pack.Used = 1
}
}
case 237:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1633
{
var pkg *Pkg
if yyDollar[1].sym.Def == nil || yyDollar[1].sym.Def.Op != OPACK {
Yyerror("%v is not a package", Sconv(yyDollar[1].sym, 0))
pkg = localpkg
} else {
yyDollar[1].sym.Def.Used = 1
pkg = yyDollar[1].sym.Def.Pkg
}
yyVAL.sym = restrictlookup(yyDollar[3].sym.Name, pkg)
}
case 238:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1648
{
yyVAL.node = embedded(yyDollar[1].sym, localpkg)
}
case 239:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1654
{
yyVAL.node = Nod(ODCLFIELD, yyDollar[1].node, yyDollar[2].node)
ifacedcl(yyVAL.node)
}
case 240:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1659
{
yyVAL.node = Nod(ODCLFIELD, nil, oldname(yyDollar[1].sym))
}
case 241:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1663
{
yyVAL.node = Nod(ODCLFIELD, nil, oldname(yyDollar[2].sym))
Yyerror("cannot parenthesize embedded type")
}
case 242:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1670
{
// without func keyword
yyDollar[2].list = checkarglist(yyDollar[2].list, 1)
yyVAL.node = Nod(OTFUNC, fakethis(), nil)
yyVAL.node.List = yyDollar[2].list
yyVAL.node.Rlist = yyDollar[4].list
}
case 243:
yyVAL.node = yyS[yypt-0].node
case 244:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1684
{
yyVAL.node = Nod(ONONAME, nil, nil)
yyVAL.node.Sym = yyDollar[1].sym
yyVAL.node = Nod(OKEY, yyVAL.node, yyDollar[2].node)
}
case 245:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1690
{
yyVAL.node = Nod(ONONAME, nil, nil)
yyVAL.node.Sym = yyDollar[1].sym
yyVAL.node = Nod(OKEY, yyVAL.node, yyDollar[2].node)
}
case 246:
yyVAL.node = yyS[yypt-0].node
case 247:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1699
{
yyVAL.list = list1(yyDollar[1].node)
}
case 248:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1703
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 249:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1708
{
yyVAL.list = nil
}
case 250:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1712
{
yyVAL.list = yyDollar[1].list
}
case 251:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1720
{
yyVAL.node = nil
}
case 252:
yyVAL.node = yyS[yypt-0].node
case 253:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1725
{
yyVAL.node = liststmt(yyDollar[1].list)
}
case 254:
yyVAL.node = yyS[yypt-0].node
case 255:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1730
{
yyVAL.node = nil
}
case 256:
yyVAL.node = yyS[yypt-0].node
case 257:
yyVAL.node = yyS[yypt-0].node
case 258:
yyVAL.node = yyS[yypt-0].node
case 259:
yyVAL.node = yyS[yypt-0].node
case 260:
yyVAL.node = yyS[yypt-0].node
case 261:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1741
{
yyDollar[1].node = Nod(OLABEL, yyDollar[1].node, nil)
yyDollar[1].node.Sym = dclstack // context, for goto restrictions
}
case 262:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1746
{
var l *NodeList
yyDollar[1].node.Defn = yyDollar[4].node
l = list1(yyDollar[1].node)
if yyDollar[4].node != nil {
l = list(l, yyDollar[4].node)
}
yyVAL.node = liststmt(l)
}
case 263:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1757
{
// will be converted to OFALL
yyVAL.node = Nod(OXFALL, nil, nil)
yyVAL.node.Xoffset = int64(block)
}
case 264:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1763
{
yyVAL.node = Nod(OBREAK, yyDollar[2].node, nil)
}
case 265:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1767
{
yyVAL.node = Nod(OCONTINUE, yyDollar[2].node, nil)
}
case 266:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1771
{
yyVAL.node = Nod(OPROC, yyDollar[2].node, nil)
}
case 267:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1775
{
yyVAL.node = Nod(ODEFER, yyDollar[2].node, nil)
}
case 268:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1779
{
yyVAL.node = Nod(OGOTO, yyDollar[2].node, nil)
yyVAL.node.Sym = dclstack // context, for goto restrictions
}
case 269:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1784
{
yyVAL.node = Nod(ORETURN, nil, nil)
yyVAL.node.List = yyDollar[2].list
if yyVAL.node.List == nil && Curfn != nil {
var l *NodeList
for l = Curfn.Dcl; l != nil; l = l.Next {
if l.N.Class == PPARAM {
continue
}
if l.N.Class != PPARAMOUT {
break
}
if l.N.Sym.Def != l.N {
Yyerror("%s is shadowed during return", l.N.Sym.Name)
}
}
}
}
case 270:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1806
{
yyVAL.list = nil
if yyDollar[1].node != nil {
yyVAL.list = list1(yyDollar[1].node)
}
}
case 271:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1813
{
yyVAL.list = yyDollar[1].list
if yyDollar[3].node != nil {
yyVAL.list = list(yyVAL.list, yyDollar[3].node)
}
}
case 272:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1822
{
yyVAL.list = list1(yyDollar[1].node)
}
case 273:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1826
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 274:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1832
{
yyVAL.list = list1(yyDollar[1].node)
}
case 275:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1836
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 276:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1842
{
yyVAL.list = list1(yyDollar[1].node)
}
case 277:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1846
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 278:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1852
{
yyVAL.list = list1(yyDollar[1].node)
}
case 279:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1856
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 280:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1865
{
yyVAL.list = list1(yyDollar[1].node)
}
case 281:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1869
{
yyVAL.list = list1(yyDollar[1].node)
}
case 282:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1873
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 283:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:1877
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 284:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1882
{
yyVAL.list = nil
}
case 285:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:1886
{
yyVAL.list = yyDollar[1].list
}
case 290:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1900
{
yyVAL.node = nil
}
case 291:
yyVAL.node = yyS[yypt-0].node
case 292:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1906
{
yyVAL.list = nil
}
case 293:
yyVAL.list = yyS[yypt-0].list
case 294:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1912
{
yyVAL.node = nil
}
case 295:
yyVAL.node = yyS[yypt-0].node
case 296:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1918
{
yyVAL.list = nil
}
case 297:
yyVAL.list = yyS[yypt-0].list
case 298:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1924
{
yyVAL.list = nil
}
case 299:
yyVAL.list = yyS[yypt-0].list
case 300:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1930
{
yyVAL.list = nil
}
case 301:
yyVAL.list = yyS[yypt-0].list
case 302:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:1936
{
yyVAL.val.Ctype = CTxxx
}
case 303:
yyVAL.val = yyS[yypt-0].val
case 304:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1946
{
importimport(yyDollar[2].sym, yyDollar[3].val.U.Sval)
}
case 305:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1950
{
importvar(yyDollar[2].sym, yyDollar[3].typ)
}
case 306:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:1954
{
importconst(yyDollar[2].sym, Types[TIDEAL], yyDollar[4].node)
}
case 307:
yyDollar = yyS[yypt-6 : yypt+1]
//line go.y:1958
{
importconst(yyDollar[2].sym, yyDollar[3].typ, yyDollar[5].node)
}
case 308:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1962
{
importtype(yyDollar[2].typ, yyDollar[3].typ)
}
case 309:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:1966
{
if yyDollar[2].node == nil {
dclcontext = PEXTERN // since we skip the funcbody below
break
}
yyDollar[2].node.Inl = yyDollar[3].list
funcbody(yyDollar[2].node)
importlist = list(importlist, yyDollar[2].node)
if Debug['E'] > 0 {
print("import [%q] func %lN \n", importpkg.Path, yyDollar[2].node)
if Debug['m'] > 2 && yyDollar[2].node.Inl != nil {
print("inl body:%+H\n", yyDollar[2].node.Inl)
}
}
}
case 310:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1987
{
yyVAL.sym = yyDollar[1].sym
structpkg = yyVAL.sym.Pkg
}
case 311:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:1994
{
yyVAL.typ = pkgtype(yyDollar[1].sym)
importsym(yyDollar[1].sym, OTYPE)
}
case 312:
yyVAL.typ = yyS[yypt-0].typ
case 313:
yyVAL.typ = yyS[yypt-0].typ
case 314:
yyVAL.typ = yyS[yypt-0].typ
case 315:
yyVAL.typ = yyS[yypt-0].typ
case 316:
yyVAL.typ = yyS[yypt-0].typ
case 317:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2014
{
yyVAL.typ = pkgtype(yyDollar[1].sym)
}
case 318:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2018
{
// predefined name like uint8
yyDollar[1].sym = Pkglookup(yyDollar[1].sym.Name, builtinpkg)
if yyDollar[1].sym.Def == nil || yyDollar[1].sym.Def.Op != OTYPE {
Yyerror("%s is not a type", yyDollar[1].sym.Name)
yyVAL.typ = nil
} else {
yyVAL.typ = yyDollar[1].sym.Def.Type
}
}
case 319:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2029
{
yyVAL.typ = aindex(nil, yyDollar[3].typ)
}
case 320:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:2033
{
yyVAL.typ = aindex(nodlit(yyDollar[2].val), yyDollar[4].typ)
}
case 321:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:2037
{
yyVAL.typ = maptype(yyDollar[3].typ, yyDollar[5].typ)
}
case 322:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:2041
{
yyVAL.typ = tostruct(yyDollar[3].list)
}
case 323:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:2045
{
yyVAL.typ = tointerface(yyDollar[3].list)
}
case 324:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:2049
{
yyVAL.typ = Ptrto(yyDollar[2].typ)
}
case 325:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:2053
{
yyVAL.typ = typ(TCHAN)
yyVAL.typ.Type = yyDollar[2].typ
yyVAL.typ.Chan = Cboth
}
case 326:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:2059
{
yyVAL.typ = typ(TCHAN)
yyVAL.typ.Type = yyDollar[3].typ
yyVAL.typ.Chan = Cboth
}
case 327:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2065
{
yyVAL.typ = typ(TCHAN)
yyVAL.typ.Type = yyDollar[3].typ
yyVAL.typ.Chan = Csend
}
case 328:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2073
{
yyVAL.typ = typ(TCHAN)
yyVAL.typ.Type = yyDollar[3].typ
yyVAL.typ.Chan = Crecv
}
case 329:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:2081
{
yyVAL.typ = functype(nil, yyDollar[3].list, yyDollar[5].list)
}
case 330:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2087
{
yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[2].typ))
if yyDollar[1].sym != nil {
yyVAL.node.Left = newname(yyDollar[1].sym)
}
yyVAL.node.Val = yyDollar[3].val
}
case 331:
yyDollar = yyS[yypt-4 : yypt+1]
//line go.y:2095
{
var t *Type
t = typ(TARRAY)
t.Bound = -1
t.Type = yyDollar[3].typ
yyVAL.node = Nod(ODCLFIELD, nil, typenod(t))
if yyDollar[1].sym != nil {
yyVAL.node.Left = newname(yyDollar[1].sym)
}
yyVAL.node.Isddd = 1
yyVAL.node.Val = yyDollar[4].val
}
case 332:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2112
{
var s *Sym
var p *Pkg
if yyDollar[1].sym != nil && yyDollar[1].sym.Name != "?" {
yyVAL.node = Nod(ODCLFIELD, newname(yyDollar[1].sym), typenod(yyDollar[2].typ))
yyVAL.node.Val = yyDollar[3].val
} else {
s = yyDollar[2].typ.Sym
if s == nil && Isptr[yyDollar[2].typ.Etype] {
s = yyDollar[2].typ.Type.Sym
}
p = importpkg
if yyDollar[1].sym != nil {
p = yyDollar[1].sym.Pkg
}
yyVAL.node = embedded(s, p)
yyVAL.node.Right = typenod(yyDollar[2].typ)
yyVAL.node.Val = yyDollar[3].val
}
}
case 333:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:2136
{
yyVAL.node = Nod(ODCLFIELD, newname(yyDollar[1].sym), typenod(functype(fakethis(), yyDollar[3].list, yyDollar[5].list)))
}
case 334:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2140
{
yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ))
}
case 335:
yyDollar = yyS[yypt-0 : yypt+1]
//line go.y:2145
{
yyVAL.list = nil
}
case 336:
yyVAL.list = yyS[yypt-0].list
case 337:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2152
{
yyVAL.list = yyDollar[2].list
}
case 338:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2156
{
yyVAL.list = list1(Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ)))
}
case 339:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2166
{
yyVAL.node = nodlit(yyDollar[1].val)
}
case 340:
yyDollar = yyS[yypt-2 : yypt+1]
//line go.y:2170
{
yyVAL.node = nodlit(yyDollar[2].val)
switch yyVAL.node.Val.Ctype {
case CTINT, CTRUNE:
mpnegfix(yyVAL.node.Val.U.Xval)
break
case CTFLT:
mpnegflt(yyVAL.node.Val.U.Fval)
break
case CTCPLX:
mpnegflt(&yyVAL.node.Val.U.Cval.Real)
mpnegflt(&yyVAL.node.Val.U.Cval.Imag)
break
default:
Yyerror("bad negated constant")
}
}
case 341:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2188
{
yyVAL.node = oldname(Pkglookup(yyDollar[1].sym.Name, builtinpkg))
if yyVAL.node.Op != OLITERAL {
Yyerror("bad constant %v", Sconv(yyVAL.node.Sym, 0))
}
}
case 342:
yyVAL.node = yyS[yypt-0].node
case 343:
yyDollar = yyS[yypt-5 : yypt+1]
//line go.y:2198
{
if yyDollar[2].node.Val.Ctype == CTRUNE && yyDollar[4].node.Val.Ctype == CTINT {
yyVAL.node = yyDollar[2].node
mpaddfixfix(yyDollar[2].node.Val.U.Xval, yyDollar[4].node.Val.U.Xval, 0)
break
}
yyDollar[4].node.Val.U.Cval.Real = yyDollar[4].node.Val.U.Cval.Imag
Mpmovecflt(&yyDollar[4].node.Val.U.Cval.Imag, 0.0)
yyVAL.node = nodcplxlit(yyDollar[2].node.Val, yyDollar[4].node.Val)
}
case 346:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2214
{
yyVAL.list = list1(yyDollar[1].node)
}
case 347:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2218
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 348:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2224
{
yyVAL.list = list1(yyDollar[1].node)
}
case 349:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2228
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
case 350:
yyDollar = yyS[yypt-1 : yypt+1]
//line go.y:2234
{
yyVAL.list = list1(yyDollar[1].node)
}
case 351:
yyDollar = yyS[yypt-3 : yypt+1]
//line go.y:2238
{
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
}
}
goto yystack /* stack new state and value */
}