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