//line go.y:21
package gc

import __yyfmt__ "fmt"

//line go.y:21
import (
	"fmt"
	"strings"
)

//line go.y:28
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{
	"$end",
	"error",
	"$unk",
	"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:2306
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, 403,
	67, 144,
	-2, 142,
	-1, 408,
	36, 176,
	60, 176,
	68, 176,
	-2, 167,
	-1, 409,
	36, 177,
	60, 177,
	68, 177,
	-2, 168,
	-1, 410,
	36, 178,
	60, 178,
	68, 178,
	-2, 169,
	-1, 411,
	36, 179,
	60, 179,
	68, 179,
	-2, 170,
	-1, 417,
	8, 251,
	13, 251,
	63, 251,
	69, 251,
	-2, 0,
	-1, 418,
	63, 251,
	69, 251,
	-2, 0,
	-1, 498,
	63, 251,
	69, 251,
	-2, 0,
	-1, 553,
	60, 157,
	-2, 318,
	-1, 554,
	60, 158,
	-2, 317,
	-1, 579,
	8, 251,
	13, 251,
	63, 251,
	69, 251,
	-2, 0,
	-1, 593,
	36, 180,
	60, 180,
	68, 180,
	-2, 171,
	-1, 632,
	67, 145,
	-2, 143,
}

const yyNprod = 352
const yyPrivate = 57344

var yyTokenNames []string
var yyStates []string

const yyLast = 2321

