github.com/peggyl/go@v0.0.0-20151008231540-ae315999c2d5/src/cmd/compile/internal/gc/y.go (about) 1 //line go.y:21 2 package gc 3 4 import __yyfmt__ "fmt" 5 6 //line go.y:21 7 import ( 8 "fmt" 9 "strings" 10 ) 11 12 //line go.y:28 13 type yySymType struct { 14 yys int 15 node *Node 16 list *NodeList 17 typ *Type 18 sym *Sym 19 val Val 20 i int 21 } 22 23 const LLITERAL = 57346 24 const LASOP = 57347 25 const LCOLAS = 57348 26 const LBREAK = 57349 27 const LCASE = 57350 28 const LCHAN = 57351 29 const LCONST = 57352 30 const LCONTINUE = 57353 31 const LDDD = 57354 32 const LDEFAULT = 57355 33 const LDEFER = 57356 34 const LELSE = 57357 35 const LFALL = 57358 36 const LFOR = 57359 37 const LFUNC = 57360 38 const LGO = 57361 39 const LGOTO = 57362 40 const LIF = 57363 41 const LIMPORT = 57364 42 const LINTERFACE = 57365 43 const LMAP = 57366 44 const LNAME = 57367 45 const LPACKAGE = 57368 46 const LRANGE = 57369 47 const LRETURN = 57370 48 const LSELECT = 57371 49 const LSTRUCT = 57372 50 const LSWITCH = 57373 51 const LTYPE = 57374 52 const LVAR = 57375 53 const LANDAND = 57376 54 const LANDNOT = 57377 55 const LBODY = 57378 56 const LCOMM = 57379 57 const LDEC = 57380 58 const LEQ = 57381 59 const LGE = 57382 60 const LGT = 57383 61 const LIGNORE = 57384 62 const LINC = 57385 63 const LLE = 57386 64 const LLSH = 57387 65 const LLT = 57388 66 const LNE = 57389 67 const LOROR = 57390 68 const LRSH = 57391 69 const NotPackage = 57392 70 const NotParen = 57393 71 const PreferToRightParen = 57394 72 73 var yyToknames = [...]string{ 74 "$end", 75 "error", 76 "$unk", 77 "LLITERAL", 78 "LASOP", 79 "LCOLAS", 80 "LBREAK", 81 "LCASE", 82 "LCHAN", 83 "LCONST", 84 "LCONTINUE", 85 "LDDD", 86 "LDEFAULT", 87 "LDEFER", 88 "LELSE", 89 "LFALL", 90 "LFOR", 91 "LFUNC", 92 "LGO", 93 "LGOTO", 94 "LIF", 95 "LIMPORT", 96 "LINTERFACE", 97 "LMAP", 98 "LNAME", 99 "LPACKAGE", 100 "LRANGE", 101 "LRETURN", 102 "LSELECT", 103 "LSTRUCT", 104 "LSWITCH", 105 "LTYPE", 106 "LVAR", 107 "LANDAND", 108 "LANDNOT", 109 "LBODY", 110 "LCOMM", 111 "LDEC", 112 "LEQ", 113 "LGE", 114 "LGT", 115 "LIGNORE", 116 "LINC", 117 "LLE", 118 "LLSH", 119 "LLT", 120 "LNE", 121 "LOROR", 122 "LRSH", 123 "'+'", 124 "'-'", 125 "'|'", 126 "'^'", 127 "'*'", 128 "'/'", 129 "'%'", 130 "'&'", 131 "NotPackage", 132 "NotParen", 133 "'('", 134 "')'", 135 "PreferToRightParen", 136 "';'", 137 "'.'", 138 "'$'", 139 "'='", 140 "':'", 141 "'{'", 142 "'}'", 143 "'!'", 144 "'~'", 145 "'['", 146 "']'", 147 "'?'", 148 "'@'", 149 "','", 150 } 151 var yyStatenames = [...]string{} 152 153 const yyEofCode = 1 154 const yyErrCode = 2 155 const yyMaxDepth = 200 156 157 //line go.y:2308 158 func fixlbrace(lbr int) { 159 // If the opening brace was an LBODY, 160 // set up for another one now that we're done. 161 // See comment in lex.C about loophack. 162 if lbr == LBODY { 163 loophack = true 164 } 165 } 166 167 //line yacctab:1 168 var yyExca = [...]int{ 169 -1, 1, 170 1, -1, 171 -2, 0, 172 -1, 17, 173 1, 1, 174 63, 23, 175 -2, 0, 176 -1, 48, 177 6, 276, 178 66, 276, 179 76, 276, 180 -2, 49, 181 -1, 56, 182 67, 153, 183 -2, 162, 184 -1, 74, 185 60, 181, 186 -2, 215, 187 -1, 75, 188 60, 182, 189 -2, 183, 190 -1, 121, 191 60, 134, 192 64, 134, 193 68, 134, 194 72, 134, 195 -2, 266, 196 -1, 125, 197 60, 134, 198 64, 134, 199 68, 134, 200 72, 134, 201 -2, 267, 202 -1, 176, 203 2, 215, 204 36, 215, 205 60, 181, 206 68, 215, 207 -2, 173, 208 -1, 177, 209 36, 183, 210 60, 182, 211 68, 183, 212 -2, 174, 213 -1, 184, 214 63, 251, 215 69, 251, 216 -2, 0, 217 -1, 242, 218 63, 251, 219 69, 251, 220 -2, 0, 221 -1, 252, 222 8, 251, 223 13, 251, 224 63, 251, 225 69, 251, 226 -2, 0, 227 -1, 325, 228 4, 236, 229 63, 236, 230 69, 236, 231 -2, 157, 232 -1, 403, 233 67, 144, 234 -2, 142, 235 -1, 408, 236 36, 176, 237 60, 176, 238 68, 176, 239 -2, 167, 240 -1, 409, 241 36, 177, 242 60, 177, 243 68, 177, 244 -2, 168, 245 -1, 410, 246 36, 178, 247 60, 178, 248 68, 178, 249 -2, 169, 250 -1, 411, 251 36, 179, 252 60, 179, 253 68, 179, 254 -2, 170, 255 -1, 417, 256 8, 251, 257 13, 251, 258 63, 251, 259 69, 251, 260 -2, 0, 261 -1, 418, 262 63, 251, 263 69, 251, 264 -2, 0, 265 -1, 498, 266 63, 251, 267 69, 251, 268 -2, 0, 269 -1, 553, 270 60, 157, 271 -2, 318, 272 -1, 554, 273 60, 158, 274 -2, 317, 275 -1, 579, 276 8, 251, 277 13, 251, 278 63, 251, 279 69, 251, 280 -2, 0, 281 -1, 593, 282 36, 180, 283 60, 180, 284 68, 180, 285 -2, 171, 286 -1, 632, 287 67, 145, 288 -2, 143, 289 } 290 291 const yyNprod = 352 292 const yyPrivate = 57344 293 294 var yyTokenNames []string 295 var yyStates []string 296 297 const yyLast = 2321 298 299 var yyAct = [...]int{ 300 301 74, 304, 381, 291, 487, 611, 459, 285, 546, 229, 302 398, 467, 34, 296, 75, 302, 402, 550, 290, 186, 303 286, 479, 458, 356, 400, 401, 389, 338, 103, 318, 304 328, 245, 303, 339, 324, 243, 337, 468, 101, 374, 305 109, 104, 248, 85, 14, 246, 241, 174, 480, 212, 306 6, 181, 325, 155, 470, 469, 325, 385, 332, 517, 307 108, 627, 414, 373, 13, 208, 585, 11, 176, 461, 308 470, 172, 584, 461, 652, 600, 230, 219, 392, 191, 309 106, 322, 177, 542, 226, 322, 423, 321, 193, 88, 310 10, 321, 13, 192, 10, 310, 317, 309, 154, 160, 311 447, 12, 13, 161, 227, 12, 13, 446, 198, 227, 312 10, 162, 227, 320, 209, 227, 462, 384, 228, 663, 313 462, 626, 625, 228, 55, 460, 228, 155, 184, 228, 314 203, 628, 205, 633, 199, 200, 108, 632, 204, 12, 315 13, 222, 393, 12, 13, 86, 214, 216, 218, 90, 316 604, 239, 175, 10, 449, 194, 233, 88, 153, 12, 317 13, 176, 661, 213, 213, 213, 213, 288, 155, 282, 318 282, 601, 282, 537, 417, 177, 445, 280, 10, 176, 319 621, 528, 295, 163, 164, 165, 166, 167, 168, 169, 320 170, 227, 417, 177, 417, 301, 227, 227, 594, 227, 321 485, 88, 12, 13, 185, 228, 417, 524, 48, 308, 322 228, 228, 416, 228, 202, 347, 516, 90, 472, 448, 323 405, 428, 10, 242, 349, 171, 298, 12, 13, 345, 324 343, 341, 227, 581, 507, 330, 344, 507, 182, 508, 325 519, 397, 508, 348, 116, 175, 228, 367, 227, 334, 326 464, 227, 227, 360, 227, 129, 325, 355, 371, 210, 327 346, 90, 228, 175, 353, 228, 228, 362, 228, 182, 328 183, 12, 13, 54, 435, 314, 173, 10, 342, 358, 329 340, 13, 340, 340, 91, 379, 188, 378, 325, 380, 330 376, 331, 365, 375, 176, 623, 369, 394, 505, 417, 331 408, 183, 610, 163, 170, 12, 13, 605, 177, 410, 332 227, 227, 415, 238, 409, 118, 118, 602, 575, 126, 333 227, 569, 559, 331, 228, 228, 12, 13, 466, 465, 334 391, 444, 327, 443, 228, 437, 425, 12, 13, 254, 335 413, 388, 255, 256, 257, 258, 259, 260, 261, 262, 336 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 337 273, 274, 129, 129, 277, 227, 440, 383, 370, 173, 338 366, 294, 359, 491, 227, 424, 411, 442, 175, 228, 339 10, 455, 493, 333, 454, 436, 100, 492, 228, 300, 340 99, 84, 10, 509, 176, 481, 282, 512, 474, 20, 341 657, 282, 656, 655, 499, 495, 614, 227, 177, 503, 342 654, 484, 10, 227, 340, 340, 234, 515, 520, 521, 343 646, 228, 620, 617, 227, 340, 608, 228, 221, 12, 344 13, 607, 511, 129, 526, 430, 433, 69, 228, 518, 345 227, 12, 13, 598, 597, 129, 596, 293, 96, 494, 346 525, 593, 583, 563, 228, 529, 98, 490, 540, 532, 347 94, 12, 13, 523, 514, 513, 510, 560, 538, 558, 348 97, 95, 330, 323, 329, 539, 497, 496, 175, 483, 349 555, 477, 227, 476, 10, 473, 441, 562, 432, 421, 350 227, 372, 297, 386, 565, 615, 228, 491, 491, 606, 351 571, 573, 173, 92, 228, 403, 493, 493, 176, 10, 352 403, 492, 492, 340, 574, 340, 197, 554, 10, 114, 353 457, 340, 177, 434, 340, 572, 580, 439, 10, 578, 354 354, 591, 592, 12, 13, 253, 588, 568, 251, 180, 355 340, 197, 586, 587, 110, 533, 197, 609, 535, 197, 356 432, 348, 197, 107, 117, 382, 70, 502, 12, 13, 357 287, 7, 5, 102, 432, 211, 24, 12, 13, 129, 358 16, 19, 227, 494, 494, 651, 129, 12, 13, 431, 359 456, 490, 490, 364, 429, 561, 228, 335, 282, 207, 360 206, 618, 175, 129, 129, 624, 622, 120, 481, 491, 361 121, 125, 173, 636, 631, 630, 188, 619, 493, 21, 362 340, 638, 305, 492, 642, 340, 643, 306, 641, 336, 363 57, 351, 352, 640, 93, 644, 252, 645, 197, 176, 364 26, 340, 512, 197, 197, 28, 197, 76, 158, 387, 365 157, 666, 653, 177, 582, 390, 159, 491, 530, 156, 366 498, 658, 579, 662, 418, 534, 493, 31, 22, 15, 367 664, 492, 23, 665, 122, 122, 201, 18, 340, 197, 368 668, 3, 123, 554, 667, 494, 340, 8, 9, 282, 369 4, 2, 1, 490, 451, 197, 215, 544, 197, 197, 370 56, 197, 89, 566, 545, 548, 549, 612, 488, 323, 371 249, 531, 189, 105, 105, 112, 115, 80, 81, 576, 372 577, 329, 438, 175, 119, 119, 173, 72, 119, 71, 373 237, 478, 340, 494, 149, 340, 403, 316, 589, 403, 374 403, 490, 220, 326, 150, 244, 649, 197, 151, 141, 375 142, 143, 144, 145, 146, 147, 148, 197, 197, 629, 376 650, 127, 17, 450, 595, 399, 319, 197, 25, 89, 377 27, 36, 37, 78, 471, 281, 49, 66, 111, 39, 378 38, 35, 124, 279, 278, 105, 149, 83, 79, 10, 379 105, 73, 217, 112, 82, 113, 150, 247, 504, 616, 380 151, 232, 506, 87, 188, 145, 146, 147, 148, 0, 381 0, 0, 197, 0, 223, 0, 0, 0, 196, 235, 382 197, 197, 240, 128, 231, 0, 0, 0, 634, 635, 383 236, 0, 0, 0, 0, 639, 77, 0, 12, 13, 384 225, 0, 0, 0, 292, 647, 648, 173, 0, 0, 385 403, 0, 0, 0, 197, 0, 0, 0, 0, 0, 386 197, 0, 541, 0, 543, 0, 552, 56, 0, 0, 387 556, 197, 0, 557, 0, 0, 0, 347, 0, 0, 388 0, 0, 119, 119, 0, 0, 349, 197, 0, 567, 389 0, 345, 343, 341, 0, 0, 0, 0, 344, 0, 390 0, 311, 357, 0, 0, 348, 312, 313, 105, 315, 391 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392 0, 0, 346, 0, 0, 56, 0, 0, 613, 197, 393 275, 276, 0, 283, 247, 56, 247, 197, 0, 0, 394 342, 0, 363, 13, 197, 197, 0, 0, 0, 0, 395 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 396 0, 377, 134, 149, 603, 152, 0, 135, 139, 140, 397 0, 0, 138, 150, 137, 136, 133, 151, 141, 142, 398 143, 144, 145, 146, 147, 148, 0, 0, 0, 0, 399 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 400 0, 361, 0, 0, 414, 0, 0, 0, 0, 0, 401 407, 0, 0, 368, 0, 0, 89, 637, 0, 197, 402 419, 420, 552, 0, 0, 0, 0, 0, 0, 347, 403 426, 0, 0, 463, 0, 0, 0, 357, 349, 0, 404 0, 0, 105, 345, 343, 341, 197, 0, 0, 105, 405 344, 0, 0, 112, 0, 486, 247, 348, 0, 0, 406 0, 0, 0, 0, 0, 0, 134, 149, 0, 152, 407 0, 135, 139, 140, 346, 407, 138, 150, 137, 136, 408 133, 151, 141, 142, 143, 144, 145, 146, 147, 148, 409 0, 0, 342, 0, 197, 13, 0, 0, 0, 0, 410 56, 56, 0, 0, 0, 396, 0, 0, 119, 0, 411 119, 0, 0, 0, 0, 0, 0, 311, 536, 0, 412 119, 0, 247, 522, 0, 0, 0, 0, 0, 0, 413 0, 547, 551, 0, 527, 0, 0, 475, 0, 0, 414 357, 0, 0, 463, 482, 0, 0, 463, 0, 0, 415 0, 0, 564, 357, 0, 0, 0, 0, 0, 0, 416 0, 275, 276, 0, 0, 0, 0, 0, 307, 0, 417 68, 0, 247, 41, 0, 78, 47, 42, 0, 0, 418 44, 56, 40, 50, 124, 43, 45, 53, 0, 83, 419 79, 10, 570, 0, 46, 52, 82, 51, 32, 30, 420 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 421 0, 0, 0, 0, 0, 0, 60, 61, 0, 64, 422 58, 0, 0, 59, 0, 0, 67, 0, 0, 0, 423 0, 0, 0, 0, 308, 0, 62, 63, 77, 0, 424 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 425 0, 29, 105, 68, 247, 0, 41, 0, 78, 47, 426 42, 0, 56, 44, 0, 40, 50, 33, 43, 45, 427 53, 0, 83, 79, 10, 0, 0, 46, 52, 82, 428 51, 32, 30, 0, 0, 547, 65, 0, 551, 357, 429 0, 0, 463, 0, 0, 0, 357, 0, 357, 60, 430 61, 0, 64, 58, 0, 0, 59, 0, 68, 67, 431 0, 0, 0, 78, 0, 0, 0, 0, 0, 62, 432 63, 77, 124, 12, 13, 0, 0, 83, 79, 10, 433 68, 0, 0, 0, 82, 78, 0, 0, 0, 0, 434 0, 65, 0, 0, 124, 0, 0, 0, 0, 83, 435 79, 10, 0, 0, 60, 61, 82, 64, 58, 0, 436 0, 59, 0, 68, 67, 0, 0, 0, 78, 0, 437 0, 0, 404, 0, 62, 63, 77, 124, 12, 13, 438 0, 0, 83, 79, 10, 0, 67, 0, 0, 82, 439 0, 0, 0, 0, 0, 0, 65, 0, 77, 0, 440 12, 13, 0, 0, 0, 0, 0, 0, 0, 60, 441 61, 0, 64, 58, 0, 0, 59, 0, 68, 67, 442 0, 0, 0, 78, 0, 0, 0, 590, 0, 62, 443 63, 77, 124, 12, 13, 0, 0, 83, 79, 10, 444 0, 501, 0, 0, 82, 0, 0, 0, 0, 0, 445 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 446 0, 0, 0, 0, 60, 61, 0, 64, 58, 0, 447 0, 59, 0, 68, 67, 0, 0, 0, 78, 0, 448 0, 0, 0, 0, 62, 63, 77, 124, 12, 13, 449 0, 0, 83, 79, 10, 0, 500, 0, 0, 82, 450 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 451 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 452 61, 0, 64, 58, 0, 0, 59, 0, 68, 67, 453 0, 0, 0, 78, 0, 0, 0, 78, 0, 62, 454 63, 77, 124, 12, 13, 0, 124, 83, 79, 10, 455 0, 83, 79, 10, 82, 0, 395, 0, 82, 0, 456 0, 179, 0, 0, 0, 232, 0, 0, 0, 0, 457 0, 68, 0, 0, 60, 61, 78, 64, 178, 0, 458 0, 59, 196, 0, 67, 124, 0, 0, 489, 0, 459 83, 79, 10, 0, 62, 63, 77, 82, 12, 13, 460 77, 0, 12, 13, 179, 0, 0, 0, 0, 0, 461 0, 0, 0, 0, 0, 0, 0, 60, 61, 0, 462 64, 178, 0, 0, 59, 0, 68, 67, 289, 0, 463 0, 78, 0, 0, 0, 0, 0, 62, 63, 77, 464 124, 12, 13, 0, 0, 83, 79, 10, 0, 284, 465 0, 0, 82, 0, 0, 0, 0, 0, 0, 65, 466 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 467 0, 0, 60, 61, 78, 64, 58, 187, 0, 59, 468 0, 0, 67, 124, 0, 0, 0, 0, 83, 79, 469 10, 0, 62, 63, 77, 82, 12, 13, 0, 0, 470 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 471 0, 0, 68, 0, 0, 60, 61, 78, 64, 58, 472 0, 0, 59, 0, 0, 67, 124, 0, 0, 0, 473 0, 83, 79, 10, 0, 62, 63, 77, 82, 12, 474 13, 0, 0, 0, 0, 65, 0, 0, 0, 0, 475 0, 0, 0, 0, 0, 68, 0, 0, 60, 61, 476 78, 64, 58, 0, 0, 59, 0, 0, 67, 124, 477 0, 0, 0, 0, 83, 79, 10, 0, 62, 63, 478 77, 82, 12, 13, 0, 0, 0, 0, 179, 0, 479 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 480 0, 60, 61, 299, 64, 178, 0, 0, 59, 0, 481 0, 67, 124, 0, 0, 0, 0, 83, 79, 10, 482 0, 62, 63, 77, 82, 12, 13, 0, 0, 0, 483 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 484 0, 0, 0, 0, 60, 61, 78, 64, 58, 0, 485 0, 59, 0, 0, 67, 124, 0, 0, 0, 0, 486 83, 79, 10, 0, 62, 63, 77, 82, 12, 13, 487 0, 78, 0, 0, 232, 0, 0, 0, 0, 0, 488 124, 0, 0, 0, 0, 83, 79, 10, 0, 0, 489 0, 196, 82, 0, 0, 0, 0, 231, 0, 232, 490 0, 0, 0, 224, 0, 0, 0, 0, 0, 77, 491 0, 12, 13, 225, 0, 0, 196, 0, 0, 0, 492 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 493 0, 0, 0, 0, 77, 0, 12, 13, 427, 134, 494 149, 0, 152, 0, 135, 139, 140, 0, 0, 138, 495 150, 137, 136, 133, 151, 141, 142, 143, 144, 145, 496 146, 147, 148, 134, 149, 0, 152, 0, 135, 139, 497 140, 0, 660, 138, 150, 137, 136, 133, 151, 141, 498 142, 143, 144, 145, 146, 147, 148, 0, 78, 0, 499 0, 250, 78, 0, 0, 0, 659, 124, 0, 0, 500 0, 124, 83, 79, 10, 0, 83, 79, 10, 82, 501 0, 0, 0, 82, 299, 0, 232, 0, 0, 0, 502 232, 0, 0, 124, 0, 0, 0, 0, 83, 79, 503 10, 0, 0, 196, 0, 82, 0, 196, 0, 231, 504 0, 0, 232, 231, 0, 0, 0, 78, 0, 0, 505 0, 77, 0, 12, 13, 77, 124, 12, 13, 196, 506 0, 83, 79, 10, 0, 231, 0, 0, 82, 78, 507 0, 0, 0, 347, 0, 406, 0, 77, 124, 12, 508 13, 0, 349, 83, 79, 10, 0, 345, 343, 553, 509 82, 0, 196, 0, 344, 0, 0, 190, 412, 0, 510 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 511 77, 0, 12, 13, 196, 0, 0, 0, 346, 0, 512 195, 0, 0, 0, 0, 0, 0, 0, 347, 0, 513 0, 0, 77, 0, 12, 13, 342, 349, 12, 13, 514 0, 0, 345, 343, 341, 0, 0, 0, 347, 344, 515 0, 0, 0, 0, 0, 0, 453, 349, 0, 0, 516 0, 0, 345, 343, 341, 0, 0, 0, 0, 344, 517 0, 0, 0, 346, 0, 0, 348, 0, 0, 452, 518 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 519 0, 342, 0, 346, 13, 0, 0, 0, 0, 0, 520 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 521 0, 342, 134, 149, 13, 152, 132, 135, 139, 140, 522 0, 131, 138, 150, 137, 136, 133, 151, 141, 142, 523 143, 144, 145, 146, 147, 148, 134, 149, 0, 152, 524 0, 135, 139, 140, 0, 0, 138, 150, 137, 136, 525 133, 151, 141, 142, 143, 144, 145, 146, 147, 148, 526 134, 149, 0, 0, 0, 135, 139, 140, 0, 0, 527 138, 150, 137, 136, 133, 151, 141, 142, 143, 144, 528 145, 146, 147, 148, 134, 149, 0, 0, 0, 135, 529 139, 140, 0, 0, 138, 150, 137, 136, 0, 151, 530 141, 142, 143, 144, 145, 146, 147, 148, 149, 0, 531 0, 0, 135, 139, 140, 0, 0, 138, 150, 137, 532 136, 0, 151, 141, 142, 143, 144, 145, 146, 147, 533 148, 534 } 535 var yyPact = [...]int{ 536 537 -1000, -1000, 536, 535, -1000, 128, -1000, 545, 549, 336, 538 -1000, -1000, -1000, 605, -1000, -1000, 541, 1239, 328, 85, 539 -1000, 220, 438, 327, -1000, 323, -1000, -1000, -1000, -1000, 540 503, 493, 484, 459, -1000, -1000, -1000, -1000, -1000, 177, 541 -1000, 128, 128, 1316, 1316, 128, 1698, -1000, 2168, 92, 542 -1000, -1000, -1000, -1000, -1000, -1000, -1000, 39, 1698, 1698, 543 1698, 1698, 1698, 1698, 1698, 1698, 157, 1741, -1000, -1000, 544 -1000, 479, 233, -1000, -1000, -1000, 202, 1655, 2050, 36, 545 -1000, -1000, 233, 233, -1000, -1000, 153, 535, -1000, 586, 546 585, 40, 194, -1000, 540, -11, -11, -11, 17, -1000, 547 -1000, -1000, 367, 1827, -1000, -1000, -1000, 355, 754, -1000, 548 252, 1973, -1000, 155, 1969, 478, -1000, -1000, -1000, -1000, 549 -1000, -1000, 39, -1000, 475, -1000, -1000, -1000, -23, 2192, 550 1698, -1000, -1000, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 551 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 552 1698, 1698, 1698, 1698, 1698, 1698, 1612, 1698, 524, 1698, 553 1557, 387, 1698, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 554 -1000, -1000, 431, 2192, -1000, -1000, -1000, -1000, 1741, 1784, 555 1698, -1000, -1000, -1000, 1156, -1000, 24, 22, 2192, -1000, 556 1973, -1000, -1000, -1000, -1000, 1973, 1973, 211, 1973, 27, 557 263, 320, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 558 -1000, 583, 1010, -1000, 2129, 1010, -1000, 155, 470, 128, 559 309, -1000, -1000, 187, 1698, 128, -1000, -1000, -1000, -1000, 560 -1000, 1973, 574, 307, -1000, 181, 1698, 305, -1000, -1000, 561 -1000, -1000, 1156, 430, -13, -1000, -1000, 1969, -1000, -1000, 562 1973, 1969, 1156, 1969, 2192, 2240, 2263, 689, 689, 689, 563 689, 689, 689, 741, 741, 741, 741, -1000, -1000, -1000, 564 -1000, -1000, -1000, -1000, 2216, -23, -23, 2192, -1000, 519, 565 304, -1000, -1000, 51, 1698, -1000, 278, -1000, -1000, -1000, 566 66, -1000, -1000, 1514, 1022, 174, 1294, 152, -1000, 2028, 567 918, 1294, 143, -1000, -1000, -1000, -1000, -1000, -1000, 1973, 568 1973, -1000, 428, -1000, 128, 13, 273, -1000, -1000, 1852, 569 580, 525, 463, -1000, -1000, 210, 272, -1000, -1000, 467, 570 -1000, 539, 425, 197, -1000, 270, 268, -1000, -1000, -1000, 571 -1000, -1000, 103, 28, 151, 86, 1010, 2109, 571, 460, 572 65, 184, 266, 265, 128, -6, -1000, 206, 424, 128, 573 1698, -23, -1000, 422, 1973, 420, 128, 1698, -23, 418, 574 128, 131, 1518, 1969, -1000, -1000, -1000, -1000, 416, -1000, 575 415, -1000, -1000, 1698, 1459, 1404, 2192, 521, 1698, 229, 576 519, 405, -14, 1741, 404, 403, -1000, 1698, 147, -17, 577 -1000, -1000, 173, 2192, -1000, -1000, 1995, -1000, -1000, -1000, 578 -1000, -1000, 1973, 402, -1000, 138, -1000, 1156, 1156, -1000, 579 -1000, -1000, -1000, 1973, 112, 31, 580, 128, -1000, -1000, 580 398, 539, 210, 580, 539, 128, 104, 231, -1000, 1969, 581 397, -1000, -1000, -1000, -1000, 1010, 10, 1010, 128, 2054, 582 -1000, -1000, 514, 1010, -1000, -1000, 1010, 128, 259, -1000, 583 69, -1000, 581, -1000, 65, -1000, -1000, 392, -22, 128, 584 128, 580, 1010, -1000, -1000, -23, -1000, -1000, 258, -1000, 585 -1000, 754, -23, -1000, -1000, -1000, 440, -1000, -1000, 1969, 586 -1000, -1000, -1000, -1000, -1000, -1000, 1518, 1518, 1156, 255, 587 1698, 1698, -1000, -1000, -1000, -1000, -1000, 1741, 166, -1000, 588 -1000, 391, -1000, -1000, -1000, -1, -1000, 1294, -1000, 1349, 589 1294, 1294, 390, -1000, -1000, -1000, 129, -1000, -1000, -1000, 590 -1000, -1000, 580, 385, -1000, 383, -1000, -1000, -1000, 382, 591 -1000, -1000, 1010, 2, 102, 254, -1000, 1010, 81, 244, 592 -1000, 439, -1000, -1000, -1000, 370, -1000, -1000, 365, -1000, 593 497, -1000, 239, 858, 435, -1000, -1000, 580, 362, 128, 594 181, 1969, 361, -1000, 111, 1698, 2192, 2192, 226, 1156, 595 55, -1000, -1000, -1000, -1000, 1698, -1000, -1000, -1000, 2192, 596 -1000, 68, 64, -1000, -1000, -1000, 580, 580, 1518, -1000, 597 1010, -1000, 128, 580, -1000, 2054, 128, -1000, 858, 69, 598 -1000, -1000, -1000, 128, -1000, 128, -1000, -1000, -1000, 359, 599 -1000, -1000, -1000, -1000, 236, -1000, 1698, 1698, 1741, 560, 600 1, 1294, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 601 -1000, 349, -1000, 342, 341, 339, 1518, 1919, 1895, -1000, 602 -1000, 141, -1000, 50, 858, -1000, -1000, 858, -1000, -1000, 603 -1000, -1000, -1000, -1000, -1000, -1000, 1698, 519, -1000, 604 } 605 var yyPgo = [...]int{ 606 607 0, 51, 793, 672, 34, 221, 32, 700, 31, 792, 608 788, 1, 76, 113, 208, 16, 25, 3, 785, 782, 609 781, 774, 773, 771, 7, 770, 617, 30, 24, 769, 610 437, 45, 47, 273, 41, 19, 768, 554, 20, 620, 611 767, 556, 765, 762, 12, 761, 124, 760, 40, 13, 612 758, 46, 4, 2, 28, 756, 766, 755, 10, 18, 613 752, 751, 26, 750, 749, 736, 15, 35, 735, 733, 614 38, 732, 29, 727, 612, 48, 21, 721, 720, 719, 615 717, 42, 712, 708, 707, 9, 84, 702, 14, 698, 616 0, 67, 49, 22, 6, 23, 17, 8, 697, 5, 617 37, 11, 696, 695, 694, 687, 406, 36, 686, 33, 618 27, 684, 682, 681, 680, 677, 671, 50, 44, 667, 619 43, 666, 58, 662, 659, 658, 657, 654, 652, 650, 620 649, 646, 645, 644, 641, 640, 639, 638, 39, 637, 621 626, 624, 622 } 623 var yyR1 = [...]int{ 624 625 0, 112, 114, 114, 116, 113, 115, 115, 119, 119, 626 119, 120, 120, 121, 121, 2, 2, 2, 117, 123, 627 123, 124, 118, 50, 50, 50, 50, 50, 74, 74, 628 74, 74, 74, 74, 74, 74, 74, 74, 126, 70, 629 70, 70, 75, 75, 76, 76, 76, 36, 48, 44, 630 44, 44, 44, 44, 44, 9, 9, 9, 9, 127, 631 11, 128, 10, 62, 62, 129, 53, 42, 42, 42, 632 22, 22, 22, 21, 130, 23, 24, 24, 131, 132, 633 133, 25, 134, 63, 64, 64, 65, 65, 135, 136, 634 45, 137, 43, 14, 14, 14, 14, 14, 14, 14, 635 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 636 14, 14, 14, 14, 46, 46, 46, 46, 46, 46, 637 46, 46, 46, 41, 41, 41, 40, 40, 40, 40, 638 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 639 49, 28, 16, 16, 15, 15, 39, 39, 17, 17, 640 31, 1, 1, 33, 34, 37, 37, 3, 3, 3, 641 91, 91, 30, 29, 81, 81, 7, 7, 7, 7, 642 7, 7, 32, 32, 32, 32, 87, 87, 87, 87, 643 87, 79, 79, 80, 89, 89, 89, 89, 89, 12, 644 12, 88, 88, 88, 88, 88, 88, 88, 85, 86, 645 84, 84, 83, 83, 47, 18, 18, 19, 19, 90, 646 51, 51, 52, 52, 52, 139, 20, 20, 60, 60, 647 71, 71, 77, 77, 78, 78, 73, 73, 69, 69, 648 72, 72, 72, 72, 72, 72, 4, 4, 13, 27, 649 27, 27, 82, 8, 8, 8, 8, 68, 68, 67, 650 67, 6, 6, 6, 6, 6, 26, 26, 26, 26, 651 26, 140, 26, 26, 26, 26, 26, 26, 26, 26, 652 66, 66, 55, 55, 54, 54, 56, 56, 59, 59, 653 57, 57, 57, 57, 58, 58, 122, 122, 138, 138, 654 35, 35, 61, 61, 38, 38, 101, 101, 105, 105, 655 103, 103, 5, 5, 141, 141, 141, 141, 141, 141, 656 92, 108, 106, 106, 106, 111, 111, 107, 107, 107, 657 107, 107, 107, 107, 107, 107, 107, 107, 110, 109, 658 95, 95, 97, 96, 96, 99, 99, 98, 98, 94, 659 94, 94, 93, 93, 125, 125, 100, 100, 104, 104, 660 102, 102, 661 } 662 var yyR2 = [...]int{ 663 664 0, 4, 0, 3, 0, 3, 0, 3, 2, 5, 665 3, 3, 2, 1, 3, 1, 2, 2, 4, 0, 666 1, 0, 4, 0, 1, 1, 1, 1, 2, 5, 667 3, 2, 5, 7, 3, 2, 5, 3, 1, 2, 668 4, 3, 4, 3, 1, 2, 1, 1, 2, 1, 669 3, 3, 3, 2, 2, 3, 5, 5, 2, 0, 670 4, 0, 3, 0, 2, 0, 4, 4, 4, 2, 671 5, 1, 1, 2, 0, 3, 1, 3, 0, 0, 672 0, 8, 0, 5, 0, 2, 0, 2, 0, 0, 673 7, 0, 5, 1, 3, 3, 3, 3, 3, 3, 674 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 675 3, 3, 3, 3, 1, 2, 2, 2, 2, 2, 676 2, 2, 2, 3, 5, 6, 1, 1, 3, 5, 677 5, 4, 6, 8, 1, 5, 5, 5, 7, 1, 678 0, 3, 1, 4, 1, 4, 1, 3, 1, 1, 679 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 680 4, 4, 1, 1, 1, 2, 1, 1, 1, 1, 681 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, 682 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 683 3, 4, 4, 2, 3, 5, 1, 1, 2, 3, 684 5, 3, 5, 3, 3, 5, 8, 5, 8, 5, 685 0, 3, 0, 1, 3, 1, 4, 2, 0, 3, 686 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 687 3, 2, 4, 3, 5, 5, 1, 3, 1, 2, 688 1, 3, 4, 1, 2, 2, 1, 1, 3, 0, 689 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 690 1, 0, 4, 1, 2, 2, 2, 2, 2, 2, 691 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 692 1, 1, 3, 3, 0, 2, 0, 1, 0, 1, 693 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 694 0, 1, 0, 1, 4, 4, 5, 6, 4, 4, 695 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 696 4, 5, 4, 4, 2, 2, 4, 3, 3, 5, 697 3, 4, 3, 5, 1, 0, 1, 3, 1, 1, 698 2, 1, 1, 5, 0, 2, 1, 3, 1, 3, 699 1, 3, 700 } 701 var yyChk = [...]int{ 702 703 -1000, -112, -113, -116, -114, 26, -117, 26, -115, -3, 704 25, -91, 74, 75, -118, -124, 25, -60, -119, 22, 705 63, 4, -125, -123, 25, -50, -74, -47, -26, 2, 706 33, -126, 32, 18, -44, -23, -45, -43, -25, -29, 707 16, 7, 11, 19, 14, 20, 28, 10, -14, -56, 708 17, 31, 29, 21, -33, -46, -3, -39, 54, 57, 709 50, 51, 70, 71, 53, 37, -40, 60, 4, -30, 710 -41, -79, -80, -20, -90, -88, -139, 72, 9, 24, 711 -84, -83, 30, 23, 63, -120, 60, -2, 4, -3, 712 64, 64, 65, -141, 22, 33, 10, 32, 18, 63, 713 63, -70, 60, -54, -34, -3, -75, 60, -54, -48, 714 60, -36, -3, -18, 60, -3, 67, -37, -33, -3, 715 -37, -41, -39, -3, 18, -41, -33, -61, -56, -14, 716 5, 43, 38, 48, 34, 39, 47, 46, 44, 40, 717 41, 50, 51, 52, 53, 54, 55, 56, 57, 35, 718 45, 49, 37, 66, 6, 76, -130, -135, -137, -131, 719 60, 64, 72, -46, -46, -46, -46, -46, -46, -46, 720 -46, 68, -17, -14, -32, -86, -90, -88, 54, 37, 721 60, -1, 36, 68, -1, 2, -35, 12, -14, -87, 722 37, -90, -88, -85, -12, 60, 54, -30, 72, -1, 723 -1, -121, 61, -120, -117, -118, 4, 4, 25, 74, 724 65, 25, -92, -91, -92, -108, -92, -19, -92, 60, 725 -71, 61, -70, -7, 66, 76, -86, -90, -88, -85, 726 -12, 60, 37, -75, 61, -7, 66, -78, 61, -48, 727 -7, -51, 68, -67, -68, -8, -31, -3, -81, -7, 728 12, 60, -140, 60, -14, -14, -14, -14, -14, -14, 729 -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, 730 -14, -14, -14, -14, -14, -56, -56, -14, -21, -22, 731 -38, -42, -44, -56, 27, -24, -38, 36, -24, 61, 732 -59, -17, -3, 60, -14, -35, -49, 61, -32, 9, 733 -14, -49, -66, -6, -11, -74, -26, 2, 68, 73, 734 73, -7, -7, -7, 64, -7, -73, 69, -72, -55, 735 -13, 60, 54, -33, -4, 25, -69, 69, -27, -33, 736 -4, 60, -122, 63, -118, 4, -106, -107, -110, -109, 737 -91, 25, 72, 24, 30, 23, 54, 9, 37, 18, 738 66, -106, -106, -51, 60, -100, -95, -3, -122, 63, 739 66, -56, -34, -7, 9, -122, 63, 66, -56, -122, 740 63, -66, 61, 76, -138, -31, -81, -7, -67, -6, 741 -67, -53, 36, 63, 66, 6, -14, -136, 63, -62, 742 -132, -138, 12, 76, -17, 32, 73, 67, -58, -57, 743 -28, -16, -15, -14, 68, 68, 37, -7, -90, -88, 744 -85, -12, 60, -138, 76, -58, 69, 63, -127, -7, 745 -7, 61, -3, 73, -122, 63, -7, 76, -5, 4, 746 -13, 54, 25, -13, 60, 64, -122, 63, -82, 60, 747 -4, 61, -120, 63, 63, 73, 4, 72, 68, 68, 748 -106, -111, 60, 37, -107, -109, 9, 60, -93, -94, 749 60, 4, 51, -3, 66, 63, 63, -101, -100, 61, 750 76, -106, 12, 61, -70, -56, 61, 61, -77, -76, 751 -75, -54, -56, 61, -48, 69, -3, -52, -89, 60, 752 -86, -90, -88, -85, -12, -8, 61, 61, -129, -38, 753 27, 27, 36, -38, -10, 69, -9, 8, 13, -53, 754 61, -138, -17, 61, 61, -35, 69, 76, -138, 67, 755 -49, -49, -7, 61, 69, -6, -66, -7, 69, -72, 756 -5, -33, 61, -13, -5, -13, -3, 69, -27, -67, 757 61, -106, 73, -106, -105, -104, -97, -3, -103, -102, 758 -96, -3, -106, 25, -91, -110, -106, -106, -101, 63, 759 -94, 4, -93, 61, -3, -95, -5, -106, -122, 63, 760 -7, 60, -67, -52, -66, 63, -14, -14, -62, -128, 761 -59, 67, -133, 61, 73, 67, -28, -16, -15, -14, 762 68, -58, -58, 61, 69, -5, 61, 61, 61, -106, 763 73, 69, 63, -106, 69, 63, 60, 61, 61, 50, 764 63, -99, -98, 60, -106, 60, -5, 61, -76, -67, 765 61, 69, -38, 69, -66, 67, 66, 6, 76, -64, 766 -35, -49, 69, 69, -5, -5, -52, -106, -97, -5, 767 -96, -101, -99, -94, -101, -101, 61, -14, -14, -65, 768 -63, 15, 73, -58, 61, 61, 61, 61, -52, 67, 769 67, 21, -11, 69, -99, -99, -134, -24, -53, 770 } 771 var yyDef = [...]int{ 772 773 4, -2, 2, 0, 6, 0, 21, 0, 218, 0, 774 157, 158, 159, 0, 5, 344, 19, -2, 0, 0, 775 3, 0, 0, 0, 20, 0, 24, 25, 26, 27, 776 0, 0, 0, 0, 256, 257, 258, 259, 260, 0, 777 263, 155, 155, 0, 0, 0, 292, 38, -2, 0, 778 74, 88, 91, 78, 163, 93, -2, 114, 0, 0, 779 0, 0, 0, 0, 0, 0, 146, 0, 126, 127, 780 134, 0, 0, 139, -2, -2, 0, 290, 0, 0, 781 196, 197, 0, 0, 7, 8, 0, 21, 15, 0, 782 0, 0, 0, 345, 0, 0, 0, 0, 0, 18, 783 219, 28, 0, 0, 274, 154, 31, 0, 0, 35, 784 0, 0, 47, 210, 249, 0, 261, 264, 156, 153, 785 265, -2, 0, 162, 0, -2, 268, 269, 293, 276, 786 0, 53, 54, 0, 0, 0, 0, 0, 0, 0, 787 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788 0, 0, 0, 0, 0, 0, 294, 294, 0, 294, 789 0, 0, 290, 115, 116, 117, 118, 119, 120, 121, 790 122, 140, 0, 148, 149, 172, -2, -2, 0, 0, 791 0, 140, 151, 152, -2, 217, 0, 0, 291, 193, 792 0, 176, 177, 178, 179, 0, 0, 189, 0, 0, 793 0, 286, 10, 13, 21, 12, 16, 17, 160, 161, 794 22, 0, 0, 310, 0, 0, 311, 210, 0, 0, 795 286, 30, 220, 39, 0, 0, 166, 167, 168, 169, 796 170, 0, 0, 286, 34, 0, 0, 286, 37, 224, 797 48, 204, -2, 0, 288, 247, 243, 162, 246, 150, 798 164, 249, -2, 249, 50, 94, 95, 96, 97, 98, 799 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 800 109, 110, 111, 112, 113, 51, 52, 277, 75, 0, 801 71, 72, 295, 0, 0, 89, 76, 63, 79, 123, 802 288, 278, 128, 0, 291, 0, 284, 147, 175, 0, 803 288, 284, 0, 270, 252, 253, 254, 255, 59, 0, 804 0, 194, 0, 198, 0, 0, 286, 201, 226, 0, 805 302, 0, 0, 272, 238, -2, 286, 203, 228, 0, 806 240, 0, 0, 287, 11, 0, 0, 312, 313, 314, 807 317, 318, 0, 0, 0, 0, 0, 0, 0, 0, 808 0, 0, 0, 0, 296, 0, 346, 0, 0, 287, 809 0, 41, 275, 0, 0, 0, 287, 0, 43, 0, 810 287, 0, 212, 289, 250, 244, 245, 165, 0, 262, 811 0, 73, 65, 294, 0, 0, 69, 0, 294, 0, 812 0, 0, 288, 289, 0, 0, 131, 290, 0, 288, 813 280, 281, 0, -2, 140, 140, 0, 199, -2, -2, 814 -2, -2, 0, 0, 289, 0, 216, -2, -2, 191, 815 192, 180, 190, 0, 0, 287, 302, 0, 231, 303, 816 0, 0, 236, 302, 0, 0, 0, 287, 239, 249, 817 0, 9, 14, 304, 305, 0, 0, 0, 298, 300, 818 324, 325, 0, 0, 315, 316, 0, 296, 0, 342, 819 0, 339, 0, 341, 0, 308, 309, 0, 297, 0, 820 0, 302, 0, 29, 221, 40, 171, 32, 286, 222, 821 44, 46, 42, 36, 225, 211, 162, 209, 213, 249, 822 184, 185, 186, 187, 188, 248, 212, 212, -2, 0, 823 0, 0, 63, 77, 64, 92, 61, 0, 0, 80, 824 124, 0, 279, 129, 130, 0, 137, 289, 285, 0, 825 284, 284, 0, 135, 136, 271, 0, 195, 200, 227, 826 230, 273, 302, 0, 233, 0, 237, 202, 229, 0, 827 241, 319, 0, 0, 0, 299, 348, 0, 0, 301, 828 350, 0, 334, -2, -2, 0, 327, 328, 0, 306, 829 0, 340, 0, 335, 0, 347, 330, 302, 0, 287, 830 45, 249, 0, 205, 0, 294, 67, 68, 0, -2, 831 0, 58, 84, 125, 132, 290, 282, 283, 141, 144, 832 140, 0, 0, -2, 60, 232, 302, 302, 212, 320, 833 0, 322, 0, 302, 323, 0, 296, 326, 335, 0, 834 307, 207, 336, 296, 338, 296, 331, 33, 223, 0, 835 214, 66, 70, 90, 62, 55, 0, 0, 0, 86, 836 0, 284, -2, 138, 234, 235, 242, 321, 349, 332, 837 351, 0, 329, 0, 0, 0, 212, 0, 0, 81, 838 85, 0, 133, 0, 335, 343, 337, 335, 206, 56, 839 57, 82, 87, 145, 333, 208, 294, 0, 83, 840 } 841 var yyTok1 = [...]int{ 842 843 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 844 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 845 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 846 3, 3, 3, 70, 3, 3, 65, 56, 57, 3, 847 60, 61, 54, 50, 76, 51, 64, 55, 3, 3, 848 3, 3, 3, 3, 3, 3, 3, 3, 67, 63, 849 3, 66, 3, 74, 75, 3, 3, 3, 3, 3, 850 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 851 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 852 3, 72, 3, 73, 53, 3, 3, 3, 3, 3, 853 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 854 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 855 3, 3, 3, 68, 52, 69, 71, 856 } 857 var yyTok2 = [...]int{ 858 859 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 860 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 861 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 862 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 863 42, 43, 44, 45, 46, 47, 48, 49, 58, 59, 864 62, 865 } 866 var yyTok3 = [...]int{ 867 0, 868 } 869 870 var yyErrorMessages = [...]struct { 871 state int 872 token int 873 msg string 874 }{ 875 {332, 76, "unexpected comma during import block"}, 876 {89, 63, "missing import path; require quoted string"}, 877 {390, 63, "missing { after if clause"}, 878 {387, 63, "missing { after switch clause"}, 879 {279, 63, "missing { after for clause"}, 880 {499, 36, "missing { after for clause"}, 881 {17, 68, "unexpected semicolon or newline before {"}, 882 {111, 63, "unexpected semicolon or newline in type declaration"}, 883 {78, 69, "unexpected } in channel type"}, 884 {78, 61, "unexpected ) in channel type"}, 885 {78, 76, "unexpected comma in channel type"}, 886 {417, 15, "unexpected semicolon or newline before else"}, 887 {329, 76, "name list not allowed in interface type"}, 888 {279, 33, "var declaration not allowed in for initializer"}, 889 {25, 68, "unexpected { at end of statement"}, 890 {371, 68, "unexpected { at end of statement"}, 891 {122, 63, "argument to go/defer must be function call"}, 892 {398, 63, "need trailing comma before newline in composite literal"}, 893 {415, 63, "need trailing comma before newline in composite literal"}, 894 {124, 25, "nested func not allowed"}, 895 {651, 63, "else must be followed by if or statement block"}, 896 } 897 898 //line yaccpar:1 899 900 /* parser for yacc output */ 901 902 var ( 903 yyDebug = 0 904 yyErrorVerbose = false 905 ) 906 907 type yyLexer interface { 908 Lex(lval *yySymType) int 909 Error(s string) 910 } 911 912 type yyParser interface { 913 Parse(yyLexer) int 914 Lookahead() int 915 } 916 917 type yyParserImpl struct { 918 lookahead func() int 919 } 920 921 func (p *yyParserImpl) Lookahead() int { 922 return p.lookahead() 923 } 924 925 func yyNewParser() yyParser { 926 p := &yyParserImpl{ 927 lookahead: func() int { return -1 }, 928 } 929 return p 930 } 931 932 const yyFlag = -1000 933 934 func yyTokname(c int) string { 935 if c >= 1 && c-1 < len(yyToknames) { 936 if yyToknames[c-1] != "" { 937 return yyToknames[c-1] 938 } 939 } 940 return __yyfmt__.Sprintf("tok-%v", c) 941 } 942 943 func yyStatname(s int) string { 944 if s >= 0 && s < len(yyStatenames) { 945 if yyStatenames[s] != "" { 946 return yyStatenames[s] 947 } 948 } 949 return __yyfmt__.Sprintf("state-%v", s) 950 } 951 952 func yyErrorMessage(state, lookAhead int) string { 953 const TOKSTART = 4 954 955 if !yyErrorVerbose { 956 return "syntax error" 957 } 958 959 for _, e := range yyErrorMessages { 960 if e.state == state && e.token == lookAhead { 961 return "syntax error: " + e.msg 962 } 963 } 964 965 res := "syntax error: unexpected " + yyTokname(lookAhead) 966 967 // To match Bison, suggest at most four expected tokens. 968 expected := make([]int, 0, 4) 969 970 // Look for shiftable tokens. 971 base := yyPact[state] 972 for tok := TOKSTART; tok-1 < len(yyToknames); tok++ { 973 if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok { 974 if len(expected) == cap(expected) { 975 return res 976 } 977 expected = append(expected, tok) 978 } 979 } 980 981 if yyDef[state] == -2 { 982 i := 0 983 for yyExca[i] != -1 || yyExca[i+1] != state { 984 i += 2 985 } 986 987 // Look for tokens that we accept or reduce. 988 for i += 2; yyExca[i] >= 0; i += 2 { 989 tok := yyExca[i] 990 if tok < TOKSTART || yyExca[i+1] == 0 { 991 continue 992 } 993 if len(expected) == cap(expected) { 994 return res 995 } 996 expected = append(expected, tok) 997 } 998 999 // If the default action is to accept or reduce, give up. 1000 if yyExca[i+1] != 0 { 1001 return res 1002 } 1003 } 1004 1005 for i, tok := range expected { 1006 if i == 0 { 1007 res += ", expecting " 1008 } else { 1009 res += " or " 1010 } 1011 res += yyTokname(tok) 1012 } 1013 return res 1014 } 1015 1016 func yylex1(lex yyLexer, lval *yySymType) (char, token int) { 1017 token = 0 1018 char = lex.Lex(lval) 1019 if char <= 0 { 1020 token = yyTok1[0] 1021 goto out 1022 } 1023 if char < len(yyTok1) { 1024 token = yyTok1[char] 1025 goto out 1026 } 1027 if char >= yyPrivate { 1028 if char < yyPrivate+len(yyTok2) { 1029 token = yyTok2[char-yyPrivate] 1030 goto out 1031 } 1032 } 1033 for i := 0; i < len(yyTok3); i += 2 { 1034 token = yyTok3[i+0] 1035 if token == char { 1036 token = yyTok3[i+1] 1037 goto out 1038 } 1039 } 1040 1041 out: 1042 if token == 0 { 1043 token = yyTok2[1] /* unknown char */ 1044 } 1045 if yyDebug >= 3 { 1046 __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char)) 1047 } 1048 return char, token 1049 } 1050 1051 func yyParse(yylex yyLexer) int { 1052 return yyNewParser().Parse(yylex) 1053 } 1054 1055 func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int { 1056 var yyn int 1057 var yylval yySymType 1058 var yyVAL yySymType 1059 var yyDollar []yySymType 1060 _ = yyDollar // silence set and not used 1061 yyS := make([]yySymType, yyMaxDepth) 1062 1063 Nerrs := 0 /* number of errors */ 1064 Errflag := 0 /* error recovery flag */ 1065 yystate := 0 1066 yychar := -1 1067 yytoken := -1 // yychar translated into internal numbering 1068 yyrcvr.lookahead = func() int { return yychar } 1069 defer func() { 1070 // Make sure we report no lookahead when not parsing. 1071 yystate = -1 1072 yychar = -1 1073 yytoken = -1 1074 }() 1075 yyp := -1 1076 goto yystack 1077 1078 ret0: 1079 return 0 1080 1081 ret1: 1082 return 1 1083 1084 yystack: 1085 /* put a state and value onto the stack */ 1086 if yyDebug >= 4 { 1087 __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate)) 1088 } 1089 1090 yyp++ 1091 if yyp >= len(yyS) { 1092 nyys := make([]yySymType, len(yyS)*2) 1093 copy(nyys, yyS) 1094 yyS = nyys 1095 } 1096 yyS[yyp] = yyVAL 1097 yyS[yyp].yys = yystate 1098 1099 yynewstate: 1100 yyn = yyPact[yystate] 1101 if yyn <= yyFlag { 1102 goto yydefault /* simple state */ 1103 } 1104 if yychar < 0 { 1105 yychar, yytoken = yylex1(yylex, &yylval) 1106 } 1107 yyn += yytoken 1108 if yyn < 0 || yyn >= yyLast { 1109 goto yydefault 1110 } 1111 yyn = yyAct[yyn] 1112 if yyChk[yyn] == yytoken { /* valid shift */ 1113 yychar = -1 1114 yytoken = -1 1115 yyVAL = yylval 1116 yystate = yyn 1117 if Errflag > 0 { 1118 Errflag-- 1119 } 1120 goto yystack 1121 } 1122 1123 yydefault: 1124 /* default state action */ 1125 yyn = yyDef[yystate] 1126 if yyn == -2 { 1127 if yychar < 0 { 1128 yychar, yytoken = yylex1(yylex, &yylval) 1129 } 1130 1131 /* look through exception table */ 1132 xi := 0 1133 for { 1134 if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate { 1135 break 1136 } 1137 xi += 2 1138 } 1139 for xi += 2; ; xi += 2 { 1140 yyn = yyExca[xi+0] 1141 if yyn < 0 || yyn == yytoken { 1142 break 1143 } 1144 } 1145 yyn = yyExca[xi+1] 1146 if yyn < 0 { 1147 goto ret0 1148 } 1149 } 1150 if yyn == 0 { 1151 /* error ... attempt to resume parsing */ 1152 switch Errflag { 1153 case 0: /* brand new error */ 1154 yylex.Error(yyErrorMessage(yystate, yytoken)) 1155 Nerrs++ 1156 if yyDebug >= 1 { 1157 __yyfmt__.Printf("%s", yyStatname(yystate)) 1158 __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken)) 1159 } 1160 fallthrough 1161 1162 case 1, 2: /* incompletely recovered error ... try again */ 1163 Errflag = 3 1164 1165 /* find a state where "error" is a legal shift action */ 1166 for yyp >= 0 { 1167 yyn = yyPact[yyS[yyp].yys] + yyErrCode 1168 if yyn >= 0 && yyn < yyLast { 1169 yystate = yyAct[yyn] /* simulate a shift of "error" */ 1170 if yyChk[yystate] == yyErrCode { 1171 goto yystack 1172 } 1173 } 1174 1175 /* the current p has no shift on "error", pop stack */ 1176 if yyDebug >= 2 { 1177 __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) 1178 } 1179 yyp-- 1180 } 1181 /* there is no state on the stack with an error shift ... abort */ 1182 goto ret1 1183 1184 case 3: /* no shift yet; clobber input char */ 1185 if yyDebug >= 2 { 1186 __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken)) 1187 } 1188 if yytoken == yyEofCode { 1189 goto ret1 1190 } 1191 yychar = -1 1192 yytoken = -1 1193 goto yynewstate /* try again in the same state */ 1194 } 1195 } 1196 1197 /* reduction by production yyn */ 1198 if yyDebug >= 2 { 1199 __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate)) 1200 } 1201 1202 yynt := yyn 1203 yypt := yyp 1204 _ = yypt // guard against "declared and not used" 1205 1206 yyp -= yyR2[yyn] 1207 // yyp is now the index of $0. Perform the default action. Iff the 1208 // reduced production is ε, $1 is possibly out of range. 1209 if yyp+1 >= len(yyS) { 1210 nyys := make([]yySymType, len(yyS)*2) 1211 copy(nyys, yyS) 1212 yyS = nyys 1213 } 1214 yyVAL = yyS[yyp+1] 1215 1216 /* consult goto table to find next state */ 1217 yyn = yyR1[yyn] 1218 yyg := yyPgo[yyn] 1219 yyj := yyg + yyS[yyp].yys + 1 1220 1221 if yyj >= yyLast { 1222 yystate = yyAct[yyg] 1223 } else { 1224 yystate = yyAct[yyj] 1225 if yyChk[yystate] != -yyn { 1226 yystate = yyAct[yyg] 1227 } 1228 } 1229 // dummy call; replaced with literal code 1230 switch yynt { 1231 1232 case 1: 1233 yyDollar = yyS[yypt-4 : yypt+1] 1234 //line go.y:189 1235 { 1236 xtop = concat(xtop, yyDollar[4].list) 1237 } 1238 case 2: 1239 yyDollar = yyS[yypt-0 : yypt+1] 1240 //line go.y:195 1241 { 1242 prevlineno = lineno 1243 Yyerror("package statement must be first") 1244 errorexit() 1245 } 1246 case 3: 1247 yyDollar = yyS[yypt-3 : yypt+1] 1248 //line go.y:201 1249 { 1250 mkpackage(yyDollar[2].sym.Name) 1251 } 1252 case 4: 1253 yyDollar = yyS[yypt-0 : yypt+1] 1254 //line go.y:211 1255 { 1256 importpkg = Runtimepkg 1257 1258 if Debug['A'] != 0 { 1259 cannedimports("runtime.Builtin", "package runtime\n\n$$\n\n") 1260 } else { 1261 cannedimports("runtime.Builtin", runtimeimport) 1262 } 1263 curio.importsafe = true 1264 } 1265 case 5: 1266 yyDollar = yyS[yypt-3 : yypt+1] 1267 //line go.y:223 1268 { 1269 importpkg = nil 1270 } 1271 case 11: 1272 yyDollar = yyS[yypt-3 : yypt+1] 1273 //line go.y:237 1274 { 1275 ipkg := importpkg 1276 my := importmyname 1277 importpkg = nil 1278 importmyname = nil 1279 1280 if my == nil { 1281 my = Lookup(ipkg.Name) 1282 } 1283 1284 pack := Nod(OPACK, nil, nil) 1285 pack.Sym = my 1286 pack.Name.Pkg = ipkg 1287 pack.Lineno = int32(yyDollar[1].i) 1288 1289 if strings.HasPrefix(my.Name, ".") { 1290 importdot(ipkg, pack) 1291 break 1292 } 1293 if my.Name == "init" { 1294 Yyerror("cannot import package as init - init must be a func") 1295 break 1296 } 1297 if my.Name == "_" { 1298 break 1299 } 1300 if my.Def != nil { 1301 lineno = int32(yyDollar[1].i) 1302 redeclare(my, "as imported package name") 1303 } 1304 my.Def = pack 1305 my.Lastlineno = int32(yyDollar[1].i) 1306 my.Block = 1 // at top level 1307 } 1308 case 12: 1309 yyDollar = yyS[yypt-2 : yypt+1] 1310 //line go.y:272 1311 { 1312 // When an invalid import path is passed to importfile, 1313 // it calls Yyerror and then sets up a fake import with 1314 // no package statement. This allows us to test more 1315 // than one invalid import statement in a single file. 1316 if nerrors == 0 { 1317 Fatalf("phase error in import") 1318 } 1319 } 1320 case 15: 1321 yyDollar = yyS[yypt-1 : yypt+1] 1322 //line go.y:288 1323 { 1324 // import with original name 1325 yyVAL.i = parserline() 1326 importmyname = nil 1327 importfile(&yyDollar[1].val, yyVAL.i) 1328 } 1329 case 16: 1330 yyDollar = yyS[yypt-2 : yypt+1] 1331 //line go.y:295 1332 { 1333 // import with given name 1334 yyVAL.i = parserline() 1335 importmyname = yyDollar[1].sym 1336 importfile(&yyDollar[2].val, yyVAL.i) 1337 } 1338 case 17: 1339 yyDollar = yyS[yypt-2 : yypt+1] 1340 //line go.y:302 1341 { 1342 // import into my name space 1343 yyVAL.i = parserline() 1344 importmyname = Lookup(".") 1345 importfile(&yyDollar[2].val, yyVAL.i) 1346 } 1347 case 18: 1348 yyDollar = yyS[yypt-4 : yypt+1] 1349 //line go.y:311 1350 { 1351 if importpkg.Name == "" { 1352 importpkg.Name = yyDollar[2].sym.Name 1353 numImport[yyDollar[2].sym.Name]++ 1354 } else if importpkg.Name != yyDollar[2].sym.Name { 1355 Yyerror("conflicting names %s and %s for package %q", importpkg.Name, yyDollar[2].sym.Name, importpkg.Path) 1356 } 1357 importpkg.Direct = true 1358 importpkg.Safe = curio.importsafe 1359 1360 if safemode != 0 && !curio.importsafe { 1361 Yyerror("cannot import unsafe package %q", importpkg.Path) 1362 } 1363 } 1364 case 20: 1365 yyDollar = yyS[yypt-1 : yypt+1] 1366 //line go.y:328 1367 { 1368 if yyDollar[1].sym.Name == "safe" { 1369 curio.importsafe = true 1370 } 1371 } 1372 case 21: 1373 yyDollar = yyS[yypt-0 : yypt+1] 1374 //line go.y:335 1375 { 1376 defercheckwidth() 1377 } 1378 case 22: 1379 yyDollar = yyS[yypt-4 : yypt+1] 1380 //line go.y:339 1381 { 1382 resumecheckwidth() 1383 unimportfile() 1384 } 1385 case 23: 1386 yyDollar = yyS[yypt-0 : yypt+1] 1387 //line go.y:348 1388 { 1389 Yyerror("empty top-level declaration") 1390 yyVAL.list = nil 1391 } 1392 case 25: 1393 yyDollar = yyS[yypt-1 : yypt+1] 1394 //line go.y:354 1395 { 1396 yyVAL.list = list1(yyDollar[1].node) 1397 } 1398 case 26: 1399 yyDollar = yyS[yypt-1 : yypt+1] 1400 //line go.y:358 1401 { 1402 Yyerror("non-declaration statement outside function body") 1403 yyVAL.list = nil 1404 } 1405 case 27: 1406 yyDollar = yyS[yypt-1 : yypt+1] 1407 //line go.y:363 1408 { 1409 yyVAL.list = nil 1410 } 1411 case 28: 1412 yyDollar = yyS[yypt-2 : yypt+1] 1413 //line go.y:369 1414 { 1415 yyVAL.list = yyDollar[2].list 1416 } 1417 case 29: 1418 yyDollar = yyS[yypt-5 : yypt+1] 1419 //line go.y:373 1420 { 1421 yyVAL.list = yyDollar[3].list 1422 } 1423 case 30: 1424 yyDollar = yyS[yypt-3 : yypt+1] 1425 //line go.y:377 1426 { 1427 yyVAL.list = nil 1428 } 1429 case 31: 1430 yyDollar = yyS[yypt-2 : yypt+1] 1431 //line go.y:381 1432 { 1433 yyVAL.list = yyDollar[2].list 1434 iota_ = -100000 1435 lastconst = nil 1436 } 1437 case 32: 1438 yyDollar = yyS[yypt-5 : yypt+1] 1439 //line go.y:387 1440 { 1441 yyVAL.list = yyDollar[3].list 1442 iota_ = -100000 1443 lastconst = nil 1444 } 1445 case 33: 1446 yyDollar = yyS[yypt-7 : yypt+1] 1447 //line go.y:393 1448 { 1449 yyVAL.list = concat(yyDollar[3].list, yyDollar[5].list) 1450 iota_ = -100000 1451 lastconst = nil 1452 } 1453 case 34: 1454 yyDollar = yyS[yypt-3 : yypt+1] 1455 //line go.y:399 1456 { 1457 yyVAL.list = nil 1458 iota_ = -100000 1459 } 1460 case 35: 1461 yyDollar = yyS[yypt-2 : yypt+1] 1462 //line go.y:404 1463 { 1464 yyVAL.list = list1(yyDollar[2].node) 1465 } 1466 case 36: 1467 yyDollar = yyS[yypt-5 : yypt+1] 1468 //line go.y:408 1469 { 1470 yyVAL.list = yyDollar[3].list 1471 } 1472 case 37: 1473 yyDollar = yyS[yypt-3 : yypt+1] 1474 //line go.y:412 1475 { 1476 yyVAL.list = nil 1477 } 1478 case 38: 1479 yyDollar = yyS[yypt-1 : yypt+1] 1480 //line go.y:418 1481 { 1482 iota_ = 0 1483 } 1484 case 39: 1485 yyDollar = yyS[yypt-2 : yypt+1] 1486 //line go.y:424 1487 { 1488 yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, nil) 1489 } 1490 case 40: 1491 yyDollar = yyS[yypt-4 : yypt+1] 1492 //line go.y:428 1493 { 1494 yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list) 1495 } 1496 case 41: 1497 yyDollar = yyS[yypt-3 : yypt+1] 1498 //line go.y:432 1499 { 1500 yyVAL.list = variter(yyDollar[1].list, nil, yyDollar[3].list) 1501 } 1502 case 42: 1503 yyDollar = yyS[yypt-4 : yypt+1] 1504 //line go.y:438 1505 { 1506 yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list) 1507 } 1508 case 43: 1509 yyDollar = yyS[yypt-3 : yypt+1] 1510 //line go.y:442 1511 { 1512 yyVAL.list = constiter(yyDollar[1].list, nil, yyDollar[3].list) 1513 } 1514 case 45: 1515 yyDollar = yyS[yypt-2 : yypt+1] 1516 //line go.y:449 1517 { 1518 yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, nil) 1519 } 1520 case 46: 1521 yyDollar = yyS[yypt-1 : yypt+1] 1522 //line go.y:453 1523 { 1524 yyVAL.list = constiter(yyDollar[1].list, nil, nil) 1525 } 1526 case 47: 1527 yyDollar = yyS[yypt-1 : yypt+1] 1528 //line go.y:459 1529 { 1530 // different from dclname because the name 1531 // becomes visible right here, not at the end 1532 // of the declaration. 1533 yyVAL.node = typedcl0(yyDollar[1].sym) 1534 } 1535 case 48: 1536 yyDollar = yyS[yypt-2 : yypt+1] 1537 //line go.y:468 1538 { 1539 yyVAL.node = typedcl1(yyDollar[1].node, yyDollar[2].node, true) 1540 } 1541 case 49: 1542 yyDollar = yyS[yypt-1 : yypt+1] 1543 //line go.y:474 1544 { 1545 yyVAL.node = yyDollar[1].node 1546 1547 // These nodes do not carry line numbers. 1548 // Since a bare name used as an expression is an error, 1549 // introduce a wrapper node to give the correct line. 1550 switch yyVAL.node.Op { 1551 case ONAME, ONONAME, OTYPE, OPACK, OLITERAL: 1552 yyVAL.node = Nod(OPAREN, yyVAL.node, nil) 1553 yyVAL.node.Implicit = true 1554 break 1555 } 1556 } 1557 case 50: 1558 yyDollar = yyS[yypt-3 : yypt+1] 1559 //line go.y:488 1560 { 1561 yyVAL.node = Nod(OASOP, yyDollar[1].node, yyDollar[3].node) 1562 yyVAL.node.Etype = uint8(yyDollar[2].i) // rathole to pass opcode 1563 } 1564 case 51: 1565 yyDollar = yyS[yypt-3 : yypt+1] 1566 //line go.y:493 1567 { 1568 if yyDollar[1].list.Next == nil && yyDollar[3].list.Next == nil { 1569 // simple 1570 yyVAL.node = Nod(OAS, yyDollar[1].list.N, yyDollar[3].list.N) 1571 break 1572 } 1573 // multiple 1574 yyVAL.node = Nod(OAS2, nil, nil) 1575 yyVAL.node.List = yyDollar[1].list 1576 yyVAL.node.Rlist = yyDollar[3].list 1577 } 1578 case 52: 1579 yyDollar = yyS[yypt-3 : yypt+1] 1580 //line go.y:505 1581 { 1582 if yyDollar[3].list.N.Op == OTYPESW { 1583 yyVAL.node = Nod(OTYPESW, nil, yyDollar[3].list.N.Right) 1584 if yyDollar[3].list.Next != nil { 1585 Yyerror("expr.(type) must be alone in list") 1586 } 1587 if yyDollar[1].list.Next != nil { 1588 Yyerror("argument count mismatch: %d = %d", count(yyDollar[1].list), 1) 1589 } else if (yyDollar[1].list.N.Op != ONAME && yyDollar[1].list.N.Op != OTYPE && yyDollar[1].list.N.Op != ONONAME) || isblank(yyDollar[1].list.N) { 1590 Yyerror("invalid variable name %s in type switch", yyDollar[1].list.N) 1591 } else { 1592 yyVAL.node.Left = dclname(yyDollar[1].list.N.Sym) 1593 } // it's a colas, so must not re-use an oldname. 1594 break 1595 } 1596 yyVAL.node = colas(yyDollar[1].list, yyDollar[3].list, int32(yyDollar[2].i)) 1597 } 1598 case 53: 1599 yyDollar = yyS[yypt-2 : yypt+1] 1600 //line go.y:523 1601 { 1602 yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1)) 1603 yyVAL.node.Implicit = true 1604 yyVAL.node.Etype = OADD 1605 } 1606 case 54: 1607 yyDollar = yyS[yypt-2 : yypt+1] 1608 //line go.y:529 1609 { 1610 yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1)) 1611 yyVAL.node.Implicit = true 1612 yyVAL.node.Etype = OSUB 1613 } 1614 case 55: 1615 yyDollar = yyS[yypt-3 : yypt+1] 1616 //line go.y:537 1617 { 1618 var n, nn *Node 1619 1620 // will be converted to OCASE 1621 // right will point to next case 1622 // done in casebody() 1623 markdcl() 1624 yyVAL.node = Nod(OXCASE, nil, nil) 1625 yyVAL.node.List = yyDollar[2].list 1626 if typesw != nil && typesw.Right != nil { 1627 n = typesw.Right.Left 1628 if n != nil { 1629 // type switch - declare variable 1630 nn = newname(n.Sym) 1631 declare(nn, dclcontext) 1632 yyVAL.node.Rlist = list1(nn) 1633 1634 // keep track of the instances for reporting unused 1635 nn.Name.Defn = typesw.Right 1636 } 1637 } 1638 } 1639 case 56: 1640 yyDollar = yyS[yypt-5 : yypt+1] 1641 //line go.y:560 1642 { 1643 var n *Node 1644 1645 // will be converted to OCASE 1646 // right will point to next case 1647 // done in casebody() 1648 markdcl() 1649 yyVAL.node = Nod(OXCASE, nil, nil) 1650 if yyDollar[2].list.Next == nil { 1651 n = Nod(OAS, yyDollar[2].list.N, yyDollar[4].node) 1652 } else { 1653 n = Nod(OAS2, nil, nil) 1654 n.List = yyDollar[2].list 1655 n.Rlist = list1(yyDollar[4].node) 1656 } 1657 yyVAL.node.List = list1(n) 1658 } 1659 case 57: 1660 yyDollar = yyS[yypt-5 : yypt+1] 1661 //line go.y:578 1662 { 1663 // will be converted to OCASE 1664 // right will point to next case 1665 // done in casebody() 1666 markdcl() 1667 yyVAL.node = Nod(OXCASE, nil, nil) 1668 yyVAL.node.List = list1(colas(yyDollar[2].list, list1(yyDollar[4].node), int32(yyDollar[3].i))) 1669 } 1670 case 58: 1671 yyDollar = yyS[yypt-2 : yypt+1] 1672 //line go.y:587 1673 { 1674 var n, nn *Node 1675 1676 markdcl() 1677 yyVAL.node = Nod(OXCASE, nil, nil) 1678 if typesw != nil && typesw.Right != nil { 1679 n = typesw.Right.Left 1680 if n != nil { 1681 // type switch - declare variable 1682 nn = newname(n.Sym) 1683 declare(nn, dclcontext) 1684 yyVAL.node.Rlist = list1(nn) 1685 1686 // keep track of the instances for reporting unused 1687 nn.Name.Defn = typesw.Right 1688 } 1689 } 1690 } 1691 case 59: 1692 yyDollar = yyS[yypt-1 : yypt+1] 1693 //line go.y:608 1694 { 1695 markdcl() 1696 } 1697 case 60: 1698 yyDollar = yyS[yypt-4 : yypt+1] 1699 //line go.y:612 1700 { 1701 if yyDollar[3].list == nil { 1702 yyVAL.node = Nod(OEMPTY, nil, nil) 1703 } else { 1704 yyVAL.node = liststmt(yyDollar[3].list) 1705 } 1706 popdcl() 1707 } 1708 case 61: 1709 yyDollar = yyS[yypt-1 : yypt+1] 1710 //line go.y:623 1711 { 1712 // If the last token read by the lexer was consumed 1713 // as part of the case, clear it (parser has cleared yychar). 1714 // If the last token read by the lexer was the lookahead 1715 // leave it alone (parser has it cached in yychar). 1716 // This is so that the stmt_list action doesn't look at 1717 // the case tokens if the stmt_list is empty. 1718 yylast = yychar 1719 yyDollar[1].node.Xoffset = int64(block) 1720 } 1721 case 62: 1722 yyDollar = yyS[yypt-3 : yypt+1] 1723 //line go.y:634 1724 { 1725 // This is the only place in the language where a statement 1726 // list is not allowed to drop the final semicolon, because 1727 // it's the only place where a statement list is not followed 1728 // by a closing brace. Handle the error for pedantry. 1729 1730 // Find the final token of the statement list. 1731 // yylast is lookahead; yyprev is last of stmt_list 1732 last := yyprev 1733 1734 if last > 0 && last != ';' && yychar != '}' { 1735 Yyerror("missing statement after label") 1736 } 1737 yyVAL.node = yyDollar[1].node 1738 yyVAL.node.Nbody = yyDollar[3].list 1739 popdcl() 1740 } 1741 case 63: 1742 yyDollar = yyS[yypt-0 : yypt+1] 1743 //line go.y:653 1744 { 1745 yyVAL.list = nil 1746 } 1747 case 64: 1748 yyDollar = yyS[yypt-2 : yypt+1] 1749 //line go.y:657 1750 { 1751 yyVAL.list = list(yyDollar[1].list, yyDollar[2].node) 1752 } 1753 case 65: 1754 yyDollar = yyS[yypt-1 : yypt+1] 1755 //line go.y:663 1756 { 1757 markdcl() 1758 } 1759 case 66: 1760 yyDollar = yyS[yypt-4 : yypt+1] 1761 //line go.y:667 1762 { 1763 yyVAL.list = yyDollar[3].list 1764 popdcl() 1765 } 1766 case 67: 1767 yyDollar = yyS[yypt-4 : yypt+1] 1768 //line go.y:674 1769 { 1770 yyVAL.node = Nod(ORANGE, nil, yyDollar[4].node) 1771 yyVAL.node.List = yyDollar[1].list 1772 yyVAL.node.Etype = 0 // := flag 1773 } 1774 case 68: 1775 yyDollar = yyS[yypt-4 : yypt+1] 1776 //line go.y:680 1777 { 1778 yyVAL.node = Nod(ORANGE, nil, yyDollar[4].node) 1779 yyVAL.node.List = yyDollar[1].list 1780 yyVAL.node.Colas = true 1781 colasdefn(yyDollar[1].list, yyVAL.node) 1782 } 1783 case 69: 1784 yyDollar = yyS[yypt-2 : yypt+1] 1785 //line go.y:687 1786 { 1787 yyVAL.node = Nod(ORANGE, nil, yyDollar[2].node) 1788 yyVAL.node.Etype = 0 // := flag 1789 } 1790 case 70: 1791 yyDollar = yyS[yypt-5 : yypt+1] 1792 //line go.y:694 1793 { 1794 // init ; test ; incr 1795 if yyDollar[5].node != nil && yyDollar[5].node.Colas { 1796 Yyerror("cannot declare in the for-increment") 1797 } 1798 yyVAL.node = Nod(OFOR, nil, nil) 1799 if yyDollar[1].node != nil { 1800 yyVAL.node.Ninit = list1(yyDollar[1].node) 1801 } 1802 yyVAL.node.Left = yyDollar[3].node 1803 yyVAL.node.Right = yyDollar[5].node 1804 } 1805 case 71: 1806 yyDollar = yyS[yypt-1 : yypt+1] 1807 //line go.y:707 1808 { 1809 // normal test 1810 yyVAL.node = Nod(OFOR, nil, nil) 1811 yyVAL.node.Left = yyDollar[1].node 1812 } 1813 case 73: 1814 yyDollar = yyS[yypt-2 : yypt+1] 1815 //line go.y:716 1816 { 1817 yyVAL.node = yyDollar[1].node 1818 yyVAL.node.Nbody = concat(yyVAL.node.Nbody, yyDollar[2].list) 1819 } 1820 case 74: 1821 yyDollar = yyS[yypt-1 : yypt+1] 1822 //line go.y:723 1823 { 1824 markdcl() 1825 } 1826 case 75: 1827 yyDollar = yyS[yypt-3 : yypt+1] 1828 //line go.y:727 1829 { 1830 yyVAL.node = yyDollar[3].node 1831 popdcl() 1832 } 1833 case 76: 1834 yyDollar = yyS[yypt-1 : yypt+1] 1835 //line go.y:734 1836 { 1837 // test 1838 yyVAL.node = Nod(OIF, nil, nil) 1839 yyVAL.node.Left = yyDollar[1].node 1840 } 1841 case 77: 1842 yyDollar = yyS[yypt-3 : yypt+1] 1843 //line go.y:740 1844 { 1845 // init ; test 1846 yyVAL.node = Nod(OIF, nil, nil) 1847 if yyDollar[1].node != nil { 1848 yyVAL.node.Ninit = list1(yyDollar[1].node) 1849 } 1850 yyVAL.node.Left = yyDollar[3].node 1851 } 1852 case 78: 1853 yyDollar = yyS[yypt-1 : yypt+1] 1854 //line go.y:752 1855 { 1856 markdcl() 1857 } 1858 case 79: 1859 yyDollar = yyS[yypt-3 : yypt+1] 1860 //line go.y:756 1861 { 1862 if yyDollar[3].node.Left == nil { 1863 Yyerror("missing condition in if statement") 1864 } 1865 } 1866 case 80: 1867 yyDollar = yyS[yypt-5 : yypt+1] 1868 //line go.y:762 1869 { 1870 yyDollar[3].node.Nbody = yyDollar[5].list 1871 } 1872 case 81: 1873 yyDollar = yyS[yypt-8 : yypt+1] 1874 //line go.y:766 1875 { 1876 var n *Node 1877 var nn *NodeList 1878 1879 yyVAL.node = yyDollar[3].node 1880 n = yyDollar[3].node 1881 popdcl() 1882 for nn = concat(yyDollar[7].list, yyDollar[8].list); nn != nil; nn = nn.Next { 1883 if nn.N.Op == OIF { 1884 popdcl() 1885 } 1886 n.Rlist = list1(nn.N) 1887 n = nn.N 1888 } 1889 } 1890 case 82: 1891 yyDollar = yyS[yypt-2 : yypt+1] 1892 //line go.y:784 1893 { 1894 markdcl() 1895 } 1896 case 83: 1897 yyDollar = yyS[yypt-5 : yypt+1] 1898 //line go.y:788 1899 { 1900 if yyDollar[4].node.Left == nil { 1901 Yyerror("missing condition in if statement") 1902 } 1903 yyDollar[4].node.Nbody = yyDollar[5].list 1904 yyVAL.list = list1(yyDollar[4].node) 1905 } 1906 case 84: 1907 yyDollar = yyS[yypt-0 : yypt+1] 1908 //line go.y:797 1909 { 1910 yyVAL.list = nil 1911 } 1912 case 85: 1913 yyDollar = yyS[yypt-2 : yypt+1] 1914 //line go.y:801 1915 { 1916 yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list) 1917 } 1918 case 86: 1919 yyDollar = yyS[yypt-0 : yypt+1] 1920 //line go.y:806 1921 { 1922 yyVAL.list = nil 1923 } 1924 case 87: 1925 yyDollar = yyS[yypt-2 : yypt+1] 1926 //line go.y:810 1927 { 1928 l := &NodeList{N: yyDollar[2].node} 1929 l.End = l 1930 yyVAL.list = l 1931 } 1932 case 88: 1933 yyDollar = yyS[yypt-1 : yypt+1] 1934 //line go.y:818 1935 { 1936 markdcl() 1937 } 1938 case 89: 1939 yyDollar = yyS[yypt-3 : yypt+1] 1940 //line go.y:822 1941 { 1942 var n *Node 1943 n = yyDollar[3].node.Left 1944 if n != nil && n.Op != OTYPESW { 1945 n = nil 1946 } 1947 typesw = Nod(OXXX, typesw, n) 1948 } 1949 case 90: 1950 yyDollar = yyS[yypt-7 : yypt+1] 1951 //line go.y:831 1952 { 1953 yyVAL.node = yyDollar[3].node 1954 yyVAL.node.Op = OSWITCH 1955 yyVAL.node.List = yyDollar[6].list 1956 typesw = typesw.Left 1957 popdcl() 1958 } 1959 case 91: 1960 yyDollar = yyS[yypt-1 : yypt+1] 1961 //line go.y:841 1962 { 1963 typesw = Nod(OXXX, typesw, nil) 1964 } 1965 case 92: 1966 yyDollar = yyS[yypt-5 : yypt+1] 1967 //line go.y:845 1968 { 1969 yyVAL.node = Nod(OSELECT, nil, nil) 1970 yyVAL.node.Lineno = typesw.Lineno 1971 yyVAL.node.List = yyDollar[4].list 1972 typesw = typesw.Left 1973 } 1974 case 94: 1975 yyDollar = yyS[yypt-3 : yypt+1] 1976 //line go.y:858 1977 { 1978 yyVAL.node = Nod(OOROR, yyDollar[1].node, yyDollar[3].node) 1979 } 1980 case 95: 1981 yyDollar = yyS[yypt-3 : yypt+1] 1982 //line go.y:862 1983 { 1984 yyVAL.node = Nod(OANDAND, yyDollar[1].node, yyDollar[3].node) 1985 } 1986 case 96: 1987 yyDollar = yyS[yypt-3 : yypt+1] 1988 //line go.y:866 1989 { 1990 yyVAL.node = Nod(OEQ, yyDollar[1].node, yyDollar[3].node) 1991 } 1992 case 97: 1993 yyDollar = yyS[yypt-3 : yypt+1] 1994 //line go.y:870 1995 { 1996 yyVAL.node = Nod(ONE, yyDollar[1].node, yyDollar[3].node) 1997 } 1998 case 98: 1999 yyDollar = yyS[yypt-3 : yypt+1] 2000 //line go.y:874 2001 { 2002 yyVAL.node = Nod(OLT, yyDollar[1].node, yyDollar[3].node) 2003 } 2004 case 99: 2005 yyDollar = yyS[yypt-3 : yypt+1] 2006 //line go.y:878 2007 { 2008 yyVAL.node = Nod(OLE, yyDollar[1].node, yyDollar[3].node) 2009 } 2010 case 100: 2011 yyDollar = yyS[yypt-3 : yypt+1] 2012 //line go.y:882 2013 { 2014 yyVAL.node = Nod(OGE, yyDollar[1].node, yyDollar[3].node) 2015 } 2016 case 101: 2017 yyDollar = yyS[yypt-3 : yypt+1] 2018 //line go.y:886 2019 { 2020 yyVAL.node = Nod(OGT, yyDollar[1].node, yyDollar[3].node) 2021 } 2022 case 102: 2023 yyDollar = yyS[yypt-3 : yypt+1] 2024 //line go.y:890 2025 { 2026 yyVAL.node = Nod(OADD, yyDollar[1].node, yyDollar[3].node) 2027 } 2028 case 103: 2029 yyDollar = yyS[yypt-3 : yypt+1] 2030 //line go.y:894 2031 { 2032 yyVAL.node = Nod(OSUB, yyDollar[1].node, yyDollar[3].node) 2033 } 2034 case 104: 2035 yyDollar = yyS[yypt-3 : yypt+1] 2036 //line go.y:898 2037 { 2038 yyVAL.node = Nod(OOR, yyDollar[1].node, yyDollar[3].node) 2039 } 2040 case 105: 2041 yyDollar = yyS[yypt-3 : yypt+1] 2042 //line go.y:902 2043 { 2044 yyVAL.node = Nod(OXOR, yyDollar[1].node, yyDollar[3].node) 2045 } 2046 case 106: 2047 yyDollar = yyS[yypt-3 : yypt+1] 2048 //line go.y:906 2049 { 2050 yyVAL.node = Nod(OMUL, yyDollar[1].node, yyDollar[3].node) 2051 } 2052 case 107: 2053 yyDollar = yyS[yypt-3 : yypt+1] 2054 //line go.y:910 2055 { 2056 yyVAL.node = Nod(ODIV, yyDollar[1].node, yyDollar[3].node) 2057 } 2058 case 108: 2059 yyDollar = yyS[yypt-3 : yypt+1] 2060 //line go.y:914 2061 { 2062 yyVAL.node = Nod(OMOD, yyDollar[1].node, yyDollar[3].node) 2063 } 2064 case 109: 2065 yyDollar = yyS[yypt-3 : yypt+1] 2066 //line go.y:918 2067 { 2068 yyVAL.node = Nod(OAND, yyDollar[1].node, yyDollar[3].node) 2069 } 2070 case 110: 2071 yyDollar = yyS[yypt-3 : yypt+1] 2072 //line go.y:922 2073 { 2074 yyVAL.node = Nod(OANDNOT, yyDollar[1].node, yyDollar[3].node) 2075 } 2076 case 111: 2077 yyDollar = yyS[yypt-3 : yypt+1] 2078 //line go.y:926 2079 { 2080 yyVAL.node = Nod(OLSH, yyDollar[1].node, yyDollar[3].node) 2081 } 2082 case 112: 2083 yyDollar = yyS[yypt-3 : yypt+1] 2084 //line go.y:930 2085 { 2086 yyVAL.node = Nod(ORSH, yyDollar[1].node, yyDollar[3].node) 2087 } 2088 case 113: 2089 yyDollar = yyS[yypt-3 : yypt+1] 2090 //line go.y:935 2091 { 2092 yyVAL.node = Nod(OSEND, yyDollar[1].node, yyDollar[3].node) 2093 } 2094 case 115: 2095 yyDollar = yyS[yypt-2 : yypt+1] 2096 //line go.y:942 2097 { 2098 yyVAL.node = Nod(OIND, yyDollar[2].node, nil) 2099 } 2100 case 116: 2101 yyDollar = yyS[yypt-2 : yypt+1] 2102 //line go.y:946 2103 { 2104 if yyDollar[2].node.Op == OCOMPLIT { 2105 // Special case for &T{...}: turn into (*T){...}. 2106 yyVAL.node = yyDollar[2].node 2107 yyVAL.node.Right = Nod(OIND, yyVAL.node.Right, nil) 2108 yyVAL.node.Right.Implicit = true 2109 } else { 2110 yyVAL.node = Nod(OADDR, yyDollar[2].node, nil) 2111 } 2112 } 2113 case 117: 2114 yyDollar = yyS[yypt-2 : yypt+1] 2115 //line go.y:957 2116 { 2117 yyVAL.node = Nod(OPLUS, yyDollar[2].node, nil) 2118 } 2119 case 118: 2120 yyDollar = yyS[yypt-2 : yypt+1] 2121 //line go.y:961 2122 { 2123 yyVAL.node = Nod(OMINUS, yyDollar[2].node, nil) 2124 } 2125 case 119: 2126 yyDollar = yyS[yypt-2 : yypt+1] 2127 //line go.y:965 2128 { 2129 yyVAL.node = Nod(ONOT, yyDollar[2].node, nil) 2130 } 2131 case 120: 2132 yyDollar = yyS[yypt-2 : yypt+1] 2133 //line go.y:969 2134 { 2135 Yyerror("the bitwise complement operator is ^") 2136 yyVAL.node = Nod(OCOM, yyDollar[2].node, nil) 2137 } 2138 case 121: 2139 yyDollar = yyS[yypt-2 : yypt+1] 2140 //line go.y:974 2141 { 2142 yyVAL.node = Nod(OCOM, yyDollar[2].node, nil) 2143 } 2144 case 122: 2145 yyDollar = yyS[yypt-2 : yypt+1] 2146 //line go.y:978 2147 { 2148 yyVAL.node = Nod(ORECV, yyDollar[2].node, nil) 2149 } 2150 case 123: 2151 yyDollar = yyS[yypt-3 : yypt+1] 2152 //line go.y:988 2153 { 2154 yyVAL.node = Nod(OCALL, yyDollar[1].node, nil) 2155 } 2156 case 124: 2157 yyDollar = yyS[yypt-5 : yypt+1] 2158 //line go.y:992 2159 { 2160 yyVAL.node = Nod(OCALL, yyDollar[1].node, nil) 2161 yyVAL.node.List = yyDollar[3].list 2162 } 2163 case 125: 2164 yyDollar = yyS[yypt-6 : yypt+1] 2165 //line go.y:997 2166 { 2167 yyVAL.node = Nod(OCALL, yyDollar[1].node, nil) 2168 yyVAL.node.List = yyDollar[3].list 2169 yyVAL.node.Isddd = true 2170 } 2171 case 126: 2172 yyDollar = yyS[yypt-1 : yypt+1] 2173 //line go.y:1005 2174 { 2175 yyVAL.node = nodlit(yyDollar[1].val) 2176 } 2177 case 128: 2178 yyDollar = yyS[yypt-3 : yypt+1] 2179 //line go.y:1010 2180 { 2181 if yyDollar[1].node.Op == OPACK { 2182 var s *Sym 2183 s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Name.Pkg) 2184 yyDollar[1].node.Used = true 2185 yyVAL.node = oldname(s) 2186 break 2187 } 2188 yyVAL.node = Nod(OXDOT, yyDollar[1].node, newname(yyDollar[3].sym)) 2189 } 2190 case 129: 2191 yyDollar = yyS[yypt-5 : yypt+1] 2192 //line go.y:1021 2193 { 2194 yyVAL.node = Nod(ODOTTYPE, yyDollar[1].node, yyDollar[4].node) 2195 } 2196 case 130: 2197 yyDollar = yyS[yypt-5 : yypt+1] 2198 //line go.y:1025 2199 { 2200 yyVAL.node = Nod(OTYPESW, nil, yyDollar[1].node) 2201 } 2202 case 131: 2203 yyDollar = yyS[yypt-4 : yypt+1] 2204 //line go.y:1029 2205 { 2206 yyVAL.node = Nod(OINDEX, yyDollar[1].node, yyDollar[3].node) 2207 } 2208 case 132: 2209 yyDollar = yyS[yypt-6 : yypt+1] 2210 //line go.y:1033 2211 { 2212 yyVAL.node = Nod(OSLICE, yyDollar[1].node, Nod(OKEY, yyDollar[3].node, yyDollar[5].node)) 2213 } 2214 case 133: 2215 yyDollar = yyS[yypt-8 : yypt+1] 2216 //line go.y:1037 2217 { 2218 if yyDollar[5].node == nil { 2219 Yyerror("middle index required in 3-index slice") 2220 } 2221 if yyDollar[7].node == nil { 2222 Yyerror("final index required in 3-index slice") 2223 } 2224 yyVAL.node = Nod(OSLICE3, yyDollar[1].node, Nod(OKEY, yyDollar[3].node, Nod(OKEY, yyDollar[5].node, yyDollar[7].node))) 2225 } 2226 case 135: 2227 yyDollar = yyS[yypt-5 : yypt+1] 2228 //line go.y:1048 2229 { 2230 // conversion 2231 yyVAL.node = Nod(OCALL, yyDollar[1].node, nil) 2232 yyVAL.node.List = list1(yyDollar[3].node) 2233 } 2234 case 136: 2235 yyDollar = yyS[yypt-5 : yypt+1] 2236 //line go.y:1054 2237 { 2238 yyVAL.node = yyDollar[3].node 2239 yyVAL.node.Right = yyDollar[1].node 2240 yyVAL.node.List = yyDollar[4].list 2241 fixlbrace(yyDollar[2].i) 2242 } 2243 case 137: 2244 yyDollar = yyS[yypt-5 : yypt+1] 2245 //line go.y:1061 2246 { 2247 yyVAL.node = yyDollar[3].node 2248 yyVAL.node.Right = yyDollar[1].node 2249 yyVAL.node.List = yyDollar[4].list 2250 } 2251 case 138: 2252 yyDollar = yyS[yypt-7 : yypt+1] 2253 //line go.y:1067 2254 { 2255 Yyerror("cannot parenthesize type in composite literal") 2256 yyVAL.node = yyDollar[5].node 2257 yyVAL.node.Right = yyDollar[2].node 2258 yyVAL.node.List = yyDollar[6].list 2259 } 2260 case 140: 2261 yyDollar = yyS[yypt-0 : yypt+1] 2262 //line go.y:1076 2263 { 2264 // composite expression. 2265 // make node early so we get the right line number. 2266 yyVAL.node = Nod(OCOMPLIT, nil, nil) 2267 } 2268 case 141: 2269 yyDollar = yyS[yypt-3 : yypt+1] 2270 //line go.y:1084 2271 { 2272 yyVAL.node = Nod(OKEY, yyDollar[1].node, yyDollar[3].node) 2273 } 2274 case 142: 2275 yyDollar = yyS[yypt-1 : yypt+1] 2276 //line go.y:1090 2277 { 2278 // These nodes do not carry line numbers. 2279 // Since a composite literal commonly spans several lines, 2280 // the line number on errors may be misleading. 2281 // Introduce a wrapper node to give the correct line. 2282 yyVAL.node = yyDollar[1].node 2283 switch yyVAL.node.Op { 2284 case ONAME, ONONAME, OTYPE, OPACK, OLITERAL: 2285 yyVAL.node = Nod(OPAREN, yyVAL.node, nil) 2286 yyVAL.node.Implicit = true 2287 } 2288 } 2289 case 143: 2290 yyDollar = yyS[yypt-4 : yypt+1] 2291 //line go.y:1103 2292 { 2293 yyVAL.node = yyDollar[2].node 2294 yyVAL.node.List = yyDollar[3].list 2295 } 2296 case 145: 2297 yyDollar = yyS[yypt-4 : yypt+1] 2298 //line go.y:1111 2299 { 2300 yyVAL.node = yyDollar[2].node 2301 yyVAL.node.List = yyDollar[3].list 2302 } 2303 case 147: 2304 yyDollar = yyS[yypt-3 : yypt+1] 2305 //line go.y:1119 2306 { 2307 yyVAL.node = yyDollar[2].node 2308 2309 // Need to know on lhs of := whether there are ( ). 2310 // Don't bother with the OPAREN in other cases: 2311 // it's just a waste of memory and time. 2312 switch yyVAL.node.Op { 2313 case ONAME, ONONAME, OPACK, OTYPE, OLITERAL, OTYPESW: 2314 yyVAL.node = Nod(OPAREN, yyVAL.node, nil) 2315 } 2316 } 2317 case 151: 2318 yyDollar = yyS[yypt-1 : yypt+1] 2319 //line go.y:1140 2320 { 2321 yyVAL.i = LBODY 2322 } 2323 case 152: 2324 yyDollar = yyS[yypt-1 : yypt+1] 2325 //line go.y:1144 2326 { 2327 yyVAL.i = '{' 2328 } 2329 case 153: 2330 yyDollar = yyS[yypt-1 : yypt+1] 2331 //line go.y:1155 2332 { 2333 if yyDollar[1].sym == nil { 2334 yyVAL.node = nil 2335 } else { 2336 yyVAL.node = newname(yyDollar[1].sym) 2337 } 2338 } 2339 case 154: 2340 yyDollar = yyS[yypt-1 : yypt+1] 2341 //line go.y:1165 2342 { 2343 yyVAL.node = dclname(yyDollar[1].sym) 2344 } 2345 case 155: 2346 yyDollar = yyS[yypt-0 : yypt+1] 2347 //line go.y:1170 2348 { 2349 yyVAL.node = nil 2350 } 2351 case 157: 2352 yyDollar = yyS[yypt-1 : yypt+1] 2353 //line go.y:1177 2354 { 2355 yyVAL.sym = yyDollar[1].sym 2356 // during imports, unqualified non-exported identifiers are from builtinpkg 2357 if importpkg != nil && !exportname(yyDollar[1].sym.Name) { 2358 yyVAL.sym = Pkglookup(yyDollar[1].sym.Name, builtinpkg) 2359 } 2360 } 2361 case 159: 2362 yyDollar = yyS[yypt-1 : yypt+1] 2363 //line go.y:1186 2364 { 2365 yyVAL.sym = nil 2366 } 2367 case 160: 2368 yyDollar = yyS[yypt-4 : yypt+1] 2369 //line go.y:1192 2370 { 2371 var p *Pkg 2372 2373 if yyDollar[2].val.U.(string) == "" { 2374 p = importpkg 2375 } else { 2376 if isbadimport(yyDollar[2].val.U.(string)) { 2377 errorexit() 2378 } 2379 p = mkpkg(yyDollar[2].val.U.(string)) 2380 } 2381 yyVAL.sym = Pkglookup(yyDollar[4].sym.Name, p) 2382 } 2383 case 161: 2384 yyDollar = yyS[yypt-4 : yypt+1] 2385 //line go.y:1206 2386 { 2387 var p *Pkg 2388 2389 if yyDollar[2].val.U.(string) == "" { 2390 p = importpkg 2391 } else { 2392 if isbadimport(yyDollar[2].val.U.(string)) { 2393 errorexit() 2394 } 2395 p = mkpkg(yyDollar[2].val.U.(string)) 2396 } 2397 yyVAL.sym = Pkglookup("?", p) 2398 } 2399 case 162: 2400 yyDollar = yyS[yypt-1 : yypt+1] 2401 //line go.y:1222 2402 { 2403 yyVAL.node = oldname(yyDollar[1].sym) 2404 if yyVAL.node.Name != nil && yyVAL.node.Name.Pack != nil { 2405 yyVAL.node.Name.Pack.Used = true 2406 } 2407 } 2408 case 164: 2409 yyDollar = yyS[yypt-1 : yypt+1] 2410 //line go.y:1243 2411 { 2412 Yyerror("final argument in variadic function missing type") 2413 yyVAL.node = Nod(ODDD, typenod(typ(TINTER)), nil) 2414 } 2415 case 165: 2416 yyDollar = yyS[yypt-2 : yypt+1] 2417 //line go.y:1248 2418 { 2419 yyVAL.node = Nod(ODDD, yyDollar[2].node, nil) 2420 } 2421 case 171: 2422 yyDollar = yyS[yypt-3 : yypt+1] 2423 //line go.y:1259 2424 { 2425 yyVAL.node = yyDollar[2].node 2426 } 2427 case 175: 2428 yyDollar = yyS[yypt-2 : yypt+1] 2429 //line go.y:1268 2430 { 2431 yyVAL.node = Nod(OIND, yyDollar[2].node, nil) 2432 } 2433 case 180: 2434 yyDollar = yyS[yypt-3 : yypt+1] 2435 //line go.y:1278 2436 { 2437 yyVAL.node = yyDollar[2].node 2438 } 2439 case 190: 2440 yyDollar = yyS[yypt-3 : yypt+1] 2441 //line go.y:1299 2442 { 2443 if yyDollar[1].node.Op == OPACK { 2444 var s *Sym 2445 s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Name.Pkg) 2446 yyDollar[1].node.Used = true 2447 yyVAL.node = oldname(s) 2448 break 2449 } 2450 yyVAL.node = Nod(OXDOT, yyDollar[1].node, newname(yyDollar[3].sym)) 2451 } 2452 case 191: 2453 yyDollar = yyS[yypt-4 : yypt+1] 2454 //line go.y:1312 2455 { 2456 yyVAL.node = Nod(OTARRAY, yyDollar[2].node, yyDollar[4].node) 2457 } 2458 case 192: 2459 yyDollar = yyS[yypt-4 : yypt+1] 2460 //line go.y:1316 2461 { 2462 // array literal of nelem 2463 yyVAL.node = Nod(OTARRAY, Nod(ODDD, nil, nil), yyDollar[4].node) 2464 } 2465 case 193: 2466 yyDollar = yyS[yypt-2 : yypt+1] 2467 //line go.y:1321 2468 { 2469 yyVAL.node = Nod(OTCHAN, yyDollar[2].node, nil) 2470 yyVAL.node.Etype = Cboth 2471 } 2472 case 194: 2473 yyDollar = yyS[yypt-3 : yypt+1] 2474 //line go.y:1326 2475 { 2476 yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil) 2477 yyVAL.node.Etype = Csend 2478 } 2479 case 195: 2480 yyDollar = yyS[yypt-5 : yypt+1] 2481 //line go.y:1331 2482 { 2483 yyVAL.node = Nod(OTMAP, yyDollar[3].node, yyDollar[5].node) 2484 } 2485 case 198: 2486 yyDollar = yyS[yypt-2 : yypt+1] 2487 //line go.y:1339 2488 { 2489 yyVAL.node = Nod(OIND, yyDollar[2].node, nil) 2490 } 2491 case 199: 2492 yyDollar = yyS[yypt-3 : yypt+1] 2493 //line go.y:1345 2494 { 2495 yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil) 2496 yyVAL.node.Etype = Crecv 2497 } 2498 case 200: 2499 yyDollar = yyS[yypt-5 : yypt+1] 2500 //line go.y:1352 2501 { 2502 yyVAL.node = Nod(OTSTRUCT, nil, nil) 2503 yyVAL.node.List = yyDollar[3].list 2504 fixlbrace(yyDollar[2].i) 2505 } 2506 case 201: 2507 yyDollar = yyS[yypt-3 : yypt+1] 2508 //line go.y:1358 2509 { 2510 yyVAL.node = Nod(OTSTRUCT, nil, nil) 2511 fixlbrace(yyDollar[2].i) 2512 } 2513 case 202: 2514 yyDollar = yyS[yypt-5 : yypt+1] 2515 //line go.y:1365 2516 { 2517 yyVAL.node = Nod(OTINTER, nil, nil) 2518 yyVAL.node.List = yyDollar[3].list 2519 fixlbrace(yyDollar[2].i) 2520 } 2521 case 203: 2522 yyDollar = yyS[yypt-3 : yypt+1] 2523 //line go.y:1371 2524 { 2525 yyVAL.node = Nod(OTINTER, nil, nil) 2526 fixlbrace(yyDollar[2].i) 2527 } 2528 case 204: 2529 yyDollar = yyS[yypt-3 : yypt+1] 2530 //line go.y:1382 2531 { 2532 yyVAL.node = yyDollar[2].node 2533 if yyVAL.node == nil { 2534 break 2535 } 2536 if noescape && yyDollar[3].list != nil { 2537 Yyerror("can only use //go:noescape with external func implementations") 2538 } 2539 yyVAL.node.Nbody = yyDollar[3].list 2540 yyVAL.node.Func.Endlineno = lineno 2541 yyVAL.node.Noescape = noescape 2542 yyVAL.node.Func.Norace = norace 2543 yyVAL.node.Func.Nosplit = nosplit 2544 yyVAL.node.Func.Nowritebarrier = nowritebarrier 2545 yyVAL.node.Func.Systemstack = systemstack 2546 funcbody(yyVAL.node) 2547 } 2548 case 205: 2549 yyDollar = yyS[yypt-5 : yypt+1] 2550 //line go.y:1402 2551 { 2552 var t *Node 2553 2554 yyVAL.node = nil 2555 yyDollar[3].list = checkarglist(yyDollar[3].list, 1) 2556 2557 if yyDollar[1].sym.Name == "init" { 2558 yyDollar[1].sym = renameinit() 2559 if yyDollar[3].list != nil || yyDollar[5].list != nil { 2560 Yyerror("func init must have no arguments and no return values") 2561 } 2562 } 2563 if localpkg.Name == "main" && yyDollar[1].sym.Name == "main" { 2564 if yyDollar[3].list != nil || yyDollar[5].list != nil { 2565 Yyerror("func main must have no arguments and no return values") 2566 } 2567 } 2568 2569 t = Nod(OTFUNC, nil, nil) 2570 t.List = yyDollar[3].list 2571 t.Rlist = yyDollar[5].list 2572 2573 yyVAL.node = Nod(ODCLFUNC, nil, nil) 2574 yyVAL.node.Func.Nname = newfuncname(yyDollar[1].sym) 2575 yyVAL.node.Func.Nname.Name.Defn = yyVAL.node 2576 yyVAL.node.Func.Nname.Name.Param.Ntype = t // TODO: check if nname already has an ntype 2577 declare(yyVAL.node.Func.Nname, PFUNC) 2578 2579 funchdr(yyVAL.node) 2580 } 2581 case 206: 2582 yyDollar = yyS[yypt-8 : yypt+1] 2583 //line go.y:1433 2584 { 2585 var rcvr, t *Node 2586 2587 yyVAL.node = nil 2588 yyDollar[2].list = checkarglist(yyDollar[2].list, 0) 2589 yyDollar[6].list = checkarglist(yyDollar[6].list, 1) 2590 2591 if yyDollar[2].list == nil { 2592 Yyerror("method has no receiver") 2593 break 2594 } 2595 if yyDollar[2].list.Next != nil { 2596 Yyerror("method has multiple receivers") 2597 break 2598 } 2599 rcvr = yyDollar[2].list.N 2600 if rcvr.Op != ODCLFIELD { 2601 Yyerror("bad receiver in method") 2602 break 2603 } 2604 2605 t = Nod(OTFUNC, rcvr, nil) 2606 t.List = yyDollar[6].list 2607 t.Rlist = yyDollar[8].list 2608 2609 yyVAL.node = Nod(ODCLFUNC, nil, nil) 2610 yyVAL.node.Func.Shortname = newfuncname(yyDollar[4].sym) 2611 yyVAL.node.Func.Nname = methodname1(yyVAL.node.Func.Shortname, rcvr.Right) 2612 yyVAL.node.Func.Nname.Name.Defn = yyVAL.node 2613 yyVAL.node.Func.Nname.Name.Param.Ntype = t 2614 yyVAL.node.Func.Nname.Nointerface = nointerface 2615 declare(yyVAL.node.Func.Nname, PFUNC) 2616 2617 funchdr(yyVAL.node) 2618 } 2619 case 207: 2620 yyDollar = yyS[yypt-5 : yypt+1] 2621 //line go.y:1471 2622 { 2623 var s *Sym 2624 var t *Type 2625 2626 yyVAL.node = nil 2627 2628 s = yyDollar[1].sym 2629 t = functype(nil, yyDollar[3].list, yyDollar[5].list) 2630 2631 importsym(s, ONAME) 2632 if s.Def != nil && s.Def.Op == ONAME { 2633 if Eqtype(t, s.Def.Type) { 2634 dclcontext = PDISCARD // since we skip funchdr below 2635 break 2636 } 2637 Yyerror("inconsistent definition for func %v during import\n\t%v\n\t%v", s, s.Def.Type, t) 2638 } 2639 2640 yyVAL.node = newfuncname(s) 2641 yyVAL.node.Type = t 2642 declare(yyVAL.node, PFUNC) 2643 2644 funchdr(yyVAL.node) 2645 } 2646 case 208: 2647 yyDollar = yyS[yypt-8 : yypt+1] 2648 //line go.y:1496 2649 { 2650 yyVAL.node = methodname1(newname(yyDollar[4].sym), yyDollar[2].list.N.Right) 2651 yyVAL.node.Type = functype(yyDollar[2].list.N, yyDollar[6].list, yyDollar[8].list) 2652 2653 checkwidth(yyVAL.node.Type) 2654 addmethod(yyDollar[4].sym, yyVAL.node.Type, false, nointerface) 2655 nointerface = false 2656 funchdr(yyVAL.node) 2657 2658 // inl.C's inlnode in on a dotmeth node expects to find the inlineable body as 2659 // (dotmeth's type).Nname.Inl, and dotmeth's type has been pulled 2660 // out by typecheck's lookdot as this $$.ttype. So by providing 2661 // this back link here we avoid special casing there. 2662 yyVAL.node.Type.Nname = yyVAL.node 2663 } 2664 case 209: 2665 yyDollar = yyS[yypt-5 : yypt+1] 2666 //line go.y:1514 2667 { 2668 yyDollar[3].list = checkarglist(yyDollar[3].list, 1) 2669 yyVAL.node = Nod(OTFUNC, nil, nil) 2670 yyVAL.node.List = yyDollar[3].list 2671 yyVAL.node.Rlist = yyDollar[5].list 2672 } 2673 case 210: 2674 yyDollar = yyS[yypt-0 : yypt+1] 2675 //line go.y:1522 2676 { 2677 yyVAL.list = nil 2678 } 2679 case 211: 2680 yyDollar = yyS[yypt-3 : yypt+1] 2681 //line go.y:1526 2682 { 2683 yyVAL.list = yyDollar[2].list 2684 if yyVAL.list == nil { 2685 yyVAL.list = list1(Nod(OEMPTY, nil, nil)) 2686 } 2687 } 2688 case 212: 2689 yyDollar = yyS[yypt-0 : yypt+1] 2690 //line go.y:1535 2691 { 2692 yyVAL.list = nil 2693 } 2694 case 213: 2695 yyDollar = yyS[yypt-1 : yypt+1] 2696 //line go.y:1539 2697 { 2698 yyVAL.list = list1(Nod(ODCLFIELD, nil, yyDollar[1].node)) 2699 } 2700 case 214: 2701 yyDollar = yyS[yypt-3 : yypt+1] 2702 //line go.y:1543 2703 { 2704 yyDollar[2].list = checkarglist(yyDollar[2].list, 0) 2705 yyVAL.list = yyDollar[2].list 2706 } 2707 case 215: 2708 yyDollar = yyS[yypt-1 : yypt+1] 2709 //line go.y:1550 2710 { 2711 closurehdr(yyDollar[1].node) 2712 } 2713 case 216: 2714 yyDollar = yyS[yypt-4 : yypt+1] 2715 //line go.y:1556 2716 { 2717 yyVAL.node = closurebody(yyDollar[3].list) 2718 fixlbrace(yyDollar[2].i) 2719 } 2720 case 217: 2721 yyDollar = yyS[yypt-2 : yypt+1] 2722 //line go.y:1561 2723 { 2724 yyVAL.node = closurebody(nil) 2725 } 2726 case 218: 2727 yyDollar = yyS[yypt-0 : yypt+1] 2728 //line go.y:1572 2729 { 2730 yyVAL.list = nil 2731 } 2732 case 219: 2733 yyDollar = yyS[yypt-3 : yypt+1] 2734 //line go.y:1576 2735 { 2736 yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list) 2737 if nsyntaxerrors == 0 { 2738 testdclstack() 2739 } 2740 nointerface = false 2741 noescape = false 2742 norace = false 2743 nosplit = false 2744 nowritebarrier = false 2745 systemstack = false 2746 } 2747 case 221: 2748 yyDollar = yyS[yypt-3 : yypt+1] 2749 //line go.y:1592 2750 { 2751 yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list) 2752 } 2753 case 223: 2754 yyDollar = yyS[yypt-3 : yypt+1] 2755 //line go.y:1599 2756 { 2757 yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list) 2758 } 2759 case 224: 2760 yyDollar = yyS[yypt-1 : yypt+1] 2761 //line go.y:1605 2762 { 2763 yyVAL.list = list1(yyDollar[1].node) 2764 } 2765 case 225: 2766 yyDollar = yyS[yypt-3 : yypt+1] 2767 //line go.y:1609 2768 { 2769 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 2770 } 2771 case 227: 2772 yyDollar = yyS[yypt-3 : yypt+1] 2773 //line go.y:1616 2774 { 2775 yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list) 2776 } 2777 case 228: 2778 yyDollar = yyS[yypt-1 : yypt+1] 2779 //line go.y:1622 2780 { 2781 yyVAL.list = list1(yyDollar[1].node) 2782 } 2783 case 229: 2784 yyDollar = yyS[yypt-3 : yypt+1] 2785 //line go.y:1626 2786 { 2787 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 2788 } 2789 case 230: 2790 yyDollar = yyS[yypt-3 : yypt+1] 2791 //line go.y:1632 2792 { 2793 var l *NodeList 2794 2795 var n *Node 2796 l = yyDollar[1].list 2797 if l == nil || l.N.Sym.Name == "?" { 2798 // ? symbol, during import (list1(nil) == nil) 2799 n = yyDollar[2].node 2800 if n.Op == OIND { 2801 n = n.Left 2802 } 2803 n = embedded(n.Sym, importpkg) 2804 n.Right = yyDollar[2].node 2805 n.SetVal(yyDollar[3].val) 2806 yyVAL.list = list1(n) 2807 break 2808 } 2809 2810 for l = yyDollar[1].list; l != nil; l = l.Next { 2811 l.N = Nod(ODCLFIELD, l.N, yyDollar[2].node) 2812 l.N.SetVal(yyDollar[3].val) 2813 } 2814 } 2815 case 231: 2816 yyDollar = yyS[yypt-2 : yypt+1] 2817 //line go.y:1656 2818 { 2819 yyDollar[1].node.SetVal(yyDollar[2].val) 2820 yyVAL.list = list1(yyDollar[1].node) 2821 } 2822 case 232: 2823 yyDollar = yyS[yypt-4 : yypt+1] 2824 //line go.y:1661 2825 { 2826 yyDollar[2].node.SetVal(yyDollar[4].val) 2827 yyVAL.list = list1(yyDollar[2].node) 2828 Yyerror("cannot parenthesize embedded type") 2829 } 2830 case 233: 2831 yyDollar = yyS[yypt-3 : yypt+1] 2832 //line go.y:1667 2833 { 2834 yyDollar[2].node.Right = Nod(OIND, yyDollar[2].node.Right, nil) 2835 yyDollar[2].node.SetVal(yyDollar[3].val) 2836 yyVAL.list = list1(yyDollar[2].node) 2837 } 2838 case 234: 2839 yyDollar = yyS[yypt-5 : yypt+1] 2840 //line go.y:1673 2841 { 2842 yyDollar[3].node.Right = Nod(OIND, yyDollar[3].node.Right, nil) 2843 yyDollar[3].node.SetVal(yyDollar[5].val) 2844 yyVAL.list = list1(yyDollar[3].node) 2845 Yyerror("cannot parenthesize embedded type") 2846 } 2847 case 235: 2848 yyDollar = yyS[yypt-5 : yypt+1] 2849 //line go.y:1680 2850 { 2851 yyDollar[3].node.Right = Nod(OIND, yyDollar[3].node.Right, nil) 2852 yyDollar[3].node.SetVal(yyDollar[5].val) 2853 yyVAL.list = list1(yyDollar[3].node) 2854 Yyerror("cannot parenthesize embedded type") 2855 } 2856 case 236: 2857 yyDollar = yyS[yypt-1 : yypt+1] 2858 //line go.y:1689 2859 { 2860 var n *Node 2861 2862 yyVAL.sym = yyDollar[1].sym 2863 n = oldname(yyDollar[1].sym) 2864 if n.Name != nil && n.Name.Pack != nil { 2865 n.Name.Pack.Used = true 2866 } 2867 } 2868 case 237: 2869 yyDollar = yyS[yypt-3 : yypt+1] 2870 //line go.y:1699 2871 { 2872 var pkg *Pkg 2873 2874 if yyDollar[1].sym.Def == nil || yyDollar[1].sym.Def.Op != OPACK { 2875 Yyerror("%v is not a package", yyDollar[1].sym) 2876 pkg = localpkg 2877 } else { 2878 yyDollar[1].sym.Def.Used = true 2879 pkg = yyDollar[1].sym.Def.Name.Pkg 2880 } 2881 yyVAL.sym = restrictlookup(yyDollar[3].sym.Name, pkg) 2882 } 2883 case 238: 2884 yyDollar = yyS[yypt-1 : yypt+1] 2885 //line go.y:1714 2886 { 2887 yyVAL.node = embedded(yyDollar[1].sym, localpkg) 2888 } 2889 case 239: 2890 yyDollar = yyS[yypt-2 : yypt+1] 2891 //line go.y:1720 2892 { 2893 yyVAL.node = Nod(ODCLFIELD, yyDollar[1].node, yyDollar[2].node) 2894 ifacedcl(yyVAL.node) 2895 } 2896 case 240: 2897 yyDollar = yyS[yypt-1 : yypt+1] 2898 //line go.y:1725 2899 { 2900 yyVAL.node = Nod(ODCLFIELD, nil, oldname(yyDollar[1].sym)) 2901 } 2902 case 241: 2903 yyDollar = yyS[yypt-3 : yypt+1] 2904 //line go.y:1729 2905 { 2906 yyVAL.node = Nod(ODCLFIELD, nil, oldname(yyDollar[2].sym)) 2907 Yyerror("cannot parenthesize embedded type") 2908 } 2909 case 242: 2910 yyDollar = yyS[yypt-4 : yypt+1] 2911 //line go.y:1736 2912 { 2913 // without func keyword 2914 yyDollar[2].list = checkarglist(yyDollar[2].list, 1) 2915 yyVAL.node = Nod(OTFUNC, fakethis(), nil) 2916 yyVAL.node.List = yyDollar[2].list 2917 yyVAL.node.Rlist = yyDollar[4].list 2918 } 2919 case 244: 2920 yyDollar = yyS[yypt-2 : yypt+1] 2921 //line go.y:1750 2922 { 2923 yyVAL.node = Nod(ONONAME, nil, nil) 2924 yyVAL.node.Sym = yyDollar[1].sym 2925 yyVAL.node = Nod(OKEY, yyVAL.node, yyDollar[2].node) 2926 } 2927 case 245: 2928 yyDollar = yyS[yypt-2 : yypt+1] 2929 //line go.y:1756 2930 { 2931 yyVAL.node = Nod(ONONAME, nil, nil) 2932 yyVAL.node.Sym = yyDollar[1].sym 2933 yyVAL.node = Nod(OKEY, yyVAL.node, yyDollar[2].node) 2934 } 2935 case 247: 2936 yyDollar = yyS[yypt-1 : yypt+1] 2937 //line go.y:1765 2938 { 2939 yyVAL.list = list1(yyDollar[1].node) 2940 } 2941 case 248: 2942 yyDollar = yyS[yypt-3 : yypt+1] 2943 //line go.y:1769 2944 { 2945 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 2946 } 2947 case 249: 2948 yyDollar = yyS[yypt-0 : yypt+1] 2949 //line go.y:1774 2950 { 2951 yyVAL.list = nil 2952 } 2953 case 250: 2954 yyDollar = yyS[yypt-2 : yypt+1] 2955 //line go.y:1778 2956 { 2957 yyVAL.list = yyDollar[1].list 2958 } 2959 case 251: 2960 yyDollar = yyS[yypt-0 : yypt+1] 2961 //line go.y:1786 2962 { 2963 yyVAL.node = nil 2964 } 2965 case 253: 2966 yyDollar = yyS[yypt-1 : yypt+1] 2967 //line go.y:1791 2968 { 2969 yyVAL.node = liststmt(yyDollar[1].list) 2970 } 2971 case 255: 2972 yyDollar = yyS[yypt-1 : yypt+1] 2973 //line go.y:1796 2974 { 2975 yyVAL.node = nil 2976 } 2977 case 261: 2978 yyDollar = yyS[yypt-2 : yypt+1] 2979 //line go.y:1807 2980 { 2981 yyDollar[1].node = Nod(OLABEL, yyDollar[1].node, nil) 2982 yyDollar[1].node.Sym = dclstack // context, for goto restrictions 2983 } 2984 case 262: 2985 yyDollar = yyS[yypt-4 : yypt+1] 2986 //line go.y:1812 2987 { 2988 var l *NodeList 2989 2990 yyDollar[1].node.Name.Defn = yyDollar[4].node 2991 l = list1(yyDollar[1].node) 2992 if yyDollar[4].node != nil { 2993 l = list(l, yyDollar[4].node) 2994 } 2995 yyVAL.node = liststmt(l) 2996 } 2997 case 263: 2998 yyDollar = yyS[yypt-1 : yypt+1] 2999 //line go.y:1823 3000 { 3001 // will be converted to OFALL 3002 yyVAL.node = Nod(OXFALL, nil, nil) 3003 yyVAL.node.Xoffset = int64(block) 3004 } 3005 case 264: 3006 yyDollar = yyS[yypt-2 : yypt+1] 3007 //line go.y:1829 3008 { 3009 yyVAL.node = Nod(OBREAK, yyDollar[2].node, nil) 3010 } 3011 case 265: 3012 yyDollar = yyS[yypt-2 : yypt+1] 3013 //line go.y:1833 3014 { 3015 yyVAL.node = Nod(OCONTINUE, yyDollar[2].node, nil) 3016 } 3017 case 266: 3018 yyDollar = yyS[yypt-2 : yypt+1] 3019 //line go.y:1837 3020 { 3021 yyVAL.node = Nod(OPROC, yyDollar[2].node, nil) 3022 } 3023 case 267: 3024 yyDollar = yyS[yypt-2 : yypt+1] 3025 //line go.y:1841 3026 { 3027 yyVAL.node = Nod(ODEFER, yyDollar[2].node, nil) 3028 } 3029 case 268: 3030 yyDollar = yyS[yypt-2 : yypt+1] 3031 //line go.y:1845 3032 { 3033 yyVAL.node = Nod(OGOTO, yyDollar[2].node, nil) 3034 yyVAL.node.Sym = dclstack // context, for goto restrictions 3035 } 3036 case 269: 3037 yyDollar = yyS[yypt-2 : yypt+1] 3038 //line go.y:1850 3039 { 3040 yyVAL.node = Nod(ORETURN, nil, nil) 3041 yyVAL.node.List = yyDollar[2].list 3042 if yyVAL.node.List == nil && Curfn != nil { 3043 var l *NodeList 3044 3045 for l = Curfn.Func.Dcl; l != nil; l = l.Next { 3046 if l.N.Class == PPARAM { 3047 continue 3048 } 3049 if l.N.Class != PPARAMOUT { 3050 break 3051 } 3052 if l.N.Sym.Def != l.N { 3053 Yyerror("%s is shadowed during return", l.N.Sym.Name) 3054 } 3055 } 3056 } 3057 } 3058 case 270: 3059 yyDollar = yyS[yypt-1 : yypt+1] 3060 //line go.y:1872 3061 { 3062 yyVAL.list = nil 3063 if yyDollar[1].node != nil { 3064 yyVAL.list = list1(yyDollar[1].node) 3065 } 3066 } 3067 case 271: 3068 yyDollar = yyS[yypt-3 : yypt+1] 3069 //line go.y:1879 3070 { 3071 yyVAL.list = yyDollar[1].list 3072 if yyDollar[3].node != nil { 3073 yyVAL.list = list(yyVAL.list, yyDollar[3].node) 3074 } 3075 } 3076 case 272: 3077 yyDollar = yyS[yypt-1 : yypt+1] 3078 //line go.y:1888 3079 { 3080 yyVAL.list = list1(yyDollar[1].node) 3081 } 3082 case 273: 3083 yyDollar = yyS[yypt-3 : yypt+1] 3084 //line go.y:1892 3085 { 3086 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3087 } 3088 case 274: 3089 yyDollar = yyS[yypt-1 : yypt+1] 3090 //line go.y:1898 3091 { 3092 yyVAL.list = list1(yyDollar[1].node) 3093 } 3094 case 275: 3095 yyDollar = yyS[yypt-3 : yypt+1] 3096 //line go.y:1902 3097 { 3098 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3099 } 3100 case 276: 3101 yyDollar = yyS[yypt-1 : yypt+1] 3102 //line go.y:1908 3103 { 3104 yyVAL.list = list1(yyDollar[1].node) 3105 } 3106 case 277: 3107 yyDollar = yyS[yypt-3 : yypt+1] 3108 //line go.y:1912 3109 { 3110 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3111 } 3112 case 278: 3113 yyDollar = yyS[yypt-1 : yypt+1] 3114 //line go.y:1918 3115 { 3116 yyVAL.list = list1(yyDollar[1].node) 3117 } 3118 case 279: 3119 yyDollar = yyS[yypt-3 : yypt+1] 3120 //line go.y:1922 3121 { 3122 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3123 } 3124 case 280: 3125 yyDollar = yyS[yypt-1 : yypt+1] 3126 //line go.y:1931 3127 { 3128 yyVAL.list = list1(yyDollar[1].node) 3129 } 3130 case 281: 3131 yyDollar = yyS[yypt-1 : yypt+1] 3132 //line go.y:1935 3133 { 3134 yyVAL.list = list1(yyDollar[1].node) 3135 } 3136 case 282: 3137 yyDollar = yyS[yypt-3 : yypt+1] 3138 //line go.y:1939 3139 { 3140 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3141 } 3142 case 283: 3143 yyDollar = yyS[yypt-3 : yypt+1] 3144 //line go.y:1943 3145 { 3146 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3147 } 3148 case 284: 3149 yyDollar = yyS[yypt-0 : yypt+1] 3150 //line go.y:1948 3151 { 3152 yyVAL.list = nil 3153 } 3154 case 285: 3155 yyDollar = yyS[yypt-2 : yypt+1] 3156 //line go.y:1952 3157 { 3158 yyVAL.list = yyDollar[1].list 3159 } 3160 case 290: 3161 yyDollar = yyS[yypt-0 : yypt+1] 3162 //line go.y:1966 3163 { 3164 yyVAL.node = nil 3165 } 3166 case 292: 3167 yyDollar = yyS[yypt-0 : yypt+1] 3168 //line go.y:1972 3169 { 3170 yyVAL.list = nil 3171 } 3172 case 294: 3173 yyDollar = yyS[yypt-0 : yypt+1] 3174 //line go.y:1978 3175 { 3176 yyVAL.node = nil 3177 } 3178 case 296: 3179 yyDollar = yyS[yypt-0 : yypt+1] 3180 //line go.y:1984 3181 { 3182 yyVAL.list = nil 3183 } 3184 case 298: 3185 yyDollar = yyS[yypt-0 : yypt+1] 3186 //line go.y:1990 3187 { 3188 yyVAL.list = nil 3189 } 3190 case 300: 3191 yyDollar = yyS[yypt-0 : yypt+1] 3192 //line go.y:1996 3193 { 3194 yyVAL.list = nil 3195 } 3196 case 302: 3197 yyDollar = yyS[yypt-0 : yypt+1] 3198 //line go.y:2002 3199 { 3200 yyVAL.val.U = nil 3201 } 3202 case 304: 3203 yyDollar = yyS[yypt-4 : yypt+1] 3204 //line go.y:2012 3205 { 3206 importimport(yyDollar[2].sym, yyDollar[3].val.U.(string)) 3207 } 3208 case 305: 3209 yyDollar = yyS[yypt-4 : yypt+1] 3210 //line go.y:2016 3211 { 3212 importvar(yyDollar[2].sym, yyDollar[3].typ) 3213 } 3214 case 306: 3215 yyDollar = yyS[yypt-5 : yypt+1] 3216 //line go.y:2020 3217 { 3218 importconst(yyDollar[2].sym, Types[TIDEAL], yyDollar[4].node) 3219 } 3220 case 307: 3221 yyDollar = yyS[yypt-6 : yypt+1] 3222 //line go.y:2024 3223 { 3224 importconst(yyDollar[2].sym, yyDollar[3].typ, yyDollar[5].node) 3225 } 3226 case 308: 3227 yyDollar = yyS[yypt-4 : yypt+1] 3228 //line go.y:2028 3229 { 3230 importtype(yyDollar[2].typ, yyDollar[3].typ) 3231 } 3232 case 309: 3233 yyDollar = yyS[yypt-4 : yypt+1] 3234 //line go.y:2032 3235 { 3236 if yyDollar[2].node == nil { 3237 dclcontext = PEXTERN // since we skip the funcbody below 3238 break 3239 } 3240 3241 yyDollar[2].node.Func.Inl = yyDollar[3].list 3242 3243 funcbody(yyDollar[2].node) 3244 importlist = append(importlist, yyDollar[2].node) 3245 3246 if Debug['E'] > 0 { 3247 fmt.Printf("import [%q] func %v \n", importpkg.Path, yyDollar[2].node) 3248 if Debug['m'] > 2 && yyDollar[2].node.Func.Inl != nil { 3249 fmt.Printf("inl body:%v\n", yyDollar[2].node.Func.Inl) 3250 } 3251 } 3252 } 3253 case 310: 3254 yyDollar = yyS[yypt-1 : yypt+1] 3255 //line go.y:2053 3256 { 3257 yyVAL.sym = yyDollar[1].sym 3258 structpkg = yyVAL.sym.Pkg 3259 } 3260 case 311: 3261 yyDollar = yyS[yypt-1 : yypt+1] 3262 //line go.y:2060 3263 { 3264 yyVAL.typ = pkgtype(yyDollar[1].sym) 3265 importsym(yyDollar[1].sym, OTYPE) 3266 } 3267 case 317: 3268 yyDollar = yyS[yypt-1 : yypt+1] 3269 //line go.y:2080 3270 { 3271 yyVAL.typ = pkgtype(yyDollar[1].sym) 3272 } 3273 case 318: 3274 yyDollar = yyS[yypt-1 : yypt+1] 3275 //line go.y:2084 3276 { 3277 // predefined name like uint8 3278 yyDollar[1].sym = Pkglookup(yyDollar[1].sym.Name, builtinpkg) 3279 if yyDollar[1].sym.Def == nil || yyDollar[1].sym.Def.Op != OTYPE { 3280 Yyerror("%s is not a type", yyDollar[1].sym.Name) 3281 yyVAL.typ = nil 3282 } else { 3283 yyVAL.typ = yyDollar[1].sym.Def.Type 3284 } 3285 } 3286 case 319: 3287 yyDollar = yyS[yypt-3 : yypt+1] 3288 //line go.y:2095 3289 { 3290 yyVAL.typ = aindex(nil, yyDollar[3].typ) 3291 } 3292 case 320: 3293 yyDollar = yyS[yypt-4 : yypt+1] 3294 //line go.y:2099 3295 { 3296 yyVAL.typ = aindex(nodlit(yyDollar[2].val), yyDollar[4].typ) 3297 } 3298 case 321: 3299 yyDollar = yyS[yypt-5 : yypt+1] 3300 //line go.y:2103 3301 { 3302 yyVAL.typ = maptype(yyDollar[3].typ, yyDollar[5].typ) 3303 } 3304 case 322: 3305 yyDollar = yyS[yypt-4 : yypt+1] 3306 //line go.y:2107 3307 { 3308 yyVAL.typ = tostruct(yyDollar[3].list) 3309 } 3310 case 323: 3311 yyDollar = yyS[yypt-4 : yypt+1] 3312 //line go.y:2111 3313 { 3314 yyVAL.typ = tointerface(yyDollar[3].list) 3315 } 3316 case 324: 3317 yyDollar = yyS[yypt-2 : yypt+1] 3318 //line go.y:2115 3319 { 3320 yyVAL.typ = Ptrto(yyDollar[2].typ) 3321 } 3322 case 325: 3323 yyDollar = yyS[yypt-2 : yypt+1] 3324 //line go.y:2119 3325 { 3326 yyVAL.typ = typ(TCHAN) 3327 yyVAL.typ.Type = yyDollar[2].typ 3328 yyVAL.typ.Chan = Cboth 3329 } 3330 case 326: 3331 yyDollar = yyS[yypt-4 : yypt+1] 3332 //line go.y:2125 3333 { 3334 yyVAL.typ = typ(TCHAN) 3335 yyVAL.typ.Type = yyDollar[3].typ 3336 yyVAL.typ.Chan = Cboth 3337 } 3338 case 327: 3339 yyDollar = yyS[yypt-3 : yypt+1] 3340 //line go.y:2131 3341 { 3342 yyVAL.typ = typ(TCHAN) 3343 yyVAL.typ.Type = yyDollar[3].typ 3344 yyVAL.typ.Chan = Csend 3345 } 3346 case 328: 3347 yyDollar = yyS[yypt-3 : yypt+1] 3348 //line go.y:2139 3349 { 3350 yyVAL.typ = typ(TCHAN) 3351 yyVAL.typ.Type = yyDollar[3].typ 3352 yyVAL.typ.Chan = Crecv 3353 } 3354 case 329: 3355 yyDollar = yyS[yypt-5 : yypt+1] 3356 //line go.y:2147 3357 { 3358 yyVAL.typ = functype(nil, yyDollar[3].list, yyDollar[5].list) 3359 } 3360 case 330: 3361 yyDollar = yyS[yypt-3 : yypt+1] 3362 //line go.y:2153 3363 { 3364 yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[2].typ)) 3365 if yyDollar[1].sym != nil { 3366 yyVAL.node.Left = newname(yyDollar[1].sym) 3367 } 3368 yyVAL.node.SetVal(yyDollar[3].val) 3369 } 3370 case 331: 3371 yyDollar = yyS[yypt-4 : yypt+1] 3372 //line go.y:2161 3373 { 3374 var t *Type 3375 3376 t = typ(TARRAY) 3377 t.Bound = -1 3378 t.Type = yyDollar[3].typ 3379 3380 yyVAL.node = Nod(ODCLFIELD, nil, typenod(t)) 3381 if yyDollar[1].sym != nil { 3382 yyVAL.node.Left = newname(yyDollar[1].sym) 3383 } 3384 yyVAL.node.Isddd = true 3385 yyVAL.node.SetVal(yyDollar[4].val) 3386 } 3387 case 332: 3388 yyDollar = yyS[yypt-3 : yypt+1] 3389 //line go.y:2178 3390 { 3391 var s *Sym 3392 var p *Pkg 3393 3394 if yyDollar[1].sym != nil && yyDollar[1].sym.Name != "?" { 3395 yyVAL.node = Nod(ODCLFIELD, newname(yyDollar[1].sym), typenod(yyDollar[2].typ)) 3396 yyVAL.node.SetVal(yyDollar[3].val) 3397 } else { 3398 s = yyDollar[2].typ.Sym 3399 if s == nil && Isptr[yyDollar[2].typ.Etype] { 3400 s = yyDollar[2].typ.Type.Sym 3401 } 3402 p = importpkg 3403 if yyDollar[1].sym != nil { 3404 p = yyDollar[1].sym.Pkg 3405 } 3406 yyVAL.node = embedded(s, p) 3407 yyVAL.node.Right = typenod(yyDollar[2].typ) 3408 yyVAL.node.SetVal(yyDollar[3].val) 3409 } 3410 } 3411 case 333: 3412 yyDollar = yyS[yypt-5 : yypt+1] 3413 //line go.y:2202 3414 { 3415 yyVAL.node = Nod(ODCLFIELD, newname(yyDollar[1].sym), typenod(functype(fakethis(), yyDollar[3].list, yyDollar[5].list))) 3416 } 3417 case 334: 3418 yyDollar = yyS[yypt-1 : yypt+1] 3419 //line go.y:2206 3420 { 3421 yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ)) 3422 } 3423 case 335: 3424 yyDollar = yyS[yypt-0 : yypt+1] 3425 //line go.y:2211 3426 { 3427 yyVAL.list = nil 3428 } 3429 case 337: 3430 yyDollar = yyS[yypt-3 : yypt+1] 3431 //line go.y:2218 3432 { 3433 yyVAL.list = yyDollar[2].list 3434 } 3435 case 338: 3436 yyDollar = yyS[yypt-1 : yypt+1] 3437 //line go.y:2222 3438 { 3439 yyVAL.list = list1(Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ))) 3440 } 3441 case 339: 3442 yyDollar = yyS[yypt-1 : yypt+1] 3443 //line go.y:2232 3444 { 3445 yyVAL.node = nodlit(yyDollar[1].val) 3446 } 3447 case 340: 3448 yyDollar = yyS[yypt-2 : yypt+1] 3449 //line go.y:2236 3450 { 3451 yyVAL.node = nodlit(yyDollar[2].val) 3452 switch yyVAL.node.Val().Ctype() { 3453 case CTINT, CTRUNE: 3454 mpnegfix(yyVAL.node.Val().U.(*Mpint)) 3455 break 3456 case CTFLT: 3457 mpnegflt(yyVAL.node.Val().U.(*Mpflt)) 3458 break 3459 case CTCPLX: 3460 mpnegflt(&yyVAL.node.Val().U.(*Mpcplx).Real) 3461 mpnegflt(&yyVAL.node.Val().U.(*Mpcplx).Imag) 3462 break 3463 default: 3464 Yyerror("bad negated constant") 3465 } 3466 } 3467 case 341: 3468 yyDollar = yyS[yypt-1 : yypt+1] 3469 //line go.y:2254 3470 { 3471 yyVAL.node = oldname(Pkglookup(yyDollar[1].sym.Name, builtinpkg)) 3472 if yyVAL.node.Op != OLITERAL { 3473 Yyerror("bad constant %v", yyVAL.node.Sym) 3474 } 3475 } 3476 case 343: 3477 yyDollar = yyS[yypt-5 : yypt+1] 3478 //line go.y:2264 3479 { 3480 if yyDollar[2].node.Val().Ctype() == CTRUNE && yyDollar[4].node.Val().Ctype() == CTINT { 3481 yyVAL.node = yyDollar[2].node 3482 mpaddfixfix(yyDollar[2].node.Val().U.(*Mpint), yyDollar[4].node.Val().U.(*Mpint), 0) 3483 break 3484 } 3485 yyDollar[4].node.Val().U.(*Mpcplx).Real = yyDollar[4].node.Val().U.(*Mpcplx).Imag 3486 Mpmovecflt(&yyDollar[4].node.Val().U.(*Mpcplx).Imag, 0.0) 3487 yyVAL.node = nodcplxlit(yyDollar[2].node.Val(), yyDollar[4].node.Val()) 3488 } 3489 case 346: 3490 yyDollar = yyS[yypt-1 : yypt+1] 3491 //line go.y:2280 3492 { 3493 yyVAL.list = list1(yyDollar[1].node) 3494 } 3495 case 347: 3496 yyDollar = yyS[yypt-3 : yypt+1] 3497 //line go.y:2284 3498 { 3499 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3500 } 3501 case 348: 3502 yyDollar = yyS[yypt-1 : yypt+1] 3503 //line go.y:2290 3504 { 3505 yyVAL.list = list1(yyDollar[1].node) 3506 } 3507 case 349: 3508 yyDollar = yyS[yypt-3 : yypt+1] 3509 //line go.y:2294 3510 { 3511 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3512 } 3513 case 350: 3514 yyDollar = yyS[yypt-1 : yypt+1] 3515 //line go.y:2300 3516 { 3517 yyVAL.list = list1(yyDollar[1].node) 3518 } 3519 case 351: 3520 yyDollar = yyS[yypt-3 : yypt+1] 3521 //line go.y:2304 3522 { 3523 yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) 3524 } 3525 } 3526 goto yystack /* stack new state and value */ 3527 }