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