github.com/shawnclovie/gopher-lua@v0.0.0-20200520092726-90b44ec0e2f2/parse/parser.go (about)

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