From: Dave Mitchell Date: Sun, 10 Dec 2006 18:50:05 +0000 (+0000) Subject: #28315 could crash when freeing ops with different pads X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2af555bf3f2b3ca8e114df3f5f680d40bd24d6bf;p=p5sagit%2Fp5-mst-13.2.git #28315 could crash when freeing ops with different pads Add hook to parser to record current PL_comppad, then use this when popping ops off the parser stack after parser error p4raw-id: //depot/perl@29501 --- diff --git a/perly.act b/perly.act index 6e35f50..f658142 100644 --- a/perly.act +++ b/perly.act @@ -1,10 +1,10 @@ case 2: -#line 133 "perly.y" +#line 135 "perly.y" { (yyval.ival) = (yyvsp[(1) - (2)].ival); newPROG(block_end((yyvsp[(1) - (2)].ival),(yyvsp[(2) - (2)].opval))); ;} break; case 3: -#line 138 "perly.y" +#line 140 "perly.y" { if (PL_copline > (line_t)IVAL((yyvsp[(1) - (4)].i_tkval))) PL_copline = (line_t)IVAL((yyvsp[(1) - (4)].i_tkval)); (yyval.opval) = block_end((yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].opval)); @@ -14,24 +14,24 @@ case 2: break; case 4: -#line 147 "perly.y" +#line 149 "perly.y" { (yyval.ival) = block_start(TRUE); ;} break; case 5: -#line 151 "perly.y" +#line 153 "perly.y" { (yyval.ival) = (I32) allocmy("$_"); ;} break; case 6: -#line 155 "perly.y" +#line 157 "perly.y" { PL_expect = XSTATE; (yyval.ival) = block_start(TRUE); ;} break; case 7: -#line 162 "perly.y" +#line 164 "perly.y" { if (PL_copline > (line_t)IVAL((yyvsp[(1) - (4)].i_tkval))) PL_copline = (line_t)IVAL((yyvsp[(1) - (4)].i_tkval)); (yyval.opval) = block_end((yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].opval)); @@ -41,22 +41,22 @@ case 2: break; case 8: -#line 171 "perly.y" +#line 173 "perly.y" { (yyval.ival) = block_start(FALSE); ;} break; case 9: -#line 175 "perly.y" +#line 177 "perly.y" { (yyval.ival) = PL_savestack_ix; ;} break; case 10: -#line 179 "perly.y" +#line 181 "perly.y" { (yyval.opval) = Nullop; ;} break; case 11: -#line 181 "perly.y" +#line 183 "perly.y" { (yyval.opval) = IF_MAD( append_list(OP_LINESEQ, @@ -66,7 +66,7 @@ case 2: break; case 12: -#line 188 "perly.y" +#line 190 "perly.y" { LEAVE_SCOPE((yyvsp[(2) - (3)].ival)); (yyval.opval) = append_list(OP_LINESEQ, (LISTOP*)(yyvsp[(1) - (3)].opval), (LISTOP*)(yyvsp[(3) - (3)].opval)); @@ -75,23 +75,23 @@ case 2: break; case 13: -#line 197 "perly.y" +#line 199 "perly.y" { (yyval.opval) = newSTATEOP(0, PVAL((yyvsp[(1) - (2)].p_tkval)), (yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].p_tkval),((LISTOP*)(yyval.opval))->op_first,'L'); ;} break; case 15: -#line 201 "perly.y" +#line 203 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 16: -#line 203 "perly.y" +#line 205 "perly.y" { (yyval.opval) = newSTATEOP(0, PVAL((yyvsp[(1) - (2)].p_tkval)), (yyvsp[(2) - (2)].opval)); ;} break; case 17: -#line 205 "perly.y" +#line 207 "perly.y" { if (PVAL((yyvsp[(1) - (2)].p_tkval))) { (yyval.opval) = newSTATEOP(0, PVAL((yyvsp[(1) - (2)].p_tkval)), newOP(OP_NULL, 0)); @@ -111,7 +111,7 @@ case 2: break; case 18: -#line 222 "perly.y" +#line 224 "perly.y" { (yyval.opval) = newSTATEOP(0, PVAL((yyvsp[(1) - (3)].p_tkval)), (yyvsp[(2) - (3)].opval)); PL_expect = XSTATE; @@ -130,45 +130,45 @@ case 2: break; case 19: -#line 241 "perly.y" +#line 243 "perly.y" { (yyval.opval) = Nullop; ;} break; case 20: -#line 243 "perly.y" +#line 245 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 21: -#line 245 "perly.y" +#line 247 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (yyvsp[(3) - (3)].opval), (yyvsp[(1) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'i'); ;} break; case 22: -#line 249 "perly.y" +#line 251 "perly.y" { (yyval.opval) = newLOGOP(OP_OR, 0, (yyvsp[(3) - (3)].opval), (yyvsp[(1) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'i'); ;} break; case 23: -#line 253 "perly.y" +#line 255 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((yyvsp[(3) - (3)].opval)), (yyvsp[(1) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'w'); ;} break; case 24: -#line 257 "perly.y" +#line 259 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (yyvsp[(3) - (3)].opval), (yyvsp[(1) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'w'); ;} break; case 25: -#line 261 "perly.y" +#line 263 "perly.y" { (yyval.opval) = newFOROP(0, Nullch, (line_t)IVAL((yyvsp[(2) - (3)].i_tkval)), Nullop, (yyvsp[(3) - (3)].opval), (yyvsp[(1) - (3)].opval), Nullop); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),((LISTOP*)(yyval.opval))->op_first->op_sibling,'w'); @@ -176,19 +176,19 @@ case 2: break; case 26: -#line 269 "perly.y" +#line 271 "perly.y" { (yyval.opval) = Nullop; ;} break; case 27: -#line 271 "perly.y" +#line 273 "perly.y" { ((yyvsp[(2) - (2)].opval))->op_flags |= OPf_PARENS; (yyval.opval) = scope((yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; case 28: -#line 275 "perly.y" +#line 277 "perly.y" { PL_copline = (line_t)IVAL((yyvsp[(1) - (6)].i_tkval)); (yyval.opval) = newCONDOP(0, (yyvsp[(3) - (6)].opval), scope((yyvsp[(5) - (6)].opval)), (yyvsp[(6) - (6)].opval)); PL_hints |= HINT_BLOCK_SCOPE; @@ -199,7 +199,7 @@ case 2: break; case 29: -#line 286 "perly.y" +#line 288 "perly.y" { PL_copline = (line_t)IVAL((yyvsp[(1) - (7)].i_tkval)); (yyval.opval) = block_end((yyvsp[(3) - (7)].ival), newCONDOP(0, (yyvsp[(4) - (7)].opval), scope((yyvsp[(6) - (7)].opval)), (yyvsp[(7) - (7)].opval))); @@ -210,7 +210,7 @@ case 2: break; case 30: -#line 294 "perly.y" +#line 296 "perly.y" { PL_copline = (line_t)IVAL((yyvsp[(1) - (7)].i_tkval)); (yyval.opval) = block_end((yyvsp[(3) - (7)].ival), newCONDOP(0, (yyvsp[(4) - (7)].opval), scope((yyvsp[(6) - (7)].opval)), (yyvsp[(7) - (7)].opval))); @@ -221,30 +221,30 @@ case 2: break; case 31: -#line 305 "perly.y" +#line 307 "perly.y" { (yyval.opval) = block_end((yyvsp[(3) - (6)].ival), newWHENOP((yyvsp[(4) - (6)].opval), scope((yyvsp[(6) - (6)].opval)))); ;} break; case 32: -#line 308 "perly.y" +#line 310 "perly.y" { (yyval.opval) = newWHENOP(0, scope((yyvsp[(2) - (2)].opval))); ;} break; case 33: -#line 313 "perly.y" +#line 315 "perly.y" { (yyval.opval) = Nullop; ;} break; case 34: -#line 315 "perly.y" +#line 317 "perly.y" { (yyval.opval) = scope((yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; case 35: -#line 322 "perly.y" +#line 324 "perly.y" { OP *innerop; PL_copline = (line_t)(yyvsp[(2) - (9)].i_tkval); (yyval.opval) = block_end((yyvsp[(4) - (9)].ival), @@ -259,7 +259,7 @@ case 2: break; case 36: -#line 335 "perly.y" +#line 337 "perly.y" { OP *innerop; PL_copline = (line_t)(yyvsp[(2) - (9)].i_tkval); (yyval.opval) = block_end((yyvsp[(4) - (9)].ival), @@ -274,7 +274,7 @@ case 2: break; case 37: -#line 347 "perly.y" +#line 349 "perly.y" { OP *innerop; (yyval.opval) = block_end((yyvsp[(4) - (10)].ival), innerop = newFOROP(0, PVAL((yyvsp[(1) - (10)].p_tkval)), (line_t)IVAL((yyvsp[(2) - (10)].i_tkval)), @@ -288,7 +288,7 @@ case 2: break; case 38: -#line 358 "perly.y" +#line 360 "perly.y" { OP *innerop; (yyval.opval) = block_end((yyvsp[(5) - (9)].ival), innerop = newFOROP(0, PVAL((yyvsp[(1) - (9)].p_tkval)), (line_t)IVAL((yyvsp[(2) - (9)].i_tkval)), @@ -301,7 +301,7 @@ case 2: break; case 39: -#line 368 "perly.y" +#line 370 "perly.y" { OP *innerop; (yyval.opval) = block_end((yyvsp[(4) - (8)].ival), innerop = newFOROP(0, PVAL((yyvsp[(1) - (8)].p_tkval)), (line_t)IVAL((yyvsp[(2) - (8)].i_tkval)), @@ -314,7 +314,7 @@ case 2: break; case 40: -#line 380 "perly.y" +#line 382 "perly.y" { OP *forop; PL_copline = (line_t)IVAL((yyvsp[(2) - (12)].i_tkval)); forop = newSTATEOP(0, PVAL((yyvsp[(1) - (12)].p_tkval)), @@ -351,7 +351,7 @@ case 2: break; case 41: -#line 414 "perly.y" +#line 416 "perly.y" { (yyval.opval) = newSTATEOP(0, PVAL((yyvsp[(1) - (3)].p_tkval)), newWHILEOP(0, 1, (LOOP*)Nullop, NOLINE, Nullop, (yyvsp[(2) - (3)].opval), (yyvsp[(3) - (3)].opval), 0)); @@ -359,7 +359,7 @@ case 2: break; case 42: -#line 422 "perly.y" +#line 424 "perly.y" { PL_copline = (line_t) (yyvsp[(2) - (8)].i_tkval); (yyval.opval) = block_end((yyvsp[(4) - (8)].ival), newSTATEOP(0, PVAL((yyvsp[(1) - (8)].p_tkval)), @@ -368,46 +368,46 @@ case 2: break; case 43: -#line 431 "perly.y" +#line 433 "perly.y" { (yyval.ival) = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); ;} break; case 44: -#line 437 "perly.y" +#line 439 "perly.y" { (yyval.opval) = Nullop; ;} break; case 46: -#line 443 "perly.y" +#line 445 "perly.y" { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; ;} break; case 48: -#line 451 "perly.y" +#line 453 "perly.y" { (yyval.opval) = invert(scalar((yyvsp[(1) - (1)].opval))); ;} break; case 49: -#line 456 "perly.y" +#line 458 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); intro_my(); ;} break; case 50: -#line 460 "perly.y" +#line 462 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); intro_my(); ;} break; case 51: -#line 464 "perly.y" +#line 466 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); intro_my(); ;} break; case 52: -#line 469 "perly.y" +#line 471 "perly.y" { #ifdef MAD YYSTYPE tmplval; @@ -420,119 +420,124 @@ case 2: break; case 54: -#line 483 "perly.y" +#line 485 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 55: -#line 485 "perly.y" +#line 487 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 56: -#line 487 "perly.y" +#line 489 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 57: -#line 489 "perly.y" +#line 491 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 58: -#line 491 "perly.y" +#line 493 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 59: -#line 496 "perly.y" +#line 498 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 60: -#line 500 "perly.y" +#line 502 "perly.y" { (yyval.opval) = newOP(OP_NULL,0); TOKEN_GETMAD((yyvsp[(1) - (1)].i_tkval),(yyval.opval),'p'); ;} break; case 61: -#line 506 "perly.y" +#line 508 "perly.y" { SvREFCNT_inc(PL_compcv); #ifdef MAD - (yyval.opval) = newFORM((yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].opval), (yyvsp[(4) - (4)].opval)); - prepend_madprops((yyvsp[(1) - (4)].i_tkval)->tk_mad, (yyval.opval), 'F'); - (yyvsp[(1) - (4)].i_tkval)->tk_mad = 0; - token_free((yyvsp[(1) - (4)].i_tkval)); + (yyval.opval) = newFORM((yyvsp[(3) - (5)].ival), (yyvsp[(4) - (5)].opval), (yyvsp[(5) - (5)].opval)); + prepend_madprops((yyvsp[(1) - (5)].i_tkval)->tk_mad, (yyval.opval), 'F'); + (yyvsp[(1) - (5)].i_tkval)->tk_mad = 0; + token_free((yyvsp[(1) - (5)].i_tkval)); #else - newFORM((yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].opval), (yyvsp[(4) - (4)].opval)); + newFORM((yyvsp[(3) - (5)].ival), (yyvsp[(4) - (5)].opval), (yyvsp[(5) - (5)].opval)); #endif ;} break; case 62: -#line 518 "perly.y" +#line 520 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 63: -#line 519 "perly.y" +#line 521 "perly.y" { (yyval.opval) = Nullop; ;} break; case 64: -#line 524 "perly.y" +#line 526 "perly.y" { SvREFCNT_inc(PL_compcv); #ifdef MAD - (yyval.opval) = newMYSUB((yyvsp[(2) - (6)].ival), (yyvsp[(3) - (6)].opval), (yyvsp[(4) - (6)].opval), (yyvsp[(5) - (6)].opval), (yyvsp[(6) - (6)].opval)); - token_getmad((yyvsp[(1) - (6)].i_tkval),(yyval.opval),'d'); + (yyval.opval) = newMYSUB((yyvsp[(3) - (7)].ival), (yyvsp[(4) - (7)].opval), (yyvsp[(5) - (7)].opval), (yyvsp[(6) - (7)].opval), (yyvsp[(7) - (7)].opval)); + token_getmad((yyvsp[(1) - (7)].i_tkval),(yyval.opval),'d'); #else - newMYSUB((yyvsp[(2) - (6)].ival), (yyvsp[(3) - (6)].opval), (yyvsp[(4) - (6)].opval), (yyvsp[(5) - (6)].opval), (yyvsp[(6) - (6)].opval)); + newMYSUB((yyvsp[(3) - (7)].ival), (yyvsp[(4) - (7)].opval), (yyvsp[(5) - (7)].opval), (yyvsp[(6) - (7)].opval), (yyvsp[(7) - (7)].opval)); #endif ;} break; case 65: -#line 536 "perly.y" +#line 538 "perly.y" { SvREFCNT_inc(PL_compcv); #ifdef MAD OP* o = newSVOP(OP_ANONCODE, 0, - (SV*)newATTRSUB((yyvsp[(2) - (6)].ival), (yyvsp[(3) - (6)].opval), (yyvsp[(4) - (6)].opval), (yyvsp[(5) - (6)].opval), (yyvsp[(6) - (6)].opval))); + (SV*)newATTRSUB((yyvsp[(3) - (7)].ival), (yyvsp[(4) - (7)].opval), (yyvsp[(5) - (7)].opval), (yyvsp[(6) - (7)].opval), (yyvsp[(7) - (7)].opval))); (yyval.opval) = newOP(OP_NULL,0); op_getmad(o,(yyval.opval),'&'); - op_getmad((yyvsp[(3) - (6)].opval),(yyval.opval),'n'); - op_getmad((yyvsp[(4) - (6)].opval),(yyval.opval),'s'); - op_getmad((yyvsp[(5) - (6)].opval),(yyval.opval),'a'); - token_getmad((yyvsp[(1) - (6)].i_tkval),(yyval.opval),'d'); - append_madprops((yyvsp[(6) - (6)].opval)->op_madprop, (yyval.opval), 0); - (yyvsp[(6) - (6)].opval)->op_madprop = 0; + op_getmad((yyvsp[(4) - (7)].opval),(yyval.opval),'n'); + op_getmad((yyvsp[(5) - (7)].opval),(yyval.opval),'s'); + op_getmad((yyvsp[(6) - (7)].opval),(yyval.opval),'a'); + token_getmad((yyvsp[(1) - (7)].i_tkval),(yyval.opval),'d'); + append_madprops((yyvsp[(7) - (7)].opval)->op_madprop, (yyval.opval), 0); + (yyvsp[(7) - (7)].opval)->op_madprop = 0; #else - newATTRSUB((yyvsp[(2) - (6)].ival), (yyvsp[(3) - (6)].opval), (yyvsp[(4) - (6)].opval), (yyvsp[(5) - (6)].opval), (yyvsp[(6) - (6)].opval)); + newATTRSUB((yyvsp[(3) - (7)].ival), (yyvsp[(4) - (7)].opval), (yyvsp[(5) - (7)].opval), (yyvsp[(6) - (7)].opval), (yyvsp[(7) - (7)].opval)); (yyval.opval) = Nullop; #endif ;} break; case 66: -#line 556 "perly.y" - { (yyval.ival) = start_subparse(FALSE, 0); - SAVEFREESV(PL_compcv); ;} +#line 558 "perly.y" + { (yyval.padval) = PL_comppad; ;} break; case 67: #line 562 "perly.y" - { (yyval.ival) = start_subparse(FALSE, CVf_ANON); + { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); ;} break; case 68: -#line 567 "perly.y" - { (yyval.ival) = start_subparse(TRUE, 0); +#line 568 "perly.y" + { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); ;} break; case 69: -#line 572 "perly.y" +#line 573 "perly.y" + { (yyval.ival) = start_subparse(TRUE, 0); + SAVEFREESV(PL_compcv); ;} + break; + + case 70: +#line 578 "perly.y" { const char *const name = SvPV_nolen_const(((SVOP*)(yyvsp[(1) - (1)].opval))->op_sv); if (strEQ(name, "BEGIN") || strEQ(name, "END") || strEQ(name, "INIT") || strEQ(name, "CHECK") @@ -541,25 +546,25 @@ case 2: (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; - case 70: -#line 582 "perly.y" + case 71: +#line 588 "perly.y" { (yyval.opval) = Nullop; ;} break; - case 72: -#line 588 "perly.y" + case 73: +#line 594 "perly.y" { (yyval.opval) = Nullop; ;} break; - case 73: -#line 590 "perly.y" + case 74: +#line 596 "perly.y" { (yyval.opval) = (yyvsp[(2) - (2)].opval); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),':'); ;} break; - case 74: -#line 594 "perly.y" + case 75: +#line 600 "perly.y" { (yyval.opval) = IF_MAD( newOP(OP_NULL, 0), Nullop @@ -568,15 +573,15 @@ case 2: ;} break; - case 75: -#line 604 "perly.y" + case 76: +#line 610 "perly.y" { (yyval.opval) = (yyvsp[(2) - (2)].opval); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),':'); ;} break; - case 76: -#line 608 "perly.y" + case 77: +#line 614 "perly.y" { (yyval.opval) = IF_MAD( newOP(OP_NULL, 0), Nullop @@ -585,13 +590,13 @@ case 2: ;} break; - case 77: -#line 617 "perly.y" + case 78: +#line 623 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; - case 78: -#line 618 "perly.y" + case 79: +#line 624 "perly.y" { (yyval.opval) = IF_MAD( newOP(OP_NULL,0), Nullop @@ -601,8 +606,8 @@ case 2: ;} break; - case 79: -#line 628 "perly.y" + case 80: +#line 634 "perly.y" { #ifdef MAD (yyval.opval) = package((yyvsp[(2) - (3)].opval)); @@ -614,49 +619,49 @@ case 2: ;} break; - case 80: -#line 640 "perly.y" + case 81: +#line 646 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ ;} break; - case 81: -#line 642 "perly.y" + case 82: +#line 648 "perly.y" { SvREFCNT_inc(PL_compcv); #ifdef MAD - (yyval.opval) = utilize(IVAL((yyvsp[(1) - (7)].i_tkval)), (yyvsp[(2) - (7)].ival), (yyvsp[(4) - (7)].opval), (yyvsp[(5) - (7)].opval), (yyvsp[(6) - (7)].opval)); - token_getmad((yyvsp[(1) - (7)].i_tkval),(yyval.opval),'o'); - token_getmad((yyvsp[(7) - (7)].i_tkval),(yyval.opval),';'); + (yyval.opval) = utilize(IVAL((yyvsp[(1) - (8)].i_tkval)), (yyvsp[(3) - (8)].ival), (yyvsp[(5) - (8)].opval), (yyvsp[(6) - (8)].opval), (yyvsp[(7) - (8)].opval)); + token_getmad((yyvsp[(1) - (8)].i_tkval),(yyval.opval),'o'); + token_getmad((yyvsp[(8) - (8)].i_tkval),(yyval.opval),';'); if (PL_rsfp_filters && AvFILLp(PL_rsfp_filters) >= 0) append_madprops(newMADPROP('!', MAD_PV, "", 0), (yyval.opval), 0); #else - utilize(IVAL((yyvsp[(1) - (7)].i_tkval)), (yyvsp[(2) - (7)].ival), (yyvsp[(4) - (7)].opval), (yyvsp[(5) - (7)].opval), (yyvsp[(6) - (7)].opval)); + utilize(IVAL((yyvsp[(1) - (8)].i_tkval)), (yyvsp[(3) - (8)].ival), (yyvsp[(5) - (8)].opval), (yyvsp[(6) - (8)].opval), (yyvsp[(7) - (8)].opval)); #endif ;} break; - case 82: -#line 657 "perly.y" + case 83: +#line 663 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (yyvsp[(1) - (3)].opval), (yyvsp[(3) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 83: -#line 661 "perly.y" + case 84: +#line 667 "perly.y" { (yyval.opval) = newLOGOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, (yyvsp[(1) - (3)].opval), (yyvsp[(3) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 84: -#line 665 "perly.y" + case 85: +#line 671 "perly.y" { (yyval.opval) = newLOGOP(OP_DOR, 0, (yyvsp[(1) - (3)].opval), (yyvsp[(3) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 86: -#line 673 "perly.y" + case 87: +#line 679 "perly.y" { #ifdef MAD OP* op = newNULLLIST(); @@ -668,8 +673,8 @@ case 2: ;} break; - case 87: -#line 683 "perly.y" + case 88: +#line 689 "perly.y" { DO_MAD( (yyvsp[(3) - (3)].opval) = newUNOP(OP_NULL, 0, (yyvsp[(3) - (3)].opval)); @@ -679,16 +684,16 @@ case 2: ;} break; - case 89: -#line 695 "perly.y" + case 90: +#line 701 "perly.y" { (yyval.opval) = convert(IVAL((yyvsp[(1) - (3)].i_tkval)), OPf_STACKED, prepend_elem(OP_LIST, newGVREF(IVAL((yyvsp[(1) - (3)].i_tkval)),(yyvsp[(2) - (3)].opval)), (yyvsp[(3) - (3)].opval)) ); TOKEN_GETMAD((yyvsp[(1) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 90: -#line 700 "perly.y" + case 91: +#line 706 "perly.y" { (yyval.opval) = convert(IVAL((yyvsp[(1) - (5)].i_tkval)), OPf_STACKED, prepend_elem(OP_LIST, newGVREF(IVAL((yyvsp[(1) - (5)].i_tkval)),(yyvsp[(3) - (5)].opval)), (yyvsp[(4) - (5)].opval)) ); TOKEN_GETMAD((yyvsp[(1) - (5)].i_tkval),(yyval.opval),'o'); @@ -697,8 +702,8 @@ case 2: ;} break; - case 91: -#line 707 "perly.y" + case 92: +#line 713 "perly.y" { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, scalar((yyvsp[(1) - (6)].opval)), (yyvsp[(5) - (6)].opval)), @@ -709,8 +714,8 @@ case 2: ;} break; - case 92: -#line 716 "perly.y" + case 93: +#line 722 "perly.y" { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, scalar((yyvsp[(1) - (3)].opval)), newUNOP(OP_METHOD, 0, (yyvsp[(3) - (3)].opval)))); @@ -718,8 +723,8 @@ case 2: ;} break; - case 93: -#line 722 "perly.y" + case 94: +#line 728 "perly.y" { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, (yyvsp[(2) - (3)].opval), (yyvsp[(3) - (3)].opval)), @@ -727,8 +732,8 @@ case 2: ;} break; - case 94: -#line 728 "perly.y" + case 95: +#line 734 "perly.y" { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, (yyvsp[(2) - (5)].opval), (yyvsp[(4) - (5)].opval)), @@ -738,15 +743,15 @@ case 2: ;} break; - case 95: -#line 736 "perly.y" + case 96: +#line 742 "perly.y" { (yyval.opval) = convert(IVAL((yyvsp[(1) - (2)].i_tkval)), 0, (yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 96: -#line 740 "perly.y" + case 97: +#line 746 "perly.y" { (yyval.opval) = convert(IVAL((yyvsp[(1) - (4)].i_tkval)), 0, (yyvsp[(3) - (4)].opval)); TOKEN_GETMAD((yyvsp[(1) - (4)].i_tkval),(yyval.opval),'o'); TOKEN_GETMAD((yyvsp[(2) - (4)].i_tkval),(yyval.opval),'('); @@ -754,22 +759,22 @@ case 2: ;} break; - case 97: -#line 746 "perly.y" + case 98: +#line 752 "perly.y" { SvREFCNT_inc(PL_compcv); - (yyvsp[(3) - (3)].opval) = newANONATTRSUB((yyvsp[(2) - (3)].ival), 0, Nullop, (yyvsp[(3) - (3)].opval)); ;} + (yyvsp[(4) - (4)].opval) = newANONATTRSUB((yyvsp[(3) - (4)].ival), 0, Nullop, (yyvsp[(4) - (4)].opval)); ;} break; - case 98: -#line 749 "perly.y" + case 99: +#line 755 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, - prepend_elem(OP_LIST, (yyvsp[(3) - (5)].opval), (yyvsp[(5) - (5)].opval)), (yyvsp[(1) - (5)].opval))); + prepend_elem(OP_LIST, (yyvsp[(4) - (6)].opval), (yyvsp[(6) - (6)].opval)), (yyvsp[(1) - (6)].opval))); ;} break; - case 101: -#line 764 "perly.y" + case 102: +#line 770 "perly.y" { (yyval.opval) = newBINOP(OP_GELEM, 0, (yyvsp[(1) - (5)].opval), scalar((yyvsp[(3) - (5)].opval))); PL_expect = XOPERATOR; TOKEN_GETMAD((yyvsp[(2) - (5)].i_tkval),(yyval.opval),'{'); @@ -778,16 +783,16 @@ case 2: ;} break; - case 102: -#line 771 "perly.y" + case 103: +#line 777 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((yyvsp[(1) - (4)].opval)), scalar((yyvsp[(3) - (4)].opval))); TOKEN_GETMAD((yyvsp[(2) - (4)].i_tkval),(yyval.opval),'['); TOKEN_GETMAD((yyvsp[(4) - (4)].i_tkval),(yyval.opval),']'); ;} break; - case 103: -#line 776 "perly.y" + case 104: +#line 782 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((yyvsp[(1) - (5)].opval)),OP_RV2AV), scalar((yyvsp[(4) - (5)].opval))); @@ -797,8 +802,8 @@ case 2: ;} break; - case 104: -#line 784 "perly.y" + case 105: +#line 790 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((yyvsp[(1) - (4)].opval)),OP_RV2AV), scalar((yyvsp[(3) - (4)].opval))); @@ -807,8 +812,8 @@ case 2: ;} break; - case 105: -#line 791 "perly.y" + case 106: +#line 797 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((yyvsp[(1) - (5)].opval)), jmaybe((yyvsp[(3) - (5)].opval))); PL_expect = XOPERATOR; TOKEN_GETMAD((yyvsp[(2) - (5)].i_tkval),(yyval.opval),'{'); @@ -817,8 +822,8 @@ case 2: ;} break; - case 106: -#line 798 "perly.y" + case 107: +#line 804 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((yyvsp[(1) - (6)].opval)),OP_RV2HV), jmaybe((yyvsp[(4) - (6)].opval))); @@ -830,8 +835,8 @@ case 2: ;} break; - case 107: -#line 808 "perly.y" + case 108: +#line 814 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((yyvsp[(1) - (5)].opval)),OP_RV2HV), jmaybe((yyvsp[(3) - (5)].opval))); @@ -842,8 +847,8 @@ case 2: ;} break; - case 108: -#line 817 "perly.y" + case 109: +#line 823 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((yyvsp[(1) - (4)].opval)))); TOKEN_GETMAD((yyvsp[(2) - (4)].i_tkval),(yyval.opval),'a'); @@ -852,8 +857,8 @@ case 2: ;} break; - case 109: -#line 824 "perly.y" + case 110: +#line 830 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, (yyvsp[(4) - (5)].opval), newCVREF(0, scalar((yyvsp[(1) - (5)].opval))))); @@ -863,8 +868,8 @@ case 2: ;} break; - case 110: -#line 833 "perly.y" + case 111: +#line 839 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, (yyvsp[(3) - (4)].opval), newCVREF(0, scalar((yyvsp[(1) - (4)].opval))))); @@ -873,8 +878,8 @@ case 2: ;} break; - case 111: -#line 840 "perly.y" + case 112: +#line 846 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((yyvsp[(1) - (3)].opval)))); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'('); @@ -882,8 +887,8 @@ case 2: ;} break; - case 112: -#line 846 "perly.y" + case 113: +#line 852 "perly.y" { (yyval.opval) = newSLICEOP(0, (yyvsp[(5) - (6)].opval), (yyvsp[(2) - (6)].opval)); TOKEN_GETMAD((yyvsp[(1) - (6)].i_tkval),(yyval.opval),'('); TOKEN_GETMAD((yyvsp[(3) - (6)].i_tkval),(yyval.opval),')'); @@ -892,8 +897,8 @@ case 2: ;} break; - case 113: -#line 853 "perly.y" + case 114: +#line 859 "perly.y" { (yyval.opval) = newSLICEOP(0, (yyvsp[(4) - (5)].opval), Nullop); TOKEN_GETMAD((yyvsp[(1) - (5)].i_tkval),(yyval.opval),'('); TOKEN_GETMAD((yyvsp[(2) - (5)].i_tkval),(yyval.opval),')'); @@ -902,22 +907,22 @@ case 2: ;} break; - case 114: -#line 863 "perly.y" + case 115: +#line 869 "perly.y" { (yyval.opval) = newASSIGNOP(OPf_STACKED, (yyvsp[(1) - (3)].opval), IVAL((yyvsp[(2) - (3)].i_tkval)), (yyvsp[(3) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 115: -#line 867 "perly.y" + case 116: +#line 873 "perly.y" { (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 116: -#line 871 "perly.y" + case 117: +#line 877 "perly.y" { if (IVAL((yyvsp[(2) - (3)].i_tkval)) != OP_REPEAT) scalar((yyvsp[(1) - (3)].opval)); (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, (yyvsp[(1) - (3)].opval), scalar((yyvsp[(3) - (3)].opval))); @@ -925,50 +930,50 @@ case 2: ;} break; - case 117: -#line 877 "perly.y" - { (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); - TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); - ;} - break; - case 118: -#line 881 "perly.y" +#line 883 "perly.y" { (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; case 119: -#line 885 "perly.y" +#line 887 "perly.y" { (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; case 120: -#line 889 "perly.y" +#line 891 "perly.y" { (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; case 121: -#line 893 "perly.y" +#line 895 "perly.y" { (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; case 122: -#line 897 "perly.y" +#line 899 "perly.y" { (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; case 123: -#line 901 "perly.y" +#line 903 "perly.y" + { (yyval.opval) = newBINOP(IVAL((yyvsp[(2) - (3)].i_tkval)), 0, scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); + TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); + ;} + break; + + case 124: +#line 907 "perly.y" { (yyval.opval) = newRANGE(IVAL((yyvsp[(2) - (3)].i_tkval)), scalar((yyvsp[(1) - (3)].opval)), scalar((yyvsp[(3) - (3)].opval))); DO_MAD( @@ -982,29 +987,29 @@ case 2: ;} break; - case 124: -#line 913 "perly.y" + case 125: +#line 919 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (yyvsp[(1) - (3)].opval), (yyvsp[(3) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 125: -#line 917 "perly.y" + case 126: +#line 923 "perly.y" { (yyval.opval) = newLOGOP(OP_OR, 0, (yyvsp[(1) - (3)].opval), (yyvsp[(3) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 126: -#line 921 "perly.y" + case 127: +#line 927 "perly.y" { (yyval.opval) = newLOGOP(OP_DOR, 0, (yyvsp[(1) - (3)].opval), (yyvsp[(3) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 127: -#line 925 "perly.y" + case 128: +#line 931 "perly.y" { (yyval.opval) = bind_match(IVAL((yyvsp[(2) - (3)].i_tkval)), (yyvsp[(1) - (3)].opval), (yyvsp[(3) - (3)].opval)); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval), ((yyval.opval)->op_type == OP_NOT @@ -1013,15 +1018,15 @@ case 2: ;} break; - case 128: -#line 935 "perly.y" + case 129: +#line 941 "perly.y" { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((yyvsp[(2) - (2)].opval))); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 129: -#line 939 "perly.y" + case 130: +#line 945 "perly.y" { (yyval.opval) = IF_MAD( newUNOP(OP_NULL, 0, (yyvsp[(2) - (2)].opval)), (yyvsp[(2) - (2)].opval) @@ -1030,70 +1035,70 @@ case 2: ;} break; - case 130: -#line 946 "perly.y" + case 131: +#line 952 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((yyvsp[(2) - (2)].opval))); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 131: -#line 950 "perly.y" + case 132: +#line 956 "perly.y" { (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((yyvsp[(2) - (2)].opval))); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 132: -#line 954 "perly.y" + case 133: +#line 960 "perly.y" { (yyval.opval) = newUNOP(OP_POSTINC, 0, mod(scalar((yyvsp[(1) - (2)].opval)), OP_POSTINC)); TOKEN_GETMAD((yyvsp[(2) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 133: -#line 959 "perly.y" + case 134: +#line 965 "perly.y" { (yyval.opval) = newUNOP(OP_POSTDEC, 0, mod(scalar((yyvsp[(1) - (2)].opval)), OP_POSTDEC)); TOKEN_GETMAD((yyvsp[(2) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 134: -#line 964 "perly.y" + case 135: +#line 970 "perly.y" { (yyval.opval) = newUNOP(OP_PREINC, 0, mod(scalar((yyvsp[(2) - (2)].opval)), OP_PREINC)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 135: -#line 969 "perly.y" + case 136: +#line 975 "perly.y" { (yyval.opval) = newUNOP(OP_PREDEC, 0, mod(scalar((yyvsp[(2) - (2)].opval)), OP_PREDEC)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 136: -#line 978 "perly.y" + case 137: +#line 984 "perly.y" { (yyval.opval) = newANONLIST((yyvsp[(2) - (3)].opval)); TOKEN_GETMAD((yyvsp[(1) - (3)].i_tkval),(yyval.opval),'['); TOKEN_GETMAD((yyvsp[(3) - (3)].i_tkval),(yyval.opval),']'); ;} break; - case 137: -#line 983 "perly.y" + case 138: +#line 989 "perly.y" { (yyval.opval) = newANONLIST(Nullop); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'['); TOKEN_GETMAD((yyvsp[(2) - (2)].i_tkval),(yyval.opval),']'); ;} break; - case 138: -#line 988 "perly.y" + case 139: +#line 994 "perly.y" { (yyval.opval) = newANONHASH((yyvsp[(2) - (4)].opval)); TOKEN_GETMAD((yyvsp[(1) - (4)].i_tkval),(yyval.opval),'{'); TOKEN_GETMAD((yyvsp[(3) - (4)].i_tkval),(yyval.opval),';'); @@ -1101,8 +1106,8 @@ case 2: ;} break; - case 139: -#line 994 "perly.y" + case 140: +#line 1000 "perly.y" { (yyval.opval) = newANONHASH(Nullop); TOKEN_GETMAD((yyvsp[(1) - (3)].i_tkval),(yyval.opval),'{'); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),';'); @@ -1110,32 +1115,32 @@ case 2: ;} break; - case 140: -#line 1000 "perly.y" + case 141: +#line 1006 "perly.y" { SvREFCNT_inc(PL_compcv); - (yyval.opval) = newANONATTRSUB((yyvsp[(2) - (5)].ival), (yyvsp[(3) - (5)].opval), (yyvsp[(4) - (5)].opval), (yyvsp[(5) - (5)].opval)); - TOKEN_GETMAD((yyvsp[(1) - (5)].i_tkval),(yyval.opval),'o'); - OP_GETMAD((yyvsp[(3) - (5)].opval),(yyval.opval),'s'); - OP_GETMAD((yyvsp[(4) - (5)].opval),(yyval.opval),'a'); + (yyval.opval) = newANONATTRSUB((yyvsp[(3) - (6)].ival), (yyvsp[(4) - (6)].opval), (yyvsp[(5) - (6)].opval), (yyvsp[(6) - (6)].opval)); + TOKEN_GETMAD((yyvsp[(1) - (6)].i_tkval),(yyval.opval),'o'); + OP_GETMAD((yyvsp[(4) - (6)].opval),(yyval.opval),'s'); + OP_GETMAD((yyvsp[(5) - (6)].opval),(yyval.opval),'a'); ;} break; - case 141: -#line 1011 "perly.y" + case 142: +#line 1017 "perly.y" { (yyval.opval) = dofile((yyvsp[(2) - (2)].opval), IVAL((yyvsp[(1) - (2)].i_tkval))); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 142: -#line 1015 "perly.y" + case 143: +#line 1021 "perly.y" { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, scope((yyvsp[(2) - (2)].opval))); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'D'); ;} break; - case 143: -#line 1019 "perly.y" + case 144: +#line 1025 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -1149,8 +1154,8 @@ case 2: ;} break; - case 144: -#line 1031 "perly.y" + case 145: +#line 1037 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -1165,8 +1170,8 @@ case 2: ;} break; - case 145: -#line 1044 "perly.y" + case 146: +#line 1050 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, scalar(newCVREF(0,scalar((yyvsp[(2) - (4)].opval)))), Nullop)); dep(); @@ -1176,8 +1181,8 @@ case 2: ;} break; - case 146: -#line 1052 "perly.y" + case 147: +#line 1058 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, (yyvsp[(4) - (5)].opval), @@ -1188,81 +1193,81 @@ case 2: ;} break; - case 151: -#line 1068 "perly.y" + case 152: +#line 1074 "perly.y" { (yyval.opval) = newCONDOP(0, (yyvsp[(1) - (5)].opval), (yyvsp[(3) - (5)].opval), (yyvsp[(5) - (5)].opval)); TOKEN_GETMAD((yyvsp[(2) - (5)].i_tkval),(yyval.opval),'?'); TOKEN_GETMAD((yyvsp[(4) - (5)].i_tkval),(yyval.opval),':'); ;} break; - case 152: -#line 1073 "perly.y" + case 153: +#line 1079 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, mod((yyvsp[(2) - (2)].opval),OP_REFGEN)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 153: -#line 1077 "perly.y" + case 154: +#line 1083 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; - case 154: -#line 1079 "perly.y" + case 155: +#line 1085 "perly.y" { (yyval.opval) = localize((yyvsp[(2) - (2)].opval),IVAL((yyvsp[(1) - (2)].i_tkval))); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'d'); ;} break; - case 155: -#line 1083 "perly.y" + case 156: +#line 1089 "perly.y" { (yyval.opval) = sawparens(IF_MAD(newUNOP(OP_NULL,0,(yyvsp[(2) - (3)].opval)), (yyvsp[(2) - (3)].opval))); TOKEN_GETMAD((yyvsp[(1) - (3)].i_tkval),(yyval.opval),'('); TOKEN_GETMAD((yyvsp[(3) - (3)].i_tkval),(yyval.opval),')'); ;} break; - case 156: -#line 1088 "perly.y" + case 157: +#line 1094 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'('); TOKEN_GETMAD((yyvsp[(2) - (2)].i_tkval),(yyval.opval),')'); ;} break; - case 157: -#line 1093 "perly.y" - { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} - break; - case 158: -#line 1095 "perly.y" +#line 1099 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 159: -#line 1097 "perly.y" +#line 1101 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 160: -#line 1099 "perly.y" +#line 1103 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 161: -#line 1101 "perly.y" - { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((yyvsp[(1) - (1)].opval), OP_AV2ARYLEN));;} +#line 1105 "perly.y" + { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 162: -#line 1103 "perly.y" - { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} +#line 1107 "perly.y" + { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((yyvsp[(1) - (1)].opval), OP_AV2ARYLEN));;} break; case 163: -#line 1105 "perly.y" +#line 1109 "perly.y" + { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} + break; + + case 164: +#line 1111 "perly.y" { (yyval.opval) = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1273,8 +1278,8 @@ case 2: ;} break; - case 164: -#line 1114 "perly.y" + case 165: +#line 1120 "perly.y" { (yyval.opval) = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1287,26 +1292,26 @@ case 2: ;} break; - case 165: -#line 1125 "perly.y" + case 166: +#line 1131 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; - case 166: -#line 1127 "perly.y" + case 167: +#line 1133 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((yyvsp[(1) - (1)].opval))); ;} break; - case 167: -#line 1129 "perly.y" + case 168: +#line 1135 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((yyvsp[(1) - (3)].opval))); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'('); TOKEN_GETMAD((yyvsp[(3) - (3)].i_tkval),(yyval.opval),')'); ;} break; - case 168: -#line 1134 "perly.y" + case 169: +#line 1140 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, (yyvsp[(3) - (4)].opval), scalar((yyvsp[(1) - (4)].opval)))); @@ -1321,87 +1326,87 @@ case 2: ;} break; - case 169: -#line 1147 "perly.y" + case 170: +#line 1153 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, (yyvsp[(3) - (3)].opval), scalar((yyvsp[(2) - (3)].opval)))); TOKEN_GETMAD((yyvsp[(1) - (3)].i_tkval),(yyval.opval),'o'); ;} break; - case 170: -#line 1152 "perly.y" + case 171: +#line 1158 "perly.y" { (yyval.opval) = newOP(IVAL((yyvsp[(1) - (1)].i_tkval)), OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; TOKEN_GETMAD((yyvsp[(1) - (1)].i_tkval),(yyval.opval),'o'); ;} break; - case 171: -#line 1157 "perly.y" + case 172: +#line 1163 "perly.y" { (yyval.opval) = newLOOPEX(IVAL((yyvsp[(1) - (2)].i_tkval)),(yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 172: -#line 1161 "perly.y" + case 173: +#line 1167 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((yyvsp[(2) - (2)].opval))); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 173: -#line 1165 "perly.y" + case 174: +#line 1171 "perly.y" { (yyval.opval) = newOP(IVAL((yyvsp[(1) - (1)].i_tkval)), 0); TOKEN_GETMAD((yyvsp[(1) - (1)].i_tkval),(yyval.opval),'o'); ;} break; - case 174: -#line 1169 "perly.y" + case 175: +#line 1175 "perly.y" { (yyval.opval) = newUNOP(IVAL((yyvsp[(1) - (2)].i_tkval)), 0, (yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 175: -#line 1173 "perly.y" + case 176: +#line 1179 "perly.y" { (yyval.opval) = newUNOP(IVAL((yyvsp[(1) - (2)].i_tkval)), 0, (yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'o'); ;} break; - case 176: -#line 1177 "perly.y" + case 177: +#line 1183 "perly.y" { (yyval.opval) = newOP(OP_REQUIRE, (yyvsp[(1) - (1)].i_tkval) ? OPf_SPECIAL : 0); ;} break; - case 177: -#line 1179 "perly.y" + case 178: +#line 1185 "perly.y" { (yyval.opval) = newUNOP(OP_REQUIRE, (yyvsp[(1) - (2)].i_tkval) ? OPf_SPECIAL : 0, (yyvsp[(2) - (2)].opval)); ;} break; - case 178: -#line 1181 "perly.y" + case 179: +#line 1187 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((yyvsp[(1) - (1)].opval))); ;} break; - case 179: -#line 1183 "perly.y" + case 180: +#line 1189 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, (yyvsp[(2) - (2)].opval), scalar((yyvsp[(1) - (2)].opval)))); ;} break; - case 180: -#line 1186 "perly.y" + case 181: +#line 1192 "perly.y" { (yyval.opval) = newOP(IVAL((yyvsp[(1) - (1)].i_tkval)), 0); TOKEN_GETMAD((yyvsp[(1) - (1)].i_tkval),(yyval.opval),'o'); ;} break; - case 181: -#line 1190 "perly.y" + case 182: +#line 1196 "perly.y" { (yyval.opval) = newOP(IVAL((yyvsp[(1) - (3)].i_tkval)), 0); TOKEN_GETMAD((yyvsp[(1) - (3)].i_tkval),(yyval.opval),'o'); TOKEN_GETMAD((yyvsp[(2) - (3)].i_tkval),(yyval.opval),'('); @@ -1409,14 +1414,14 @@ case 2: ;} break; - case 182: -#line 1196 "perly.y" + case 183: +#line 1202 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((yyvsp[(1) - (1)].opval))); ;} break; - case 183: -#line 1199 "perly.y" + case 184: +#line 1205 "perly.y" { (yyval.opval) = (IVAL((yyvsp[(1) - (3)].i_tkval)) == OP_NOT) ? newUNOP(IVAL((yyvsp[(1) - (3)].i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0))) : newOP(IVAL((yyvsp[(1) - (3)].i_tkval)), OPf_SPECIAL); @@ -1427,8 +1432,8 @@ case 2: ;} break; - case 184: -#line 1208 "perly.y" + case 185: +#line 1214 "perly.y" { (yyval.opval) = newUNOP(IVAL((yyvsp[(1) - (4)].i_tkval)), 0, (yyvsp[(3) - (4)].opval)); TOKEN_GETMAD((yyvsp[(1) - (4)].i_tkval),(yyval.opval),'o'); TOKEN_GETMAD((yyvsp[(2) - (4)].i_tkval),(yyval.opval),'('); @@ -1436,16 +1441,16 @@ case 2: ;} break; - case 185: -#line 1214 "perly.y" + case 186: +#line 1220 "perly.y" { (yyval.opval) = pmruntime((yyvsp[(1) - (4)].opval), (yyvsp[(3) - (4)].opval), 1); TOKEN_GETMAD((yyvsp[(2) - (4)].i_tkval),(yyval.opval),'('); TOKEN_GETMAD((yyvsp[(4) - (4)].i_tkval),(yyval.opval),')'); ;} break; - case 188: -#line 1224 "perly.y" + case 189: +#line 1230 "perly.y" { (yyval.opval) = my_attrs((yyvsp[(2) - (3)].opval),(yyvsp[(3) - (3)].opval)); DO_MAD( token_getmad((yyvsp[(1) - (3)].i_tkval),(yyval.opval),'d'); @@ -1455,66 +1460,66 @@ case 2: ;} break; - case 189: -#line 1232 "perly.y" + case 190: +#line 1238 "perly.y" { (yyval.opval) = localize((yyvsp[(2) - (2)].opval),IVAL((yyvsp[(1) - (2)].i_tkval))); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'d'); ;} break; - case 190: -#line 1239 "perly.y" + case 191: +#line 1245 "perly.y" { (yyval.opval) = sawparens((yyvsp[(2) - (3)].opval)); TOKEN_GETMAD((yyvsp[(1) - (3)].i_tkval),(yyval.opval),'('); TOKEN_GETMAD((yyvsp[(3) - (3)].i_tkval),(yyval.opval),')'); ;} break; - case 191: -#line 1244 "perly.y" + case 192: +#line 1250 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'('); TOKEN_GETMAD((yyvsp[(2) - (2)].i_tkval),(yyval.opval),')'); ;} break; - case 192: -#line 1249 "perly.y" - { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} - break; - case 193: -#line 1251 "perly.y" +#line 1255 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 194: -#line 1253 "perly.y" +#line 1257 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; case 195: -#line 1258 "perly.y" - { (yyval.opval) = Nullop; ;} - break; - - case 196: -#line 1260 "perly.y" +#line 1259 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; - case 197: + case 196: #line 1264 "perly.y" { (yyval.opval) = Nullop; ;} break; - case 198: + case 197: #line 1266 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; + case 198: +#line 1270 "perly.y" + { (yyval.opval) = Nullop; ;} + break; + case 199: -#line 1268 "perly.y" +#line 1272 "perly.y" + { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} + break; + + case 200: +#line 1274 "perly.y" { #ifdef MAD OP* op = newNULLLIST(); @@ -1527,70 +1532,70 @@ case 2: ;} break; - case 200: -#line 1283 "perly.y" + case 201: +#line 1289 "perly.y" { PL_in_my = 0; (yyval.opval) = my((yyvsp[(1) - (1)].opval)); ;} break; - case 201: -#line 1287 "perly.y" + case 202: +#line 1293 "perly.y" { (yyval.opval) = newCVREF(IVAL((yyvsp[(1) - (2)].i_tkval)),(yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'&'); ;} break; - case 202: -#line 1293 "perly.y" + case 203: +#line 1299 "perly.y" { (yyval.opval) = newSVREF((yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'$'); ;} break; - case 203: -#line 1299 "perly.y" + case 204: +#line 1305 "perly.y" { (yyval.opval) = newAVREF((yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'@'); ;} break; - case 204: -#line 1305 "perly.y" + case 205: +#line 1311 "perly.y" { (yyval.opval) = newHVREF((yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'%'); ;} break; - case 205: -#line 1311 "perly.y" + case 206: +#line 1317 "perly.y" { (yyval.opval) = newAVREF((yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'l'); ;} break; - case 206: -#line 1317 "perly.y" + case 207: +#line 1323 "perly.y" { (yyval.opval) = newGVREF(0,(yyvsp[(2) - (2)].opval)); TOKEN_GETMAD((yyvsp[(1) - (2)].i_tkval),(yyval.opval),'*'); ;} break; - case 207: -#line 1324 "perly.y" + case 208: +#line 1330 "perly.y" { (yyval.opval) = scalar((yyvsp[(1) - (1)].opval)); ;} break; - case 208: -#line 1326 "perly.y" + case 209: +#line 1332 "perly.y" { (yyval.opval) = scalar((yyvsp[(1) - (1)].opval)); ;} break; - case 209: -#line 1328 "perly.y" + case 210: +#line 1334 "perly.y" { (yyval.opval) = scope((yyvsp[(1) - (1)].opval)); ;} break; - case 210: -#line 1331 "perly.y" + case 211: +#line 1337 "perly.y" { (yyval.opval) = (yyvsp[(1) - (1)].opval); ;} break; diff --git a/perly.c b/perly.c index b8b582f..fe9acc8 100644 --- a/perly.c +++ b/perly.c @@ -332,6 +332,9 @@ Perl_yyparse (pTHX) rule. */ int yylen; + /* keep track of which pad ops are currently using */ + AV* comppad = PL_comppad; + #ifndef PERL_IN_MADLY_C # ifdef PERL_MAD if (PL_madskills) @@ -573,6 +576,8 @@ Perl_yyparse (pTHX) *++yyvsp = yyval; + comppad = PL_comppad; + #ifdef DEBUGGING *++yynsp = (const char *)(yytname [yyr1[yyn]]); #endif @@ -669,9 +674,14 @@ Perl_yyparse (pTHX) /* Pop the error token. */ YYPOPSTACK; /* Pop the rest of the stack. */ + PAD_RESTORE_LOCAL(comppad); while (yyss < yyssp) { YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp); - if (yy_type_tab[yystos[*yyssp]] == toketype_opval) { + if (yy_type_tab[yystos[*yyssp]] == toketype_padval) { + comppad = yyvsp->padval; + PAD_RESTORE_LOCAL(comppad); + } + else if (yy_type_tab[yystos[*yyssp]] == toketype_opval) { YYDPRINTF ((Perl_debug_log, "(freeing op)\n")); op_free(yyvsp->opval); } @@ -696,6 +706,7 @@ Perl_yyparse (pTHX) yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ + PAD_RESTORE_LOCAL(comppad); for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { @@ -712,7 +723,11 @@ Perl_yyparse (pTHX) YYABORT; YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp); - if (yy_type_tab[yystos[*yyssp]] == toketype_opval) { + if (yy_type_tab[yystos[*yyssp]] == toketype_padval) { + comppad = yyvsp->padval; + PAD_RESTORE_LOCAL(comppad); + } + else if (yy_type_tab[yystos[*yyssp]] == toketype_opval) { YYDPRINTF ((Perl_debug_log, "(freeing op)\n")); op_free(yyvsp->opval); } diff --git a/perly.h b/perly.h index 73dc4b8..a35ca82 100644 --- a/perly.h +++ b/perly.h @@ -192,6 +192,7 @@ typedef union YYSTYPE char *pval; OP *opval; GV *gvval; + AV* padval; #ifdef PERL_IN_MADLY_C TOKEN* p_tkval; TOKEN* i_tkval; diff --git a/perly.tab b/perly.tab index e20aef9..ac92e8c 100644 --- a/perly.tab +++ b/perly.tab @@ -1,15 +1,15 @@ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2064 +#define YYLAST 2026 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 90 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 66 +#define YYNNTS 67 /* YYNRULES -- Number of rules. */ -#define YYNRULES 210 +#define YYNRULES 211 /* YYNRULES -- Number of states. */ -#define YYNSTATES 420 +#define YYNSTATES 426 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -67,22 +67,22 @@ static const yytype_uint16 yyprhs[] = 89, 97, 104, 107, 108, 111, 121, 131, 142, 152, 161, 174, 178, 187, 188, 189, 191, 192, 194, 196, 198, 200, 202, 203, 205, 207, 209, 211, 213, 215, - 217, 219, 224, 226, 227, 234, 241, 242, 243, 244, - 246, 247, 249, 250, 253, 255, 258, 260, 262, 264, - 268, 269, 277, 281, 285, 289, 291, 294, 298, 300, - 304, 310, 317, 321, 325, 331, 334, 339, 340, 346, - 348, 350, 356, 361, 367, 372, 378, 385, 391, 396, - 402, 407, 411, 418, 424, 428, 432, 436, 440, 444, - 448, 452, 456, 460, 464, 468, 472, 476, 480, 483, - 486, 489, 492, 495, 498, 501, 504, 508, 511, 516, - 520, 526, 529, 532, 537, 543, 548, 554, 556, 558, - 560, 562, 568, 571, 573, 576, 580, 583, 585, 587, - 589, 591, 593, 595, 600, 606, 608, 610, 614, 619, - 623, 625, 628, 631, 633, 636, 639, 641, 644, 646, - 649, 651, 655, 657, 661, 666, 671, 673, 675, 679, - 682, 686, 689, 691, 693, 695, 696, 698, 699, 701, - 704, 706, 709, 712, 715, 718, 721, 724, 726, 728, - 730 + 217, 219, 225, 227, 228, 236, 244, 245, 246, 247, + 248, 250, 251, 253, 254, 257, 259, 262, 264, 266, + 268, 272, 273, 282, 286, 290, 294, 296, 299, 303, + 305, 309, 315, 322, 326, 330, 336, 339, 344, 345, + 352, 354, 356, 362, 367, 373, 378, 384, 391, 397, + 402, 408, 413, 417, 424, 430, 434, 438, 442, 446, + 450, 454, 458, 462, 466, 470, 474, 478, 482, 486, + 489, 492, 495, 498, 501, 504, 507, 510, 514, 517, + 522, 526, 533, 536, 539, 544, 550, 555, 561, 563, + 565, 567, 569, 575, 578, 580, 583, 587, 590, 592, + 594, 596, 598, 600, 602, 607, 613, 615, 617, 621, + 626, 630, 632, 635, 638, 640, 643, 646, 648, 651, + 653, 656, 658, 662, 664, 668, 673, 678, 680, 682, + 686, 689, 693, 696, 698, 700, 702, 703, 705, 706, + 708, 711, 713, 716, 719, 722, 725, 728, 731, 733, + 735, 737 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -92,103 +92,103 @@ static const yytype_int16 yyrhs[] = -1, -1, -1, -1, 3, 97, 99, 4, -1, -1, -1, -1, 99, 116, -1, 99, 98, 100, -1, 115, 103, -1, 106, -1, 107, -1, 115, 104, -1, 115, - 14, -1, 115, 101, 14, -1, 1, -1, 133, -1, - 133, 32, 133, -1, 133, 33, 133, -1, 133, 30, - 133, -1, 133, 31, 111, -1, 133, 37, 133, -1, + 14, -1, 115, 101, 14, -1, 1, -1, 134, -1, + 134, 32, 134, -1, 134, 33, 134, -1, 134, 30, + 134, -1, 134, 31, 111, -1, 134, 37, 134, -1, -1, 34, 96, -1, 35, 88, 112, 87, 96, 102, -1, 32, 88, 93, 112, 87, 96, 102, -1, 33, 88, 93, 114, 87, 96, 102, -1, 39, 88, 93, 112, 87, 96, -1, 40, 92, -1, -1, 36, 92, -1, 115, 30, 88, 93, 110, 87, 108, 96, 105, -1, 115, 31, 88, 93, 111, 87, 108, 96, 105, - -1, 115, 37, 57, 93, 148, 88, 112, 87, 96, - 105, -1, 115, 37, 150, 88, 93, 112, 87, 96, + -1, 115, 37, 57, 93, 149, 88, 112, 87, 96, + 105, -1, 115, 37, 151, 88, 93, 112, 87, 96, 105, -1, 115, 37, 88, 93, 112, 87, 96, 105, -1, 115, 37, 88, 93, 113, 14, 110, 14, 108, 113, 87, 96, -1, 115, 92, 105, -1, 115, 38, 88, 93, 94, 112, 87, 96, -1, -1, -1, 101, - -1, -1, 133, -1, 133, -1, 133, -1, 109, -1, + -1, -1, 134, -1, 134, -1, 134, -1, 109, -1, 111, -1, -1, 24, -1, 118, -1, 121, -1, 120, - -1, 130, -1, 131, -1, 117, -1, 89, -1, 25, - 124, 119, 92, -1, 15, -1, -1, 58, 122, 125, - 126, 127, 129, -1, 26, 122, 125, 126, 127, 129, - -1, -1, -1, -1, 15, -1, -1, 18, -1, -1, - 60, 18, -1, 60, -1, 60, 18, -1, 60, -1, - 92, -1, 14, -1, 28, 15, 14, -1, -1, 29, - 122, 132, 15, 15, 146, 14, -1, 133, 64, 133, - -1, 133, 63, 133, -1, 133, 62, 133, -1, 134, - -1, 134, 66, -1, 134, 66, 143, -1, 143, -1, - 47, 155, 134, -1, 45, 88, 155, 133, 87, -1, - 143, 86, 137, 88, 147, 87, -1, 143, 86, 137, - -1, 16, 155, 146, -1, 17, 155, 88, 147, 87, - -1, 47, 146, -1, 45, 88, 147, 87, -1, -1, - 23, 123, 92, 136, 146, -1, 16, -1, 150, -1, - 154, 3, 133, 14, 4, -1, 150, 5, 133, 6, - -1, 143, 86, 5, 133, 6, -1, 138, 5, 133, - 6, -1, 150, 3, 133, 14, 4, -1, 143, 86, - 3, 133, 14, 4, -1, 138, 3, 133, 14, 4, - -1, 143, 86, 88, 87, -1, 143, 86, 88, 133, - 87, -1, 138, 88, 133, 87, -1, 138, 88, 87, - -1, 88, 133, 87, 5, 133, 6, -1, 88, 87, - 5, 133, 6, -1, 143, 67, 143, -1, 143, 81, - 143, -1, 143, 50, 143, -1, 143, 51, 143, -1, - 143, 75, 143, -1, 143, 48, 143, -1, 143, 49, - 143, -1, 143, 74, 143, -1, 143, 73, 143, -1, - 143, 42, 143, -1, 143, 72, 143, -1, 143, 71, - 143, -1, 143, 70, 143, -1, 143, 76, 143, -1, - 7, 143, -1, 8, 143, -1, 77, 143, -1, 78, - 143, -1, 143, 83, -1, 143, 82, -1, 85, 143, - -1, 84, 143, -1, 5, 133, 6, -1, 5, 6, - -1, 54, 133, 14, 4, -1, 54, 14, 4, -1, - 27, 123, 126, 127, 92, -1, 53, 143, -1, 53, - 92, -1, 53, 15, 88, 87, -1, 53, 15, 88, - 133, 87, -1, 53, 150, 88, 87, -1, 53, 150, - 88, 133, 87, -1, 139, -1, 140, -1, 141, -1, - 142, -1, 143, 68, 143, 69, 143, -1, 79, 143, - -1, 144, -1, 56, 143, -1, 88, 133, 87, -1, - 88, 87, -1, 150, -1, 154, -1, 152, -1, 151, - -1, 153, -1, 138, -1, 151, 5, 133, 6, -1, - 151, 3, 133, 14, 4, -1, 18, -1, 149, -1, - 149, 88, 87, -1, 149, 88, 133, 87, -1, 55, - 15, 146, -1, 41, -1, 41, 143, -1, 65, 134, - -1, 46, -1, 46, 92, -1, 46, 143, -1, 59, - -1, 59, 143, -1, 22, -1, 22, 143, -1, 43, - -1, 43, 88, 87, -1, 21, -1, 44, 88, 87, - -1, 44, 88, 133, 87, -1, 19, 88, 134, 87, - -1, 15, -1, 135, -1, 57, 145, 128, -1, 57, - 145, -1, 88, 133, 87, -1, 88, 87, -1, 150, - -1, 152, -1, 151, -1, -1, 134, -1, -1, 133, - -1, 133, 66, -1, 150, -1, 13, 155, -1, 9, - 155, -1, 10, 155, -1, 11, 155, -1, 52, 155, - -1, 12, 155, -1, 15, -1, 150, -1, 92, -1, - 20, -1 + -1, 131, -1, 132, -1, 117, -1, 89, -1, 25, + 122, 125, 119, 92, -1, 15, -1, -1, 58, 122, + 123, 126, 127, 128, 130, -1, 26, 122, 123, 126, + 127, 128, 130, -1, -1, -1, -1, -1, 15, -1, + -1, 18, -1, -1, 60, 18, -1, 60, -1, 60, + 18, -1, 60, -1, 92, -1, 14, -1, 28, 15, + 14, -1, -1, 29, 122, 123, 133, 15, 15, 147, + 14, -1, 134, 64, 134, -1, 134, 63, 134, -1, + 134, 62, 134, -1, 135, -1, 135, 66, -1, 135, + 66, 144, -1, 144, -1, 47, 156, 135, -1, 45, + 88, 156, 134, 87, -1, 144, 86, 138, 88, 148, + 87, -1, 144, 86, 138, -1, 16, 156, 147, -1, + 17, 156, 88, 148, 87, -1, 47, 147, -1, 45, + 88, 148, 87, -1, -1, 23, 122, 124, 92, 137, + 147, -1, 16, -1, 151, -1, 155, 3, 134, 14, + 4, -1, 151, 5, 134, 6, -1, 144, 86, 5, + 134, 6, -1, 139, 5, 134, 6, -1, 151, 3, + 134, 14, 4, -1, 144, 86, 3, 134, 14, 4, + -1, 139, 3, 134, 14, 4, -1, 144, 86, 88, + 87, -1, 144, 86, 88, 134, 87, -1, 139, 88, + 134, 87, -1, 139, 88, 87, -1, 88, 134, 87, + 5, 134, 6, -1, 88, 87, 5, 134, 6, -1, + 144, 67, 144, -1, 144, 81, 144, -1, 144, 50, + 144, -1, 144, 51, 144, -1, 144, 75, 144, -1, + 144, 48, 144, -1, 144, 49, 144, -1, 144, 74, + 144, -1, 144, 73, 144, -1, 144, 42, 144, -1, + 144, 72, 144, -1, 144, 71, 144, -1, 144, 70, + 144, -1, 144, 76, 144, -1, 7, 144, -1, 8, + 144, -1, 77, 144, -1, 78, 144, -1, 144, 83, + -1, 144, 82, -1, 85, 144, -1, 84, 144, -1, + 5, 134, 6, -1, 5, 6, -1, 54, 134, 14, + 4, -1, 54, 14, 4, -1, 27, 122, 124, 127, + 128, 92, -1, 53, 144, -1, 53, 92, -1, 53, + 15, 88, 87, -1, 53, 15, 88, 134, 87, -1, + 53, 151, 88, 87, -1, 53, 151, 88, 134, 87, + -1, 140, -1, 141, -1, 142, -1, 143, -1, 144, + 68, 144, 69, 144, -1, 79, 144, -1, 145, -1, + 56, 144, -1, 88, 134, 87, -1, 88, 87, -1, + 151, -1, 155, -1, 153, -1, 152, -1, 154, -1, + 139, -1, 152, 5, 134, 6, -1, 152, 3, 134, + 14, 4, -1, 18, -1, 150, -1, 150, 88, 87, + -1, 150, 88, 134, 87, -1, 55, 15, 147, -1, + 41, -1, 41, 144, -1, 65, 135, -1, 46, -1, + 46, 92, -1, 46, 144, -1, 59, -1, 59, 144, + -1, 22, -1, 22, 144, -1, 43, -1, 43, 88, + 87, -1, 21, -1, 44, 88, 87, -1, 44, 88, + 134, 87, -1, 19, 88, 135, 87, -1, 15, -1, + 136, -1, 57, 146, 129, -1, 57, 146, -1, 88, + 134, 87, -1, 88, 87, -1, 151, -1, 153, -1, + 152, -1, -1, 135, -1, -1, 134, -1, 134, 66, + -1, 151, -1, 13, 156, -1, 9, 156, -1, 10, + 156, -1, 11, 156, -1, 52, 156, -1, 12, 156, + -1, 15, -1, 151, -1, 92, -1, 20, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 131, 131, 137, 147, 151, 155, 161, 171, 175, - 179, 180, 187, 196, 199, 200, 202, 204, 221, 240, - 242, 244, 248, 252, 256, 260, 269, 270, 274, 285, - 293, 304, 307, 313, 314, 321, 334, 346, 357, 367, - 377, 413, 421, 431, 437, 438, 443, 446, 450, 455, - 459, 463, 469, 478, 482, 484, 486, 488, 490, 495, - 499, 505, 518, 519, 523, 535, 556, 562, 567, 572, - 582, 583, 588, 589, 593, 603, 607, 617, 618, 627, - 640, 639, 656, 660, 664, 668, 672, 682, 690, 694, - 699, 706, 715, 721, 727, 735, 739, 746, 745, 756, - 757, 761, 770, 775, 783, 790, 797, 807, 816, 823, - 832, 839, 845, 852, 862, 866, 870, 876, 880, 884, - 888, 892, 896, 900, 912, 916, 920, 924, 934, 938, - 945, 949, 953, 958, 963, 968, 977, 982, 987, 993, - 999, 1010, 1014, 1018, 1030, 1043, 1051, 1063, 1064, 1065, - 1066, 1067, 1072, 1076, 1078, 1082, 1087, 1092, 1094, 1096, - 1098, 1100, 1102, 1104, 1113, 1124, 1126, 1128, 1133, 1146, - 1151, 1156, 1160, 1164, 1168, 1172, 1176, 1178, 1180, 1182, - 1185, 1189, 1195, 1198, 1207, 1213, 1218, 1219, 1223, 1231, - 1238, 1243, 1248, 1250, 1252, 1257, 1259, 1264, 1265, 1267, - 1282, 1286, 1292, 1298, 1304, 1310, 1316, 1323, 1325, 1327, - 1330 + 0, 133, 133, 139, 149, 153, 157, 163, 173, 177, + 181, 182, 189, 198, 201, 202, 204, 206, 223, 242, + 244, 246, 250, 254, 258, 262, 271, 272, 276, 287, + 295, 306, 309, 315, 316, 323, 336, 348, 359, 369, + 379, 415, 423, 433, 439, 440, 445, 448, 452, 457, + 461, 465, 471, 480, 484, 486, 488, 490, 492, 497, + 501, 507, 520, 521, 525, 537, 558, 562, 568, 573, + 578, 588, 589, 594, 595, 599, 609, 613, 623, 624, + 633, 646, 645, 662, 666, 670, 674, 678, 688, 696, + 700, 705, 712, 721, 727, 733, 741, 745, 752, 751, + 762, 763, 767, 776, 781, 789, 796, 803, 813, 822, + 829, 838, 845, 851, 858, 868, 872, 876, 882, 886, + 890, 894, 898, 902, 906, 918, 922, 926, 930, 940, + 944, 951, 955, 959, 964, 969, 974, 983, 988, 993, + 999, 1005, 1016, 1020, 1024, 1036, 1049, 1057, 1069, 1070, + 1071, 1072, 1073, 1078, 1082, 1084, 1088, 1093, 1098, 1100, + 1102, 1104, 1106, 1108, 1110, 1119, 1130, 1132, 1134, 1139, + 1152, 1157, 1162, 1166, 1170, 1174, 1178, 1182, 1184, 1186, + 1188, 1191, 1195, 1201, 1204, 1213, 1219, 1224, 1225, 1229, + 1237, 1244, 1249, 1254, 1256, 1258, 1263, 1265, 1270, 1271, + 1273, 1288, 1292, 1298, 1304, 1310, 1316, 1322, 1329, 1331, + 1333, 1336 }; #endif @@ -213,12 +213,13 @@ static const char *const yytname[] = "mremember", "savescope", "lineseq", "line", "sideff", "else", "cond", "case", "cont", "loop", "switch", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "miexpr", "label", "decl", "peg", "format", - "formname", "mysubrout", "subrout", "startsub", "startanonsub", - "startformsub", "subname", "proto", "subattrlist", "myattrlist", - "subbody", "package", "use", "@1", "expr", "argexpr", "listop", "@2", - "method", "subscripted", "termbinop", "termunop", "anonymous", "termdo", - "term", "myattrterm", "myterm", "listexpr", "listexprcom", "my_scalar", - "amper", "scalar", "ary", "hsh", "arylen", "star", "indirob", 0 + "formname", "mysubrout", "subrout", "remempad", "startsub", + "startanonsub", "startformsub", "subname", "proto", "subattrlist", + "myattrlist", "subbody", "package", "use", "@1", "expr", "argexpr", + "listop", "@2", "method", "subscripted", "termbinop", "termunop", + "anonymous", "termdo", "term", "myattrterm", "myterm", "listexpr", + "listexprcom", "my_scalar", "amper", "scalar", "ary", "hsh", "arylen", + "star", "indirob", 0 }; #endif @@ -249,21 +250,21 @@ static const yytype_uint8 yyr1[] = 106, 106, 107, 108, 109, 109, 110, 110, 111, 112, 113, 114, 115, 115, 116, 116, 116, 116, 116, 116, 117, 118, 119, 119, 120, 121, 122, 123, 124, 125, - 126, 126, 127, 127, 127, 128, 128, 129, 129, 130, - 132, 131, 133, 133, 133, 133, 134, 134, 134, 135, - 135, 135, 135, 135, 135, 135, 135, 136, 135, 137, - 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, - 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, - 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, - 145, 145, 145, 145, 145, 146, 146, 147, 147, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 155, 155, - 155 + 126, 127, 127, 128, 128, 128, 129, 129, 130, 130, + 131, 133, 132, 134, 134, 134, 134, 135, 135, 135, + 136, 136, 136, 136, 136, 136, 136, 136, 137, 136, + 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, + 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, + 142, 142, 143, 143, 143, 143, 143, 143, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, + 145, 146, 146, 146, 146, 146, 147, 147, 148, 148, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 156, + 156, 156 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -275,22 +276,22 @@ static const yytype_uint8 yyr2[] = 7, 6, 2, 0, 2, 9, 9, 10, 9, 8, 12, 3, 8, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 1, 0, 6, 6, 0, 0, 0, 1, - 0, 1, 0, 2, 1, 2, 1, 1, 1, 3, - 0, 7, 3, 3, 3, 1, 2, 3, 1, 3, - 5, 6, 3, 3, 5, 2, 4, 0, 5, 1, - 1, 5, 4, 5, 4, 5, 6, 5, 4, 5, - 4, 3, 6, 5, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 4, 3, - 5, 2, 2, 4, 5, 4, 5, 1, 1, 1, - 1, 5, 2, 1, 2, 3, 2, 1, 1, 1, - 1, 1, 1, 4, 5, 1, 1, 3, 4, 3, - 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, - 1, 3, 1, 3, 4, 4, 1, 1, 3, 2, - 3, 2, 1, 1, 1, 0, 1, 0, 1, 2, - 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1 + 1, 5, 1, 0, 7, 7, 0, 0, 0, 0, + 1, 0, 1, 0, 2, 1, 2, 1, 1, 1, + 3, 0, 8, 3, 3, 3, 1, 2, 3, 1, + 3, 5, 6, 3, 3, 5, 2, 4, 0, 6, + 1, 1, 5, 4, 5, 4, 5, 6, 5, 4, + 5, 4, 3, 6, 5, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, + 3, 6, 2, 2, 4, 5, 4, 5, 1, 1, + 1, 1, 5, 2, 1, 2, 3, 2, 1, 1, + 1, 1, 1, 1, 4, 5, 1, 1, 3, 4, + 3, 1, 2, 2, 1, 2, 2, 1, 2, 1, + 2, 1, 3, 1, 3, 4, 4, 1, 1, 3, + 2, 3, 2, 1, 1, 1, 0, 1, 0, 1, + 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, + 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -298,434 +299,453 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 6, 0, 10, 1, 9, 68, 66, 0, 66, 66, - 60, 52, 11, 59, 54, 56, 55, 57, 58, 63, - 0, 0, 80, 0, 53, 12, 14, 15, 0, 62, - 0, 69, 70, 79, 0, 70, 19, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 186, 0, 0, - 165, 0, 182, 178, 67, 67, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 180, 0, 0, 173, 195, - 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, - 0, 0, 0, 0, 33, 0, 13, 16, 20, 85, - 187, 162, 147, 148, 149, 150, 88, 153, 166, 157, - 160, 159, 161, 158, 61, 71, 72, 0, 72, 10, - 137, 0, 128, 129, 207, 210, 209, 208, 202, 203, - 204, 206, 201, 195, 0, 0, 179, 0, 70, 4, - 4, 4, 4, 4, 4, 0, 4, 4, 32, 171, - 0, 0, 197, 174, 175, 207, 196, 95, 208, 0, - 205, 186, 142, 141, 157, 0, 0, 195, 154, 0, - 189, 192, 194, 193, 177, 172, 130, 131, 152, 135, - 134, 156, 0, 0, 41, 18, 0, 0, 0, 0, - 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, + 6, 0, 10, 1, 9, 66, 66, 0, 66, 66, + 60, 52, 11, 59, 54, 56, 55, 57, 58, 69, + 67, 0, 67, 67, 53, 12, 14, 15, 0, 63, + 0, 80, 81, 0, 19, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 187, 0, 0, 166, 0, + 183, 179, 66, 66, 0, 0, 0, 0, 0, 0, + 0, 0, 171, 181, 0, 0, 174, 196, 0, 0, + 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, + 0, 0, 33, 0, 13, 16, 20, 86, 188, 163, + 148, 149, 150, 151, 89, 154, 167, 158, 161, 160, + 162, 159, 62, 0, 70, 71, 0, 71, 10, 138, + 0, 129, 130, 208, 211, 210, 209, 203, 204, 205, + 207, 202, 196, 0, 0, 180, 68, 68, 4, 4, + 4, 4, 4, 4, 0, 4, 4, 32, 172, 0, + 0, 198, 175, 176, 208, 197, 96, 209, 0, 206, + 187, 143, 142, 158, 0, 0, 196, 155, 0, 190, + 193, 195, 194, 178, 173, 131, 132, 153, 136, 135, + 157, 0, 0, 41, 18, 0, 0, 0, 0, 0, + 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 133, 132, 0, 0, 0, 0, 0, - 0, 0, 74, 0, 195, 0, 9, 136, 93, 197, - 0, 97, 72, 46, 0, 0, 0, 0, 0, 4, - 5, 0, 181, 183, 0, 198, 0, 0, 89, 0, - 0, 139, 0, 169, 191, 0, 76, 188, 0, 155, - 34, 23, 24, 48, 21, 22, 25, 84, 83, 82, - 87, 0, 0, 111, 0, 123, 119, 120, 116, 117, - 114, 0, 126, 125, 124, 122, 121, 118, 127, 115, - 0, 0, 99, 0, 92, 100, 167, 0, 0, 0, - 0, 0, 0, 73, 78, 77, 65, 0, 64, 3, - 0, 185, 195, 0, 0, 47, 0, 0, 49, 51, - 0, 0, 200, 45, 50, 0, 0, 20, 0, 0, - 0, 184, 199, 96, 0, 143, 0, 145, 0, 138, - 190, 75, 0, 0, 0, 104, 110, 0, 0, 0, - 108, 0, 197, 168, 0, 102, 0, 163, 0, 81, - 94, 98, 140, 43, 43, 0, 0, 0, 0, 46, - 0, 0, 0, 90, 144, 146, 113, 0, 107, 151, - 0, 103, 109, 0, 105, 164, 101, 0, 0, 8, - 26, 26, 0, 33, 0, 0, 0, 31, 112, 106, - 91, 33, 33, 10, 0, 0, 29, 30, 0, 39, - 43, 33, 42, 35, 36, 9, 27, 0, 33, 0, - 38, 7, 0, 37, 0, 0, 0, 26, 40, 28 + 0, 0, 134, 133, 0, 0, 0, 0, 0, 0, + 0, 61, 72, 73, 0, 73, 9, 137, 94, 198, + 0, 0, 71, 46, 0, 0, 0, 0, 0, 4, + 5, 0, 182, 184, 0, 199, 0, 0, 90, 0, + 0, 140, 0, 170, 192, 0, 77, 189, 0, 156, + 34, 23, 24, 48, 21, 22, 25, 85, 84, 83, + 88, 0, 0, 112, 0, 124, 120, 121, 117, 118, + 115, 0, 127, 126, 125, 123, 122, 119, 128, 116, + 0, 0, 100, 0, 93, 101, 168, 0, 0, 0, + 0, 0, 0, 75, 0, 196, 0, 3, 0, 186, + 98, 73, 0, 47, 0, 0, 49, 51, 0, 0, + 201, 45, 50, 0, 0, 20, 0, 0, 0, 185, + 200, 97, 0, 144, 0, 146, 0, 139, 191, 76, + 0, 0, 0, 105, 111, 0, 0, 0, 109, 0, + 198, 169, 0, 103, 0, 164, 0, 74, 79, 78, + 65, 0, 64, 95, 196, 0, 43, 43, 0, 0, + 0, 0, 46, 0, 0, 0, 91, 145, 147, 114, + 0, 108, 152, 0, 104, 110, 0, 106, 165, 102, + 82, 99, 141, 0, 0, 8, 26, 26, 0, 33, + 0, 0, 0, 31, 113, 107, 92, 33, 33, 10, + 0, 0, 29, 30, 0, 39, 43, 33, 42, 35, + 36, 9, 27, 0, 33, 0, 38, 7, 0, 37, + 0, 0, 0, 26, 40, 28 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 116, 109, 319, 2, 380, 393, 11, 4, - 25, 313, 396, 86, 87, 174, 26, 27, 377, 314, - 304, 252, 307, 316, 310, 28, 12, 13, 14, 30, - 15, 16, 20, 127, 19, 32, 106, 213, 247, 296, - 17, 18, 34, 308, 89, 90, 302, 284, 91, 92, - 93, 94, 95, 96, 97, 160, 147, 236, 311, 98, - 99, 100, 101, 102, 103, 118 + -1, 1, 115, 108, 317, 2, 386, 399, 11, 4, + 25, 311, 402, 84, 85, 173, 26, 27, 383, 312, + 302, 252, 305, 314, 308, 28, 12, 13, 14, 103, + 15, 16, 19, 30, 221, 29, 105, 213, 294, 247, + 350, 17, 18, 106, 306, 87, 88, 354, 284, 89, + 90, 91, 92, 93, 94, 95, 159, 146, 236, 309, + 96, 97, 98, 99, 100, 101, 117 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -370 +#define YYPACT_NINF -379 static const yytype_int16 yypact[] = { - -370, 30, -370, -370, 21, -370, -370, 36, -370, -370, - -370, 42, -370, -370, -370, -370, -370, -370, -370, 59, - 75, 22, -370, 75, -370, -370, -370, -370, 352, -370, - 86, -370, 80, -370, 96, 80, -370, -370, 914, 1750, - 1750, 336, 336, 336, 336, 336, -370, -370, 336, 336, - -370, 28, -370, 1750, -370, -370, 40, 55, 78, 89, - 47, 98, 102, 86, 1750, 106, 109, 111, 686, 602, - 336, 770, 996, 103, 1750, 76, 1750, 1750, 1750, 1750, - 1750, 1750, 1750, 1078, 129, 128, -370, -370, 139, 126, - -370, 4, -370, -370, -370, -370, 1894, -370, 117, 54, - 79, -370, -370, 203, -370, -370, 147, 199, 147, -370, - -370, 77, -48, -48, -370, -370, -370, -370, -370, -370, - -370, -370, -370, 1750, 127, 1750, 337, 86, 80, -370, - -370, -370, -370, -370, -370, 131, -370, -370, -370, 1894, - 160, 1162, 602, -370, 337, 1810, 126, -370, 831, 1750, - -370, 157, -370, 337, 12, 246, 240, 1750, 337, 1246, - 191, -370, -370, -370, 337, 126, -48, -48, -48, 20, - 20, 251, 211, 86, -370, -370, 1750, 1750, 1750, 1750, - 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1330, 1750, 1750, - 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, - 1750, 1750, 1750, -370, -370, 158, 1414, 1750, 1750, 1750, - 1750, 1750, 250, 15, 1750, 15, 35, -370, -370, 1750, - -46, -370, 147, 1750, 1750, 1750, 1750, 258, 434, -370, - -370, 1750, -370, -370, 271, 249, 185, 1750, 126, 1498, - 1582, -370, 272, -370, -370, 338, 263, -370, 1750, 284, - -370, 74, -370, 74, 74, 74, 74, 232, 232, -370, - 1894, 244, 82, -370, 420, 1978, 802, 671, 718, 464, - 1894, 1852, 422, 422, 503, 588, 757, 382, -48, -48, - 1750, 1750, -370, 1666, 230, -370, -370, 564, 266, 154, - 274, 198, 280, -370, -370, -370, -370, 306, -370, -370, - 238, -370, 1750, 86, 245, 74, 253, 254, 74, -370, - 259, 239, -370, -370, -370, 265, 340, 260, 1750, 1750, - 285, -370, -370, -370, 578, -370, 613, -370, 648, -370, - -370, -370, 202, 1750, 372, -370, -370, 1750, 286, 207, - -370, 661, 1750, -370, 373, -370, 376, -370, 390, -370, - -370, -370, -370, -370, -370, 383, 383, 1750, 383, 1750, - 316, 323, 383, -370, -370, -370, -370, 220, -370, 1936, - 410, -370, -370, 328, -370, -370, -370, 383, 383, -370, - -12, -12, 329, 129, 407, 383, 383, -370, -370, -370, - -370, 129, 129, -370, 383, 334, -370, -370, 383, -370, - -370, 129, -370, -370, -370, 104, -370, 1750, 129, 516, - -370, -370, 339, -370, 341, 383, 383, -12, -370, -370 + -379, 26, -379, -379, 39, -379, -379, 51, -379, -379, + -379, 23, -379, -379, -379, -379, -379, -379, -379, -379, + -379, 56, -379, -379, -379, -379, -379, -379, 314, 73, + 90, -379, -379, 90, -379, -379, 876, 1712, 1712, 120, + 120, 120, 120, 120, -379, -379, 120, 120, -379, 13, + -379, 1712, -379, -379, 22, 27, 48, 49, 12, 58, + 95, 106, 1712, 104, 105, 115, 648, 564, 120, 732, + 958, 112, 1712, 45, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1040, 163, 209, -379, -379, 956, 158, -379, 19, + -379, -379, -379, -379, 1856, -379, 159, 10, 68, -379, + -379, 253, -379, 106, -379, 250, 256, 250, -379, -379, + -2, 205, 205, -379, -379, -379, -379, -379, -379, -379, + -379, -379, 1712, 186, 1712, 427, -379, -379, -379, -379, + -379, -379, -379, -379, 187, -379, -379, -379, 1856, 189, + 1124, 564, -379, 427, 1772, 158, -379, 793, 1712, -379, + 190, -379, 427, 38, 297, 21, 1712, 427, 1208, 230, + -379, -379, -379, 427, 158, 205, 205, 205, 86, 86, + 300, 221, 106, -379, -379, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1292, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, -379, -379, 11, 1376, 1712, 1712, 1712, 1712, + 1712, -379, -379, 242, 291, 242, 113, -379, -379, 1712, + -59, 106, 250, 1712, 1712, 1712, 1712, 298, 396, -379, + -379, 1712, -379, -379, 358, 144, 222, 1712, 158, 1460, + 1544, -379, 312, -379, -379, 367, 321, -379, 1712, 313, + -379, 111, -379, 111, 111, 111, 111, 276, 276, -379, + 1856, 151, 32, -379, 464, 1940, 861, 719, 302, 680, + 1856, 1814, 466, 466, 551, 634, 764, 384, 205, 205, + 1712, 1712, -379, 1628, 254, -379, -379, 526, 202, 81, + 232, 126, 235, 325, 20, 1712, 20, -379, 233, -379, + -379, 242, 275, 111, 285, 288, 111, -379, 289, 292, + -379, -379, -379, 295, 349, 395, 1712, 1712, 299, -379, + -379, -379, 610, -379, 624, -379, 659, -379, -379, -379, + 164, 1712, 385, -379, -379, 1712, 286, 195, -379, 765, + 1712, -379, 386, -379, 390, -379, 391, -379, -379, -379, + -379, 382, -379, -379, 1712, 106, -379, -379, 397, 397, + 1712, 397, 1712, 329, 337, 397, -379, -379, -379, -379, + 199, -379, 1898, 429, -379, -379, 351, -379, -379, -379, + -379, -379, -379, 397, 397, -379, -16, -16, 357, 163, + 422, 397, 397, -379, -379, -379, -379, 163, 163, -379, + 397, 359, -379, -379, 397, -379, -379, 163, -379, -379, + -379, 193, -379, 1712, 163, 478, -379, -379, 369, -379, + 375, 397, 397, -16, -379, -379 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -370, -370, -26, -61, -370, -370, -99, -370, -370, -108, - -370, 396, -369, -370, -370, -82, -370, -370, -338, -370, - 68, -51, -223, 25, -370, -370, -370, -370, -370, -370, - -370, -370, 69, 399, -370, 415, -21, -95, -370, 247, - -370, -370, -370, -28, -58, -370, -370, -370, -370, -370, - -370, -370, -370, 41, -370, -370, -117, -216, -370, -370, - -17, 384, 385, -370, -370, 179 + -379, -379, -17, 31, -379, -379, -111, -379, -379, -107, + -379, 418, -378, -379, -379, -33, -379, -379, -317, -379, + 101, -40, -226, 53, -379, -379, -379, -379, -379, -379, + -379, -379, 261, 28, 342, -379, 431, -97, -209, -379, + 175, -379, -379, -379, -28, -50, -379, -379, -379, -379, + -379, -379, -379, -379, 42, -379, -379, -110, -216, -379, + -379, -10, 399, 403, -379, -379, 35 }; /* 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 -187 +#define YYTABLE_NINF -188 static const yytype_int16 yytable[] = { - 88, 216, 84, 300, 104, 315, 218, 185, 320, 186, - 111, 146, 397, 215, 108, 207, 378, 208, 37, 165, - 184, -2, 394, 395, 117, 117, 117, 117, 117, 294, - 3, 117, 117, 202, 203, 204, 33, 138, 205, 299, - 243, 301, 143, 135, 156, 152, 5, 6, 419, 7, - 8, 21, 148, 117, 154, 172, 41, 207, 161, 208, - 5, 6, 409, 7, 8, 146, 24, 220, 223, 224, - 225, 226, 227, 228, 29, 230, 231, 22, 23, 9, - 112, 113, 209, 217, 210, 41, 42, 43, 335, 37, - 31, 238, 187, 9, 126, 360, 361, 297, 105, 146, - 240, 221, -187, -187, 133, 139, 205, 222, 411, 144, - 10, 107, 153, 234, 235, 158, 125, 164, 157, 166, - 167, 168, 169, 170, 10, 148, 373, 303, 129, 5, - 6, 245, 7, 8, 382, 134, 181, 182, 183, 181, - 182, 183, 175, 130, 181, 182, 183, 250, 251, 253, - 254, 255, 256, 257, 258, 259, 146, 261, 262, 264, - 345, 280, 9, 281, 159, 173, 131, 41, 318, 176, - 177, 178, 179, 306, 282, 309, 180, 132, 287, 288, - 289, 290, 291, 292, 412, 351, 136, 295, 285, 295, - 137, 235, 184, 10, 140, 305, 253, 141, 253, 142, - 317, 181, 182, 183, 347, 206, 211, 212, 366, 324, - 312, 326, 328, 371, 214, 219, 181, 182, 183, 229, - 332, 119, 120, 121, 122, 260, 388, 123, 124, 265, + 86, 216, 313, 298, 217, 318, 296, 183, 110, 403, + 215, 82, 218, 206, 280, 207, 281, 145, 400, 401, + 39, 39, 184, 35, 185, 164, 3, 282, 299, 116, + 116, 116, 116, 116, 348, 242, 116, 116, 333, -2, + 384, 206, 155, 207, 137, 425, 243, 24, 134, 142, + 32, 33, 151, 171, 39, 40, 41, 147, 116, 153, + 180, 181, 182, 160, 5, 6, 21, 7, 8, 132, + 31, 208, 145, 209, 220, 118, 119, 120, 121, 111, + 112, 122, 123, 180, 181, 182, 211, 343, 102, 415, + 363, 364, 355, 125, 180, 181, 182, 9, 238, 283, + 133, 124, 148, 149, 138, 104, 145, 186, 143, 35, + 128, 152, 234, 235, 157, 129, 163, 297, 165, 166, + 167, 168, 169, 35, 376, 301, 240, 156, 10, 39, + 245, 147, 345, 158, 388, 113, 130, 131, 5, 6, + 114, 7, 8, 180, 181, 182, 135, 251, 253, 254, + 255, 256, 257, 258, 259, 250, 261, 262, 264, 223, + 224, 225, 226, 227, 228, 332, 230, 231, -188, -188, + 369, 9, 204, 180, 181, 182, 237, 287, 288, 289, + 290, 291, 292, 136, 304, 351, 307, 418, 180, 181, + 182, 235, 139, 140, 285, 303, 253, 417, 253, 172, + 315, 374, 10, 141, 300, 394, 180, 181, 182, 322, + 320, 324, 326, 180, 181, 182, 342, 310, 5, 6, + 330, 7, 8, 174, 183, 260, 180, 181, 182, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 146, 239, 283, 232, 149, 150, - 241, 246, 338, 339, 242, 341, 248, 381, 334, 383, - 181, 182, 183, 387, 181, 182, 183, 41, 293, 181, - 182, 183, 323, 181, 182, 183, 329, 352, 391, 392, - 344, 331, 181, 182, 183, 405, 401, 402, 346, 333, - 176, 177, 178, 179, 348, 406, 183, 180, 249, 408, - 370, 399, 181, 182, 183, 367, 181, 182, 183, 403, - 404, 181, 182, 183, 235, 322, 417, 418, 342, 410, - 349, 237, 181, 182, 183, 350, 413, 357, 181, 182, - 183, 305, 353, 181, 182, 183, 181, 182, 183, 37, - 354, 355, 181, 182, 183, 41, 356, -49, 181, 182, - 183, 114, 358, 36, 359, 37, 115, 38, 321, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 362, 52, 53, 54, 368, 374, 369, 55, - 375, 88, 56, 57, 58, 59, 379, 191, 192, 60, - 61, 62, 63, 64, 376, 65, 66, 67, 68, 69, - 181, 182, 183, 385, 70, 71, 72, 73, 74, 75, - 386, 76, 200, 201, 389, 390, 398, 77, 202, 203, - 204, 400, 407, 205, 85, 330, 415, 384, 416, 78, - 79, 80, 191, 192, 414, 36, 81, 82, 35, 38, - 83, 39, 40, 41, 42, 43, 44, 45, -44, 47, - 48, 49, 50, 51, 128, 52, 53, 54, 201, 162, - 163, 55, 298, 202, 203, 204, 0, 0, 205, 0, - 189, 190, 191, 192, 0, 64, 0, 65, 66, 67, - 68, 69, 181, 182, 183, 0, 70, 71, 72, 73, - 74, 75, 0, 76, 197, 198, 199, 200, 201, 77, - 0, 0, 0, 202, 203, 204, 0, 336, 205, 0, - 0, 78, 79, 80, 191, 0, 0, 36, 81, 82, - 0, 38, 83, 39, 40, 41, 42, 43, 44, 45, - 0, 47, 48, 49, 50, 51, 0, 52, 53, 54, - 201, 0, 0, 55, 0, 202, 203, 204, 0, 0, - 205, 189, 190, 191, 192, 0, 0, 64, 0, 65, - 66, 67, 68, 69, 0, 0, 0, 0, 70, 71, - 72, 73, 74, 75, 0, 76, 198, 199, 200, 201, - 0, 77, 0, 0, 202, 203, 204, 0, 0, 205, - 0, 0, 0, 78, 79, 80, 0, 0, 0, 0, - 81, 82, 0, -44, 83, 37, 0, 38, 0, 39, - 40, 41, 42, 43, 44, 45, 0, 145, 48, 49, - 50, 51, 115, 52, 53, 54, 181, 182, 183, 55, - 0, 0, 0, 0, 0, 0, 189, 190, 191, 192, - 181, 182, 183, 64, 0, 65, 66, 67, 68, 69, - 0, 343, 0, 0, 70, 71, 72, 73, 74, 75, - 0, 76, 199, 200, 201, 363, 0, 77, 0, 202, - 203, 204, 0, 0, 205, 181, 182, 183, 0, 78, - 79, 80, 0, 0, 0, 0, 81, 82, 0, 37, - 83, 38, 0, 39, 40, 41, 42, 43, 44, 45, - 364, 47, 48, 49, 50, 51, 0, 52, 53, 54, - 181, 182, 183, 55, 0, 0, 0, 0, 0, 189, - -187, 191, 192, 181, 182, 183, 0, 64, 0, 65, - 66, 67, 68, 69, 0, 365, 0, 0, 70, 71, - 72, 73, 74, 75, 0, 76, 200, 201, 372, 0, - 0, 77, 202, 203, 204, 0, 0, 205, 0, 0, - 0, 0, 0, 78, 79, 80, 0, 0, 0, 0, - 81, 82, 0, 37, 83, 38, 0, 39, 40, 41, - 42, 43, 44, 45, 0, 151, 48, 49, 50, 51, - 0, 52, 53, 54, 201, 0, 0, 55, 0, 202, - 203, 204, 0, 0, 205, 189, 190, 191, 192, 0, - 0, 64, 0, 65, 66, 67, 68, 69, 0, 0, - 0, 0, 70, 71, 72, 73, 74, 75, 0, 76, - 0, 0, 200, 201, 207, 77, 208, -157, 202, 203, - 204, 0, 0, 205, 0, -157, 0, 78, 79, 80, - -187, 0, 191, 192, 81, 82, 0, 0, 83, 0, - 0, -157, -157, -157, -157, 0, 0, 0, -157, 0, - 0, 0, 0, -157, 0, 0, 0, 200, 201, -157, - -157, -157, -157, 202, 203, 204, 0, 0, 205, 0, - 0, 0, 0, -157, -157, -157, 0, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, 0, 0, - 0, 0, -157, -157, -157, 0, 0, -157, -157, 38, - 110, 39, 40, 41, 42, 43, 44, 45, 0, 47, - 48, 49, 50, 51, 0, 52, 53, 54, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64, 0, 65, 66, 67, - 68, 69, 0, 0, 0, 0, 70, 71, 72, 73, - 74, 75, 0, 76, 0, 0, 0, 0, 0, 77, + 276, 277, 278, 279, 381, 145, 344, 205, 387, 346, + 389, 9, 336, 337, 393, 339, 210, 180, 181, 182, + 316, 180, 181, 182, 180, 181, 182, 20, 212, 22, + 23, 214, 397, 398, 219, 229, 232, 349, 239, 349, + 407, 408, 10, 180, 181, 182, 201, 202, 203, 412, + 246, 204, 411, 414, 180, 181, 182, 180, 181, 182, + 373, 241, 293, 370, 145, 248, 295, 39, 249, 321, + 423, 424, 235, 126, 127, 34, 327, 35, 331, 36, + 353, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 303, 50, 51, 52, 382, 329, + 182, 53, 340, 347, 54, 55, 56, 57, 180, 181, + 182, 58, 59, 60, 61, 62, 405, 63, 64, 65, + 66, 67, 356, 362, 409, 410, 68, 69, 70, 71, + 72, 73, 357, 74, 416, 358, 359, 372, 200, 75, + 360, 419, 361, 201, 202, 203, 365, 86, 204, 371, + 377, 76, 77, 78, 378, 379, 380, 34, 79, 80, + 385, 36, 81, 37, 38, 39, 40, 41, 42, 43, + -44, 45, 46, 47, 48, 49, 391, 50, 51, 52, + 180, 181, 182, 53, 392, 175, 176, 177, 178, 180, + 181, 182, 179, 395, 190, 191, 406, 62, 396, 63, + 64, 65, 66, 67, 404, 319, 83, 413, 68, 69, + 70, 71, 72, 73, 328, 74, 421, 180, 181, 182, + 200, 75, 422, 390, 107, 201, 202, 203, 420, 222, + 204, 352, 161, 76, 77, 78, 162, 190, 191, 34, + 79, 80, -49, 36, 81, 37, 38, 39, 40, 41, + 42, 43, 0, 45, 46, 47, 48, 49, 0, 50, + 51, 52, 199, 200, 0, 53, 0, 0, 201, 202, + 203, 0, 0, 204, 188, 189, 190, 191, 0, 62, + 0, 63, 64, 65, 66, 67, 180, 181, 182, 0, + 68, 69, 70, 71, 72, 73, 0, 74, 196, 197, + 198, 199, 200, 75, 0, 0, 0, 201, 202, 203, + 0, 334, 204, 0, 0, 76, 77, 78, 0, 0, + 0, 0, 79, 80, 0, -44, 81, 35, 0, 36, + 0, 37, 38, 39, 40, 41, 42, 43, 0, 144, + 46, 47, 48, 49, 114, 50, 51, 52, 180, 181, + 182, 53, 0, 0, 0, 0, 0, 0, 0, 188, + 189, 190, 191, 0, 0, 62, 0, 63, 64, 65, + 66, 67, 0, 341, 0, 0, 68, 69, 70, 71, + 72, 73, 0, 74, 197, 198, 199, 200, 0, 75, + 0, 0, 201, 202, 203, 0, 0, 204, 0, 0, + 0, 76, 77, 78, 0, 0, 0, 0, 79, 80, + 0, 35, 81, 36, 0, 37, 38, 39, 40, 41, + 42, 43, 0, 45, 46, 47, 48, 49, 0, 50, + 51, 52, 180, 181, 182, 53, 0, 0, 0, 0, + 0, 0, 188, 189, 190, 191, 180, 181, 182, 62, + 0, 63, 64, 65, 66, 67, 0, 366, 0, 0, + 68, 69, 70, 71, 72, 73, 0, 74, 198, 199, + 200, 367, 0, 75, 0, 201, 202, 203, 0, 0, + 204, 180, 181, 182, 0, 76, 77, 78, 0, 0, + 190, 0, 79, 80, 0, 35, 81, 36, 0, 37, + 38, 39, 40, 41, 42, 43, 368, 150, 46, 47, + 48, 49, 0, 50, 51, 52, 200, 0, 0, 53, + 0, 201, 202, 203, 0, 0, 204, 188, -188, 190, + 191, 0, 0, 62, 0, 63, 64, 65, 66, 67, + 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, + 0, 74, 0, 0, 199, 200, 206, 75, 207, -158, + 201, 202, 203, 0, 0, 204, 0, -158, 0, 76, + 77, 78, 188, 189, 190, 191, 79, 80, 0, 0, + 81, 0, 0, -158, -158, -158, -158, 180, 181, 182, + -158, 0, 0, 0, 0, -158, 0, 0, 0, 199, + 200, -158, -158, -158, -158, 201, 202, 203, 0, 0, + 204, 0, 375, 0, 0, -158, -158, -158, 0, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + 0, 0, 0, 0, -158, -158, -158, 0, 0, -158, + -158, 36, 109, 37, 38, 39, 40, 41, 42, 43, + 0, 45, 46, 47, 48, 49, 0, 50, 51, 52, + 0, 0, 0, 53, 0, 0, 0, 0, 0, -188, + 0, 190, 191, 0, 0, 0, 0, 62, 0, 63, + 64, 65, 66, 67, 0, 0, 0, 0, 68, 69, + 70, 71, 72, 73, 0, 74, 199, 200, 0, 0, + 0, 75, 201, 202, 203, 0, 0, 204, 0, 0, + 0, 0, 0, 76, 77, 78, 0, 0, 0, 0, + 79, 80, 0, 36, 81, 37, 38, 39, 40, 41, + 42, 43, 154, 45, 46, 47, 48, 49, 0, 50, + 51, 52, 0, 0, 0, 53, 175, 176, 177, 178, + 0, 0, 0, 179, 0, 0, 0, 0, 0, 62, + 0, 63, 64, 65, 66, 67, 0, 0, 0, 0, + 68, 69, 70, 71, 72, 73, 0, 74, 180, 181, + 182, 0, 0, 75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 77, 78, 0, 0, + 0, 0, 79, 80, 0, 36, 81, 37, 38, 39, + 40, 41, 42, 43, 0, 45, 46, 47, 48, 49, + 0, 50, 51, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 78, 79, 80, 0, 0, 0, 0, 81, 82, - 0, 38, 83, 39, 40, 41, 42, 43, 44, 45, - 155, 47, 48, 49, 50, 51, 0, 52, 53, 54, - 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 64, 0, 65, - 66, 67, 68, 69, 0, 0, 0, 0, 70, 71, - 72, 73, 74, 75, 0, 76, 0, 0, 0, 0, - 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 78, 79, 80, 0, 0, 0, 0, - 81, 82, 0, 38, 83, 39, 40, 41, 42, 43, - 44, 45, 0, 47, 48, 49, 50, 51, 0, 52, - 53, 54, 0, 0, 0, 55, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, - 0, 65, 66, 67, 68, 69, 0, 0, 0, 0, - 70, 71, 72, 73, 74, 75, 0, 76, 0, 0, - 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 78, 79, 80, 0, 0, - 0, 0, 81, 82, 0, 171, 83, 38, 0, 39, - 40, 41, 42, 43, 44, 45, 0, 47, 48, 49, - 50, 51, 0, 52, 53, 54, 0, 0, 0, 55, + 0, 62, 0, 63, 64, 65, 66, 67, 0, 0, + 0, 0, 68, 69, 70, 71, 72, 73, 0, 74, + 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 76, 77, 78, + 0, 0, 0, 0, 79, 80, 0, 170, 81, 36, + 0, 37, 38, 39, 40, 41, 42, 43, 0, 45, + 46, 47, 48, 49, 0, 50, 51, 52, 0, 0, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 62, 0, 63, 64, 65, + 66, 67, 0, 0, 0, 0, 68, 69, 70, 71, + 72, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 64, 0, 65, 66, 67, 68, 69, - 0, 0, 0, 0, 70, 71, 72, 73, 74, 75, - 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, - 79, 80, 0, 0, 0, 0, 81, 82, 0, 233, - 83, 38, 0, 39, 40, 41, 42, 43, 44, 45, - 0, 47, 48, 49, 50, 51, 0, 52, 53, 54, - 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 64, 0, 65, - 66, 67, 68, 69, 0, 0, 0, 0, 70, 71, - 72, 73, 74, 75, 0, 76, 0, 0, 0, 0, - 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 78, 79, 80, 0, 0, 0, 0, - 81, 82, 0, 244, 83, 38, 0, 39, 40, 41, - 42, 43, 44, 45, 0, 47, 48, 49, 50, 51, - 0, 52, 53, 54, 0, 0, 0, 55, 0, 0, + 0, 76, 77, 78, 0, 0, 0, 0, 79, 80, + 0, 233, 81, 36, 0, 37, 38, 39, 40, 41, + 42, 43, 0, 45, 46, 47, 48, 49, 0, 50, + 51, 52, 0, 0, 0, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, + 0, 63, 64, 65, 66, 67, 0, 0, 0, 0, + 68, 69, 70, 71, 72, 73, 0, 74, 0, 0, + 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 77, 78, 0, 0, + 0, 0, 79, 80, 0, 244, 81, 36, 0, 37, + 38, 39, 40, 41, 42, 43, 0, 45, 46, 47, + 48, 49, 0, 50, 51, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 0, 65, 66, 67, 68, 69, 0, 0, - 0, 0, 70, 71, 72, 73, 74, 75, 0, 76, - 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 78, 79, 80, - 0, 0, 0, 0, 81, 82, 0, 263, 83, 38, - 0, 39, 40, 41, 42, 43, 44, 45, 0, 47, - 48, 49, 50, 51, 0, 52, 53, 54, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64, 0, 65, 66, 67, - 68, 69, 0, 0, 0, 0, 70, 71, 72, 73, - 74, 75, 0, 76, 0, 0, 0, 0, 0, 77, + 0, 0, 0, 62, 0, 63, 64, 65, 66, 67, + 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, + 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, + 77, 78, 0, 0, 0, 0, 79, 80, 0, 263, + 81, 36, 0, 37, 38, 39, 40, 41, 42, 43, + 0, 45, 46, 47, 48, 49, 0, 50, 51, 52, + 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, + 64, 65, 66, 67, 0, 0, 0, 0, 68, 69, + 70, 71, 72, 73, 0, 74, 0, 0, 0, 0, + 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 76, 77, 78, 0, 0, 0, 0, + 79, 80, 0, 286, 81, 36, 0, 37, 38, 39, + 40, 41, 42, 43, 0, 45, 46, 47, 48, 49, + 0, 50, 51, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 78, 79, 80, 0, 0, 0, 0, 81, 82, - 0, 286, 83, 38, 0, 39, 40, 41, 42, 43, - 44, 45, 0, 47, 48, 49, 50, 51, 0, 52, - 53, 54, 0, 0, 0, 55, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, - 0, 65, 66, 67, 68, 69, 0, 0, 0, 0, - 70, 71, 72, 73, 74, 75, 0, 76, 0, 0, - 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 78, 79, 80, 0, 0, - 0, 0, 81, 82, 0, 325, 83, 38, 0, 39, - 40, 41, 42, 43, 44, 45, 0, 47, 48, 49, - 50, 51, 0, 52, 53, 54, 0, 0, 0, 55, + 0, 62, 0, 63, 64, 65, 66, 67, 0, 0, + 0, 0, 68, 69, 70, 71, 72, 73, 0, 74, + 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 76, 77, 78, + 0, 0, 0, 0, 79, 80, 0, 323, 81, 36, + 0, 37, 38, 39, 40, 41, 42, 43, 0, 45, + 46, 47, 48, 49, 0, 50, 51, 52, 0, 0, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 62, 0, 63, 64, 65, + 66, 67, 0, 0, 0, 0, 68, 69, 70, 71, + 72, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 64, 0, 65, 66, 67, 68, 69, - 0, 0, 0, 0, 70, 71, 72, 73, 74, 75, - 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, - 79, 80, 0, 0, 0, 0, 81, 82, 0, 327, - 83, 38, 0, 39, 40, 41, 42, 43, 44, 45, - 0, 47, 48, 49, 50, 51, 0, 52, 53, 54, - 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 64, 0, 65, - 66, 67, 68, 69, 0, 0, 0, 0, 70, 71, - 72, 73, 74, 75, 0, 76, 0, 0, 0, 0, - 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 78, 79, 80, 0, 0, 0, 0, - 81, 82, 0, 340, 83, 38, 0, 39, 40, 41, - 42, 43, 44, 45, 0, 47, 48, 49, 50, 51, - 0, 52, 53, 54, 0, 0, 0, 55, 0, 0, + 0, 76, 77, 78, 0, 0, 0, 0, 79, 80, + 0, 325, 81, 36, 0, 37, 38, 39, 40, 41, + 42, 43, 0, 45, 46, 47, 48, 49, 0, 50, + 51, 52, 0, 0, 0, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, + 0, 63, 64, 65, 66, 67, 0, 0, 0, 0, + 68, 69, 70, 71, 72, 73, 0, 74, 0, 0, + 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 77, 78, 0, 0, + 0, 0, 79, 80, 0, 338, 81, 36, 0, 37, + 38, 39, 40, 41, 42, 43, 0, 45, 46, 47, + 48, 49, 0, 50, 51, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 0, 65, 66, 67, 68, 69, 0, 0, - 0, 0, 70, 71, 72, 73, 74, 75, 0, 76, - 0, 0, 0, 0, 0, 77, -186, 0, 0, 0, - 0, 0, 0, 0, -186, 0, 0, 78, 79, 80, - 0, 0, 0, 0, 81, 82, 0, 0, 83, 0, - -186, -186, -186, -186, 0, 0, 0, -186, 0, 0, - 0, 0, -186, 0, 0, 0, 0, 0, -186, -186, - -186, -186, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -186, -186, -186, 0, -186, -186, -186, -186, - -186, -186, -186, -186, -186, -186, -186, 0, 0, 0, - 0, -186, -186, -186, 188, 0, -186, -186, 0, 0, - 189, 190, 191, 192, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, - 194, 337, 195, 196, 197, 198, 199, 200, 201, 0, - 0, 0, 0, 202, 203, 204, 188, 0, 205, 0, - 0, 0, 189, 190, 191, 192, 0, 0, 0, 0, + 0, 0, 0, 62, 0, 63, 64, 65, 66, 67, + 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, + 0, 74, 0, 0, 0, 0, 0, 75, -187, 0, + 0, 0, 0, 0, 0, 0, -187, 0, 0, 76, + 77, 78, 0, 0, 0, 0, 79, 80, 0, 0, + 81, 0, -187, -187, -187, -187, 0, 0, 0, -187, + 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, + -187, -187, -187, -187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -187, -187, -187, 0, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, 0, + 0, 0, 0, -187, -187, -187, 187, 0, -187, -187, + 0, 0, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 193, 194, 0, 195, 196, 197, 198, 199, 200, - 201, 0, 0, 0, 0, 202, 203, 204, 188, 0, - 205, 0, 0, 0, 189, 190, 191, 192, 0, 0, + 0, 192, 193, 335, 194, 195, 196, 197, 198, 199, + 200, 0, 0, 0, 0, 201, 202, 203, 187, 0, + 204, 0, 0, 0, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 194, 0, 195, 196, 197, 198, - 199, 200, 201, 0, 0, 0, 0, 202, 203, 204, - -187, 0, 205, 0, 0, 0, 189, 190, 191, 192, + 0, 0, 0, 192, 193, 0, 194, 195, 196, 197, + 198, 199, 200, 0, 0, 0, 0, 201, 202, 203, + 187, 0, 204, 0, 0, 0, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 195, 196, - 197, 198, 199, 200, 201, 0, 0, 0, 0, 202, - 203, 204, 0, 0, 205 + 0, 0, 0, 0, 0, 0, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 0, 0, 0, 0, 201, + 202, 203, -188, 0, 204, 0, 0, 0, 188, 189, + 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 194, 195, 196, 197, 198, 199, 200, 0, 0, 0, + 0, 201, 202, 203, 0, 0, 204 }; static const yytype_int16 yycheck[] = { - 28, 109, 28, 219, 30, 228, 123, 3, 231, 5, - 38, 69, 381, 108, 35, 3, 354, 5, 3, 77, - 66, 0, 34, 35, 41, 42, 43, 44, 45, 14, - 0, 48, 49, 81, 82, 83, 14, 63, 86, 4, - 157, 87, 68, 60, 72, 71, 25, 26, 417, 28, - 29, 15, 69, 70, 71, 83, 9, 3, 75, 5, - 25, 26, 400, 28, 29, 123, 24, 125, 129, 130, - 131, 132, 133, 134, 15, 136, 137, 8, 9, 58, - 39, 40, 3, 6, 5, 9, 10, 11, 6, 3, - 15, 149, 88, 58, 53, 318, 319, 214, 18, 157, - 88, 127, 82, 83, 57, 64, 86, 128, 4, 68, - 89, 15, 71, 141, 142, 74, 88, 76, 15, 78, - 79, 80, 81, 82, 89, 142, 342, 222, 88, 25, - 26, 159, 28, 29, 357, 88, 62, 63, 64, 62, - 63, 64, 14, 88, 62, 63, 64, 173, 176, 177, - 178, 179, 180, 181, 182, 183, 214, 185, 186, 187, - 6, 3, 58, 5, 88, 36, 88, 9, 229, 30, - 31, 32, 33, 224, 16, 226, 37, 88, 206, 207, - 208, 209, 210, 211, 407, 302, 88, 213, 205, 215, - 88, 219, 66, 89, 88, 223, 224, 88, 226, 88, - 228, 62, 63, 64, 6, 88, 3, 60, 6, 237, - 227, 239, 240, 6, 15, 88, 62, 63, 64, 88, - 248, 42, 43, 44, 45, 184, 6, 48, 49, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 302, 88, 88, 87, 69, 70, - 4, 60, 280, 281, 14, 283, 5, 356, 14, 358, - 62, 63, 64, 362, 62, 63, 64, 9, 18, 62, - 63, 64, 87, 62, 63, 64, 4, 303, 377, 378, - 14, 18, 62, 63, 64, 393, 385, 386, 14, 5, - 30, 31, 32, 33, 14, 394, 64, 37, 87, 398, - 14, 383, 62, 63, 64, 333, 62, 63, 64, 391, - 392, 62, 63, 64, 342, 66, 415, 416, 88, 401, - 14, 142, 62, 63, 64, 87, 408, 88, 62, 63, - 64, 359, 87, 62, 63, 64, 62, 63, 64, 3, - 87, 87, 62, 63, 64, 9, 87, 87, 62, 63, - 64, 15, 87, 1, 14, 3, 20, 5, 87, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 87, 21, 22, 23, 4, 4, 337, 27, - 4, 409, 30, 31, 32, 33, 3, 50, 51, 37, - 38, 39, 40, 41, 4, 43, 44, 45, 46, 47, - 62, 63, 64, 87, 52, 53, 54, 55, 56, 57, - 87, 59, 75, 76, 4, 87, 87, 65, 81, 82, - 83, 14, 88, 86, 28, 87, 87, 359, 87, 77, - 78, 79, 50, 51, 409, 1, 84, 85, 23, 5, - 88, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 55, 21, 22, 23, 76, 75, - 75, 27, 215, 81, 82, 83, -1, -1, 86, -1, - 48, 49, 50, 51, -1, 41, -1, 43, 44, 45, - 46, 47, 62, 63, 64, -1, 52, 53, 54, 55, - 56, 57, -1, 59, 72, 73, 74, 75, 76, 65, - -1, -1, -1, 81, 82, 83, -1, 87, 86, -1, - -1, 77, 78, 79, 50, -1, -1, 1, 84, 85, - -1, 5, 88, 7, 8, 9, 10, 11, 12, 13, + 28, 108, 228, 219, 6, 231, 215, 66, 36, 387, + 107, 28, 122, 3, 3, 5, 5, 67, 34, 35, + 9, 9, 3, 3, 5, 75, 0, 16, 87, 39, + 40, 41, 42, 43, 14, 14, 46, 47, 6, 0, + 357, 3, 70, 5, 61, 423, 156, 24, 58, 66, + 22, 23, 69, 81, 9, 10, 11, 67, 68, 69, + 62, 63, 64, 73, 25, 26, 15, 28, 29, 57, + 14, 3, 122, 5, 124, 40, 41, 42, 43, 37, + 38, 46, 47, 62, 63, 64, 103, 6, 15, 406, + 316, 317, 301, 51, 62, 63, 64, 58, 148, 88, + 88, 88, 67, 68, 62, 15, 156, 88, 66, 3, + 88, 69, 140, 141, 72, 88, 74, 4, 76, 77, + 78, 79, 80, 3, 340, 222, 88, 15, 89, 9, + 158, 141, 6, 88, 360, 15, 88, 88, 25, 26, + 20, 28, 29, 62, 63, 64, 88, 175, 176, 177, + 178, 179, 180, 181, 182, 172, 184, 185, 186, 128, + 129, 130, 131, 132, 133, 14, 135, 136, 82, 83, + 6, 58, 86, 62, 63, 64, 141, 205, 206, 207, + 208, 209, 210, 88, 224, 295, 226, 413, 62, 63, + 64, 219, 88, 88, 204, 223, 224, 4, 226, 36, + 228, 6, 89, 88, 221, 6, 62, 63, 64, 237, + 66, 239, 240, 62, 63, 64, 14, 227, 25, 26, + 248, 28, 29, 14, 66, 183, 62, 63, 64, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 354, 295, 14, 88, 359, 14, + 361, 58, 280, 281, 365, 283, 3, 62, 63, 64, + 229, 62, 63, 64, 62, 63, 64, 6, 18, 8, + 9, 15, 383, 384, 88, 88, 87, 294, 88, 296, + 391, 392, 89, 62, 63, 64, 81, 82, 83, 400, + 60, 86, 399, 404, 62, 63, 64, 62, 63, 64, + 14, 4, 60, 331, 354, 5, 15, 9, 87, 87, + 421, 422, 340, 52, 53, 1, 4, 3, 5, 5, + 87, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 362, 21, 22, 23, 355, 18, + 64, 27, 88, 18, 30, 31, 32, 33, 62, 63, + 64, 37, 38, 39, 40, 41, 389, 43, 44, 45, + 46, 47, 87, 14, 397, 398, 52, 53, 54, 55, + 56, 57, 87, 59, 407, 87, 87, 335, 76, 65, + 88, 414, 87, 81, 82, 83, 87, 415, 86, 4, + 4, 77, 78, 79, 4, 4, 14, 1, 84, 85, + 3, 5, 88, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 87, 21, 22, 23, + 62, 63, 64, 27, 87, 30, 31, 32, 33, 62, + 63, 64, 37, 4, 50, 51, 14, 41, 87, 43, + 44, 45, 46, 47, 87, 87, 28, 88, 52, 53, + 54, 55, 56, 57, 87, 59, 87, 62, 63, 64, + 76, 65, 87, 362, 33, 81, 82, 83, 415, 127, + 86, 296, 73, 77, 78, 79, 73, 50, 51, 1, + 84, 85, 87, 5, 88, 7, 8, 9, 10, 11, + 12, 13, -1, 15, 16, 17, 18, 19, -1, 21, + 22, 23, 75, 76, -1, 27, -1, -1, 81, 82, + 83, -1, -1, 86, 48, 49, 50, 51, -1, 41, + -1, 43, 44, 45, 46, 47, 62, 63, 64, -1, + 52, 53, 54, 55, 56, 57, -1, 59, 72, 73, + 74, 75, 76, 65, -1, -1, -1, 81, 82, 83, + -1, 87, 86, -1, -1, 77, 78, 79, -1, -1, + -1, -1, 84, 85, -1, 87, 88, 3, -1, 5, + -1, 7, 8, 9, 10, 11, 12, 13, -1, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 62, 63, + 64, 27, -1, -1, -1, -1, -1, -1, -1, 48, + 49, 50, 51, -1, -1, 41, -1, 43, 44, 45, + 46, 47, -1, 87, -1, -1, 52, 53, 54, 55, + 56, 57, -1, 59, 73, 74, 75, 76, -1, 65, + -1, -1, 81, 82, 83, -1, -1, 86, -1, -1, + -1, 77, 78, 79, -1, -1, -1, -1, 84, 85, + -1, 3, 88, 5, -1, 7, 8, 9, 10, 11, + 12, 13, -1, 15, 16, 17, 18, 19, -1, 21, + 22, 23, 62, 63, 64, 27, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 62, 63, 64, 41, + -1, 43, 44, 45, 46, 47, -1, 87, -1, -1, + 52, 53, 54, 55, 56, 57, -1, 59, 74, 75, + 76, 87, -1, 65, -1, 81, 82, 83, -1, -1, + 86, 62, 63, 64, -1, 77, 78, 79, -1, -1, + 50, -1, 84, 85, -1, 3, 88, 5, -1, 7, + 8, 9, 10, 11, 12, 13, 87, 15, 16, 17, + 18, 19, -1, 21, 22, 23, 76, -1, -1, 27, + -1, 81, 82, 83, -1, -1, 86, 48, 49, 50, + 51, -1, -1, 41, -1, 43, 44, 45, 46, 47, + -1, -1, -1, -1, 52, 53, 54, 55, 56, 57, + -1, 59, -1, -1, 75, 76, 3, 65, 5, 6, + 81, 82, 83, -1, -1, 86, -1, 14, -1, 77, + 78, 79, 48, 49, 50, 51, 84, 85, -1, -1, + 88, -1, -1, 30, 31, 32, 33, 62, 63, 64, + 37, -1, -1, -1, -1, 42, -1, -1, -1, 75, + 76, 48, 49, 50, 51, 81, 82, 83, -1, -1, + 86, -1, 87, -1, -1, 62, 63, 64, -1, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + -1, -1, -1, -1, 81, 82, 83, -1, -1, 86, + 87, 5, 6, 7, 8, 9, 10, 11, 12, 13, -1, 15, 16, 17, 18, 19, -1, 21, 22, 23, - 76, -1, -1, 27, -1, 81, 82, 83, -1, -1, - 86, 48, 49, 50, 51, -1, -1, 41, -1, 43, + -1, -1, -1, 27, -1, -1, -1, -1, -1, 48, + -1, 50, 51, -1, -1, -1, -1, 41, -1, 43, 44, 45, 46, 47, -1, -1, -1, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 73, 74, 75, 76, - -1, 65, -1, -1, 81, 82, 83, -1, -1, 86, - -1, -1, -1, 77, 78, 79, -1, -1, -1, -1, - 84, 85, -1, 87, 88, 3, -1, 5, -1, 7, - 8, 9, 10, 11, 12, 13, -1, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 62, 63, 64, 27, - -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, - 62, 63, 64, 41, -1, 43, 44, 45, 46, 47, - -1, 87, -1, -1, 52, 53, 54, 55, 56, 57, - -1, 59, 74, 75, 76, 87, -1, 65, -1, 81, - 82, 83, -1, -1, 86, 62, 63, 64, -1, 77, - 78, 79, -1, -1, -1, -1, 84, 85, -1, 3, - 88, 5, -1, 7, 8, 9, 10, 11, 12, 13, - 87, 15, 16, 17, 18, 19, -1, 21, 22, 23, - 62, 63, 64, 27, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 62, 63, 64, -1, 41, -1, 43, - 44, 45, 46, 47, -1, 87, -1, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 75, 76, 87, -1, + 54, 55, 56, 57, -1, 59, 75, 76, -1, -1, -1, 65, 81, 82, 83, -1, -1, 86, -1, -1, -1, -1, -1, 77, 78, 79, -1, -1, -1, -1, - 84, 85, -1, 3, 88, 5, -1, 7, 8, 9, + 84, 85, -1, 5, 88, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, -1, 21, + 22, 23, -1, -1, -1, 27, 30, 31, 32, 33, + -1, -1, -1, 37, -1, -1, -1, -1, -1, 41, + -1, 43, 44, 45, 46, 47, -1, -1, -1, -1, + 52, 53, 54, 55, 56, 57, -1, 59, 62, 63, + 64, -1, -1, 65, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 77, 78, 79, -1, -1, + -1, -1, 84, 85, -1, 5, 88, 7, 8, 9, 10, 11, 12, 13, -1, 15, 16, 17, 18, 19, - -1, 21, 22, 23, 76, -1, -1, 27, -1, 81, - 82, 83, -1, -1, 86, 48, 49, 50, 51, -1, + -1, 21, 22, 23, -1, -1, -1, 27, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, 43, 44, 45, 46, 47, -1, -1, -1, -1, 52, 53, 54, 55, 56, 57, -1, 59, - -1, -1, 75, 76, 3, 65, 5, 6, 81, 82, - 83, -1, -1, 86, -1, 14, -1, 77, 78, 79, - 48, -1, 50, 51, 84, 85, -1, -1, 88, -1, - -1, 30, 31, 32, 33, -1, -1, -1, 37, -1, - -1, -1, -1, 42, -1, -1, -1, 75, 76, 48, - 49, 50, 51, 81, 82, 83, -1, -1, 86, -1, - -1, -1, -1, 62, 63, 64, -1, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, -1, -1, - -1, -1, 81, 82, 83, -1, -1, 86, 87, 5, - 6, 7, 8, 9, 10, 11, 12, 13, -1, 15, + -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, + -1, -1, -1, -1, 84, 85, -1, 87, 88, 5, + -1, 7, 8, 9, 10, 11, 12, 13, -1, 15, 16, 17, 18, 19, -1, 21, 22, 23, -1, -1, -1, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, 43, 44, 45, @@ -733,15 +753,7 @@ static const yytype_int16 yycheck[] = 56, 57, -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, -1, -1, -1, -1, 84, 85, - -1, 5, 88, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, - -1, -1, -1, 27, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 41, -1, 43, - 44, 45, 46, 47, -1, -1, -1, -1, 52, 53, - 54, 55, 56, 57, -1, 59, -1, -1, -1, -1, - -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 77, 78, 79, -1, -1, -1, -1, - 84, 85, -1, 5, 88, 7, 8, 9, 10, 11, + -1, 87, 88, 5, -1, 7, 8, 9, 10, 11, 12, 13, -1, 15, 16, 17, 18, 19, -1, 21, 22, 23, -1, -1, -1, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, @@ -797,49 +809,32 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, 43, 44, 45, 46, 47, -1, -1, -1, -1, 52, 53, 54, 55, 56, 57, - -1, 59, -1, -1, -1, -1, -1, 65, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, - 78, 79, -1, -1, -1, -1, 84, 85, -1, 87, - 88, 5, -1, 7, 8, 9, 10, 11, 12, 13, - -1, 15, 16, 17, 18, 19, -1, 21, 22, 23, - -1, -1, -1, 27, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 41, -1, 43, - 44, 45, 46, 47, -1, -1, -1, -1, 52, 53, - 54, 55, 56, 57, -1, 59, -1, -1, -1, -1, - -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 77, 78, 79, -1, -1, -1, -1, - 84, 85, -1, 87, 88, 5, -1, 7, 8, 9, - 10, 11, 12, 13, -1, 15, 16, 17, 18, 19, - -1, 21, 22, 23, -1, -1, -1, 27, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 41, -1, 43, 44, 45, 46, 47, -1, -1, - -1, -1, 52, 53, 54, 55, 56, 57, -1, 59, - -1, -1, -1, -1, -1, 65, 6, -1, -1, -1, - -1, -1, -1, -1, 14, -1, -1, 77, 78, 79, - -1, -1, -1, -1, 84, 85, -1, -1, 88, -1, - 30, 31, 32, 33, -1, -1, -1, 37, -1, -1, - -1, -1, 42, -1, -1, -1, -1, -1, 48, 49, - 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 62, 63, 64, -1, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, - -1, 81, 82, 83, 42, -1, 86, 87, -1, -1, + -1, 59, -1, -1, -1, -1, -1, 65, 6, -1, + -1, -1, -1, -1, -1, -1, 14, -1, -1, 77, + 78, 79, -1, -1, -1, -1, 84, 85, -1, -1, + 88, -1, 30, 31, 32, 33, -1, -1, -1, 37, + -1, -1, -1, -1, 42, -1, -1, -1, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, + -1, -1, -1, -1, 62, 63, 64, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, -1, - -1, -1, -1, 81, 82, 83, 42, -1, 86, -1, + -1, -1, -1, 81, 82, 83, 42, -1, 86, 87, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 67, 68, -1, 70, 71, 72, 73, 74, 75, + -1, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, 81, 82, 83, 42, -1, 86, -1, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 68, -1, 70, 71, 72, 73, + -1, -1, -1, 67, 68, -1, 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, 81, 82, 83, 42, -1, 86, -1, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + -1, -1, -1, -1, -1, -1, 68, -1, 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, 81, - 82, 83, -1, -1, 86 + 82, 83, 42, -1, 86, -1, -1, -1, 48, 49, + 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, + -1, 81, 82, 83, -1, -1, 86 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -847,51 +842,52 @@ static const yytype_int16 yycheck[] = static const yytype_uint8 yystos[] = { 0, 91, 95, 0, 99, 25, 26, 28, 29, 58, - 89, 98, 116, 117, 118, 120, 121, 130, 131, 124, - 122, 15, 122, 122, 24, 100, 106, 107, 115, 15, - 119, 15, 125, 14, 132, 125, 1, 3, 5, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 21, 22, 23, 27, 30, 31, 32, 33, - 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, - 52, 53, 54, 55, 56, 57, 59, 65, 77, 78, - 79, 84, 85, 88, 92, 101, 103, 104, 133, 134, - 135, 138, 139, 140, 141, 142, 143, 144, 149, 150, - 151, 152, 153, 154, 92, 18, 126, 15, 126, 93, - 6, 133, 143, 143, 15, 20, 92, 150, 155, 155, - 155, 155, 155, 155, 155, 88, 143, 123, 123, 88, - 88, 88, 88, 57, 88, 150, 88, 88, 92, 143, - 88, 88, 88, 92, 143, 15, 134, 146, 150, 155, - 155, 15, 92, 143, 150, 14, 133, 15, 143, 88, - 145, 150, 151, 152, 143, 134, 143, 143, 143, 143, - 143, 87, 133, 36, 105, 14, 30, 31, 32, 33, - 37, 62, 63, 64, 66, 3, 5, 88, 42, 48, - 49, 50, 51, 67, 68, 70, 71, 72, 73, 74, - 75, 76, 81, 82, 83, 86, 88, 3, 5, 3, - 5, 3, 60, 127, 15, 127, 99, 6, 146, 88, - 134, 92, 126, 93, 93, 93, 93, 93, 93, 88, - 93, 93, 87, 87, 133, 133, 147, 155, 134, 88, - 88, 4, 14, 146, 87, 133, 60, 128, 5, 87, - 92, 133, 111, 133, 133, 133, 133, 133, 133, 133, - 143, 133, 133, 87, 133, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 3, 5, 16, 88, 137, 150, 87, 133, 133, 133, - 133, 133, 133, 18, 14, 92, 129, 146, 129, 4, - 147, 87, 136, 127, 110, 133, 111, 112, 133, 111, - 114, 148, 150, 101, 109, 112, 113, 133, 93, 94, - 112, 87, 66, 87, 133, 87, 133, 87, 133, 4, - 87, 18, 133, 5, 14, 6, 87, 69, 133, 133, - 87, 133, 88, 87, 14, 6, 14, 6, 14, 14, - 87, 146, 92, 87, 87, 87, 87, 88, 87, 14, - 112, 112, 87, 87, 87, 87, 6, 133, 4, 143, - 14, 6, 87, 147, 4, 4, 4, 108, 108, 3, - 96, 96, 112, 96, 110, 87, 87, 96, 6, 4, - 87, 96, 96, 97, 34, 35, 102, 102, 87, 105, - 14, 96, 96, 105, 105, 99, 96, 88, 96, 108, - 105, 4, 112, 105, 113, 87, 87, 96, 96, 102 + 89, 98, 116, 117, 118, 120, 121, 131, 132, 122, + 122, 15, 122, 122, 24, 100, 106, 107, 115, 125, + 123, 14, 123, 123, 1, 3, 5, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 21, 22, 23, 27, 30, 31, 32, 33, 37, 38, + 39, 40, 41, 43, 44, 45, 46, 47, 52, 53, + 54, 55, 56, 57, 59, 65, 77, 78, 79, 84, + 85, 88, 92, 101, 103, 104, 134, 135, 136, 139, + 140, 141, 142, 143, 144, 145, 150, 151, 152, 153, + 154, 155, 15, 119, 15, 126, 133, 126, 93, 6, + 134, 144, 144, 15, 20, 92, 151, 156, 156, 156, + 156, 156, 156, 156, 88, 144, 122, 122, 88, 88, + 88, 88, 57, 88, 151, 88, 88, 92, 144, 88, + 88, 88, 92, 144, 15, 135, 147, 151, 156, 156, + 15, 92, 144, 151, 14, 134, 15, 144, 88, 146, + 151, 152, 153, 144, 135, 144, 144, 144, 144, 144, + 87, 134, 36, 105, 14, 30, 31, 32, 33, 37, + 62, 63, 64, 66, 3, 5, 88, 42, 48, 49, + 50, 51, 67, 68, 70, 71, 72, 73, 74, 75, + 76, 81, 82, 83, 86, 88, 3, 5, 3, 5, + 3, 92, 18, 127, 15, 127, 99, 6, 147, 88, + 135, 124, 124, 93, 93, 93, 93, 93, 93, 88, + 93, 93, 87, 87, 134, 134, 148, 156, 135, 88, + 88, 4, 14, 147, 87, 134, 60, 129, 5, 87, + 92, 134, 111, 134, 134, 134, 134, 134, 134, 134, + 144, 134, 134, 87, 134, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 3, 5, 16, 88, 138, 151, 87, 134, 134, 134, + 134, 134, 134, 60, 128, 15, 128, 4, 148, 87, + 92, 127, 110, 134, 111, 112, 134, 111, 114, 149, + 151, 101, 109, 112, 113, 134, 93, 94, 112, 87, + 66, 87, 134, 87, 134, 87, 134, 4, 87, 18, + 134, 5, 14, 6, 87, 69, 134, 134, 87, 134, + 88, 87, 14, 6, 14, 6, 14, 18, 14, 92, + 130, 147, 130, 87, 137, 128, 87, 87, 87, 87, + 88, 87, 14, 112, 112, 87, 87, 87, 87, 6, + 134, 4, 144, 14, 6, 87, 148, 4, 4, 4, + 14, 147, 92, 108, 108, 3, 96, 96, 112, 96, + 110, 87, 87, 96, 6, 4, 87, 96, 96, 97, + 34, 35, 102, 102, 87, 105, 14, 96, 96, 105, + 105, 99, 96, 88, 96, 108, 105, 4, 112, 105, + 113, 87, 87, 96, 96, 102 }; typedef enum { - toketype_i_tkval, toketype_ival, toketype_opval, toketype_p_tkval + toketype_i_tkval, toketype_ival, toketype_opval, toketype_p_tkval, toketype_padval } toketypes; /* type of each token/terminal */ @@ -914,10 +910,11 @@ static const toketypes yy_type_tab[] = toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_p_tkval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, - toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_ival, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_padval, toketype_ival, + toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, + toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval }; diff --git a/perly.y b/perly.y index af62341..ad0e604 100644 --- a/perly.y +++ b/perly.y @@ -48,6 +48,7 @@ char *pval; OP *opval; GV *gvval; + AV* padval; #ifdef PERL_IN_MADLY_C TOKEN* p_tkval; TOKEN* i_tkval; @@ -91,6 +92,7 @@ %type termbinop termunop anonymous termdo %type switch case %type label +%type remempad %nonassoc PREC_LOW %nonassoc LOOPEX @@ -502,15 +504,15 @@ peg : PEG } ; -format : FORMAT startformsub formname block +format : FORMAT remempad startformsub formname block { SvREFCNT_inc(PL_compcv); #ifdef MAD - $$ = newFORM($2, $3, $4); + $$ = newFORM($3, $4, $5); prepend_madprops($1->tk_mad, $$, 'F'); $1->tk_mad = 0; token_free($1); #else - newFORM($2, $3, $4); + newFORM($3, $4, $5); #endif } ; @@ -520,38 +522,42 @@ formname: WORD { $$ = $1; } ; /* Unimplemented "my sub foo { }" */ -mysubrout: MYSUB startsub subname proto subattrlist subbody +mysubrout: MYSUB remempad startsub subname proto subattrlist subbody { SvREFCNT_inc(PL_compcv); #ifdef MAD - $$ = newMYSUB($2, $3, $4, $5, $6); + $$ = newMYSUB($3, $4, $5, $6, $7); token_getmad($1,$$,'d'); #else - newMYSUB($2, $3, $4, $5, $6); + newMYSUB($3, $4, $5, $6, $7); #endif } ; /* Subroutine definition */ -subrout : SUB startsub subname proto subattrlist subbody +subrout : SUB remempad startsub subname proto subattrlist subbody { SvREFCNT_inc(PL_compcv); #ifdef MAD OP* o = newSVOP(OP_ANONCODE, 0, - (SV*)newATTRSUB($2, $3, $4, $5, $6)); + (SV*)newATTRSUB($3, $4, $5, $6, $7)); $$ = newOP(OP_NULL,0); op_getmad(o,$$,'&'); - op_getmad($3,$$,'n'); - op_getmad($4,$$,'s'); - op_getmad($5,$$,'a'); + op_getmad($4,$$,'n'); + op_getmad($5,$$,'s'); + op_getmad($6,$$,'a'); token_getmad($1,$$,'d'); - append_madprops($6->op_madprop, $$, 0); - $6->op_madprop = 0; + append_madprops($7->op_madprop, $$, 0); + $7->op_madprop = 0; #else - newATTRSUB($2, $3, $4, $5, $6); + newATTRSUB($3, $4, $5, $6, $7); $$ = Nullop; #endif } ; +remempad: /* NULL */ /* remember current value of PL_comppad */ + { $$ = PL_comppad; } + ; + startsub: /* NULL */ /* start a regular subroutine scope */ { $$ = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } @@ -636,18 +642,18 @@ package : PACKAGE WORD ';' } ; -use : USE startsub +use : USE remempad startsub { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } WORD WORD listexpr ';' { SvREFCNT_inc(PL_compcv); #ifdef MAD - $$ = utilize(IVAL($1), $2, $4, $5, $6); + $$ = utilize(IVAL($1), $3, $5, $6, $7); token_getmad($1,$$,'o'); - token_getmad($7,$$,';'); + token_getmad($8,$$,';'); if (PL_rsfp_filters && AvFILLp(PL_rsfp_filters) >= 0) append_madprops(newMADPROP('!', MAD_PV, "", 0), $$, 0); #else - utilize(IVAL($1), $2, $4, $5, $6); + utilize(IVAL($1), $3, $5, $6, $7); #endif } ; @@ -742,13 +748,13 @@ listop : LSTOP indirob argexpr /* map {...} @args or print $fh @args */ TOKEN_GETMAD($2,$$,'('); TOKEN_GETMAD($4,$$,')'); } - | LSTOPSUB startanonsub block /* sub f(&@); f { foo } ... */ + | LSTOPSUB remempad startanonsub block /* sub f(&@); f {foo} ... */ { SvREFCNT_inc(PL_compcv); - $3 = newANONATTRSUB($2, 0, Nullop, $3); } + $4 = newANONATTRSUB($3, 0, Nullop, $4); } listexpr %prec LSTOP /* ... @bar */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, - prepend_elem(OP_LIST, $3, $5), $1)); + prepend_elem(OP_LIST, $4, $6), $1)); } ; @@ -996,12 +1002,12 @@ anonymous: '[' expr ']' TOKEN_GETMAD($2,$$,';'); TOKEN_GETMAD($3,$$,'}'); } - | ANONSUB startanonsub proto subattrlist block %prec '(' + | ANONSUB remempad startanonsub proto subattrlist block %prec '(' { SvREFCNT_inc(PL_compcv); - $$ = newANONATTRSUB($2, $3, $4, $5); + $$ = newANONATTRSUB($3, $4, $5, $6); TOKEN_GETMAD($1,$$,'o'); - OP_GETMAD($3,$$,'s'); - OP_GETMAD($4,$$,'a'); + OP_GETMAD($4,$$,'s'); + OP_GETMAD($5,$$,'a'); } ; diff --git a/t/comp/parser.t b/t/comp/parser.t index 2599bdf..55c6459 100644 --- a/t/comp/parser.t +++ b/t/comp/parser.t @@ -9,7 +9,7 @@ BEGIN { } BEGIN { require "./test.pl"; } -plan( tests => 60 ); +plan( tests => 62 ); eval '%@x=0;'; like( $@, qr/^Can't modify hash dereference in repeat \(x\)/, '%@x=0' ); @@ -210,3 +210,20 @@ like( $@, qr/Assignment to both a list and a scalar/, 'Assignment to both a list eval q{ s/x/#/e }; is( $@, '', 'comments in s///e' ); + +# these two used to coredump because the op cleanup on parse error could +# be to the wrong pad + +eval q[ + sub { our $a= 1;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a;$a; + sub { my $z +]; + +like($@, qr/Missing right curly/, 'nested sub syntax error' ); + +eval q[ + sub { my ($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$p,$q,$r,$s,$r); + sub { my $z +]; +like($@, qr/Missing right curly/, 'nested sub syntax error 2' ); +