github.com/jslyzt/glua@v0.0.0-20210819023911-4030c8e0234a/parse/parser.go (about)

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