var yyAct = [...]int{

	74, 304, 381, 291, 487, 611, 459, 285, 546, 229,
	398, 467, 34, 296, 75, 302, 402, 550, 290, 186,
	286, 479, 458, 356, 400, 401, 389, 338, 103, 318,
	328, 245, 303, 339, 324, 243, 337, 468, 101, 374,
	109, 104, 248, 85, 14, 246, 241, 174, 480, 212,
	6, 181, 325, 155, 470, 469, 325, 385, 332, 517,
	108, 627, 414, 373, 13, 208, 585, 11, 176, 461,
	470, 172, 584, 461, 652, 600, 230, 219, 392, 191,
	106, 322, 177, 542, 226, 322, 423, 321, 193, 88,
	10, 321, 13, 192, 10, 310, 317, 309, 154, 160,
	447, 12, 13, 161, 227, 12, 13, 446, 198, 227,
	10, 162, 227, 320, 209, 227, 462, 384, 228, 663,
	462, 626, 625, 228, 55, 460, 228, 155, 184, 228,
	203, 628, 205, 633, 199, 200, 108, 632, 204, 12,
	13, 222, 393, 12, 13, 86, 214, 216, 218, 90,
	604, 239, 175, 10, 449, 194, 233, 88, 153, 12,
	13, 176, 661, 213, 213, 213, 213, 288, 155, 282,
	282, 601, 282, 537, 417, 177, 445, 280, 10, 176,
	621, 528, 295, 163, 164, 165, 166, 167, 168, 169,
	170, 227, 417, 177, 417, 301, 227, 227, 594, 227,
	485, 88, 12, 13, 185, 228, 417, 524, 48, 308,
	228, 228, 416, 228, 202, 347, 516, 90, 472, 448,
	405, 428, 10, 242, 349, 171, 298, 12, 13, 345,
	343, 341, 227, 581, 507, 330, 344, 507, 182, 508,
	519, 397, 508, 348, 116, 175, 228, 367, 227, 334,
	464, 227, 227, 360, 227, 129, 325, 355, 371, 210,
	346, 90, 228, 175, 353, 228, 228, 362, 228, 182,
	183, 12, 13, 54, 435, 314, 173, 10, 342, 358,
	340, 13, 340, 340, 91, 379, 188, 378, 325, 380,
	376, 331, 365, 375, 176, 623, 369, 394, 505, 417,
	408, 183, 610, 163, 170, 12, 13, 605, 177, 410,
	227, 227, 415, 238, 409, 118, 118, 602, 575, 126,
	227, 569, 559, 331, 228, 228, 12, 13, 466, 465,
	391, 444, 327, 443, 228, 437, 425, 12, 13, 254,
	413, 388, 255, 256, 257, 258, 259, 260, 261, 262,
	263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
	273, 274, 129, 129, 277, 227, 440, 383, 370, 173,
	366, 294, 359, 491, 227, 424, 411, 442, 175, 228,
	10, 455, 493, 333, 454, 436, 100, 492, 228, 300,
	99, 84, 10, 509, 176, 481, 282, 512, 474, 20,
	657, 282, 656, 655, 499, 495, 614, 227, 177, 503,
	654, 484, 10, 227, 340, 340, 234, 515, 520, 521,
	646, 228, 620, 617, 227, 340, 608, 228, 221, 12,
	13, 607, 511, 129, 526, 430, 433, 69, 228, 518,
	227, 12, 13, 598, 597, 129, 596, 293, 96, 494,
	525, 593, 583, 563, 228, 529, 98, 490, 540, 532,
	94, 12, 13, 523, 514, 513, 510, 560, 538, 558,
	97, 95, 330, 323, 329, 539, 497, 496, 175, 483,
	555, 477, 227, 476, 10, 473, 441, 562, 432, 421,
	227, 372, 297, 386, 565, 615, 228, 491, 491, 606,
	571, 573, 173, 92, 228, 403, 493, 493, 176, 10,
	403, 492, 492, 340, 574, 340, 197, 554, 10, 114,
	457, 340, 177, 434, 340, 572, 580, 439, 10, 578,
	354, 591, 592, 12, 13, 253, 588, 568, 251, 180,
	340, 197, 586, 587, 110, 533, 197, 609, 535, 197,
	432, 348, 197, 107, 117, 382, 70, 502, 12, 13,
	287, 7, 5, 102, 432, 211, 24, 12, 13, 129,
	16, 19, 227, 494, 494, 651, 129, 12, 13, 431,
	456, 490, 490, 364, 429, 561, 228, 335, 282, 207,
	206, 618, 175, 129, 129, 624, 622, 120, 481, 491,
	121, 125, 173, 636, 631, 630, 188, 619, 493, 21,
	340, 638, 305, 492, 642, 340, 643, 306, 641, 336,
	57, 351, 352, 640, 93, 644, 252, 645, 197, 176,
	26, 340, 512, 197, 197, 28, 197, 76, 158, 387,
	157, 666, 653, 177, 582, 390, 159, 491, 530, 156,
	498, 658, 579, 662, 418, 534, 493, 31, 22, 15,
	664, 492, 23, 665, 122, 122, 201, 18, 340, 197,
	668, 3, 123, 554, 667, 494, 340, 8, 9, 282,
	4, 2, 1, 490, 451, 197, 215, 544, 197, 197,
	56, 197, 89, 566, 545, 548, 549, 612, 488, 323,
	249, 531, 189, 105, 105, 112, 115, 80, 81, 576,
	577, 329, 438, 175, 119, 119, 173, 72, 119, 71,
	237, 478, 340, 494, 149, 340, 403, 316, 589, 403,
	403, 490, 220, 326, 150, 244, 649, 197, 151, 141,
	142, 143, 144, 145, 146, 147, 148, 197, 197, 629,
	650, 127, 17, 450, 595, 399, 319, 197, 25, 89,
	27, 36, 37, 78, 471, 281, 49, 66, 111, 39,
	38, 35, 124, 279, 278, 105, 149, 83, 79, 10,
	105, 73, 217, 112, 82, 113, 150, 247, 504, 616,
	151, 232, 506, 87, 188, 145, 146, 147, 148, 0,
	0, 0, 197, 0, 223, 0, 0, 0, 196, 235,
	197, 197, 240, 128, 231, 0, 0, 0, 634, 635,
	236, 0, 0, 0, 0, 639, 77, 0, 12, 13,
	225, 0, 0, 0, 292, 647, 648, 173, 0, 0,
	403, 0, 0, 0, 197, 0, 0, 0, 0, 0,
	197, 0, 541, 0, 543, 0, 552, 56, 0, 0,
	556, 197, 0, 557, 0, 0, 0, 347, 0, 0,
	0, 0, 119, 119, 0, 0, 349, 197, 0, 567,
	0, 345, 343, 341, 0, 0, 0, 0, 344, 0,
	0, 311, 357, 0, 0, 348, 312, 313, 105, 315,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 346, 0, 0, 56, 0, 0, 613, 197,
	275, 276, 0, 283, 247, 56, 247, 197, 0, 0,
	342, 0, 363, 13, 197, 197, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 599,
	0, 377, 134, 149, 603, 152, 0, 135, 139, 140,
	0, 0, 138, 150, 137, 136, 133, 151, 141, 142,
	143, 144, 145, 146, 147, 148, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 422, 0, 0,
	0, 361, 0, 0, 414, 0, 0, 0, 0, 0,
	407, 0, 0, 368, 0, 0, 89, 637, 0, 197,
	419, 420, 552, 0, 0, 0, 0, 0, 0, 347,
	426, 0, 0, 463, 0, 0, 0, 357, 349, 0,
	0, 0, 105, 345, 343, 341, 197, 0, 0, 105,
	344, 0, 0, 112, 0, 486, 247, 348, 0, 0,
	0, 0, 0, 0, 0, 0, 134, 149, 0, 152,
	0, 135, 139, 140, 346, 407, 138, 150, 137, 136,
	133, 151, 141, 142, 143, 144, 145, 146, 147, 148,
	0, 0, 342, 0, 197, 13, 0, 0, 0, 0,
	56, 56, 0, 0, 0, 396, 0, 0, 119, 0,
	119, 0, 0, 0, 0, 0, 0, 311, 536, 0,
	119, 0, 247, 522, 0, 0, 0, 0, 0, 0,
	0, 547, 551, 0, 527, 0, 0, 475, 0, 0,
	357, 0, 0, 463, 482, 0, 0, 463, 0, 0,
	0, 0, 564, 357, 0, 0, 0, 0, 0, 0,
	0, 275, 276, 0, 0, 0, 0, 0, 307, 0,
	68, 0, 247, 41, 0, 78, 47, 42, 0, 0,
	44, 56, 40, 50, 124, 43, 45, 53, 0, 83,
	79, 10, 570, 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, 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, 547, 65, 0, 551, 357,
	0, 0, 463, 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,
	68, 0, 0, 0, 82, 78, 0, 0, 0, 0,
	0, 65, 0, 0, 124, 0, 0, 0, 0, 83,
	79, 10, 0, 0, 60, 61, 82, 64, 58, 0,
	0, 59, 0, 68, 67, 0, 0, 0, 78, 0,
	0, 0, 404, 0, 62, 63, 77, 124, 12, 13,
	0, 0, 83, 79, 10, 0, 67, 0, 0, 82,
	0, 0, 0, 0, 0, 0, 65, 0, 77, 0,
	12, 13, 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, 590, 0, 62,
	63, 77, 124, 12, 13, 0, 0, 83, 79, 10,
	0, 501, 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, 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, 78, 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, 489, 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, 68, 0,
	0, 60, 61, 299, 64, 178, 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, 0, 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, 78, 0, 0, 232, 0, 0, 0, 0, 0,
	124, 0, 0, 0, 0, 83, 79, 10, 0, 0,
	0, 196, 82, 0, 0, 0, 0, 231, 0, 232,
	0, 0, 0, 224, 0, 0, 0, 0, 0, 77,
	0, 12, 13, 225, 0, 0, 196, 0, 0, 0,
	0, 0, 231, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 77, 0, 12, 13, 427, 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, 660, 138, 150, 137, 136, 133, 151, 141,
	142, 143, 144, 145, 146, 147, 148, 0, 78, 0,
	0, 250, 78, 0, 0, 0, 659, 124, 0, 0,
	0, 124, 83, 79, 10, 0, 83, 79, 10, 82,
	0, 0, 0, 82, 299, 0, 232, 0, 0, 0,
	232, 0, 0, 124, 0, 0, 0, 0, 83, 79,
	10, 0, 0, 196, 0, 82, 0, 196, 0, 231,
	0, 0, 232, 231, 0, 0, 0, 78, 0, 0,
	0, 77, 0, 12, 13, 77, 124, 12, 13, 196,
	0, 83, 79, 10, 0, 231, 0, 0, 82, 78,
	0, 0, 0, 347, 0, 406, 0, 77, 124, 12,
	13, 0, 349, 83, 79, 10, 0, 345, 343, 553,
	82, 0, 196, 0, 344, 0, 0, 190, 412, 0,
	0, 348, 0, 0, 0, 0, 0, 0, 0, 0,
	77, 0, 12, 13, 196, 0, 0, 0, 346, 0,
	195, 0, 0, 0, 0, 0, 0, 0, 347, 0,
	0, 0, 77, 0, 12, 13, 342, 349, 12, 13,
	0, 0, 345, 343, 341, 0, 0, 0, 347, 344,
	0, 0, 0, 0, 0, 0, 453, 349, 0, 0,
	0, 0, 345, 343, 341, 0, 0, 0, 0, 344,
	0, 0, 0, 346, 0, 0, 348, 0, 0, 452,
	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, 350, 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, 536, 535, -1000, 128, -1000, 545, 549, 336,
	-1000, -1000, -1000, 605, -1000, -1000, 541, 1239, 328, 85,
	-1000, 220, 438, 327, -1000, 323, -1000, -1000, -1000, -1000,
	503, 493, 484, 459, -1000, -1000, -1000, -1000, -1000, 177,
	-1000, 128, 128, 1316, 1316, 128, 1698, -1000, 2168, 92,
	-1000, -1000, -1000, -1000, -1000, -1000, -1000, 39, 1698, 1698,
	1698, 1698, 1698, 1698, 1698, 1698, 157, 1741, -1000, -1000,
	-1000, 479, 233, -1000, -1000, -1000, 202, 1655, 2050, 36,
	-1000, -1000, 233, 233, -1000, -1000, 153, 535, -1000, 586,
	585, 40, 194, -1000, 540, -11, -11, -11, 17, -1000,
	-1000, -1000, 367, 1827, -1000, -1000, -1000, 355, 754, -1000,
	252, 1973, -1000, 155, 1969, 478, -1000, -1000, -1000, -1000,
	-1000, -1000, 39, -1000, 475, -1000, -1000, -1000, -23, 2192,
	1698, -1000, -1000, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
	1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
	1698, 1698, 1698, 1698, 1698, 1698, 1612, 1698, 524, 1698,
	1557, 387, 1698, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, -1000, 431, 2192, -1000, -1000, -1000, -1000, 1741, 1784,
	1698, -1000, -1000, -1000, 1156, -1000, 24, 22, 2192, -1000,
	1973, -1000, -1000, -1000, -1000, 1973, 1973, 211, 1973, 27,
	263, 320, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, 583, 1010, -1000, 2129, 1010, -1000, 155, 470, 128,
	309, -1000, -1000, 187, 1698, 128, -1000, -1000, -1000, -1000,
	-1000, 1973, 574, 307, -1000, 181, 1698, 305, -1000, -1000,
	-1000, -1000, 1156, 430, -13, -1000, -1000, 1969, -1000, -1000,
	1973, 1969, 1156, 1969, 2192, 2240, 2263, 689, 689, 689,
	689, 689, 689, 741, 741, 741, 741, -1000, -1000, -1000,
	-1000, -1000, -1000, -1000, 2216, -23, -23, 2192, -1000, 519,
	304, -1000, -1000, 51, 1698, -1000, 278, -1000, -1000, -1000,
	66, -1000, -1000, 1514, 1022, 174, 1294, 152, -1000, 2028,
	918, 1294, 143, -1000, -1000, -1000, -1000, -1000, -1000, 1973,
	1973, -1000, 428, -1000, 128, 13, 273, -1000, -1000, 1852,
	580, 525, 463, -1000, -1000, 210, 272, -1000, -1000, 467,
	-1000, 539, 425, 197, -1000, 270, 268, -1000, -1000, -1000,
	-1000, -1000, 103, 28, 151, 86, 1010, 2109, 571, 460,
	65, 184, 266, 265, 128, -6, -1000, 206, 424, 128,
	1698, -23, -1000, 422, 1973, 420, 128, 1698, -23, 418,
	128, 131, 1518, 1969, -1000, -1000, -1000, -1000, 416, -1000,
	415, -1000, -1000, 1698, 1459, 1404, 2192, 521, 1698, 229,
	519, 405, -14, 1741, 404, 403, -1000, 1698, 147, -17,
	-1000, -1000, 173, 2192, -1000, -1000, 1995, -1000, -1000, -1000,
	-1000, -1000, 1973, 402, -1000, 138, -1000, 1156, 1156, -1000,
	-1000, -1000, -1000, 1973, 112, 31, 580, 128, -1000, -1000,
	398, 539, 210, 580, 539, 128, 104, 231, -1000, 1969,
	397, -1000, -1000, -1000, -1000, 1010, 10, 1010, 128, 2054,
	-1000, -1000, 514, 1010, -1000, -1000, 1010, 128, 259, -1000,
	69, -1000, 581, -1000, 65, -1000, -1000, 392, -22, 128,
	128, 580, 1010, -1000, -1000, -23, -1000, -1000, 258, -1000,
	-1000, 754, -23, -1000, -1000, -1000, 440, -1000, -1000, 1969,
	-1000, -1000, -1000, -1000, -1000, -1000, 1518, 1518, 1156, 255,
	1698, 1698, -1000, -1000, -1000, -1000, -1000, 1741, 166, -1000,
	-1000, 391, -1000, -1000, -1000, -1, -1000, 1294, -1000, 1349,
	1294, 1294, 390, -1000, -1000, -1000, 129, -1000, -1000, -1000,
	-1000, -1000, 580, 385, -1000, 383, -1000, -1000, -1000, 382,
	-1000, -1000, 1010, 2, 102, 254, -1000, 1010, 81, 244,
	-1000, 439, -1000, -1000, -1000, 370, -1000, -1000, 365, -1000,
	497, -1000, 239, 858, 435, -1000, -1000, 580, 362, 128,
	181, 1969, 361, -1000, 111, 1698, 2192, 2192, 226, 1156,
	55, -1000, -1000, -1000, -1000, 1698, -1000, -1000, -1000, 2192,
	-1000, 68, 64, -1000, -1000, -1000, 580, 580, 1518, -1000,
	1010, -1000, 128, 580, -1000, 2054, 128, -1000, 858, 69,
	-1000, -1000, -1000, 128, -1000, 128, -1000, -1000, -1000, 359,
	-1000, -1000, -1000, -1000, 236, -1000, 1698, 1698, 1741, 560,
	1, 1294, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
	-1000, 349, -1000, 342, 341, 339, 1518, 1919, 1895, -1000,
	-1000, 141, -1000, 50, 858, -1000, -1000, 858, -1000, -1000,
	-1000, -1000, -1000, -1000, -1000, -1000, 1698, 519, -1000,
}
var yyPgo = [...]int{

	0, 51, 793, 672, 34, 221, 32, 700, 31, 792,
	788, 1, 76, 113, 208, 16, 25, 3, 785, 782,
	781, 774, 773, 771, 7, 770, 617, 30, 24, 769,
	437, 45, 47, 273, 41, 19, 768, 554, 20, 620,
	767, 556, 765, 762, 12, 761, 124, 760, 40, 13,
	758, 46, 4, 2, 28, 756, 766, 755, 10, 18,
	752, 751, 26, 750, 749, 736, 15, 35, 735, 733,
	38, 732, 29, 727, 612, 48, 21, 721, 720, 719,
	717, 42, 712, 708, 707, 9, 84, 702, 14, 698,
	0, 67, 49, 22, 6, 23, 17, 8, 697, 5,
	37, 11, 696, 695, 694, 687, 406, 36, 686, 33,
	27, 684, 682, 681, 680, 677, 671, 50, 44, 667,
	43, 666, 58, 662, 659, 658, 657, 654, 652, 650,
	649, 646, 645, 644, 641, 640, 639, 638, 39, 637,
	626, 624,
}
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, -15, -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, 0, -2, 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, -2, 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,
}

