github.com/xmx/lua@v0.0.0-20230324063450-8a298e091302/parse/parser.go (about) 1 // Code generated by goyacc -o parser.go parser.go.y. DO NOT EDIT. 2 3 //line parser.go.y:2 4 package parse 5 6 import __yyfmt__ "fmt" 7 8 //line parser.go.y:2 9 10 import ( 11 "github.com/xmx/lua/ast" 12 ) 13 14 //line parser.go.y:34 15 type yySymType struct { 16 yys int 17 token ast.Token 18 19 stmts []ast.Stmt 20 stmt ast.Stmt 21 22 funcname *ast.FuncName 23 funcexpr *ast.FunctionExpr 24 25 exprlist []ast.Expr 26 expr ast.Expr 27 28 fieldlist []*ast.Field 29 field *ast.Field 30 fieldsep string 31 32 namelist []string 33 parlist *ast.ParList 34 } 35 36 const ( 37 TAnd = 57346 38 TBreak = 57347 39 TDo = 57348 40 TElse = 57349 41 TElseIf = 57350 42 TEnd = 57351 43 TFalse = 57352 44 TFor = 57353 45 TFunction = 57354 46 TIf = 57355 47 TIn = 57356 48 TLocal = 57357 49 TNil = 57358 50 TNot = 57359 51 TOr = 57360 52 TReturn = 57361 53 TRepeat = 57362 54 TThen = 57363 55 TTrue = 57364 56 TUntil = 57365 57 TWhile = 57366 58 TGoto = 57367 59 TEqeq = 57368 60 TNeq = 57369 61 TLte = 57370 62 TGte = 57371 63 T2Comma = 57372 64 T3Comma = 57373 65 T2Colon = 57374 66 TIdent = 57375 67 TNumber = 57376 68 TString = 57377 69 UNARY = 57378 70 ) 71 72 var yyToknames = [...]string{ 73 "$end", 74 "error", 75 "$unk", 76 "TAnd", 77 "TBreak", 78 "TDo", 79 "TElse", 80 "TElseIf", 81 "TEnd", 82 "TFalse", 83 "TFor", 84 "TFunction", 85 "TIf", 86 "TIn", 87 "TLocal", 88 "TNil", 89 "TNot", 90 "TOr", 91 "TReturn", 92 "TRepeat", 93 "TThen", 94 "TTrue", 95 "TUntil", 96 "TWhile", 97 "TGoto", 98 "TEqeq", 99 "TNeq", 100 "TLte", 101 "TGte", 102 "T2Comma", 103 "T3Comma", 104 "T2Colon", 105 "TIdent", 106 "TNumber", 107 "TString", 108 "'{'", 109 "'('", 110 "'>'", 111 "'<'", 112 "'+'", 113 "'-'", 114 "'*'", 115 "'/'", 116 "'%'", 117 "UNARY", 118 "'^'", 119 "';'", 120 "'='", 121 "','", 122 "':'", 123 "'.'", 124 "'['", 125 "']'", 126 "'#'", 127 "')'", 128 "'}'", 129 } 130 131 var yyStatenames = [...]string{} 132 133 const ( 134 yyEofCode = 1 135 yyErrCode = 2 136 yyInitialStackSize = 16 137 ) 138 139 //line parser.go.y:525 140 141 func TokenName(c int) string { 142 if c >= TAnd && c-TAnd < len(yyToknames) { 143 if yyToknames[c-TAnd] != "" { 144 return yyToknames[c-TAnd] 145 } 146 } 147 return string([]byte{byte(c)}) 148 } 149 150 //line yacctab:1 151 var yyExca = [...]int8{ 152 -1, 1, 153 1, -1, 154 -2, 0, 155 -1, 19, 156 48, 33, 157 49, 33, 158 -2, 70, 159 -1, 97, 160 48, 34, 161 49, 34, 162 -2, 70, 163 } 164 165 const yyPrivate = 57344 166 167 const yyLast = 616 168 169 var yyAct = [...]uint8{ 170 26, 92, 52, 25, 47, 88, 158, 58, 142, 118, 171 141, 167, 54, 69, 56, 55, 35, 139, 41, 42, 172 49, 160, 34, 67, 63, 137, 50, 64, 112, 113, 173 69, 109, 51, 48, 46, 45, 147, 85, 86, 87, 174 115, 110, 24, 95, 43, 44, 99, 96, 78, 136, 175 50, 171, 143, 103, 69, 108, 51, 84, 79, 80, 176 81, 82, 83, 89, 84, 111, 110, 41, 42, 49, 177 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 178 129, 130, 131, 132, 133, 134, 81, 82, 83, 170, 179 84, 153, 155, 33, 154, 144, 9, 138, 40, 23, 180 153, 19, 62, 22, 114, 101, 146, 149, 148, 151, 181 150, 71, 100, 152, 66, 50, 65, 61, 50, 157, 182 156, 51, 57, 64, 51, 70, 116, 106, 192, 21, 183 173, 174, 172, 76, 77, 75, 74, 78, 98, 159, 184 189, 95, 161, 97, 162, 72, 73, 79, 80, 81, 185 82, 83, 68, 84, 184, 183, 177, 169, 164, 104, 186 140, 168, 117, 53, 1, 91, 135, 175, 32, 20, 187 176, 8, 178, 60, 59, 180, 179, 3, 165, 28, 188 4, 39, 2, 187, 186, 27, 37, 0, 188, 0, 189 0, 29, 0, 191, 71, 0, 0, 0, 0, 0, 190 31, 0, 93, 30, 41, 42, 22, 0, 70, 0, 191 36, 0, 0, 0, 0, 0, 76, 77, 75, 74, 192 78, 94, 0, 38, 71, 90, 0, 0, 72, 73, 193 79, 80, 81, 82, 83, 0, 84, 0, 70, 0, 194 0, 0, 0, 163, 0, 0, 76, 77, 75, 74, 195 78, 0, 0, 0, 0, 0, 0, 0, 72, 73, 196 79, 80, 81, 82, 83, 28, 84, 39, 0, 0, 197 0, 27, 37, 145, 0, 0, 0, 29, 0, 0, 198 0, 0, 0, 0, 0, 0, 31, 0, 23, 30, 199 41, 42, 22, 28, 0, 39, 36, 0, 0, 27, 200 37, 0, 0, 0, 0, 29, 0, 0, 0, 38, 201 102, 0, 0, 0, 31, 0, 93, 30, 41, 42, 202 22, 28, 0, 39, 36, 0, 0, 27, 37, 0, 203 0, 0, 0, 29, 0, 94, 71, 38, 181, 0, 204 0, 0, 31, 0, 23, 30, 41, 42, 22, 0, 205 70, 0, 36, 0, 0, 0, 0, 0, 76, 77, 206 75, 74, 78, 71, 0, 38, 0, 0, 0, 0, 207 72, 73, 79, 80, 81, 82, 83, 70, 84, 0, 208 0, 182, 0, 0, 0, 76, 77, 75, 74, 78, 209 71, 0, 190, 0, 0, 0, 0, 72, 73, 79, 210 80, 81, 82, 83, 70, 84, 0, 0, 166, 0, 211 0, 0, 76, 77, 75, 74, 78, 71, 0, 0, 212 0, 0, 0, 0, 72, 73, 79, 80, 81, 82, 213 83, 70, 84, 0, 185, 0, 0, 0, 0, 76, 214 77, 75, 74, 78, 71, 0, 0, 0, 0, 0, 215 0, 72, 73, 79, 80, 81, 82, 83, 70, 84, 216 0, 107, 0, 0, 0, 0, 76, 77, 75, 74, 217 78, 71, 0, 105, 0, 0, 0, 0, 72, 73, 218 79, 80, 81, 82, 83, 70, 84, 0, 0, 0, 219 0, 0, 0, 76, 77, 75, 74, 78, 71, 0, 220 0, 0, 0, 0, 0, 72, 73, 79, 80, 81, 221 82, 83, 70, 84, 0, 0, 0, 0, 0, 0, 222 76, 77, 75, 74, 78, 0, 0, 0, 0, 0, 223 0, 0, 72, 73, 79, 80, 81, 82, 83, 0, 224 84, 7, 10, 0, 0, 0, 0, 14, 15, 13, 225 0, 16, 71, 0, 0, 6, 12, 0, 0, 0, 226 11, 18, 0, 0, 0, 0, 0, 0, 17, 23, 227 0, 0, 0, 22, 76, 77, 75, 74, 78, 0, 228 0, 0, 0, 5, 0, 0, 72, 73, 79, 80, 229 81, 82, 83, 0, 84, 76, 77, 75, 74, 78, 230 0, 0, 0, 0, 0, 0, 0, 72, 73, 79, 231 80, 81, 82, 83, 0, 84, 232 } 233 234 var yyPact = [...]int16{ 235 -1000, -1000, 536, -5, -1000, -1000, 311, -1000, -4, -17, 236 -1000, 311, -1000, 311, 89, 84, 90, 83, 81, -1000, 237 -1000, -1000, 311, -1000, -1000, -36, 494, -1000, -1000, -1000, 238 -1000, -1000, -1000, -17, -1000, -1000, 311, 311, 311, 26, 239 -1000, -1000, 169, 311, 66, 311, 79, -1000, 72, 255, 240 -1000, -1000, 150, -1000, 467, 104, 440, 7, 17, 26, 241 -22, -1000, 71, -8, -1000, 94, -1000, 107, -46, 311, 242 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 243 311, 311, 311, 311, 311, 11, 11, 11, -1000, -6, 244 -1000, -39, -1000, 4, 311, 494, -36, -1000, -17, 220, 245 -1000, 32, -1000, -19, -1000, -1000, 311, -1000, 311, 311, 246 67, -1000, 61, 59, 26, 311, -1000, -1000, -1000, 494, 247 548, 569, 18, 18, 18, 18, 18, 18, 18, 44, 248 44, 11, 11, 11, 11, -49, -1000, -1000, -28, -1000, 249 283, -1000, -1000, 311, 190, -1000, -1000, -1000, 149, 494, 250 -1000, 359, 5, -1000, -1000, -1000, -1000, -36, -1000, 148, 251 58, -1000, 494, 3, -1000, 123, 311, -1000, 147, -1000, 252 -1000, 311, -1000, -1000, 311, 332, 146, -1000, 494, 145, 253 413, -1000, 311, -1000, -1000, -1000, 131, 386, -1000, -1000, 254 -1000, 119, -1000, 255 } 256 257 var yyPgo = [...]uint8{ 258 0, 163, 182, 2, 180, 178, 177, 174, 173, 171, 259 98, 7, 3, 0, 22, 93, 129, 169, 4, 168, 260 5, 166, 16, 165, 1, 160, 261 } 262 263 var yyR1 = [...]int8{ 264 0, 1, 1, 1, 2, 2, 2, 3, 4, 4, 265 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 266 4, 4, 4, 4, 5, 5, 6, 6, 6, 7, 267 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 268 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 269 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 270 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 271 15, 15, 15, 15, 17, 16, 16, 18, 18, 18, 272 18, 19, 20, 20, 21, 21, 21, 22, 22, 23, 273 23, 23, 24, 24, 24, 25, 25, 274 } 275 276 var yyR2 = [...]int8{ 277 0, 1, 2, 3, 0, 2, 2, 1, 3, 1, 278 3, 5, 4, 6, 8, 9, 11, 7, 3, 4, 279 4, 2, 3, 2, 0, 5, 1, 2, 1, 1, 280 3, 1, 3, 1, 3, 1, 4, 3, 1, 3, 281 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 282 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 283 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 284 1, 1, 1, 3, 3, 2, 4, 2, 3, 1, 285 1, 2, 5, 4, 1, 1, 3, 2, 3, 1, 286 3, 2, 3, 5, 1, 1, 1, 287 } 288 289 var yyChk = [...]int16{ 290 -1000, -1, -2, -6, -4, 47, 19, 5, -9, -15, 291 6, 24, 20, 13, 11, 12, 15, 32, 25, -10, 292 -17, -16, 37, 33, 47, -12, -13, 16, 10, 22, 293 34, 31, -19, -15, -14, -22, 41, 17, 54, 12, 294 -10, 35, 36, 48, 49, 52, 51, -18, 50, 37, 295 -22, -14, -3, -1, -13, -3, -13, 33, -11, -7, 296 -8, 33, 12, -11, 33, 33, 33, -13, -16, 49, 297 18, 4, 38, 39, 29, 28, 26, 27, 30, 40, 298 41, 42, 43, 44, 46, -13, -13, -13, -20, 37, 299 56, -23, -24, 33, 52, -13, -12, -10, -15, -13, 300 33, 33, 55, -12, 9, 6, 23, 21, 48, 14, 301 49, -20, 50, 51, 33, 48, 32, 55, 55, -13, 302 -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, 303 -13, -13, -13, -13, -13, -21, 55, 31, -11, 56, 304 -25, 49, 47, 48, -13, 53, -18, 55, -3, -13, 305 -3, -13, -12, 33, 33, 33, -20, -12, 55, -3, 306 49, -24, -13, 53, 9, -5, 49, 6, -3, 9, 307 31, 48, 9, 7, 8, -13, -3, 9, -13, -3, 308 -13, 6, 49, 9, 9, 21, -3, -13, -3, 9, 309 6, -3, 9, 310 } 311 312 var yyDef = [...]int8{ 313 4, -2, 1, 2, 5, 6, 26, 28, 0, 9, 314 4, 0, 4, 0, 0, 0, 0, 0, 0, -2, 315 71, 72, 0, 35, 3, 27, 40, 42, 43, 44, 316 45, 46, 47, 48, 49, 50, 0, 0, 0, 0, 317 70, 69, 0, 0, 0, 0, 0, 75, 0, 0, 318 79, 80, 0, 7, 0, 0, 0, 38, 0, 0, 319 29, 31, 0, 21, 38, 0, 23, 0, 72, 0, 320 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321 0, 0, 0, 0, 0, 66, 67, 68, 81, 0, 322 87, 0, 89, 35, 0, 94, 8, -2, 0, 0, 323 37, 0, 77, 0, 10, 4, 0, 4, 0, 0, 324 0, 18, 0, 0, 0, 0, 22, 73, 74, 41, 325 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 326 61, 62, 63, 64, 65, 0, 4, 84, 85, 88, 327 91, 95, 96, 0, 0, 36, 76, 78, 0, 12, 328 24, 0, 0, 39, 30, 32, 19, 20, 4, 0, 329 0, 90, 92, 0, 11, 0, 0, 4, 0, 83, 330 86, 0, 13, 4, 0, 0, 0, 82, 93, 0, 331 0, 4, 0, 17, 14, 4, 0, 0, 25, 15, 332 4, 0, 16, 333 } 334 335 var yyTok1 = [...]int8{ 336 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 337 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 338 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 339 3, 3, 3, 3, 3, 54, 3, 44, 3, 3, 340 37, 55, 42, 40, 49, 41, 51, 43, 3, 3, 341 3, 3, 3, 3, 3, 3, 3, 3, 50, 47, 342 39, 48, 38, 3, 3, 3, 3, 3, 3, 3, 343 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 344 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 345 3, 52, 3, 53, 46, 3, 3, 3, 3, 3, 346 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 347 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 348 3, 3, 3, 36, 3, 56, 349 } 350 351 var yyTok2 = [...]int8{ 352 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 353 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 354 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 355 32, 33, 34, 35, 45, 356 } 357 358 var yyTok3 = [...]int8{ 359 0, 360 } 361 362 var yyErrorMessages = [...]struct { 363 state int 364 token int 365 msg string 366 }{} 367 368 //line yaccpar:1 369 370 /* parser for yacc output */ 371 372 var ( 373 yyDebug = 0 374 yyErrorVerbose = false 375 ) 376 377 type yyLexer interface { 378 Lex(lval *yySymType) int 379 Error(s string) 380 } 381 382 type yyParser interface { 383 Parse(yyLexer) int 384 Lookahead() int 385 } 386 387 type yyParserImpl struct { 388 lval yySymType 389 stack [yyInitialStackSize]yySymType 390 char int 391 } 392 393 func (p *yyParserImpl) Lookahead() int { 394 return p.char 395 } 396 397 func yyNewParser() yyParser { 398 return &yyParserImpl{} 399 } 400 401 const yyFlag = -1000 402 403 func yyTokname(c int) string { 404 if c >= 1 && c-1 < len(yyToknames) { 405 if yyToknames[c-1] != "" { 406 return yyToknames[c-1] 407 } 408 } 409 return __yyfmt__.Sprintf("tok-%v", c) 410 } 411 412 func yyStatname(s int) string { 413 if s >= 0 && s < len(yyStatenames) { 414 if yyStatenames[s] != "" { 415 return yyStatenames[s] 416 } 417 } 418 return __yyfmt__.Sprintf("state-%v", s) 419 } 420 421 func yyErrorMessage(state, lookAhead int) string { 422 const TOKSTART = 4 423 424 if !yyErrorVerbose { 425 return "syntax error" 426 } 427 428 for _, e := range yyErrorMessages { 429 if e.state == state && e.token == lookAhead { 430 return "syntax error: " + e.msg 431 } 432 } 433 434 res := "syntax error: unexpected " + yyTokname(lookAhead) 435 436 // To match Bison, suggest at most four expected tokens. 437 expected := make([]int, 0, 4) 438 439 // Look for shiftable tokens. 440 base := int(yyPact[state]) 441 for tok := TOKSTART; tok-1 < len(yyToknames); tok++ { 442 if n := base + tok; n >= 0 && n < yyLast && int(yyChk[int(yyAct[n])]) == tok { 443 if len(expected) == cap(expected) { 444 return res 445 } 446 expected = append(expected, tok) 447 } 448 } 449 450 if yyDef[state] == -2 { 451 i := 0 452 for yyExca[i] != -1 || int(yyExca[i+1]) != state { 453 i += 2 454 } 455 456 // Look for tokens that we accept or reduce. 457 for i += 2; yyExca[i] >= 0; i += 2 { 458 tok := int(yyExca[i]) 459 if tok < TOKSTART || yyExca[i+1] == 0 { 460 continue 461 } 462 if len(expected) == cap(expected) { 463 return res 464 } 465 expected = append(expected, tok) 466 } 467 468 // If the default action is to accept or reduce, give up. 469 if yyExca[i+1] != 0 { 470 return res 471 } 472 } 473 474 for i, tok := range expected { 475 if i == 0 { 476 res += ", expecting " 477 } else { 478 res += " or " 479 } 480 res += yyTokname(tok) 481 } 482 return res 483 } 484 485 func yylex1(lex yyLexer, lval *yySymType) (char, token int) { 486 token = 0 487 char = lex.Lex(lval) 488 if char <= 0 { 489 token = int(yyTok1[0]) 490 goto out 491 } 492 if char < len(yyTok1) { 493 token = int(yyTok1[char]) 494 goto out 495 } 496 if char >= yyPrivate { 497 if char < yyPrivate+len(yyTok2) { 498 token = int(yyTok2[char-yyPrivate]) 499 goto out 500 } 501 } 502 for i := 0; i < len(yyTok3); i += 2 { 503 token = int(yyTok3[i+0]) 504 if token == char { 505 token = int(yyTok3[i+1]) 506 goto out 507 } 508 } 509 510 out: 511 if token == 0 { 512 token = int(yyTok2[1]) /* unknown char */ 513 } 514 if yyDebug >= 3 { 515 __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char)) 516 } 517 return char, token 518 } 519 520 func yyParse(yylex yyLexer) int { 521 return yyNewParser().Parse(yylex) 522 } 523 524 func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int { 525 var yyn int 526 var yyVAL yySymType 527 var yyDollar []yySymType 528 _ = yyDollar // silence set and not used 529 yyS := yyrcvr.stack[:] 530 531 Nerrs := 0 /* number of errors */ 532 Errflag := 0 /* error recovery flag */ 533 yystate := 0 534 yyrcvr.char = -1 535 yytoken := -1 // yyrcvr.char translated into internal numbering 536 defer func() { 537 // Make sure we report no lookahead when not parsing. 538 yystate = -1 539 yyrcvr.char = -1 540 yytoken = -1 541 }() 542 yyp := -1 543 goto yystack 544 545 ret0: 546 return 0 547 548 ret1: 549 return 1 550 551 yystack: 552 /* put a state and value onto the stack */ 553 if yyDebug >= 4 { 554 __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate)) 555 } 556 557 yyp++ 558 if yyp >= len(yyS) { 559 nyys := make([]yySymType, len(yyS)*2) 560 copy(nyys, yyS) 561 yyS = nyys 562 } 563 yyS[yyp] = yyVAL 564 yyS[yyp].yys = yystate 565 566 yynewstate: 567 yyn = int(yyPact[yystate]) 568 if yyn <= yyFlag { 569 goto yydefault /* simple state */ 570 } 571 if yyrcvr.char < 0 { 572 yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval) 573 } 574 yyn += yytoken 575 if yyn < 0 || yyn >= yyLast { 576 goto yydefault 577 } 578 yyn = int(yyAct[yyn]) 579 if int(yyChk[yyn]) == yytoken { /* valid shift */ 580 yyrcvr.char = -1 581 yytoken = -1 582 yyVAL = yyrcvr.lval 583 yystate = yyn 584 if Errflag > 0 { 585 Errflag-- 586 } 587 goto yystack 588 } 589 590 yydefault: 591 /* default state action */ 592 yyn = int(yyDef[yystate]) 593 if yyn == -2 { 594 if yyrcvr.char < 0 { 595 yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval) 596 } 597 598 /* look through exception table */ 599 xi := 0 600 for { 601 if yyExca[xi+0] == -1 && int(yyExca[xi+1]) == yystate { 602 break 603 } 604 xi += 2 605 } 606 for xi += 2; ; xi += 2 { 607 yyn = int(yyExca[xi+0]) 608 if yyn < 0 || yyn == yytoken { 609 break 610 } 611 } 612 yyn = int(yyExca[xi+1]) 613 if yyn < 0 { 614 goto ret0 615 } 616 } 617 if yyn == 0 { 618 /* error ... attempt to resume parsing */ 619 switch Errflag { 620 case 0: /* brand new error */ 621 yylex.Error(yyErrorMessage(yystate, yytoken)) 622 Nerrs++ 623 if yyDebug >= 1 { 624 __yyfmt__.Printf("%s", yyStatname(yystate)) 625 __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken)) 626 } 627 fallthrough 628 629 case 1, 2: /* incompletely recovered error ... try again */ 630 Errflag = 3 631 632 /* find a state where "error" is a legal shift action */ 633 for yyp >= 0 { 634 yyn = int(yyPact[yyS[yyp].yys]) + yyErrCode 635 if yyn >= 0 && yyn < yyLast { 636 yystate = int(yyAct[yyn]) /* simulate a shift of "error" */ 637 if int(yyChk[yystate]) == yyErrCode { 638 goto yystack 639 } 640 } 641 642 /* the current p has no shift on "error", pop stack */ 643 if yyDebug >= 2 { 644 __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) 645 } 646 yyp-- 647 } 648 /* there is no state on the stack with an error shift ... abort */ 649 goto ret1 650 651 case 3: /* no shift yet; clobber input char */ 652 if yyDebug >= 2 { 653 __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken)) 654 } 655 if yytoken == yyEofCode { 656 goto ret1 657 } 658 yyrcvr.char = -1 659 yytoken = -1 660 goto yynewstate /* try again in the same state */ 661 } 662 } 663 664 /* reduction by production yyn */ 665 if yyDebug >= 2 { 666 __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate)) 667 } 668 669 yynt := yyn 670 yypt := yyp 671 _ = yypt // guard against "declared and not used" 672 673 yyp -= int(yyR2[yyn]) 674 // yyp is now the index of $0. Perform the default action. Iff the 675 // reduced production is ε, $1 is possibly out of range. 676 if yyp+1 >= len(yyS) { 677 nyys := make([]yySymType, len(yyS)*2) 678 copy(nyys, yyS) 679 yyS = nyys 680 } 681 yyVAL = yyS[yyp+1] 682 683 /* consult goto table to find next state */ 684 yyn = int(yyR1[yyn]) 685 yyg := int(yyPgo[yyn]) 686 yyj := yyg + yyS[yyp].yys + 1 687 688 if yyj >= yyLast { 689 yystate = int(yyAct[yyg]) 690 } else { 691 yystate = int(yyAct[yyj]) 692 if int(yyChk[yystate]) != -yyn { 693 yystate = int(yyAct[yyg]) 694 } 695 } 696 // dummy call; replaced with literal code 697 switch yynt { 698 699 case 1: 700 yyDollar = yyS[yypt-1 : yypt+1] 701 //line parser.go.y:73 702 { 703 yyVAL.stmts = yyDollar[1].stmts 704 if l, ok := yylex.(*Lexer); ok { 705 l.Stmts = yyVAL.stmts 706 } 707 } 708 case 2: 709 yyDollar = yyS[yypt-2 : yypt+1] 710 //line parser.go.y:79 711 { 712 yyVAL.stmts = append(yyDollar[1].stmts, yyDollar[2].stmt) 713 if l, ok := yylex.(*Lexer); ok { 714 l.Stmts = yyVAL.stmts 715 } 716 } 717 case 3: 718 yyDollar = yyS[yypt-3 : yypt+1] 719 //line parser.go.y:85 720 { 721 yyVAL.stmts = append(yyDollar[1].stmts, yyDollar[2].stmt) 722 if l, ok := yylex.(*Lexer); ok { 723 l.Stmts = yyVAL.stmts 724 } 725 } 726 case 4: 727 yyDollar = yyS[yypt-0 : yypt+1] 728 //line parser.go.y:93 729 { 730 yyVAL.stmts = []ast.Stmt{} 731 } 732 case 5: 733 yyDollar = yyS[yypt-2 : yypt+1] 734 //line parser.go.y:96 735 { 736 yyVAL.stmts = append(yyDollar[1].stmts, yyDollar[2].stmt) 737 } 738 case 6: 739 yyDollar = yyS[yypt-2 : yypt+1] 740 //line parser.go.y:99 741 { 742 yyVAL.stmts = yyDollar[1].stmts 743 } 744 case 7: 745 yyDollar = yyS[yypt-1 : yypt+1] 746 //line parser.go.y:104 747 { 748 yyVAL.stmts = yyDollar[1].stmts 749 } 750 case 8: 751 yyDollar = yyS[yypt-3 : yypt+1] 752 //line parser.go.y:109 753 { 754 yyVAL.stmt = &ast.AssignStmt{Lhs: yyDollar[1].exprlist, Rhs: yyDollar[3].exprlist} 755 yyVAL.stmt.SetLine(yyDollar[1].exprlist[0].Line()) 756 } 757 case 9: 758 yyDollar = yyS[yypt-1 : yypt+1] 759 //line parser.go.y:114 760 { 761 if _, ok := yyDollar[1].expr.(*ast.FuncCallExpr); !ok { 762 yylex.(*Lexer).Error("parse error") 763 } else { 764 yyVAL.stmt = &ast.FuncCallStmt{Expr: yyDollar[1].expr} 765 yyVAL.stmt.SetLine(yyDollar[1].expr.Line()) 766 } 767 } 768 case 10: 769 yyDollar = yyS[yypt-3 : yypt+1] 770 //line parser.go.y:122 771 { 772 yyVAL.stmt = &ast.DoBlockStmt{Stmts: yyDollar[2].stmts} 773 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 774 yyVAL.stmt.SetLastLine(yyDollar[3].token.Pos.Line) 775 } 776 case 11: 777 yyDollar = yyS[yypt-5 : yypt+1] 778 //line parser.go.y:127 779 { 780 yyVAL.stmt = &ast.WhileStmt{Condition: yyDollar[2].expr, Stmts: yyDollar[4].stmts} 781 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 782 yyVAL.stmt.SetLastLine(yyDollar[5].token.Pos.Line) 783 } 784 case 12: 785 yyDollar = yyS[yypt-4 : yypt+1] 786 //line parser.go.y:132 787 { 788 yyVAL.stmt = &ast.RepeatStmt{Condition: yyDollar[4].expr, Stmts: yyDollar[2].stmts} 789 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 790 yyVAL.stmt.SetLastLine(yyDollar[4].expr.Line()) 791 } 792 case 13: 793 yyDollar = yyS[yypt-6 : yypt+1] 794 //line parser.go.y:137 795 { 796 yyVAL.stmt = &ast.IfStmt{Condition: yyDollar[2].expr, Then: yyDollar[4].stmts} 797 cur := yyVAL.stmt 798 for _, elseif := range yyDollar[5].stmts { 799 cur.(*ast.IfStmt).Else = []ast.Stmt{elseif} 800 cur = elseif 801 } 802 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 803 yyVAL.stmt.SetLastLine(yyDollar[6].token.Pos.Line) 804 } 805 case 14: 806 yyDollar = yyS[yypt-8 : yypt+1] 807 //line parser.go.y:147 808 { 809 yyVAL.stmt = &ast.IfStmt{Condition: yyDollar[2].expr, Then: yyDollar[4].stmts} 810 cur := yyVAL.stmt 811 for _, elseif := range yyDollar[5].stmts { 812 cur.(*ast.IfStmt).Else = []ast.Stmt{elseif} 813 cur = elseif 814 } 815 cur.(*ast.IfStmt).Else = yyDollar[7].stmts 816 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 817 yyVAL.stmt.SetLastLine(yyDollar[8].token.Pos.Line) 818 } 819 case 15: 820 yyDollar = yyS[yypt-9 : yypt+1] 821 //line parser.go.y:158 822 { 823 yyVAL.stmt = &ast.NumberForStmt{Name: yyDollar[2].token.Str, Init: yyDollar[4].expr, Limit: yyDollar[6].expr, Stmts: yyDollar[8].stmts} 824 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 825 yyVAL.stmt.SetLastLine(yyDollar[9].token.Pos.Line) 826 } 827 case 16: 828 yyDollar = yyS[yypt-11 : yypt+1] 829 //line parser.go.y:163 830 { 831 yyVAL.stmt = &ast.NumberForStmt{Name: yyDollar[2].token.Str, Init: yyDollar[4].expr, Limit: yyDollar[6].expr, Step: yyDollar[8].expr, Stmts: yyDollar[10].stmts} 832 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 833 yyVAL.stmt.SetLastLine(yyDollar[11].token.Pos.Line) 834 } 835 case 17: 836 yyDollar = yyS[yypt-7 : yypt+1] 837 //line parser.go.y:168 838 { 839 yyVAL.stmt = &ast.GenericForStmt{Names: yyDollar[2].namelist, Exprs: yyDollar[4].exprlist, Stmts: yyDollar[6].stmts} 840 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 841 yyVAL.stmt.SetLastLine(yyDollar[7].token.Pos.Line) 842 } 843 case 18: 844 yyDollar = yyS[yypt-3 : yypt+1] 845 //line parser.go.y:173 846 { 847 yyVAL.stmt = &ast.FuncDefStmt{Name: yyDollar[2].funcname, Func: yyDollar[3].funcexpr} 848 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 849 yyVAL.stmt.SetLastLine(yyDollar[3].funcexpr.LastLine()) 850 } 851 case 19: 852 yyDollar = yyS[yypt-4 : yypt+1] 853 //line parser.go.y:178 854 { 855 yyVAL.stmt = &ast.LocalAssignStmt{Names: []string{yyDollar[3].token.Str}, Exprs: []ast.Expr{yyDollar[4].funcexpr}} 856 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 857 yyVAL.stmt.SetLastLine(yyDollar[4].funcexpr.LastLine()) 858 } 859 case 20: 860 yyDollar = yyS[yypt-4 : yypt+1] 861 //line parser.go.y:183 862 { 863 yyVAL.stmt = &ast.LocalAssignStmt{Names: yyDollar[2].namelist, Exprs: yyDollar[4].exprlist} 864 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 865 } 866 case 21: 867 yyDollar = yyS[yypt-2 : yypt+1] 868 //line parser.go.y:187 869 { 870 yyVAL.stmt = &ast.LocalAssignStmt{Names: yyDollar[2].namelist, Exprs: []ast.Expr{}} 871 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 872 } 873 case 22: 874 yyDollar = yyS[yypt-3 : yypt+1] 875 //line parser.go.y:191 876 { 877 yyVAL.stmt = &ast.LabelStmt{Name: yyDollar[2].token.Str} 878 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 879 } 880 case 23: 881 yyDollar = yyS[yypt-2 : yypt+1] 882 //line parser.go.y:195 883 { 884 yyVAL.stmt = &ast.GotoStmt{Label: yyDollar[2].token.Str} 885 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 886 } 887 case 24: 888 yyDollar = yyS[yypt-0 : yypt+1] 889 //line parser.go.y:201 890 { 891 yyVAL.stmts = []ast.Stmt{} 892 } 893 case 25: 894 yyDollar = yyS[yypt-5 : yypt+1] 895 //line parser.go.y:204 896 { 897 yyVAL.stmts = append(yyDollar[1].stmts, &ast.IfStmt{Condition: yyDollar[3].expr, Then: yyDollar[5].stmts}) 898 yyVAL.stmts[len(yyVAL.stmts)-1].SetLine(yyDollar[2].token.Pos.Line) 899 } 900 case 26: 901 yyDollar = yyS[yypt-1 : yypt+1] 902 //line parser.go.y:210 903 { 904 yyVAL.stmt = &ast.ReturnStmt{Exprs: nil} 905 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 906 } 907 case 27: 908 yyDollar = yyS[yypt-2 : yypt+1] 909 //line parser.go.y:214 910 { 911 yyVAL.stmt = &ast.ReturnStmt{Exprs: yyDollar[2].exprlist} 912 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 913 } 914 case 28: 915 yyDollar = yyS[yypt-1 : yypt+1] 916 //line parser.go.y:218 917 { 918 yyVAL.stmt = &ast.BreakStmt{} 919 yyVAL.stmt.SetLine(yyDollar[1].token.Pos.Line) 920 } 921 case 29: 922 yyDollar = yyS[yypt-1 : yypt+1] 923 //line parser.go.y:224 924 { 925 yyVAL.funcname = yyDollar[1].funcname 926 } 927 case 30: 928 yyDollar = yyS[yypt-3 : yypt+1] 929 //line parser.go.y:227 930 { 931 yyVAL.funcname = &ast.FuncName{Func: nil, Receiver: yyDollar[1].funcname.Func, Method: yyDollar[3].token.Str} 932 } 933 case 31: 934 yyDollar = yyS[yypt-1 : yypt+1] 935 //line parser.go.y:232 936 { 937 yyVAL.funcname = &ast.FuncName{Func: &ast.IdentExpr{Value: yyDollar[1].token.Str}} 938 yyVAL.funcname.Func.SetLine(yyDollar[1].token.Pos.Line) 939 } 940 case 32: 941 yyDollar = yyS[yypt-3 : yypt+1] 942 //line parser.go.y:236 943 { 944 key := &ast.StringExpr{Value: yyDollar[3].token.Str} 945 key.SetLine(yyDollar[3].token.Pos.Line) 946 fn := &ast.AttrGetExpr{Object: yyDollar[1].funcname.Func, Key: key} 947 fn.SetLine(yyDollar[3].token.Pos.Line) 948 yyVAL.funcname = &ast.FuncName{Func: fn} 949 } 950 case 33: 951 yyDollar = yyS[yypt-1 : yypt+1] 952 //line parser.go.y:245 953 { 954 yyVAL.exprlist = []ast.Expr{yyDollar[1].expr} 955 } 956 case 34: 957 yyDollar = yyS[yypt-3 : yypt+1] 958 //line parser.go.y:248 959 { 960 yyVAL.exprlist = append(yyDollar[1].exprlist, yyDollar[3].expr) 961 } 962 case 35: 963 yyDollar = yyS[yypt-1 : yypt+1] 964 //line parser.go.y:253 965 { 966 yyVAL.expr = &ast.IdentExpr{Value: yyDollar[1].token.Str} 967 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 968 } 969 case 36: 970 yyDollar = yyS[yypt-4 : yypt+1] 971 //line parser.go.y:257 972 { 973 yyVAL.expr = &ast.AttrGetExpr{Object: yyDollar[1].expr, Key: yyDollar[3].expr} 974 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 975 } 976 case 37: 977 yyDollar = yyS[yypt-3 : yypt+1] 978 //line parser.go.y:261 979 { 980 key := &ast.StringExpr{Value: yyDollar[3].token.Str} 981 key.SetLine(yyDollar[3].token.Pos.Line) 982 yyVAL.expr = &ast.AttrGetExpr{Object: yyDollar[1].expr, Key: key} 983 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 984 } 985 case 38: 986 yyDollar = yyS[yypt-1 : yypt+1] 987 //line parser.go.y:269 988 { 989 yyVAL.namelist = []string{yyDollar[1].token.Str} 990 } 991 case 39: 992 yyDollar = yyS[yypt-3 : yypt+1] 993 //line parser.go.y:272 994 { 995 yyVAL.namelist = append(yyDollar[1].namelist, yyDollar[3].token.Str) 996 } 997 case 40: 998 yyDollar = yyS[yypt-1 : yypt+1] 999 //line parser.go.y:277 1000 { 1001 yyVAL.exprlist = []ast.Expr{yyDollar[1].expr} 1002 } 1003 case 41: 1004 yyDollar = yyS[yypt-3 : yypt+1] 1005 //line parser.go.y:280 1006 { 1007 yyVAL.exprlist = append(yyDollar[1].exprlist, yyDollar[3].expr) 1008 } 1009 case 42: 1010 yyDollar = yyS[yypt-1 : yypt+1] 1011 //line parser.go.y:285 1012 { 1013 yyVAL.expr = &ast.NilExpr{} 1014 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1015 } 1016 case 43: 1017 yyDollar = yyS[yypt-1 : yypt+1] 1018 //line parser.go.y:289 1019 { 1020 yyVAL.expr = &ast.FalseExpr{} 1021 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1022 } 1023 case 44: 1024 yyDollar = yyS[yypt-1 : yypt+1] 1025 //line parser.go.y:293 1026 { 1027 yyVAL.expr = &ast.TrueExpr{} 1028 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1029 } 1030 case 45: 1031 yyDollar = yyS[yypt-1 : yypt+1] 1032 //line parser.go.y:297 1033 { 1034 yyVAL.expr = &ast.NumberExpr{Value: yyDollar[1].token.Str} 1035 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1036 } 1037 case 46: 1038 yyDollar = yyS[yypt-1 : yypt+1] 1039 //line parser.go.y:301 1040 { 1041 yyVAL.expr = &ast.Comma3Expr{} 1042 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1043 } 1044 case 47: 1045 yyDollar = yyS[yypt-1 : yypt+1] 1046 //line parser.go.y:305 1047 { 1048 yyVAL.expr = yyDollar[1].expr 1049 } 1050 case 48: 1051 yyDollar = yyS[yypt-1 : yypt+1] 1052 //line parser.go.y:308 1053 { 1054 yyVAL.expr = yyDollar[1].expr 1055 } 1056 case 49: 1057 yyDollar = yyS[yypt-1 : yypt+1] 1058 //line parser.go.y:311 1059 { 1060 yyVAL.expr = yyDollar[1].expr 1061 } 1062 case 50: 1063 yyDollar = yyS[yypt-1 : yypt+1] 1064 //line parser.go.y:314 1065 { 1066 yyVAL.expr = yyDollar[1].expr 1067 } 1068 case 51: 1069 yyDollar = yyS[yypt-3 : yypt+1] 1070 //line parser.go.y:317 1071 { 1072 yyVAL.expr = &ast.LogicalOpExpr{Lhs: yyDollar[1].expr, Operator: "or", Rhs: yyDollar[3].expr} 1073 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1074 } 1075 case 52: 1076 yyDollar = yyS[yypt-3 : yypt+1] 1077 //line parser.go.y:321 1078 { 1079 yyVAL.expr = &ast.LogicalOpExpr{Lhs: yyDollar[1].expr, Operator: "and", Rhs: yyDollar[3].expr} 1080 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1081 } 1082 case 53: 1083 yyDollar = yyS[yypt-3 : yypt+1] 1084 //line parser.go.y:325 1085 { 1086 yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: ">", Rhs: yyDollar[3].expr} 1087 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1088 } 1089 case 54: 1090 yyDollar = yyS[yypt-3 : yypt+1] 1091 //line parser.go.y:329 1092 { 1093 yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: "<", Rhs: yyDollar[3].expr} 1094 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1095 } 1096 case 55: 1097 yyDollar = yyS[yypt-3 : yypt+1] 1098 //line parser.go.y:333 1099 { 1100 yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: ">=", Rhs: yyDollar[3].expr} 1101 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1102 } 1103 case 56: 1104 yyDollar = yyS[yypt-3 : yypt+1] 1105 //line parser.go.y:337 1106 { 1107 yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: "<=", Rhs: yyDollar[3].expr} 1108 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1109 } 1110 case 57: 1111 yyDollar = yyS[yypt-3 : yypt+1] 1112 //line parser.go.y:341 1113 { 1114 yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: "==", Rhs: yyDollar[3].expr} 1115 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1116 } 1117 case 58: 1118 yyDollar = yyS[yypt-3 : yypt+1] 1119 //line parser.go.y:345 1120 { 1121 yyVAL.expr = &ast.RelationalOpExpr{Lhs: yyDollar[1].expr, Operator: "~=", Rhs: yyDollar[3].expr} 1122 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1123 } 1124 case 59: 1125 yyDollar = yyS[yypt-3 : yypt+1] 1126 //line parser.go.y:349 1127 { 1128 yyVAL.expr = &ast.StringConcatOpExpr{Lhs: yyDollar[1].expr, Rhs: yyDollar[3].expr} 1129 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1130 } 1131 case 60: 1132 yyDollar = yyS[yypt-3 : yypt+1] 1133 //line parser.go.y:353 1134 { 1135 yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "+", Rhs: yyDollar[3].expr} 1136 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1137 } 1138 case 61: 1139 yyDollar = yyS[yypt-3 : yypt+1] 1140 //line parser.go.y:357 1141 { 1142 yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "-", Rhs: yyDollar[3].expr} 1143 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1144 } 1145 case 62: 1146 yyDollar = yyS[yypt-3 : yypt+1] 1147 //line parser.go.y:361 1148 { 1149 yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "*", Rhs: yyDollar[3].expr} 1150 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1151 } 1152 case 63: 1153 yyDollar = yyS[yypt-3 : yypt+1] 1154 //line parser.go.y:365 1155 { 1156 yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "/", Rhs: yyDollar[3].expr} 1157 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1158 } 1159 case 64: 1160 yyDollar = yyS[yypt-3 : yypt+1] 1161 //line parser.go.y:369 1162 { 1163 yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "%", Rhs: yyDollar[3].expr} 1164 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1165 } 1166 case 65: 1167 yyDollar = yyS[yypt-3 : yypt+1] 1168 //line parser.go.y:373 1169 { 1170 yyVAL.expr = &ast.ArithmeticOpExpr{Lhs: yyDollar[1].expr, Operator: "^", Rhs: yyDollar[3].expr} 1171 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1172 } 1173 case 66: 1174 yyDollar = yyS[yypt-2 : yypt+1] 1175 //line parser.go.y:377 1176 { 1177 yyVAL.expr = &ast.UnaryMinusOpExpr{Expr: yyDollar[2].expr} 1178 yyVAL.expr.SetLine(yyDollar[2].expr.Line()) 1179 } 1180 case 67: 1181 yyDollar = yyS[yypt-2 : yypt+1] 1182 //line parser.go.y:381 1183 { 1184 yyVAL.expr = &ast.UnaryNotOpExpr{Expr: yyDollar[2].expr} 1185 yyVAL.expr.SetLine(yyDollar[2].expr.Line()) 1186 } 1187 case 68: 1188 yyDollar = yyS[yypt-2 : yypt+1] 1189 //line parser.go.y:385 1190 { 1191 yyVAL.expr = &ast.UnaryLenOpExpr{Expr: yyDollar[2].expr} 1192 yyVAL.expr.SetLine(yyDollar[2].expr.Line()) 1193 } 1194 case 69: 1195 yyDollar = yyS[yypt-1 : yypt+1] 1196 //line parser.go.y:391 1197 { 1198 yyVAL.expr = &ast.StringExpr{Value: yyDollar[1].token.Str} 1199 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1200 } 1201 case 70: 1202 yyDollar = yyS[yypt-1 : yypt+1] 1203 //line parser.go.y:397 1204 { 1205 yyVAL.expr = yyDollar[1].expr 1206 } 1207 case 71: 1208 yyDollar = yyS[yypt-1 : yypt+1] 1209 //line parser.go.y:400 1210 { 1211 yyVAL.expr = yyDollar[1].expr 1212 } 1213 case 72: 1214 yyDollar = yyS[yypt-1 : yypt+1] 1215 //line parser.go.y:403 1216 { 1217 yyVAL.expr = yyDollar[1].expr 1218 } 1219 case 73: 1220 yyDollar = yyS[yypt-3 : yypt+1] 1221 //line parser.go.y:406 1222 { 1223 if ex, ok := yyDollar[2].expr.(*ast.Comma3Expr); ok { 1224 ex.AdjustRet = true 1225 } 1226 yyVAL.expr = yyDollar[2].expr 1227 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1228 } 1229 case 74: 1230 yyDollar = yyS[yypt-3 : yypt+1] 1231 //line parser.go.y:415 1232 { 1233 yyDollar[2].expr.(*ast.FuncCallExpr).AdjustRet = true 1234 yyVAL.expr = yyDollar[2].expr 1235 } 1236 case 75: 1237 yyDollar = yyS[yypt-2 : yypt+1] 1238 //line parser.go.y:421 1239 { 1240 yyVAL.expr = &ast.FuncCallExpr{Func: yyDollar[1].expr, Args: yyDollar[2].exprlist} 1241 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1242 } 1243 case 76: 1244 yyDollar = yyS[yypt-4 : yypt+1] 1245 //line parser.go.y:425 1246 { 1247 yyVAL.expr = &ast.FuncCallExpr{Method: yyDollar[3].token.Str, Receiver: yyDollar[1].expr, Args: yyDollar[4].exprlist} 1248 yyVAL.expr.SetLine(yyDollar[1].expr.Line()) 1249 } 1250 case 77: 1251 yyDollar = yyS[yypt-2 : yypt+1] 1252 //line parser.go.y:431 1253 { 1254 if yylex.(*Lexer).PNewLine { 1255 yylex.(*Lexer).TokenError(yyDollar[1].token, "ambiguous syntax (function call x new statement)") 1256 } 1257 yyVAL.exprlist = []ast.Expr{} 1258 } 1259 case 78: 1260 yyDollar = yyS[yypt-3 : yypt+1] 1261 //line parser.go.y:437 1262 { 1263 if yylex.(*Lexer).PNewLine { 1264 yylex.(*Lexer).TokenError(yyDollar[1].token, "ambiguous syntax (function call x new statement)") 1265 } 1266 yyVAL.exprlist = yyDollar[2].exprlist 1267 } 1268 case 79: 1269 yyDollar = yyS[yypt-1 : yypt+1] 1270 //line parser.go.y:443 1271 { 1272 yyVAL.exprlist = []ast.Expr{yyDollar[1].expr} 1273 } 1274 case 80: 1275 yyDollar = yyS[yypt-1 : yypt+1] 1276 //line parser.go.y:446 1277 { 1278 yyVAL.exprlist = []ast.Expr{yyDollar[1].expr} 1279 } 1280 case 81: 1281 yyDollar = yyS[yypt-2 : yypt+1] 1282 //line parser.go.y:451 1283 { 1284 yyVAL.expr = &ast.FunctionExpr{ParList: yyDollar[2].funcexpr.ParList, Stmts: yyDollar[2].funcexpr.Stmts} 1285 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1286 yyVAL.expr.SetLastLine(yyDollar[2].funcexpr.LastLine()) 1287 } 1288 case 82: 1289 yyDollar = yyS[yypt-5 : yypt+1] 1290 //line parser.go.y:458 1291 { 1292 yyVAL.funcexpr = &ast.FunctionExpr{ParList: yyDollar[2].parlist, Stmts: yyDollar[4].stmts} 1293 yyVAL.funcexpr.SetLine(yyDollar[1].token.Pos.Line) 1294 yyVAL.funcexpr.SetLastLine(yyDollar[5].token.Pos.Line) 1295 } 1296 case 83: 1297 yyDollar = yyS[yypt-4 : yypt+1] 1298 //line parser.go.y:463 1299 { 1300 yyVAL.funcexpr = &ast.FunctionExpr{ParList: &ast.ParList{HasVargs: false, Names: []string{}}, Stmts: yyDollar[3].stmts} 1301 yyVAL.funcexpr.SetLine(yyDollar[1].token.Pos.Line) 1302 yyVAL.funcexpr.SetLastLine(yyDollar[4].token.Pos.Line) 1303 } 1304 case 84: 1305 yyDollar = yyS[yypt-1 : yypt+1] 1306 //line parser.go.y:470 1307 { 1308 yyVAL.parlist = &ast.ParList{HasVargs: true, Names: []string{}} 1309 } 1310 case 85: 1311 yyDollar = yyS[yypt-1 : yypt+1] 1312 //line parser.go.y:473 1313 { 1314 yyVAL.parlist = &ast.ParList{HasVargs: false, Names: []string{}} 1315 yyVAL.parlist.Names = append(yyVAL.parlist.Names, yyDollar[1].namelist...) 1316 } 1317 case 86: 1318 yyDollar = yyS[yypt-3 : yypt+1] 1319 //line parser.go.y:477 1320 { 1321 yyVAL.parlist = &ast.ParList{HasVargs: true, Names: []string{}} 1322 yyVAL.parlist.Names = append(yyVAL.parlist.Names, yyDollar[1].namelist...) 1323 } 1324 case 87: 1325 yyDollar = yyS[yypt-2 : yypt+1] 1326 //line parser.go.y:484 1327 { 1328 yyVAL.expr = &ast.TableExpr{Fields: []*ast.Field{}} 1329 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1330 } 1331 case 88: 1332 yyDollar = yyS[yypt-3 : yypt+1] 1333 //line parser.go.y:488 1334 { 1335 yyVAL.expr = &ast.TableExpr{Fields: yyDollar[2].fieldlist} 1336 yyVAL.expr.SetLine(yyDollar[1].token.Pos.Line) 1337 } 1338 case 89: 1339 yyDollar = yyS[yypt-1 : yypt+1] 1340 //line parser.go.y:495 1341 { 1342 yyVAL.fieldlist = []*ast.Field{yyDollar[1].field} 1343 } 1344 case 90: 1345 yyDollar = yyS[yypt-3 : yypt+1] 1346 //line parser.go.y:498 1347 { 1348 yyVAL.fieldlist = append(yyDollar[1].fieldlist, yyDollar[3].field) 1349 } 1350 case 91: 1351 yyDollar = yyS[yypt-2 : yypt+1] 1352 //line parser.go.y:501 1353 { 1354 yyVAL.fieldlist = yyDollar[1].fieldlist 1355 } 1356 case 92: 1357 yyDollar = yyS[yypt-3 : yypt+1] 1358 //line parser.go.y:506 1359 { 1360 yyVAL.field = &ast.Field{Key: &ast.StringExpr{Value: yyDollar[1].token.Str}, Value: yyDollar[3].expr} 1361 yyVAL.field.Key.SetLine(yyDollar[1].token.Pos.Line) 1362 } 1363 case 93: 1364 yyDollar = yyS[yypt-5 : yypt+1] 1365 //line parser.go.y:510 1366 { 1367 yyVAL.field = &ast.Field{Key: yyDollar[2].expr, Value: yyDollar[5].expr} 1368 } 1369 case 94: 1370 yyDollar = yyS[yypt-1 : yypt+1] 1371 //line parser.go.y:513 1372 { 1373 yyVAL.field = &ast.Field{Value: yyDollar[1].expr} 1374 } 1375 case 95: 1376 yyDollar = yyS[yypt-1 : yypt+1] 1377 //line parser.go.y:518 1378 { 1379 yyVAL.fieldsep = "," 1380 } 1381 case 96: 1382 yyDollar = yyS[yypt-1 : yypt+1] 1383 //line parser.go.y:521 1384 { 1385 yyVAL.fieldsep = ";" 1386 } 1387 } 1388 goto yystack /* stack new state and value */ 1389 }