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