diff --git a/embed.fnc b/embed.fnc index 63a654bf504d..71229d25585a 100644 --- a/embed.fnc +++ b/embed.fnc @@ -1512,6 +1512,7 @@ Anp |Signal_t |csighandler |int sig #endif Ap |SV** |stack_grow |NN SV** sp|NN SV** p|SSize_t n Ap |I32 |start_subparse |I32 is_format|U32 flags +Xp |void |init_named_cv |NN CV *cv|NN OP *nameop : Used in pp_ctl.c p |void |sub_crush_depth|NN CV* cv Amd |bool |sv_2bool |NN SV *const sv diff --git a/embed.h b/embed.h index f964e99245d7..f0fe95ec55be 100644 --- a/embed.h +++ b/embed.h @@ -1277,6 +1277,7 @@ #define init_argv_symbols(a,b) Perl_init_argv_symbols(aTHX_ a,b) #define init_constants() Perl_init_constants(aTHX) #define init_debugger() Perl_init_debugger(aTHX) +#define init_named_cv(a,b) Perl_init_named_cv(aTHX_ a,b) #define invert(a) Perl_invert(aTHX_ a) #define io_close(a,b,c,d) Perl_io_close(aTHX_ a,b,c,d) #define isinfnansv(a) Perl_isinfnansv(aTHX_ a) diff --git a/perly.act b/perly.act index ce4d13dcbc2b..1c98c6774171 100644 --- a/perly.act +++ b/perly.act @@ -248,23 +248,7 @@ case 2: case 29: #line 277 "perly.y" /* yacc.c:1646 */ { - if ((ps[-1].val.opval)->op_type == OP_CONST) { - const char *const name = - SvPV_nolen_const(((SVOP*)(ps[-1].val.opval))->op_sv); - if (strEQ(name, "BEGIN") || strEQ(name, "END") - || strEQ(name, "INIT") || strEQ(name, "CHECK") - || strEQ(name, "UNITCHECK")) - CvSPECIAL_on(PL_compcv); - } - else - /* State subs inside anonymous subs need to be - clonable themselves. */ - if (CvANON(CvOUTSIDE(PL_compcv)) - || CvCLONE(CvOUTSIDE(PL_compcv)) - || !PadnameIsSTATE(PadlistNAMESARRAY(CvPADLIST( - CvOUTSIDE(PL_compcv) - ))[(ps[-1].val.opval)->op_targ])) - CvCLONE_on(PL_compcv); + init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; parser->in_my_stash = NULL; } @@ -272,7 +256,7 @@ case 2: break; case 30: -#line 299 "perly.y" /* yacc.c:1646 */ +#line 283 "perly.y" /* yacc.c:1646 */ { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST @@ -287,7 +271,7 @@ case 2: break; case 31: -#line 310 "perly.y" /* yacc.c:1646 */ +#line 294 "perly.y" /* yacc.c:1646 */ { package((ps[-1].val.opval)); if ((ps[-2].val.opval)) @@ -298,13 +282,13 @@ case 2: break; case 32: -#line 317 "perly.y" /* yacc.c:1646 */ +#line 301 "perly.y" /* yacc.c:1646 */ { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; case 33: -#line 319 "perly.y" /* yacc.c:1646 */ +#line 303 "perly.y" /* yacc.c:1646 */ { SvREFCNT_inc_simple_void(PL_compcv); utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval)); @@ -315,7 +299,7 @@ case 2: break; case 34: -#line 326 "perly.y" /* yacc.c:1646 */ +#line 310 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval))); @@ -325,7 +309,7 @@ case 2: break; case 35: -#line 332 "perly.y" /* yacc.c:1646 */ +#line 316 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval)))); @@ -335,7 +319,7 @@ case 2: break; case 36: -#line 338 "perly.y" /* yacc.c:1646 */ +#line 322 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0)); parser->copline = (line_t)(ps[-5].val.ival); @@ -344,19 +328,19 @@ case 2: break; case 37: -#line 343 "perly.y" /* yacc.c:1646 */ +#line 327 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } break; case 38: -#line 345 "perly.y" /* yacc.c:1646 */ +#line 329 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } break; case 39: -#line 347 "perly.y" /* yacc.c:1646 */ +#line 331 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, @@ -367,7 +351,7 @@ case 2: break; case 40: -#line 354 "perly.y" /* yacc.c:1646 */ +#line 338 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, @@ -378,19 +362,19 @@ case 2: break; case 41: -#line 361 "perly.y" /* yacc.c:1646 */ +#line 345 "perly.y" /* yacc.c:1646 */ { parser->expect = XTERM; } break; case 42: -#line 363 "perly.y" /* yacc.c:1646 */ +#line 347 "perly.y" /* yacc.c:1646 */ { parser->expect = XTERM; } break; case 43: -#line 366 "perly.y" /* yacc.c:1646 */ +#line 350 "perly.y" /* yacc.c:1646 */ { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, NULL, @@ -409,7 +393,7 @@ case 2: break; case 44: -#line 381 "perly.y" /* yacc.c:1646 */ +#line 365 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-8].val.ival); @@ -418,7 +402,7 @@ case 2: break; case 45: -#line 386 "perly.y" /* yacc.c:1646 */ +#line 370 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); @@ -428,13 +412,13 @@ case 2: break; case 46: -#line 392 "perly.y" /* yacc.c:1646 */ +#line 376 "perly.y" /* yacc.c:1646 */ { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 47: -#line 394 "perly.y" /* yacc.c:1646 */ +#line 378 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end( (ps[-7].val.ival), @@ -451,7 +435,7 @@ case 2: break; case 48: -#line 407 "perly.y" /* yacc.c:1646 */ +#line 391 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP( 0, op_lvalue(newUNOP(OP_REFGEN, 0, @@ -463,7 +447,7 @@ case 2: break; case 49: -#line 415 "perly.y" /* yacc.c:1646 */ +#line 399 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); @@ -473,7 +457,7 @@ case 2: break; case 50: -#line 421 "perly.y" /* yacc.c:1646 */ +#line 405 "perly.y" /* yacc.c:1646 */ { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -483,7 +467,7 @@ case 2: break; case 51: -#line 427 "perly.y" /* yacc.c:1646 */ +#line 411 "perly.y" /* yacc.c:1646 */ { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) { @@ -494,7 +478,7 @@ case 2: break; case 52: -#line 434 "perly.y" /* yacc.c:1646 */ +#line 418 "perly.y" /* yacc.c:1646 */ { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -506,7 +490,7 @@ case 2: break; case 53: -#line 442 "perly.y" /* yacc.c:1646 */ +#line 426 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[-1].val.opval); } @@ -514,7 +498,7 @@ case 2: break; case 54: -#line 446 "perly.y" /* yacc.c:1646 */ +#line 430 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); @@ -523,7 +507,7 @@ case 2: break; case 55: -#line 451 "perly.y" /* yacc.c:1646 */ +#line 435 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; parser->copline = NOLINE; @@ -532,7 +516,7 @@ case 2: break; case 56: -#line 459 "perly.y" /* yacc.c:1646 */ +#line 443 "perly.y" /* yacc.c:1646 */ { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); @@ -551,74 +535,74 @@ case 2: break; case 57: -#line 476 "perly.y" /* yacc.c:1646 */ +#line 460 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 58: -#line 478 "perly.y" /* yacc.c:1646 */ +#line 462 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; case 59: -#line 483 "perly.y" /* yacc.c:1646 */ +#line 467 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 60: -#line 485 "perly.y" /* yacc.c:1646 */ +#line 469 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 61: -#line 487 "perly.y" /* yacc.c:1646 */ +#line 471 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 62: -#line 489 "perly.y" /* yacc.c:1646 */ +#line 473 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 63: -#line 491 "perly.y" /* yacc.c:1646 */ +#line 475 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; case 64: -#line 493 "perly.y" /* yacc.c:1646 */ +#line 477 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 65: -#line 495 "perly.y" /* yacc.c:1646 */ +#line 479 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); parser->copline = (line_t)(ps[-1].val.ival); } break; case 66: -#line 498 "perly.y" /* yacc.c:1646 */ +#line 482 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } break; case 67: -#line 503 "perly.y" /* yacc.c:1646 */ +#line 487 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 68: -#line 505 "perly.y" /* yacc.c:1646 */ +#line 489 "perly.y" /* yacc.c:1646 */ { ((ps[0].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = op_scope((ps[0].val.opval)); @@ -627,7 +611,7 @@ case 2: break; case 69: -#line 510 "perly.y" /* yacc.c:1646 */ +#line 494 "perly.y" /* yacc.c:1646 */ { parser->copline = (line_t)(ps[-5].val.ival); (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), @@ -638,19 +622,19 @@ case 2: break; case 70: -#line 520 "perly.y" /* yacc.c:1646 */ +#line 504 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 71: -#line 522 "perly.y" /* yacc.c:1646 */ +#line 506 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 72: -#line 527 "perly.y" /* yacc.c:1646 */ +#line 511 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); } @@ -658,13 +642,13 @@ case 2: break; case 73: -#line 533 "perly.y" /* yacc.c:1646 */ +#line 517 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 75: -#line 539 "perly.y" /* yacc.c:1646 */ +#line 523 "perly.y" /* yacc.c:1646 */ { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; } @@ -672,118 +656,118 @@ case 2: break; case 77: -#line 547 "perly.y" /* yacc.c:1646 */ +#line 531 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; case 78: -#line 552 "perly.y" /* yacc.c:1646 */ +#line 536 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 79: -#line 556 "perly.y" /* yacc.c:1646 */ +#line 540 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 80: -#line 559 "perly.y" /* yacc.c:1646 */ +#line 543 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 81: -#line 560 "perly.y" /* yacc.c:1646 */ +#line 544 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 82: -#line 564 "perly.y" /* yacc.c:1646 */ +#line 548 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } break; case 83: -#line 570 "perly.y" /* yacc.c:1646 */ +#line 554 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } break; case 84: -#line 575 "perly.y" /* yacc.c:1646 */ +#line 559 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } break; case 87: -#line 586 "perly.y" /* yacc.c:1646 */ +#line 570 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 89: -#line 592 "perly.y" /* yacc.c:1646 */ +#line 576 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 90: -#line 594 "perly.y" /* yacc.c:1646 */ +#line 578 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 91: -#line 596 "perly.y" /* yacc.c:1646 */ +#line 580 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 92: -#line 601 "perly.y" /* yacc.c:1646 */ +#line 585 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 93: -#line 603 "perly.y" /* yacc.c:1646 */ +#line 587 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 94: -#line 614 "perly.y" /* yacc.c:1646 */ +#line 598 "perly.y" /* yacc.c:1646 */ { parser->in_my = 0; (yyval.opval) = NULL; } break; case 95: -#line 616 "perly.y" /* yacc.c:1646 */ +#line 600 "perly.y" /* yacc.c:1646 */ { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } break; case 96: -#line 621 "perly.y" /* yacc.c:1646 */ +#line 605 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = '@'; } break; case 97: -#line 623 "perly.y" /* yacc.c:1646 */ +#line 607 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = '%'; } break; case 98: -#line 627 "perly.y" /* yacc.c:1646 */ +#line 611 "perly.y" /* yacc.c:1646 */ { I32 sigil = (ps[-2].val.ival); OP *var = (ps[-1].val.opval); @@ -803,25 +787,25 @@ case 2: break; case 99: -#line 646 "perly.y" /* yacc.c:1646 */ +#line 630 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 100: -#line 648 "perly.y" /* yacc.c:1646 */ +#line 632 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP(OP_NULL, 0); } break; case 101: -#line 650 "perly.y" /* yacc.c:1646 */ +#line 634 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 102: -#line 656 "perly.y" /* yacc.c:1646 */ +#line 640 "perly.y" /* yacc.c:1646 */ { OP *var = (ps[-1].val.opval); OP *defexpr = (ps[0].val.opval); @@ -886,25 +870,25 @@ case 2: break; case 103: -#line 721 "perly.y" /* yacc.c:1646 */ +#line 705 "perly.y" /* yacc.c:1646 */ { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 104: -#line 723 "perly.y" /* yacc.c:1646 */ +#line 707 "perly.y" /* yacc.c:1646 */ { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 105: -#line 729 "perly.y" /* yacc.c:1646 */ +#line 713 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[-1].val.opval); } break; case 106: -#line 731 "perly.y" /* yacc.c:1646 */ +#line 715 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval)); } @@ -912,31 +896,31 @@ case 2: break; case 107: -#line 735 "perly.y" /* yacc.c:1646 */ +#line 719 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 108: -#line 740 "perly.y" /* yacc.c:1646 */ +#line 724 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 109: -#line 742 "perly.y" /* yacc.c:1646 */ +#line 726 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 110: -#line 745 "perly.y" /* yacc.c:1646 */ +#line 729 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 111: -#line 747 "perly.y" /* yacc.c:1646 */ +#line 731 "perly.y" /* yacc.c:1646 */ { ENTER; SAVEIV(parser->sig_elems); @@ -951,7 +935,7 @@ case 2: break; case 112: -#line 759 "perly.y" /* yacc.c:1646 */ +#line 743 "perly.y" /* yacc.c:1646 */ { OP *sigops = (ps[-1].val.opval); UNOP_AUX_item *aux; @@ -990,7 +974,7 @@ case 2: break; case 113: -#line 798 "perly.y" /* yacc.c:1646 */ +#line 782 "perly.y" /* yacc.c:1646 */ { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); @@ -1001,43 +985,43 @@ case 2: break; case 114: -#line 808 "perly.y" /* yacc.c:1646 */ +#line 792 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 115: -#line 809 "perly.y" /* yacc.c:1646 */ +#line 793 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 116: -#line 814 "perly.y" /* yacc.c:1646 */ +#line 798 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 117: -#line 816 "perly.y" /* yacc.c:1646 */ +#line 800 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 118: -#line 818 "perly.y" /* yacc.c:1646 */ +#line 802 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 120: -#line 824 "perly.y" /* yacc.c:1646 */ +#line 808 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[-1].val.opval); } break; case 121: -#line 826 "perly.y" /* yacc.c:1646 */ +#line 810 "perly.y" /* yacc.c:1646 */ { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); @@ -1046,7 +1030,7 @@ case 2: break; case 123: -#line 835 "perly.y" /* yacc.c:1646 */ +#line 819 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) ); } @@ -1054,7 +1038,7 @@ case 2: break; case 124: -#line 839 "perly.y" /* yacc.c:1646 */ +#line 823 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) ); } @@ -1062,7 +1046,7 @@ case 2: break; case 125: -#line 843 "perly.y" /* yacc.c:1646 */ +#line 827 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)), @@ -1072,7 +1056,7 @@ case 2: break; case 126: -#line 849 "perly.y" /* yacc.c:1646 */ +#line 833 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, scalar((ps[-2].val.opval)), newMETHOP(OP_METHOD, 0, (ps[0].val.opval)))); @@ -1081,7 +1065,7 @@ case 2: break; case 127: -#line 854 "perly.y" /* yacc.c:1646 */ +#line 838 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), @@ -1091,7 +1075,7 @@ case 2: break; case 128: -#line 860 "perly.y" /* yacc.c:1646 */ +#line 844 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)), @@ -1101,26 +1085,26 @@ case 2: break; case 129: -#line 866 "perly.y" /* yacc.c:1646 */ +#line 850 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 130: -#line 868 "perly.y" /* yacc.c:1646 */ +#line 852 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 131: -#line 870 "perly.y" /* yacc.c:1646 */ +#line 854 "perly.y" /* yacc.c:1646 */ { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); } break; case 132: -#line 873 "perly.y" /* yacc.c:1646 */ +#line 857 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval))); @@ -1129,20 +1113,20 @@ case 2: break; case 135: -#line 888 "perly.y" /* yacc.c:1646 */ +#line 872 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; case 136: -#line 890 "perly.y" /* yacc.c:1646 */ +#line 874 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; case 137: -#line 893 "perly.y" /* yacc.c:1646 */ +#line 877 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1151,7 +1135,7 @@ case 2: break; case 138: -#line 898 "perly.y" /* yacc.c:1646 */ +#line 882 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1160,14 +1144,14 @@ case 2: break; case 139: -#line 903 "perly.y" /* yacc.c:1646 */ +#line 887 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; case 140: -#line 906 "perly.y" /* yacc.c:1646 */ +#line 890 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } @@ -1175,7 +1159,7 @@ case 2: break; case 141: -#line 910 "perly.y" /* yacc.c:1646 */ +#line 894 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } @@ -1183,7 +1167,7 @@ case 2: break; case 142: -#line 914 "perly.y" /* yacc.c:1646 */ +#line 898 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); if (parser->expect == XBLOCK) @@ -1193,7 +1177,7 @@ case 2: break; case 143: -#line 920 "perly.y" /* yacc.c:1646 */ +#line 904 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-4].val.opval))))); @@ -1204,7 +1188,7 @@ case 2: break; case 144: -#line 928 "perly.y" /* yacc.c:1646 */ +#line 912 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-3].val.opval))))); @@ -1215,7 +1199,7 @@ case 2: break; case 145: -#line 935 "perly.y" /* yacc.c:1646 */ +#line 919 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); if (parser->expect == XBLOCK) @@ -1225,37 +1209,37 @@ case 2: break; case 146: -#line 941 "perly.y" /* yacc.c:1646 */ +#line 925 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; case 147: -#line 943 "perly.y" /* yacc.c:1646 */ +#line 927 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; case 148: -#line 945 "perly.y" /* yacc.c:1646 */ +#line 929 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; case 149: -#line 950 "perly.y" /* yacc.c:1646 */ +#line 934 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; case 150: -#line 952 "perly.y" /* yacc.c:1646 */ +#line 936 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 151: -#line 954 "perly.y" /* yacc.c:1646 */ +#line 938 "perly.y" /* yacc.c:1646 */ { if ((ps[-1].val.ival) != OP_REPEAT) scalar((ps[-2].val.opval)); (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval))); @@ -1264,111 +1248,111 @@ case 2: break; case 152: -#line 959 "perly.y" /* yacc.c:1646 */ +#line 943 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 153: -#line 961 "perly.y" /* yacc.c:1646 */ +#line 945 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 154: -#line 963 "perly.y" /* yacc.c:1646 */ +#line 947 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 155: -#line 965 "perly.y" /* yacc.c:1646 */ +#line 949 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 156: -#line 967 "perly.y" /* yacc.c:1646 */ +#line 951 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 157: -#line 969 "perly.y" /* yacc.c:1646 */ +#line 953 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 158: -#line 971 "perly.y" /* yacc.c:1646 */ +#line 955 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 159: -#line 973 "perly.y" /* yacc.c:1646 */ +#line 957 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 160: -#line 975 "perly.y" /* yacc.c:1646 */ +#line 959 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 161: -#line 977 "perly.y" /* yacc.c:1646 */ +#line 961 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 162: -#line 979 "perly.y" /* yacc.c:1646 */ +#line 963 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 163: -#line 984 "perly.y" /* yacc.c:1646 */ +#line 968 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; case 164: -#line 986 "perly.y" /* yacc.c:1646 */ +#line 970 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 165: -#line 989 "perly.y" /* yacc.c:1646 */ +#line 973 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 166: -#line 991 "perly.y" /* yacc.c:1646 */ +#line 975 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } break; case 167: -#line 993 "perly.y" /* yacc.c:1646 */ +#line 977 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_POSTINC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; case 168: -#line 996 "perly.y" /* yacc.c:1646 */ +#line 980 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_POSTDEC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; case 169: -#line 999 "perly.y" /* yacc.c:1646 */ +#line 983 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list(OP_JOIN, 0, op_append_elem( OP_LIST, @@ -1383,148 +1367,148 @@ case 2: break; case 170: -#line 1010 "perly.y" /* yacc.c:1646 */ +#line 994 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_PREINC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; case 171: -#line 1013 "perly.y" /* yacc.c:1646 */ +#line 997 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_PREDEC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; case 172: -#line 1020 "perly.y" /* yacc.c:1646 */ +#line 1004 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; case 173: -#line 1022 "perly.y" /* yacc.c:1646 */ +#line 1006 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newANONLIST(NULL);} break; case 174: -#line 1024 "perly.y" /* yacc.c:1646 */ +#line 1008 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; case 175: -#line 1026 "perly.y" /* yacc.c:1646 */ +#line 1010 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newANONHASH(NULL); } break; case 176: -#line 1028 "perly.y" /* yacc.c:1646 */ +#line 1012 "perly.y" /* yacc.c:1646 */ { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); } break; case 177: -#line 1034 "perly.y" /* yacc.c:1646 */ +#line 1018 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; case 178: -#line 1036 "perly.y" /* yacc.c:1646 */ +#line 1020 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; case 183: -#line 1044 "perly.y" /* yacc.c:1646 */ +#line 1028 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 184: -#line 1046 "perly.y" /* yacc.c:1646 */ +#line 1030 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; case 185: -#line 1048 "perly.y" /* yacc.c:1646 */ +#line 1032 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; case 186: -#line 1050 "perly.y" /* yacc.c:1646 */ +#line 1034 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 187: -#line 1052 "perly.y" /* yacc.c:1646 */ +#line 1036 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = localize((ps[0].val.opval),0); } break; case 188: -#line 1054 "perly.y" /* yacc.c:1646 */ +#line 1038 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 189: -#line 1056 "perly.y" /* yacc.c:1646 */ +#line 1040 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 190: -#line 1058 "perly.y" /* yacc.c:1646 */ +#line 1042 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = sawparens(newNULLLIST()); } break; case 191: -#line 1060 "perly.y" /* yacc.c:1646 */ +#line 1044 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 192: -#line 1062 "perly.y" /* yacc.c:1646 */ +#line 1046 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 193: -#line 1064 "perly.y" /* yacc.c:1646 */ +#line 1048 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 194: -#line 1066 "perly.y" /* yacc.c:1646 */ +#line 1050 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 195: -#line 1068 "perly.y" /* yacc.c:1646 */ +#line 1052 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} break; case 196: -#line 1070 "perly.y" /* yacc.c:1646 */ +#line 1054 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 197: -#line 1072 "perly.y" /* yacc.c:1646 */ +#line 1056 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1538,7 +1522,7 @@ case 2: break; case 198: -#line 1082 "perly.y" /* yacc.c:1646 */ +#line 1066 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, @@ -1552,7 +1536,7 @@ case 2: break; case 199: -#line 1092 "perly.y" /* yacc.c:1646 */ +#line 1076 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1566,7 +1550,7 @@ case 2: break; case 200: -#line 1102 "perly.y" /* yacc.c:1646 */ +#line 1086 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, @@ -1580,26 +1564,26 @@ case 2: break; case 201: -#line 1112 "perly.y" /* yacc.c:1646 */ +#line 1096 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 202: -#line 1114 "perly.y" /* yacc.c:1646 */ +#line 1098 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; case 203: -#line 1116 "perly.y" /* yacc.c:1646 */ +#line 1100 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; case 204: -#line 1119 "perly.y" /* yacc.c:1646 */ +#line 1103 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); @@ -1608,7 +1592,7 @@ case 2: break; case 205: -#line 1124 "perly.y" /* yacc.c:1646 */ +#line 1108 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } @@ -1616,130 +1600,130 @@ case 2: break; case 206: -#line 1128 "perly.y" /* yacc.c:1646 */ +#line 1112 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; case 207: -#line 1130 "perly.y" /* yacc.c:1646 */ +#line 1114 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; case 208: -#line 1132 "perly.y" /* yacc.c:1646 */ +#line 1116 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; case 209: -#line 1134 "perly.y" /* yacc.c:1646 */ +#line 1118 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; case 210: -#line 1137 "perly.y" /* yacc.c:1646 */ +#line 1121 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; case 211: -#line 1139 "perly.y" /* yacc.c:1646 */ +#line 1123 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; case 212: -#line 1142 "perly.y" /* yacc.c:1646 */ +#line 1126 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; case 213: -#line 1144 "perly.y" /* yacc.c:1646 */ +#line 1128 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 214: -#line 1146 "perly.y" /* yacc.c:1646 */ +#line 1130 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 215: -#line 1148 "perly.y" /* yacc.c:1646 */ +#line 1132 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 216: -#line 1150 "perly.y" /* yacc.c:1646 */ +#line 1134 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 217: -#line 1152 "perly.y" /* yacc.c:1646 */ +#line 1136 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; case 218: -#line 1154 "perly.y" /* yacc.c:1646 */ +#line 1138 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; case 219: -#line 1156 "perly.y" /* yacc.c:1646 */ +#line 1140 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 220: -#line 1158 "perly.y" /* yacc.c:1646 */ +#line 1142 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; case 221: -#line 1161 "perly.y" /* yacc.c:1646 */ +#line 1145 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 222: -#line 1163 "perly.y" /* yacc.c:1646 */ +#line 1147 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; case 223: -#line 1165 "perly.y" /* yacc.c:1646 */ +#line 1149 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 224: -#line 1167 "perly.y" /* yacc.c:1646 */ +#line 1151 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[-2].val.opval); } break; case 225: -#line 1169 "perly.y" /* yacc.c:1646 */ +#line 1153 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 226: -#line 1171 "perly.y" /* yacc.c:1646 */ +#line 1155 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT) ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0))) : newOP((ps[-2].val.ival), OPf_SPECIAL); } @@ -1747,13 +1731,13 @@ case 2: break; case 227: -#line 1175 "perly.y" /* yacc.c:1646 */ +#line 1159 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 228: -#line 1177 "perly.y" /* yacc.c:1646 */ +#line 1161 "perly.y" /* yacc.c:1646 */ { if ( (ps[0].val.opval)->op_type != OP_TRANS && (ps[0].val.opval)->op_type != OP_TRANSR @@ -1768,115 +1752,115 @@ case 2: break; case 229: -#line 1188 "perly.y" /* yacc.c:1646 */ +#line 1172 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } break; case 233: -#line 1196 "perly.y" /* yacc.c:1646 */ +#line 1180 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; case 234: -#line 1198 "perly.y" /* yacc.c:1646 */ +#line 1182 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = localize((ps[0].val.opval),1); } break; case 235: -#line 1200 "perly.y" /* yacc.c:1646 */ +#line 1184 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; case 236: -#line 1205 "perly.y" /* yacc.c:1646 */ +#line 1189 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 237: -#line 1207 "perly.y" /* yacc.c:1646 */ +#line 1191 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = sawparens(newNULLLIST()); } break; case 238: -#line 1210 "perly.y" /* yacc.c:1646 */ +#line 1194 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 239: -#line 1212 "perly.y" /* yacc.c:1646 */ +#line 1196 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 240: -#line 1214 "perly.y" /* yacc.c:1646 */ +#line 1198 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 241: -#line 1219 "perly.y" /* yacc.c:1646 */ +#line 1203 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 242: -#line 1221 "perly.y" /* yacc.c:1646 */ +#line 1205 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 243: -#line 1225 "perly.y" /* yacc.c:1646 */ +#line 1209 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 244: -#line 1227 "perly.y" /* yacc.c:1646 */ +#line 1211 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 245: -#line 1231 "perly.y" /* yacc.c:1646 */ +#line 1215 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 246: -#line 1233 "perly.y" /* yacc.c:1646 */ +#line 1217 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 247: -#line 1239 "perly.y" /* yacc.c:1646 */ +#line 1223 "perly.y" /* yacc.c:1646 */ { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 255: -#line 1256 "perly.y" /* yacc.c:1646 */ +#line 1240 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } break; case 256: -#line 1260 "perly.y" /* yacc.c:1646 */ +#line 1244 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSVREF((ps[0].val.opval)); } break; case 257: -#line 1264 "perly.y" /* yacc.c:1646 */ +#line 1248 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } @@ -1884,7 +1868,7 @@ case 2: break; case 258: -#line 1270 "perly.y" /* yacc.c:1646 */ +#line 1254 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newHVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } @@ -1892,61 +1876,61 @@ case 2: break; case 259: -#line 1276 "perly.y" /* yacc.c:1646 */ +#line 1260 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; case 260: -#line 1278 "perly.y" /* yacc.c:1646 */ +#line 1262 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; case 261: -#line 1282 "perly.y" /* yacc.c:1646 */ +#line 1266 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; case 263: -#line 1287 "perly.y" /* yacc.c:1646 */ +#line 1271 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; case 265: -#line 1292 "perly.y" /* yacc.c:1646 */ +#line 1276 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; case 267: -#line 1297 "perly.y" /* yacc.c:1646 */ +#line 1281 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; case 268: -#line 1302 "perly.y" /* yacc.c:1646 */ +#line 1286 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = scalar((ps[0].val.opval)); } break; case 269: -#line 1304 "perly.y" /* yacc.c:1646 */ +#line 1288 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = scalar((ps[0].val.opval)); } break; case 270: -#line 1306 "perly.y" /* yacc.c:1646 */ +#line 1290 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 271: -#line 1309 "perly.y" /* yacc.c:1646 */ +#line 1293 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; @@ -1957,6 +1941,6 @@ case 2: /* Generated from: - * c85e1793baa49bfdf6f1329f04fd8b57a616cfc2f5dce01702d3d727f6511157 perly.y + * 6a23ac9b6bc07e4913adb8e36056ee0e94cb60bf9c02fe1b851c6087c47517bb perly.y * b6fae5748f9bef6db4740aa5e122b84ac5181852d42474d0ecad621fa4253306 regen_perly.pl * ex: set ro: */ diff --git a/perly.h b/perly.h index d5841af30270..105ae7bdf051 100644 --- a/perly.h +++ b/perly.h @@ -181,6 +181,6 @@ int yyparse (void); /* Generated from: - * c85e1793baa49bfdf6f1329f04fd8b57a616cfc2f5dce01702d3d727f6511157 perly.y + * 6a23ac9b6bc07e4913adb8e36056ee0e94cb60bf9c02fe1b851c6087c47517bb perly.y * b6fae5748f9bef6db4740aa5e122b84ac5181852d42474d0ecad621fa4253306 regen_perly.pl * ex: set ro: */ diff --git a/perly.tab b/perly.tab index 521461f3e821..84fb7b4047ee 100644 --- a/perly.tab +++ b/perly.tab @@ -72,31 +72,31 @@ static const yytype_uint16 yyrline[] = 0, 118, 118, 117, 129, 128, 139, 138, 152, 151, 165, 164, 178, 177, 190, 198, 206, 210, 218, 224, 225, 235, 236, 245, 249, 253, 257, 264, 266, 277, - 276, 309, 317, 316, 325, 331, 337, 342, 344, 346, - 353, 361, 363, 360, 380, 385, 392, 391, 406, 414, - 420, 427, 426, 441, 445, 450, 458, 476, 477, 482, - 484, 486, 488, 490, 492, 494, 497, 503, 504, 509, - 520, 521, 527, 533, 534, 539, 542, 546, 551, 555, - 559, 560, 564, 570, 575, 580, 581, 586, 587, 592, - 593, 595, 600, 602, 614, 615, 620, 622, 626, 646, - 647, 649, 655, 720, 722, 728, 730, 734, 740, 741, - 745, 747, 746, 797, 808, 809, 813, 815, 817, 819, - 823, 825, 830, 834, 838, 842, 848, 853, 859, 865, - 867, 870, 869, 880, 881, 885, 889, 892, 897, 902, - 905, 909, 913, 919, 927, 934, 940, 942, 944, 949, - 951, 953, 958, 960, 962, 964, 966, 968, 970, 972, - 974, 976, 978, 983, 985, 988, 990, 992, 995, 998, - 1009, 1012, 1019, 1021, 1023, 1025, 1027, 1033, 1035, 1039, - 1040, 1041, 1042, 1043, 1045, 1047, 1049, 1051, 1053, 1055, - 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1081, 1091, - 1101, 1111, 1113, 1115, 1118, 1123, 1127, 1129, 1131, 1133, - 1136, 1138, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, - 1157, 1160, 1162, 1164, 1166, 1168, 1170, 1174, 1177, 1176, - 1189, 1190, 1191, 1195, 1197, 1199, 1204, 1206, 1209, 1211, - 1213, 1218, 1220, 1225, 1226, 1231, 1232, 1238, 1242, 1243, - 1244, 1247, 1248, 1251, 1252, 1255, 1259, 1263, 1269, 1275, - 1277, 1281, 1285, 1286, 1290, 1291, 1295, 1296, 1301, 1303, - 1305, 1308 + 276, 293, 301, 300, 309, 315, 321, 326, 328, 330, + 337, 345, 347, 344, 364, 369, 376, 375, 390, 398, + 404, 411, 410, 425, 429, 434, 442, 460, 461, 466, + 468, 470, 472, 474, 476, 478, 481, 487, 488, 493, + 504, 505, 511, 517, 518, 523, 526, 530, 535, 539, + 543, 544, 548, 554, 559, 564, 565, 570, 571, 576, + 577, 579, 584, 586, 598, 599, 604, 606, 610, 630, + 631, 633, 639, 704, 706, 712, 714, 718, 724, 725, + 729, 731, 730, 781, 792, 793, 797, 799, 801, 803, + 807, 809, 814, 818, 822, 826, 832, 837, 843, 849, + 851, 854, 853, 864, 865, 869, 873, 876, 881, 886, + 889, 893, 897, 903, 911, 918, 924, 926, 928, 933, + 935, 937, 942, 944, 946, 948, 950, 952, 954, 956, + 958, 960, 962, 967, 969, 972, 974, 976, 979, 982, + 993, 996, 1003, 1005, 1007, 1009, 1011, 1017, 1019, 1023, + 1024, 1025, 1026, 1027, 1029, 1031, 1033, 1035, 1037, 1039, + 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1065, 1075, + 1085, 1095, 1097, 1099, 1102, 1107, 1111, 1113, 1115, 1117, + 1120, 1122, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, + 1141, 1144, 1146, 1148, 1150, 1152, 1154, 1158, 1161, 1160, + 1173, 1174, 1175, 1179, 1181, 1183, 1188, 1190, 1193, 1195, + 1197, 1202, 1204, 1209, 1210, 1215, 1216, 1222, 1226, 1227, + 1228, 1231, 1232, 1235, 1236, 1239, 1243, 1247, 1253, 1259, + 1261, 1265, 1269, 1270, 1274, 1275, 1279, 1280, 1285, 1287, + 1289, 1292 }; #endif @@ -1089,6 +1089,6 @@ static const toketypes yy_type_tab[] = }; /* Generated from: - * c85e1793baa49bfdf6f1329f04fd8b57a616cfc2f5dce01702d3d727f6511157 perly.y + * 6a23ac9b6bc07e4913adb8e36056ee0e94cb60bf9c02fe1b851c6087c47517bb perly.y * b6fae5748f9bef6db4740aa5e122b84ac5181852d42474d0ecad621fa4253306 regen_perly.pl * ex: set ro: */ diff --git a/perly.y b/perly.y index 30d836099483..f10cfbdb119b 100644 --- a/perly.y +++ b/perly.y @@ -275,23 +275,7 @@ barestmt: PLUGSTMT } | SUB subname startsub { - if ($2->op_type == OP_CONST) { - const char *const name = - SvPV_nolen_const(((SVOP*)$2)->op_sv); - if (strEQ(name, "BEGIN") || strEQ(name, "END") - || strEQ(name, "INIT") || strEQ(name, "CHECK") - || strEQ(name, "UNITCHECK")) - CvSPECIAL_on(PL_compcv); - } - else - /* State subs inside anonymous subs need to be - clonable themselves. */ - if (CvANON(CvOUTSIDE(PL_compcv)) - || CvCLONE(CvOUTSIDE(PL_compcv)) - || !PadnameIsSTATE(PadlistNAMESARRAY(CvPADLIST( - CvOUTSIDE(PL_compcv) - ))[$2->op_targ])) - CvCLONE_on(PL_compcv); + init_named_cv(PL_compcv, $2); parser->in_my = 0; parser->in_my_stash = NULL; } diff --git a/proto.h b/proto.h index 34da7987fac5..3a686e2c7b67 100644 --- a/proto.h +++ b/proto.h @@ -1366,6 +1366,9 @@ PERL_CALLCONV void Perl_init_dbargs(pTHX); PERL_CALLCONV void Perl_init_debugger(pTHX); PERL_CALLCONV int Perl_init_i18nl10n(pTHX_ int printwarn); PERL_CALLCONV int Perl_init_i18nl14n(pTHX_ int printwarn); +PERL_CALLCONV void Perl_init_named_cv(pTHX_ CV *cv, OP *nameop); +#define PERL_ARGS_ASSERT_INIT_NAMED_CV \ + assert(cv); assert(nameop) PERL_CALLCONV void Perl_init_stacks(pTHX); PERL_CALLCONV void Perl_init_tm(pTHX_ struct tm *ptm); #define PERL_ARGS_ASSERT_INIT_TM \ diff --git a/toke.c b/toke.c index 9f37f53ba421..4f2aa5729d2d 100644 --- a/toke.c +++ b/toke.c @@ -11594,6 +11594,39 @@ Perl_start_subparse(pTHX_ I32 is_format, U32 flags) return oldsavestack_ix; } + +/* Do extra initialisation of a CV (typically one just created by + * start_subparse()) if that CV is for a named sub + */ + +void +Perl_init_named_cv(pTHX_ CV *cv, OP *nameop) +{ + PERL_ARGS_ASSERT_INIT_NAMED_CV; + + if (nameop->op_type == OP_CONST) { + const char *const name = SvPV_nolen_const(((SVOP*)nameop)->op_sv); + if ( strEQ(name, "BEGIN") + || strEQ(name, "END") + || strEQ(name, "INIT") + || strEQ(name, "CHECK") + || strEQ(name, "UNITCHECK") + ) + CvSPECIAL_on(cv); + } + else + /* State subs inside anonymous subs need to be + clonable themselves. */ + if ( CvANON(CvOUTSIDE(cv)) + || CvCLONE(CvOUTSIDE(cv)) + || !PadnameIsSTATE(PadlistNAMESARRAY(CvPADLIST( + CvOUTSIDE(cv) + ))[nameop->op_targ]) + ) + CvCLONE_on(cv); +} + + static int S_yywarn(pTHX_ const char *const s, U32 flags) {