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