From b4e92cee97b968f1799be27bed8cec62ae403725 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 1 Jul 2013 20:32:36 -0400 Subject: [PATCH] cmd/gc: support x[i:j:k] Design doc at golang.org/s/go12slice. This is an experimental feature and may not be included in the release. R=golang-dev, r CC=golang-dev https://golang.org/cl/10743046 --- src/cmd/5g/cgen.c | 4 + src/cmd/6g/cgen.c | 4 + src/cmd/8g/cgen.c | 4 + src/cmd/gc/esc.c | 2 + src/cmd/gc/fmt.c | 4 + src/cmd/gc/go.h | 2 + src/cmd/gc/go.y | 17 + src/cmd/gc/racewalk.c | 2 + src/cmd/gc/typecheck.c | 134 ++- src/cmd/gc/walk.c | 86 +- src/cmd/gc/y.tab.c | 2080 ++++++++++++++++++----------------- src/cmd/gc/yerr.h | 2 +- test/fixedbugs/issue4251.go | 6 +- test/slice3.go | 156 +++ test/slice3err.go | 121 ++ 15 files changed, 1533 insertions(+), 1091 deletions(-) create mode 100644 test/slice3.go create mode 100644 test/slice3err.go diff --git a/src/cmd/5g/cgen.c b/src/cmd/5g/cgen.c index 1620f410ad..997eae7cfe 100644 --- a/src/cmd/5g/cgen.c +++ b/src/cmd/5g/cgen.c @@ -34,6 +34,8 @@ cgen(Node *n, Node *res) case OSLICE: case OSLICEARR: case OSLICESTR: + case OSLICE3: + case OSLICE3ARR: if (res->op != ONAME || !res->addable) { tempname(&n1, n->type); cgen_slice(n, &n1); @@ -629,6 +631,8 @@ agen(Node *n, Node *res) case OSLICE: case OSLICEARR: case OSLICESTR: + case OSLICE3: + case OSLICE3ARR: tempname(&n1, n->type); cgen_slice(n, &n1); agen(&n1, res); diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c index 884ccff063..d2b51f0eb6 100644 --- a/src/cmd/6g/cgen.c +++ b/src/cmd/6g/cgen.c @@ -37,6 +37,8 @@ cgen(Node *n, Node *res) case OSLICE: case OSLICEARR: case OSLICESTR: + case OSLICE3: + case OSLICE3ARR: if (res->op != ONAME || !res->addable) { tempname(&n1, n->type); cgen_slice(n, &n1); @@ -841,6 +843,8 @@ agen(Node *n, Node *res) case OSLICE: case OSLICEARR: case OSLICESTR: + case OSLICE3: + case OSLICE3ARR: tempname(&n1, n->type); cgen_slice(n, &n1); agen(&n1, res); diff --git a/src/cmd/8g/cgen.c b/src/cmd/8g/cgen.c index 0294a4299b..9e797710d6 100644 --- a/src/cmd/8g/cgen.c +++ b/src/cmd/8g/cgen.c @@ -67,6 +67,8 @@ cgen(Node *n, Node *res) case OSLICE: case OSLICEARR: case OSLICESTR: + case OSLICE3: + case OSLICE3ARR: if (res->op != ONAME || !res->addable) { tempname(&n1, n->type); cgen_slice(n, &n1); @@ -547,6 +549,8 @@ agen(Node *n, Node *res) case OSLICE: case OSLICEARR: case OSLICESTR: + case OSLICE3: + case OSLICE3ARR: tempname(&n1, n->type); cgen_slice(n, &n1); agen(&n1, res); diff --git a/src/cmd/gc/esc.c b/src/cmd/gc/esc.c index 497645ab59..b84b66ef14 100644 --- a/src/cmd/gc/esc.c +++ b/src/cmd/gc/esc.c @@ -749,6 +749,8 @@ escassign(EscState *e, Node *dst, Node *src) case ODOTTYPE2: case OSLICE: case OSLICEARR: + case OSLICE3: + case OSLICE3ARR: // Conversions, field access, slice all preserve the input value. escassign(e, dst, src->left); break; diff --git a/src/cmd/gc/fmt.c b/src/cmd/gc/fmt.c index c7519c9762..cf9c3538d4 100644 --- a/src/cmd/gc/fmt.c +++ b/src/cmd/gc/fmt.c @@ -1022,6 +1022,8 @@ static int opprec[] = { [OSLICE] = 8, [OSLICESTR] = 8, [OSLICEARR] = 8, + [OSLICE3] = 8, + [OSLICE3ARR] = 8, [ODOTINTER] = 8, [ODOTMETH] = 8, [ODOTPTR] = 8, @@ -1295,6 +1297,8 @@ exprfmt(Fmt *f, Node *n, int prec) case OSLICE: case OSLICESTR: case OSLICEARR: + case OSLICE3: + case OSLICE3ARR: exprfmt(f, n->left, nprec); return fmtprint(f, "[%N]", n->right); diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index 518b992d78..db25013cca 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -520,6 +520,8 @@ enum OSLICE, // v[1:2], typechecking may convert to a more specfic OSLICEXXX. OSLICEARR, // a[1:2] OSLICESTR, // s[1:2] + OSLICE3, // v[1:2:3], typechecking may convert to OSLICE3ARR. + OSLICE3ARR, // a[1:2:3] ORECOVER, // recover ORECV, // <-c ORUNESTR, // string(i) diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index 29cd37008d..ad192ac374 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -23,6 +23,8 @@ #include #include "go.h" +static int isrelease = -1; + static void fixlbrace(int); %} %union { @@ -950,6 +952,21 @@ pexpr_no_paren: { $$ = nod(OSLICE, $1, nod(OKEY, $3, $5)); } +| pexpr '[' oexpr ':' oexpr ':' oexpr ']' + { + // Make sure we don't accidentally release this experimental feature. + // http://golang.org/s/go12slice. + if(isrelease < 0) + isrelease = strstr(getgoversion(), "release") != nil; + if(isrelease) + yyerror("3-index slice not available in release"); + + if($5 == N) + yyerror("middle index required in 3-index slice"); + if($7 == N) + yyerror("final index required in 3-index slice"); + $$ = nod(OSLICE3, $1, nod(OKEY, $3, nod(OKEY, $5, $7))); + } | pseudocall | convtype '(' expr ocomma ')' { diff --git a/src/cmd/gc/racewalk.c b/src/cmd/gc/racewalk.c index 7d5196bf5c..dbb11d7b89 100644 --- a/src/cmd/gc/racewalk.c +++ b/src/cmd/gc/racewalk.c @@ -304,6 +304,8 @@ racewalknode(Node **np, NodeList **init, int wr, int skip) case OSLICE: case OSLICEARR: + case OSLICE3: + case OSLICE3ARR: // Seems to only lead to double instrumentation. //racewalknode(&n->left, init, 0, 0); goto ret; diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index 29fc430cbd..d4dc0813da 100644 --- a/src/cmd/gc/typecheck.c +++ b/src/cmd/gc/typecheck.c @@ -33,6 +33,8 @@ static void stringtoarraylit(Node**); static Node* resolve(Node*); static void checkdefergo(Node*); static int checkmake(Type*, char*, Node*); +static int checksliceindex(Node*, Type*); +static int checksliceconst(Node*, Node*); static NodeList* typecheckdefstack; @@ -303,7 +305,7 @@ static void typecheck1(Node **np, int top) { int et, aop, op, ptr; - Node *n, *l, *r; + Node *n, *l, *r, *lo, *mid, *hi; NodeList *args; int ok, ntop; Type *t, *tp, *missing, *have, *badtype; @@ -993,54 +995,63 @@ reswitch: yyerror("cannot slice %N (type %T)", l, t); goto error; } - if(n->right->left != N) { - if((t = n->right->left->type) == T) - goto error; - if(!isint[t->etype]) { - yyerror("invalid slice index %N (type %T)", n->right->left, t); + if((lo = n->right->left) != N && checksliceindex(lo, tp) < 0) + goto error; + if((hi = n->right->right) != N && checksliceindex(hi, tp) < 0) + goto error; + if(checksliceconst(lo, hi) < 0) + goto error; + goto ret; + + case OSLICE3: + ok |= Erv; + typecheck(&n->left, top); + typecheck(&n->right->left, Erv); + typecheck(&n->right->right->left, Erv); + typecheck(&n->right->right->right, Erv); + defaultlit(&n->left, T); + indexlit(&n->right->left); + indexlit(&n->right->right->left); + indexlit(&n->right->right->right); + l = n->left; + if(isfixedarray(l->type)) { + if(!islvalue(n->left)) { + yyerror("invalid operation %N (slice of unaddressable value)", n); goto error; } - if(n->right->left->op == OLITERAL) { - if(mpgetfix(n->right->left->val.u.xval) < 0) { - yyerror("invalid slice index %N (index must be non-negative)", n->right->left); - goto error; - } else if(tp != nil && tp->bound > 0 && mpgetfix(n->right->left->val.u.xval) > tp->bound) { - yyerror("invalid slice index %N (out of bounds for %d-element array)", n->right->left, tp->bound); - goto error; - } else if(mpcmpfixfix(n->right->left->val.u.xval, maxintval[TINT]) > 0) { - yyerror("invalid slice index %N (index too large)", n->right->left); - goto error; - } - } + n->left = nod(OADDR, n->left, N); + n->left->implicit = 1; + typecheck(&n->left, Erv); + l = n->left; } - if(n->right->right != N) { - if((t = n->right->right->type) == T) - goto error; - if(!isint[t->etype]) { - yyerror("invalid slice index %N (type %T)", n->right->right, t); - goto error; - } - if(n->right->right->op == OLITERAL) { - if(mpgetfix(n->right->right->val.u.xval) < 0) { - yyerror("invalid slice index %N (index must be non-negative)", n->right->right); - goto error; - } else if(tp != nil && tp->bound > 0 && mpgetfix(n->right->right->val.u.xval) > tp->bound) { - yyerror("invalid slice index %N (out of bounds for %d-element array)", n->right->right, tp->bound); - goto error; - } else if(mpcmpfixfix(n->right->right->val.u.xval, maxintval[TINT]) > 0) { - yyerror("invalid slice index %N (index too large)", n->right->right); - goto error; - } - } + if((t = l->type) == T) + goto error; + tp = nil; + if(istype(t, TSTRING)) { + yyerror("invalid operation %N (3-index slice of string)", n); + goto error; } - if(n->right->left != N - && n->right->right != N - && n->right->left->op == OLITERAL - && n->right->right->op == OLITERAL - && mpcmpfixfix(n->right->left->val.u.xval, n->right->right->val.u.xval) > 0) { - yyerror("inverted slice index %N > %N", n->right->left, n->right->right); + if(isptr[t->etype] && isfixedarray(t->type)) { + tp = t->type; + n->type = typ(TARRAY); + n->type->type = tp->type; + n->type->bound = -1; + dowidth(n->type); + n->op = OSLICE3ARR; + } else if(isslice(t)) { + n->type = t; + } else { + yyerror("cannot slice %N (type %T)", l, t); goto error; } + if((lo = n->right->left) != N && checksliceindex(lo, tp) < 0) + goto error; + if((mid = n->right->right->left) != N && checksliceindex(mid, tp) < 0) + goto error; + if((hi = n->right->right->right) != N && checksliceindex(hi, tp) < 0) + goto error; + if(checksliceconst(lo, hi) < 0 || checksliceconst(lo, mid) < 0 || checksliceconst(mid, hi) < 0) + goto error; goto ret; /* @@ -1757,6 +1768,43 @@ out: *np = n; } +static int +checksliceindex(Node *r, Type *tp) +{ + Type *t; + + if((t = r->type) == T) + return -1; + if(!isint[t->etype]) { + yyerror("invalid slice index %N (type %T)", r, t); + return -1; + } + if(r->op == OLITERAL) { + if(mpgetfix(r->val.u.xval) < 0) { + yyerror("invalid slice index %N (index must be non-negative)", r); + return -1; + } else if(tp != nil && tp->bound > 0 && mpgetfix(r->val.u.xval) > tp->bound) { + yyerror("invalid slice index %N (out of bounds for %d-element array)", r, tp->bound); + return -1; + } else if(mpcmpfixfix(r->val.u.xval, maxintval[TINT]) > 0) { + yyerror("invalid slice index %N (index too large)", r); + return -1; + } + } + return 0; +} + +static int +checksliceconst(Node *lo, Node *hi) +{ + if(lo != N && hi != N && lo->op == OLITERAL && hi->op == OLITERAL + && mpcmpfixfix(lo->val.u.xval, hi->val.u.xval) > 0) { + yyerror("invalid slice index: %N > %N", lo, hi); + return -1; + } + return 0; +} + static void checkdefergo(Node *n) { diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 893c77e4d2..c5a5874a19 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -1116,6 +1116,27 @@ walkexpr(Node **np, NodeList **init) n->right->right = safeexpr(n->right->right, init); n = sliceany(n, init); // chops n->right, sets n->list goto ret; + + case OSLICE3: + case OSLICE3ARR: + if(n->right == N) // already processed + goto ret; + + walkexpr(&n->left, init); + // TODO the OINDEX case is a bug elsewhere that needs to be traced. it causes a crash on ([2][]int{ ... })[1][lo:hi] + // TODO the comment on the previous line was copied from case OSLICE. it might not even be true. + if(n->left->op == OINDEX) + n->left = copyexpr(n->left, n->left->type, init); + else + n->left = safeexpr(n->left, init); + walkexpr(&n->right->left, init); + n->right->left = safeexpr(n->right->left, init); + walkexpr(&n->right->right->left, init); + n->right->right->left = safeexpr(n->right->right->left, init); + walkexpr(&n->right->right->right, init); + n->right->right->right = safeexpr(n->right->right->right, init); + n = sliceany(n, init); // chops n->right, sets n->list + goto ret; case OADDR: walkexpr(&n->left, init); @@ -2575,21 +2596,28 @@ append(Node *n, NodeList **init) } -// Generate frontend part for OSLICE[ARR|STR] +// Generate frontend part for OSLICE[3][ARR|STR] // static Node* sliceany(Node* n, NodeList **init) { - int bounded; - Node *src, *lb, *hb, *bound, *chk, *chk1, *chk2; - int64 lbv, hbv, bv, w; + int bounded, slice3; + Node *src, *lb, *hb, *cb, *bound, *chk, *chk0, *chk1, *chk2; + int64 lbv, hbv, cbv, bv, w; Type *bt; // print("before sliceany: %+N\n", n); src = n->left; lb = n->right->left; - hb = n->right->right; + slice3 = n->op == OSLICE3 || n->op == OSLICE3ARR; + if(slice3) { + hb = n->right->right->left; + cb = n->right->right->right; + } else { + hb = n->right->right; + cb = hb; + } bounded = n->etype; @@ -2610,6 +2638,13 @@ sliceany(Node* n, NodeList **init) bv = mpgetfix(bound->val.u.xval); } + if(isconst(cb, CTINT)) { + cbv = mpgetfix(cb->val.u.xval); + if(cbv < 0 || cbv > bv) { + yyerror("slice index out of bounds"); + cbv = -1; + } + } if(isconst(hb, CTINT)) { hbv = mpgetfix(hb->val.u.xval); if(hbv < 0 || hbv > bv) { @@ -2631,10 +2666,13 @@ sliceany(Node* n, NodeList **init) // generate // if hb > bound || lb > hb { panicslice() } chk = N; + chk0 = N; chk1 = N; chk2 = N; bt = types[simtype[TUINT]]; + if(cb != N && cb->type->width > 4) + bt = types[TUINT64]; if(hb != N && hb->type->width > 4) bt = types[TUINT64]; if(lb != N && lb->type->width > 4) @@ -2642,10 +2680,26 @@ sliceany(Node* n, NodeList **init) bound = cheapexpr(conv(bound, bt), init); + if(cb != N) { + cb = cheapexpr(conv(cb, bt), init); + if(!bounded) + chk0 = nod(OLT, bound, cb); + } else if(slice3) { + // When we figure out what this means, implement it. + fatal("slice3 with cb == N"); // rejected by parser + } + if(hb != N) { hb = cheapexpr(conv(hb, bt), init); - if(!bounded) - chk1 = nod(OLT, bound, hb); + if(!bounded) { + if(cb != N) + chk1 = nod(OLT, cb, hb); + else + chk1 = nod(OLT, bound, hb); + } + } else if(slice3) { + // When we figure out what this means, implement it. + fatal("slice3 with hb == N"); // rejected by parser } else if(n->op == OSLICEARR) { hb = bound; } else { @@ -2661,11 +2715,17 @@ sliceany(Node* n, NodeList **init) chk2 = nod(OLT, hb, lb); } - if(chk1 != N || chk2 != N) { + if(chk0 != N || chk1 != N || chk2 != N) { chk = nod(OIF, N, N); chk->nbody = list1(mkcall("panicslice", T, init)); - if(chk1 != N) - chk->ntest = chk1; + if(chk0 != N) + chk->ntest = chk0; + if(chk1 != N) { + if(chk->ntest == N) + chk->ntest = chk1; + else + chk->ntest = nod(OOROR, chk->ntest, chk1); + } if(chk2 != N) { if(chk->ntest == N) chk->ntest = chk2; @@ -2683,10 +2743,12 @@ sliceany(Node* n, NodeList **init) // cap = bound [ - lo ] n->right = N; n->list = nil; + if(!slice3) + cb = bound; if(lb == N) - bound = conv(bound, types[simtype[TUINT]]); + bound = conv(cb, types[simtype[TUINT]]); else - bound = nod(OSUB, conv(bound, types[simtype[TUINT]]), conv(lb, types[simtype[TUINT]])); + bound = nod(OSUB, conv(cb, types[simtype[TUINT]]), conv(lb, types[simtype[TUINT]])); typecheck(&bound, Erv); walkexpr(&bound, init); n->list = list(n->list, bound); diff --git a/src/cmd/gc/y.tab.c b/src/cmd/gc/y.tab.c index 21c67e8054..ef1c2c6750 100644 --- a/src/cmd/gc/y.tab.c +++ b/src/cmd/gc/y.tab.c @@ -440,16 +440,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2194 +#define YYLAST 2198 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 76 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 142 /* YYNRULES -- Number of rules. */ -#define YYNRULES 349 +#define YYNRULES 350 /* YYNRULES -- Number of states. */ -#define YYNSTATES 663 +#define YYNSTATES 666 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -512,28 +512,29 @@ static const yytype_uint16 yyprhs[] = 326, 330, 334, 338, 342, 346, 350, 354, 358, 362, 366, 370, 374, 378, 382, 384, 387, 390, 393, 396, 399, 402, 405, 408, 412, 418, 425, 427, 429, 433, - 439, 445, 450, 457, 459, 465, 471, 477, 485, 487, - 488, 492, 494, 499, 501, 506, 508, 512, 514, 516, - 518, 520, 522, 524, 526, 527, 529, 531, 533, 535, - 540, 542, 544, 546, 549, 551, 553, 555, 557, 559, - 563, 565, 567, 569, 572, 574, 576, 578, 580, 584, - 586, 588, 590, 592, 594, 596, 598, 600, 602, 606, - 611, 616, 619, 623, 629, 631, 633, 636, 640, 646, - 650, 656, 660, 664, 670, 679, 685, 694, 700, 701, - 705, 706, 708, 712, 714, 719, 722, 723, 727, 729, - 733, 735, 739, 741, 745, 747, 751, 753, 757, 761, - 764, 769, 773, 779, 785, 787, 791, 793, 796, 798, - 802, 807, 809, 812, 815, 817, 819, 823, 824, 827, - 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, - 847, 852, 854, 857, 860, 863, 866, 869, 872, 874, - 878, 880, 884, 886, 890, 892, 896, 898, 902, 904, - 906, 910, 914, 915, 918, 919, 921, 922, 924, 925, - 927, 928, 930, 931, 933, 934, 936, 937, 939, 940, - 942, 943, 945, 950, 955, 961, 968, 973, 978, 980, - 982, 984, 986, 988, 990, 992, 994, 996, 1000, 1005, - 1011, 1016, 1021, 1024, 1027, 1032, 1036, 1040, 1046, 1050, - 1055, 1059, 1065, 1067, 1068, 1070, 1074, 1076, 1078, 1081, - 1083, 1085, 1091, 1092, 1095, 1097, 1101, 1103, 1107, 1109 + 439, 445, 450, 457, 466, 468, 474, 480, 486, 494, + 496, 497, 501, 503, 508, 510, 515, 517, 521, 523, + 525, 527, 529, 531, 533, 535, 536, 538, 540, 542, + 544, 549, 551, 553, 555, 558, 560, 562, 564, 566, + 568, 572, 574, 576, 578, 581, 583, 585, 587, 589, + 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, + 615, 620, 625, 628, 632, 638, 640, 642, 645, 649, + 655, 659, 665, 669, 673, 679, 688, 694, 703, 709, + 710, 714, 715, 717, 721, 723, 728, 731, 732, 736, + 738, 742, 744, 748, 750, 754, 756, 760, 762, 766, + 770, 773, 778, 782, 788, 794, 796, 800, 802, 805, + 807, 811, 816, 818, 821, 824, 826, 828, 832, 833, + 836, 837, 839, 841, 843, 845, 847, 849, 851, 853, + 855, 856, 861, 863, 866, 869, 872, 875, 878, 881, + 883, 887, 889, 893, 895, 899, 901, 905, 907, 911, + 913, 915, 919, 923, 924, 927, 928, 930, 931, 933, + 934, 936, 937, 939, 940, 942, 943, 945, 946, 948, + 949, 951, 952, 954, 959, 964, 970, 977, 982, 987, + 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1009, + 1014, 1020, 1025, 1030, 1033, 1036, 1041, 1045, 1049, 1055, + 1059, 1064, 1068, 1074, 1076, 1077, 1079, 1083, 1085, 1087, + 1090, 1092, 1094, 1100, 1101, 1104, 1106, 1110, 1112, 1116, + 1118 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -584,73 +585,74 @@ static const yytype_int16 yyrhs[] = 187, 11, 191, 60, -1, 3, -1, 143, -1, 134, 63, 141, -1, 134, 63, 59, 135, 60, -1, 134, 63, 59, 31, 60, -1, 134, 71, 126, 72, -1, - 134, 71, 192, 66, 192, 72, -1, 128, -1, 149, - 59, 126, 191, 60, -1, 150, 137, 130, 189, 68, - -1, 129, 67, 130, 189, 68, -1, 59, 135, 60, - 67, 130, 189, 68, -1, 165, -1, -1, 126, 66, - 133, -1, 126, -1, 67, 130, 189, 68, -1, 126, - -1, 67, 130, 189, 68, -1, 129, -1, 59, 135, - 60, -1, 126, -1, 147, -1, 146, -1, 35, -1, - 67, -1, 141, -1, 141, -1, -1, 138, -1, 24, - -1, 142, -1, 73, -1, 74, 3, 63, 24, -1, - 141, -1, 138, -1, 11, -1, 11, 146, -1, 155, + 134, 71, 192, 66, 192, 72, -1, 134, 71, 192, + 66, 192, 66, 192, 72, -1, 128, -1, 149, 59, + 126, 191, 60, -1, 150, 137, 130, 189, 68, -1, + 129, 67, 130, 189, 68, -1, 59, 135, 60, 67, + 130, 189, 68, -1, 165, -1, -1, 126, 66, 133, + -1, 126, -1, 67, 130, 189, 68, -1, 126, -1, + 67, 130, 189, 68, -1, 129, -1, 59, 135, 60, + -1, 126, -1, 147, -1, 146, -1, 35, -1, 67, + -1, 141, -1, 141, -1, -1, 138, -1, 24, -1, + 142, -1, 73, -1, 74, 3, 63, 24, -1, 141, + -1, 138, -1, 11, -1, 11, 146, -1, 155, -1, + 161, -1, 153, -1, 154, -1, 152, -1, 59, 146, + 60, -1, 155, -1, 161, -1, 153, -1, 53, 147, -1, 161, -1, 153, -1, 154, -1, 152, -1, 59, - 146, 60, -1, 155, -1, 161, -1, 153, -1, 53, - 147, -1, 161, -1, 153, -1, 154, -1, 152, -1, - 59, 146, 60, -1, 161, -1, 153, -1, 153, -1, - 155, -1, 161, -1, 153, -1, 154, -1, 152, -1, - 143, -1, 143, 63, 141, -1, 71, 192, 72, 146, - -1, 71, 11, 72, 146, -1, 8, 148, -1, 8, - 36, 146, -1, 23, 71, 146, 72, 146, -1, 156, - -1, 157, -1, 53, 146, -1, 36, 8, 146, -1, - 29, 137, 170, 190, 68, -1, 29, 137, 68, -1, - 22, 137, 171, 190, 68, -1, 22, 137, 68, -1, - 17, 159, 162, -1, 141, 59, 179, 60, 163, -1, - 59, 179, 60, 141, 59, 179, 60, 163, -1, 200, - 59, 195, 60, 210, -1, 59, 215, 60, 141, 59, - 195, 60, 210, -1, 17, 59, 179, 60, 163, -1, - -1, 67, 183, 68, -1, -1, 151, -1, 59, 179, - 60, -1, 161, -1, 164, 137, 183, 68, -1, 164, - 1, -1, -1, 166, 90, 62, -1, 93, -1, 167, - 62, 93, -1, 95, -1, 168, 62, 95, -1, 97, - -1, 169, 62, 97, -1, 172, -1, 170, 62, 172, - -1, 175, -1, 171, 62, 175, -1, 184, 146, 198, - -1, 174, 198, -1, 59, 174, 60, 198, -1, 53, - 174, 198, -1, 59, 53, 174, 60, 198, -1, 53, - 59, 174, 60, 198, -1, 24, -1, 24, 63, 141, - -1, 173, -1, 138, 176, -1, 173, -1, 59, 173, - 60, -1, 59, 179, 60, 163, -1, 136, -1, 141, - 136, -1, 141, 145, -1, 145, -1, 177, -1, 178, - 75, 177, -1, -1, 178, 191, -1, -1, 100, -1, - 91, -1, 181, -1, 1, -1, 98, -1, 110, -1, - 121, -1, 124, -1, 113, -1, -1, 144, 66, 182, - 180, -1, 15, -1, 6, 140, -1, 10, 140, -1, - 18, 128, -1, 13, 128, -1, 19, 138, -1, 27, - 193, -1, 180, -1, 183, 62, 180, -1, 138, -1, - 184, 75, 138, -1, 139, -1, 185, 75, 139, -1, - 126, -1, 186, 75, 126, -1, 135, -1, 187, 75, - 135, -1, 131, -1, 132, -1, 188, 75, 131, -1, - 188, 75, 132, -1, -1, 188, 191, -1, -1, 62, - -1, -1, 75, -1, -1, 126, -1, -1, 186, -1, - -1, 98, -1, -1, 215, -1, -1, 216, -1, -1, - 217, -1, -1, 3, -1, 21, 24, 3, 62, -1, - 32, 200, 202, 62, -1, 9, 200, 65, 213, 62, - -1, 9, 200, 202, 65, 213, 62, -1, 31, 201, - 202, 62, -1, 17, 160, 162, 62, -1, 142, -1, - 200, -1, 204, -1, 205, -1, 206, -1, 204, -1, - 206, -1, 142, -1, 24, -1, 71, 72, 202, -1, - 71, 3, 72, 202, -1, 23, 71, 202, 72, 202, - -1, 29, 67, 196, 68, -1, 22, 67, 197, 68, - -1, 53, 202, -1, 8, 203, -1, 8, 59, 205, - 60, -1, 8, 36, 202, -1, 36, 8, 202, -1, - 17, 59, 195, 60, 210, -1, 141, 202, 198, -1, - 141, 11, 202, 198, -1, 141, 202, 198, -1, 141, - 59, 195, 60, 210, -1, 202, -1, -1, 211, -1, - 59, 195, 60, -1, 202, -1, 3, -1, 50, 3, - -1, 141, -1, 212, -1, 59, 212, 49, 212, 60, - -1, -1, 214, 199, -1, 207, -1, 215, 75, 207, - -1, 208, -1, 216, 62, 208, -1, 209, -1, 217, - 62, 209, -1 + 146, 60, -1, 161, -1, 153, -1, 153, -1, 155, + -1, 161, -1, 153, -1, 154, -1, 152, -1, 143, + -1, 143, 63, 141, -1, 71, 192, 72, 146, -1, + 71, 11, 72, 146, -1, 8, 148, -1, 8, 36, + 146, -1, 23, 71, 146, 72, 146, -1, 156, -1, + 157, -1, 53, 146, -1, 36, 8, 146, -1, 29, + 137, 170, 190, 68, -1, 29, 137, 68, -1, 22, + 137, 171, 190, 68, -1, 22, 137, 68, -1, 17, + 159, 162, -1, 141, 59, 179, 60, 163, -1, 59, + 179, 60, 141, 59, 179, 60, 163, -1, 200, 59, + 195, 60, 210, -1, 59, 215, 60, 141, 59, 195, + 60, 210, -1, 17, 59, 179, 60, 163, -1, -1, + 67, 183, 68, -1, -1, 151, -1, 59, 179, 60, + -1, 161, -1, 164, 137, 183, 68, -1, 164, 1, + -1, -1, 166, 90, 62, -1, 93, -1, 167, 62, + 93, -1, 95, -1, 168, 62, 95, -1, 97, -1, + 169, 62, 97, -1, 172, -1, 170, 62, 172, -1, + 175, -1, 171, 62, 175, -1, 184, 146, 198, -1, + 174, 198, -1, 59, 174, 60, 198, -1, 53, 174, + 198, -1, 59, 53, 174, 60, 198, -1, 53, 59, + 174, 60, 198, -1, 24, -1, 24, 63, 141, -1, + 173, -1, 138, 176, -1, 173, -1, 59, 173, 60, + -1, 59, 179, 60, 163, -1, 136, -1, 141, 136, + -1, 141, 145, -1, 145, -1, 177, -1, 178, 75, + 177, -1, -1, 178, 191, -1, -1, 100, -1, 91, + -1, 181, -1, 1, -1, 98, -1, 110, -1, 121, + -1, 124, -1, 113, -1, -1, 144, 66, 182, 180, + -1, 15, -1, 6, 140, -1, 10, 140, -1, 18, + 128, -1, 13, 128, -1, 19, 138, -1, 27, 193, + -1, 180, -1, 183, 62, 180, -1, 138, -1, 184, + 75, 138, -1, 139, -1, 185, 75, 139, -1, 126, + -1, 186, 75, 126, -1, 135, -1, 187, 75, 135, + -1, 131, -1, 132, -1, 188, 75, 131, -1, 188, + 75, 132, -1, -1, 188, 191, -1, -1, 62, -1, + -1, 75, -1, -1, 126, -1, -1, 186, -1, -1, + 98, -1, -1, 215, -1, -1, 216, -1, -1, 217, + -1, -1, 3, -1, 21, 24, 3, 62, -1, 32, + 200, 202, 62, -1, 9, 200, 65, 213, 62, -1, + 9, 200, 202, 65, 213, 62, -1, 31, 201, 202, + 62, -1, 17, 160, 162, 62, -1, 142, -1, 200, + -1, 204, -1, 205, -1, 206, -1, 204, -1, 206, + -1, 142, -1, 24, -1, 71, 72, 202, -1, 71, + 3, 72, 202, -1, 23, 71, 202, 72, 202, -1, + 29, 67, 196, 68, -1, 22, 67, 197, 68, -1, + 53, 202, -1, 8, 203, -1, 8, 59, 205, 60, + -1, 8, 36, 202, -1, 36, 8, 202, -1, 17, + 59, 195, 60, 210, -1, 141, 202, 198, -1, 141, + 11, 202, 198, -1, 141, 202, 198, -1, 141, 59, + 195, 60, 210, -1, 202, -1, -1, 211, -1, 59, + 195, 60, -1, 202, -1, 3, -1, 50, 3, -1, + 141, -1, 212, -1, 59, 212, 49, 212, 60, -1, + -1, 214, 199, -1, 207, -1, 215, 75, 207, -1, + 208, -1, 216, 62, 208, -1, 209, -1, 217, 62, + 209, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -669,28 +671,29 @@ static const yytype_uint16 yyrline[] = 798, 802, 806, 810, 814, 818, 822, 826, 830, 834, 838, 842, 846, 851, 857, 858, 862, 873, 877, 881, 885, 890, 894, 904, 908, 913, 921, 925, 926, 937, - 941, 945, 949, 953, 954, 960, 967, 973, 980, 983, - 990, 996, 1013, 1020, 1021, 1028, 1029, 1048, 1049, 1052, - 1055, 1059, 1070, 1079, 1085, 1088, 1091, 1098, 1099, 1105, - 1120, 1128, 1140, 1145, 1151, 1152, 1153, 1154, 1155, 1156, - 1162, 1163, 1164, 1165, 1171, 1172, 1173, 1174, 1175, 1181, - 1182, 1185, 1188, 1189, 1190, 1191, 1192, 1195, 1196, 1209, - 1213, 1218, 1223, 1228, 1232, 1233, 1236, 1242, 1249, 1255, - 1262, 1268, 1279, 1293, 1322, 1362, 1387, 1405, 1414, 1417, - 1425, 1429, 1433, 1440, 1446, 1451, 1463, 1466, 1476, 1477, - 1483, 1484, 1490, 1494, 1500, 1501, 1507, 1511, 1517, 1540, - 1545, 1551, 1557, 1564, 1573, 1582, 1597, 1603, 1608, 1612, - 1619, 1632, 1633, 1639, 1645, 1648, 1652, 1658, 1661, 1670, - 1673, 1674, 1678, 1679, 1685, 1686, 1687, 1688, 1689, 1691, - 1690, 1705, 1710, 1714, 1718, 1722, 1726, 1731, 1750, 1756, - 1764, 1768, 1774, 1778, 1784, 1788, 1794, 1798, 1807, 1811, - 1815, 1819, 1825, 1828, 1836, 1837, 1839, 1840, 1843, 1846, - 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, - 1879, 1882, 1888, 1892, 1896, 1900, 1904, 1908, 1928, 1935, - 1946, 1947, 1948, 1951, 1952, 1955, 1959, 1969, 1973, 1977, - 1981, 1985, 1989, 1993, 1999, 2005, 2013, 2021, 2027, 2034, - 2050, 2068, 2072, 2078, 2081, 2084, 2088, 2098, 2102, 2117, - 2125, 2126, 2138, 2139, 2142, 2146, 2152, 2156, 2162, 2166 + 941, 945, 949, 953, 961, 962, 968, 975, 981, 988, + 991, 998, 1004, 1021, 1028, 1029, 1036, 1037, 1056, 1057, + 1060, 1063, 1067, 1078, 1087, 1093, 1096, 1099, 1106, 1107, + 1113, 1128, 1136, 1148, 1153, 1159, 1160, 1161, 1162, 1163, + 1164, 1170, 1171, 1172, 1173, 1179, 1180, 1181, 1182, 1183, + 1189, 1190, 1193, 1196, 1197, 1198, 1199, 1200, 1203, 1204, + 1217, 1221, 1226, 1231, 1236, 1240, 1241, 1244, 1250, 1257, + 1263, 1270, 1276, 1287, 1301, 1330, 1370, 1395, 1413, 1422, + 1425, 1433, 1437, 1441, 1448, 1454, 1459, 1471, 1474, 1484, + 1485, 1491, 1492, 1498, 1502, 1508, 1509, 1515, 1519, 1525, + 1548, 1553, 1559, 1565, 1572, 1581, 1590, 1605, 1611, 1616, + 1620, 1627, 1640, 1641, 1647, 1653, 1656, 1660, 1666, 1669, + 1678, 1681, 1682, 1686, 1687, 1693, 1694, 1695, 1696, 1697, + 1699, 1698, 1713, 1718, 1722, 1726, 1730, 1734, 1739, 1758, + 1764, 1772, 1776, 1782, 1786, 1792, 1796, 1802, 1806, 1815, + 1819, 1823, 1827, 1833, 1836, 1844, 1845, 1847, 1848, 1851, + 1854, 1857, 1860, 1863, 1866, 1869, 1872, 1875, 1878, 1881, + 1884, 1887, 1890, 1896, 1900, 1904, 1908, 1912, 1916, 1936, + 1943, 1954, 1955, 1956, 1959, 1960, 1963, 1967, 1977, 1981, + 1985, 1989, 1993, 1997, 2001, 2007, 2013, 2021, 2029, 2035, + 2042, 2058, 2076, 2080, 2086, 2089, 2092, 2096, 2106, 2110, + 2125, 2133, 2134, 2146, 2147, 2150, 2154, 2160, 2164, 2170, + 2174 }; #endif @@ -775,28 +778,29 @@ static const yytype_uint8 yyr1[] = 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, - 131, 132, 132, 133, 133, 134, 134, 135, 135, 136, - 137, 137, 138, 139, 140, 140, 141, 141, 141, 142, - 143, 144, 145, 145, 146, 146, 146, 146, 146, 146, - 147, 147, 147, 147, 148, 148, 148, 148, 148, 149, - 149, 150, 151, 151, 151, 151, 151, 152, 152, 153, - 153, 153, 153, 153, 153, 153, 154, 155, 156, 156, - 157, 157, 158, 159, 159, 160, 160, 161, 162, 162, - 163, 163, 163, 164, 165, 165, 166, 166, 167, 167, - 168, 168, 169, 169, 170, 170, 171, 171, 172, 172, - 172, 172, 172, 172, 173, 173, 174, 175, 175, 175, - 176, 177, 177, 177, 177, 178, 178, 179, 179, 180, - 180, 180, 180, 180, 181, 181, 181, 181, 181, 182, - 181, 181, 181, 181, 181, 181, 181, 181, 183, 183, - 184, 184, 185, 185, 186, 186, 187, 187, 188, 188, - 188, 188, 189, 189, 190, 190, 191, 191, 192, 192, - 193, 193, 194, 194, 195, 195, 196, 196, 197, 197, - 198, 198, 199, 199, 199, 199, 199, 199, 200, 201, - 202, 202, 202, 203, 203, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 205, 206, 207, 207, - 208, 209, 209, 210, 210, 211, 211, 212, 212, 212, - 213, 213, 214, 214, 215, 215, 216, 216, 217, 217 + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 130, 131, 132, 132, 133, 133, 134, 134, 135, 135, + 136, 137, 137, 138, 139, 140, 140, 141, 141, 141, + 142, 143, 144, 145, 145, 146, 146, 146, 146, 146, + 146, 147, 147, 147, 147, 148, 148, 148, 148, 148, + 149, 149, 150, 151, 151, 151, 151, 151, 152, 152, + 153, 153, 153, 153, 153, 153, 153, 154, 155, 156, + 156, 157, 157, 158, 159, 159, 160, 160, 161, 162, + 162, 163, 163, 163, 164, 165, 165, 166, 166, 167, + 167, 168, 168, 169, 169, 170, 170, 171, 171, 172, + 172, 172, 172, 172, 172, 173, 173, 174, 175, 175, + 175, 176, 177, 177, 177, 177, 178, 178, 179, 179, + 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, + 182, 181, 181, 181, 181, 181, 181, 181, 181, 183, + 183, 184, 184, 185, 185, 186, 186, 187, 187, 188, + 188, 188, 188, 189, 189, 190, 190, 191, 191, 192, + 192, 193, 193, 194, 194, 195, 195, 196, 196, 197, + 197, 198, 198, 199, 199, 199, 199, 199, 199, 200, + 201, 202, 202, 202, 203, 203, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 205, 206, 207, + 207, 208, 209, 209, 210, 210, 211, 211, 212, 212, + 212, 213, 213, 214, 214, 215, 215, 216, 216, 217, + 217 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -815,28 +819,29 @@ static const yytype_uint8 yyr2[] = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 6, 1, 1, 3, 5, - 5, 4, 6, 1, 5, 5, 5, 7, 1, 0, - 3, 1, 4, 1, 4, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 0, 1, 1, 1, 1, 4, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, - 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, + 5, 4, 6, 8, 1, 5, 5, 5, 7, 1, + 0, 3, 1, 4, 1, 4, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, + 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 3, 1, 1, 1, 2, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 4, 4, 2, 3, 5, 1, 1, 2, 3, 5, + 3, 5, 3, 3, 5, 8, 5, 8, 5, 0, + 3, 0, 1, 3, 1, 4, 2, 0, 3, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, + 2, 4, 3, 5, 5, 1, 3, 1, 2, 1, + 3, 4, 1, 2, 2, 1, 1, 3, 0, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 4, 1, 2, 2, 2, 2, 2, 2, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, + 1, 3, 3, 0, 2, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 4, 4, 5, 6, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, - 4, 2, 3, 5, 1, 1, 2, 3, 5, 3, - 5, 3, 3, 5, 8, 5, 8, 5, 0, 3, - 0, 1, 3, 1, 4, 2, 0, 3, 1, 3, - 1, 3, 1, 3, 1, 3, 1, 3, 3, 2, - 4, 3, 5, 5, 1, 3, 1, 2, 1, 3, - 4, 1, 2, 2, 1, 1, 3, 0, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 1, 2, 2, 2, 2, 2, 2, 1, 3, - 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, - 3, 3, 0, 2, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 4, 4, 5, 6, 4, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, - 4, 4, 2, 2, 4, 3, 3, 5, 3, 4, - 3, 5, 1, 0, 1, 3, 1, 1, 2, 1, - 1, 5, 0, 2, 1, 3, 1, 3, 1, 3 + 5, 4, 4, 2, 2, 4, 3, 3, 5, 3, + 4, 3, 5, 1, 0, 1, 3, 1, 1, 2, + 1, 1, 5, 0, 2, 1, 3, 1, 3, 1, + 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -844,73 +849,73 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 5, 0, 3, 0, 1, 0, 7, 0, 22, 156, - 158, 0, 0, 157, 216, 20, 6, 342, 0, 4, + 5, 0, 3, 0, 1, 0, 7, 0, 22, 157, + 159, 0, 0, 158, 217, 20, 6, 343, 0, 4, 0, 0, 0, 21, 0, 0, 0, 16, 0, 0, - 9, 22, 0, 8, 28, 126, 154, 0, 39, 154, - 0, 261, 74, 0, 0, 0, 78, 0, 0, 290, + 9, 22, 0, 8, 28, 126, 155, 0, 39, 155, + 0, 262, 74, 0, 0, 0, 78, 0, 0, 291, 91, 0, 88, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 288, 0, 25, 0, 254, 255, - 258, 256, 257, 50, 93, 133, 145, 114, 161, 160, - 127, 0, 0, 0, 181, 194, 195, 26, 213, 0, - 138, 27, 0, 19, 0, 0, 0, 0, 0, 0, - 343, 159, 11, 14, 284, 18, 22, 13, 17, 155, - 262, 152, 0, 0, 0, 0, 160, 187, 191, 177, - 175, 176, 174, 263, 133, 0, 292, 247, 0, 208, - 133, 266, 292, 150, 151, 0, 0, 274, 291, 267, - 0, 0, 292, 0, 0, 36, 48, 0, 29, 272, - 153, 0, 122, 117, 118, 121, 115, 116, 0, 0, - 147, 0, 148, 172, 170, 171, 119, 120, 0, 289, - 0, 217, 0, 32, 0, 0, 0, 0, 0, 55, + 0, 0, 0, 0, 289, 0, 25, 0, 255, 256, + 259, 257, 258, 50, 93, 134, 146, 114, 162, 161, + 127, 0, 0, 0, 182, 195, 196, 26, 214, 0, + 139, 27, 0, 19, 0, 0, 0, 0, 0, 0, + 344, 160, 11, 14, 285, 18, 22, 13, 17, 156, + 263, 153, 0, 0, 0, 0, 161, 188, 192, 178, + 176, 177, 175, 264, 134, 0, 293, 248, 0, 209, + 134, 267, 293, 151, 152, 0, 0, 275, 292, 268, + 0, 0, 293, 0, 0, 36, 48, 0, 29, 273, + 154, 0, 122, 117, 118, 121, 115, 116, 0, 0, + 148, 0, 149, 173, 171, 172, 119, 120, 0, 290, + 0, 218, 0, 32, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, - 0, 288, 259, 0, 139, 215, 0, 0, 0, 0, - 308, 0, 0, 208, 0, 0, 309, 0, 0, 23, - 285, 0, 12, 247, 0, 0, 192, 168, 166, 167, - 164, 165, 196, 0, 0, 293, 72, 0, 75, 0, - 71, 162, 241, 160, 244, 149, 245, 286, 0, 247, - 0, 202, 79, 76, 156, 0, 201, 0, 284, 238, - 226, 0, 64, 0, 0, 199, 270, 284, 224, 236, - 300, 0, 89, 38, 222, 284, 49, 31, 218, 284, - 0, 0, 40, 0, 173, 146, 0, 0, 35, 284, + 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, + 0, 289, 260, 0, 140, 216, 0, 0, 0, 0, + 309, 0, 0, 209, 0, 0, 310, 0, 0, 23, + 286, 0, 12, 248, 0, 0, 193, 169, 167, 168, + 165, 166, 197, 0, 0, 294, 72, 0, 75, 0, + 71, 163, 242, 161, 245, 150, 246, 287, 0, 248, + 0, 203, 79, 76, 157, 0, 202, 0, 285, 239, + 227, 0, 64, 0, 0, 200, 271, 285, 225, 237, + 301, 0, 89, 38, 223, 285, 49, 31, 219, 285, + 0, 0, 40, 0, 174, 147, 0, 0, 35, 285, 0, 0, 51, 95, 110, 113, 96, 100, 101, 99, 111, 98, 97, 94, 112, 102, 103, 104, 105, 106, - 107, 108, 109, 282, 123, 276, 286, 0, 128, 289, - 0, 0, 286, 282, 253, 60, 251, 250, 268, 252, - 0, 53, 52, 275, 0, 0, 0, 0, 316, 0, - 0, 0, 0, 0, 315, 0, 310, 311, 312, 0, - 344, 0, 0, 294, 0, 0, 0, 15, 10, 0, - 0, 0, 178, 188, 66, 73, 0, 0, 292, 163, - 242, 243, 287, 248, 210, 0, 0, 0, 292, 0, - 234, 0, 247, 237, 285, 0, 0, 0, 0, 300, - 0, 0, 285, 0, 301, 229, 0, 300, 0, 285, - 0, 285, 0, 42, 273, 0, 0, 0, 197, 168, - 166, 167, 165, 139, 190, 189, 285, 0, 44, 0, - 139, 141, 278, 279, 286, 0, 286, 287, 0, 0, - 0, 131, 288, 260, 287, 0, 0, 0, 0, 214, - 0, 0, 323, 313, 314, 294, 298, 0, 296, 0, - 322, 337, 0, 0, 339, 340, 0, 0, 0, 0, - 0, 300, 0, 0, 307, 0, 295, 302, 306, 303, - 210, 169, 0, 0, 0, 0, 246, 247, 160, 211, - 186, 184, 185, 182, 183, 207, 210, 209, 80, 77, - 235, 239, 0, 227, 200, 193, 0, 0, 92, 62, - 65, 0, 231, 0, 300, 225, 198, 271, 228, 64, - 223, 37, 219, 30, 41, 0, 282, 45, 220, 284, - 47, 33, 43, 282, 0, 287, 283, 136, 0, 277, - 124, 130, 129, 0, 134, 135, 0, 269, 325, 0, - 0, 316, 0, 315, 0, 332, 348, 299, 0, 0, - 0, 346, 297, 326, 338, 0, 304, 0, 317, 0, - 300, 328, 0, 345, 333, 0, 69, 68, 292, 0, - 247, 203, 84, 210, 0, 59, 0, 300, 300, 230, - 0, 169, 0, 285, 0, 46, 0, 139, 143, 140, - 280, 281, 125, 132, 61, 324, 333, 294, 321, 0, - 0, 300, 320, 0, 0, 318, 305, 329, 294, 294, - 336, 205, 334, 67, 70, 212, 0, 86, 240, 0, - 0, 56, 0, 63, 233, 232, 90, 137, 221, 34, - 142, 282, 327, 0, 349, 319, 330, 347, 0, 0, - 0, 210, 0, 85, 81, 0, 0, 0, 333, 341, - 333, 335, 204, 82, 87, 58, 57, 144, 331, 206, - 292, 0, 83 + 107, 108, 109, 283, 123, 277, 287, 0, 128, 290, + 0, 0, 287, 283, 254, 60, 252, 251, 269, 253, + 0, 53, 52, 276, 0, 0, 0, 0, 317, 0, + 0, 0, 0, 0, 316, 0, 311, 312, 313, 0, + 345, 0, 0, 295, 0, 0, 0, 15, 10, 0, + 0, 0, 179, 189, 66, 73, 0, 0, 293, 164, + 243, 244, 288, 249, 211, 0, 0, 0, 293, 0, + 235, 0, 248, 238, 286, 0, 0, 0, 0, 301, + 0, 0, 286, 0, 302, 230, 0, 301, 0, 286, + 0, 286, 0, 42, 274, 0, 0, 0, 198, 169, + 167, 168, 166, 140, 191, 190, 286, 0, 44, 0, + 140, 142, 279, 280, 287, 0, 287, 288, 0, 0, + 0, 131, 289, 261, 288, 0, 0, 0, 0, 215, + 0, 0, 324, 314, 315, 295, 299, 0, 297, 0, + 323, 338, 0, 0, 340, 341, 0, 0, 0, 0, + 0, 301, 0, 0, 308, 0, 296, 303, 307, 304, + 211, 170, 0, 0, 0, 0, 247, 248, 161, 212, + 187, 185, 186, 183, 184, 208, 211, 210, 80, 77, + 236, 240, 0, 228, 201, 194, 0, 0, 92, 62, + 65, 0, 232, 0, 301, 226, 199, 272, 229, 64, + 224, 37, 220, 30, 41, 0, 283, 45, 221, 285, + 47, 33, 43, 283, 0, 288, 284, 137, 0, 278, + 124, 130, 129, 0, 135, 136, 0, 270, 326, 0, + 0, 317, 0, 316, 0, 333, 349, 300, 0, 0, + 0, 347, 298, 327, 339, 0, 305, 0, 318, 0, + 301, 329, 0, 346, 334, 0, 69, 68, 293, 0, + 248, 204, 84, 211, 0, 59, 0, 301, 301, 231, + 0, 170, 0, 286, 0, 46, 0, 140, 144, 141, + 281, 282, 125, 289, 132, 61, 325, 334, 295, 322, + 0, 0, 301, 321, 0, 0, 319, 306, 330, 295, + 295, 337, 206, 335, 67, 70, 213, 0, 86, 241, + 0, 0, 56, 0, 63, 234, 233, 90, 138, 222, + 34, 143, 283, 0, 328, 0, 350, 320, 331, 348, + 0, 0, 0, 211, 0, 85, 81, 0, 0, 0, + 133, 334, 342, 334, 336, 205, 82, 87, 58, 57, + 145, 332, 207, 293, 0, 83 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -920,7 +925,7 @@ static const yytype_int16 yydefgoto[] = 8, 24, 16, 17, 65, 326, 67, 148, 517, 518, 144, 145, 68, 499, 327, 437, 500, 576, 387, 365, 472, 236, 237, 238, 69, 126, 252, 70, 132, 377, - 572, 643, 660, 617, 644, 71, 142, 398, 72, 140, + 572, 645, 663, 618, 646, 71, 142, 398, 72, 140, 73, 74, 75, 76, 313, 422, 423, 589, 77, 315, 242, 135, 78, 149, 110, 116, 13, 80, 81, 244, 245, 162, 118, 82, 83, 479, 227, 84, 229, 230, @@ -928,556 +933,556 @@ static const yytype_int16 yydefgoto[] = 22, 279, 519, 275, 267, 258, 268, 269, 270, 260, 383, 246, 247, 248, 328, 329, 321, 330, 271, 151, 92, 316, 424, 425, 221, 373, 170, 139, 253, 465, - 550, 544, 395, 100, 211, 217, 610, 442, 346, 347, - 348, 350, 551, 546, 611, 612, 455, 456, 25, 466, + 550, 544, 395, 100, 211, 217, 611, 442, 346, 347, + 348, 350, 551, 546, 612, 613, 455, 456, 25, 466, 552, 547 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -485 +#define YYPACT_NINF -552 static const yytype_int16 yypact[] = { - -485, 67, 35, 55, -485, 44, -485, 64, -485, -485, - -485, 96, 38, -485, 77, 85, -485, -485, 66, -485, - 34, 84, 1059, -485, 86, 294, 147, -485, 165, 210, - -485, 55, 221, -485, -485, -485, 44, 1762, -485, 44, - 290, -485, -485, 442, 290, 44, -485, 80, 69, 1608, - -485, 80, -485, 450, 452, 1608, 1608, 1608, 1608, 1608, - 1608, 1651, 1608, 1608, 920, 157, -485, 460, -485, -485, - -485, -485, -485, 718, -485, -485, 167, 344, -485, 176, - -485, 180, 193, 80, 206, -485, -485, -485, 218, 91, - -485, -485, 76, -485, 205, 10, 260, 205, 205, 223, - -485, -485, -485, -485, 230, -485, -485, -485, -485, -485, - -485, -485, 237, 1770, 1770, 1770, -485, 236, -485, -485, - -485, -485, -485, -485, 220, 344, 1608, 990, 241, 235, - 262, -485, 1608, -485, -485, 405, 1770, 2090, 254, -485, - 297, 444, 1608, 61, 1770, -485, -485, 271, -485, -485, - -485, 671, -485, -485, -485, -485, -485, -485, 1694, 1651, - 2090, 291, -485, 181, -485, 60, -485, -485, 287, 2090, - 301, -485, 496, -485, 912, 1608, 1608, 1608, 1608, -485, - 1608, 1608, 1608, -485, 1608, 1608, 1608, 1608, 1608, 1608, - 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, -485, 1290, - 468, 1608, -485, 1608, -485, -485, 1221, 1608, 1608, 1608, - -485, 573, 44, 235, 275, 347, -485, 1301, 1301, -485, - 113, 302, -485, 990, 358, 1770, -485, -485, -485, -485, - -485, -485, -485, 316, 44, -485, -485, 340, -485, 78, - 318, 1770, -485, 990, -485, -485, -485, 307, 325, 990, - 1221, -485, -485, 324, 117, 365, -485, 343, 337, -485, - -485, 333, -485, 32, 23, -485, -485, 350, -485, -485, - 406, 1737, -485, -485, -485, 351, -485, -485, -485, 352, - 1608, 44, 354, 1796, -485, 353, 1770, 1770, -485, 359, - 1608, 357, 2090, 1928, -485, 2114, 1212, 1212, 1212, 1212, - -485, 1212, 1212, 2138, -485, 566, 566, 566, 566, -485, - -485, -485, -485, 1345, -485, -485, 31, 1400, -485, 1988, - 360, 1147, 1955, 1345, -485, -485, -485, -485, -485, -485, - 95, 254, 254, 2090, 1857, 368, 361, 371, -485, 363, - 427, 1301, 247, 51, -485, 374, -485, -485, -485, 1890, - -485, 36, 382, 44, 384, 385, 387, -485, -485, 391, - 1770, 395, -485, -485, -485, -485, 1455, 1510, 1608, -485, - -485, -485, 990, -485, 1823, 399, 135, 340, 1608, 44, - 397, 403, 990, -485, 542, 407, 1770, 278, 365, 406, - 365, 411, 364, 413, -485, -485, 44, 406, 430, 44, - 423, 44, 425, 254, -485, 1608, 1849, 1770, -485, 216, - 219, 274, 288, -485, -485, -485, 44, 426, 254, 1608, - -485, 2018, -485, -485, 414, 422, 416, 1651, 433, 434, - 436, -485, 1608, -485, -485, 439, 437, 1221, 1147, -485, - 1301, 466, -485, -485, -485, 44, 1882, 1301, 44, 1301, - -485, -485, 504, 207, -485, -485, 446, 438, 1301, 247, - 1301, 406, 44, 44, -485, 453, 455, -485, -485, -485, - 1823, -485, 1221, 1608, 1608, 467, -485, 990, 472, -485, - -485, -485, -485, -485, -485, -485, 1823, -485, -485, -485, - -485, -485, 475, -485, -485, -485, 1651, 470, -485, -485, - -485, 490, -485, 493, 406, -485, -485, -485, -485, -485, - -485, -485, -485, -485, 254, 495, 1345, -485, -485, 498, - 912, -485, 254, 1345, 1553, 1345, -485, -485, 497, -485, - -485, -485, -485, 486, -485, -485, 143, -485, -485, 501, - 502, 473, 508, 513, 505, -485, -485, 515, 503, 1301, - 511, -485, 518, -485, -485, 533, -485, 1301, -485, 522, - 406, -485, 526, -485, 1916, 144, 2090, 2090, 1608, 527, - 990, -485, -485, 1823, 39, -485, 1147, 406, 406, -485, - 315, 293, 521, 44, 548, 357, 525, -485, 2090, -485, - -485, -485, -485, -485, -485, -485, 1916, 44, -485, 1882, - 1301, 406, -485, 44, 207, -485, -485, -485, 44, 44, - -485, -485, -485, -485, -485, -485, 551, 572, -485, 1608, - 1608, -485, 1651, 550, -485, -485, -485, -485, -485, -485, - -485, 1345, -485, 558, -485, -485, -485, -485, 563, 564, - 565, 1823, 46, -485, -485, 2042, 2066, 559, 1916, -485, - 1916, -485, -485, -485, -485, -485, -485, -485, -485, -485, - 1608, 340, -485 + -552, 44, 35, 38, -552, 199, -552, 37, -552, -552, + -552, 83, 22, -552, 66, 79, -552, -552, 60, -552, + 107, 89, 993, -552, 110, 454, 150, -552, 155, 179, + -552, 38, 182, -552, -552, -552, 199, 1760, -552, 199, + 42, -552, -552, 257, 42, 199, -552, 7, 125, 1606, + -552, 7, -552, 394, 407, 1606, 1606, 1606, 1606, 1606, + 1606, 1649, 1606, 1606, 1229, 137, -552, 506, -552, -552, + -552, -552, -552, 874, -552, -552, 140, 285, -552, 142, + -552, 154, 176, 7, 177, -552, -552, -552, 194, 90, + -552, -552, 65, -552, 186, -18, 250, 186, 186, 207, + -552, -552, -552, -552, 220, -552, -552, -552, -552, -552, + -552, -552, 228, 1768, 1768, 1768, -552, 229, -552, -552, + -552, -552, -552, -552, 86, 285, 1606, 1735, 245, 246, + 180, -552, 1606, -552, -552, 216, 1768, 2118, 264, -552, + 287, 436, 1606, 418, 1768, -552, -552, 452, -552, -552, + -552, 669, -552, -552, -552, -552, -552, -552, 1692, 1649, + 2118, 286, -552, 13, -552, 243, -552, -552, 261, 2118, + 280, -552, 455, -552, 772, 1606, 1606, 1606, 1606, -552, + 1606, 1606, 1606, -552, 1606, 1606, 1606, 1606, 1606, 1606, + 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, -552, 1288, + 549, 1606, -552, 1606, -552, -552, 1156, 1606, 1606, 1606, + -552, 1251, 199, 246, 317, 361, -552, 1944, 1944, -552, + 55, 322, -552, 1735, 369, 1768, -552, -552, -552, -552, + -552, -552, -552, 323, 199, -552, -552, 349, -552, 84, + 329, 1768, -552, 1735, -552, -552, -552, 310, 333, 1735, + 1156, -552, -552, 335, 121, 379, -552, 346, 348, -552, + -552, 341, -552, 16, 166, -552, -552, 352, -552, -552, + 413, 545, -552, -552, -552, 358, -552, -552, -552, 360, + 1606, 199, 363, 1793, -552, 356, 1768, 1768, -552, 373, + 1606, 371, 2118, 846, -552, 2142, 620, 620, 620, 620, + -552, 620, 620, 917, -552, 587, 587, 587, 587, -552, + -552, -552, -552, 1343, -552, -552, 36, 1398, -552, 2016, + 375, 1068, 1983, 1343, -552, -552, -552, -552, -552, -552, + 0, 264, 264, 2118, 1860, 387, 384, 398, -552, 403, + 466, 1944, 238, 34, -552, 417, -552, -552, -552, 1036, + -552, -6, 422, 199, 425, 431, 432, -552, -552, 439, + 1768, 440, -552, -552, -552, -552, 1453, 1508, 1606, -552, + -552, -552, 1735, -552, 1827, 442, 159, 349, 1606, 199, + 433, 445, 1735, -552, 554, 459, 1768, 85, 379, 413, + 379, 453, 448, 464, -552, -552, 199, 413, 473, 199, + 456, 199, 474, 264, -552, 1606, 1852, 1768, -552, 143, + 258, 259, 260, -552, -552, -552, 199, 485, 264, 1606, + -552, 2046, -552, -552, 471, 479, 480, 1649, 494, 497, + 498, -552, 1606, -552, -552, 510, 503, 1156, 1068, -552, + 1944, 530, -552, -552, -552, 199, 1885, 1944, 199, 1944, + -552, -552, 569, 305, -552, -552, 513, 505, 1944, 238, + 1944, 413, 199, 199, -552, 523, 509, -552, -552, -552, + 1827, -552, 1156, 1606, 1606, 525, -552, 1735, 533, -552, + -552, -552, -552, -552, -552, -552, 1827, -552, -552, -552, + -552, -552, 529, -552, -552, -552, 1649, 528, -552, -552, + -552, 535, -552, 537, 413, -552, -552, -552, -552, -552, + -552, -552, -552, -552, 264, 540, 1343, -552, -552, 539, + 772, -552, 264, 1343, 1551, 1343, -552, -552, 542, -552, + -552, -552, -552, 165, -552, -552, 237, -552, -552, 543, + 555, 550, 558, 565, 546, -552, -552, 567, 560, 1944, + 566, -552, 576, -552, -552, 595, -552, 1944, -552, 583, + 413, -552, 588, -552, 1919, 247, 2118, 2118, 1606, 586, + 1735, -552, -552, 1827, 80, -552, 1068, 413, 413, -552, + 156, 265, 581, 199, 591, 371, 585, -552, 2118, -552, + -552, -552, -552, 1606, -552, -552, -552, 1919, 199, -552, + 1885, 1944, 413, -552, 199, 305, -552, -552, -552, 199, + 199, -552, -552, -552, -552, -552, -552, 596, 641, -552, + 1606, 1606, -552, 1649, 599, -552, -552, -552, -552, -552, + -552, -552, 1343, 590, -552, 598, -552, -552, -552, -552, + 605, 606, 618, 1827, 74, -552, -552, 2070, 2094, 613, + -552, 1919, -552, 1919, -552, -552, -552, -552, -552, -552, + -552, -552, -552, 1606, 349, -552 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -485, -485, -485, -485, -485, -485, -485, -6, -485, -485, - 597, -485, -3, -485, -485, 608, -485, -131, -28, 50, - -485, -135, -106, -485, -7, -485, -485, -485, 125, -370, - -485, -485, -485, -485, -485, -485, -138, -485, -485, -485, - -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, - 665, 15, 116, -485, -190, 111, 112, -485, 164, -59, - 398, 137, 14, 367, 603, -5, 454, 432, -485, 402, - -50, 491, -485, -485, -485, -485, -36, 18, -34, -9, - -485, -485, -485, -485, -485, 257, 441, -445, -485, -485, - -485, -485, -485, -485, -485, -485, 259, -116, -218, 265, - -485, 284, -485, -217, -286, 636, -485, -237, -485, -62, - -24, 166, -485, -314, -246, -265, -177, -485, -115, -415, - -485, -485, -379, -485, -8, -485, 435, -485, 326, 225, - 327, 204, 65, 70, -484, -485, -426, 211, -485, 462, - -485, -485 + -552, -552, -552, -552, -552, -552, -552, -15, -552, -552, + 651, -552, 2, -552, -552, 661, -552, -131, -29, 101, + -552, -134, -112, -552, 41, -552, -552, -552, 178, -366, + -552, -552, -552, -552, -552, -552, -139, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + 674, 303, 307, -552, -187, 163, 164, -552, 327, -59, + 447, -16, 81, 414, 655, 376, 103, 20, -552, 458, + 273, 547, -552, -552, -552, -552, -36, -37, -31, -38, + -552, -552, -552, -552, -552, -32, 483, -468, -552, -552, + -552, -552, -552, -552, -552, -552, 315, -116, -238, 318, + -552, 336, -552, -213, -294, 677, -552, -242, -552, -63, + 6, 213, -552, -291, -236, -288, -194, -552, -111, -433, + -552, -552, -301, -552, -46, -552, 190, -552, 377, 269, + 378, 251, 109, 115, -551, -552, -432, 262, -552, 504, + -552, -552 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -275 +#define YYTABLE_NINF -276 static const yytype_int16 yytable[] = { - 12, 119, 161, 121, 272, 174, 359, 488, 274, 436, - 502, 240, 385, 376, 323, 32, 278, 79, 508, 259, - 235, 393, 103, 32, 320, 138, 235, 555, 107, 400, - 540, 111, 375, 402, 111, 433, 235, 27, 128, 173, - 111, 571, 426, 417, 619, 389, 391, 380, 146, 150, - 109, 428, 164, 109, 457, 120, 380, 435, 9, 131, - 5, -213, 150, 226, 232, 233, 653, 4, 9, 212, - 152, 153, 154, 155, 156, 157, 390, 166, 167, 163, - 7, 207, 561, 366, 11, 9, 261, 214, 15, 216, - 218, 388, 205, 28, 276, -213, 462, 29, 20, 18, - 19, 282, 239, 222, 620, 621, 427, 10, 11, 23, - 174, 463, 632, 325, 622, 133, 27, 10, 11, -179, - -234, 273, 243, 458, 291, 579, 133, -213, 618, 26, - 111, 228, 228, 228, 10, 11, 111, 9, 146, 381, - 136, 208, 150, 367, 289, 228, 33, 134, 93, 257, - 164, 209, 537, 209, 228, 266, 124, 438, 134, 526, - 130, 528, 228, 439, 658, 492, 659, 150, 27, 228, - 501, 101, 503, 152, 156, 361, 29, 163, 638, -234, - 379, 607, 633, 331, 332, -234, 10, 11, 141, 9, - 164, 369, 228, 639, 640, 318, 652, 438, 624, 625, - 536, 79, 582, 487, 125, 438, 438, 349, 125, 586, - 451, 594, 613, 105, 357, 32, -181, 163, 243, 171, - 204, 397, 636, 516, 108, 102, 206, -265, 29, 363, - 523, 9, -265, 408, 198, 565, 414, 415, 10, 11, - -180, 228, -152, 228, 243, 79, 202, 409, -181, 411, - 451, -177, 203, 475, -175, 533, 403, 452, 430, 228, - 569, 228, 235, 489, 510, -180, 418, 228, 259, -264, - 512, 9, 235, 584, -264, -177, 150, -179, -175, 11, - 10, 11, -265, -177, 215, 496, -175, 219, -265, 228, - 497, 662, 220, 35, 122, 9, 223, 452, 37, 234, - 249, 410, 250, 94, 228, 228, 453, 112, 164, -176, - 408, 95, 47, 48, 9, 96, 79, 647, 165, 51, - 10, 11, 496, -174, -264, 97, 98, 497, -178, 209, - -264, 277, 262, -176, 353, 163, 495, 454, 480, 623, - 482, -176, 331, 332, 10, 11, 498, -174, 349, 61, - 354, 285, -178, 616, 520, -174, 226, 515, 99, 286, - -178, 64, 358, 10, 11, 483, 360, 243, 529, 478, - 231, 231, 231, 287, 490, 364, 362, 243, 228, 111, - 368, 514, 372, 626, 231, 374, 378, 111, 254, 380, - 228, 111, 481, 231, 146, 522, 150, 631, 257, 384, - 228, 231, 382, 199, 228, 386, 266, 200, 231, 394, - 507, 150, 392, 399, 401, 201, 165, 263, 164, 405, - 413, 416, 419, 264, 228, 228, 432, 445, 446, 254, - 448, 231, 79, 79, 480, 449, 482, 10, 11, 459, - 349, 542, 447, 549, 464, 163, 467, 468, 454, 469, - 480, 470, 482, 614, 454, 471, 165, 562, 349, 486, - 379, 483, 235, 491, 255, 509, 9, 79, 254, 117, - 585, 504, 243, 256, 9, 494, 9, 483, 10, 11, - 231, 506, 231, 511, 9, 513, 521, 164, 481, 525, - 527, 434, 9, 530, 531, 228, 532, 263, 231, 534, - 231, 127, 340, 264, 481, 535, 231, 554, 556, 143, - 557, 147, 265, 564, 163, 10, 11, 10, 11, 172, - 9, 520, 661, 10, 11, 10, 11, 317, 231, 568, - 463, 570, -156, 10, 11, 573, 575, 480, 228, 482, - 412, 10, 11, 231, 231, 117, 117, 117, 210, 210, - 577, 210, 210, 578, 235, 581, 288, 592, 593, 117, - 583, 595, 596, 529, 483, 243, 254, 597, 117, 10, - 11, 79, -157, 598, 165, 600, 117, 599, 150, 602, - 603, 334, 604, 117, 606, 608, 642, 615, 228, 627, - 335, 481, 349, 630, 542, 336, 337, 338, 549, 454, - 177, 255, 339, 349, 349, 480, 117, 482, 629, 340, - 185, 641, 438, 164, 189, 10, 11, 231, 648, 194, - 195, 196, 197, 649, 650, 651, 341, 657, 106, 231, - 66, 484, 483, 628, 580, 654, 590, 591, 342, 231, - 163, 370, 123, 231, 343, 371, 345, 11, 404, 493, - 284, 505, 355, 356, 352, 117, 476, 117, 91, 481, - 443, 444, 574, 231, 231, 344, 539, 563, 637, 634, - 559, 344, 344, 117, 351, 117, 0, 0, 0, 37, - 0, 117, 0, 0, 165, 0, 0, 0, 112, 0, - 0, 0, 0, 47, 48, 9, 0, 0, 0, 0, - 51, 0, 0, 117, 0, 0, 0, 224, 0, 0, - 0, 0, 0, 0, 137, 117, 0, 0, 117, 117, - 0, 0, 175, -274, 114, 0, 160, 484, 0, 169, - 225, 0, 0, 0, 231, 0, 280, 0, 0, 0, - 0, 0, 64, 484, 10, 11, 281, 0, 0, 0, - 0, 176, 177, 165, 178, 179, 180, 181, 182, 0, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 0, 450, 231, 0, 0, - 0, 0, 0, -274, 461, 0, 0, 0, 344, 0, - 0, 0, 117, -274, 0, 344, 0, 0, 0, 0, - 0, 0, 0, 344, 117, 0, 117, 0, 0, 0, - 0, 0, 0, 0, 117, 0, 0, 0, 117, 0, - 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, - 484, 0, 0, 0, 0, 0, 0, 0, 117, 117, - 292, 293, 294, 295, 0, 296, 297, 298, 0, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 0, 160, 0, 319, 0, 322, 0, - 0, 0, 137, 137, 333, 538, 0, 0, 0, 165, - 0, 545, 548, 0, 553, 0, 0, 0, 0, 0, - 0, 0, 0, 558, 344, 560, 0, 0, 484, 0, - 543, 344, 117, 344, 0, 0, 0, 0, 0, 117, - 0, 0, 344, 0, 344, 0, 0, 0, 117, 0, - 37, 0, 0, 35, 0, 0, 0, 0, 37, 112, - 0, 168, 0, 0, 47, 48, 9, 112, 0, 0, - 0, 51, 47, 48, 9, 137, 0, 0, 224, 51, - 0, 0, 117, 0, 0, 137, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 114, 0, 0, 0, 56, - 57, 225, 58, 59, 0, 0, 60, 290, 421, 61, - 0, 0, 160, 64, 601, 10, 11, 281, 421, 62, - 63, 64, 605, 10, 11, 0, 0, 0, 37, 0, - 0, 241, 117, 344, 0, 117, 0, 112, 0, 0, - 0, 344, 47, 48, 9, 0, 0, 0, 344, 51, - 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, - 0, 137, 137, 0, 545, 635, 0, 0, 0, 0, - 0, 0, 0, 114, 0, 0, 0, 0, 0, 225, - 344, 0, 0, 543, 344, 0, 0, 0, 0, -2, - 34, 64, 35, 10, 11, 36, 0, 37, 38, 39, - 137, 0, 40, 117, 41, 42, 43, 44, 45, 46, - 0, 47, 48, 9, 137, 0, 49, 50, 51, 52, - 53, 54, 160, 0, 0, 55, 0, 169, 0, 0, - 0, 0, 344, 0, 344, 0, 0, 0, 56, 57, - 0, 58, 59, 0, 0, 60, 0, 0, 61, 0, - 0, -24, 0, 0, 0, 0, 0, 0, 62, 63, - 64, 0, 10, 11, 0, 0, 0, 0, 566, 567, - 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, - 35, 0, 0, 36, -249, 37, 38, 39, 0, -249, - 40, 160, 41, 42, 112, 44, 45, 46, 0, 47, - 48, 9, 0, 0, 49, 50, 51, 52, 53, 54, - 0, 421, 0, 55, 0, 0, 0, 0, 421, 588, - 421, 0, 0, 0, 0, 0, 56, 57, 0, 58, - 59, 0, 0, 60, 0, 0, 61, 0, 0, -249, - 0, 0, 0, 0, 325, -249, 62, 63, 64, 0, - 10, 11, 324, 0, 35, 0, 0, 36, 0, 37, - 38, 39, 0, 0, 40, 0, 41, 42, 112, 44, - 45, 46, 0, 47, 48, 9, 177, 0, 49, 50, - 51, 52, 53, 54, 0, 0, 185, 55, 0, 0, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 0, - 56, 57, 0, 58, 59, 0, 0, 60, 0, 0, - 61, 0, 0, -249, 645, 646, 0, 160, 325, -249, - 62, 63, 64, 35, 10, 11, 421, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 112, 0, 334, - 0, 0, 47, 48, 9, 0, 0, 0, 335, 51, - 0, 0, 0, 336, 337, 338, 158, 0, 0, 0, - 339, 0, 0, 0, 0, 0, 0, 340, 0, 56, - 57, 0, 58, 159, 0, 0, 60, 0, 35, 61, - 314, 0, 0, 37, 341, 0, 0, 0, 0, 62, - 63, 64, 112, 10, 11, 0, 0, 47, 48, 9, - 0, 0, 343, 0, 51, 11, 0, 0, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 57, 0, 58, 59, 0, - 0, 60, 0, 35, 61, 0, 0, 0, 37, 0, - 0, 0, 420, 0, 62, 63, 64, 112, 10, 11, - 0, 0, 47, 48, 9, 0, 0, 0, 0, 51, - 0, 429, 0, 0, 0, 0, 158, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, - 57, 0, 58, 159, 0, 0, 60, 0, 35, 61, - 0, 0, 0, 37, 0, 0, 0, 0, 0, 62, - 63, 64, 112, 10, 11, 0, 0, 47, 48, 9, - 0, 473, 0, 0, 51, 0, 0, 0, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 57, 0, 58, 59, 0, - 0, 60, 0, 35, 61, 0, 0, 0, 37, 0, - 0, 0, 0, 0, 62, 63, 64, 112, 10, 11, - 0, 0, 47, 48, 9, 0, 474, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 0, 0, 56, - 57, 37, 58, 59, 0, 0, 60, 0, 0, 61, - 112, 0, 0, 0, 0, 47, 48, 9, 0, 62, - 63, 64, 51, 10, 11, 0, 0, 0, 0, 55, + 120, 119, 161, 272, 174, 122, 121, 320, 376, 274, + 359, 488, 540, 103, 235, 240, 278, 323, 571, 259, + 235, 555, 385, 164, 163, 389, 391, 433, 428, 165, + 235, 393, 436, 107, 435, 141, 375, 457, 173, 400, + 380, 212, 133, 402, 4, 35, 634, 426, -182, 214, + 37, 216, 218, 417, 462, 138, 11, 117, 27, 112, + 5, 15, 438, 7, 47, 48, 9, 204, 439, 463, + 207, 51, -181, 206, 134, 388, 228, 228, 228, 9, + -182, 231, 231, 231, 19, 620, 18, 20, 502, 366, + 228, 205, 496, -266, 656, 231, 508, 497, -266, 228, + 661, 61, 662, 23, 231, 619, 458, 228, 222, 174, + 27, 427, 231, 64, 228, 10, 11, 109, 29, 231, + 109, 164, 163, 26, -235, 133, 131, 165, 10, 11, + 208, 9, 239, 117, 117, 117, 526, 228, 528, 381, + 209, 325, 231, 289, 537, 621, 622, 117, -266, 367, + 501, 33, 503, 498, -266, 623, 117, 134, 27, 209, + 561, 164, 163, 496, 117, 635, 28, 165, 497, 492, + 29, 117, 93, 640, 101, 655, 641, 642, -178, 9, + 10, 11, 105, -235, 379, 108, 228, -265, 228, -235, + 380, 231, -265, 231, 117, 536, 136, 210, 210, 171, + 210, 210, -178, 579, 228, 357, 228, 198, -153, 231, + -178, 231, 228, 331, 332, 102, 257, 231, 29, 390, + 202, 438, 266, 9, 627, 582, 516, 487, 10, 11, + 565, 593, 586, 523, 228, 203, -181, 594, 533, 231, + 254, 451, -265, 117, -214, 117, 410, 409, -265, 228, + 228, 412, 411, -180, 231, 231, 235, 475, 430, 608, + 11, 117, 9, 117, 569, 510, 235, 489, 259, 117, + 512, 219, 10, 11, 215, 255, 625, 626, -214, 164, + 163, 9, 220, 584, 256, 165, 403, 223, 452, 10, + 11, 117, 234, -176, -177, -175, 418, 453, 665, 438, + -179, 638, -180, 117, 249, 595, 117, 117, 451, 438, + -214, 10, 11, 250, 344, 614, 127, -176, -177, -175, + 344, 344, 262, 228, -179, -176, -177, -175, 231, 9, + 10, 11, -179, 286, 624, 228, 483, 481, 480, 209, + 231, 649, 484, 482, 199, 228, 285, 124, 200, 228, + 231, 130, 287, 520, 231, 452, 201, 617, 152, 153, + 154, 155, 156, 157, 354, 166, 167, 125, 529, 228, + 228, 125, 331, 332, 231, 231, 353, 360, 10, 11, + 117, 12, 358, 362, 364, 372, 226, 232, 233, 164, + 163, 368, 117, 374, 117, 165, 32, 378, 79, 633, + 632, 345, 117, 380, 32, 382, 117, 355, 356, 261, + 384, 514, 111, 386, 392, 111, 394, 276, 9, 128, + 399, 111, 401, 413, 282, 522, 117, 117, 405, 146, + 150, 9, 483, 481, 480, 416, 419, 344, 484, 482, + 228, 432, 9, 150, 344, 231, 445, 291, 483, 481, + 480, 446, 344, 143, 484, 482, 235, 615, 164, 163, + 254, 152, 156, 94, 165, 257, 147, 10, 11, 447, + 448, 95, 254, 266, 449, 96, 9, 507, 273, 9, + 10, 11, 459, 228, 464, 97, 98, 467, 231, 263, + 117, 10, 11, 468, 469, 264, 379, 117, 361, 470, + 471, 263, 486, 243, 265, 491, 117, 264, 509, 10, + 11, 111, 277, 504, 369, 288, 511, 111, 99, 146, + 520, 10, 11, 150, 664, 10, 11, 494, 10, 11, + 9, 450, 506, 228, 513, 483, 481, 480, 231, 461, + 117, 484, 482, 344, 397, 521, 525, 527, 150, 543, + 344, 235, 344, 37, 530, 434, 408, 531, 532, 414, + 415, 344, 112, 344, 529, 172, 340, 47, 48, 9, + 534, 535, 554, 9, 51, 556, 318, 557, 254, 10, + 11, 224, 79, 564, 463, 164, 163, 568, 349, 573, + 117, 165, 570, 117, 575, 577, 32, 578, 114, 243, + 581, 583, 592, 596, 225, 483, 481, 480, 317, -157, + 363, 484, 482, 255, 599, 597, 64, 598, 10, 11, + 396, 177, 10, 11, -158, 243, 79, 10, 11, 600, + 538, 185, 601, 408, 603, 189, 545, 548, 604, 553, + 194, 195, 196, 197, 605, 607, 616, 609, 558, 628, + 560, 630, 344, 631, 177, 644, 643, 150, 651, 495, + 344, 438, 650, 117, 185, 652, 653, 344, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 37, 654, 226, + 515, 660, 106, 66, 629, 657, 112, 580, 590, 591, + 370, 47, 48, 9, 123, 404, 352, 79, 51, 91, + 344, 371, 493, 543, 344, 224, 284, 505, 476, 574, + 539, 443, 444, 639, 563, 636, 351, 0, 454, 0, + 0, 559, 114, 137, 0, 0, 0, 0, 225, 349, + 0, 0, 0, 0, 280, 160, 0, 0, 169, 602, + 64, 0, 10, 11, 281, 0, 0, 606, 243, 0, + 478, 0, 0, 0, 344, 490, 344, 0, 243, 0, + 111, 0, 0, 0, 0, 0, 0, 0, 111, 0, + 0, 0, 111, 0, 0, 146, 0, 150, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 112, + 545, 637, 150, 585, 47, 48, 9, 0, 0, 0, + 0, 51, 0, 0, 0, 0, 0, 0, 224, 0, + 0, 0, 0, 79, 79, 0, 0, 0, 0, 0, + 0, 349, 542, 0, 549, 114, 0, 0, 0, 454, + 0, 225, 0, 0, 0, 454, 0, 290, 562, 349, + 0, 0, 0, 64, 0, 10, 11, 281, 79, 292, + 293, 294, 295, 243, 296, 297, 298, 0, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 0, 160, 0, 319, 0, 322, 175, -275, + 177, 137, 137, 333, 180, 181, 182, 0, 0, 184, + 185, 186, 187, 0, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 0, 0, 0, 0, 176, 177, 0, + 178, 179, 180, 181, 182, 0, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 0, 0, 0, 0, 0, 0, 0, 0, -275, + 0, 0, 0, 0, 0, 0, 243, 0, 0, -275, + 176, 177, 79, 0, 137, 180, 181, 182, 0, 150, + 184, 185, 186, 187, 137, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 349, 0, 542, 0, 0, 0, + 549, 454, 0, 0, 0, 349, 349, 421, 0, 0, + 0, 160, 0, -2, 34, 0, 35, 421, 0, 36, + 0, 37, 38, 39, 0, 0, 40, 0, 41, 42, + 43, 44, 45, 46, 0, 47, 48, 9, 0, 0, + 49, 50, 51, 52, 53, 54, 0, 0, 0, 55, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 137, 137, 56, 57, 334, 58, 59, 460, 0, 60, + 0, 0, 61, 335, 0, -24, 0, 0, 336, 337, + 338, 0, 62, 63, 64, 339, 10, 11, 0, 324, + 0, 35, 340, 0, 36, -250, 37, 38, 39, 137, + -250, 40, 0, 41, 42, 112, 44, 45, 46, 341, + 47, 48, 9, 137, 0, 49, 50, 51, 52, 53, + 54, 160, 0, 0, 55, 0, 169, 343, 0, 0, + 11, 0, 0, 0, 0, 0, 0, 56, 57, 0, + 58, 59, 0, 0, 60, 0, 0, 61, 0, 0, + -250, 0, 0, 0, 0, 325, -250, 62, 63, 64, + 0, 10, 11, 0, 0, 0, 0, 566, 567, 0, + 0, 0, 0, 0, 0, 0, 0, 324, 0, 35, + 0, 0, 36, 0, 37, 38, 39, 0, 0, 40, + 160, 41, 42, 112, 44, 45, 46, 0, 47, 48, + 9, 0, 0, 49, 50, 51, 52, 53, 54, 0, + 421, 0, 55, 0, 0, 0, 0, 421, 588, 421, + 0, 0, 0, 0, 0, 56, 57, 0, 58, 59, + 0, 0, 60, 0, 0, 61, 0, 0, -250, 0, + 0, 0, 0, 325, -250, 62, 63, 64, 0, 10, + 11, 0, 35, 0, 0, 0, 0, 37, 0, 0, + 168, 0, 0, 0, 0, 0, 112, 0, 0, 0, + 0, 47, 48, 9, 0, 0, 0, 0, 51, 334, + 0, 0, 0, 0, 0, 55, 0, 169, 335, 0, + 0, 0, 0, 336, 337, 338, 0, 0, 56, 57, + 339, 58, 59, 0, 0, 60, 0, 340, 61, 0, + 0, 35, 0, 0, 647, 648, 37, 160, 62, 63, + 64, 0, 10, 11, 341, 112, 421, 0, 0, 0, + 47, 48, 9, 0, 0, 0, 342, 51, 0, 0, + 0, 0, 343, 0, 158, 11, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 56, 57, 0, + 58, 159, 0, 0, 60, 0, 35, 61, 314, 0, + 0, 37, 0, 0, 0, 0, 0, 62, 63, 64, + 112, 10, 11, 0, 0, 47, 48, 9, 0, 0, + 0, 0, 51, 0, 0, 0, 0, 0, 0, 55, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 56, 57, 0, 58, 59, 0, 0, 60, + 0, 35, 61, 0, 0, 0, 37, 0, 0, 0, + 420, 0, 62, 63, 64, 112, 10, 11, 0, 0, + 47, 48, 9, 0, 0, 0, 0, 51, 0, 429, + 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 56, 57, 0, + 58, 159, 0, 0, 60, 0, 35, 61, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 62, 63, 64, + 112, 10, 11, 0, 0, 47, 48, 9, 0, 473, + 0, 0, 51, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 0, 58, 59, 0, 0, 60, 0, 35, 61, 0, 0, 0, 37, 0, 0, 0, - 587, 0, 62, 63, 64, 112, 10, 11, 0, 0, - 47, 48, 9, 0, 0, 0, 0, 51, 0, 0, + 0, 0, 62, 63, 64, 112, 10, 11, 0, 0, + 47, 48, 9, 0, 474, 0, 0, 51, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 56, 57, 37, 58, 59, 0, 0, 60, 0, 0, 61, 112, 0, 0, 0, 0, 47, 48, 9, 0, 62, 63, 64, - 51, 10, 11, 0, 0, 0, 0, 158, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, - 56, 57, 283, 58, 159, 0, 0, 60, 0, 0, - 61, 112, 0, 0, 0, 0, 47, 48, 9, 0, - 62, 63, 64, 51, 10, 11, 0, 0, 0, 0, - 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 56, 57, 37, 58, 59, 0, 0, - 60, 0, 0, 61, 112, 0, 0, 0, 0, 47, - 48, 9, 0, 62, 63, 64, 51, 10, 11, 0, - 37, 0, 0, 224, 0, 0, 0, 0, 37, 112, - 0, 0, 0, 0, 47, 48, 9, 112, 0, 0, - 114, 51, 47, 48, 9, 0, 225, 0, 113, 51, - 0, 0, 0, 0, 37, 0, 224, 0, 64, 0, - 10, 11, 396, 112, 0, 114, 0, 0, 47, 48, - 9, 115, 0, 114, 0, 51, 0, 0, 0, 225, - 0, 37, 406, 64, 0, 10, 11, 0, 0, 0, - 112, 64, 0, 10, 11, 47, 48, 9, 0, 114, - 0, 0, 51, 0, 0, 407, 0, 283, 0, 224, - 0, 0, 0, 0, 0, 334, 112, 64, 0, 10, - 11, 47, 48, 9, 335, 0, 114, 0, 51, 336, - 337, 338, 477, 0, 0, 224, 339, 0, 0, 0, - 334, 0, 0, 440, 64, 0, 10, 11, 334, 335, - 0, 460, 114, 0, 336, 337, 541, 335, 225, 0, - 341, 339, 336, 337, 338, 0, 441, 0, 340, 339, - 64, 0, 10, 11, 334, 0, 340, 0, 343, 0, - 0, 11, 0, 335, 0, 341, 0, 0, 336, 337, - 338, 0, 0, 341, 0, 339, 0, 0, 0, 0, - 0, 0, 340, 343, 0, 10, 11, 0, 0, 0, - 0, 343, 177, 0, 11, 0, 180, 181, 182, 341, - 0, 184, 185, 186, 187, 609, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 0, 0, 343, 176, 177, - 11, 178, 0, 180, 181, 182, 0, 0, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 176, 177, 0, 178, 0, 180, 181, 182, 0, - 434, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 0, 0, 0, 0, 0, - 0, 176, 177, 0, 178, 0, 180, 181, 182, 0, - 431, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 176, 177, 0, 178, 0, - 180, 181, 182, 0, 524, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 176, - 177, 0, 178, 0, 180, 181, 182, 0, 655, 184, + 51, 10, 11, 0, 0, 0, 0, 55, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 57, 0, 58, 59, 0, 0, 60, 0, 35, + 61, 0, 0, 0, 37, 0, 0, 0, 587, 0, + 62, 63, 64, 112, 10, 11, 0, 0, 47, 48, + 9, 0, 0, 0, 0, 51, 0, 0, 0, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 35, 0, 0, 56, 57, 37, 58, 59, + 0, 0, 60, 0, 0, 61, 112, 0, 0, 0, + 0, 47, 48, 9, 0, 62, 63, 64, 51, 10, + 11, 0, 0, 0, 0, 158, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 56, 57, + 283, 58, 159, 0, 0, 60, 0, 0, 61, 112, + 0, 0, 0, 0, 47, 48, 9, 0, 62, 63, + 64, 51, 10, 11, 0, 0, 0, 0, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 56, 57, 37, 58, 59, 241, 0, 60, 0, + 0, 61, 112, 0, 0, 0, 0, 47, 48, 9, + 0, 62, 63, 64, 51, 10, 11, 0, 37, 0, + 0, 224, 0, 0, 0, 0, 37, 112, 0, 0, + 0, 0, 47, 48, 9, 112, 0, 0, 114, 51, + 47, 48, 9, 0, 225, 0, 113, 51, 0, 0, + 0, 37, 0, 0, 224, 0, 64, 0, 10, 11, + 112, 0, 0, 114, 0, 47, 48, 9, 0, 115, + 0, 114, 51, 0, 0, 0, 0, 225, 0, 406, + 0, 64, 0, 10, 11, 37, 0, 0, 0, 64, + 0, 10, 11, 0, 112, 0, 114, 0, 0, 47, + 48, 9, 407, 0, 0, 0, 51, 0, 0, 0, + 283, 0, 0, 224, 64, 0, 10, 11, 334, 112, + 0, 0, 0, 0, 47, 48, 9, 335, 0, 0, + 114, 51, 336, 337, 338, 0, 477, 0, 224, 339, + 0, 0, 0, 334, 0, 0, 440, 0, 64, 0, + 10, 11, 335, 0, 0, 114, 0, 336, 337, 541, + 0, 225, 0, 341, 339, 0, 0, 0, 0, 441, + 0, 340, 0, 64, 0, 10, 11, 334, 0, 0, + 0, 343, 0, 0, 11, 0, 335, 0, 341, 0, + 0, 336, 337, 338, 0, 0, 0, 0, 339, 0, + 0, 0, 334, 0, 0, 340, 343, 0, 10, 11, + 0, 335, 0, 0, 0, 0, 336, 337, 338, 0, + 0, 0, 341, 339, 0, 0, 0, 0, 610, 0, + 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 343, 0, 0, 11, 0, 0, 0, 341, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 343, 176, 177, 11, 178, + 0, 180, 181, 182, 0, 0, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, + 177, 0, 178, 0, 180, 181, 182, 0, 434, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 0, 0, 0, 0, 0, 0, 176, + 177, 0, 178, 0, 180, 181, 182, 0, 431, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 176, 177, 0, 178, 0, 180, 181, - 182, 0, 656, 184, 185, 186, 187, 188, 189, 190, + 182, 0, 524, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 176, 177, 0, - 0, 0, 180, 181, 182, 0, 0, 184, 185, 186, + 178, 0, 180, 181, 182, 0, 658, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 176, 177, 0, 0, 0, 180, 181, 182, 0, - 0, 184, 185, 186, 187, 0, 189, 190, 191, 192, - 193, 194, 195, 196, 197 + 197, 176, 177, 0, 178, 0, 180, 181, 182, 0, + 659, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 176, 177, 0, 0, 0, + 180, 181, 182, 0, 0, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197 }; static const yytype_int16 yycheck[] = { - 5, 37, 61, 37, 142, 67, 223, 377, 143, 323, - 389, 126, 258, 250, 204, 20, 147, 22, 397, 135, - 126, 267, 28, 28, 201, 49, 132, 453, 31, 275, - 445, 36, 249, 279, 39, 321, 142, 3, 43, 67, - 45, 486, 11, 289, 5, 263, 264, 24, 53, 54, - 36, 316, 61, 39, 3, 37, 24, 322, 24, 45, - 25, 1, 67, 113, 114, 115, 20, 0, 24, 59, - 55, 56, 57, 58, 59, 60, 53, 62, 63, 61, - 25, 5, 461, 5, 74, 24, 136, 95, 24, 97, - 98, 59, 1, 59, 144, 35, 60, 63, 21, 3, - 62, 151, 126, 106, 65, 66, 75, 73, 74, 24, - 172, 75, 596, 67, 75, 35, 3, 73, 74, 59, - 3, 60, 127, 72, 174, 504, 35, 67, 573, 63, - 135, 113, 114, 115, 73, 74, 141, 24, 143, 255, - 71, 65, 147, 65, 172, 127, 62, 67, 62, 135, - 159, 75, 438, 75, 136, 141, 40, 62, 67, 424, - 44, 426, 144, 68, 648, 382, 650, 172, 3, 151, - 388, 24, 390, 158, 159, 225, 63, 159, 604, 62, - 63, 560, 597, 207, 208, 68, 73, 74, 51, 24, - 199, 241, 174, 608, 609, 200, 641, 62, 577, 578, - 437, 206, 516, 68, 40, 62, 62, 212, 44, 523, - 3, 68, 68, 3, 220, 220, 35, 199, 223, 62, - 83, 271, 601, 413, 3, 60, 89, 7, 63, 234, - 420, 24, 12, 283, 67, 472, 286, 287, 73, 74, - 59, 223, 66, 225, 249, 250, 66, 283, 67, 283, - 3, 35, 59, 368, 35, 432, 280, 50, 317, 241, - 477, 243, 368, 378, 399, 59, 290, 249, 384, 7, - 401, 24, 378, 519, 12, 59, 281, 59, 59, 74, - 73, 74, 62, 67, 24, 7, 67, 64, 68, 271, - 12, 661, 62, 3, 37, 24, 59, 50, 8, 63, - 59, 283, 67, 9, 286, 287, 59, 17, 317, 35, - 360, 17, 22, 23, 24, 21, 321, 631, 61, 29, - 73, 74, 7, 35, 62, 31, 32, 12, 35, 75, - 68, 60, 35, 59, 59, 317, 386, 342, 374, 576, - 374, 67, 366, 367, 73, 74, 68, 59, 353, 59, - 3, 60, 59, 570, 416, 67, 406, 407, 64, 72, - 67, 71, 60, 73, 74, 374, 8, 372, 427, 374, - 113, 114, 115, 72, 379, 35, 60, 382, 360, 384, - 62, 405, 75, 68, 127, 60, 62, 392, 24, 24, - 372, 396, 374, 136, 399, 419, 401, 587, 384, 62, - 382, 144, 59, 59, 386, 72, 392, 63, 151, 3, - 396, 416, 62, 62, 62, 71, 159, 53, 427, 65, - 67, 62, 65, 59, 406, 407, 66, 59, 67, 24, - 67, 174, 437, 438, 470, 8, 470, 73, 74, 65, - 445, 446, 71, 448, 62, 427, 62, 62, 453, 62, - 486, 60, 486, 568, 459, 60, 199, 462, 463, 60, - 63, 470, 568, 60, 59, 35, 24, 472, 24, 37, - 520, 60, 477, 68, 24, 68, 24, 486, 73, 74, - 223, 68, 225, 60, 24, 60, 60, 496, 470, 75, - 68, 75, 24, 60, 60, 477, 60, 53, 241, 60, - 243, 59, 36, 59, 486, 68, 249, 3, 62, 59, - 72, 59, 68, 60, 496, 73, 74, 73, 74, 59, - 24, 583, 660, 73, 74, 73, 74, 59, 271, 62, - 75, 59, 59, 73, 74, 60, 66, 573, 520, 573, - 283, 73, 74, 286, 287, 113, 114, 115, 94, 95, - 60, 97, 98, 60, 660, 60, 60, 60, 72, 127, - 62, 60, 60, 622, 573, 570, 24, 59, 136, 73, - 74, 576, 59, 68, 317, 72, 144, 62, 583, 68, - 62, 8, 49, 151, 62, 59, 14, 60, 570, 68, - 17, 573, 597, 68, 599, 22, 23, 24, 603, 604, - 34, 59, 29, 608, 609, 641, 174, 641, 60, 36, - 44, 60, 62, 622, 48, 73, 74, 360, 60, 53, - 54, 55, 56, 60, 60, 60, 53, 68, 31, 372, - 22, 374, 641, 583, 509, 642, 525, 525, 65, 382, - 622, 243, 39, 386, 71, 243, 211, 74, 281, 384, - 159, 392, 217, 218, 213, 223, 372, 225, 22, 641, - 334, 334, 496, 406, 407, 211, 441, 463, 603, 599, - 459, 217, 218, 241, 212, 243, -1, -1, -1, 8, - -1, 249, -1, -1, 427, -1, -1, -1, 17, -1, - -1, -1, -1, 22, 23, 24, -1, -1, -1, -1, - 29, -1, -1, 271, -1, -1, -1, 36, -1, -1, - -1, -1, -1, -1, 49, 283, -1, -1, 286, 287, - -1, -1, 4, 5, 53, -1, 61, 470, -1, 64, - 59, -1, -1, -1, 477, -1, 65, -1, -1, -1, - -1, -1, 71, 486, 73, 74, 75, -1, -1, -1, - -1, 33, 34, 496, 36, 37, 38, 39, 40, -1, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 341, 520, -1, -1, - -1, -1, -1, 65, 349, -1, -1, -1, 334, -1, - -1, -1, 360, 75, -1, 341, -1, -1, -1, -1, - -1, -1, -1, 349, 372, -1, 374, -1, -1, -1, - -1, -1, -1, -1, 382, -1, -1, -1, 386, -1, - -1, -1, -1, -1, -1, -1, -1, 570, -1, -1, - 573, -1, -1, -1, -1, -1, -1, -1, 406, 407, - 175, 176, 177, 178, -1, 180, 181, 182, -1, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, -1, 201, -1, 203, -1, - -1, -1, 207, 208, 209, 440, -1, -1, -1, 622, - -1, 446, 447, -1, 449, -1, -1, -1, -1, -1, - -1, -1, -1, 458, 440, 460, -1, -1, 641, -1, - 446, 447, 470, 449, -1, -1, -1, -1, -1, 477, - -1, -1, 458, -1, 460, -1, -1, -1, 486, -1, - 8, -1, -1, 3, -1, -1, -1, -1, 8, 17, - -1, 11, -1, -1, 22, 23, 24, 17, -1, -1, - -1, 29, 22, 23, 24, 280, -1, -1, 36, 29, - -1, -1, 520, -1, -1, 290, 36, -1, -1, -1, - -1, -1, -1, -1, -1, 53, -1, -1, -1, 49, - 50, 59, 52, 53, -1, -1, 56, 65, 313, 59, - -1, -1, 317, 71, 549, 73, 74, 75, 323, 69, - 70, 71, 557, 73, 74, -1, -1, -1, 8, -1, - -1, 11, 570, 549, -1, 573, -1, 17, -1, -1, - -1, 557, 22, 23, 24, -1, -1, -1, 564, 29, - -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, - -1, 366, 367, -1, 599, 600, -1, -1, -1, -1, - -1, -1, -1, 53, -1, -1, -1, -1, -1, 59, - 596, -1, -1, 599, 600, -1, -1, -1, -1, 0, - 1, 71, 3, 73, 74, 6, -1, 8, 9, 10, - 405, -1, 13, 641, 15, 16, 17, 18, 19, 20, - -1, 22, 23, 24, 419, -1, 27, 28, 29, 30, - 31, 32, 427, -1, -1, 36, -1, 432, -1, -1, - -1, -1, 648, -1, 650, -1, -1, -1, 49, 50, - -1, 52, 53, -1, -1, 56, -1, -1, 59, -1, - -1, 62, -1, -1, -1, -1, -1, -1, 69, 70, - 71, -1, 73, 74, -1, -1, -1, -1, 473, 474, - -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, - 3, -1, -1, 6, 7, 8, 9, 10, -1, 12, - 13, 496, 15, 16, 17, 18, 19, 20, -1, 22, - 23, 24, -1, -1, 27, 28, 29, 30, 31, 32, - -1, 516, -1, 36, -1, -1, -1, -1, 523, 524, - 525, -1, -1, -1, -1, -1, 49, 50, -1, 52, - 53, -1, -1, 56, -1, -1, 59, -1, -1, 62, - -1, -1, -1, -1, 67, 68, 69, 70, 71, -1, - 73, 74, 1, -1, 3, -1, -1, 6, -1, 8, - 9, 10, -1, -1, 13, -1, 15, 16, 17, 18, - 19, 20, -1, 22, 23, 24, 34, -1, 27, 28, - 29, 30, 31, 32, -1, -1, 44, 36, -1, -1, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 49, 50, -1, 52, 53, -1, -1, 56, -1, -1, - 59, -1, -1, 62, 619, 620, -1, 622, 67, 68, - 69, 70, 71, 3, 73, 74, 631, -1, 8, -1, - -1, -1, -1, -1, -1, -1, -1, 17, -1, 8, - -1, -1, 22, 23, 24, -1, -1, -1, 17, 29, - -1, -1, -1, 22, 23, 24, 36, -1, -1, -1, - 29, -1, -1, -1, -1, -1, -1, 36, -1, 49, - 50, -1, 52, 53, -1, -1, 56, -1, 3, 59, - 60, -1, -1, 8, 53, -1, -1, -1, -1, 69, - 70, 71, 17, 73, 74, -1, -1, 22, 23, 24, - -1, -1, 71, -1, 29, 74, -1, -1, -1, -1, - -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 49, 50, -1, 52, 53, -1, - -1, 56, -1, 3, 59, -1, -1, -1, 8, -1, - -1, -1, 67, -1, 69, 70, 71, 17, 73, 74, - -1, -1, 22, 23, 24, -1, -1, -1, -1, 29, - -1, 31, -1, -1, -1, -1, 36, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, - 50, -1, 52, 53, -1, -1, 56, -1, 3, 59, - -1, -1, -1, 8, -1, -1, -1, -1, -1, 69, - 70, 71, 17, 73, 74, -1, -1, 22, 23, 24, - -1, 26, -1, -1, 29, -1, -1, -1, -1, -1, - -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 49, 50, -1, 52, 53, -1, - -1, 56, -1, 3, 59, -1, -1, -1, 8, -1, - -1, -1, -1, -1, 69, 70, 71, 17, 73, 74, - -1, -1, 22, 23, 24, -1, 26, -1, -1, 29, - -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3, -1, -1, 49, - 50, 8, 52, 53, -1, -1, 56, -1, -1, 59, - 17, -1, -1, -1, -1, 22, 23, 24, -1, 69, - 70, 71, 29, 73, 74, -1, -1, -1, -1, 36, + 37, 37, 61, 142, 67, 37, 37, 201, 250, 143, + 223, 377, 445, 28, 126, 126, 147, 204, 486, 135, + 132, 453, 258, 61, 61, 263, 264, 321, 316, 61, + 142, 267, 323, 31, 322, 51, 249, 3, 67, 275, + 24, 59, 35, 279, 0, 3, 597, 11, 35, 95, + 8, 97, 98, 289, 60, 49, 74, 37, 3, 17, + 25, 24, 62, 25, 22, 23, 24, 83, 68, 75, + 5, 29, 59, 89, 67, 59, 113, 114, 115, 24, + 67, 113, 114, 115, 62, 5, 3, 21, 389, 5, + 127, 1, 7, 7, 20, 127, 397, 12, 12, 136, + 651, 59, 653, 24, 136, 573, 72, 144, 106, 172, + 3, 75, 144, 71, 151, 73, 74, 36, 63, 151, + 39, 159, 159, 63, 3, 35, 45, 159, 73, 74, + 65, 24, 126, 113, 114, 115, 424, 174, 426, 255, + 75, 67, 174, 172, 438, 65, 66, 127, 62, 65, + 388, 62, 390, 68, 68, 75, 136, 67, 3, 75, + 461, 199, 199, 7, 144, 598, 59, 199, 12, 382, + 63, 151, 62, 605, 24, 643, 609, 610, 35, 24, + 73, 74, 3, 62, 63, 3, 223, 7, 225, 68, + 24, 223, 12, 225, 174, 437, 71, 94, 95, 62, + 97, 98, 59, 504, 241, 220, 243, 67, 66, 241, + 67, 243, 249, 207, 208, 60, 135, 249, 63, 53, + 66, 62, 141, 24, 68, 516, 413, 68, 73, 74, + 472, 66, 523, 420, 271, 59, 59, 72, 432, 271, + 24, 3, 62, 223, 1, 225, 283, 283, 68, 286, + 287, 283, 283, 59, 286, 287, 368, 368, 317, 560, + 74, 241, 24, 243, 477, 399, 378, 378, 384, 249, + 401, 64, 73, 74, 24, 59, 577, 578, 35, 317, + 317, 24, 62, 519, 68, 317, 280, 59, 50, 73, + 74, 271, 63, 35, 35, 35, 290, 59, 664, 62, + 35, 602, 59, 283, 59, 68, 286, 287, 3, 62, + 67, 73, 74, 67, 211, 68, 59, 59, 59, 59, + 217, 218, 35, 360, 59, 67, 67, 67, 360, 24, + 73, 74, 67, 72, 576, 372, 374, 374, 374, 75, + 372, 632, 374, 374, 59, 382, 60, 40, 63, 386, + 382, 44, 72, 416, 386, 50, 71, 570, 55, 56, + 57, 58, 59, 60, 3, 62, 63, 40, 427, 406, + 407, 44, 366, 367, 406, 407, 59, 8, 73, 74, + 360, 5, 60, 60, 35, 75, 113, 114, 115, 427, + 427, 62, 372, 60, 374, 427, 20, 62, 22, 593, + 587, 211, 382, 24, 28, 59, 386, 217, 218, 136, + 62, 405, 36, 72, 62, 39, 3, 144, 24, 43, + 62, 45, 62, 67, 151, 419, 406, 407, 65, 53, + 54, 24, 470, 470, 470, 62, 65, 334, 470, 470, + 477, 66, 24, 67, 341, 477, 59, 174, 486, 486, + 486, 67, 349, 59, 486, 486, 568, 568, 496, 496, + 24, 158, 159, 9, 496, 384, 59, 73, 74, 71, + 67, 17, 24, 392, 8, 21, 24, 396, 60, 24, + 73, 74, 65, 520, 62, 31, 32, 62, 520, 53, + 470, 73, 74, 62, 62, 59, 63, 477, 225, 60, + 60, 53, 60, 127, 68, 60, 486, 59, 35, 73, + 74, 135, 60, 60, 241, 60, 60, 141, 64, 143, + 583, 73, 74, 147, 663, 73, 74, 68, 73, 74, + 24, 341, 68, 570, 60, 573, 573, 573, 570, 349, + 520, 573, 573, 440, 271, 60, 75, 68, 172, 446, + 447, 663, 449, 8, 60, 75, 283, 60, 60, 286, + 287, 458, 17, 460, 623, 59, 36, 22, 23, 24, + 60, 68, 3, 24, 29, 62, 200, 72, 24, 73, + 74, 36, 206, 60, 75, 623, 623, 62, 212, 60, + 570, 623, 59, 573, 66, 60, 220, 60, 53, 223, + 60, 62, 60, 60, 59, 643, 643, 643, 59, 59, + 234, 643, 643, 59, 68, 60, 71, 59, 73, 74, + 75, 34, 73, 74, 59, 249, 250, 73, 74, 62, + 440, 44, 72, 360, 68, 48, 446, 447, 62, 449, + 53, 54, 55, 56, 49, 62, 60, 59, 458, 68, + 460, 60, 549, 68, 34, 14, 60, 281, 60, 386, + 557, 62, 72, 643, 44, 60, 60, 564, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 8, 60, 406, + 407, 68, 31, 22, 583, 644, 17, 509, 525, 525, + 243, 22, 23, 24, 39, 281, 213, 321, 29, 22, + 597, 243, 384, 600, 601, 36, 159, 392, 372, 496, + 441, 334, 334, 604, 463, 600, 212, -1, 342, -1, + -1, 459, 53, 49, -1, -1, -1, -1, 59, 353, + -1, -1, -1, -1, 65, 61, -1, -1, 64, 549, + 71, -1, 73, 74, 75, -1, -1, 557, 372, -1, + 374, -1, -1, -1, 651, 379, 653, -1, 382, -1, + 384, -1, -1, -1, -1, -1, -1, -1, 392, -1, + -1, -1, 396, -1, -1, 399, -1, 401, -1, -1, + 8, -1, -1, -1, -1, -1, -1, -1, -1, 17, + 600, 601, 416, 520, 22, 23, 24, -1, -1, -1, + -1, 29, -1, -1, -1, -1, -1, -1, 36, -1, + -1, -1, -1, 437, 438, -1, -1, -1, -1, -1, + -1, 445, 446, -1, 448, 53, -1, -1, -1, 453, + -1, 59, -1, -1, -1, 459, -1, 65, 462, 463, + -1, -1, -1, 71, -1, 73, 74, 75, 472, 175, + 176, 177, 178, 477, 180, 181, 182, -1, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, -1, 199, -1, 201, -1, 203, 4, 5, + 34, 207, 208, 209, 38, 39, 40, -1, -1, 43, + 44, 45, 46, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, -1, -1, -1, 33, 34, -1, + 36, 37, 38, 39, 40, -1, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, -1, -1, -1, -1, -1, -1, -1, 65, + -1, -1, -1, -1, -1, -1, 570, -1, -1, 75, + 33, 34, 576, -1, 280, 38, 39, 40, -1, 583, + 43, 44, 45, 46, 290, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 598, -1, 600, -1, -1, -1, + 604, 605, -1, -1, -1, 609, 610, 313, -1, -1, + -1, 317, -1, 0, 1, -1, 3, 323, -1, 6, + -1, 8, 9, 10, -1, -1, 13, -1, 15, 16, + 17, 18, 19, 20, -1, 22, 23, 24, -1, -1, + 27, 28, 29, 30, 31, 32, -1, -1, -1, 36, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 366, 367, 49, 50, 8, 52, 53, 11, -1, 56, + -1, -1, 59, 17, -1, 62, -1, -1, 22, 23, + 24, -1, 69, 70, 71, 29, 73, 74, -1, 1, + -1, 3, 36, -1, 6, 7, 8, 9, 10, 405, + 12, 13, -1, 15, 16, 17, 18, 19, 20, 53, + 22, 23, 24, 419, -1, 27, 28, 29, 30, 31, + 32, 427, -1, -1, 36, -1, 432, 71, -1, -1, + 74, -1, -1, -1, -1, -1, -1, 49, 50, -1, + 52, 53, -1, -1, 56, -1, -1, 59, -1, -1, + 62, -1, -1, -1, -1, 67, 68, 69, 70, 71, + -1, 73, 74, -1, -1, -1, -1, 473, 474, -1, + -1, -1, -1, -1, -1, -1, -1, 1, -1, 3, + -1, -1, 6, -1, 8, 9, 10, -1, -1, 13, + 496, 15, 16, 17, 18, 19, 20, -1, 22, 23, + 24, -1, -1, 27, 28, 29, 30, 31, 32, -1, + 516, -1, 36, -1, -1, -1, -1, 523, 524, 525, + -1, -1, -1, -1, -1, 49, 50, -1, 52, 53, + -1, -1, 56, -1, -1, 59, -1, -1, 62, -1, + -1, -1, -1, 67, 68, 69, 70, 71, -1, 73, + 74, -1, 3, -1, -1, -1, -1, 8, -1, -1, + 11, -1, -1, -1, -1, -1, 17, -1, -1, -1, + -1, 22, 23, 24, -1, -1, -1, -1, 29, 8, + -1, -1, -1, -1, -1, 36, -1, 593, 17, -1, + -1, -1, -1, 22, 23, 24, -1, -1, 49, 50, + 29, 52, 53, -1, -1, 56, -1, 36, 59, -1, + -1, 3, -1, -1, 620, 621, 8, 623, 69, 70, + 71, -1, 73, 74, 53, 17, 632, -1, -1, -1, + 22, 23, 24, -1, -1, -1, 65, 29, -1, -1, + -1, -1, 71, -1, 36, 74, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 49, 50, -1, + 52, 53, -1, -1, 56, -1, 3, 59, 60, -1, + -1, 8, -1, -1, -1, -1, -1, 69, 70, 71, + 17, 73, 74, -1, -1, 22, 23, 24, -1, -1, + -1, -1, 29, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, 50, -1, 52, 53, -1, -1, 56, -1, 3, 59, -1, -1, -1, 8, -1, -1, -1, 67, -1, 69, 70, 71, 17, 73, 74, -1, -1, - 22, 23, 24, -1, -1, -1, -1, 29, -1, -1, + 22, 23, 24, -1, -1, -1, -1, 29, -1, 31, + -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 49, 50, -1, + 52, 53, -1, -1, 56, -1, 3, 59, -1, -1, + -1, 8, -1, -1, -1, -1, -1, 69, 70, 71, + 17, 73, 74, -1, -1, 22, 23, 24, -1, 26, + -1, -1, 29, -1, -1, -1, -1, -1, -1, 36, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 49, 50, -1, 52, 53, -1, -1, 56, + -1, 3, 59, -1, -1, -1, 8, -1, -1, -1, + -1, -1, 69, 70, 71, 17, 73, 74, -1, -1, + 22, 23, 24, -1, 26, -1, -1, 29, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, 49, 50, 8, 52, 53, -1, -1, 56, -1, -1, 59, 17, -1, -1, -1, -1, 22, 23, 24, -1, 69, 70, 71, 29, 73, 74, -1, -1, -1, -1, 36, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, - 49, 50, 8, 52, 53, -1, -1, 56, -1, -1, - 59, 17, -1, -1, -1, -1, 22, 23, 24, -1, - 69, 70, 71, 29, 73, 74, -1, -1, -1, -1, - 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 49, 50, 8, 52, 53, -1, -1, - 56, -1, -1, 59, 17, -1, -1, -1, -1, 22, - 23, 24, -1, 69, 70, 71, 29, 73, 74, -1, - 8, -1, -1, 36, -1, -1, -1, -1, 8, 17, - -1, -1, -1, -1, 22, 23, 24, 17, -1, -1, - 53, 29, 22, 23, 24, -1, 59, -1, 36, 29, - -1, -1, -1, -1, 8, -1, 36, -1, 71, -1, - 73, 74, 75, 17, -1, 53, -1, -1, 22, 23, - 24, 59, -1, 53, -1, 29, -1, -1, -1, 59, - -1, 8, 36, 71, -1, 73, 74, -1, -1, -1, - 17, 71, -1, 73, 74, 22, 23, 24, -1, 53, - -1, -1, 29, -1, -1, 59, -1, 8, -1, 36, - -1, -1, -1, -1, -1, 8, 17, 71, -1, 73, - 74, 22, 23, 24, 17, -1, 53, -1, 29, 22, - 23, 24, 59, -1, -1, 36, 29, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 49, 50, -1, 52, 53, -1, -1, 56, -1, 3, + 59, -1, -1, -1, 8, -1, -1, -1, 67, -1, + 69, 70, 71, 17, 73, 74, -1, -1, 22, 23, + 24, -1, -1, -1, -1, 29, -1, -1, -1, -1, + -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3, -1, -1, 49, 50, 8, 52, 53, + -1, -1, 56, -1, -1, 59, 17, -1, -1, -1, + -1, 22, 23, 24, -1, 69, 70, 71, 29, 73, + 74, -1, -1, -1, -1, 36, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3, -1, -1, 49, 50, + 8, 52, 53, -1, -1, 56, -1, -1, 59, 17, + -1, -1, -1, -1, 22, 23, 24, -1, 69, 70, + 71, 29, 73, 74, -1, -1, -1, -1, 36, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 49, 50, 8, 52, 53, 11, -1, 56, -1, + -1, 59, 17, -1, -1, -1, -1, 22, 23, 24, + -1, 69, 70, 71, 29, 73, 74, -1, 8, -1, + -1, 36, -1, -1, -1, -1, 8, 17, -1, -1, + -1, -1, 22, 23, 24, 17, -1, -1, 53, 29, + 22, 23, 24, -1, 59, -1, 36, 29, -1, -1, + -1, 8, -1, -1, 36, -1, 71, -1, 73, 74, + 17, -1, -1, 53, -1, 22, 23, 24, -1, 59, + -1, 53, 29, -1, -1, -1, -1, 59, -1, 36, + -1, 71, -1, 73, 74, 8, -1, -1, -1, 71, + -1, 73, 74, -1, 17, -1, 53, -1, -1, 22, + 23, 24, 59, -1, -1, -1, 29, -1, -1, -1, 8, -1, -1, 36, 71, -1, 73, 74, 8, 17, - -1, 11, 53, -1, 22, 23, 24, 17, 59, -1, + -1, -1, -1, -1, 22, 23, 24, 17, -1, -1, 53, 29, 22, 23, 24, -1, 59, -1, 36, 29, - 71, -1, 73, 74, 8, -1, 36, -1, 71, -1, - -1, 74, -1, 17, -1, 53, -1, -1, 22, 23, - 24, -1, -1, 53, -1, 29, -1, -1, -1, -1, - -1, -1, 36, 71, -1, 73, 74, -1, -1, -1, - -1, 71, 34, -1, 74, -1, 38, 39, 40, 53, - -1, 43, 44, 45, 46, 59, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, -1, 71, 33, 34, - 74, 36, -1, 38, 39, 40, -1, -1, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 33, 34, -1, 36, -1, 38, 39, 40, -1, - 75, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, -1, -1, -1, -1, - -1, 33, 34, -1, 36, -1, 38, 39, 40, -1, - 72, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 33, 34, -1, 36, -1, - 38, 39, 40, -1, 66, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 33, - 34, -1, 36, -1, 38, 39, 40, -1, 66, 43, + -1, -1, -1, 8, -1, -1, 36, -1, 71, -1, + 73, 74, 17, -1, -1, 53, -1, 22, 23, 24, + -1, 59, -1, 53, 29, -1, -1, -1, -1, 59, + -1, 36, -1, 71, -1, 73, 74, 8, -1, -1, + -1, 71, -1, -1, 74, -1, 17, -1, 53, -1, + -1, 22, 23, 24, -1, -1, -1, -1, 29, -1, + -1, -1, 8, -1, -1, 36, 71, -1, 73, 74, + -1, 17, -1, -1, -1, -1, 22, 23, 24, -1, + -1, -1, 53, 29, -1, -1, -1, -1, 59, -1, + 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 71, -1, -1, 74, -1, -1, -1, 53, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 71, 33, 34, 74, 36, + -1, 38, 39, 40, -1, -1, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + 34, -1, 36, -1, 38, 39, 40, -1, 75, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, -1, -1, -1, -1, -1, 33, + 34, -1, 36, -1, 38, 39, 40, -1, 72, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 33, 34, -1, 36, -1, 38, 39, 40, -1, 66, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 33, 34, -1, - -1, -1, 38, 39, 40, -1, -1, 43, 44, 45, + 36, -1, 38, 39, 40, -1, 66, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 33, 34, -1, -1, -1, 38, 39, 40, -1, - -1, 43, 44, 45, 46, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56 + 56, 33, 34, -1, 36, -1, 38, 39, 40, -1, + 66, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 33, 34, -1, -1, -1, + 38, 39, 40, -1, -1, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1543,14 +1548,14 @@ static const yytype_uint8 yystos[] = 202, 198, 141, 207, 60, 183, 126, 126, 62, 179, 59, 163, 116, 60, 187, 66, 103, 60, 60, 198, 104, 60, 189, 62, 190, 146, 189, 67, 126, 133, - 131, 132, 60, 72, 68, 60, 60, 59, 68, 62, - 72, 202, 68, 62, 49, 202, 62, 198, 59, 59, - 202, 210, 211, 68, 194, 60, 179, 119, 163, 5, - 65, 66, 75, 183, 198, 198, 68, 68, 95, 60, - 68, 130, 210, 195, 209, 202, 198, 208, 212, 195, - 195, 60, 14, 117, 120, 126, 126, 189, 60, 60, - 60, 60, 163, 20, 100, 66, 66, 68, 210, 210, - 118, 112, 105 + 131, 132, 60, 66, 72, 68, 60, 60, 59, 68, + 62, 72, 202, 68, 62, 49, 202, 62, 198, 59, + 59, 202, 210, 211, 68, 194, 60, 179, 119, 163, + 5, 65, 66, 75, 183, 198, 198, 68, 68, 95, + 60, 68, 130, 192, 210, 195, 209, 202, 198, 208, + 212, 195, 195, 60, 14, 117, 120, 126, 126, 189, + 72, 60, 60, 60, 60, 163, 20, 100, 66, 66, + 68, 210, 210, 118, 112, 105 }; #define yyerrok (yyerrstatus = 0) @@ -3438,8 +3443,19 @@ yyreduce: } break; - case 134: -#line 955 "go.y" + case 133: +#line 954 "go.y" + { + if((yyvsp[(5) - (8)].node) == N) + yyerror("middle index required in 3-index slice"); + if((yyvsp[(7) - (8)].node) == N) + yyerror("final index required in 3-index slice"); + (yyval.node) = nod(OSLICE3, (yyvsp[(1) - (8)].node), nod(OKEY, (yyvsp[(3) - (8)].node), nod(OKEY, (yyvsp[(5) - (8)].node), (yyvsp[(7) - (8)].node)))); + } + break; + + case 135: +#line 963 "go.y" { // conversion (yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N); @@ -3447,8 +3463,8 @@ yyreduce: } break; - case 135: -#line 961 "go.y" + case 136: +#line 969 "go.y" { (yyval.node) = (yyvsp[(3) - (5)].node); (yyval.node)->right = (yyvsp[(1) - (5)].node); @@ -3457,8 +3473,8 @@ yyreduce: } break; - case 136: -#line 968 "go.y" + case 137: +#line 976 "go.y" { (yyval.node) = (yyvsp[(3) - (5)].node); (yyval.node)->right = (yyvsp[(1) - (5)].node); @@ -3466,8 +3482,8 @@ yyreduce: } break; - case 137: -#line 974 "go.y" + case 138: +#line 982 "go.y" { yyerror("cannot parenthesize type in composite literal"); (yyval.node) = (yyvsp[(5) - (7)].node); @@ -3476,8 +3492,8 @@ yyreduce: } break; - case 139: -#line 983 "go.y" + case 140: +#line 991 "go.y" { // composite expression. // make node early so we get the right line number. @@ -3485,15 +3501,15 @@ yyreduce: } break; - case 140: -#line 991 "go.y" + case 141: +#line 999 "go.y" { (yyval.node) = nod(OKEY, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } break; - case 141: -#line 997 "go.y" + case 142: +#line 1005 "go.y" { // These nodes do not carry line numbers. // Since a composite literal commonly spans several lines, @@ -3512,24 +3528,24 @@ yyreduce: } break; - case 142: -#line 1014 "go.y" + case 143: +#line 1022 "go.y" { (yyval.node) = (yyvsp[(2) - (4)].node); (yyval.node)->list = (yyvsp[(3) - (4)].list); } break; - case 144: -#line 1022 "go.y" + case 145: +#line 1030 "go.y" { (yyval.node) = (yyvsp[(2) - (4)].node); (yyval.node)->list = (yyvsp[(3) - (4)].list); } break; - case 146: -#line 1030 "go.y" + case 147: +#line 1038 "go.y" { (yyval.node) = (yyvsp[(2) - (3)].node); @@ -3548,22 +3564,22 @@ yyreduce: } break; - case 150: -#line 1056 "go.y" + case 151: +#line 1064 "go.y" { (yyval.i) = LBODY; } break; - case 151: -#line 1060 "go.y" + case 152: +#line 1068 "go.y" { (yyval.i) = '{'; } break; - case 152: -#line 1071 "go.y" + case 153: +#line 1079 "go.y" { if((yyvsp[(1) - (1)].sym) == S) (yyval.node) = N; @@ -3572,22 +3588,22 @@ yyreduce: } break; - case 153: -#line 1080 "go.y" + case 154: +#line 1088 "go.y" { (yyval.node) = dclname((yyvsp[(1) - (1)].sym)); } break; - case 154: -#line 1085 "go.y" + case 155: +#line 1093 "go.y" { (yyval.node) = N; } break; - case 156: -#line 1092 "go.y" + case 157: +#line 1100 "go.y" { (yyval.sym) = (yyvsp[(1) - (1)].sym); // during imports, unqualified non-exported identifiers are from builtinpkg @@ -3596,15 +3612,15 @@ yyreduce: } break; - case 158: -#line 1100 "go.y" + case 159: +#line 1108 "go.y" { (yyval.sym) = S; } break; - case 159: -#line 1106 "go.y" + case 160: +#line 1114 "go.y" { Pkg *p; @@ -3619,8 +3635,8 @@ yyreduce: } break; - case 160: -#line 1121 "go.y" + case 161: +#line 1129 "go.y" { (yyval.node) = oldname((yyvsp[(1) - (1)].sym)); if((yyval.node)->pack != N) @@ -3628,44 +3644,44 @@ yyreduce: } break; - case 162: -#line 1141 "go.y" + case 163: +#line 1149 "go.y" { yyerror("final argument in variadic function missing type"); (yyval.node) = nod(ODDD, typenod(typ(TINTER)), N); } break; - case 163: -#line 1146 "go.y" + case 164: +#line 1154 "go.y" { (yyval.node) = nod(ODDD, (yyvsp[(2) - (2)].node), N); } break; - case 169: -#line 1157 "go.y" + case 170: +#line 1165 "go.y" { (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N); } break; - case 173: -#line 1166 "go.y" + case 174: +#line 1174 "go.y" { (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N); } break; - case 178: -#line 1176 "go.y" + case 179: +#line 1184 "go.y" { (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N); } break; - case 188: -#line 1197 "go.y" + case 189: +#line 1205 "go.y" { if((yyvsp[(1) - (3)].node)->op == OPACK) { Sym *s; @@ -3678,61 +3694,61 @@ yyreduce: } break; - case 189: -#line 1210 "go.y" + case 190: +#line 1218 "go.y" { (yyval.node) = nod(OTARRAY, (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node)); } break; - case 190: -#line 1214 "go.y" + case 191: +#line 1222 "go.y" { // array literal of nelem (yyval.node) = nod(OTARRAY, nod(ODDD, N, N), (yyvsp[(4) - (4)].node)); } break; - case 191: -#line 1219 "go.y" + case 192: +#line 1227 "go.y" { (yyval.node) = nod(OTCHAN, (yyvsp[(2) - (2)].node), N); (yyval.node)->etype = Cboth; } break; - case 192: -#line 1224 "go.y" + case 193: +#line 1232 "go.y" { (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N); (yyval.node)->etype = Csend; } break; - case 193: -#line 1229 "go.y" + case 194: +#line 1237 "go.y" { (yyval.node) = nod(OTMAP, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)); } break; - case 196: -#line 1237 "go.y" + case 197: +#line 1245 "go.y" { (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N); } break; - case 197: -#line 1243 "go.y" + case 198: +#line 1251 "go.y" { (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N); (yyval.node)->etype = Crecv; } break; - case 198: -#line 1250 "go.y" + case 199: +#line 1258 "go.y" { (yyval.node) = nod(OTSTRUCT, N, N); (yyval.node)->list = (yyvsp[(3) - (5)].list); @@ -3740,16 +3756,16 @@ yyreduce: } break; - case 199: -#line 1256 "go.y" + case 200: +#line 1264 "go.y" { (yyval.node) = nod(OTSTRUCT, N, N); fixlbrace((yyvsp[(2) - (3)].i)); } break; - case 200: -#line 1263 "go.y" + case 201: +#line 1271 "go.y" { (yyval.node) = nod(OTINTER, N, N); (yyval.node)->list = (yyvsp[(3) - (5)].list); @@ -3757,16 +3773,16 @@ yyreduce: } break; - case 201: -#line 1269 "go.y" + case 202: +#line 1277 "go.y" { (yyval.node) = nod(OTINTER, N, N); fixlbrace((yyvsp[(2) - (3)].i)); } break; - case 202: -#line 1280 "go.y" + case 203: +#line 1288 "go.y" { (yyval.node) = (yyvsp[(2) - (3)].node); if((yyval.node) == N) @@ -3780,8 +3796,8 @@ yyreduce: } break; - case 203: -#line 1294 "go.y" + case 204: +#line 1302 "go.y" { Node *t; @@ -3812,8 +3828,8 @@ yyreduce: } break; - case 204: -#line 1323 "go.y" + case 205: +#line 1331 "go.y" { Node *rcvr, *t; @@ -3853,8 +3869,8 @@ yyreduce: } break; - case 205: -#line 1363 "go.y" + case 206: +#line 1371 "go.y" { Sym *s; Type *t; @@ -3881,8 +3897,8 @@ yyreduce: } break; - case 206: -#line 1388 "go.y" + case 207: +#line 1396 "go.y" { (yyval.node) = methodname1(newname((yyvsp[(4) - (8)].sym)), (yyvsp[(2) - (8)].list)->n->right); (yyval.node)->type = functype((yyvsp[(2) - (8)].list)->n, (yyvsp[(6) - (8)].list), (yyvsp[(8) - (8)].list)); @@ -3900,8 +3916,8 @@ yyreduce: } break; - case 207: -#line 1406 "go.y" + case 208: +#line 1414 "go.y" { (yyvsp[(3) - (5)].list) = checkarglist((yyvsp[(3) - (5)].list), 1); (yyval.node) = nod(OTFUNC, N, N); @@ -3910,15 +3926,15 @@ yyreduce: } break; - case 208: -#line 1414 "go.y" + case 209: +#line 1422 "go.y" { (yyval.list) = nil; } break; - case 209: -#line 1418 "go.y" + case 210: +#line 1426 "go.y" { (yyval.list) = (yyvsp[(2) - (3)].list); if((yyval.list) == nil) @@ -3926,59 +3942,59 @@ yyreduce: } break; - case 210: -#line 1426 "go.y" + case 211: +#line 1434 "go.y" { (yyval.list) = nil; } break; - case 211: -#line 1430 "go.y" + case 212: +#line 1438 "go.y" { (yyval.list) = list1(nod(ODCLFIELD, N, (yyvsp[(1) - (1)].node))); } break; - case 212: -#line 1434 "go.y" + case 213: +#line 1442 "go.y" { (yyvsp[(2) - (3)].list) = checkarglist((yyvsp[(2) - (3)].list), 0); (yyval.list) = (yyvsp[(2) - (3)].list); } break; - case 213: -#line 1441 "go.y" + case 214: +#line 1449 "go.y" { closurehdr((yyvsp[(1) - (1)].node)); } break; - case 214: -#line 1447 "go.y" + case 215: +#line 1455 "go.y" { (yyval.node) = closurebody((yyvsp[(3) - (4)].list)); fixlbrace((yyvsp[(2) - (4)].i)); } break; - case 215: -#line 1452 "go.y" + case 216: +#line 1460 "go.y" { (yyval.node) = closurebody(nil); } break; - case 216: -#line 1463 "go.y" + case 217: +#line 1471 "go.y" { (yyval.list) = nil; } break; - case 217: -#line 1467 "go.y" + case 218: +#line 1475 "go.y" { (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); if(nsyntaxerrors == 0) @@ -3988,57 +4004,57 @@ yyreduce: } break; - case 219: -#line 1478 "go.y" + case 220: +#line 1486 "go.y" { (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); } break; - case 221: -#line 1485 "go.y" + case 222: +#line 1493 "go.y" { (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); } break; - case 222: -#line 1491 "go.y" + case 223: +#line 1499 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 223: -#line 1495 "go.y" + case 224: +#line 1503 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 225: -#line 1502 "go.y" + case 226: +#line 1510 "go.y" { (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); } break; - case 226: -#line 1508 "go.y" + case 227: +#line 1516 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 227: -#line 1512 "go.y" + case 228: +#line 1520 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 228: -#line 1518 "go.y" + case 229: +#line 1526 "go.y" { NodeList *l; @@ -4063,16 +4079,16 @@ yyreduce: } break; - case 229: -#line 1541 "go.y" + case 230: +#line 1549 "go.y" { (yyvsp[(1) - (2)].node)->val = (yyvsp[(2) - (2)].val); (yyval.list) = list1((yyvsp[(1) - (2)].node)); } break; - case 230: -#line 1546 "go.y" + case 231: +#line 1554 "go.y" { (yyvsp[(2) - (4)].node)->val = (yyvsp[(4) - (4)].val); (yyval.list) = list1((yyvsp[(2) - (4)].node)); @@ -4080,8 +4096,8 @@ yyreduce: } break; - case 231: -#line 1552 "go.y" + case 232: +#line 1560 "go.y" { (yyvsp[(2) - (3)].node)->right = nod(OIND, (yyvsp[(2) - (3)].node)->right, N); (yyvsp[(2) - (3)].node)->val = (yyvsp[(3) - (3)].val); @@ -4089,8 +4105,8 @@ yyreduce: } break; - case 232: -#line 1558 "go.y" + case 233: +#line 1566 "go.y" { (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N); (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val); @@ -4099,8 +4115,8 @@ yyreduce: } break; - case 233: -#line 1565 "go.y" + case 234: +#line 1573 "go.y" { (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N); (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val); @@ -4109,8 +4125,8 @@ yyreduce: } break; - case 234: -#line 1574 "go.y" + case 235: +#line 1582 "go.y" { Node *n; @@ -4121,8 +4137,8 @@ yyreduce: } break; - case 235: -#line 1583 "go.y" + case 236: +#line 1591 "go.y" { Pkg *pkg; @@ -4137,38 +4153,38 @@ yyreduce: } break; - case 236: -#line 1598 "go.y" + case 237: +#line 1606 "go.y" { (yyval.node) = embedded((yyvsp[(1) - (1)].sym)); } break; - case 237: -#line 1604 "go.y" + case 238: +#line 1612 "go.y" { (yyval.node) = nod(ODCLFIELD, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); ifacedcl((yyval.node)); } break; - case 238: -#line 1609 "go.y" + case 239: +#line 1617 "go.y" { (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(1) - (1)].sym))); } break; - case 239: -#line 1613 "go.y" + case 240: +#line 1621 "go.y" { (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(2) - (3)].sym))); yyerror("cannot parenthesize embedded type"); } break; - case 240: -#line 1620 "go.y" + case 241: +#line 1628 "go.y" { // without func keyword (yyvsp[(2) - (4)].list) = checkarglist((yyvsp[(2) - (4)].list), 1); @@ -4178,8 +4194,8 @@ yyreduce: } break; - case 242: -#line 1634 "go.y" + case 243: +#line 1642 "go.y" { (yyval.node) = nod(ONONAME, N, N); (yyval.node)->sym = (yyvsp[(1) - (2)].sym); @@ -4187,8 +4203,8 @@ yyreduce: } break; - case 243: -#line 1640 "go.y" + case 244: +#line 1648 "go.y" { (yyval.node) = nod(ONONAME, N, N); (yyval.node)->sym = (yyvsp[(1) - (2)].sym); @@ -4196,65 +4212,65 @@ yyreduce: } break; - case 245: -#line 1649 "go.y" + case 246: +#line 1657 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 246: -#line 1653 "go.y" + case 247: +#line 1661 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 247: -#line 1658 "go.y" + case 248: +#line 1666 "go.y" { (yyval.list) = nil; } break; - case 248: -#line 1662 "go.y" + case 249: +#line 1670 "go.y" { (yyval.list) = (yyvsp[(1) - (2)].list); } break; - case 249: -#line 1670 "go.y" + case 250: +#line 1678 "go.y" { (yyval.node) = N; } break; - case 251: -#line 1675 "go.y" + case 252: +#line 1683 "go.y" { (yyval.node) = liststmt((yyvsp[(1) - (1)].list)); } break; - case 253: -#line 1680 "go.y" + case 254: +#line 1688 "go.y" { (yyval.node) = N; } break; - case 259: -#line 1691 "go.y" + case 260: +#line 1699 "go.y" { (yyvsp[(1) - (2)].node) = nod(OLABEL, (yyvsp[(1) - (2)].node), N); (yyvsp[(1) - (2)].node)->sym = dclstack; // context, for goto restrictions } break; - case 260: -#line 1696 "go.y" + case 261: +#line 1704 "go.y" { NodeList *l; @@ -4266,52 +4282,52 @@ yyreduce: } break; - case 261: -#line 1706 "go.y" + case 262: +#line 1714 "go.y" { // will be converted to OFALL (yyval.node) = nod(OXFALL, N, N); } break; - case 262: -#line 1711 "go.y" + case 263: +#line 1719 "go.y" { (yyval.node) = nod(OBREAK, (yyvsp[(2) - (2)].node), N); } break; - case 263: -#line 1715 "go.y" + case 264: +#line 1723 "go.y" { (yyval.node) = nod(OCONTINUE, (yyvsp[(2) - (2)].node), N); } break; - case 264: -#line 1719 "go.y" + case 265: +#line 1727 "go.y" { (yyval.node) = nod(OPROC, (yyvsp[(2) - (2)].node), N); } break; - case 265: -#line 1723 "go.y" + case 266: +#line 1731 "go.y" { (yyval.node) = nod(ODEFER, (yyvsp[(2) - (2)].node), N); } break; - case 266: -#line 1727 "go.y" + case 267: +#line 1735 "go.y" { (yyval.node) = nod(OGOTO, (yyvsp[(2) - (2)].node), N); (yyval.node)->sym = dclstack; // context, for goto restrictions } break; - case 267: -#line 1732 "go.y" + case 268: +#line 1740 "go.y" { (yyval.node) = nod(ORETURN, N, N); (yyval.node)->list = (yyvsp[(2) - (2)].list); @@ -4330,8 +4346,8 @@ yyreduce: } break; - case 268: -#line 1751 "go.y" + case 269: +#line 1759 "go.y" { (yyval.list) = nil; if((yyvsp[(1) - (1)].node) != N) @@ -4339,8 +4355,8 @@ yyreduce: } break; - case 269: -#line 1757 "go.y" + case 270: +#line 1765 "go.y" { (yyval.list) = (yyvsp[(1) - (3)].list); if((yyvsp[(3) - (3)].node) != N) @@ -4348,190 +4364,190 @@ yyreduce: } break; - case 270: -#line 1765 "go.y" + case 271: +#line 1773 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 271: -#line 1769 "go.y" + case 272: +#line 1777 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 272: -#line 1775 "go.y" + case 273: +#line 1783 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 273: -#line 1779 "go.y" + case 274: +#line 1787 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 274: -#line 1785 "go.y" + case 275: +#line 1793 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 275: -#line 1789 "go.y" + case 276: +#line 1797 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 276: -#line 1795 "go.y" + case 277: +#line 1803 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 277: -#line 1799 "go.y" + case 278: +#line 1807 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 278: -#line 1808 "go.y" + case 279: +#line 1816 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 279: -#line 1812 "go.y" + case 280: +#line 1820 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 280: -#line 1816 "go.y" + case 281: +#line 1824 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 281: -#line 1820 "go.y" + case 282: +#line 1828 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 282: -#line 1825 "go.y" + case 283: +#line 1833 "go.y" { (yyval.list) = nil; } break; - case 283: -#line 1829 "go.y" + case 284: +#line 1837 "go.y" { (yyval.list) = (yyvsp[(1) - (2)].list); } break; - case 288: -#line 1843 "go.y" + case 289: +#line 1851 "go.y" { (yyval.node) = N; } break; - case 290: -#line 1849 "go.y" + case 291: +#line 1857 "go.y" { (yyval.list) = nil; } break; - case 292: -#line 1855 "go.y" + case 293: +#line 1863 "go.y" { (yyval.node) = N; } break; - case 294: -#line 1861 "go.y" + case 295: +#line 1869 "go.y" { (yyval.list) = nil; } break; - case 296: -#line 1867 "go.y" + case 297: +#line 1875 "go.y" { (yyval.list) = nil; } break; - case 298: -#line 1873 "go.y" + case 299: +#line 1881 "go.y" { (yyval.list) = nil; } break; - case 300: -#line 1879 "go.y" + case 301: +#line 1887 "go.y" { (yyval.val).ctype = CTxxx; } break; - case 302: -#line 1889 "go.y" + case 303: +#line 1897 "go.y" { importimport((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].val).u.sval); } break; - case 303: -#line 1893 "go.y" + case 304: +#line 1901 "go.y" { importvar((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].type)); } break; - case 304: -#line 1897 "go.y" + case 305: +#line 1905 "go.y" { importconst((yyvsp[(2) - (5)].sym), types[TIDEAL], (yyvsp[(4) - (5)].node)); } break; - case 305: -#line 1901 "go.y" + case 306: +#line 1909 "go.y" { importconst((yyvsp[(2) - (6)].sym), (yyvsp[(3) - (6)].type), (yyvsp[(5) - (6)].node)); } break; - case 306: -#line 1905 "go.y" + case 307: +#line 1913 "go.y" { importtype((yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].type)); } break; - case 307: -#line 1909 "go.y" + case 308: +#line 1917 "go.y" { if((yyvsp[(2) - (4)].node) == N) { dclcontext = PEXTERN; // since we skip the funcbody below @@ -4551,31 +4567,31 @@ yyreduce: } break; - case 308: -#line 1929 "go.y" + case 309: +#line 1937 "go.y" { (yyval.sym) = (yyvsp[(1) - (1)].sym); structpkg = (yyval.sym)->pkg; } break; - case 309: -#line 1936 "go.y" + case 310: +#line 1944 "go.y" { (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym)); importsym((yyvsp[(1) - (1)].sym), OTYPE); } break; - case 315: -#line 1956 "go.y" + case 316: +#line 1964 "go.y" { (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym)); } break; - case 316: -#line 1960 "go.y" + case 317: +#line 1968 "go.y" { // predefined name like uint8 (yyvsp[(1) - (1)].sym) = pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg); @@ -4587,50 +4603,50 @@ yyreduce: } break; - case 317: -#line 1970 "go.y" + case 318: +#line 1978 "go.y" { (yyval.type) = aindex(N, (yyvsp[(3) - (3)].type)); } break; - case 318: -#line 1974 "go.y" + case 319: +#line 1982 "go.y" { (yyval.type) = aindex(nodlit((yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].type)); } break; - case 319: -#line 1978 "go.y" + case 320: +#line 1986 "go.y" { (yyval.type) = maptype((yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].type)); } break; - case 320: -#line 1982 "go.y" + case 321: +#line 1990 "go.y" { (yyval.type) = tostruct((yyvsp[(3) - (4)].list)); } break; - case 321: -#line 1986 "go.y" + case 322: +#line 1994 "go.y" { (yyval.type) = tointerface((yyvsp[(3) - (4)].list)); } break; - case 322: -#line 1990 "go.y" + case 323: +#line 1998 "go.y" { (yyval.type) = ptrto((yyvsp[(2) - (2)].type)); } break; - case 323: -#line 1994 "go.y" + case 324: +#line 2002 "go.y" { (yyval.type) = typ(TCHAN); (yyval.type)->type = (yyvsp[(2) - (2)].type); @@ -4638,8 +4654,8 @@ yyreduce: } break; - case 324: -#line 2000 "go.y" + case 325: +#line 2008 "go.y" { (yyval.type) = typ(TCHAN); (yyval.type)->type = (yyvsp[(3) - (4)].type); @@ -4647,8 +4663,8 @@ yyreduce: } break; - case 325: -#line 2006 "go.y" + case 326: +#line 2014 "go.y" { (yyval.type) = typ(TCHAN); (yyval.type)->type = (yyvsp[(3) - (3)].type); @@ -4656,8 +4672,8 @@ yyreduce: } break; - case 326: -#line 2014 "go.y" + case 327: +#line 2022 "go.y" { (yyval.type) = typ(TCHAN); (yyval.type)->type = (yyvsp[(3) - (3)].type); @@ -4665,15 +4681,15 @@ yyreduce: } break; - case 327: -#line 2022 "go.y" + case 328: +#line 2030 "go.y" { (yyval.type) = functype(nil, (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list)); } break; - case 328: -#line 2028 "go.y" + case 329: +#line 2036 "go.y" { (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(2) - (3)].type))); if((yyvsp[(1) - (3)].sym)) @@ -4682,8 +4698,8 @@ yyreduce: } break; - case 329: -#line 2035 "go.y" + case 330: +#line 2043 "go.y" { Type *t; @@ -4699,8 +4715,8 @@ yyreduce: } break; - case 330: -#line 2051 "go.y" + case 331: +#line 2059 "go.y" { Sym *s; @@ -4718,50 +4734,50 @@ yyreduce: } break; - case 331: -#line 2069 "go.y" + case 332: +#line 2077 "go.y" { (yyval.node) = nod(ODCLFIELD, newname((yyvsp[(1) - (5)].sym)), typenod(functype(fakethis(), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list)))); } break; - case 332: -#line 2073 "go.y" + case 333: +#line 2081 "go.y" { (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type))); } break; - case 333: -#line 2078 "go.y" + case 334: +#line 2086 "go.y" { (yyval.list) = nil; } break; - case 335: -#line 2085 "go.y" + case 336: +#line 2093 "go.y" { (yyval.list) = (yyvsp[(2) - (3)].list); } break; - case 336: -#line 2089 "go.y" + case 337: +#line 2097 "go.y" { (yyval.list) = list1(nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type)))); } break; - case 337: -#line 2099 "go.y" + case 338: +#line 2107 "go.y" { (yyval.node) = nodlit((yyvsp[(1) - (1)].val)); } break; - case 338: -#line 2103 "go.y" + case 339: +#line 2111 "go.y" { (yyval.node) = nodlit((yyvsp[(2) - (2)].val)); switch((yyval.node)->val.ctype){ @@ -4778,8 +4794,8 @@ yyreduce: } break; - case 339: -#line 2118 "go.y" + case 340: +#line 2126 "go.y" { (yyval.node) = oldname(pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg)); if((yyval.node)->op != OLITERAL) @@ -4787,8 +4803,8 @@ yyreduce: } break; - case 341: -#line 2127 "go.y" + case 342: +#line 2135 "go.y" { if((yyvsp[(2) - (5)].node)->val.ctype == CTRUNE && (yyvsp[(4) - (5)].node)->val.ctype == CTINT) { (yyval.node) = (yyvsp[(2) - (5)].node); @@ -4801,43 +4817,43 @@ yyreduce: } break; - case 344: -#line 2143 "go.y" + case 345: +#line 2151 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 345: -#line 2147 "go.y" + case 346: +#line 2155 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 346: -#line 2153 "go.y" + case 347: +#line 2161 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 347: -#line 2157 "go.y" + case 348: +#line 2165 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } break; - case 348: -#line 2163 "go.y" + case 349: +#line 2171 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } break; - case 349: -#line 2167 "go.y" + case 350: +#line 2175 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4845,7 +4861,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 4850 "y.tab.c" +#line 4866 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5059,7 +5075,7 @@ yyreturn: } -#line 2171 "go.y" +#line 2179 "go.y" static void diff --git a/src/cmd/gc/yerr.h b/src/cmd/gc/yerr.h index 4cbbd39442..d575afd816 100644 --- a/src/cmd/gc/yerr.h +++ b/src/cmd/gc/yerr.h @@ -74,6 +74,6 @@ static struct { 112, LNAME, "nested func not allowed", - 642, ';', + 644, ';', "else must be followed by if or statement block" }; diff --git a/test/fixedbugs/issue4251.go b/test/fixedbugs/issue4251.go index a14e0896a4..4adec2babb 100644 --- a/test/fixedbugs/issue4251.go +++ b/test/fixedbugs/issue4251.go @@ -9,13 +9,13 @@ package p func F1(s []byte) []byte { - return s[2:1] // ERROR "inverted" + return s[2:1] // ERROR "invalid slice index" } func F2(a [10]byte) []byte { - return a[2:1] // ERROR "inverted" + return a[2:1] // ERROR "invalid slice index" } func F3(s string) string { - return s[2:1] // ERROR "inverted" + return s[2:1] // ERROR "invalid slice index" } diff --git a/test/slice3.go b/test/slice3.go new file mode 100644 index 0000000000..3cf34b57e7 --- /dev/null +++ b/test/slice3.go @@ -0,0 +1,156 @@ +// runoutput + +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Test run-time behavior of 3-index slice expressions. + +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" +) + +var bout *bufio.Writer + +func main() { + bout = bufio.NewWriter(os.Stdout) + + fmt.Fprintf(bout, "%s", programTop) + fmt.Fprintf(bout, "func main() {\n") + + index := []string{ + "0", + "1", + "2", + "3", + "10", + "20", + "vminus1", + "v0", + "v1", + "v2", + "v3", + "v10", + "v20", + } + + parse := func(s string) (n int, isconst bool) { + if s == "vminus1" { + return -1, false + } + isconst = true + if s[0] == 'v' { + isconst = false + s = s[1:] + } + n, _ = strconv.Atoi(s) + return n, isconst + } + + const Cap = 10 // cap of slice, array + + for _, base := range []string{"array", "slice"} { + for _, i := range index { + iv, iconst := parse(i) + for _, j := range index { + jv, jconst := parse(j) + for _, k := range index { + kv, kconst := parse(k) + // Avoid errors that would make the program not compile. + // Those are tested by slice3err.go. + switch { + case iconst && jconst && iv > jv, + jconst && kconst && jv > kv, + iconst && kconst && iv > kv, + iconst && base == "array" && iv > Cap, + jconst && base == "array" && jv > Cap, + kconst && base == "array" && kv > Cap: + continue + } + + expr := base + "[" + i + ":" + j + ":" + k + "]" + var xbase, xlen, xcap int + if iv > jv || jv > kv || kv > Cap || iv < 0 || jv < 0 || kv < 0 { + xbase, xlen, xcap = -1, -1, -1 + } else { + xbase = iv + xlen = jv - iv + xcap = kv - iv + } + fmt.Fprintf(bout, "\tcheckSlice(%q, func() []byte { return %s }, %d, %d, %d)\n", expr, expr, xbase, xlen, xcap) + } + } + } + } + + fmt.Fprintf(bout, "\tif !ok { os.Exit(1) }\n") + fmt.Fprintf(bout, "}\n") + bout.Flush() +} + +var programTop = ` +package main + +import ( + "fmt" + "os" + "unsafe" +) + +var ok = true + +var ( + array = new([10]byte) + slice = array[:] + + vminus1 = -1 + v0 = 0 + v1 = 1 + v2 = 2 + v3 = 3 + v4 = 4 + v5 = 5 + v10 = 10 + v20 = 20 +) + +func notOK() { + if ok { + println("BUG:") + ok = false + } +} + +func checkSlice(desc string, f func() []byte, xbase, xlen, xcap int) { + defer func() { + if err := recover(); err != nil { + if xbase >= 0 { + notOK() + println(desc, " unexpected panic: ", fmt.Sprint(err)) + } + } + // "no panic" is checked below + }() + + x := f() + + arrayBase := uintptr(unsafe.Pointer(array)) + raw := *(*[3]uintptr)(unsafe.Pointer(&x)) + base, len, cap := raw[0] - arrayBase, raw[1], raw[2] + if xbase < 0 { + notOK() + println(desc, "=", base, len, cap, "want panic") + return + } + if base != uintptr(xbase) || len != uintptr(xlen) || cap != uintptr(xcap) { + notOK() + println(desc, "=", base, len, cap, "want", xbase, xlen, xcap) + } +} + +` diff --git a/test/slice3err.go b/test/slice3err.go new file mode 100644 index 0000000000..c48ebfeaee --- /dev/null +++ b/test/slice3err.go @@ -0,0 +1,121 @@ +// errorcheck + +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +var array *[10]int +var slice []int +var str string +var i, j, k int + +func f() { + // check what missing arguments are allowed + _ = array[:] + _ = array[i:] + _ = array[:j] + _ = array[i:j] + _ = array[::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice" + _ = array[i::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice" + _ = array[:j:] // ERROR "final index required in 3-index slice" + _ = array[i:j:] // ERROR "final index required in 3-index slice" + _ = array[::k] // ERROR "middle index required in 3-index slice" + _ = array[i::k] // ERROR "middle index required in 3-index slice" + _ = array[:j:k] + _ = array[i:j:k] + + _ = slice[:] + _ = slice[i:] + _ = slice[:j] + _ = slice[i:j] + _ = slice[::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice" + _ = slice[i::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice" + _ = slice[:j:] // ERROR "final index required in 3-index slice" + _ = slice[i:j:] // ERROR "final index required in 3-index slice" + _ = slice[::k] // ERROR "middle index required in 3-index slice" + _ = slice[i::k] // ERROR "middle index required in 3-index slice" + _ = slice[:j:k] + _ = slice[i:j:k] + + _ = str[:] + _ = str[i:] + _ = str[:j] + _ = str[i:j] + _ = str[::] // ERROR "3-index slice of string" "middle index required in 3-index slice" "final index required in 3-index slice" + _ = str[i::] // ERROR "3-index slice of string" "middle index required in 3-index slice" "final index required in 3-index slice" + _ = str[:j:] // ERROR "3-index slice of string" "final index required in 3-index slice" + _ = str[i:j:] // ERROR "3-index slice of string" "final index required in 3-index slice" + _ = str[::k] // ERROR "3-index slice of string" "middle index required in 3-index slice" + _ = str[i::k] // ERROR "3-index slice of string" "middle index required in 3-index slice" + _ = str[:j:k] // ERROR "3-index slice of string" + _ = str[i:j:k] // ERROR "3-index slice of string" + + // check invalid indices + _ = array[1:2] + _ = array[2:1] // ERROR "invalid slice index" + _ = array[2:2] + _ = array[i:1] + _ = array[1:j] + _ = array[1:2:3] + _ = array[1:3:2] // ERROR "invalid slice index" + _ = array[2:1:3] // ERROR "invalid slice index" + _ = array[2:3:1] // ERROR "invalid slice index" + _ = array[3:1:2] // ERROR "invalid slice index" + _ = array[3:2:1] // ERROR "invalid slice index" + _ = array[i:1:2] + _ = array[i:2:1] // ERROR "invalid slice index" + _ = array[1:j:2] + _ = array[2:j:1] // ERROR "invalid slice index" + _ = array[1:2:k] + _ = array[2:1:k] // ERROR "invalid slice index" + + _ = slice[1:2] + _ = slice[2:1] // ERROR "invalid slice index" + _ = slice[2:2] + _ = slice[i:1] + _ = slice[1:j] + _ = slice[1:2:3] + _ = slice[1:3:2] // ERROR "invalid slice index" + _ = slice[2:1:3] // ERROR "invalid slice index" + _ = slice[2:3:1] // ERROR "invalid slice index" + _ = slice[3:1:2] // ERROR "invalid slice index" + _ = slice[3:2:1] // ERROR "invalid slice index" + _ = slice[i:1:2] + _ = slice[i:2:1] // ERROR "invalid slice index" + _ = slice[1:j:2] + _ = slice[2:j:1] // ERROR "invalid slice index" + _ = slice[1:2:k] + _ = slice[2:1:k] // ERROR "invalid slice index" + + _ = str[1:2] + _ = str[2:1] // ERROR "invalid slice index" + _ = str[2:2] + _ = str[i:1] + _ = str[1:j] + + // check out of bounds indices on array + _ = array[11:11] // ERROR "out of bounds for 10-element array" + _ = array[11:12] // ERROR "out of bounds for 10-element array" + _ = array[11:] // ERROR "out of bounds for 10-element array" + _ = array[:11] // ERROR "out of bounds for 10-element array" + _ = array[1:11] // ERROR "out of bounds for 10-element array" + _ = array[1:11:12] // ERROR "out of bounds for 10-element array" + _ = array[1:2:11] // ERROR "out of bounds for 10-element array" + _ = array[1:11:3] // ERROR "out of bounds for 10-element array" + _ = array[11:2:3] // ERROR "out of bounds for 10-element array" + _ = array[11:12:13] // ERROR "out of bounds for 10-element array" + + // slice bounds not checked + _ = slice[11:11] + _ = slice[11:12] + _ = slice[11:] + _ = slice[:11] + _ = slice[1:11] + _ = slice[1:11:12] + _ = slice[1:2:11] + _ = slice[1:11:3] // ERROR "invalid slice index" + _ = slice[11:2:3] // ERROR "invalid slice index" + _ = slice[11:12:13] +} -- 2.48.1