var yyErrorMessages = [...]struct {
	state int
	token int
	msg   string
}{
	{332, 76, "unexpected comma during import block"},
	{89, 63, "missing import path; require quoted string"},
	{390, 63, "missing { after if clause"},
	{387, 63, "missing { after switch clause"},
	{279, 63, "missing { after for clause"},
	{499, 36, "missing { after for clause"},
	{17, 68, "unexpected semicolon or newline before {"},
	{111, 63, "unexpected semicolon or newline in type declaration"},
	{78, 69, "unexpected } in channel type"},
	{78, 61, "unexpected ) in channel type"},
	{78, 76, "unexpected comma in channel type"},
	{417, 15, "unexpected semicolon or newline before else"},
	{329, 76, "name list not allowed in interface type"},
	{279, 33, "var declaration not allowed in for initializer"},
	{25, 68, "unexpected { at end of statement"},
	{371, 68, "unexpected { at end of statement"},
	{122, 63, "argument to go/defer must be function call"},
	{398, 63, "need trailing comma before newline in composite literal"},
	{415, 63, "need trailing comma before newline in composite literal"},
	{124, 25, "nested func not allowed"},
	{651, 63, "else must be followed by if or statement block"},
}

//line yaccpar:1

/*	parser for yacc output	*/

var (
	yyDebug        = 0
	yyErrorVerbose = false
)

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 {
	if c >= 1 && c-1 < len(yyToknames) {
		if yyToknames[c-1] != "" {
			return yyToknames[c-1]
		}
	}
	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 yyErrorMessage(state, lookAhead int) string {
	const TOKSTART = 4

	if !yyErrorVerbose {
		return "syntax error"
	}

	for _, e := range yyErrorMessages {
		if e.state == state && e.token == lookAhead {
			return "syntax error: " + e.msg
		}
	}

	res := "syntax error: unexpected " + yyTokname(lookAhead)

	// To match Bison, suggest at most four expected tokens.
	expected := make([]int, 0, 4)

	// Look for shiftable tokens.
	base := yyPact[state]
	for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
		if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok {
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}
	}

	if yyDef[state] == -2 {
		i := 0
		for yyExca[i] != -1 || yyExca[i+1] != state {
			i += 2
		}

		// Look for tokens that we accept or reduce.
		for i += 2; yyExca[i] >= 0; i += 2 {
			tok := yyExca[i]
			if tok < TOKSTART || yyExca[i+1] == 0 {
				continue
			}
			if len(expected) == cap(expected) {
				return res
			}
			expected = append(expected, tok)
		}

		// If the default action is to accept or reduce, give up.
		if yyExca[i+1] != 0 {
			return res
		}
	}

	for i, tok := range expected {
		if i == 0 {
			res += ", expecting "
		} else {
			res += " or "
		}
		res += yyTokname(tok)
	}
	return res
}

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.
		yystate = -1
		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(yyErrorMessage(yystate, yytoken))
			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:189
		{
			xtop = concat(xtop, yyDollar[4].list)
		}
	case 2:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:195
		{
			prevlineno = lineno
			Yyerror("package statement must be first")
			errorexit()
		}
	case 3:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:201
		{
			mkpackage(yyDollar[2].sym.Name)
		}
	case 4:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:211
		{
			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:223
		{
			importpkg = nil
		}
	case 11:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:237
		{
			ipkg := importpkg
			my := importmyname
			importpkg = nil
			importmyname = nil

			if my == nil {
				my = Lookup(ipkg.Name)
			}

			pack := Nod(OPACK, nil, nil)
			pack.Sym = my
			pack.Name.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:272
		{
			// 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:288
		{
			// 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:295
		{
			// 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:302
		{
			// 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:311
		{
			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:328
		{
			if yyDollar[1].sym.Name == "safe" {
				curio.importsafe = true
			}
		}
	case 21:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:335
		{
			defercheckwidth()
		}
	case 22:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:339
		{
			resumecheckwidth()
			unimportfile()
		}
	case 23:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:348
		{
			Yyerror("empty top-level declaration")
			yyVAL.list = nil
		}
	case 25:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:354
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 26:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:358
		{
			Yyerror("non-declaration statement outside function body")
			yyVAL.list = nil
		}
	case 27:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:363
		{
			yyVAL.list = nil
		}
	case 28:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:369
		{
			yyVAL.list = yyDollar[2].list
		}
	case 29:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:373
		{
			yyVAL.list = yyDollar[3].list
		}
	case 30:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:377
		{
			yyVAL.list = nil
		}
	case 31:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:381
		{
			yyVAL.list = yyDollar[2].list
			iota_ = -100000
			lastconst = nil
		}
	case 32:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:387
		{
			yyVAL.list = yyDollar[3].list
			iota_ = -100000
			lastconst = nil
		}
	case 33:
		yyDollar = yyS[yypt-7 : yypt+1]
		//line go.y:393
		{
			yyVAL.list = concat(yyDollar[3].list, yyDollar[5].list)
			iota_ = -100000
			lastconst = nil
		}
	case 34:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:399
		{
			yyVAL.list = nil
			iota_ = -100000
		}
	case 35:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:404
		{
			yyVAL.list = list1(yyDollar[2].node)
		}
	case 36:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:408
		{
			yyVAL.list = yyDollar[3].list
		}
	case 37:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:412
		{
			yyVAL.list = nil
		}
	case 38:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:418
		{
			iota_ = 0
		}
	case 39:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:424
		{
			yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, nil)
		}
	case 40:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:428
		{
			yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list)
		}
	case 41:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:432
		{
			yyVAL.list = variter(yyDollar[1].list, nil, yyDollar[3].list)
		}
	case 42:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:438
		{
			yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list)
		}
	case 43:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:442
		{
			yyVAL.list = constiter(yyDollar[1].list, nil, yyDollar[3].list)
		}
	case 45:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:449
		{
			yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, nil)
		}
	case 46:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:453
		{
			yyVAL.list = constiter(yyDollar[1].list, nil, nil)
		}
	case 47:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:459
		{
			// 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:468
		{
			yyVAL.node = typedcl1(yyDollar[1].node, yyDollar[2].node, true)
		}
	case 49:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:474
		{
			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 = true
				break
			}
		}
	case 50:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:488
		{
			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:493
		{
			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:505
		{
			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", yyDollar[1].list.N)
				} 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:523
		{
			yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1))
			yyVAL.node.Implicit = true
			yyVAL.node.Etype = OADD
		}
	case 54:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:529
		{
			yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1))
			yyVAL.node.Implicit = true
			yyVAL.node.Etype = OSUB
		}
	case 55:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:537
		{
			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.Rlist = list1(nn)

					// keep track of the instances for reporting unused
					nn.Name.Defn = typesw.Right
				}
			}
		}
	case 56:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:560
		{
			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:578
		{
			// 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:587
		{
			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.Rlist = list1(nn)

					// keep track of the instances for reporting unused
					nn.Name.Defn = typesw.Right
				}
			}
		}
	case 59:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:608
		{
			markdcl()
		}
	case 60:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:612
		{
			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:623
		{
			// 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:634
		{
			// 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:653
		{
			yyVAL.list = nil
		}
	case 64:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:657
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[2].node)
		}
	case 65:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:663
		{
			markdcl()
		}
	case 66:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:667
		{
			yyVAL.list = yyDollar[3].list
			popdcl()
		}
	case 67:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:674
		{
			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:680
		{
			yyVAL.node = Nod(ORANGE, nil, yyDollar[4].node)
			yyVAL.node.List = yyDollar[1].list
			yyVAL.node.Colas = true
			colasdefn(yyDollar[1].list, yyVAL.node)
		}
	case 69:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:687
		{
			yyVAL.node = Nod(ORANGE, nil, yyDollar[2].node)
			yyVAL.node.Etype = 0 // := flag
		}
	case 70:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:694
		{
			// init ; test ; incr
			if yyDollar[5].node != nil && yyDollar[5].node.Colas {
				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.Left = yyDollar[3].node
			yyVAL.node.Right = yyDollar[5].node
		}
	case 71:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:707
		{
			// normal test
			yyVAL.node = Nod(OFOR, nil, nil)
			yyVAL.node.Left = yyDollar[1].node
		}
	case 73:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:716
		{
			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:723
		{
			markdcl()
		}
	case 75:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:727
		{
			yyVAL.node = yyDollar[3].node
			popdcl()
		}
	case 76:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:734
		{
			// test
			yyVAL.node = Nod(OIF, nil, nil)
			yyVAL.node.Left = yyDollar[1].node
		}
	case 77:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:740
		{
			// init ; test
			yyVAL.node = Nod(OIF, nil, nil)
			if yyDollar[1].node != nil {
				yyVAL.node.Ninit = list1(yyDollar[1].node)
			}
			yyVAL.node.Left = yyDollar[3].node
		}
	case 78:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:752
		{
			markdcl()
		}
	case 79:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:756
		{
			if yyDollar[3].node.Left == nil {
				Yyerror("missing condition in if statement")
			}
		}
	case 80:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:762
		{
			yyDollar[3].node.Nbody = yyDollar[5].list
		}
	case 81:
		yyDollar = yyS[yypt-8 : yypt+1]
		//line go.y:766
		{
			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.Rlist = list1(nn.N)
				n = nn.N
			}
		}
	case 82:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:784
		{
			markdcl()
		}
	case 83:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:788
		{
			if yyDollar[4].node.Left == 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:797
		{
			yyVAL.list = nil
		}
	case 85:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:801
		{
			yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list)
		}
	case 86:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:806
		{
			yyVAL.list = nil
		}
	case 87:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:810
		{
			l := &NodeList{N: yyDollar[2].node}
			l.End = l
			yyVAL.list = l
		}
	case 88:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:818
		{
			markdcl()
		}
	case 89:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:822
		{
			var n *Node
			n = yyDollar[3].node.Left
			if n != nil && n.Op != OTYPESW {
				n = nil
			}
			typesw = Nod(OXXX, typesw, n)
		}
	case 90:
		yyDollar = yyS[yypt-7 : yypt+1]
		//line go.y:831
		{
			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:841
		{
			typesw = Nod(OXXX, typesw, nil)
		}
	case 92:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:845
		{
			yyVAL.node = Nod(OSELECT, nil, nil)
			yyVAL.node.Lineno = typesw.Lineno
			yyVAL.node.List = yyDollar[4].list
			typesw = typesw.Left
		}
	case 94:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:858
		{
			yyVAL.node = Nod(OOROR, yyDollar[1].node, yyDollar[3].node)
		}
	case 95:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:862
		{
			yyVAL.node = Nod(OANDAND, yyDollar[1].node, yyDollar[3].node)
		}
	case 96:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:866
		{
			yyVAL.node = Nod(OEQ, yyDollar[1].node, yyDollar[3].node)
		}
	case 97:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:870
		{
			yyVAL.node = Nod(ONE, yyDollar[1].node, yyDollar[3].node)
		}
	case 98:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:874
		{
			yyVAL.node = Nod(OLT, yyDollar[1].node, yyDollar[3].node)
		}
	case 99:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:878
		{
			yyVAL.node = Nod(OLE, yyDollar[1].node, yyDollar[3].node)
		}
	case 100:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:882
		{
			yyVAL.node = Nod(OGE, yyDollar[1].node, yyDollar[3].node)
		}
	case 101:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:886
		{
			yyVAL.node = Nod(OGT, yyDollar[1].node, yyDollar[3].node)
		}
	case 102:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:890
		{
			yyVAL.node = Nod(OADD, yyDollar[1].node, yyDollar[3].node)
		}
	case 103:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:894
		{
			yyVAL.node = Nod(OSUB, yyDollar[1].node, yyDollar[3].node)
		}
	case 104:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:898
		{
			yyVAL.node = Nod(OOR, yyDollar[1].node, yyDollar[3].node)
		}
	case 105:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:902
		{
			yyVAL.node = Nod(OXOR, yyDollar[1].node, yyDollar[3].node)
		}
	case 106:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:906
		{
			yyVAL.node = Nod(OMUL, yyDollar[1].node, yyDollar[3].node)
		}
	case 107:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:910
		{
			yyVAL.node = Nod(ODIV, yyDollar[1].node, yyDollar[3].node)
		}
	case 108:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:914
		{
			yyVAL.node = Nod(OMOD, yyDollar[1].node, yyDollar[3].node)
		}
	case 109:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:918
		{
			yyVAL.node = Nod(OAND, yyDollar[1].node, yyDollar[3].node)
		}
	case 110:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:922
		{
			yyVAL.node = Nod(OANDNOT, yyDollar[1].node, yyDollar[3].node)
		}
	case 111:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:926
		{
			yyVAL.node = Nod(OLSH, yyDollar[1].node, yyDollar[3].node)
		}
	case 112:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:930
		{
			yyVAL.node = Nod(ORSH, yyDollar[1].node, yyDollar[3].node)
		}
	case 113:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:935
		{
			yyVAL.node = Nod(OSEND, yyDollar[1].node, yyDollar[3].node)
		}
	case 115:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:942
		{
			yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
		}
	case 116:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:946
		{
			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 = true
			} else {
				yyVAL.node = Nod(OADDR, yyDollar[2].node, nil)
			}
		}
	case 117:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:957
		{
			yyVAL.node = Nod(OPLUS, yyDollar[2].node, nil)
		}
	case 118:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:961
		{
			yyVAL.node = Nod(OMINUS, yyDollar[2].node, nil)
		}
	case 119:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:965
		{
			yyVAL.node = Nod(ONOT, yyDollar[2].node, nil)
		}
	case 120:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:969
		{
			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:974
		{
			yyVAL.node = Nod(OCOM, yyDollar[2].node, nil)
		}
	case 122:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:978
		{
			yyVAL.node = Nod(ORECV, yyDollar[2].node, nil)
		}
	case 123:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:988
		{
			yyVAL.node = Nod(OCALL, yyDollar[1].node, nil)
		}
	case 124:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:992
		{
			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:997
		{
			yyVAL.node = Nod(OCALL, yyDollar[1].node, nil)
			yyVAL.node.List = yyDollar[3].list
			yyVAL.node.Isddd = true
		}
	case 126:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1005
		{
			yyVAL.node = nodlit(yyDollar[1].val)
		}
	case 128:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1010
		{
			if yyDollar[1].node.Op == OPACK {
				var s *Sym
				s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Name.Pkg)
				yyDollar[1].node.Used = true
				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:1021
		{
			yyVAL.node = Nod(ODOTTYPE, yyDollar[1].node, yyDollar[4].node)
		}
	case 130:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:1025
		{
			yyVAL.node = Nod(OTYPESW, nil, yyDollar[1].node)
		}
	case 131:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:1029
		{
			yyVAL.node = Nod(OINDEX, yyDollar[1].node, yyDollar[3].node)
		}
	case 132:
		yyDollar = yyS[yypt-6 : yypt+1]
		//line go.y:1033
		{
			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:1037
		{
			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 135:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:1048
		{
			// 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:1054
		{
			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:1061
		{
			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:1067
		{
			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 140:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1076
		{
			// 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:1084
		{
			yyVAL.node = Nod(OKEY, yyDollar[1].node, yyDollar[3].node)
		}
	case 142:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1090
		{
			// 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 = true
			}
		}
	case 143:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:1103
		{
			yyVAL.node = yyDollar[2].node
			yyVAL.node.List = yyDollar[3].list
		}
	case 145:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:1111
		{
			yyVAL.node = yyDollar[2].node
			yyVAL.node.List = yyDollar[3].list
		}
	case 147:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1119
		{
			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 151:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1140
		{
			yyVAL.i = LBODY
		}
	case 152:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1144
		{
			yyVAL.i = '{'
		}
	case 153:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1155
		{
			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:1165
		{
			yyVAL.node = dclname(yyDollar[1].sym)
		}
	case 155:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1170
		{
			yyVAL.node = nil
		}
	case 157:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1177
		{
			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 159:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1186
		{
			yyVAL.sym = nil
		}
	case 160:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:1192
		{
			var p *Pkg

			if yyDollar[2].val.U.(string) == "" {
				p = importpkg
			} else {
				if isbadimport(yyDollar[2].val.U.(string)) {
					errorexit()
				}
				p = mkpkg(yyDollar[2].val.U.(string))
			}
			yyVAL.sym = Pkglookup(yyDollar[4].sym.Name, p)
		}
	case 161:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:1206
		{
			var p *Pkg

			if yyDollar[2].val.U.(string) == "" {
				p = importpkg
			} else {
				if isbadimport(yyDollar[2].val.U.(string)) {
					errorexit()
				}
				p = mkpkg(yyDollar[2].val.U.(string))
			}
			yyVAL.sym = Pkglookup("?", p)
		}
	case 162:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1222
		{
			yyVAL.node = oldname(yyDollar[1].sym)
			if yyVAL.node.Name != nil && yyVAL.node.Name.Pack != nil {
				yyVAL.node.Name.Pack.Used = true
			}
		}
	case 164:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1243
		{
			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:1248
		{
			yyVAL.node = Nod(ODDD, yyDollar[2].node, nil)
		}
	case 171:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1259
		{
			yyVAL.node = yyDollar[2].node
		}
	case 175:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1268
		{
			yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
		}
	case 180:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1278
		{
			yyVAL.node = yyDollar[2].node
		}
	case 190:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1299
		{
			if yyDollar[1].node.Op == OPACK {
				var s *Sym
				s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Name.Pkg)
				yyDollar[1].node.Used = true
				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:1312
		{
			yyVAL.node = Nod(OTARRAY, yyDollar[2].node, yyDollar[4].node)
		}
	case 192:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:1316
		{
			// 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:1321
		{
			yyVAL.node = Nod(OTCHAN, yyDollar[2].node, nil)
			yyVAL.node.Etype = Cboth
		}
	case 194:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1326
		{
			yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil)
			yyVAL.node.Etype = Csend
		}
	case 195:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:1331
		{
			yyVAL.node = Nod(OTMAP, yyDollar[3].node, yyDollar[5].node)
		}
	case 198:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1339
		{
			yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
		}
	case 199:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1345
		{
			yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil)
			yyVAL.node.Etype = Crecv
		}
	case 200:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:1352
		{
			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:1358
		{
			yyVAL.node = Nod(OTSTRUCT, nil, nil)
			fixlbrace(yyDollar[2].i)
		}
	case 202:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:1365
		{
			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:1371
		{
			yyVAL.node = Nod(OTINTER, nil, nil)
			fixlbrace(yyDollar[2].i)
		}
	case 204:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1382
		{
			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.Func.Endlineno = lineno
			yyVAL.node.Noescape = noescape
			yyVAL.node.Func.Nosplit = nosplit
			yyVAL.node.Func.Nowritebarrier = nowritebarrier
			yyVAL.node.Func.Systemstack = systemstack
			funcbody(yyVAL.node)
		}
	case 205:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:1401
		{
			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.Func.Nname = newfuncname(yyDollar[1].sym)
			yyVAL.node.Func.Nname.Name.Defn = yyVAL.node
			yyVAL.node.Func.Nname.Name.Param.Ntype = t // TODO: check if nname already has an ntype
			declare(yyVAL.node.Func.Nname, PFUNC)

			funchdr(yyVAL.node)
		}
	case 206:
		yyDollar = yyS[yypt-8 : yypt+1]
		//line go.y:1432
		{
			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.Func.Shortname = newfuncname(yyDollar[4].sym)
			yyVAL.node.Func.Nname = methodname1(yyVAL.node.Func.Shortname, rcvr.Right)
			yyVAL.node.Func.Nname.Name.Defn = yyVAL.node
			yyVAL.node.Func.Nname.Name.Param.Ntype = t
			yyVAL.node.Func.Nname.Nointerface = nointerface
			declare(yyVAL.node.Func.Nname, PFUNC)

			funchdr(yyVAL.node)
		}
	case 207:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:1470
		{
			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", s, s.Def.Type, t)
			}

			yyVAL.node = newfuncname(s)
			yyVAL.node.Type = t
			declare(yyVAL.node, PFUNC)

			funchdr(yyVAL.node)
		}
	case 208:
		yyDollar = yyS[yypt-8 : yypt+1]
		//line go.y:1495
		{
			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:1513
		{
			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:1521
		{
			yyVAL.list = nil
		}
	case 211:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1525
		{
			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:1534
		{
			yyVAL.list = nil
		}
	case 213:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1538
		{
			yyVAL.list = list1(Nod(ODCLFIELD, nil, yyDollar[1].node))
		}
	case 214:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1542
		{
			yyDollar[2].list = checkarglist(yyDollar[2].list, 0)
			yyVAL.list = yyDollar[2].list
		}
	case 215:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1549
		{
			closurehdr(yyDollar[1].node)
		}
	case 216:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:1555
		{
			yyVAL.node = closurebody(yyDollar[3].list)
			fixlbrace(yyDollar[2].i)
		}
	case 217:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1560
		{
			yyVAL.node = closurebody(nil)
		}
	case 218:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1571
		{
			yyVAL.list = nil
		}
	case 219:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1575
		{
			yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list)
			if nsyntaxerrors == 0 {
				testdclstack()
			}
			nointerface = false
			noescape = false
			nosplit = false
			nowritebarrier = false
			systemstack = false
		}
	case 221:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1590
		{
			yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
		}
	case 223:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1597
		{
			yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
		}
	case 224:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1603
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 225:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1607
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 227:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1614
		{
			yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
		}
	case 228:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1620
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 229:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1624
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 230:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1630
		{
			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.SetVal(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.SetVal(yyDollar[3].val)
			}
		}
	case 231:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1654
		{
			yyDollar[1].node.SetVal(yyDollar[2].val)
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 232:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:1659
		{
			yyDollar[2].node.SetVal(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:1665
		{
			yyDollar[2].node.Right = Nod(OIND, yyDollar[2].node.Right, nil)
			yyDollar[2].node.SetVal(yyDollar[3].val)
			yyVAL.list = list1(yyDollar[2].node)
		}
	case 234:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:1671
		{
			yyDollar[3].node.Right = Nod(OIND, yyDollar[3].node.Right, nil)
			yyDollar[3].node.SetVal(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:1678
		{
			yyDollar[3].node.Right = Nod(OIND, yyDollar[3].node.Right, nil)
			yyDollar[3].node.SetVal(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:1687
		{
			var n *Node

			yyVAL.sym = yyDollar[1].sym
			n = oldname(yyDollar[1].sym)
			if n.Name != nil && n.Name.Pack != nil {
				n.Name.Pack.Used = true
			}
		}
	case 237:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1697
		{
			var pkg *Pkg

			if yyDollar[1].sym.Def == nil || yyDollar[1].sym.Def.Op != OPACK {
				Yyerror("%v is not a package", yyDollar[1].sym)
				pkg = localpkg
			} else {
				yyDollar[1].sym.Def.Used = true
				pkg = yyDollar[1].sym.Def.Name.Pkg
			}
			yyVAL.sym = restrictlookup(yyDollar[3].sym.Name, pkg)
		}
	case 238:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1712
		{
			yyVAL.node = embedded(yyDollar[1].sym, localpkg)
		}
	case 239:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1718
		{
			yyVAL.node = Nod(ODCLFIELD, yyDollar[1].node, yyDollar[2].node)
			ifacedcl(yyVAL.node)
		}
	case 240:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1723
		{
			yyVAL.node = Nod(ODCLFIELD, nil, oldname(yyDollar[1].sym))
		}
	case 241:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1727
		{
			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:1734
		{
			// 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 244:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1748
		{
			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:1754
		{
			yyVAL.node = Nod(ONONAME, nil, nil)
			yyVAL.node.Sym = yyDollar[1].sym
			yyVAL.node = Nod(OKEY, yyVAL.node, yyDollar[2].node)
		}
	case 247:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1763
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 248:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1767
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 249:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1772
		{
			yyVAL.list = nil
		}
	case 250:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1776
		{
			yyVAL.list = yyDollar[1].list
		}
	case 251:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1784
		{
			yyVAL.node = nil
		}
	case 253:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1789
		{
			yyVAL.node = liststmt(yyDollar[1].list)
		}
	case 255:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1794
		{
			yyVAL.node = nil
		}
	case 261:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1805
		{
			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:1810
		{
			var l *NodeList

			yyDollar[1].node.Name.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:1821
		{
			// 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:1827
		{
			yyVAL.node = Nod(OBREAK, yyDollar[2].node, nil)
		}
	case 265:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1831
		{
			yyVAL.node = Nod(OCONTINUE, yyDollar[2].node, nil)
		}
	case 266:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1835
		{
			yyVAL.node = Nod(OPROC, yyDollar[2].node, nil)
		}
	case 267:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1839
		{
			yyVAL.node = Nod(ODEFER, yyDollar[2].node, nil)
		}
	case 268:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1843
		{
			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:1848
		{
			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.Func.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:1870
		{
			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:1877
		{
			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:1886
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 273:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1890
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 274:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1896
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 275:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1900
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 276:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1906
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 277:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1910
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 278:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1916
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 279:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1920
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 280:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1929
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 281:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:1933
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 282:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1937
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 283:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:1941
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 284:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1946
		{
			yyVAL.list = nil
		}
	case 285:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:1950
		{
			yyVAL.list = yyDollar[1].list
		}
	case 290:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1964
		{
			yyVAL.node = nil
		}
	case 292:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1970
		{
			yyVAL.list = nil
		}
	case 294:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1976
		{
			yyVAL.node = nil
		}
	case 296:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1982
		{
			yyVAL.list = nil
		}
	case 298:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1988
		{
			yyVAL.list = nil
		}
	case 300:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:1994
		{
			yyVAL.list = nil
		}
	case 302:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:2000
		{
			yyVAL.val.U = nil
		}
	case 304:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:2010
		{
			importimport(yyDollar[2].sym, yyDollar[3].val.U.(string))
		}
	case 305:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:2014
		{
			importvar(yyDollar[2].sym, yyDollar[3].typ)
		}
	case 306:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:2018
		{
			importconst(yyDollar[2].sym, Types[TIDEAL], yyDollar[4].node)
		}
	case 307:
		yyDollar = yyS[yypt-6 : yypt+1]
		//line go.y:2022
		{
			importconst(yyDollar[2].sym, yyDollar[3].typ, yyDollar[5].node)
		}
	case 308:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:2026
		{
			importtype(yyDollar[2].typ, yyDollar[3].typ)
		}
	case 309:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:2030
		{
			if yyDollar[2].node == nil {
				dclcontext = PEXTERN // since we skip the funcbody below
				break
			}

			yyDollar[2].node.Func.Inl = yyDollar[3].list

			funcbody(yyDollar[2].node)
			importlist = list(importlist, yyDollar[2].node)

			if Debug['E'] > 0 {
				fmt.Printf("import [%q] func %v \n", importpkg.Path, yyDollar[2].node)
				if Debug['m'] > 2 && yyDollar[2].node.Func.Inl != nil {
					fmt.Printf("inl body:%v\n", yyDollar[2].node.Func.Inl)
				}
			}
		}
	case 310:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2051
		{
			yyVAL.sym = yyDollar[1].sym
			structpkg = yyVAL.sym.Pkg
		}
	case 311:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2058
		{
			yyVAL.typ = pkgtype(yyDollar[1].sym)
			importsym(yyDollar[1].sym, OTYPE)
		}
	case 317:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2078
		{
			yyVAL.typ = pkgtype(yyDollar[1].sym)
		}
	case 318:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2082
		{
			// 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:2093
		{
			yyVAL.typ = aindex(nil, yyDollar[3].typ)
		}
	case 320:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:2097
		{
			yyVAL.typ = aindex(nodlit(yyDollar[2].val), yyDollar[4].typ)
		}
	case 321:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:2101
		{
			yyVAL.typ = maptype(yyDollar[3].typ, yyDollar[5].typ)
		}
	case 322:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:2105
		{
			yyVAL.typ = tostruct(yyDollar[3].list)
		}
	case 323:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:2109
		{
			yyVAL.typ = tointerface(yyDollar[3].list)
		}
	case 324:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:2113
		{
			yyVAL.typ = Ptrto(yyDollar[2].typ)
		}
	case 325:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:2117
		{
			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:2123
		{
			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:2129
		{
			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:2137
		{
			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:2145
		{
			yyVAL.typ = functype(nil, yyDollar[3].list, yyDollar[5].list)
		}
	case 330:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:2151
		{
			yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[2].typ))
			if yyDollar[1].sym != nil {
				yyVAL.node.Left = newname(yyDollar[1].sym)
			}
			yyVAL.node.SetVal(yyDollar[3].val)
		}
	case 331:
		yyDollar = yyS[yypt-4 : yypt+1]
		//line go.y:2159
		{
			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 = true
			yyVAL.node.SetVal(yyDollar[4].val)
		}
	case 332:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:2176
		{
			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.SetVal(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.SetVal(yyDollar[3].val)
			}
		}
	case 333:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:2200
		{
			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:2204
		{
			yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ))
		}
	case 335:
		yyDollar = yyS[yypt-0 : yypt+1]
		//line go.y:2209
		{
			yyVAL.list = nil
		}
	case 337:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:2216
		{
			yyVAL.list = yyDollar[2].list
		}
	case 338:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2220
		{
			yyVAL.list = list1(Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ)))
		}
	case 339:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2230
		{
			yyVAL.node = nodlit(yyDollar[1].val)
		}
	case 340:
		yyDollar = yyS[yypt-2 : yypt+1]
		//line go.y:2234
		{
			yyVAL.node = nodlit(yyDollar[2].val)
			switch yyVAL.node.Val().Ctype() {
			case CTINT, CTRUNE:
				mpnegfix(yyVAL.node.Val().U.(*Mpint))
				break
			case CTFLT:
				mpnegflt(yyVAL.node.Val().U.(*Mpflt))
				break
			case CTCPLX:
				mpnegflt(&yyVAL.node.Val().U.(*Mpcplx).Real)
				mpnegflt(&yyVAL.node.Val().U.(*Mpcplx).Imag)
				break
			default:
				Yyerror("bad negated constant")
			}
		}
	case 341:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2252
		{
			yyVAL.node = oldname(Pkglookup(yyDollar[1].sym.Name, builtinpkg))
			if yyVAL.node.Op != OLITERAL {
				Yyerror("bad constant %v", yyVAL.node.Sym)
			}
		}
	case 343:
		yyDollar = yyS[yypt-5 : yypt+1]
		//line go.y:2262
		{
			if yyDollar[2].node.Val().Ctype() == CTRUNE && yyDollar[4].node.Val().Ctype() == CTINT {
				yyVAL.node = yyDollar[2].node
				mpaddfixfix(yyDollar[2].node.Val().U.(*Mpint), yyDollar[4].node.Val().U.(*Mpint), 0)
				break
			}
			yyDollar[4].node.Val().U.(*Mpcplx).Real = yyDollar[4].node.Val().U.(*Mpcplx).Imag
			Mpmovecflt(&yyDollar[4].node.Val().U.(*Mpcplx).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:2278
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 347:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:2282
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 348:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2288
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 349:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:2292
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	case 350:
		yyDollar = yyS[yypt-1 : yypt+1]
		//line go.y:2298
		{
			yyVAL.list = list1(yyDollar[1].node)
		}
	case 351:
		yyDollar = yyS[yypt-3 : yypt+1]
		//line go.y:2302
		{
			yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
		}
	}
	goto yystack /* stack new state and value */
}
