github.com/bitxmesh/gopher-lua@v0.0.0-20190327085718-93c344ef97a4/parse/parser.go (about)

     1  //line parser.go.y:2
     2  package parse
     3  
     4  import __yyfmt__ "fmt"
     5  
     6  //line parser.go.y:2
     7  import (
     8  	"github.com/yuin/gopher-lua/ast"
     9  )
    10  
    11  //line parser.go.y:34
    12  type 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  
    33  const TAnd = 57346
    34  const TBreak = 57347
    35  const TDo = 57348
    36  const TElse = 57349
    37  const TElseIf = 57350
    38  const TEnd = 57351
    39  const TFalse = 57352
    40  const TFor = 57353
    41  const TFunction = 57354
    42  const TIf = 57355
    43  const TIn = 57356
    44  const TLocal = 57357
    45  const TNil = 57358
    46  const TNot = 57359
    47  const TOr = 57360
    48  const TReturn = 57361
    49  const TRepeat = 57362
    50  const TThen = 57363
    51  const TTrue = 57364
    52  const TUntil = 57365
    53  const TWhile = 57366
    54  const TEqeq = 57367
    55  const TNeq = 57368
    56  const TLte = 57369
    57  const TGte = 57370
    58  const T2Comma = 57371
    59  const T3Comma = 57372
    60  const TIdent = 57373
    61  const TNumber = 57374
    62  const TString = 57375
    63  const UNARY = 57376
    64  
    65  var 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  }
   108  var yyStatenames = []string{}
   109  
   110  const yyEofCode = 1
   111  const yyErrCode = 2
   112  const yyMaxDepth = 200
   113  
   114  //line parser.go.y:514
   115  func 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
   125  var 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  
   139  const yyNprod = 95
   140  const yyPrivate = 57344
   141  
   142  var yyTokenNames []string
   143  var yyStates []string
   144  
   145  const yyLast = 579
   146  
   147  var 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  }
   208  var 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  }
   230  var 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  }
   236  var 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  }
   249  var 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  }
   262  var 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  }
   284  var 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  }
   306  var 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  }
   322  var 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  }
   329  var yyTok3 = []int{
   330  	0,
   331  }
   332  
   333  //line yaccpar:1
   334  
   335  /*	parser for yacc output	*/
   336  
   337  var yyDebug = 0
   338  
   339  type yyLexer interface {
   340  	Lex(lval *yySymType) int
   341  	Error(s string)
   342  }
   343  
   344  const yyFlag = -1000
   345  
   346  func 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  
   356  func 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  
   365  func 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  
   390  out:
   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  
   400  func 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  
   413  ret0:
   414  	return 0
   415  
   416  ret1:
   417  	return 1
   418  
   419  yystack:
   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  
   434  yynewstate:
   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  
   457  yydefault:
   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  }