mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
This change breaks out most of the atomics functions in the runtime into package runtime/internal/atomic. It adds some basic support in the toolchain for runtime packages, and also modifies linux/arm atomics to remove the dependency on the runtime's mutex. The mutexes have been replaced with spinlocks. all trybots are happy! In addition to the trybots, I've tested on the darwin/arm64 builder, on the darwin/arm builder, and on a ppc64le machine. Change-Id: I6698c8e3cf3834f55ce5824059f44d00dc8e3c2f Reviewed-on: https://go-review.googlesource.com/14204 Run-TryBot: Michael Matloob <matloob@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
3536 lines
85 KiB
Go
3536 lines
85 KiB
Go
//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:2317
|
|
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 = true
|
|
}
|
|
}
|
|
|
|
//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
|
|
_ = yyDollar // silence set and not used
|
|
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" {
|
|
lineno = int32(yyDollar[1].i)
|
|
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:273
|
|
{
|
|
// 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 {
|
|
Fatalf("phase error in import")
|
|
}
|
|
}
|
|
case 15:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:289
|
|
{
|
|
// 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:296
|
|
{
|
|
// 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:303
|
|
{
|
|
// 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:312
|
|
{
|
|
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)
|
|
}
|
|
if incannedimport == 0 {
|
|
importpkg.Direct = true
|
|
}
|
|
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:331
|
|
{
|
|
if yyDollar[1].sym.Name == "safe" {
|
|
curio.importsafe = true
|
|
}
|
|
}
|
|
case 21:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:338
|
|
{
|
|
defercheckwidth()
|
|
}
|
|
case 22:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:342
|
|
{
|
|
resumecheckwidth()
|
|
unimportfile()
|
|
}
|
|
case 23:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:351
|
|
{
|
|
Yyerror("empty top-level declaration")
|
|
yyVAL.list = nil
|
|
}
|
|
case 25:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:357
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 26:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:361
|
|
{
|
|
Yyerror("non-declaration statement outside function body")
|
|
yyVAL.list = nil
|
|
}
|
|
case 27:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:366
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 28:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:372
|
|
{
|
|
yyVAL.list = yyDollar[2].list
|
|
}
|
|
case 29:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:376
|
|
{
|
|
yyVAL.list = yyDollar[3].list
|
|
}
|
|
case 30:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:380
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 31:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:384
|
|
{
|
|
yyVAL.list = yyDollar[2].list
|
|
iota_ = -100000
|
|
lastconst = nil
|
|
}
|
|
case 32:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:390
|
|
{
|
|
yyVAL.list = yyDollar[3].list
|
|
iota_ = -100000
|
|
lastconst = nil
|
|
}
|
|
case 33:
|
|
yyDollar = yyS[yypt-7 : yypt+1]
|
|
//line go.y:396
|
|
{
|
|
yyVAL.list = concat(yyDollar[3].list, yyDollar[5].list)
|
|
iota_ = -100000
|
|
lastconst = nil
|
|
}
|
|
case 34:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:402
|
|
{
|
|
yyVAL.list = nil
|
|
iota_ = -100000
|
|
}
|
|
case 35:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:407
|
|
{
|
|
yyVAL.list = list1(yyDollar[2].node)
|
|
}
|
|
case 36:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:411
|
|
{
|
|
yyVAL.list = yyDollar[3].list
|
|
}
|
|
case 37:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:415
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 38:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:421
|
|
{
|
|
iota_ = 0
|
|
}
|
|
case 39:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:427
|
|
{
|
|
yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, nil)
|
|
}
|
|
case 40:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:431
|
|
{
|
|
yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list)
|
|
}
|
|
case 41:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:435
|
|
{
|
|
yyVAL.list = variter(yyDollar[1].list, nil, yyDollar[3].list)
|
|
}
|
|
case 42:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:441
|
|
{
|
|
yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list)
|
|
}
|
|
case 43:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:445
|
|
{
|
|
yyVAL.list = constiter(yyDollar[1].list, nil, yyDollar[3].list)
|
|
}
|
|
case 45:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:452
|
|
{
|
|
yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, nil)
|
|
}
|
|
case 46:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:456
|
|
{
|
|
yyVAL.list = constiter(yyDollar[1].list, nil, nil)
|
|
}
|
|
case 47:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:462
|
|
{
|
|
// 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:471
|
|
{
|
|
yyVAL.node = typedcl1(yyDollar[1].node, yyDollar[2].node, true)
|
|
}
|
|
case 49:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:477
|
|
{
|
|
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:491
|
|
{
|
|
yyVAL.node = Nod(OASOP, yyDollar[1].node, yyDollar[3].node)
|
|
yyVAL.node.Etype = EType(yyDollar[2].i) // rathole to pass opcode
|
|
}
|
|
case 51:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:496
|
|
{
|
|
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:508
|
|
{
|
|
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 && (yyDollar[1].list.N.Op != OLITERAL || yyDollar[1].list.N.Name == nil)) || 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:526
|
|
{
|
|
yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1))
|
|
yyVAL.node.Implicit = true
|
|
// TODO(marvin): Fix Node.EType type union.
|
|
yyVAL.node.Etype = EType(OADD)
|
|
}
|
|
case 54:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:533
|
|
{
|
|
yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1))
|
|
yyVAL.node.Implicit = true
|
|
// TODO(marvin): Fix Node.EType type union.
|
|
yyVAL.node.Etype = EType(OSUB)
|
|
}
|
|
case 55:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:542
|
|
{
|
|
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:565
|
|
{
|
|
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:583
|
|
{
|
|
// 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:592
|
|
{
|
|
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:613
|
|
{
|
|
markdcl()
|
|
}
|
|
case 60:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:617
|
|
{
|
|
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:628
|
|
{
|
|
// 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:639
|
|
{
|
|
// 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:658
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 64:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:662
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[2].node)
|
|
}
|
|
case 65:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:668
|
|
{
|
|
markdcl()
|
|
}
|
|
case 66:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:672
|
|
{
|
|
yyVAL.list = yyDollar[3].list
|
|
popdcl()
|
|
}
|
|
case 67:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:679
|
|
{
|
|
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:685
|
|
{
|
|
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:692
|
|
{
|
|
yyVAL.node = Nod(ORANGE, nil, yyDollar[2].node)
|
|
yyVAL.node.Etype = 0 // := flag
|
|
}
|
|
case 70:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:699
|
|
{
|
|
// 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:712
|
|
{
|
|
// 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:721
|
|
{
|
|
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:728
|
|
{
|
|
markdcl()
|
|
}
|
|
case 75:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:732
|
|
{
|
|
yyVAL.node = yyDollar[3].node
|
|
popdcl()
|
|
}
|
|
case 76:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:739
|
|
{
|
|
// test
|
|
yyVAL.node = Nod(OIF, nil, nil)
|
|
yyVAL.node.Left = yyDollar[1].node
|
|
}
|
|
case 77:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:745
|
|
{
|
|
// 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:757
|
|
{
|
|
markdcl()
|
|
}
|
|
case 79:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:761
|
|
{
|
|
if yyDollar[3].node.Left == nil {
|
|
Yyerror("missing condition in if statement")
|
|
}
|
|
}
|
|
case 80:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:767
|
|
{
|
|
yyDollar[3].node.Nbody = yyDollar[5].list
|
|
}
|
|
case 81:
|
|
yyDollar = yyS[yypt-8 : yypt+1]
|
|
//line go.y:771
|
|
{
|
|
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:789
|
|
{
|
|
markdcl()
|
|
}
|
|
case 83:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:793
|
|
{
|
|
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:802
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 85:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:806
|
|
{
|
|
yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list)
|
|
}
|
|
case 86:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:811
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 87:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:815
|
|
{
|
|
l := &NodeList{N: yyDollar[2].node}
|
|
l.End = l
|
|
yyVAL.list = l
|
|
}
|
|
case 88:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:823
|
|
{
|
|
markdcl()
|
|
}
|
|
case 89:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:827
|
|
{
|
|
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:836
|
|
{
|
|
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:846
|
|
{
|
|
typesw = Nod(OXXX, typesw, nil)
|
|
}
|
|
case 92:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:850
|
|
{
|
|
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:863
|
|
{
|
|
yyVAL.node = Nod(OOROR, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 95:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:867
|
|
{
|
|
yyVAL.node = Nod(OANDAND, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 96:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:871
|
|
{
|
|
yyVAL.node = Nod(OEQ, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 97:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:875
|
|
{
|
|
yyVAL.node = Nod(ONE, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 98:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:879
|
|
{
|
|
yyVAL.node = Nod(OLT, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 99:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:883
|
|
{
|
|
yyVAL.node = Nod(OLE, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 100:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:887
|
|
{
|
|
yyVAL.node = Nod(OGE, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 101:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:891
|
|
{
|
|
yyVAL.node = Nod(OGT, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 102:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:895
|
|
{
|
|
yyVAL.node = Nod(OADD, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 103:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:899
|
|
{
|
|
yyVAL.node = Nod(OSUB, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 104:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:903
|
|
{
|
|
yyVAL.node = Nod(OOR, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 105:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:907
|
|
{
|
|
yyVAL.node = Nod(OXOR, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 106:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:911
|
|
{
|
|
yyVAL.node = Nod(OMUL, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 107:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:915
|
|
{
|
|
yyVAL.node = Nod(ODIV, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 108:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:919
|
|
{
|
|
yyVAL.node = Nod(OMOD, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 109:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:923
|
|
{
|
|
yyVAL.node = Nod(OAND, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 110:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:927
|
|
{
|
|
yyVAL.node = Nod(OANDNOT, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 111:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:931
|
|
{
|
|
yyVAL.node = Nod(OLSH, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 112:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:935
|
|
{
|
|
yyVAL.node = Nod(ORSH, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 113:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:940
|
|
{
|
|
yyVAL.node = Nod(OSEND, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 115:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:947
|
|
{
|
|
yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
|
|
}
|
|
case 116:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:951
|
|
{
|
|
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:962
|
|
{
|
|
yyVAL.node = Nod(OPLUS, yyDollar[2].node, nil)
|
|
}
|
|
case 118:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:966
|
|
{
|
|
yyVAL.node = Nod(OMINUS, yyDollar[2].node, nil)
|
|
}
|
|
case 119:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:970
|
|
{
|
|
yyVAL.node = Nod(ONOT, yyDollar[2].node, nil)
|
|
}
|
|
case 120:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:974
|
|
{
|
|
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:979
|
|
{
|
|
yyVAL.node = Nod(OCOM, yyDollar[2].node, nil)
|
|
}
|
|
case 122:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:983
|
|
{
|
|
yyVAL.node = Nod(ORECV, yyDollar[2].node, nil)
|
|
}
|
|
case 123:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:993
|
|
{
|
|
yyVAL.node = Nod(OCALL, yyDollar[1].node, nil)
|
|
}
|
|
case 124:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:997
|
|
{
|
|
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:1002
|
|
{
|
|
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:1010
|
|
{
|
|
yyVAL.node = nodlit(yyDollar[1].val)
|
|
}
|
|
case 128:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1015
|
|
{
|
|
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:1026
|
|
{
|
|
yyVAL.node = Nod(ODOTTYPE, yyDollar[1].node, yyDollar[4].node)
|
|
}
|
|
case 130:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:1030
|
|
{
|
|
yyVAL.node = Nod(OTYPESW, nil, yyDollar[1].node)
|
|
}
|
|
case 131:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:1034
|
|
{
|
|
yyVAL.node = Nod(OINDEX, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 132:
|
|
yyDollar = yyS[yypt-6 : yypt+1]
|
|
//line go.y:1038
|
|
{
|
|
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:1042
|
|
{
|
|
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:1053
|
|
{
|
|
// 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:1059
|
|
{
|
|
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:1066
|
|
{
|
|
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:1072
|
|
{
|
|
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:1081
|
|
{
|
|
// 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:1089
|
|
{
|
|
yyVAL.node = Nod(OKEY, yyDollar[1].node, yyDollar[3].node)
|
|
}
|
|
case 142:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1095
|
|
{
|
|
// 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:1108
|
|
{
|
|
yyVAL.node = yyDollar[2].node
|
|
yyVAL.node.List = yyDollar[3].list
|
|
}
|
|
case 145:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:1116
|
|
{
|
|
yyVAL.node = yyDollar[2].node
|
|
yyVAL.node.List = yyDollar[3].list
|
|
}
|
|
case 147:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1124
|
|
{
|
|
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:1145
|
|
{
|
|
yyVAL.i = LBODY
|
|
}
|
|
case 152:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1149
|
|
{
|
|
yyVAL.i = '{'
|
|
}
|
|
case 153:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1160
|
|
{
|
|
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:1170
|
|
{
|
|
yyVAL.node = dclname(yyDollar[1].sym)
|
|
}
|
|
case 155:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1175
|
|
{
|
|
yyVAL.node = nil
|
|
}
|
|
case 157:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1182
|
|
{
|
|
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:1191
|
|
{
|
|
yyVAL.sym = nil
|
|
}
|
|
case 160:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:1197
|
|
{
|
|
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:1211
|
|
{
|
|
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:1227
|
|
{
|
|
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:1248
|
|
{
|
|
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:1253
|
|
{
|
|
yyVAL.node = Nod(ODDD, yyDollar[2].node, nil)
|
|
}
|
|
case 171:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1264
|
|
{
|
|
yyVAL.node = yyDollar[2].node
|
|
}
|
|
case 175:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1273
|
|
{
|
|
yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
|
|
}
|
|
case 180:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1283
|
|
{
|
|
yyVAL.node = yyDollar[2].node
|
|
}
|
|
case 190:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1304
|
|
{
|
|
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:1317
|
|
{
|
|
yyVAL.node = Nod(OTARRAY, yyDollar[2].node, yyDollar[4].node)
|
|
}
|
|
case 192:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:1321
|
|
{
|
|
// 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:1326
|
|
{
|
|
yyVAL.node = Nod(OTCHAN, yyDollar[2].node, nil)
|
|
yyVAL.node.Etype = Cboth
|
|
}
|
|
case 194:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1331
|
|
{
|
|
yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil)
|
|
yyVAL.node.Etype = Csend
|
|
}
|
|
case 195:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:1336
|
|
{
|
|
yyVAL.node = Nod(OTMAP, yyDollar[3].node, yyDollar[5].node)
|
|
}
|
|
case 198:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1344
|
|
{
|
|
yyVAL.node = Nod(OIND, yyDollar[2].node, nil)
|
|
}
|
|
case 199:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1350
|
|
{
|
|
yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil)
|
|
yyVAL.node.Etype = Crecv
|
|
}
|
|
case 200:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:1357
|
|
{
|
|
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:1363
|
|
{
|
|
yyVAL.node = Nod(OTSTRUCT, nil, nil)
|
|
fixlbrace(yyDollar[2].i)
|
|
}
|
|
case 202:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:1370
|
|
{
|
|
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:1376
|
|
{
|
|
yyVAL.node = Nod(OTINTER, nil, nil)
|
|
fixlbrace(yyDollar[2].i)
|
|
}
|
|
case 204:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1387
|
|
{
|
|
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.Norace = norace
|
|
yyVAL.node.Func.Nosplit = nosplit
|
|
yyVAL.node.Func.Noinline = noinline
|
|
yyVAL.node.Func.Nowritebarrier = nowritebarrier
|
|
yyVAL.node.Func.Nowritebarrierrec = nowritebarrierrec
|
|
yyVAL.node.Func.Systemstack = systemstack
|
|
funcbody(yyVAL.node)
|
|
}
|
|
case 205:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:1409
|
|
{
|
|
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:1440
|
|
{
|
|
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:1478
|
|
{
|
|
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:1503
|
|
{
|
|
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:1521
|
|
{
|
|
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:1529
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 211:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1533
|
|
{
|
|
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:1542
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 213:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1546
|
|
{
|
|
yyVAL.list = list1(Nod(ODCLFIELD, nil, yyDollar[1].node))
|
|
}
|
|
case 214:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1550
|
|
{
|
|
yyDollar[2].list = checkarglist(yyDollar[2].list, 0)
|
|
yyVAL.list = yyDollar[2].list
|
|
}
|
|
case 215:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1557
|
|
{
|
|
closurehdr(yyDollar[1].node)
|
|
}
|
|
case 216:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:1563
|
|
{
|
|
yyVAL.node = closurebody(yyDollar[3].list)
|
|
fixlbrace(yyDollar[2].i)
|
|
}
|
|
case 217:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1568
|
|
{
|
|
yyVAL.node = closurebody(nil)
|
|
}
|
|
case 218:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1579
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 219:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1583
|
|
{
|
|
yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list)
|
|
if nsyntaxerrors == 0 {
|
|
testdclstack()
|
|
}
|
|
noescape = false
|
|
noinline = false
|
|
nointerface = false
|
|
norace = false
|
|
nosplit = false
|
|
nowritebarrier = false
|
|
nowritebarrierrec = false
|
|
systemstack = false
|
|
}
|
|
case 221:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1601
|
|
{
|
|
yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
|
|
}
|
|
case 223:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1608
|
|
{
|
|
yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
|
|
}
|
|
case 224:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1614
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 225:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1618
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 227:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1625
|
|
{
|
|
yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list)
|
|
}
|
|
case 228:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1631
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 229:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1635
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 230:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1641
|
|
{
|
|
var l *NodeList
|
|
|
|
var n *Node
|
|
l = yyDollar[1].list
|
|
if l == nil || l.N.Sym.Name == "?" {
|
|
// ? 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:1665
|
|
{
|
|
yyDollar[1].node.SetVal(yyDollar[2].val)
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 232:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:1670
|
|
{
|
|
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:1676
|
|
{
|
|
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:1682
|
|
{
|
|
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:1689
|
|
{
|
|
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:1698
|
|
{
|
|
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:1708
|
|
{
|
|
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:1723
|
|
{
|
|
yyVAL.node = embedded(yyDollar[1].sym, localpkg)
|
|
}
|
|
case 239:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1729
|
|
{
|
|
yyVAL.node = Nod(ODCLFIELD, yyDollar[1].node, yyDollar[2].node)
|
|
ifacedcl(yyVAL.node)
|
|
}
|
|
case 240:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1734
|
|
{
|
|
yyVAL.node = Nod(ODCLFIELD, nil, oldname(yyDollar[1].sym))
|
|
}
|
|
case 241:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1738
|
|
{
|
|
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:1745
|
|
{
|
|
// 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:1759
|
|
{
|
|
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:1765
|
|
{
|
|
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:1774
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 248:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1778
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 249:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1783
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 250:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1787
|
|
{
|
|
yyVAL.list = yyDollar[1].list
|
|
}
|
|
case 251:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1795
|
|
{
|
|
yyVAL.node = nil
|
|
}
|
|
case 253:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1800
|
|
{
|
|
yyVAL.node = liststmt(yyDollar[1].list)
|
|
}
|
|
case 255:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1805
|
|
{
|
|
yyVAL.node = nil
|
|
}
|
|
case 261:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1816
|
|
{
|
|
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:1821
|
|
{
|
|
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:1832
|
|
{
|
|
// 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:1838
|
|
{
|
|
yyVAL.node = Nod(OBREAK, yyDollar[2].node, nil)
|
|
}
|
|
case 265:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1842
|
|
{
|
|
yyVAL.node = Nod(OCONTINUE, yyDollar[2].node, nil)
|
|
}
|
|
case 266:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1846
|
|
{
|
|
yyVAL.node = Nod(OPROC, yyDollar[2].node, nil)
|
|
}
|
|
case 267:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1850
|
|
{
|
|
yyVAL.node = Nod(ODEFER, yyDollar[2].node, nil)
|
|
}
|
|
case 268:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1854
|
|
{
|
|
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:1859
|
|
{
|
|
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:1881
|
|
{
|
|
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:1888
|
|
{
|
|
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:1897
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 273:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1901
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 274:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1907
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 275:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1911
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 276:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1917
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 277:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1921
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 278:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1927
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 279:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1931
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 280:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1940
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 281:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:1944
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 282:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1948
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 283:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:1952
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 284:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1957
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 285:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:1961
|
|
{
|
|
yyVAL.list = yyDollar[1].list
|
|
}
|
|
case 290:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1975
|
|
{
|
|
yyVAL.node = nil
|
|
}
|
|
case 292:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1981
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 294:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1987
|
|
{
|
|
yyVAL.node = nil
|
|
}
|
|
case 296:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1993
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 298:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:1999
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 300:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:2005
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 302:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:2011
|
|
{
|
|
yyVAL.val.U = nil
|
|
}
|
|
case 304:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:2021
|
|
{
|
|
importimport(yyDollar[2].sym, yyDollar[3].val.U.(string))
|
|
}
|
|
case 305:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:2025
|
|
{
|
|
importvar(yyDollar[2].sym, yyDollar[3].typ)
|
|
}
|
|
case 306:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:2029
|
|
{
|
|
importconst(yyDollar[2].sym, Types[TIDEAL], yyDollar[4].node)
|
|
}
|
|
case 307:
|
|
yyDollar = yyS[yypt-6 : yypt+1]
|
|
//line go.y:2033
|
|
{
|
|
importconst(yyDollar[2].sym, yyDollar[3].typ, yyDollar[5].node)
|
|
}
|
|
case 308:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:2037
|
|
{
|
|
importtype(yyDollar[2].typ, yyDollar[3].typ)
|
|
}
|
|
case 309:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:2041
|
|
{
|
|
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 = append(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:2062
|
|
{
|
|
yyVAL.sym = yyDollar[1].sym
|
|
structpkg = yyVAL.sym.Pkg
|
|
}
|
|
case 311:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:2069
|
|
{
|
|
yyVAL.typ = pkgtype(yyDollar[1].sym)
|
|
importsym(yyDollar[1].sym, OTYPE)
|
|
}
|
|
case 317:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:2089
|
|
{
|
|
yyVAL.typ = pkgtype(yyDollar[1].sym)
|
|
}
|
|
case 318:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:2093
|
|
{
|
|
// 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:2104
|
|
{
|
|
yyVAL.typ = aindex(nil, yyDollar[3].typ)
|
|
}
|
|
case 320:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:2108
|
|
{
|
|
yyVAL.typ = aindex(nodlit(yyDollar[2].val), yyDollar[4].typ)
|
|
}
|
|
case 321:
|
|
yyDollar = yyS[yypt-5 : yypt+1]
|
|
//line go.y:2112
|
|
{
|
|
yyVAL.typ = maptype(yyDollar[3].typ, yyDollar[5].typ)
|
|
}
|
|
case 322:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:2116
|
|
{
|
|
yyVAL.typ = tostruct(yyDollar[3].list)
|
|
}
|
|
case 323:
|
|
yyDollar = yyS[yypt-4 : yypt+1]
|
|
//line go.y:2120
|
|
{
|
|
yyVAL.typ = tointerface(yyDollar[3].list)
|
|
}
|
|
case 324:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:2124
|
|
{
|
|
yyVAL.typ = Ptrto(yyDollar[2].typ)
|
|
}
|
|
case 325:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:2128
|
|
{
|
|
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:2134
|
|
{
|
|
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:2140
|
|
{
|
|
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:2148
|
|
{
|
|
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:2156
|
|
{
|
|
yyVAL.typ = functype(nil, yyDollar[3].list, yyDollar[5].list)
|
|
}
|
|
case 330:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:2162
|
|
{
|
|
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:2170
|
|
{
|
|
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:2187
|
|
{
|
|
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:2211
|
|
{
|
|
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:2215
|
|
{
|
|
yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ))
|
|
}
|
|
case 335:
|
|
yyDollar = yyS[yypt-0 : yypt+1]
|
|
//line go.y:2220
|
|
{
|
|
yyVAL.list = nil
|
|
}
|
|
case 337:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:2227
|
|
{
|
|
yyVAL.list = yyDollar[2].list
|
|
}
|
|
case 338:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:2231
|
|
{
|
|
yyVAL.list = list1(Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ)))
|
|
}
|
|
case 339:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:2241
|
|
{
|
|
yyVAL.node = nodlit(yyDollar[1].val)
|
|
}
|
|
case 340:
|
|
yyDollar = yyS[yypt-2 : yypt+1]
|
|
//line go.y:2245
|
|
{
|
|
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:2263
|
|
{
|
|
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:2273
|
|
{
|
|
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:2289
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 347:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:2293
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 348:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:2299
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 349:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:2303
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
case 350:
|
|
yyDollar = yyS[yypt-1 : yypt+1]
|
|
//line go.y:2309
|
|
{
|
|
yyVAL.list = list1(yyDollar[1].node)
|
|
}
|
|
case 351:
|
|
yyDollar = yyS[yypt-3 : yypt+1]
|
|
//line go.y:2313
|
|
{
|
|
yyVAL.list = list(yyDollar[1].list, yyDollar[3].node)
|
|
}
|
|
}
|
|
goto yystack /* stack new state and value */
|
|
}
|