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