1
2 package build
3
4 import __yyfmt__ "fmt"
5
6
7
8
9 type yySymType struct {
10 yys int
11
12 tok string
13 str string
14 pos Position
15 triple bool
16
17
18 expr Expr
19 exprs []Expr
20 kv *KeyValueExpr
21 kvs []*KeyValueExpr
22 string *StringExpr
23 ifstmt *IfStmt
24 loadarg *struct {
25 from Ident
26 to Ident
27 }
28 loadargs []*struct {
29 from Ident
30 to Ident
31 }
32 def_header *DefStmt
33
34
35 comma Position
36 lastStmt Expr
37 }
38
39 const _AUGM = 57346
40 const _AND = 57347
41 const _COMMENT = 57348
42 const _EOF = 57349
43 const _EQ = 57350
44 const _FOR = 57351
45 const _GE = 57352
46 const _IDENT = 57353
47 const _INT = 57354
48 const _IF = 57355
49 const _ELSE = 57356
50 const _ELIF = 57357
51 const _IN = 57358
52 const _IS = 57359
53 const _LAMBDA = 57360
54 const _LOAD = 57361
55 const _LE = 57362
56 const _NE = 57363
57 const _STAR_STAR = 57364
58 const _INT_DIV = 57365
59 const _BIT_LSH = 57366
60 const _BIT_RSH = 57367
61 const _ARROW = 57368
62 const _NOT = 57369
63 const _OR = 57370
64 const _STRING = 57371
65 const _DEF = 57372
66 const _RETURN = 57373
67 const _PASS = 57374
68 const _BREAK = 57375
69 const _CONTINUE = 57376
70 const _INDENT = 57377
71 const _UNINDENT = 57378
72 const ShiftInstead = 57379
73 const _ASSERT = 57380
74 const _UNARY = 57381
75
76 var yyToknames = [...]string{
77 "$end",
78 "error",
79 "$unk",
80 "'%'",
81 "'('",
82 "')'",
83 "'*'",
84 "'+'",
85 "','",
86 "'-'",
87 "'.'",
88 "'/'",
89 "':'",
90 "'<'",
91 "'='",
92 "'>'",
93 "'['",
94 "']'",
95 "'{'",
96 "'}'",
97 "'|'",
98 "'&'",
99 "'^'",
100 "'~'",
101 "_AUGM",
102 "_AND",
103 "_COMMENT",
104 "_EOF",
105 "_EQ",
106 "_FOR",
107 "_GE",
108 "_IDENT",
109 "_INT",
110 "_IF",
111 "_ELSE",
112 "_ELIF",
113 "_IN",
114 "_IS",
115 "_LAMBDA",
116 "_LOAD",
117 "_LE",
118 "_NE",
119 "_STAR_STAR",
120 "_INT_DIV",
121 "_BIT_LSH",
122 "_BIT_RSH",
123 "_ARROW",
124 "_NOT",
125 "_OR",
126 "_STRING",
127 "_DEF",
128 "_RETURN",
129 "_PASS",
130 "_BREAK",
131 "_CONTINUE",
132 "_INDENT",
133 "_UNINDENT",
134 "ShiftInstead",
135 "'\\n'",
136 "_ASSERT",
137 "_UNARY",
138 "';'",
139 }
140
141 var yyStatenames = [...]string{}
142
143 const yyEofCode = 1
144 const yyErrCode = 2
145 const yyInitialStackSize = 16
146
147
148
149
150
151
152
153 func unary(pos Position, op string, x Expr) Expr {
154 return &UnaryExpr{
155 OpStart: pos,
156 Op: op,
157 X: x,
158 }
159 }
160
161
162
163 func binary(x Expr, pos Position, op string, y Expr) Expr {
164 _, xend := x.Span()
165 ystart, _ := y.Span()
166
167 switch op {
168 case "=", "+=", "-=", "*=", "/=", "//=", "%=", "|=":
169 return &AssignExpr{
170 LHS: x,
171 OpPos: pos,
172 Op: op,
173 LineBreak: xend.Line < ystart.Line,
174 RHS: y,
175 }
176 }
177
178 return &BinaryExpr{
179 X: x,
180 OpStart: pos,
181 Op: op,
182 LineBreak: xend.Line < ystart.Line,
183 Y: y,
184 }
185 }
186
187
188 func typed(x, y Expr) *TypedIdent {
189 return &TypedIdent{
190 Ident: x.(*Ident),
191 Type: y,
192 }
193 }
194
195
196
197
198
199 func isSimpleExpression(expr *Expr) bool {
200 switch x := (*expr).(type) {
201 case *LiteralExpr, *StringExpr, *Ident:
202 return true
203 case *UnaryExpr:
204 _, literal := x.X.(*LiteralExpr)
205 _, ident := x.X.(*Ident)
206 return literal || ident
207 case *ListExpr:
208 return len(x.List) == 0
209 case *TupleExpr:
210 return len(x.List) == 0
211 case *DictExpr:
212 return len(x.List) == 0
213 case *SetExpr:
214 return len(x.List) == 0
215 default:
216 return false
217 }
218 }
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253 func forceCompact(start Position, list []Expr, end Position) bool {
254 if len(list) <= 1 {
255
256 return false
257 }
258
259
260
261 line := start.Line
262 for _, x := range list {
263 start, end := x.Span()
264 if start.Line != line {
265 return false
266 }
267 line = end.Line
268 if !isSimpleExpression(&x) {
269 return false
270 }
271 }
272 return end.Line == line
273 }
274
275
276 func forceMultiLine(start Position, list []Expr, end Position) bool {
277 if len(list) > 1 {
278
279 return false
280 }
281
282 if len(list) == 0 {
283
284 return start.Line != end.Line
285 }
286
287
288
289
290 elemStart, elemEnd := list[0].Span()
291 return start.Line != elemStart.Line || end.Line != elemEnd.Line
292 }
293
294
295 func forceMultiLineComprehension(start Position, expr Expr, clauses []Expr, end Position) bool {
296
297 exprStart, exprEnd := expr.Span()
298 if start.Line != exprStart.Line {
299 return true
300 }
301 previousEnd := exprEnd
302 for _, clause := range clauses {
303 clauseStart, clauseEnd := clause.Span()
304 if previousEnd.Line != clauseStart.Line {
305 return true
306 }
307 previousEnd = clauseEnd
308 }
309 return previousEnd.Line != end.Line
310 }
311
312
313
314
315
316 func extractTrailingComments(stmt Expr) []Expr {
317 body := getLastBody(stmt)
318 var comments []Expr
319 if body != nil && len(*body) > 0 {
320
321 start, _ := (*body)[0].Span()
322 indentation := start.LineRune
323
324
325 lastNonCommentIndex := -1
326 for i, stmt := range *body {
327 if _, ok := stmt.(*CommentBlock); !ok {
328 lastNonCommentIndex = i
329 }
330 }
331 if lastNonCommentIndex == -1 {
332 return comments
333 }
334
335
336
337 for i := lastNonCommentIndex; i < len(*body); i++ {
338 stmt := (*body)[i]
339 if comment := extractDedentedComment(stmt, indentation); comment != nil {
340
341 comments = append(comments, comment)
342 comments = append(comments, (*body)[i+1:]...)
343 *body = (*body)[:i+1]
344
345
346 if i > lastNonCommentIndex && len(stmt.Comment().After) == 0 {
347 *body = (*body)[:i]
348 }
349 }
350 }
351 }
352 return comments
353 }
354
355
356
357
358 func extractDedentedComment(stmt Expr, indentation int) Expr {
359 for i, line := range stmt.Comment().After {
360
361
362 if line.Start.LineRune > 0 && line.Start.LineRune < indentation {
363
364 cb := &CommentBlock{
365 Start: line.Start,
366 Comments: Comments{After: stmt.Comment().After[i:]},
367 }
368 stmt.Comment().After = stmt.Comment().After[:i]
369 return cb
370 }
371 }
372 return nil
373 }
374
375
376
377 func getLastBody(stmt Expr) *[]Expr {
378 switch block := stmt.(type) {
379 case *DefStmt:
380 return &block.Body
381 case *ForStmt:
382 return &block.Body
383 case *IfStmt:
384 if len(block.False) == 0 {
385 return &block.True
386 } else if len(block.False) == 1 {
387 if next, ok := block.False[0].(*IfStmt); ok {
388
389 return getLastBody(next)
390 }
391 }
392 return &block.False
393 }
394 return nil
395 }
396
397
398 var yyExca = [...]int16{
399 -1, 1,
400 1, -1,
401 -2, 0,
402 -1, 79,
403 6, 55,
404 -2, 128,
405 -1, 169,
406 20, 125,
407 -2, 126,
408 }
409
410 const yyPrivate = 57344
411
412 const yyLast = 1052
413
414 var yyAct = [...]int16{
415 20, 31, 234, 250, 146, 2, 29, 108, 186, 106,
416 7, 147, 195, 95, 160, 43, 152, 9, 23, 187,
417 159, 105, 240, 220, 174, 40, 87, 88, 89, 90,
418 44, 84, 39, 36, 93, 98, 101, 49, 209, 54,
419 131, 173, 53, 57, 83, 58, 103, 55, 113, 218,
420 114, 39, 110, 36, 118, 119, 120, 121, 122, 123,
421 124, 125, 126, 127, 128, 129, 130, 200, 132, 133,
422 134, 135, 136, 137, 138, 139, 140, 35, 217, 56,
423 238, 219, 189, 38, 51, 52, 143, 110, 92, 33,
424 36, 34, 155, 156, 54, 85, 157, 53, 13, 164,
425 76, 94, 55, 162, 36, 37, 163, 36, 39, 168,
426 263, 171, 32, 48, 167, 109, 165, 212, 190, 116,
427 36, 77, 39, 175, 100, 207, 181, 162, 213, 179,
428 166, 86, 182, 47, 56, 54, 97, 162, 53, 57,
429 117, 58, 201, 55, 111, 112, 248, 196, 188, 115,
430 193, 247, 191, 197, 158, 205, 79, 194, 261, 206,
431 84, 227, 78, 154, 211, 231, 47, 154, 80, 211,
432 221, 214, 216, 204, 208, 56, 72, 73, 210, 149,
433 208, 44, 47, 47, 223, 215, 102, 180, 45, 47,
434 222, 245, 244, 142, 202, 196, 228, 229, 46, 232,
435 233, 197, 225, 235, 151, 42, 260, 230, 178, 148,
436 237, 226, 200, 47, 169, 153, 264, 224, 236, 192,
437 172, 141, 91, 239, 104, 177, 1, 10, 243, 18,
438 249, 241, 246, 188, 176, 242, 99, 96, 251, 253,
439 41, 50, 19, 252, 12, 256, 257, 7, 8, 235,
440 203, 258, 4, 30, 259, 161, 262, 150, 184, 185,
441 81, 82, 251, 266, 265, 35, 144, 252, 27, 145,
442 26, 38, 0, 0, 0, 0, 0, 33, 0, 34,
443 0, 0, 0, 0, 28, 0, 0, 6, 0, 0,
444 11, 0, 36, 37, 22, 0, 0, 0, 0, 24,
445 32, 0, 0, 0, 0, 0, 0, 0, 25, 0,
446 39, 21, 14, 15, 16, 17, 0, 254, 35, 5,
447 0, 27, 0, 26, 38, 0, 0, 0, 0, 0,
448 33, 0, 34, 0, 0, 0, 0, 28, 0, 0,
449 6, 3, 0, 11, 0, 36, 37, 22, 0, 0,
450 0, 54, 24, 32, 53, 57, 0, 58, 0, 55,
451 0, 25, 0, 39, 21, 14, 15, 16, 17, 70,
452 35, 0, 5, 27, 0, 26, 38, 0, 0, 0,
453 0, 0, 33, 0, 34, 0, 0, 0, 0, 28,
454 0, 56, 72, 73, 0, 0, 0, 36, 37, 0,
455 0, 0, 0, 0, 24, 32, 0, 0, 0, 0,
456 0, 0, 0, 25, 0, 39, 0, 14, 15, 16,
457 17, 0, 54, 0, 107, 53, 57, 0, 58, 0,
458 55, 0, 59, 255, 60, 0, 0, 0, 0, 69,
459 70, 71, 0, 0, 68, 0, 0, 61, 0, 64,
460 0, 0, 75, 0, 0, 65, 74, 0, 0, 62,
461 63, 0, 56, 72, 73, 54, 66, 67, 53, 57,
462 0, 58, 0, 55, 170, 59, 0, 60, 0, 0,
463 0, 0, 69, 70, 71, 0, 0, 68, 0, 0,
464 61, 0, 64, 0, 0, 75, 0, 0, 65, 74,
465 0, 0, 62, 63, 0, 56, 72, 73, 54, 66,
466 67, 53, 57, 0, 58, 0, 55, 0, 59, 0,
467 60, 0, 0, 0, 0, 69, 70, 71, 0, 0,
468 68, 0, 0, 61, 0, 64, 0, 0, 75, 183,
469 0, 65, 74, 0, 0, 62, 63, 0, 56, 72,
470 73, 54, 66, 67, 53, 57, 0, 58, 0, 55,
471 0, 59, 0, 60, 0, 0, 0, 0, 69, 70,
472 71, 0, 0, 68, 0, 0, 61, 162, 64, 0,
473 0, 75, 0, 0, 65, 74, 0, 0, 62, 63,
474 0, 56, 72, 73, 54, 66, 67, 53, 57, 0,
475 58, 0, 55, 0, 59, 0, 60, 0, 0, 0,
476 0, 69, 70, 71, 0, 0, 68, 0, 0, 61,
477 0, 64, 0, 0, 75, 0, 0, 65, 74, 0,
478 0, 62, 63, 0, 56, 72, 73, 35, 66, 67,
479 27, 0, 26, 38, 0, 0, 0, 0, 0, 33,
480 0, 34, 0, 0, 0, 0, 28, 0, 0, 0,
481 0, 0, 0, 0, 36, 37, 0, 0, 0, 0,
482 0, 24, 32, 0, 0, 0, 0, 0, 0, 0,
483 25, 0, 39, 0, 14, 15, 16, 17, 54, 0,
484 0, 53, 57, 0, 58, 0, 55, 0, 59, 0,
485 60, 0, 0, 0, 0, 69, 70, 71, 0, 0,
486 68, 0, 0, 61, 0, 64, 0, 0, 0, 0,
487 0, 65, 74, 0, 0, 62, 63, 0, 56, 72,
488 73, 54, 66, 67, 53, 57, 0, 58, 0, 55,
489 0, 59, 0, 60, 0, 0, 0, 0, 69, 70,
490 71, 0, 0, 68, 0, 0, 61, 0, 64, 0,
491 0, 0, 0, 0, 65, 0, 0, 0, 62, 63,
492 0, 56, 72, 73, 54, 66, 67, 53, 57, 0,
493 58, 0, 55, 0, 59, 0, 60, 0, 0, 0,
494 0, 69, 70, 71, 0, 0, 68, 0, 0, 61,
495 0, 64, 0, 0, 0, 0, 0, 65, 0, 0,
496 0, 62, 63, 0, 56, 72, 73, 54, 66, 0,
497 53, 57, 0, 58, 0, 55, 0, 59, 0, 60,
498 0, 0, 0, 0, 69, 70, 71, 0, 0, 0,
499 0, 0, 61, 0, 64, 0, 0, 0, 0, 0,
500 65, 0, 0, 0, 62, 63, 0, 56, 72, 73,
501 35, 66, 198, 27, 200, 26, 38, 0, 0, 0,
502 0, 0, 33, 0, 34, 0, 0, 0, 0, 28,
503 0, 0, 0, 0, 0, 0, 0, 36, 37, 0,
504 0, 0, 0, 54, 24, 32, 53, 57, 199, 58,
505 0, 55, 0, 25, 35, 39, 198, 27, 0, 26,
506 38, 70, 71, 0, 0, 0, 33, 0, 34, 0,
507 0, 0, 0, 28, 0, 0, 0, 0, 0, 0,
508 0, 36, 37, 56, 72, 73, 0, 0, 24, 32,
509 35, 0, 199, 27, 200, 26, 38, 25, 0, 39,
510 0, 0, 33, 0, 34, 0, 0, 0, 0, 28,
511 0, 0, 0, 0, 0, 0, 0, 36, 37, 0,
512 0, 0, 0, 0, 24, 32, 35, 0, 0, 27,
513 0, 26, 38, 25, 0, 39, 0, 0, 33, 0,
514 34, 0, 0, 0, 0, 28, 0, 0, 0, 0,
515 0, 0, 0, 36, 37, 0, 0, 0, 0, 54,
516 24, 32, 53, 57, 0, 58, 0, 55, 0, 25,
517 0, 39, 0, 0, 0, 0, 69, 70, 71, 0,
518 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
519 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,
520 72, 73,
521 }
522
523 var yyPact = [...]int16{
524 -1000, -1000, 313, -1000, -1000, -1000, -34, -1000, -1000, -1000,
525 192, 72, -1000, 173, 971, -1000, -1000, -1000, -10, 49,
526 590, 68, 971, 151, 88, 971, 971, 971, 971, -1000,
527 -1000, -1000, 217, 971, 971, 971, -1000, 175, 13, -1000,
528 -1000, -41, 365, 78, 151, 971, 971, 971, 204, 971,
529 971, 106, -1000, 971, 971, 971, 971, 971, 971, 971,
530 971, 971, 971, 971, 971, 971, 3, 971, 971, 971,
531 971, 971, 971, 971, 971, 971, 216, 180, 54, 200,
532 971, 191, 206, -1000, 152, 21, 21, -1000, -1000, -1000,
533 -1000, 200, 136, 547, 200, 73, 110, 205, 461, 200,
534 214, 590, 8, -1000, -35, 632, -1000, -1000, -1000, 971,
535 72, 204, 204, 684, 590, 174, 365, -1000, -1000, -1000,
536 -1000, -1000, 90, 90, 1005, 1005, 1005, 1005, 1005, 1005,
537 1005, 971, 770, 813, 889, 131, 347, 35, 35, 727,
538 504, 75, 365, -1000, 213, 200, 899, 203, -1000, 124,
539 181, 971, -1000, 88, 971, -1000, -1000, -18, -1000, 107,
540 4, -1000, 72, 935, -1000, 97, -1000, 108, 935, -1000,
541 971, 935, -1000, -1000, -1000, -1000, 22, -36, 157, 151,
542 365, -1000, 1005, 971, 211, 202, -1000, -1000, 148, 21,
543 21, -1000, -1000, -1000, 855, -1000, 590, 150, 971, 971,
544 -1000, -1000, 971, -1000, -1000, 590, 200, -1000, 4, 971,
545 43, 590, -1000, -1000, 590, -1000, 461, -1000, -37, -1000,
546 -1000, 365, -1000, 684, -1000, -1000, 75, 971, 179, 178,
547 -1000, 971, 590, 590, 133, 590, 58, 684, 971, 260,
548 -1000, -1000, -1000, 418, 971, 971, 590, -1000, 971, 197,
549 -1000, -1000, 143, 684, -1000, 971, 590, 590, 92, 210,
550 1, -18, 590, -1000, -1000, -1000, -1000,
551 }
552
553 var yyPgo = [...]int16{
554 0, 16, 11, 4, 12, 269, 266, 19, 261, 260,
555 8, 259, 258, 0, 2, 88, 18, 98, 257, 101,
556 15, 255, 14, 20, 6, 253, 5, 252, 248, 244,
557 242, 241, 7, 17, 240, 13, 237, 236, 1, 9,
558 234, 3, 230, 229, 227, 226, 225, 224,
559 }
560
561 var yyR1 = [...]int8{
562 0, 45, 39, 39, 46, 46, 40, 40, 40, 26,
563 26, 26, 26, 27, 27, 43, 44, 44, 28, 28,
564 28, 30, 30, 29, 29, 31, 31, 32, 34, 34,
565 33, 33, 33, 33, 33, 33, 33, 33, 47, 47,
566 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
567 16, 16, 16, 16, 16, 6, 6, 5, 5, 4,
568 4, 4, 4, 42, 42, 41, 41, 9, 9, 12,
569 12, 8, 8, 11, 11, 7, 7, 7, 7, 7,
570 10, 10, 10, 10, 10, 17, 17, 18, 18, 13,
571 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
572 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
573 13, 13, 13, 13, 13, 13, 13, 13, 19, 19,
574 14, 14, 15, 15, 1, 1, 2, 2, 3, 3,
575 35, 37, 37, 36, 36, 36, 20, 20, 38, 24,
576 25, 25, 25, 25, 21, 22, 22, 23, 23,
577 }
578
579 var yyR2 = [...]int8{
580 0, 2, 5, 2, 0, 2, 0, 3, 2, 0,
581 2, 2, 3, 1, 1, 5, 1, 3, 3, 6,
582 1, 4, 5, 1, 4, 2, 1, 4, 0, 3,
583 1, 2, 1, 3, 3, 1, 1, 1, 0, 1,
584 1, 1, 1, 3, 8, 4, 4, 6, 8, 3,
585 4, 4, 3, 4, 3, 0, 2, 2, 3, 1,
586 3, 2, 2, 1, 3, 1, 3, 0, 2, 0,
587 2, 1, 3, 1, 3, 1, 3, 2, 1, 2,
588 1, 3, 5, 4, 4, 1, 3, 0, 1, 1,
589 4, 2, 2, 2, 2, 3, 3, 3, 3, 3,
590 3, 3, 3, 3, 3, 3, 3, 3, 4, 3,
591 3, 3, 3, 3, 3, 3, 3, 5, 1, 3,
592 0, 1, 0, 2, 0, 1, 1, 2, 0, 1,
593 3, 1, 3, 0, 1, 2, 1, 3, 1, 1,
594 3, 2, 2, 1, 4, 1, 3, 1, 2,
595 }
596
597 var yyChk = [...]int16{
598 -1000, -45, -26, 28, -27, 59, 27, -32, -28, -33,
599 -44, 30, -29, -17, 52, 53, 54, 55, -43, -30,
600 -13, 51, 34, -16, 39, 48, 10, 8, 24, -24,
601 -25, -38, 40, 17, 19, 5, 32, 33, 11, 50,
602 59, -34, 13, -20, -16, 15, 25, 9, -17, 47,
603 -31, 35, 36, 7, 4, 12, 44, 8, 10, 14,
604 16, 29, 41, 42, 31, 37, 48, 49, 26, 21,
605 22, 23, 45, 46, 38, 34, 32, -17, 11, 5,
606 17, -9, -8, -7, -24, 7, 43, -13, -13, -13,
607 -13, 5, -15, -13, -19, -35, -36, -19, -13, -37,
608 -15, -13, 11, 33, -47, 62, -39, 59, -32, 37,
609 9, -17, -17, -13, -13, -17, 13, 34, -13, -13,
610 -13, -13, -13, -13, -13, -13, -13, -13, -13, -13,
611 -13, 37, -13, -13, -13, -13, -13, -13, -13, -13,
612 -13, 5, 13, 32, -6, -5, -3, -2, 9, -17,
613 -18, 13, -1, 9, 15, -24, -24, -3, 18, -23,
614 -22, -21, 30, -2, -3, -23, 20, -1, -2, 9,
615 13, -2, 6, 33, 59, -33, -40, -46, -17, -16,
616 13, -39, -13, 35, -12, -11, -10, -7, -24, 7,
617 43, -39, 6, -3, -2, -4, -13, -24, 7, 43,
618 9, 18, 13, -17, -7, -13, -38, 18, -22, 34,
619 -20, -13, 20, 20, -13, -35, -13, 56, 27, 59,
620 59, 13, -39, -13, 6, -1, 9, 13, -24, -24,
621 -4, 15, -13, -13, -14, -13, -2, -13, 37, -26,
622 59, -39, -10, -13, 13, 13, -13, 18, 13, -42,
623 -41, -38, -24, -13, 57, 15, -13, -13, -14, -3,
624 9, 15, -13, 18, 6, -41, -38,
625 }
626
627 var yyDef = [...]int16{
628 9, -2, 0, 1, 10, 11, 0, 13, 14, 28,
629 0, 0, 20, 30, 32, 35, 36, 37, 16, 23,
630 85, 0, 0, 89, 67, 0, 0, 0, 0, 40,
631 41, 42, 0, 122, 133, 122, 139, 143, 0, 138,
632 12, 38, 0, 0, 136, 0, 0, 0, 31, 0,
633 0, 0, 26, 0, 0, 0, 0, 0, 0, 0,
634 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
635 0, 0, 0, 0, 0, 0, 0, 0, 0, -2,
636 87, 0, 124, 71, 75, 78, 0, 91, 92, 93,
637 94, 128, 0, 118, 128, 131, 0, 124, 118, 134,
638 0, 118, 141, 142, 0, 39, 18, 6, 4, 0,
639 0, 33, 34, 86, 17, 0, 0, 25, 95, 96,
640 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
641 107, 0, 109, 110, 111, 112, 113, 114, 115, 116,
642 0, 69, 0, 43, 0, 128, 0, 129, 126, 88,
643 0, 0, 68, 125, 0, 77, 79, 0, 49, 0,
644 147, 145, 0, 129, 123, 0, 52, 0, 0, -2,
645 0, 135, 54, 140, 27, 29, 0, 3, 0, 137,
646 0, 24, 108, 0, 0, 124, 73, 80, 75, 78,
647 0, 21, 45, 56, 129, 57, 59, 40, 0, 0,
648 127, 46, 120, 90, 72, 76, 0, 50, 148, 0,
649 0, 119, 51, 53, 130, 132, 0, 9, 0, 8,
650 5, 0, 22, 117, 15, 70, 125, 0, 77, 79,
651 58, 0, 61, 62, 0, 121, 0, 146, 0, 0,
652 7, 19, 74, 81, 0, 0, 60, 47, 120, 128,
653 63, 65, 0, 144, 2, 0, 83, 84, 0, 0,
654 126, 0, 82, 48, 44, 64, 66,
655 }
656
657 var yyTok1 = [...]int8{
658 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
659 59, 3, 3, 3, 3, 3, 3, 3, 3, 3,
660 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
661 3, 3, 3, 3, 3, 3, 3, 4, 22, 3,
662 5, 6, 7, 8, 9, 10, 11, 12, 3, 3,
663 3, 3, 3, 3, 3, 3, 3, 3, 13, 62,
664 14, 15, 16, 3, 3, 3, 3, 3, 3, 3,
665 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
666 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
667 3, 17, 3, 18, 23, 3, 3, 3, 3, 3,
668 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
669 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
670 3, 3, 3, 19, 21, 20, 24,
671 }
672
673 var yyTok2 = [...]int8{
674 2, 3, 25, 26, 27, 28, 29, 30, 31, 32,
675 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
676 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
677 53, 54, 55, 56, 57, 58, 60, 61,
678 }
679
680 var yyTok3 = [...]int8{
681 0,
682 }
683
684 var yyErrorMessages = [...]struct {
685 state int
686 token int
687 msg string
688 }{}
689
690
691
692
693
694 var (
695 yyDebug = 0
696 yyErrorVerbose = false
697 )
698
699 type yyLexer interface {
700 Lex(lval *yySymType) int
701 Error(s string)
702 }
703
704 type yyParser interface {
705 Parse(yyLexer) int
706 Lookahead() int
707 }
708
709 type yyParserImpl struct {
710 lval yySymType
711 stack [yyInitialStackSize]yySymType
712 char int
713 }
714
715 func (p *yyParserImpl) Lookahead() int {
716 return p.char
717 }
718
719 func yyNewParser() yyParser {
720 return &yyParserImpl{}
721 }
722
723 const yyFlag = -1000
724
725 func yyTokname(c int) string {
726 if c >= 1 && c-1 < len(yyToknames) {
727 if yyToknames[c-1] != "" {
728 return yyToknames[c-1]
729 }
730 }
731 return __yyfmt__.Sprintf("tok-%v", c)
732 }
733
734 func yyStatname(s int) string {
735 if s >= 0 && s < len(yyStatenames) {
736 if yyStatenames[s] != "" {
737 return yyStatenames[s]
738 }
739 }
740 return __yyfmt__.Sprintf("state-%v", s)
741 }
742
743 func yyErrorMessage(state, lookAhead int) string {
744 const TOKSTART = 4
745
746 if !yyErrorVerbose {
747 return "syntax error"
748 }
749
750 for _, e := range yyErrorMessages {
751 if e.state == state && e.token == lookAhead {
752 return "syntax error: " + e.msg
753 }
754 }
755
756 res := "syntax error: unexpected " + yyTokname(lookAhead)
757
758
759 expected := make([]int, 0, 4)
760
761
762 base := int(yyPact[state])
763 for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
764 if n := base + tok; n >= 0 && n < yyLast && int(yyChk[int(yyAct[n])]) == tok {
765 if len(expected) == cap(expected) {
766 return res
767 }
768 expected = append(expected, tok)
769 }
770 }
771
772 if yyDef[state] == -2 {
773 i := 0
774 for yyExca[i] != -1 || int(yyExca[i+1]) != state {
775 i += 2
776 }
777
778
779 for i += 2; yyExca[i] >= 0; i += 2 {
780 tok := int(yyExca[i])
781 if tok < TOKSTART || yyExca[i+1] == 0 {
782 continue
783 }
784 if len(expected) == cap(expected) {
785 return res
786 }
787 expected = append(expected, tok)
788 }
789
790
791 if yyExca[i+1] != 0 {
792 return res
793 }
794 }
795
796 for i, tok := range expected {
797 if i == 0 {
798 res += ", expecting "
799 } else {
800 res += " or "
801 }
802 res += yyTokname(tok)
803 }
804 return res
805 }
806
807 func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
808 token = 0
809 char = lex.Lex(lval)
810 if char <= 0 {
811 token = int(yyTok1[0])
812 goto out
813 }
814 if char < len(yyTok1) {
815 token = int(yyTok1[char])
816 goto out
817 }
818 if char >= yyPrivate {
819 if char < yyPrivate+len(yyTok2) {
820 token = int(yyTok2[char-yyPrivate])
821 goto out
822 }
823 }
824 for i := 0; i < len(yyTok3); i += 2 {
825 token = int(yyTok3[i+0])
826 if token == char {
827 token = int(yyTok3[i+1])
828 goto out
829 }
830 }
831
832 out:
833 if token == 0 {
834 token = int(yyTok2[1])
835 }
836 if yyDebug >= 3 {
837 __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
838 }
839 return char, token
840 }
841
842 func yyParse(yylex yyLexer) int {
843 return yyNewParser().Parse(yylex)
844 }
845
846 func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
847 var yyn int
848 var yyVAL yySymType
849 var yyDollar []yySymType
850 _ = yyDollar
851 yyS := yyrcvr.stack[:]
852
853 Nerrs := 0
854 Errflag := 0
855 yystate := 0
856 yyrcvr.char = -1
857 yytoken := -1
858 defer func() {
859
860 yystate = -1
861 yyrcvr.char = -1
862 yytoken = -1
863 }()
864 yyp := -1
865 goto yystack
866
867 ret0:
868 return 0
869
870 ret1:
871 return 1
872
873 yystack:
874
875 if yyDebug >= 4 {
876 __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
877 }
878
879 yyp++
880 if yyp >= len(yyS) {
881 nyys := make([]yySymType, len(yyS)*2)
882 copy(nyys, yyS)
883 yyS = nyys
884 }
885 yyS[yyp] = yyVAL
886 yyS[yyp].yys = yystate
887
888 yynewstate:
889 yyn = int(yyPact[yystate])
890 if yyn <= yyFlag {
891 goto yydefault
892 }
893 if yyrcvr.char < 0 {
894 yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
895 }
896 yyn += yytoken
897 if yyn < 0 || yyn >= yyLast {
898 goto yydefault
899 }
900 yyn = int(yyAct[yyn])
901 if int(yyChk[yyn]) == yytoken {
902 yyrcvr.char = -1
903 yytoken = -1
904 yyVAL = yyrcvr.lval
905 yystate = yyn
906 if Errflag > 0 {
907 Errflag--
908 }
909 goto yystack
910 }
911
912 yydefault:
913
914 yyn = int(yyDef[yystate])
915 if yyn == -2 {
916 if yyrcvr.char < 0 {
917 yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
918 }
919
920
921 xi := 0
922 for {
923 if yyExca[xi+0] == -1 && int(yyExca[xi+1]) == yystate {
924 break
925 }
926 xi += 2
927 }
928 for xi += 2; ; xi += 2 {
929 yyn = int(yyExca[xi+0])
930 if yyn < 0 || yyn == yytoken {
931 break
932 }
933 }
934 yyn = int(yyExca[xi+1])
935 if yyn < 0 {
936 goto ret0
937 }
938 }
939 if yyn == 0 {
940
941 switch Errflag {
942 case 0:
943 yylex.Error(yyErrorMessage(yystate, yytoken))
944 Nerrs++
945 if yyDebug >= 1 {
946 __yyfmt__.Printf("%s", yyStatname(yystate))
947 __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
948 }
949 fallthrough
950
951 case 1, 2:
952 Errflag = 3
953
954
955 for yyp >= 0 {
956 yyn = int(yyPact[yyS[yyp].yys]) + yyErrCode
957 if yyn >= 0 && yyn < yyLast {
958 yystate = int(yyAct[yyn])
959 if int(yyChk[yystate]) == yyErrCode {
960 goto yystack
961 }
962 }
963
964
965 if yyDebug >= 2 {
966 __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
967 }
968 yyp--
969 }
970
971 goto ret1
972
973 case 3:
974 if yyDebug >= 2 {
975 __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
976 }
977 if yytoken == yyEofCode {
978 goto ret1
979 }
980 yyrcvr.char = -1
981 yytoken = -1
982 goto yynewstate
983 }
984 }
985
986
987 if yyDebug >= 2 {
988 __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
989 }
990
991 yynt := yyn
992 yypt := yyp
993 _ = yypt
994
995 yyp -= int(yyR2[yyn])
996
997
998 if yyp+1 >= len(yyS) {
999 nyys := make([]yySymType, len(yyS)*2)
1000 copy(nyys, yyS)
1001 yyS = nyys
1002 }
1003 yyVAL = yyS[yyp+1]
1004
1005
1006 yyn = int(yyR1[yyn])
1007 yyg := int(yyPgo[yyn])
1008 yyj := yyg + yyS[yyp].yys + 1
1009
1010 if yyj >= yyLast {
1011 yystate = int(yyAct[yyg])
1012 } else {
1013 yystate = int(yyAct[yyj])
1014 if int(yyChk[yystate]) != -yyn {
1015 yystate = int(yyAct[yyg])
1016 }
1017 }
1018
1019 switch yynt {
1020
1021 case 1:
1022 yyDollar = yyS[yypt-2 : yypt+1]
1023
1024 {
1025 yylex.(*input).file = &File{Stmt: yyDollar[1].exprs}
1026 return 0
1027 }
1028 case 2:
1029 yyDollar = yyS[yypt-5 : yypt+1]
1030
1031 {
1032 statements := yyDollar[4].exprs
1033 if yyDollar[2].exprs != nil {
1034
1035 cb := yyDollar[2].exprs[len(yyDollar[2].exprs)-1].(*CommentBlock)
1036
1037 stmt := yyDollar[4].exprs[0]
1038 start, _ := stmt.Span()
1039 if start.Line-cb.After[len(cb.After)-1].Start.Line == 1 {
1040
1041
1042 stmt.Comment().Before = cb.After
1043 yyDollar[2].exprs = yyDollar[2].exprs[:len(yyDollar[2].exprs)-1]
1044 }
1045 statements = append(yyDollar[2].exprs, yyDollar[4].exprs...)
1046 }
1047 yyVAL.exprs = statements
1048 yyVAL.lastStmt = yyDollar[4].lastStmt
1049 }
1050 case 3:
1051 yyDollar = yyS[yypt-2 : yypt+1]
1052
1053 {
1054 yyVAL.exprs = yyDollar[1].exprs
1055 }
1056 case 6:
1057 yyDollar = yyS[yypt-0 : yypt+1]
1058
1059 {
1060 yyVAL.exprs = nil
1061 yyVAL.lastStmt = nil
1062 }
1063 case 7:
1064 yyDollar = yyS[yypt-3 : yypt+1]
1065
1066 {
1067 yyVAL.exprs = yyDollar[1].exprs
1068 yyVAL.lastStmt = yyDollar[1].lastStmt
1069 if yyVAL.lastStmt == nil {
1070 cb := &CommentBlock{Start: yyDollar[2].pos}
1071 yyVAL.exprs = append(yyVAL.exprs, cb)
1072 yyVAL.lastStmt = cb
1073 }
1074 com := yyVAL.lastStmt.Comment()
1075 com.After = append(com.After, Comment{Start: yyDollar[2].pos, Token: yyDollar[2].tok})
1076 }
1077 case 8:
1078 yyDollar = yyS[yypt-2 : yypt+1]
1079
1080 {
1081 yyVAL.exprs = yyDollar[1].exprs
1082 yyVAL.lastStmt = nil
1083 }
1084 case 9:
1085 yyDollar = yyS[yypt-0 : yypt+1]
1086
1087 {
1088 yyVAL.exprs = nil
1089 yyVAL.lastStmt = nil
1090 }
1091 case 10:
1092 yyDollar = yyS[yypt-2 : yypt+1]
1093
1094 {
1095
1096
1097 if cb, ok := yyDollar[1].lastStmt.(*CommentBlock); ok {
1098 yyVAL.exprs = append(yyDollar[1].exprs[:len(yyDollar[1].exprs)-1], yyDollar[2].exprs...)
1099 yyDollar[2].exprs[0].Comment().Before = cb.After
1100 yyVAL.lastStmt = yyDollar[2].lastStmt
1101 break
1102 }
1103
1104
1105 yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[2].exprs...)
1106 yyVAL.lastStmt = yyDollar[2].lastStmt
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117 if x := yyDollar[1].lastStmt; x != nil {
1118 com := x.Comment()
1119
1120 yyDollar[2].exprs[0].Comment().Before = com.After
1121 com.After = nil
1122 }
1123 }
1124 case 11:
1125 yyDollar = yyS[yypt-2 : yypt+1]
1126
1127 {
1128
1129 yyVAL.exprs = yyDollar[1].exprs
1130 yyVAL.lastStmt = nil
1131 }
1132 case 12:
1133 yyDollar = yyS[yypt-3 : yypt+1]
1134
1135 {
1136 yyVAL.exprs = yyDollar[1].exprs
1137 yyVAL.lastStmt = yyDollar[1].lastStmt
1138 if yyVAL.lastStmt == nil {
1139 cb := &CommentBlock{Start: yyDollar[2].pos}
1140 yyVAL.exprs = append(yyVAL.exprs, cb)
1141 yyVAL.lastStmt = cb
1142 }
1143 com := yyVAL.lastStmt.Comment()
1144 com.After = append(com.After, Comment{Start: yyDollar[2].pos, Token: yyDollar[2].tok})
1145 }
1146 case 13:
1147 yyDollar = yyS[yypt-1 : yypt+1]
1148
1149 {
1150 yyVAL.exprs = yyDollar[1].exprs
1151 yyVAL.lastStmt = yyDollar[1].exprs[len(yyDollar[1].exprs)-1]
1152 }
1153 case 14:
1154 yyDollar = yyS[yypt-1 : yypt+1]
1155
1156 {
1157 yyVAL.exprs = []Expr{yyDollar[1].expr}
1158 yyVAL.lastStmt = yyDollar[1].expr
1159 if cbs := extractTrailingComments(yyDollar[1].expr); len(cbs) > 0 {
1160 yyVAL.exprs = append(yyVAL.exprs, cbs...)
1161 yyVAL.lastStmt = cbs[len(cbs)-1]
1162 if yyDollar[1].lastStmt == nil {
1163 yyVAL.lastStmt = nil
1164 }
1165 }
1166 }
1167 case 15:
1168 yyDollar = yyS[yypt-5 : yypt+1]
1169
1170 {
1171 yyVAL.def_header = &DefStmt{
1172 Function: Function{
1173 StartPos: yyDollar[1].pos,
1174 Params: yyDollar[4].exprs,
1175 },
1176 Name: yyDollar[2].tok,
1177 ForceCompact: forceCompact(yyDollar[3].pos, yyDollar[4].exprs, yyDollar[5].pos),
1178 ForceMultiLine: forceMultiLine(yyDollar[3].pos, yyDollar[4].exprs, yyDollar[5].pos),
1179 }
1180 }
1181 case 17:
1182 yyDollar = yyS[yypt-3 : yypt+1]
1183
1184 {
1185 yyDollar[1].def_header.Type = yyDollar[3].expr
1186 yyVAL.def_header = yyDollar[1].def_header
1187 }
1188 case 18:
1189 yyDollar = yyS[yypt-3 : yypt+1]
1190
1191 {
1192 yyDollar[1].def_header.Function.Body = yyDollar[3].exprs
1193 yyDollar[1].def_header.ColonPos = yyDollar[2].pos
1194 yyVAL.expr = yyDollar[1].def_header
1195 yyVAL.lastStmt = yyDollar[3].lastStmt
1196 }
1197 case 19:
1198 yyDollar = yyS[yypt-6 : yypt+1]
1199
1200 {
1201 yyVAL.expr = &ForStmt{
1202 For: yyDollar[1].pos,
1203 Vars: yyDollar[2].expr,
1204 X: yyDollar[4].expr,
1205 Body: yyDollar[6].exprs,
1206 }
1207 yyVAL.lastStmt = yyDollar[6].lastStmt
1208 }
1209 case 20:
1210 yyDollar = yyS[yypt-1 : yypt+1]
1211
1212 {
1213 yyVAL.expr = yyDollar[1].ifstmt
1214 yyVAL.lastStmt = yyDollar[1].lastStmt
1215 }
1216 case 21:
1217 yyDollar = yyS[yypt-4 : yypt+1]
1218
1219 {
1220 yyVAL.ifstmt = &IfStmt{
1221 If: yyDollar[1].pos,
1222 Cond: yyDollar[2].expr,
1223 True: yyDollar[4].exprs,
1224 }
1225 yyVAL.lastStmt = yyDollar[4].lastStmt
1226 }
1227 case 22:
1228 yyDollar = yyS[yypt-5 : yypt+1]
1229
1230 {
1231 yyVAL.ifstmt = yyDollar[1].ifstmt
1232 inner := yyDollar[1].ifstmt
1233 for len(inner.False) == 1 {
1234 inner = inner.False[0].(*IfStmt)
1235 }
1236 inner.ElsePos = End{Pos: yyDollar[2].pos}
1237 inner.False = []Expr{
1238 &IfStmt{
1239 If: yyDollar[2].pos,
1240 Cond: yyDollar[3].expr,
1241 True: yyDollar[5].exprs,
1242 },
1243 }
1244 yyVAL.lastStmt = yyDollar[5].lastStmt
1245 }
1246 case 24:
1247 yyDollar = yyS[yypt-4 : yypt+1]
1248
1249 {
1250 yyVAL.ifstmt = yyDollar[1].ifstmt
1251 inner := yyDollar[1].ifstmt
1252 for len(inner.False) == 1 {
1253 inner = inner.False[0].(*IfStmt)
1254 }
1255 inner.ElsePos = End{Pos: yyDollar[2].pos}
1256 inner.False = yyDollar[4].exprs
1257 yyVAL.lastStmt = yyDollar[4].lastStmt
1258 }
1259 case 27:
1260 yyDollar = yyS[yypt-4 : yypt+1]
1261
1262 {
1263 yyVAL.exprs = append([]Expr{yyDollar[1].expr}, yyDollar[2].exprs...)
1264 yyVAL.lastStmt = yyVAL.exprs[len(yyVAL.exprs)-1]
1265 }
1266 case 28:
1267 yyDollar = yyS[yypt-0 : yypt+1]
1268
1269 {
1270 yyVAL.exprs = []Expr{}
1271 }
1272 case 29:
1273 yyDollar = yyS[yypt-3 : yypt+1]
1274
1275 {
1276 yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr)
1277 }
1278 case 31:
1279 yyDollar = yyS[yypt-2 : yypt+1]
1280
1281 {
1282 yyVAL.expr = &ReturnStmt{
1283 Return: yyDollar[1].pos,
1284 Result: yyDollar[2].expr,
1285 }
1286 }
1287 case 32:
1288 yyDollar = yyS[yypt-1 : yypt+1]
1289
1290 {
1291 yyVAL.expr = &ReturnStmt{
1292 Return: yyDollar[1].pos,
1293 }
1294 }
1295 case 33:
1296 yyDollar = yyS[yypt-3 : yypt+1]
1297
1298 {
1299 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1300 }
1301 case 34:
1302 yyDollar = yyS[yypt-3 : yypt+1]
1303
1304 {
1305 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1306 }
1307 case 35:
1308 yyDollar = yyS[yypt-1 : yypt+1]
1309
1310 {
1311 yyVAL.expr = &BranchStmt{
1312 Token: yyDollar[1].tok,
1313 TokenPos: yyDollar[1].pos,
1314 }
1315 }
1316 case 36:
1317 yyDollar = yyS[yypt-1 : yypt+1]
1318
1319 {
1320 yyVAL.expr = &BranchStmt{
1321 Token: yyDollar[1].tok,
1322 TokenPos: yyDollar[1].pos,
1323 }
1324 }
1325 case 37:
1326 yyDollar = yyS[yypt-1 : yypt+1]
1327
1328 {
1329 yyVAL.expr = &BranchStmt{
1330 Token: yyDollar[1].tok,
1331 TokenPos: yyDollar[1].pos,
1332 }
1333 }
1334 case 42:
1335 yyDollar = yyS[yypt-1 : yypt+1]
1336
1337 {
1338 yyVAL.expr = yyDollar[1].string
1339 }
1340 case 43:
1341 yyDollar = yyS[yypt-3 : yypt+1]
1342
1343 {
1344 yyVAL.expr = &DotExpr{
1345 X: yyDollar[1].expr,
1346 Dot: yyDollar[2].pos,
1347 NamePos: yyDollar[3].pos,
1348 Name: yyDollar[3].tok,
1349 }
1350 }
1351 case 44:
1352 yyDollar = yyS[yypt-8 : yypt+1]
1353
1354 {
1355 load := &LoadStmt{
1356 Load: yyDollar[1].pos,
1357 Module: yyDollar[4].string,
1358 Rparen: End{Pos: yyDollar[8].pos},
1359 ForceCompact: yyDollar[2].pos.Line == yyDollar[8].pos.Line,
1360 }
1361 for _, arg := range yyDollar[6].loadargs {
1362 load.From = append(load.From, &arg.from)
1363 load.To = append(load.To, &arg.to)
1364 }
1365 yyVAL.expr = load
1366 }
1367 case 45:
1368 yyDollar = yyS[yypt-4 : yypt+1]
1369
1370 {
1371 yyVAL.expr = &CallExpr{
1372 X: yyDollar[1].expr,
1373 ListStart: yyDollar[2].pos,
1374 List: yyDollar[3].exprs,
1375 End: End{Pos: yyDollar[4].pos},
1376 ForceCompact: forceCompact(yyDollar[2].pos, yyDollar[3].exprs, yyDollar[4].pos),
1377 ForceMultiLine: forceMultiLine(yyDollar[2].pos, yyDollar[3].exprs, yyDollar[4].pos),
1378 }
1379 }
1380 case 46:
1381 yyDollar = yyS[yypt-4 : yypt+1]
1382
1383 {
1384 yyVAL.expr = &IndexExpr{
1385 X: yyDollar[1].expr,
1386 IndexStart: yyDollar[2].pos,
1387 Y: yyDollar[3].expr,
1388 End: yyDollar[4].pos,
1389 }
1390 }
1391 case 47:
1392 yyDollar = yyS[yypt-6 : yypt+1]
1393
1394 {
1395 yyVAL.expr = &SliceExpr{
1396 X: yyDollar[1].expr,
1397 SliceStart: yyDollar[2].pos,
1398 From: yyDollar[3].expr,
1399 FirstColon: yyDollar[4].pos,
1400 To: yyDollar[5].expr,
1401 End: yyDollar[6].pos,
1402 }
1403 }
1404 case 48:
1405 yyDollar = yyS[yypt-8 : yypt+1]
1406
1407 {
1408 yyVAL.expr = &SliceExpr{
1409 X: yyDollar[1].expr,
1410 SliceStart: yyDollar[2].pos,
1411 From: yyDollar[3].expr,
1412 FirstColon: yyDollar[4].pos,
1413 To: yyDollar[5].expr,
1414 SecondColon: yyDollar[6].pos,
1415 Step: yyDollar[7].expr,
1416 End: yyDollar[8].pos,
1417 }
1418 }
1419 case 49:
1420 yyDollar = yyS[yypt-3 : yypt+1]
1421
1422 {
1423 yyVAL.expr = &ListExpr{
1424 Start: yyDollar[1].pos,
1425 List: yyDollar[2].exprs,
1426 End: End{Pos: yyDollar[3].pos},
1427 ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos),
1428 }
1429 }
1430 case 50:
1431 yyDollar = yyS[yypt-4 : yypt+1]
1432
1433 {
1434 yyVAL.expr = &Comprehension{
1435 Curly: false,
1436 Lbrack: yyDollar[1].pos,
1437 Body: yyDollar[2].expr,
1438 Clauses: yyDollar[3].exprs,
1439 End: End{Pos: yyDollar[4].pos},
1440 ForceMultiLine: forceMultiLineComprehension(yyDollar[1].pos, yyDollar[2].expr, yyDollar[3].exprs, yyDollar[4].pos),
1441 }
1442 }
1443 case 51:
1444 yyDollar = yyS[yypt-4 : yypt+1]
1445
1446 {
1447 yyVAL.expr = &Comprehension{
1448 Curly: true,
1449 Lbrack: yyDollar[1].pos,
1450 Body: yyDollar[2].kv,
1451 Clauses: yyDollar[3].exprs,
1452 End: End{Pos: yyDollar[4].pos},
1453 ForceMultiLine: forceMultiLineComprehension(yyDollar[1].pos, yyDollar[2].kv, yyDollar[3].exprs, yyDollar[4].pos),
1454 }
1455 }
1456 case 52:
1457 yyDollar = yyS[yypt-3 : yypt+1]
1458
1459 {
1460 exprValues := make([]Expr, 0, len(yyDollar[2].kvs))
1461 for _, kv := range yyDollar[2].kvs {
1462 exprValues = append(exprValues, Expr(kv))
1463 }
1464 yyVAL.expr = &DictExpr{
1465 Start: yyDollar[1].pos,
1466 List: yyDollar[2].kvs,
1467 End: End{Pos: yyDollar[3].pos},
1468 ForceMultiLine: forceMultiLine(yyDollar[1].pos, exprValues, yyDollar[3].pos),
1469 }
1470 }
1471 case 53:
1472 yyDollar = yyS[yypt-4 : yypt+1]
1473
1474 {
1475 yyVAL.expr = &SetExpr{
1476 Start: yyDollar[1].pos,
1477 List: yyDollar[2].exprs,
1478 End: End{Pos: yyDollar[4].pos},
1479 ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[4].pos),
1480 }
1481 }
1482 case 54:
1483 yyDollar = yyS[yypt-3 : yypt+1]
1484
1485 {
1486 if len(yyDollar[2].exprs) == 1 && yyDollar[2].comma.Line == 0 {
1487
1488 yyVAL.expr = &ParenExpr{
1489 Start: yyDollar[1].pos,
1490 X: yyDollar[2].exprs[0],
1491 End: End{Pos: yyDollar[3].pos},
1492 ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos),
1493 }
1494 } else {
1495 yyVAL.expr = &TupleExpr{
1496 Start: yyDollar[1].pos,
1497 List: yyDollar[2].exprs,
1498 End: End{Pos: yyDollar[3].pos},
1499 ForceCompact: forceCompact(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos),
1500 ForceMultiLine: forceMultiLine(yyDollar[1].pos, yyDollar[2].exprs, yyDollar[3].pos),
1501 }
1502 }
1503 }
1504 case 55:
1505 yyDollar = yyS[yypt-0 : yypt+1]
1506
1507 {
1508 yyVAL.exprs = nil
1509 }
1510 case 56:
1511 yyDollar = yyS[yypt-2 : yypt+1]
1512
1513 {
1514 yyVAL.exprs = yyDollar[1].exprs
1515 }
1516 case 57:
1517 yyDollar = yyS[yypt-2 : yypt+1]
1518
1519 {
1520 yyVAL.exprs = []Expr{yyDollar[2].expr}
1521 }
1522 case 58:
1523 yyDollar = yyS[yypt-3 : yypt+1]
1524
1525 {
1526 yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr)
1527 }
1528 case 60:
1529 yyDollar = yyS[yypt-3 : yypt+1]
1530
1531 {
1532 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1533 }
1534 case 61:
1535 yyDollar = yyS[yypt-2 : yypt+1]
1536
1537 {
1538 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr)
1539 }
1540 case 62:
1541 yyDollar = yyS[yypt-2 : yypt+1]
1542
1543 {
1544 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr)
1545 }
1546 case 63:
1547 yyDollar = yyS[yypt-1 : yypt+1]
1548
1549 {
1550 yyVAL.loadargs = []*struct {
1551 from Ident
1552 to Ident
1553 }{yyDollar[1].loadarg}
1554 }
1555 case 64:
1556 yyDollar = yyS[yypt-3 : yypt+1]
1557
1558 {
1559 yyDollar[1].loadargs = append(yyDollar[1].loadargs, yyDollar[3].loadarg)
1560 yyVAL.loadargs = yyDollar[1].loadargs
1561 }
1562 case 65:
1563 yyDollar = yyS[yypt-1 : yypt+1]
1564
1565 {
1566 start := yyDollar[1].string.Start.add("'")
1567 if yyDollar[1].string.TripleQuote {
1568 start = start.add("''")
1569 }
1570 yyVAL.loadarg = &struct {
1571 from Ident
1572 to Ident
1573 }{
1574 from: Ident{
1575 Name: yyDollar[1].string.Value,
1576 NamePos: start,
1577 },
1578 to: Ident{
1579 Name: yyDollar[1].string.Value,
1580 NamePos: start,
1581 },
1582 }
1583 }
1584 case 66:
1585 yyDollar = yyS[yypt-3 : yypt+1]
1586
1587 {
1588 start := yyDollar[3].string.Start.add("'")
1589 if yyDollar[3].string.TripleQuote {
1590 start = start.add("''")
1591 }
1592 yyVAL.loadarg = &struct {
1593 from Ident
1594 to Ident
1595 }{
1596 from: Ident{
1597 Name: yyDollar[3].string.Value,
1598 NamePos: start,
1599 },
1600 to: *yyDollar[1].expr.(*Ident),
1601 }
1602 }
1603 case 67:
1604 yyDollar = yyS[yypt-0 : yypt+1]
1605
1606 {
1607 yyVAL.exprs = nil
1608 }
1609 case 68:
1610 yyDollar = yyS[yypt-2 : yypt+1]
1611
1612 {
1613 yyVAL.exprs = yyDollar[1].exprs
1614 }
1615 case 69:
1616 yyDollar = yyS[yypt-0 : yypt+1]
1617
1618 {
1619 yyVAL.exprs = nil
1620 }
1621 case 70:
1622 yyDollar = yyS[yypt-2 : yypt+1]
1623
1624 {
1625 yyVAL.exprs = yyDollar[1].exprs
1626 }
1627 case 71:
1628 yyDollar = yyS[yypt-1 : yypt+1]
1629
1630 {
1631 yyVAL.exprs = []Expr{yyDollar[1].expr}
1632 }
1633 case 72:
1634 yyDollar = yyS[yypt-3 : yypt+1]
1635
1636 {
1637 yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr)
1638 }
1639 case 73:
1640 yyDollar = yyS[yypt-1 : yypt+1]
1641
1642 {
1643 yyVAL.exprs = []Expr{yyDollar[1].expr}
1644 }
1645 case 74:
1646 yyDollar = yyS[yypt-3 : yypt+1]
1647
1648 {
1649 yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr)
1650 }
1651 case 76:
1652 yyDollar = yyS[yypt-3 : yypt+1]
1653
1654 {
1655 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1656 }
1657 case 77:
1658 yyDollar = yyS[yypt-2 : yypt+1]
1659
1660 {
1661 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr)
1662 }
1663 case 78:
1664 yyDollar = yyS[yypt-1 : yypt+1]
1665
1666 {
1667 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, nil)
1668 }
1669 case 79:
1670 yyDollar = yyS[yypt-2 : yypt+1]
1671
1672 {
1673 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr)
1674 }
1675 case 81:
1676 yyDollar = yyS[yypt-3 : yypt+1]
1677
1678 {
1679 yyVAL.expr = typed(yyDollar[1].expr, yyDollar[3].expr)
1680 }
1681 case 82:
1682 yyDollar = yyS[yypt-5 : yypt+1]
1683
1684 {
1685 yyVAL.expr = binary(typed(yyDollar[1].expr, yyDollar[3].expr), yyDollar[4].pos, yyDollar[4].tok, yyDollar[5].expr)
1686 }
1687 case 83:
1688 yyDollar = yyS[yypt-4 : yypt+1]
1689
1690 {
1691 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, typed(yyDollar[2].expr, yyDollar[4].expr))
1692 }
1693 case 84:
1694 yyDollar = yyS[yypt-4 : yypt+1]
1695
1696 {
1697 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, typed(yyDollar[2].expr, yyDollar[4].expr))
1698 }
1699 case 86:
1700 yyDollar = yyS[yypt-3 : yypt+1]
1701
1702 {
1703 tuple, ok := yyDollar[1].expr.(*TupleExpr)
1704 if !ok || !tuple.NoBrackets {
1705 tuple = &TupleExpr{
1706 List: []Expr{yyDollar[1].expr},
1707 NoBrackets: true,
1708 ForceCompact: true,
1709 ForceMultiLine: false,
1710 }
1711 }
1712 tuple.List = append(tuple.List, yyDollar[3].expr)
1713 yyVAL.expr = tuple
1714 }
1715 case 87:
1716 yyDollar = yyS[yypt-0 : yypt+1]
1717
1718 {
1719 yyVAL.expr = nil
1720 }
1721 case 90:
1722 yyDollar = yyS[yypt-4 : yypt+1]
1723
1724 {
1725 yyVAL.expr = &LambdaExpr{
1726 Function: Function{
1727 StartPos: yyDollar[1].pos,
1728 Params: yyDollar[2].exprs,
1729 Body: []Expr{yyDollar[4].expr},
1730 },
1731 }
1732 }
1733 case 91:
1734 yyDollar = yyS[yypt-2 : yypt+1]
1735
1736 {
1737 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr)
1738 }
1739 case 92:
1740 yyDollar = yyS[yypt-2 : yypt+1]
1741
1742 {
1743 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr)
1744 }
1745 case 93:
1746 yyDollar = yyS[yypt-2 : yypt+1]
1747
1748 {
1749 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr)
1750 }
1751 case 94:
1752 yyDollar = yyS[yypt-2 : yypt+1]
1753
1754 {
1755 yyVAL.expr = unary(yyDollar[1].pos, yyDollar[1].tok, yyDollar[2].expr)
1756 }
1757 case 95:
1758 yyDollar = yyS[yypt-3 : yypt+1]
1759
1760 {
1761 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1762 }
1763 case 96:
1764 yyDollar = yyS[yypt-3 : yypt+1]
1765
1766 {
1767 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1768 }
1769 case 97:
1770 yyDollar = yyS[yypt-3 : yypt+1]
1771
1772 {
1773 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1774 }
1775 case 98:
1776 yyDollar = yyS[yypt-3 : yypt+1]
1777
1778 {
1779 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1780 }
1781 case 99:
1782 yyDollar = yyS[yypt-3 : yypt+1]
1783
1784 {
1785 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1786 }
1787 case 100:
1788 yyDollar = yyS[yypt-3 : yypt+1]
1789
1790 {
1791 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1792 }
1793 case 101:
1794 yyDollar = yyS[yypt-3 : yypt+1]
1795
1796 {
1797 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1798 }
1799 case 102:
1800 yyDollar = yyS[yypt-3 : yypt+1]
1801
1802 {
1803 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1804 }
1805 case 103:
1806 yyDollar = yyS[yypt-3 : yypt+1]
1807
1808 {
1809 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1810 }
1811 case 104:
1812 yyDollar = yyS[yypt-3 : yypt+1]
1813
1814 {
1815 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1816 }
1817 case 105:
1818 yyDollar = yyS[yypt-3 : yypt+1]
1819
1820 {
1821 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1822 }
1823 case 106:
1824 yyDollar = yyS[yypt-3 : yypt+1]
1825
1826 {
1827 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1828 }
1829 case 107:
1830 yyDollar = yyS[yypt-3 : yypt+1]
1831
1832 {
1833 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1834 }
1835 case 108:
1836 yyDollar = yyS[yypt-4 : yypt+1]
1837
1838 {
1839 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, "not in", yyDollar[4].expr)
1840 }
1841 case 109:
1842 yyDollar = yyS[yypt-3 : yypt+1]
1843
1844 {
1845 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1846 }
1847 case 110:
1848 yyDollar = yyS[yypt-3 : yypt+1]
1849
1850 {
1851 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1852 }
1853 case 111:
1854 yyDollar = yyS[yypt-3 : yypt+1]
1855
1856 {
1857 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1858 }
1859 case 112:
1860 yyDollar = yyS[yypt-3 : yypt+1]
1861
1862 {
1863 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1864 }
1865 case 113:
1866 yyDollar = yyS[yypt-3 : yypt+1]
1867
1868 {
1869 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1870 }
1871 case 114:
1872 yyDollar = yyS[yypt-3 : yypt+1]
1873
1874 {
1875 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1876 }
1877 case 115:
1878 yyDollar = yyS[yypt-3 : yypt+1]
1879
1880 {
1881 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1882 }
1883 case 116:
1884 yyDollar = yyS[yypt-3 : yypt+1]
1885
1886 {
1887 if b, ok := yyDollar[3].expr.(*UnaryExpr); ok && b.Op == "not" {
1888 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, "is not", b.X)
1889 } else {
1890 yyVAL.expr = binary(yyDollar[1].expr, yyDollar[2].pos, yyDollar[2].tok, yyDollar[3].expr)
1891 }
1892 }
1893 case 117:
1894 yyDollar = yyS[yypt-5 : yypt+1]
1895
1896 {
1897 yyVAL.expr = &ConditionalExpr{
1898 Then: yyDollar[1].expr,
1899 IfStart: yyDollar[2].pos,
1900 Test: yyDollar[3].expr,
1901 ElseStart: yyDollar[4].pos,
1902 Else: yyDollar[5].expr,
1903 }
1904 }
1905 case 118:
1906 yyDollar = yyS[yypt-1 : yypt+1]
1907
1908 {
1909 yyVAL.exprs = []Expr{yyDollar[1].expr}
1910 }
1911 case 119:
1912 yyDollar = yyS[yypt-3 : yypt+1]
1913
1914 {
1915 yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr)
1916 }
1917 case 120:
1918 yyDollar = yyS[yypt-0 : yypt+1]
1919
1920 {
1921 yyVAL.expr = nil
1922 }
1923 case 122:
1924 yyDollar = yyS[yypt-0 : yypt+1]
1925
1926 {
1927 yyVAL.exprs, yyVAL.comma = nil, Position{}
1928 }
1929 case 123:
1930 yyDollar = yyS[yypt-2 : yypt+1]
1931
1932 {
1933 yyVAL.exprs, yyVAL.comma = yyDollar[1].exprs, yyDollar[2].pos
1934 }
1935 case 124:
1936 yyDollar = yyS[yypt-0 : yypt+1]
1937
1938 {
1939 yyVAL.pos = Position{}
1940 }
1941 case 127:
1942 yyDollar = yyS[yypt-2 : yypt+1]
1943
1944 {
1945 yyVAL.pos = yyDollar[1].pos
1946 }
1947 case 128:
1948 yyDollar = yyS[yypt-0 : yypt+1]
1949
1950 {
1951 yyVAL.pos = Position{}
1952 }
1953 case 130:
1954 yyDollar = yyS[yypt-3 : yypt+1]
1955
1956 {
1957 yyVAL.kv = &KeyValueExpr{
1958 Key: yyDollar[1].expr,
1959 Colon: yyDollar[2].pos,
1960 Value: yyDollar[3].expr,
1961 }
1962 }
1963 case 131:
1964 yyDollar = yyS[yypt-1 : yypt+1]
1965
1966 {
1967 yyVAL.kvs = []*KeyValueExpr{yyDollar[1].kv}
1968 }
1969 case 132:
1970 yyDollar = yyS[yypt-3 : yypt+1]
1971
1972 {
1973 yyVAL.kvs = append(yyDollar[1].kvs, yyDollar[3].kv)
1974 }
1975 case 133:
1976 yyDollar = yyS[yypt-0 : yypt+1]
1977
1978 {
1979 yyVAL.kvs = nil
1980 }
1981 case 134:
1982 yyDollar = yyS[yypt-1 : yypt+1]
1983
1984 {
1985 yyVAL.kvs = yyDollar[1].kvs
1986 }
1987 case 135:
1988 yyDollar = yyS[yypt-2 : yypt+1]
1989
1990 {
1991 yyVAL.kvs = yyDollar[1].kvs
1992 }
1993 case 137:
1994 yyDollar = yyS[yypt-3 : yypt+1]
1995
1996 {
1997 tuple, ok := yyDollar[1].expr.(*TupleExpr)
1998 if !ok || !tuple.NoBrackets {
1999 tuple = &TupleExpr{
2000 List: []Expr{yyDollar[1].expr},
2001 NoBrackets: true,
2002 ForceCompact: true,
2003 ForceMultiLine: false,
2004 }
2005 }
2006 tuple.List = append(tuple.List, yyDollar[3].expr)
2007 yyVAL.expr = tuple
2008 }
2009 case 138:
2010 yyDollar = yyS[yypt-1 : yypt+1]
2011
2012 {
2013 yyVAL.string = &StringExpr{
2014 Start: yyDollar[1].pos,
2015 Value: yyDollar[1].str,
2016 TripleQuote: yyDollar[1].triple,
2017 End: yyDollar[1].pos.add(yyDollar[1].tok),
2018 Token: yyDollar[1].tok,
2019 }
2020 }
2021 case 139:
2022 yyDollar = yyS[yypt-1 : yypt+1]
2023
2024 {
2025 yyVAL.expr = &Ident{NamePos: yyDollar[1].pos, Name: yyDollar[1].tok}
2026 }
2027 case 140:
2028 yyDollar = yyS[yypt-3 : yypt+1]
2029
2030 {
2031 yyVAL.expr = &LiteralExpr{Start: yyDollar[1].pos, Token: yyDollar[1].tok + "." + yyDollar[3].tok}
2032 }
2033 case 141:
2034 yyDollar = yyS[yypt-2 : yypt+1]
2035
2036 {
2037 yyVAL.expr = &LiteralExpr{Start: yyDollar[1].pos, Token: yyDollar[1].tok + "."}
2038 }
2039 case 142:
2040 yyDollar = yyS[yypt-2 : yypt+1]
2041
2042 {
2043 yyVAL.expr = &LiteralExpr{Start: yyDollar[1].pos, Token: "." + yyDollar[2].tok}
2044 }
2045 case 143:
2046 yyDollar = yyS[yypt-1 : yypt+1]
2047
2048 {
2049 yyVAL.expr = &LiteralExpr{Start: yyDollar[1].pos, Token: yyDollar[1].tok}
2050 }
2051 case 144:
2052 yyDollar = yyS[yypt-4 : yypt+1]
2053
2054 {
2055 yyVAL.expr = &ForClause{
2056 For: yyDollar[1].pos,
2057 Vars: yyDollar[2].expr,
2058 In: yyDollar[3].pos,
2059 X: yyDollar[4].expr,
2060 }
2061 }
2062 case 145:
2063 yyDollar = yyS[yypt-1 : yypt+1]
2064
2065 {
2066 yyVAL.exprs = []Expr{yyDollar[1].expr}
2067 }
2068 case 146:
2069 yyDollar = yyS[yypt-3 : yypt+1]
2070
2071 {
2072 yyVAL.exprs = append(yyDollar[1].exprs, &IfClause{
2073 If: yyDollar[2].pos,
2074 Cond: yyDollar[3].expr,
2075 })
2076 }
2077 case 147:
2078 yyDollar = yyS[yypt-1 : yypt+1]
2079
2080 {
2081 yyVAL.exprs = yyDollar[1].exprs
2082 }
2083 case 148:
2084 yyDollar = yyS[yypt-2 : yypt+1]
2085
2086 {
2087 yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[2].exprs...)
2088 }
2089 }
2090 goto yystack
2091 }
2092
View as plain text