From 111668f09d98bd5d3b463619c7085a66894132df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branislav=20Zahradn=C3=ADk?= Date: Sat, 11 Oct 2025 08:25:46 +0200 Subject: [PATCH 1/2] [parser] package - deduplicate coupled call sequence Function combines call of original `package` and `package_version` when new namespace statement is detected. Instead of required three statements usage now consists of single function call. --- embed.fnc | 5 +- embed.h | 3 +- op.c | 36 +++- perly.act | 569 ++++++++++++++++++++++++++---------------------------- perly.h | 2 +- perly.tab | 76 ++++---- perly.y | 19 +- proto.h | 10 +- 8 files changed, 354 insertions(+), 366 deletions(-) diff --git a/embed.fnc b/embed.fnc index 3a16e2ffbe43..064893a41bd9 100644 --- a/embed.fnc +++ b/embed.fnc @@ -2556,9 +2556,8 @@ px |OP * |op_unscope |NULLOK OP *o ARdpx |OP * |op_wrap_finally|NN OP *block \ |NN OP *finally : Used in perly.y -p |void |package |NN OP *o -: Used in perly.y -p |void |package_version|NN OP *v +dp |void |package |NN OP *name \ + |NULLOK OP *version Adp |void |packlist |NN SV *cat \ |NN const char *pat \ |NN const char *patend \ diff --git a/embed.h b/embed.h index b3427ce20f42..2d937b5ccb91 100644 --- a/embed.h +++ b/embed.h @@ -1117,8 +1117,7 @@ # define oopsAV(a) Perl_oopsAV(aTHX_ a) # define oopsHV(a) Perl_oopsHV(aTHX_ a) # define op_unscope(a) Perl_op_unscope(aTHX_ a) -# define package(a) Perl_package(aTHX_ a) -# define package_version(a) Perl_package_version(aTHX_ a) +# define package(a,b) Perl_package(aTHX_ a,b) # define pad_add_weakref(a) Perl_pad_add_weakref(aTHX_ a) # define pad_block_start(a) Perl_pad_block_start(aTHX_ a) # define pad_fixup_inner_anons(a,b,c) Perl_pad_fixup_inner_anons(aTHX_ a,b,c) diff --git a/op.c b/op.c index a98947374531..502232ae42ec 100644 --- a/op.c +++ b/op.c @@ -6100,7 +6100,7 @@ Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last) ? 2 /* Otherwise, minimum of 2 hex digits */\ : NUM_HEX_CHARS(num))))))) -/* To make evident, Configure with `-DDEBUGGING`, build, run +/* To make evident, Configure with `-DDEBUGGING`, build, run * `./perl -Ilib -Dy t/op/tr.t` */ void @@ -8223,13 +8223,11 @@ Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv) return CHECKOP(type, pvop); } -void -Perl_package(pTHX_ OP *o) +STATIC void +S_set_package_name(pTHX_ OP *o) { SV *const sv = cSVOPo->op_sv; - PERL_ARGS_ASSERT_PACKAGE; - SAVEGENERICSV(PL_curstash); save_item(PL_curstname); @@ -8243,17 +8241,37 @@ Perl_package(pTHX_ OP *o) op_free(o); } -void -Perl_package_version( pTHX_ OP *v ) +STATIC void +S_set_package_version( pTHX_ OP *v ) { U32 savehints = PL_hints; - PERL_ARGS_ASSERT_PACKAGE_VERSION; + PL_hints &= ~HINT_STRICT_VARS; sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv ); PL_hints = savehints; op_free(v); } +/* +=for apidoc package + +Function sets current stash name and if $version is not NULL, sets it as C<$VERSION>. + +It combines former C and C into single call. + +=cut +*/ + +void +Perl_package (pTHX_ OP *name, OP *version) +{ + PERL_ARGS_ASSERT_PACKAGE; + + S_set_package_name (aTHX_ name); + if (version) + S_set_package_version (aTHX_ version); +} + /* Extract the first two components of a "version" object as two 8bit integers * and return them packed into a single U16 in the format of PL_prevailing_version. * This function only ever has to cope with version objects already known @@ -16846,7 +16864,7 @@ Perl_subsignature_append_positional(pTHX_ PADOFFSET padix, OPCODE defmode, OP *d signature->next_argix++; if(!padix && !defexpr) - /* This param has no var and no defaulting expression. There's + /* This param has no var and no defaulting expression. There's * nothing else for us to do here. */ return; diff --git a/perly.act b/perly.act index 43d328ad0937..0ea5e1f40eb4 100644 --- a/perly.act +++ b/perly.act @@ -152,9 +152,7 @@ case 2: /* @1: %empty */ case 17: /* bare_statement_class_declaration: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_SEMICOLON */ #line 283 "perly.y" { - package((ps[-2].val.opval)); - if ((ps[-3].val.opval)) - package_version((ps[-3].val.opval)); + package ((ps[-2].val.opval), (ps[-3].val.opval)); (yyval.opval) = NULL; class_setup_stash(PL_curstash); if ((ps[-1].val.opval)) { @@ -165,13 +163,9 @@ case 2: /* @1: %empty */ break; case 18: /* $@8: %empty */ -#line 302 "perly.y" +#line 300 "perly.y" { - package((ps[-3].val.opval)); - - if ((ps[-4].val.opval)) { - package_version((ps[-4].val.opval)); - } + package ((ps[-3].val.opval), (ps[-4].val.opval)); class_setup_stash(PL_curstash); if ((ps[-2].val.opval)) { class_apply_attributes(PL_curstash, (ps[-2].val.opval)); @@ -181,7 +175,7 @@ case 2: /* @1: %empty */ break; case 19: /* bare_statement_class_definition: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_BRACE_OPEN remember $@8 stmtseq PERLY_BRACE_CLOSE */ -#line 315 "perly.y" +#line 309 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0); @@ -192,7 +186,7 @@ case 2: /* @1: %empty */ break; case 20: /* bare_statement_default: KW_DEFAULT block */ -#line 326 "perly.y" +#line 320 "perly.y" { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } @@ -200,7 +194,7 @@ case 2: /* @1: %empty */ break; case 21: /* bare_statement_defer: KW_DEFER mblock */ -#line 333 "perly.y" +#line 327 "perly.y" { (yyval.opval) = newDEFEROP(0, op_scope((ps[0].val.opval))); } @@ -208,7 +202,7 @@ case 2: /* @1: %empty */ break; case 22: /* bare_statement_expression: sideff PERLY_SEMICOLON */ -#line 341 "perly.y" +#line 335 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -216,7 +210,7 @@ case 2: /* @1: %empty */ break; case 23: /* bare_statement_field_declaration: fielddecl PERLY_SEMICOLON */ -#line 349 "perly.y" +#line 343 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -224,7 +218,7 @@ case 2: /* @1: %empty */ break; case 24: /* $@9: %empty */ -#line 360 "perly.y" +#line 354 "perly.y" { parser->expect = XTERM; } @@ -232,7 +226,7 @@ case 2: /* @1: %empty */ break; case 25: /* $@10: %empty */ -#line 365 "perly.y" +#line 359 "perly.y" { parser->expect = XTERM; } @@ -240,7 +234,7 @@ case 2: /* @1: %empty */ break; case 26: /* bare_statement_for: KW_FOR PERLY_PAREN_OPEN remember mnexpr PERLY_SEMICOLON $@9 texpr PERLY_SEMICOLON $@10 mintro mnexpr PERLY_PAREN_CLOSE mblock */ -#line 372 "perly.y" +#line 366 "perly.y" { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, NULL, scalar((ps[-6].val.opval)), (ps[0].val.opval), (ps[-2].val.opval), (ps[-3].val.ival)); @@ -259,7 +253,7 @@ case 2: /* @1: %empty */ break; case 27: /* bare_statement_for: KW_FOR KW_MY remember my_scalar PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 395 "perly.y" +#line 389 "perly.y" { (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); @@ -268,7 +262,7 @@ case 2: /* @1: %empty */ break; case 28: /* bare_statement_for: KW_FOR KW_MY remember PERLY_PAREN_OPEN my_list_of_scalars PERLY_PAREN_CLOSE PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 410 "perly.y" +#line 404 "perly.y" { if ((ps[-6].val.opval)->op_type == OP_PADSV) /* degenerate case of 1 var: for my ($x) .... @@ -281,7 +275,7 @@ case 2: /* @1: %empty */ break; case 29: /* bare_statement_for: KW_FOR scalar PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 426 "perly.y" +#line 420 "perly.y" { (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))); parser->copline = (line_t)(ps[-7].val.ival); @@ -290,7 +284,7 @@ case 2: /* @1: %empty */ break; case 30: /* @11: %empty */ -#line 434 "perly.y" +#line 428 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); @@ -299,7 +293,7 @@ case 2: /* @1: %empty */ break; case 31: /* bare_statement_for: KW_FOR my_refgen remember my_var @11 PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 443 "perly.y" +#line 437 "perly.y" { (yyval.opval) = block_end( (ps[-7].val.ival), @@ -320,7 +314,7 @@ case 2: /* @1: %empty */ break; case 32: /* bare_statement_for: KW_FOR REFGEN refgen_topic PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 468 "perly.y" +#line 462 "perly.y" { (yyval.opval) = block_end ( (ps[-4].val.ival), @@ -338,7 +332,7 @@ case 2: /* @1: %empty */ break; case 33: /* bare_statement_for: KW_FOR PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 488 "perly.y" +#line 482 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-6].val.ival); @@ -347,7 +341,7 @@ case 2: /* @1: %empty */ break; case 34: /* bare_statement_format: KW_FORMAT startformsub formname formblock */ -#line 499 "perly.y" +#line 493 "perly.y" { CV *fmtcv = PL_compcv; newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); @@ -361,7 +355,7 @@ case 2: /* @1: %empty */ break; case 35: /* bare_statement_given: KW_GIVEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */ -#line 517 "perly.y" +#line 511 "perly.y" { (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); @@ -370,7 +364,7 @@ case 2: /* @1: %empty */ break; case 36: /* bare_statement_if: KW_IF PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ -#line 531 "perly.y" +#line 525 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval))); parser->copline = (line_t)(ps[-6].val.ival); @@ -379,7 +373,7 @@ case 2: /* @1: %empty */ break; case 37: /* bare_statement_null: PERLY_SEMICOLON */ -#line 539 "perly.y" +#line 533 "perly.y" { (yyval.opval) = NULL; parser->copline = NOLINE; @@ -388,29 +382,24 @@ case 2: /* @1: %empty */ break; case 38: /* bare_statement_package_declaration: KW_PACKAGE BAREWORD BAREWORD PERLY_SEMICOLON */ -#line 555 "perly.y" +#line 549 "perly.y" { - package((ps[-1].val.opval)); - if ((ps[-2].val.opval)) - package_version((ps[-2].val.opval)); + package ((ps[-1].val.opval), (ps[-2].val.opval)); (yyval.opval) = NULL; } break; case 39: /* $@12: %empty */ -#line 569 "perly.y" +#line 561 "perly.y" { - package((ps[-2].val.opval)); - if ((ps[-3].val.opval)) { - package_version((ps[-3].val.opval)); - } + package ((ps[-2].val.opval), (ps[-3].val.opval)); } break; case 40: /* bare_statement_package_definition: KW_PACKAGE BAREWORD BAREWORD PERLY_BRACE_OPEN remember $@12 stmtseq PERLY_BRACE_CLOSE */ -#line 577 "perly.y" +#line 566 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0); @@ -421,7 +410,7 @@ case 2: /* @1: %empty */ break; case 41: /* $@13: %empty */ -#line 588 "perly.y" +#line 577 "perly.y" { switch((ps[-1].val.ival)) { case KEY_ADJUST: @@ -436,7 +425,7 @@ case 2: /* @1: %empty */ break; case 42: /* bare_statement_phaser: PHASER startsub $@13 optsubbody */ -#line 599 "perly.y" +#line 588 "perly.y" { OP *body = (ps[0].val.opval); SvREFCNT_inc_simple_void(PL_compcv); @@ -456,7 +445,7 @@ case 2: /* @1: %empty */ break; case 43: /* $@14: %empty */ -#line 623 "perly.y" +#line 612 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); if((ps[-2].val.ival) == KW_METHOD_named) { @@ -470,7 +459,7 @@ case 2: /* @1: %empty */ break; case 44: /* bare_statement_sub_signature: sigsub_or_method_named subname startsub $@14 subattrlist optsigsubbody */ -#line 634 "perly.y" +#line 623 "perly.y" { OP *body = (ps[0].val.opval); @@ -487,7 +476,7 @@ case 2: /* @1: %empty */ break; case 45: /* $@15: %empty */ -#line 653 "perly.y" +#line 642 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; @@ -497,7 +486,7 @@ case 2: /* @1: %empty */ break; case 46: /* bare_statement_sub_traditional: KW_SUB_named subname startsub $@15 proto subattrlist optsubbody */ -#line 661 "perly.y" +#line 650 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST @@ -512,7 +501,7 @@ case 2: /* @1: %empty */ break; case 47: /* $@16: %empty */ -#line 679 "perly.y" +#line 668 "perly.y" { if(!(ps[0].val.opval)) { yyerror("catch block requires a (VAR)"); @@ -523,7 +512,7 @@ case 2: /* @1: %empty */ break; case 48: /* bare_statement_try_catch: KW_TRY mblock KW_CATCH remember catch_paren $@16 mblock finally */ -#line 687 "perly.y" +#line 676 "perly.y" { (yyval.opval) = newTRYCATCHOP(0, (ps[-6].val.opval), (ps[-3].val.opval), block_end((ps[-4].val.ival), op_scope((ps[-1].val.opval)))); if((ps[0].val.opval)) @@ -534,7 +523,7 @@ case 2: /* @1: %empty */ break; case 49: /* bare_statement_unless: KW_UNLESS PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ -#line 703 "perly.y" +#line 692 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval)))); parser->copline = (line_t)(ps[-6].val.ival); @@ -543,7 +532,7 @@ case 2: /* @1: %empty */ break; case 50: /* bare_statement_until: KW_UNTIL PERLY_PAREN_OPEN remember iexpr PERLY_PAREN_CLOSE mintro mblock cont */ -#line 718 "perly.y" +#line 707 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); parser->copline = (line_t)(ps[-7].val.ival); @@ -552,13 +541,13 @@ case 2: /* @1: %empty */ break; case 51: /* $@17: %empty */ -#line 727 "perly.y" +#line 716 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; case 52: /* bare_statement_utilize: KW_USE_or_NO startsub $@17 BAREWORD BAREWORD optlistexpr PERLY_SEMICOLON */ -#line 734 "perly.y" +#line 723 "perly.y" { 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)); @@ -569,7 +558,7 @@ case 2: /* @1: %empty */ break; case 53: /* bare_statement_when: KW_WHEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */ -#line 749 "perly.y" +#line 738 "perly.y" { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } @@ -577,7 +566,7 @@ case 2: /* @1: %empty */ break; case 54: /* bare_statement_while: KW_WHILE PERLY_PAREN_OPEN remember texpr PERLY_PAREN_CLOSE mintro mblock cont */ -#line 763 "perly.y" +#line 752 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); parser->copline = (line_t)(ps[-7].val.ival); @@ -586,7 +575,7 @@ case 2: /* @1: %empty */ break; case 55: /* bare_statement_yadayada: YADAYADA PERLY_SEMICOLON */ -#line 771 "perly.y" +#line 760 "perly.y" { /* diag_listed_as: Unimplemented */ (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); @@ -595,19 +584,19 @@ case 2: /* @1: %empty */ break; case 56: /* sigsub_or_method_named: KW_SUB_named_sig */ -#line 780 "perly.y" +#line 769 "perly.y" { (yyval.ival) = KW_SUB_named_sig; } break; case 57: /* sigsub_or_method_named: KW_METHOD_named */ -#line 782 "perly.y" +#line 771 "perly.y" { (yyval.ival) = KW_METHOD_named; } break; case 58: /* block: PERLY_BRACE_OPEN remember stmtseq PERLY_BRACE_CLOSE */ -#line 787 "perly.y" +#line 776 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); @@ -616,13 +605,13 @@ case 2: /* @1: %empty */ break; case 59: /* empty: %empty */ -#line 794 "perly.y" +#line 783 "perly.y" { (yyval.opval) = NULL; } break; case 60: /* formblock: PERLY_EQUAL_SIGN remember PERLY_SEMICOLON FORMRBRACK formstmtseq PERLY_SEMICOLON PERLY_DOT */ -#line 799 "perly.y" +#line 788 "perly.y" { if (parser->copline > (line_t)(ps[-6].val.ival)) parser->copline = (line_t)(ps[-6].val.ival); (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval)); @@ -631,14 +620,14 @@ case 2: /* @1: %empty */ break; case 61: /* remember: %empty */ -#line 806 "perly.y" +#line 795 "perly.y" { (yyval.ival) = block_start(TRUE); parser->parsed_sub = 0; } break; case 62: /* mblock: PERLY_BRACE_OPEN mremember stmtseq PERLY_BRACE_CLOSE */ -#line 811 "perly.y" +#line 800 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); @@ -647,32 +636,32 @@ case 2: /* @1: %empty */ break; case 63: /* mremember: %empty */ -#line 818 "perly.y" +#line 807 "perly.y" { (yyval.ival) = block_start(FALSE); parser->parsed_sub = 0; } break; case 65: /* $@18: %empty */ -#line 827 "perly.y" +#line 816 "perly.y" { parser->in_my = KEY_catch; } break; case 66: /* $@19: %empty */ -#line 829 "perly.y" +#line 818 "perly.y" { parser->in_my = 0; intro_my(); } break; case 67: /* catch_paren: PERLY_PAREN_OPEN $@18 scalar $@19 PERLY_PAREN_CLOSE */ -#line 831 "perly.y" +#line 820 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; case 69: /* stmtseq: stmtseq fullstmt */ -#line 838 "perly.y" +#line 827 "perly.y" { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) @@ -682,7 +671,7 @@ case 2: /* @1: %empty */ break; case 71: /* formstmtseq: formstmtseq formline */ -#line 849 "perly.y" +#line 838 "perly.y" { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) @@ -692,7 +681,7 @@ case 2: /* @1: %empty */ break; case 72: /* fullstmt: barestmt */ -#line 858 "perly.y" +#line 847 "perly.y" { (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; } @@ -700,13 +689,13 @@ case 2: /* @1: %empty */ break; case 73: /* fullstmt: labfullstmt */ -#line 862 "perly.y" +#line 851 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 74: /* labfullstmt: LABEL barestmt */ -#line 866 "perly.y" +#line 855 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -717,7 +706,7 @@ case 2: /* @1: %empty */ break; case 75: /* labfullstmt: LABEL labfullstmt */ -#line 873 "perly.y" +#line 862 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -728,7 +717,7 @@ case 2: /* @1: %empty */ break; case 101: /* formline: THING formarg */ -#line 918 "perly.y" +#line 907 "perly.y" { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); @@ -747,62 +736,62 @@ case 2: /* @1: %empty */ break; case 103: /* formarg: FORMLBRACK stmtseq FORMRBRACK */ -#line 937 "perly.y" +#line 926 "perly.y" { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; case 105: /* sideff: error */ -#line 945 "perly.y" +#line 934 "perly.y" { (yyval.opval) = NULL; } break; case 106: /* sideff: expr */ -#line 947 "perly.y" +#line 936 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 107: /* sideff: expr KW_IF condition */ -#line 949 "perly.y" +#line 938 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 108: /* sideff: expr KW_UNLESS condition */ -#line 951 "perly.y" +#line 940 "perly.y" { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 109: /* sideff: expr KW_WHILE condition */ -#line 953 "perly.y" +#line 942 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; case 110: /* sideff: expr KW_UNTIL iexpr */ -#line 955 "perly.y" +#line 944 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 111: /* sideff: expr KW_FOR condition */ -#line 957 "perly.y" +#line 946 "perly.y" { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); parser->copline = (line_t)(ps[-1].val.ival); } break; case 112: /* sideff: expr KW_WHEN condition */ -#line 960 "perly.y" +#line 949 "perly.y" { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } break; case 114: /* else: KW_ELSE mblock */ -#line 967 "perly.y" +#line 956 "perly.y" { ((ps[0].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = op_scope((ps[0].val.opval)); @@ -811,7 +800,7 @@ case 2: /* @1: %empty */ break; case 115: /* else: KW_ELSIF PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock else */ -#line 972 "perly.y" +#line 961 "perly.y" { parser->copline = (line_t)(ps[-5].val.ival); (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), @@ -822,25 +811,25 @@ case 2: /* @1: %empty */ break; case 117: /* cont: KW_CONTINUE block */ -#line 984 "perly.y" +#line 973 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 118: /* finally: %empty */ -#line 989 "perly.y" +#line 978 "perly.y" { (yyval.opval) = NULL; } break; case 119: /* finally: KW_FINALLY block */ -#line 991 "perly.y" +#line 980 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 120: /* mintro: %empty */ -#line 996 "perly.y" +#line 985 "perly.y" { (yyval.ival) = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); } @@ -848,7 +837,7 @@ case 2: /* @1: %empty */ break; case 123: /* texpr: %empty */ -#line 1008 "perly.y" +#line 997 "perly.y" { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; } @@ -856,59 +845,59 @@ case 2: /* @1: %empty */ break; case 125: /* iexpr: expr */ -#line 1016 "perly.y" +#line 1005 "perly.y" { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; case 126: /* mexpr: expr */ -#line 1021 "perly.y" +#line 1010 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 127: /* mnexpr: nexpr */ -#line 1025 "perly.y" +#line 1014 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 128: /* formname: BAREWORD */ -#line 1028 "perly.y" +#line 1017 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 130: /* startsub: %empty */ -#line 1033 "perly.y" +#line 1022 "perly.y" { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } break; case 131: /* startanonsub: %empty */ -#line 1039 "perly.y" +#line 1028 "perly.y" { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } break; case 132: /* startanonmethod: %empty */ -#line 1044 "perly.y" +#line 1033 "perly.y" { (yyval.ival) = start_subparse(FALSE, CVf_ANON|CVf_IsMETHOD); SAVEFREESV(PL_compcv); } break; case 133: /* startformsub: %empty */ -#line 1049 "perly.y" +#line 1038 "perly.y" { (yyval.ival) = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } break; case 139: /* subattrlist: COLONATTR THING */ -#line 1068 "perly.y" +#line 1057 "perly.y" { OP *attrlist = (ps[0].val.opval); if(attrlist && !PL_parser->sig_seen) @@ -919,49 +908,49 @@ case 2: /* @1: %empty */ break; case 140: /* subattrlist: COLONATTR */ -#line 1075 "perly.y" +#line 1064 "perly.y" { (yyval.opval) = NULL; } break; case 141: /* myattrlist: COLONATTR THING */ -#line 1080 "perly.y" +#line 1069 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 142: /* myattrlist: COLONATTR */ -#line 1082 "perly.y" +#line 1071 "perly.y" { (yyval.opval) = NULL; } break; case 143: /* sigvar: %empty */ -#line 1093 "perly.y" +#line 1082 "perly.y" { parser->in_my = 0; (yyval.ival) = 0; } break; case 144: /* sigvar: PRIVATEREF */ -#line 1095 "perly.y" +#line 1084 "perly.y" { parser->in_my = 0; (yyval.ival) = (ps[0].val.opval)->op_targ; op_free((ps[0].val.opval)); } break; case 145: /* sigslurpsigil: PERLY_SNAIL */ -#line 1100 "perly.y" +#line 1089 "perly.y" { (yyval.ival) = '@'; } break; case 146: /* sigslurpsigil: PERLY_PERCENT_SIGN */ -#line 1102 "perly.y" +#line 1091 "perly.y" { (yyval.ival) = '%'; } break; case 147: /* sigslurpelem: sigslurpsigil sigvar */ -#line 1106 "perly.y" +#line 1095 "perly.y" { subsignature_append_slurpy((ps[-1].val.ival), (ps[0].val.ival)); (yyval.opval) = NULL; @@ -970,7 +959,7 @@ case 2: /* @1: %empty */ break; case 148: /* sigslurpelem: sigslurpsigil sigvar ASSIGNOP */ -#line 1111 "perly.y" +#line 1100 "perly.y" { yyerror("A slurpy parameter may not have a default value"); } @@ -978,7 +967,7 @@ case 2: /* @1: %empty */ break; case 149: /* sigslurpelem: sigslurpsigil sigvar ASSIGNOP term */ -#line 1115 "perly.y" +#line 1104 "perly.y" { yyerror("A slurpy parameter may not have a default value"); } @@ -986,7 +975,7 @@ case 2: /* @1: %empty */ break; case 150: /* sigscalarelem: PERLY_DOLLAR sigvar */ -#line 1123 "perly.y" +#line 1112 "perly.y" { subsignature_append_positional((ps[0].val.ival), 0, NULL); (yyval.opval) = NULL; @@ -995,7 +984,7 @@ case 2: /* @1: %empty */ break; case 151: /* sigscalarelem: PERLY_DOLLAR sigvar ASSIGNOP optsigscalardefault */ -#line 1128 "perly.y" +#line 1117 "perly.y" { subsignature_append_positional((ps[-2].val.ival), (ps[-1].val.ival), (ps[0].val.opval)); (yyval.opval) = NULL; @@ -1004,31 +993,31 @@ case 2: /* @1: %empty */ break; case 152: /* optsigscalardefault: %empty */ -#line 1136 "perly.y" +#line 1125 "perly.y" { (yyval.opval) = newOP(OP_NULL, 0); } break; case 154: /* sigelem: sigscalarelem */ -#line 1143 "perly.y" +#line 1132 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 155: /* sigelem: sigslurpelem */ -#line 1145 "perly.y" +#line 1134 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 163: /* subsignature: PERLY_PAREN_OPEN subsigguts PERLY_PAREN_CLOSE */ -#line 1171 "perly.y" +#line 1160 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 164: /* $@20: %empty */ -#line 1174 "perly.y" +#line 1163 "perly.y" { ENTER; subsignature_start(); @@ -1038,7 +1027,7 @@ case 2: /* @1: %empty */ break; case 165: /* subsigguts: $@20 optsiglist */ -#line 1180 "perly.y" +#line 1169 "perly.y" { if (!FEATURE_SIGNATURES_IS_ENABLED && !CvIsMETHOD(PL_compcv)) croak("Experimental " @@ -1066,13 +1055,13 @@ case 2: /* @1: %empty */ break; case 167: /* optsubbody: PERLY_SEMICOLON */ -#line 1208 "perly.y" +#line 1197 "perly.y" { (yyval.opval) = NULL; } break; case 168: /* subbody: remember PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE */ -#line 1214 "perly.y" +#line 1203 "perly.y" { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); @@ -1082,19 +1071,19 @@ case 2: /* @1: %empty */ break; case 170: /* optsigsubbody: PERLY_SEMICOLON */ -#line 1226 "perly.y" +#line 1215 "perly.y" { (yyval.opval) = NULL; } break; case 171: /* $@21: %empty */ -#line 1231 "perly.y" +#line 1220 "perly.y" { PL_parser->sig_seen = FALSE; } break; case 172: /* sigsubbody: remember optsubsignature PERLY_BRACE_OPEN $@21 stmtseq PERLY_BRACE_CLOSE */ -#line 1233 "perly.y" +#line 1222 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); @@ -1105,37 +1094,37 @@ case 2: /* @1: %empty */ break; case 173: /* expr: expr ANDOP expr */ -#line 1244 "perly.y" +#line 1233 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 174: /* expr: expr PLUGIN_LOGICAL_AND_LOW_OP expr */ -#line 1246 "perly.y" +#line 1235 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 175: /* expr: expr OROP expr */ -#line 1248 "perly.y" +#line 1237 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 176: /* expr: expr PLUGIN_LOGICAL_OR_LOW_OP expr */ -#line 1250 "perly.y" +#line 1239 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 178: /* listexpr: listexpr PERLY_COMMA */ -#line 1256 "perly.y" +#line 1245 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 179: /* listexpr: listexpr PERLY_COMMA term */ -#line 1258 "perly.y" +#line 1247 "perly.y" { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); @@ -1144,7 +1133,7 @@ case 2: /* @1: %empty */ break; case 181: /* listop: LSTOP indirob listexpr */ -#line 1267 "perly.y" +#line 1256 "perly.y" { (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)) ); } @@ -1152,7 +1141,7 @@ case 2: /* @1: %empty */ break; case 182: /* listop: BLKLSTOP block listexpr */ -#line 1271 "perly.y" +#line 1260 "perly.y" { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newUNOP(OP_NULL, 0, op_scope((ps[-1].val.opval))), (ps[0].val.opval)) ); } @@ -1160,7 +1149,7 @@ case 2: /* @1: %empty */ break; case 183: /* listop: FUNC PERLY_PAREN_OPEN indirob expr PERLY_PAREN_CLOSE */ -#line 1275 "perly.y" +#line 1264 "perly.y" { (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)) ); } @@ -1168,7 +1157,7 @@ case 2: /* @1: %empty */ break; case 184: /* listop: term ARROW methodname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1279 "perly.y" +#line 1268 "perly.y" { (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)), @@ -1178,7 +1167,7 @@ case 2: /* @1: %empty */ break; case 185: /* listop: term ARROW methodname */ -#line 1285 "perly.y" +#line 1274 "perly.y" { (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)))); @@ -1187,7 +1176,7 @@ case 2: /* @1: %empty */ break; case 186: /* listop: term ARROW PERLY_AMPERSAND subname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1290 "perly.y" +#line 1279 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, scalar((ps[-6].val.opval)), (ps[-1].val.opval)), @@ -1197,7 +1186,7 @@ case 2: /* @1: %empty */ break; case 187: /* listop: term ARROW PERLY_AMPERSAND subname */ -#line 1296 "perly.y" +#line 1285 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, scalar((ps[-3].val.opval)), @@ -1207,7 +1196,7 @@ case 2: /* @1: %empty */ break; case 188: /* listop: METHCALL0 indirob optlistexpr */ -#line 1302 "perly.y" +#line 1291 "perly.y" { (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)), @@ -1217,7 +1206,7 @@ case 2: /* @1: %empty */ break; case 189: /* listop: METHCALL indirob PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1308 "perly.y" +#line 1297 "perly.y" { (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)), @@ -1227,25 +1216,25 @@ case 2: /* @1: %empty */ break; case 190: /* listop: LSTOP optlistexpr */ -#line 1314 "perly.y" +#line 1303 "perly.y" { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 191: /* listop: FUNC PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1316 "perly.y" +#line 1305 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 192: /* listop: FUNC SUBLEXSTART optexpr SUBLEXEND */ -#line 1318 "perly.y" +#line 1307 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 193: /* @22: %empty */ -#line 1320 "perly.y" +#line 1309 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); /* prevent double op_free() if the following fails to parse */ @@ -1255,7 +1244,7 @@ case 2: /* @1: %empty */ break; case 194: /* listop: LSTOPSUB startanonsub block @22 optlistexpr */ -#line 1326 "perly.y" +#line 1315 "perly.y" { (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))); @@ -1264,20 +1253,20 @@ case 2: /* @1: %empty */ break; case 197: /* subscripted: gelem PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1341 "perly.y" +#line 1330 "perly.y" { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; case 198: /* subscripted: scalar PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1343 "perly.y" +#line 1332 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; case 199: /* subscripted: term ARROW PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1346 "perly.y" +#line 1335 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1286,7 +1275,7 @@ case 2: /* @1: %empty */ break; case 200: /* subscripted: subscripted PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1351 "perly.y" +#line 1340 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1295,14 +1284,14 @@ case 2: /* @1: %empty */ break; case 201: /* subscripted: scalar PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1356 "perly.y" +#line 1345 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; case 202: /* subscripted: term ARROW PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1359 "perly.y" +#line 1348 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } @@ -1310,7 +1299,7 @@ case 2: /* @1: %empty */ break; case 203: /* subscripted: subscripted PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1363 "perly.y" +#line 1352 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } @@ -1318,7 +1307,7 @@ case 2: /* @1: %empty */ break; case 204: /* subscripted: term ARROW PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1367 "perly.y" +#line 1356 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); if (parser->expect == XBLOCK) @@ -1328,7 +1317,7 @@ case 2: /* @1: %empty */ break; case 205: /* subscripted: term ARROW PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1373 "perly.y" +#line 1362 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-4].val.opval))))); @@ -1339,7 +1328,7 @@ case 2: /* @1: %empty */ break; case 206: /* subscripted: subscripted PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1381 "perly.y" +#line 1370 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-3].val.opval))))); @@ -1350,7 +1339,7 @@ case 2: /* @1: %empty */ break; case 207: /* subscripted: subscripted PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1388 "perly.y" +#line 1377 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); if (parser->expect == XBLOCK) @@ -1360,55 +1349,55 @@ case 2: /* @1: %empty */ break; case 208: /* subscripted: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1394 "perly.y" +#line 1383 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; case 209: /* subscripted: QWLIST PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1396 "perly.y" +#line 1385 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; case 210: /* subscripted: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1398 "perly.y" +#line 1387 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; case 211: /* termbinop: term PLUGIN_HIGH_OP term */ -#line 1403 "perly.y" +#line 1392 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 212: /* termbinop: term ASSIGNOP term */ -#line 1405 "perly.y" +#line 1394 "perly.y" { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; case 213: /* termbinop: term PLUGIN_ASSIGN_OP term */ -#line 1407 "perly.y" +#line 1396 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 214: /* termbinop: term POWOP term */ -#line 1409 "perly.y" +#line 1398 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 215: /* termbinop: term PLUGIN_POW_OP term */ -#line 1411 "perly.y" +#line 1400 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 216: /* termbinop: term MULOP term */ -#line 1413 "perly.y" +#line 1402 "perly.y" { 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))); @@ -1417,219 +1406,219 @@ case 2: /* @1: %empty */ break; case 217: /* termbinop: term PLUGIN_MUL_OP term */ -#line 1418 "perly.y" +#line 1407 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 218: /* termbinop: term ADDOP term */ -#line 1420 "perly.y" +#line 1409 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 219: /* termbinop: term PLUGIN_ADD_OP term */ -#line 1422 "perly.y" +#line 1411 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 220: /* termbinop: term SHIFTOP term */ -#line 1424 "perly.y" +#line 1413 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 221: /* termbinop: termrelop */ -#line 1426 "perly.y" +#line 1415 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 222: /* termbinop: termeqop */ -#line 1428 "perly.y" +#line 1417 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 223: /* termbinop: term BITANDOP term */ -#line 1430 "perly.y" +#line 1419 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 224: /* termbinop: term BITOROP term */ -#line 1432 "perly.y" +#line 1421 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 225: /* termbinop: term DOTDOT term */ -#line 1434 "perly.y" +#line 1423 "perly.y" { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 226: /* termbinop: term ANDAND term */ -#line 1436 "perly.y" +#line 1425 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 227: /* termbinop: term PLUGIN_LOGICAL_AND_OP term */ -#line 1438 "perly.y" +#line 1427 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 228: /* termbinop: term OROR term */ -#line 1440 "perly.y" +#line 1429 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 229: /* termbinop: term PLUGIN_LOGICAL_OR_OP term */ -#line 1442 "perly.y" +#line 1431 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 230: /* termbinop: term DORDOR term */ -#line 1444 "perly.y" +#line 1433 "perly.y" { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 231: /* termbinop: term MATCHOP term */ -#line 1446 "perly.y" +#line 1435 "perly.y" { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 232: /* termbinop: term PLUGIN_LOW_OP term */ -#line 1448 "perly.y" +#line 1437 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 233: /* termrelop: relopchain */ -#line 1452 "perly.y" +#line 1441 "perly.y" { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 234: /* termrelop: term NCRELOP term */ -#line 1454 "perly.y" +#line 1443 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 235: /* termrelop: termrelop NCRELOP */ -#line 1456 "perly.y" +#line 1445 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 236: /* termrelop: termrelop CHRELOP */ -#line 1458 "perly.y" +#line 1447 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 237: /* termrelop: term PLUGIN_REL_OP term */ -#line 1460 "perly.y" +#line 1449 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 238: /* relopchain: term CHRELOP term */ -#line 1464 "perly.y" +#line 1453 "perly.y" { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 239: /* relopchain: relopchain CHRELOP term */ -#line 1466 "perly.y" +#line 1455 "perly.y" { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 240: /* termeqop: eqopchain */ -#line 1470 "perly.y" +#line 1459 "perly.y" { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 241: /* termeqop: term NCEQOP term */ -#line 1472 "perly.y" +#line 1461 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 242: /* termeqop: termeqop NCEQOP */ -#line 1474 "perly.y" +#line 1463 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 243: /* termeqop: termeqop CHEQOP */ -#line 1476 "perly.y" +#line 1465 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 244: /* eqopchain: term CHEQOP term */ -#line 1480 "perly.y" +#line 1469 "perly.y" { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 245: /* eqopchain: eqopchain CHEQOP term */ -#line 1482 "perly.y" +#line 1471 "perly.y" { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 246: /* termunop: PERLY_MINUS term */ -#line 1487 "perly.y" +#line 1476 "perly.y" { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; case 247: /* termunop: PERLY_PLUS term */ -#line 1489 "perly.y" +#line 1478 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 248: /* termunop: PERLY_EXCLAMATION_MARK term */ -#line 1492 "perly.y" +#line 1481 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 249: /* termunop: PERLY_TILDE term */ -#line 1494 "perly.y" +#line 1483 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } break; case 250: /* termunop: term POSTINC */ -#line 1496 "perly.y" +#line 1485 "perly.y" { (yyval.opval) = newUNOP(OP_POSTINC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; case 251: /* termunop: term POSTDEC */ -#line 1499 "perly.y" +#line 1488 "perly.y" { (yyval.opval) = newUNOP(OP_POSTDEC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; case 252: /* termunop: term POSTJOIN */ -#line 1502 "perly.y" +#line 1491 "perly.y" { (yyval.opval) = op_convert_list(OP_JOIN, 0, op_append_elem( OP_LIST, @@ -1644,59 +1633,59 @@ case 2: /* @1: %empty */ break; case 253: /* termunop: PREINC term */ -#line 1513 "perly.y" +#line 1502 "perly.y" { (yyval.opval) = newUNOP(OP_PREINC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; case 254: /* termunop: PREDEC term */ -#line 1516 "perly.y" +#line 1505 "perly.y" { (yyval.opval) = newUNOP(OP_PREDEC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; case 255: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */ -#line 1524 "perly.y" +#line 1513 "perly.y" { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; case 256: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1526 "perly.y" +#line 1515 "perly.y" { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; case 257: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */ -#line 1528 "perly.y" +#line 1517 "perly.y" { 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 258: /* anonymous: KW_SUB_anon startanonsub proto subattrlist */ -#line 1531 "perly.y" +#line 1520 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; case 259: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */ -#line 1533 "perly.y" +#line 1522 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); } break; case 260: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist */ -#line 1536 "perly.y" +#line 1525 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; case 261: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */ -#line 1538 "perly.y" +#line 1527 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); @@ -1705,103 +1694,103 @@ case 2: /* @1: %empty */ break; case 262: /* anonymous: KW_METHOD_anon startanonmethod subattrlist */ -#line 1543 "perly.y" +#line 1532 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; case 263: /* termdo: KW_DO term */ -#line 1548 "perly.y" +#line 1537 "perly.y" { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; case 264: /* termdo: KW_DO block */ -#line 1550 "perly.y" +#line 1539 "perly.y" { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; case 269: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */ -#line 1558 "perly.y" +#line 1547 "perly.y" { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 270: /* term: REFGEN term */ -#line 1560 "perly.y" +#line 1549 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; case 271: /* term: myattrterm */ -#line 1562 "perly.y" +#line 1551 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 272: /* term: KW_LOCAL term */ -#line 1564 "perly.y" +#line 1553 "perly.y" { (yyval.opval) = localize((ps[0].val.opval),0); } break; case 273: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1566 "perly.y" +#line 1555 "perly.y" { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 274: /* term: QWLIST */ -#line 1568 "perly.y" +#line 1557 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 275: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1570 "perly.y" +#line 1559 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); } break; case 276: /* term: scalar */ -#line 1572 "perly.y" +#line 1561 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 277: /* term: star */ -#line 1574 "perly.y" +#line 1563 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 278: /* term: hsh */ -#line 1576 "perly.y" +#line 1565 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 279: /* term: ary */ -#line 1578 "perly.y" +#line 1567 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 280: /* term: arylen */ -#line 1580 "perly.y" +#line 1569 "perly.y" { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} break; case 281: /* term: subscripted */ -#line 1582 "perly.y" +#line 1571 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 282: /* term: sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1584 "perly.y" +#line 1573 "perly.y" { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1815,7 +1804,7 @@ case 2: /* @1: %empty */ break; case 283: /* term: kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1594 "perly.y" +#line 1583 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, @@ -1829,7 +1818,7 @@ case 2: /* @1: %empty */ break; case 284: /* term: sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1604 "perly.y" +#line 1593 "perly.y" { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1843,7 +1832,7 @@ case 2: /* @1: %empty */ break; case 285: /* term: kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1614 "perly.y" +#line 1603 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, @@ -1857,26 +1846,26 @@ case 2: /* @1: %empty */ break; case 286: /* term: THING */ -#line 1624 "perly.y" +#line 1613 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 287: /* term: amper */ -#line 1626 "perly.y" +#line 1615 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; case 288: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1628 "perly.y" +#line 1617 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; case 289: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1631 "perly.y" +#line 1620 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); @@ -1885,7 +1874,7 @@ case 2: /* @1: %empty */ break; case 290: /* term: NOAMP subname optlistexpr */ -#line 1636 "perly.y" +#line 1625 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } @@ -1893,130 +1882,130 @@ case 2: /* @1: %empty */ break; case 291: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */ -#line 1640 "perly.y" +#line 1629 "perly.y" { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; case 292: /* term: term ARROW PERLY_SNAIL PERLY_STAR */ -#line 1642 "perly.y" +#line 1631 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; case 293: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */ -#line 1644 "perly.y" +#line 1633 "perly.y" { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; case 294: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */ -#line 1646 "perly.y" +#line 1635 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; case 295: /* term: term ARROW PERLY_STAR PERLY_STAR */ -#line 1649 "perly.y" +#line 1638 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; case 296: /* term: LOOPEX */ -#line 1651 "perly.y" +#line 1640 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; case 297: /* term: LOOPEX term */ -#line 1654 "perly.y" +#line 1643 "perly.y" { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; case 298: /* term: NOTOP listexpr */ -#line 1656 "perly.y" +#line 1645 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 299: /* term: UNIOP */ -#line 1658 "perly.y" +#line 1647 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 300: /* term: UNIOP block */ -#line 1660 "perly.y" +#line 1649 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 301: /* term: UNIOP term */ -#line 1662 "perly.y" +#line 1651 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 302: /* term: KW_REQUIRE */ -#line 1664 "perly.y" +#line 1653 "perly.y" { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; case 303: /* term: KW_REQUIRE term */ -#line 1666 "perly.y" +#line 1655 "perly.y" { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; case 304: /* term: UNIOPSUB */ -#line 1668 "perly.y" +#line 1657 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 305: /* term: UNIOPSUB term */ -#line 1670 "perly.y" +#line 1659 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; case 306: /* term: FUNC0 */ -#line 1673 "perly.y" +#line 1662 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 307: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1675 "perly.y" +#line 1664 "perly.y" { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; case 308: /* term: FUNC0OP */ -#line 1677 "perly.y" +#line 1666 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 309: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1679 "perly.y" +#line 1668 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; case 310: /* term: FUNC0SUB */ -#line 1681 "perly.y" +#line 1670 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 311: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1683 "perly.y" +#line 1672 "perly.y" { (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); } @@ -2024,13 +2013,13 @@ case 2: /* @1: %empty */ break; case 312: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1687 "perly.y" +#line 1676 "perly.y" { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 313: /* @23: %empty */ -#line 1689 "perly.y" +#line 1678 "perly.y" { if ( (ps[0].val.opval)->op_type != OP_TRANS && (ps[0].val.opval)->op_type != OP_TRANSR @@ -2045,67 +2034,67 @@ case 2: /* @1: %empty */ break; case 314: /* term: PMFUNC @23 SUBLEXSTART listexpr optrepl SUBLEXEND */ -#line 1700 "perly.y" +#line 1689 "perly.y" { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } break; case 318: /* myattrterm: KW_MY myterm myattrlist */ -#line 1709 "perly.y" +#line 1698 "perly.y" { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; case 319: /* myattrterm: KW_MY myterm */ -#line 1711 "perly.y" +#line 1700 "perly.y" { (yyval.opval) = localize((ps[0].val.opval),1); } break; case 320: /* myattrterm: KW_MY REFGEN myterm myattrlist */ -#line 1713 "perly.y" +#line 1702 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; case 321: /* myattrterm: KW_MY REFGEN term */ -#line 1715 "perly.y" +#line 1704 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; case 322: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1720 "perly.y" +#line 1709 "perly.y" { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 323: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1722 "perly.y" +#line 1711 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); } break; case 324: /* myterm: scalar */ -#line 1725 "perly.y" +#line 1714 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 325: /* myterm: hsh */ -#line 1727 "perly.y" +#line 1716 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 326: /* myterm: ary */ -#line 1729 "perly.y" +#line 1718 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 327: /* fieldvar: scalar */ -#line 1734 "perly.y" +#line 1723 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2114,7 +2103,7 @@ case 2: /* @1: %empty */ break; case 328: /* fieldvar: hsh */ -#line 1739 "perly.y" +#line 1728 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2123,7 +2112,7 @@ case 2: /* @1: %empty */ break; case 329: /* fieldvar: ary */ -#line 1744 "perly.y" +#line 1733 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2132,19 +2121,19 @@ case 2: /* @1: %empty */ break; case 330: /* optfieldattrlist: COLONATTR THING */ -#line 1752 "perly.y" +#line 1741 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 331: /* optfieldattrlist: COLONATTR */ -#line 1754 "perly.y" +#line 1743 "perly.y" { (yyval.opval) = NULL; } break; case 333: /* fielddecl: KW_FIELD fieldvar optfieldattrlist */ -#line 1760 "perly.y" +#line 1749 "perly.y" { parser->in_my = 0; if((ps[0].val.opval)) @@ -2155,7 +2144,7 @@ case 2: /* @1: %empty */ break; case 334: /* $@24: %empty */ -#line 1767 "perly.y" +#line 1756 "perly.y" { parser->in_my = 0; if((ps[-1].val.opval)) @@ -2167,7 +2156,7 @@ case 2: /* @1: %empty */ break; case 335: /* fielddecl: KW_FIELD fieldvar optfieldattrlist ASSIGNOP $@24 term */ -#line 1775 "perly.y" +#line 1764 "perly.y" { class_set_field_defop((PADNAME *)(ps[-4].val.pval), (ps[-2].val.ival), (ps[0].val.opval)); LEAVE; @@ -2177,25 +2166,25 @@ case 2: /* @1: %empty */ break; case 341: /* optrepl: PERLY_SLASH expr */ -#line 1795 "perly.y" +#line 1784 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 342: /* my_scalar: scalar */ -#line 1801 "perly.y" +#line 1790 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 343: /* list_of_scalars: list_of_scalars PERLY_COMMA */ -#line 1806 "perly.y" +#line 1795 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 344: /* list_of_scalars: list_of_scalars PERLY_COMMA scalar */ -#line 1808 "perly.y" +#line 1797 "perly.y" { (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval)); } @@ -2203,25 +2192,25 @@ case 2: /* @1: %empty */ break; case 346: /* my_list_of_scalars: list_of_scalars */ -#line 1815 "perly.y" +#line 1804 "perly.y" { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } break; case 354: /* amper: PERLY_AMPERSAND indirob */ -#line 1832 "perly.y" +#line 1821 "perly.y" { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } break; case 355: /* scalar: PERLY_DOLLAR indirob */ -#line 1836 "perly.y" +#line 1825 "perly.y" { (yyval.opval) = newSVREF((ps[0].val.opval)); } break; case 356: /* ary: PERLY_SNAIL indirob */ -#line 1840 "perly.y" +#line 1829 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } @@ -2229,7 +2218,7 @@ case 2: /* @1: %empty */ break; case 357: /* hsh: PERLY_PERCENT_SIGN indirob */ -#line 1846 "perly.y" +#line 1835 "perly.y" { (yyval.opval) = newHVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } @@ -2237,61 +2226,61 @@ case 2: /* @1: %empty */ break; case 358: /* arylen: DOLSHARP indirob */ -#line 1852 "perly.y" +#line 1841 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; case 359: /* arylen: term ARROW DOLSHARP PERLY_STAR */ -#line 1854 "perly.y" +#line 1843 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; case 360: /* star: PERLY_STAR indirob */ -#line 1858 "perly.y" +#line 1847 "perly.y" { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; case 362: /* sliceme: term ARROW PERLY_SNAIL */ -#line 1863 "perly.y" +#line 1852 "perly.y" { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; case 364: /* kvslice: term ARROW PERLY_PERCENT_SIGN */ -#line 1868 "perly.y" +#line 1857 "perly.y" { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; case 366: /* gelem: term ARROW PERLY_STAR */ -#line 1873 "perly.y" +#line 1862 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; case 367: /* indirob: BAREWORD */ -#line 1878 "perly.y" +#line 1867 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; case 368: /* indirob: scalar */ -#line 1880 "perly.y" +#line 1869 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; case 369: /* indirob: block */ -#line 1882 "perly.y" +#line 1871 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 370: /* indirob: PRIVATEREF */ -#line 1885 "perly.y" +#line 1874 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; @@ -2303,6 +2292,6 @@ case 2: /* @1: %empty */ /* Generated from: - * 9ffef3efd5a65fca775d13b8308b64ffc50a847af75bc45eccc2d5c30389ab24 perly.y + * 0ea5e16fd46e1f357915fea4dea06698c6f759773e1c1dc5d11f3370940ae8bb perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.h b/perly.h index 850b2b895a56..995a90446498 100644 --- a/perly.h +++ b/perly.h @@ -246,6 +246,6 @@ int yyparse (void); /* Generated from: - * 9ffef3efd5a65fca775d13b8308b64ffc50a847af75bc45eccc2d5c30389ab24 perly.y + * 0ea5e16fd46e1f357915fea4dea06698c6f759773e1c1dc5d11f3370940ae8bb perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.tab b/perly.tab index 943421a1214d..0d2016a090b7 100644 --- a/perly.tab +++ b/perly.tab @@ -359,43 +359,43 @@ static const yytype_uint8 yytranslate[] = static const yytype_int16 yyrline[] = { 0, 187, 187, 186, 198, 197, 208, 207, 221, 220, - 234, 233, 247, 246, 257, 256, 269, 278, 302, 296, - 324, 332, 340, 347, 360, 365, 355, 386, 399, 418, - 434, 430, 459, 481, 495, 511, 524, 538, 546, 569, - 564, 588, 586, 623, 620, 653, 650, 679, 674, 696, - 710, 727, 725, 743, 755, 770, 779, 781, 786, 794, - 798, 805, 810, 817, 823, 827, 829, 826, 836, 837, - 847, 848, 857, 861, 865, 872, 889, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, - 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, - 913, 917, 935, 936, 940, 944, 946, 948, 950, 952, - 954, 956, 959, 965, 966, 971, 982, 983, 988, 990, - 995, 1002, 1003, 1007, 1011, 1015, 1020, 1024, 1028, 1029, - 1032, 1038, 1043, 1048, 1054, 1055, 1060, 1061, 1066, 1067, - 1074, 1079, 1081, 1092, 1094, 1099, 1101, 1105, 1110, 1114, - 1122, 1127, 1135, 1137, 1142, 1144, 1152, 1153, 1154, 1159, - 1160, 1165, 1166, 1170, 1174, 1174, 1207, 1208, 1213, 1225, - 1226, 1231, 1230, 1243, 1245, 1247, 1249, 1251, 1255, 1257, - 1262, 1266, 1270, 1274, 1278, 1284, 1289, 1295, 1301, 1307, - 1313, 1315, 1317, 1320, 1319, 1333, 1334, 1338, 1342, 1345, - 1350, 1355, 1358, 1362, 1366, 1372, 1380, 1387, 1393, 1395, - 1397, 1402, 1404, 1406, 1408, 1410, 1412, 1417, 1419, 1421, - 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, - 1443, 1445, 1447, 1451, 1453, 1455, 1457, 1459, 1463, 1465, - 1469, 1471, 1473, 1475, 1479, 1481, 1486, 1488, 1491, 1493, - 1495, 1498, 1501, 1512, 1515, 1523, 1525, 1527, 1530, 1532, - 1535, 1537, 1542, 1547, 1549, 1553, 1554, 1555, 1556, 1557, - 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577, - 1579, 1581, 1583, 1593, 1603, 1613, 1623, 1625, 1627, 1630, - 1635, 1639, 1641, 1643, 1645, 1648, 1650, 1653, 1655, 1657, - 1659, 1661, 1663, 1665, 1667, 1669, 1672, 1674, 1676, 1678, - 1680, 1682, 1686, 1689, 1688, 1701, 1702, 1703, 1708, 1710, - 1712, 1714, 1719, 1721, 1724, 1726, 1728, 1733, 1738, 1743, - 1751, 1753, 1755, 1759, 1767, 1766, 1784, 1785, 1789, 1790, - 1794, 1795, 1800, 1805, 1807, 1811, 1814, 1818, 1819, 1820, - 1823, 1824, 1827, 1828, 1831, 1835, 1839, 1845, 1851, 1853, - 1857, 1861, 1862, 1866, 1867, 1871, 1872, 1877, 1879, 1881, - 1884 + 234, 233, 247, 246, 257, 256, 269, 278, 300, 294, + 318, 326, 334, 341, 354, 359, 349, 380, 393, 412, + 428, 424, 453, 475, 489, 505, 518, 532, 540, 561, + 556, 577, 575, 612, 609, 642, 639, 668, 663, 685, + 699, 716, 714, 732, 744, 759, 768, 770, 775, 783, + 787, 794, 799, 806, 812, 816, 818, 815, 825, 826, + 836, 837, 846, 850, 854, 861, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 906, 924, 925, 929, 933, 935, 937, 939, 941, + 943, 945, 948, 954, 955, 960, 971, 972, 977, 979, + 984, 991, 992, 996, 1000, 1004, 1009, 1013, 1017, 1018, + 1021, 1027, 1032, 1037, 1043, 1044, 1049, 1050, 1055, 1056, + 1063, 1068, 1070, 1081, 1083, 1088, 1090, 1094, 1099, 1103, + 1111, 1116, 1124, 1126, 1131, 1133, 1141, 1142, 1143, 1148, + 1149, 1154, 1155, 1159, 1163, 1163, 1196, 1197, 1202, 1214, + 1215, 1220, 1219, 1232, 1234, 1236, 1238, 1240, 1244, 1246, + 1251, 1255, 1259, 1263, 1267, 1273, 1278, 1284, 1290, 1296, + 1302, 1304, 1306, 1309, 1308, 1322, 1323, 1327, 1331, 1334, + 1339, 1344, 1347, 1351, 1355, 1361, 1369, 1376, 1382, 1384, + 1386, 1391, 1393, 1395, 1397, 1399, 1401, 1406, 1408, 1410, + 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, + 1432, 1434, 1436, 1440, 1442, 1444, 1446, 1448, 1452, 1454, + 1458, 1460, 1462, 1464, 1468, 1470, 1475, 1477, 1480, 1482, + 1484, 1487, 1490, 1501, 1504, 1512, 1514, 1516, 1519, 1521, + 1524, 1526, 1531, 1536, 1538, 1542, 1543, 1544, 1545, 1546, + 1548, 1550, 1552, 1554, 1556, 1558, 1560, 1562, 1564, 1566, + 1568, 1570, 1572, 1582, 1592, 1602, 1612, 1614, 1616, 1619, + 1624, 1628, 1630, 1632, 1634, 1637, 1639, 1642, 1644, 1646, + 1648, 1650, 1652, 1654, 1656, 1658, 1661, 1663, 1665, 1667, + 1669, 1671, 1675, 1678, 1677, 1690, 1691, 1692, 1697, 1699, + 1701, 1703, 1708, 1710, 1713, 1715, 1717, 1722, 1727, 1732, + 1740, 1742, 1744, 1748, 1756, 1755, 1773, 1774, 1778, 1779, + 1783, 1784, 1789, 1794, 1796, 1800, 1803, 1807, 1808, 1809, + 1812, 1813, 1816, 1817, 1820, 1824, 1828, 1834, 1840, 1842, + 1846, 1850, 1851, 1855, 1856, 1860, 1861, 1866, 1868, 1870, + 1873 }; #endif @@ -1673,6 +1673,6 @@ static const toketypes yy_type_tab[] = }; /* Generated from: - * 9ffef3efd5a65fca775d13b8308b64ffc50a847af75bc45eccc2d5c30389ab24 perly.y + * 0ea5e16fd46e1f357915fea4dea06698c6f759773e1c1dc5d11f3370940ae8bb perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.y b/perly.y index 53d4279b98b4..db5bb92ceba9 100644 --- a/perly.y +++ b/perly.y @@ -281,9 +281,7 @@ bare_statement_class_declaration subattrlist PERLY_SEMICOLON { - package($package); - if ($version) - package_version($version); + package ($package, $version); $$ = NULL; class_setup_stash(PL_curstash); if ($subattrlist) { @@ -300,11 +298,7 @@ bare_statement_class_definition PERLY_BRACE_OPEN remember { - package($package); - - if ($version) { - package_version($version); - } + package ($package, $version); class_setup_stash(PL_curstash); if ($subattrlist) { class_apply_attributes(PL_curstash, $subattrlist); @@ -553,9 +547,7 @@ bare_statement_package_declaration * When the parser pops them back out again they appear swapped */ { - package($package); - if ($version) - package_version($version); + package ($package, $version); $$ = NULL; } ; @@ -567,10 +559,7 @@ bare_statement_package_definition PERLY_BRACE_OPEN remember { - package($package); - if ($version) { - package_version($version); - } + package ($package, $version); } stmtseq PERLY_BRACE_CLOSE diff --git a/proto.h b/proto.h index c2908b823fc1..247108b89f69 100644 --- a/proto.h +++ b/proto.h @@ -3343,16 +3343,10 @@ Perl_opdump_printf(pTHX_ struct Perl_OpDumpContext *ctx, const char *pat, ...) assert(ctx); assert(pat) PERL_CALLCONV void -Perl_package(pTHX_ OP *o) +Perl_package(pTHX_ OP *name, OP *version) __attribute__visibility__("hidden"); #define PERL_ARGS_ASSERT_PACKAGE \ - assert(o) - -PERL_CALLCONV void -Perl_package_version(pTHX_ OP *v) - __attribute__visibility__("hidden"); -#define PERL_ARGS_ASSERT_PACKAGE_VERSION \ - assert(v) + assert(name) PERL_CALLCONV void Perl_packlist(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist); From b03c9cd51df77938b821551cdd5d5acf40df067c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branislav=20Zahradn=C3=ADk?= Date: Sat, 11 Oct 2025 08:44:35 +0200 Subject: [PATCH 2/2] [parser] new_block_statement - deduplicate "a block is a loop that happens once" --- embed.fnc | 3 + embed.h | 1 + op.c | 18 ++ perly.act | 561 +++++++++++++++++++++++++++--------------------------- perly.h | 2 +- perly.tab | 76 ++++---- perly.y | 9 +- proto.h | 6 + 8 files changed, 349 insertions(+), 327 deletions(-) diff --git a/embed.fnc b/embed.fnc index 064893a41bd9..1036d5cd605a 100644 --- a/embed.fnc +++ b/embed.fnc @@ -2289,6 +2289,9 @@ ARdp |OP * |newBINOP |I32 type \ |I32 flags \ |NULLOK OP *first \ |NULLOK OP *last +dp |OP * |new_block_statement \ + |NN OP *block \ + |NULLOK OP *cont ARdp |OP * |newCONDOP |I32 flags \ |NN OP *first \ |NULLOK OP *trueop \ diff --git a/embed.h b/embed.h index 2d937b5ccb91..2f690abbabac 100644 --- a/embed.h +++ b/embed.h @@ -1110,6 +1110,7 @@ # define newSVavdefelem(a,b,c) Perl_newSVavdefelem(aTHX_ a,b,c) # define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b) # define newXS_len_flags(a,b,c,d,e,f,g) Perl_newXS_len_flags(aTHX_ a,b,c,d,e,f,g) +# define new_block_statement(a,b) Perl_new_block_statement(aTHX_ a,b) # define nextargv(a,b) Perl_nextargv(aTHX_ a,b) # define no_bareword_filehandle(a) Perl_no_bareword_filehandle(aTHX_ a) # define noperl_die Perl_noperl_die diff --git a/op.c b/op.c index 502232ae42ec..4e302ccdca77 100644 --- a/op.c +++ b/op.c @@ -4700,6 +4700,24 @@ Perl_block_end(pTHX_ I32 floor, OP *seq) return retval; } +/* +=for apidoc new_block_statement + +Returns a C representing block as statement. +Block is a loop that happens once. + +Available since: v5.44 + +=cut +*/ + +OP* +Perl_new_block_statement (pTHX_ OP *block, OP *cont) +{ + PERL_ARGS_ASSERT_NEW_BLOCK_STATEMENT; + + return newWHILEOP (0, 1, NULL, NULL, block, cont, 0); +} /* =for apidoc_section $scope diff --git a/perly.act b/perly.act index 0ea5e1f40eb4..34bfba27efa2 100644 --- a/perly.act +++ b/perly.act @@ -143,14 +143,13 @@ case 2: /* @1: %empty */ case 16: /* bare_statement_block: block cont */ #line 271 "perly.y" { - /* a block is a loop that happens once */ - (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, (ps[-1].val.opval), (ps[0].val.opval), 0); + (yyval.opval) = new_block_statement ((ps[-1].val.opval), (ps[0].val.opval)); } break; case 17: /* bare_statement_class_declaration: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_SEMICOLON */ -#line 283 "perly.y" +#line 282 "perly.y" { package ((ps[-2].val.opval), (ps[-3].val.opval)); (yyval.opval) = NULL; @@ -163,7 +162,7 @@ case 2: /* @1: %empty */ break; case 18: /* $@8: %empty */ -#line 300 "perly.y" +#line 299 "perly.y" { package ((ps[-3].val.opval), (ps[-4].val.opval)); class_setup_stash(PL_curstash); @@ -175,10 +174,9 @@ case 2: /* @1: %empty */ break; case 19: /* bare_statement_class_definition: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_BRACE_OPEN remember $@8 stmtseq PERLY_BRACE_CLOSE */ -#line 309 "perly.y" +#line 308 "perly.y" { - /* a block is a loop that happens once */ - (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0); + (yyval.opval) = new_block_statement (block_end ((ps[-3].val.ival), (ps[-1].val.opval)), NULL); if (parser->copline > (line_t)(ps[-4].val.ival)) parser->copline = (line_t)(ps[-4].val.ival); } @@ -186,7 +184,7 @@ case 2: /* @1: %empty */ break; case 20: /* bare_statement_default: KW_DEFAULT block */ -#line 320 "perly.y" +#line 318 "perly.y" { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } @@ -194,7 +192,7 @@ case 2: /* @1: %empty */ break; case 21: /* bare_statement_defer: KW_DEFER mblock */ -#line 327 "perly.y" +#line 325 "perly.y" { (yyval.opval) = newDEFEROP(0, op_scope((ps[0].val.opval))); } @@ -202,7 +200,7 @@ case 2: /* @1: %empty */ break; case 22: /* bare_statement_expression: sideff PERLY_SEMICOLON */ -#line 335 "perly.y" +#line 333 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -210,7 +208,7 @@ case 2: /* @1: %empty */ break; case 23: /* bare_statement_field_declaration: fielddecl PERLY_SEMICOLON */ -#line 343 "perly.y" +#line 341 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -218,7 +216,7 @@ case 2: /* @1: %empty */ break; case 24: /* $@9: %empty */ -#line 354 "perly.y" +#line 352 "perly.y" { parser->expect = XTERM; } @@ -226,7 +224,7 @@ case 2: /* @1: %empty */ break; case 25: /* $@10: %empty */ -#line 359 "perly.y" +#line 357 "perly.y" { parser->expect = XTERM; } @@ -234,7 +232,7 @@ case 2: /* @1: %empty */ break; case 26: /* bare_statement_for: KW_FOR PERLY_PAREN_OPEN remember mnexpr PERLY_SEMICOLON $@9 texpr PERLY_SEMICOLON $@10 mintro mnexpr PERLY_PAREN_CLOSE mblock */ -#line 366 "perly.y" +#line 364 "perly.y" { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, NULL, scalar((ps[-6].val.opval)), (ps[0].val.opval), (ps[-2].val.opval), (ps[-3].val.ival)); @@ -253,7 +251,7 @@ case 2: /* @1: %empty */ break; case 27: /* bare_statement_for: KW_FOR KW_MY remember my_scalar PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 389 "perly.y" +#line 387 "perly.y" { (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); @@ -262,7 +260,7 @@ case 2: /* @1: %empty */ break; case 28: /* bare_statement_for: KW_FOR KW_MY remember PERLY_PAREN_OPEN my_list_of_scalars PERLY_PAREN_CLOSE PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 404 "perly.y" +#line 402 "perly.y" { if ((ps[-6].val.opval)->op_type == OP_PADSV) /* degenerate case of 1 var: for my ($x) .... @@ -275,7 +273,7 @@ case 2: /* @1: %empty */ break; case 29: /* bare_statement_for: KW_FOR scalar PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 420 "perly.y" +#line 418 "perly.y" { (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))); parser->copline = (line_t)(ps[-7].val.ival); @@ -284,7 +282,7 @@ case 2: /* @1: %empty */ break; case 30: /* @11: %empty */ -#line 428 "perly.y" +#line 426 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); @@ -293,7 +291,7 @@ case 2: /* @1: %empty */ break; case 31: /* bare_statement_for: KW_FOR my_refgen remember my_var @11 PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 437 "perly.y" +#line 435 "perly.y" { (yyval.opval) = block_end( (ps[-7].val.ival), @@ -314,7 +312,7 @@ case 2: /* @1: %empty */ break; case 32: /* bare_statement_for: KW_FOR REFGEN refgen_topic PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 462 "perly.y" +#line 460 "perly.y" { (yyval.opval) = block_end ( (ps[-4].val.ival), @@ -332,7 +330,7 @@ case 2: /* @1: %empty */ break; case 33: /* bare_statement_for: KW_FOR PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 482 "perly.y" +#line 480 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-6].val.ival); @@ -341,7 +339,7 @@ case 2: /* @1: %empty */ break; case 34: /* bare_statement_format: KW_FORMAT startformsub formname formblock */ -#line 493 "perly.y" +#line 491 "perly.y" { CV *fmtcv = PL_compcv; newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); @@ -355,7 +353,7 @@ case 2: /* @1: %empty */ break; case 35: /* bare_statement_given: KW_GIVEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */ -#line 511 "perly.y" +#line 509 "perly.y" { (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); @@ -364,7 +362,7 @@ case 2: /* @1: %empty */ break; case 36: /* bare_statement_if: KW_IF PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ -#line 525 "perly.y" +#line 523 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval))); parser->copline = (line_t)(ps[-6].val.ival); @@ -373,7 +371,7 @@ case 2: /* @1: %empty */ break; case 37: /* bare_statement_null: PERLY_SEMICOLON */ -#line 533 "perly.y" +#line 531 "perly.y" { (yyval.opval) = NULL; parser->copline = NOLINE; @@ -382,7 +380,7 @@ case 2: /* @1: %empty */ break; case 38: /* bare_statement_package_declaration: KW_PACKAGE BAREWORD BAREWORD PERLY_SEMICOLON */ -#line 549 "perly.y" +#line 547 "perly.y" { package ((ps[-1].val.opval), (ps[-2].val.opval)); (yyval.opval) = NULL; @@ -391,7 +389,7 @@ case 2: /* @1: %empty */ break; case 39: /* $@12: %empty */ -#line 561 "perly.y" +#line 559 "perly.y" { package ((ps[-2].val.opval), (ps[-3].val.opval)); } @@ -399,10 +397,9 @@ case 2: /* @1: %empty */ break; case 40: /* bare_statement_package_definition: KW_PACKAGE BAREWORD BAREWORD PERLY_BRACE_OPEN remember $@12 stmtseq PERLY_BRACE_CLOSE */ -#line 566 "perly.y" +#line 564 "perly.y" { - /* a block is a loop that happens once */ - (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0); + (yyval.opval) = new_block_statement (block_end ((ps[-3].val.ival), (ps[-1].val.opval)), NULL); if (parser->copline > (line_t)(ps[-4].val.ival)) parser->copline = (line_t)(ps[-4].val.ival); } @@ -410,7 +407,7 @@ case 2: /* @1: %empty */ break; case 41: /* $@13: %empty */ -#line 577 "perly.y" +#line 574 "perly.y" { switch((ps[-1].val.ival)) { case KEY_ADJUST: @@ -425,7 +422,7 @@ case 2: /* @1: %empty */ break; case 42: /* bare_statement_phaser: PHASER startsub $@13 optsubbody */ -#line 588 "perly.y" +#line 585 "perly.y" { OP *body = (ps[0].val.opval); SvREFCNT_inc_simple_void(PL_compcv); @@ -445,7 +442,7 @@ case 2: /* @1: %empty */ break; case 43: /* $@14: %empty */ -#line 612 "perly.y" +#line 609 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); if((ps[-2].val.ival) == KW_METHOD_named) { @@ -459,7 +456,7 @@ case 2: /* @1: %empty */ break; case 44: /* bare_statement_sub_signature: sigsub_or_method_named subname startsub $@14 subattrlist optsigsubbody */ -#line 623 "perly.y" +#line 620 "perly.y" { OP *body = (ps[0].val.opval); @@ -476,7 +473,7 @@ case 2: /* @1: %empty */ break; case 45: /* $@15: %empty */ -#line 642 "perly.y" +#line 639 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; @@ -486,7 +483,7 @@ case 2: /* @1: %empty */ break; case 46: /* bare_statement_sub_traditional: KW_SUB_named subname startsub $@15 proto subattrlist optsubbody */ -#line 650 "perly.y" +#line 647 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST @@ -501,7 +498,7 @@ case 2: /* @1: %empty */ break; case 47: /* $@16: %empty */ -#line 668 "perly.y" +#line 665 "perly.y" { if(!(ps[0].val.opval)) { yyerror("catch block requires a (VAR)"); @@ -512,7 +509,7 @@ case 2: /* @1: %empty */ break; case 48: /* bare_statement_try_catch: KW_TRY mblock KW_CATCH remember catch_paren $@16 mblock finally */ -#line 676 "perly.y" +#line 673 "perly.y" { (yyval.opval) = newTRYCATCHOP(0, (ps[-6].val.opval), (ps[-3].val.opval), block_end((ps[-4].val.ival), op_scope((ps[-1].val.opval)))); if((ps[0].val.opval)) @@ -523,7 +520,7 @@ case 2: /* @1: %empty */ break; case 49: /* bare_statement_unless: KW_UNLESS PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ -#line 692 "perly.y" +#line 689 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval)))); parser->copline = (line_t)(ps[-6].val.ival); @@ -532,7 +529,7 @@ case 2: /* @1: %empty */ break; case 50: /* bare_statement_until: KW_UNTIL PERLY_PAREN_OPEN remember iexpr PERLY_PAREN_CLOSE mintro mblock cont */ -#line 707 "perly.y" +#line 704 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); parser->copline = (line_t)(ps[-7].val.ival); @@ -541,13 +538,13 @@ case 2: /* @1: %empty */ break; case 51: /* $@17: %empty */ -#line 716 "perly.y" +#line 713 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; case 52: /* bare_statement_utilize: KW_USE_or_NO startsub $@17 BAREWORD BAREWORD optlistexpr PERLY_SEMICOLON */ -#line 723 "perly.y" +#line 720 "perly.y" { 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)); @@ -558,7 +555,7 @@ case 2: /* @1: %empty */ break; case 53: /* bare_statement_when: KW_WHEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */ -#line 738 "perly.y" +#line 735 "perly.y" { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } @@ -566,7 +563,7 @@ case 2: /* @1: %empty */ break; case 54: /* bare_statement_while: KW_WHILE PERLY_PAREN_OPEN remember texpr PERLY_PAREN_CLOSE mintro mblock cont */ -#line 752 "perly.y" +#line 749 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); parser->copline = (line_t)(ps[-7].val.ival); @@ -575,7 +572,7 @@ case 2: /* @1: %empty */ break; case 55: /* bare_statement_yadayada: YADAYADA PERLY_SEMICOLON */ -#line 760 "perly.y" +#line 757 "perly.y" { /* diag_listed_as: Unimplemented */ (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); @@ -584,19 +581,19 @@ case 2: /* @1: %empty */ break; case 56: /* sigsub_or_method_named: KW_SUB_named_sig */ -#line 769 "perly.y" +#line 766 "perly.y" { (yyval.ival) = KW_SUB_named_sig; } break; case 57: /* sigsub_or_method_named: KW_METHOD_named */ -#line 771 "perly.y" +#line 768 "perly.y" { (yyval.ival) = KW_METHOD_named; } break; case 58: /* block: PERLY_BRACE_OPEN remember stmtseq PERLY_BRACE_CLOSE */ -#line 776 "perly.y" +#line 773 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); @@ -605,13 +602,13 @@ case 2: /* @1: %empty */ break; case 59: /* empty: %empty */ -#line 783 "perly.y" +#line 780 "perly.y" { (yyval.opval) = NULL; } break; case 60: /* formblock: PERLY_EQUAL_SIGN remember PERLY_SEMICOLON FORMRBRACK formstmtseq PERLY_SEMICOLON PERLY_DOT */ -#line 788 "perly.y" +#line 785 "perly.y" { if (parser->copline > (line_t)(ps[-6].val.ival)) parser->copline = (line_t)(ps[-6].val.ival); (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval)); @@ -620,14 +617,14 @@ case 2: /* @1: %empty */ break; case 61: /* remember: %empty */ -#line 795 "perly.y" +#line 792 "perly.y" { (yyval.ival) = block_start(TRUE); parser->parsed_sub = 0; } break; case 62: /* mblock: PERLY_BRACE_OPEN mremember stmtseq PERLY_BRACE_CLOSE */ -#line 800 "perly.y" +#line 797 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); @@ -636,32 +633,32 @@ case 2: /* @1: %empty */ break; case 63: /* mremember: %empty */ -#line 807 "perly.y" +#line 804 "perly.y" { (yyval.ival) = block_start(FALSE); parser->parsed_sub = 0; } break; case 65: /* $@18: %empty */ -#line 816 "perly.y" +#line 813 "perly.y" { parser->in_my = KEY_catch; } break; case 66: /* $@19: %empty */ -#line 818 "perly.y" +#line 815 "perly.y" { parser->in_my = 0; intro_my(); } break; case 67: /* catch_paren: PERLY_PAREN_OPEN $@18 scalar $@19 PERLY_PAREN_CLOSE */ -#line 820 "perly.y" +#line 817 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; case 69: /* stmtseq: stmtseq fullstmt */ -#line 827 "perly.y" +#line 824 "perly.y" { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) @@ -671,7 +668,7 @@ case 2: /* @1: %empty */ break; case 71: /* formstmtseq: formstmtseq formline */ -#line 838 "perly.y" +#line 835 "perly.y" { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) @@ -681,7 +678,7 @@ case 2: /* @1: %empty */ break; case 72: /* fullstmt: barestmt */ -#line 847 "perly.y" +#line 844 "perly.y" { (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; } @@ -689,13 +686,13 @@ case 2: /* @1: %empty */ break; case 73: /* fullstmt: labfullstmt */ -#line 851 "perly.y" +#line 848 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 74: /* labfullstmt: LABEL barestmt */ -#line 855 "perly.y" +#line 852 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -706,7 +703,7 @@ case 2: /* @1: %empty */ break; case 75: /* labfullstmt: LABEL labfullstmt */ -#line 862 "perly.y" +#line 859 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -717,7 +714,7 @@ case 2: /* @1: %empty */ break; case 101: /* formline: THING formarg */ -#line 907 "perly.y" +#line 904 "perly.y" { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); @@ -736,62 +733,62 @@ case 2: /* @1: %empty */ break; case 103: /* formarg: FORMLBRACK stmtseq FORMRBRACK */ -#line 926 "perly.y" +#line 923 "perly.y" { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; case 105: /* sideff: error */ -#line 934 "perly.y" +#line 931 "perly.y" { (yyval.opval) = NULL; } break; case 106: /* sideff: expr */ -#line 936 "perly.y" +#line 933 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 107: /* sideff: expr KW_IF condition */ -#line 938 "perly.y" +#line 935 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 108: /* sideff: expr KW_UNLESS condition */ -#line 940 "perly.y" +#line 937 "perly.y" { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 109: /* sideff: expr KW_WHILE condition */ -#line 942 "perly.y" +#line 939 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; case 110: /* sideff: expr KW_UNTIL iexpr */ -#line 944 "perly.y" +#line 941 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 111: /* sideff: expr KW_FOR condition */ -#line 946 "perly.y" +#line 943 "perly.y" { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); parser->copline = (line_t)(ps[-1].val.ival); } break; case 112: /* sideff: expr KW_WHEN condition */ -#line 949 "perly.y" +#line 946 "perly.y" { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } break; case 114: /* else: KW_ELSE mblock */ -#line 956 "perly.y" +#line 953 "perly.y" { ((ps[0].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = op_scope((ps[0].val.opval)); @@ -800,7 +797,7 @@ case 2: /* @1: %empty */ break; case 115: /* else: KW_ELSIF PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock else */ -#line 961 "perly.y" +#line 958 "perly.y" { parser->copline = (line_t)(ps[-5].val.ival); (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), @@ -811,25 +808,25 @@ case 2: /* @1: %empty */ break; case 117: /* cont: KW_CONTINUE block */ -#line 973 "perly.y" +#line 970 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 118: /* finally: %empty */ -#line 978 "perly.y" +#line 975 "perly.y" { (yyval.opval) = NULL; } break; case 119: /* finally: KW_FINALLY block */ -#line 980 "perly.y" +#line 977 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 120: /* mintro: %empty */ -#line 985 "perly.y" +#line 982 "perly.y" { (yyval.ival) = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); } @@ -837,7 +834,7 @@ case 2: /* @1: %empty */ break; case 123: /* texpr: %empty */ -#line 997 "perly.y" +#line 994 "perly.y" { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; } @@ -845,59 +842,59 @@ case 2: /* @1: %empty */ break; case 125: /* iexpr: expr */ -#line 1005 "perly.y" +#line 1002 "perly.y" { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; case 126: /* mexpr: expr */ -#line 1010 "perly.y" +#line 1007 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 127: /* mnexpr: nexpr */ -#line 1014 "perly.y" +#line 1011 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 128: /* formname: BAREWORD */ -#line 1017 "perly.y" +#line 1014 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 130: /* startsub: %empty */ -#line 1022 "perly.y" +#line 1019 "perly.y" { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } break; case 131: /* startanonsub: %empty */ -#line 1028 "perly.y" +#line 1025 "perly.y" { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } break; case 132: /* startanonmethod: %empty */ -#line 1033 "perly.y" +#line 1030 "perly.y" { (yyval.ival) = start_subparse(FALSE, CVf_ANON|CVf_IsMETHOD); SAVEFREESV(PL_compcv); } break; case 133: /* startformsub: %empty */ -#line 1038 "perly.y" +#line 1035 "perly.y" { (yyval.ival) = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } break; case 139: /* subattrlist: COLONATTR THING */ -#line 1057 "perly.y" +#line 1054 "perly.y" { OP *attrlist = (ps[0].val.opval); if(attrlist && !PL_parser->sig_seen) @@ -908,49 +905,49 @@ case 2: /* @1: %empty */ break; case 140: /* subattrlist: COLONATTR */ -#line 1064 "perly.y" +#line 1061 "perly.y" { (yyval.opval) = NULL; } break; case 141: /* myattrlist: COLONATTR THING */ -#line 1069 "perly.y" +#line 1066 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 142: /* myattrlist: COLONATTR */ -#line 1071 "perly.y" +#line 1068 "perly.y" { (yyval.opval) = NULL; } break; case 143: /* sigvar: %empty */ -#line 1082 "perly.y" +#line 1079 "perly.y" { parser->in_my = 0; (yyval.ival) = 0; } break; case 144: /* sigvar: PRIVATEREF */ -#line 1084 "perly.y" +#line 1081 "perly.y" { parser->in_my = 0; (yyval.ival) = (ps[0].val.opval)->op_targ; op_free((ps[0].val.opval)); } break; case 145: /* sigslurpsigil: PERLY_SNAIL */ -#line 1089 "perly.y" +#line 1086 "perly.y" { (yyval.ival) = '@'; } break; case 146: /* sigslurpsigil: PERLY_PERCENT_SIGN */ -#line 1091 "perly.y" +#line 1088 "perly.y" { (yyval.ival) = '%'; } break; case 147: /* sigslurpelem: sigslurpsigil sigvar */ -#line 1095 "perly.y" +#line 1092 "perly.y" { subsignature_append_slurpy((ps[-1].val.ival), (ps[0].val.ival)); (yyval.opval) = NULL; @@ -959,7 +956,7 @@ case 2: /* @1: %empty */ break; case 148: /* sigslurpelem: sigslurpsigil sigvar ASSIGNOP */ -#line 1100 "perly.y" +#line 1097 "perly.y" { yyerror("A slurpy parameter may not have a default value"); } @@ -967,7 +964,7 @@ case 2: /* @1: %empty */ break; case 149: /* sigslurpelem: sigslurpsigil sigvar ASSIGNOP term */ -#line 1104 "perly.y" +#line 1101 "perly.y" { yyerror("A slurpy parameter may not have a default value"); } @@ -975,7 +972,7 @@ case 2: /* @1: %empty */ break; case 150: /* sigscalarelem: PERLY_DOLLAR sigvar */ -#line 1112 "perly.y" +#line 1109 "perly.y" { subsignature_append_positional((ps[0].val.ival), 0, NULL); (yyval.opval) = NULL; @@ -984,7 +981,7 @@ case 2: /* @1: %empty */ break; case 151: /* sigscalarelem: PERLY_DOLLAR sigvar ASSIGNOP optsigscalardefault */ -#line 1117 "perly.y" +#line 1114 "perly.y" { subsignature_append_positional((ps[-2].val.ival), (ps[-1].val.ival), (ps[0].val.opval)); (yyval.opval) = NULL; @@ -993,31 +990,31 @@ case 2: /* @1: %empty */ break; case 152: /* optsigscalardefault: %empty */ -#line 1125 "perly.y" +#line 1122 "perly.y" { (yyval.opval) = newOP(OP_NULL, 0); } break; case 154: /* sigelem: sigscalarelem */ -#line 1132 "perly.y" +#line 1129 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 155: /* sigelem: sigslurpelem */ -#line 1134 "perly.y" +#line 1131 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 163: /* subsignature: PERLY_PAREN_OPEN subsigguts PERLY_PAREN_CLOSE */ -#line 1160 "perly.y" +#line 1157 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 164: /* $@20: %empty */ -#line 1163 "perly.y" +#line 1160 "perly.y" { ENTER; subsignature_start(); @@ -1027,7 +1024,7 @@ case 2: /* @1: %empty */ break; case 165: /* subsigguts: $@20 optsiglist */ -#line 1169 "perly.y" +#line 1166 "perly.y" { if (!FEATURE_SIGNATURES_IS_ENABLED && !CvIsMETHOD(PL_compcv)) croak("Experimental " @@ -1055,13 +1052,13 @@ case 2: /* @1: %empty */ break; case 167: /* optsubbody: PERLY_SEMICOLON */ -#line 1197 "perly.y" +#line 1194 "perly.y" { (yyval.opval) = NULL; } break; case 168: /* subbody: remember PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE */ -#line 1203 "perly.y" +#line 1200 "perly.y" { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); @@ -1071,19 +1068,19 @@ case 2: /* @1: %empty */ break; case 170: /* optsigsubbody: PERLY_SEMICOLON */ -#line 1215 "perly.y" +#line 1212 "perly.y" { (yyval.opval) = NULL; } break; case 171: /* $@21: %empty */ -#line 1220 "perly.y" +#line 1217 "perly.y" { PL_parser->sig_seen = FALSE; } break; case 172: /* sigsubbody: remember optsubsignature PERLY_BRACE_OPEN $@21 stmtseq PERLY_BRACE_CLOSE */ -#line 1222 "perly.y" +#line 1219 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); @@ -1094,37 +1091,37 @@ case 2: /* @1: %empty */ break; case 173: /* expr: expr ANDOP expr */ -#line 1233 "perly.y" +#line 1230 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 174: /* expr: expr PLUGIN_LOGICAL_AND_LOW_OP expr */ -#line 1235 "perly.y" +#line 1232 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 175: /* expr: expr OROP expr */ -#line 1237 "perly.y" +#line 1234 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 176: /* expr: expr PLUGIN_LOGICAL_OR_LOW_OP expr */ -#line 1239 "perly.y" +#line 1236 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 178: /* listexpr: listexpr PERLY_COMMA */ -#line 1245 "perly.y" +#line 1242 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 179: /* listexpr: listexpr PERLY_COMMA term */ -#line 1247 "perly.y" +#line 1244 "perly.y" { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); @@ -1133,7 +1130,7 @@ case 2: /* @1: %empty */ break; case 181: /* listop: LSTOP indirob listexpr */ -#line 1256 "perly.y" +#line 1253 "perly.y" { (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)) ); } @@ -1141,7 +1138,7 @@ case 2: /* @1: %empty */ break; case 182: /* listop: BLKLSTOP block listexpr */ -#line 1260 "perly.y" +#line 1257 "perly.y" { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newUNOP(OP_NULL, 0, op_scope((ps[-1].val.opval))), (ps[0].val.opval)) ); } @@ -1149,7 +1146,7 @@ case 2: /* @1: %empty */ break; case 183: /* listop: FUNC PERLY_PAREN_OPEN indirob expr PERLY_PAREN_CLOSE */ -#line 1264 "perly.y" +#line 1261 "perly.y" { (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)) ); } @@ -1157,7 +1154,7 @@ case 2: /* @1: %empty */ break; case 184: /* listop: term ARROW methodname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1268 "perly.y" +#line 1265 "perly.y" { (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)), @@ -1167,7 +1164,7 @@ case 2: /* @1: %empty */ break; case 185: /* listop: term ARROW methodname */ -#line 1274 "perly.y" +#line 1271 "perly.y" { (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)))); @@ -1176,7 +1173,7 @@ case 2: /* @1: %empty */ break; case 186: /* listop: term ARROW PERLY_AMPERSAND subname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1279 "perly.y" +#line 1276 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, scalar((ps[-6].val.opval)), (ps[-1].val.opval)), @@ -1186,7 +1183,7 @@ case 2: /* @1: %empty */ break; case 187: /* listop: term ARROW PERLY_AMPERSAND subname */ -#line 1285 "perly.y" +#line 1282 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, scalar((ps[-3].val.opval)), @@ -1196,7 +1193,7 @@ case 2: /* @1: %empty */ break; case 188: /* listop: METHCALL0 indirob optlistexpr */ -#line 1291 "perly.y" +#line 1288 "perly.y" { (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)), @@ -1206,7 +1203,7 @@ case 2: /* @1: %empty */ break; case 189: /* listop: METHCALL indirob PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1297 "perly.y" +#line 1294 "perly.y" { (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)), @@ -1216,25 +1213,25 @@ case 2: /* @1: %empty */ break; case 190: /* listop: LSTOP optlistexpr */ -#line 1303 "perly.y" +#line 1300 "perly.y" { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 191: /* listop: FUNC PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1305 "perly.y" +#line 1302 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 192: /* listop: FUNC SUBLEXSTART optexpr SUBLEXEND */ -#line 1307 "perly.y" +#line 1304 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 193: /* @22: %empty */ -#line 1309 "perly.y" +#line 1306 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); /* prevent double op_free() if the following fails to parse */ @@ -1244,7 +1241,7 @@ case 2: /* @1: %empty */ break; case 194: /* listop: LSTOPSUB startanonsub block @22 optlistexpr */ -#line 1315 "perly.y" +#line 1312 "perly.y" { (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))); @@ -1253,20 +1250,20 @@ case 2: /* @1: %empty */ break; case 197: /* subscripted: gelem PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1330 "perly.y" +#line 1327 "perly.y" { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; case 198: /* subscripted: scalar PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1332 "perly.y" +#line 1329 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; case 199: /* subscripted: term ARROW PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1335 "perly.y" +#line 1332 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1275,7 +1272,7 @@ case 2: /* @1: %empty */ break; case 200: /* subscripted: subscripted PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1340 "perly.y" +#line 1337 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1284,14 +1281,14 @@ case 2: /* @1: %empty */ break; case 201: /* subscripted: scalar PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1345 "perly.y" +#line 1342 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; case 202: /* subscripted: term ARROW PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1348 "perly.y" +#line 1345 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } @@ -1299,7 +1296,7 @@ case 2: /* @1: %empty */ break; case 203: /* subscripted: subscripted PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1352 "perly.y" +#line 1349 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } @@ -1307,7 +1304,7 @@ case 2: /* @1: %empty */ break; case 204: /* subscripted: term ARROW PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1356 "perly.y" +#line 1353 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); if (parser->expect == XBLOCK) @@ -1317,7 +1314,7 @@ case 2: /* @1: %empty */ break; case 205: /* subscripted: term ARROW PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1362 "perly.y" +#line 1359 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-4].val.opval))))); @@ -1328,7 +1325,7 @@ case 2: /* @1: %empty */ break; case 206: /* subscripted: subscripted PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1370 "perly.y" +#line 1367 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-3].val.opval))))); @@ -1339,7 +1336,7 @@ case 2: /* @1: %empty */ break; case 207: /* subscripted: subscripted PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1377 "perly.y" +#line 1374 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); if (parser->expect == XBLOCK) @@ -1349,55 +1346,55 @@ case 2: /* @1: %empty */ break; case 208: /* subscripted: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1383 "perly.y" +#line 1380 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; case 209: /* subscripted: QWLIST PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1385 "perly.y" +#line 1382 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; case 210: /* subscripted: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1387 "perly.y" +#line 1384 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; case 211: /* termbinop: term PLUGIN_HIGH_OP term */ -#line 1392 "perly.y" +#line 1389 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 212: /* termbinop: term ASSIGNOP term */ -#line 1394 "perly.y" +#line 1391 "perly.y" { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; case 213: /* termbinop: term PLUGIN_ASSIGN_OP term */ -#line 1396 "perly.y" +#line 1393 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 214: /* termbinop: term POWOP term */ -#line 1398 "perly.y" +#line 1395 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 215: /* termbinop: term PLUGIN_POW_OP term */ -#line 1400 "perly.y" +#line 1397 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 216: /* termbinop: term MULOP term */ -#line 1402 "perly.y" +#line 1399 "perly.y" { 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))); @@ -1406,219 +1403,219 @@ case 2: /* @1: %empty */ break; case 217: /* termbinop: term PLUGIN_MUL_OP term */ -#line 1407 "perly.y" +#line 1404 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 218: /* termbinop: term ADDOP term */ -#line 1409 "perly.y" +#line 1406 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 219: /* termbinop: term PLUGIN_ADD_OP term */ -#line 1411 "perly.y" +#line 1408 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 220: /* termbinop: term SHIFTOP term */ -#line 1413 "perly.y" +#line 1410 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 221: /* termbinop: termrelop */ -#line 1415 "perly.y" +#line 1412 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 222: /* termbinop: termeqop */ -#line 1417 "perly.y" +#line 1414 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 223: /* termbinop: term BITANDOP term */ -#line 1419 "perly.y" +#line 1416 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 224: /* termbinop: term BITOROP term */ -#line 1421 "perly.y" +#line 1418 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 225: /* termbinop: term DOTDOT term */ -#line 1423 "perly.y" +#line 1420 "perly.y" { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 226: /* termbinop: term ANDAND term */ -#line 1425 "perly.y" +#line 1422 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 227: /* termbinop: term PLUGIN_LOGICAL_AND_OP term */ -#line 1427 "perly.y" +#line 1424 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 228: /* termbinop: term OROR term */ -#line 1429 "perly.y" +#line 1426 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 229: /* termbinop: term PLUGIN_LOGICAL_OR_OP term */ -#line 1431 "perly.y" +#line 1428 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 230: /* termbinop: term DORDOR term */ -#line 1433 "perly.y" +#line 1430 "perly.y" { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 231: /* termbinop: term MATCHOP term */ -#line 1435 "perly.y" +#line 1432 "perly.y" { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 232: /* termbinop: term PLUGIN_LOW_OP term */ -#line 1437 "perly.y" +#line 1434 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 233: /* termrelop: relopchain */ -#line 1441 "perly.y" +#line 1438 "perly.y" { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 234: /* termrelop: term NCRELOP term */ -#line 1443 "perly.y" +#line 1440 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 235: /* termrelop: termrelop NCRELOP */ -#line 1445 "perly.y" +#line 1442 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 236: /* termrelop: termrelop CHRELOP */ -#line 1447 "perly.y" +#line 1444 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 237: /* termrelop: term PLUGIN_REL_OP term */ -#line 1449 "perly.y" +#line 1446 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 238: /* relopchain: term CHRELOP term */ -#line 1453 "perly.y" +#line 1450 "perly.y" { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 239: /* relopchain: relopchain CHRELOP term */ -#line 1455 "perly.y" +#line 1452 "perly.y" { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 240: /* termeqop: eqopchain */ -#line 1459 "perly.y" +#line 1456 "perly.y" { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 241: /* termeqop: term NCEQOP term */ -#line 1461 "perly.y" +#line 1458 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 242: /* termeqop: termeqop NCEQOP */ -#line 1463 "perly.y" +#line 1460 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 243: /* termeqop: termeqop CHEQOP */ -#line 1465 "perly.y" +#line 1462 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 244: /* eqopchain: term CHEQOP term */ -#line 1469 "perly.y" +#line 1466 "perly.y" { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 245: /* eqopchain: eqopchain CHEQOP term */ -#line 1471 "perly.y" +#line 1468 "perly.y" { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 246: /* termunop: PERLY_MINUS term */ -#line 1476 "perly.y" +#line 1473 "perly.y" { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; case 247: /* termunop: PERLY_PLUS term */ -#line 1478 "perly.y" +#line 1475 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 248: /* termunop: PERLY_EXCLAMATION_MARK term */ -#line 1481 "perly.y" +#line 1478 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 249: /* termunop: PERLY_TILDE term */ -#line 1483 "perly.y" +#line 1480 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } break; case 250: /* termunop: term POSTINC */ -#line 1485 "perly.y" +#line 1482 "perly.y" { (yyval.opval) = newUNOP(OP_POSTINC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; case 251: /* termunop: term POSTDEC */ -#line 1488 "perly.y" +#line 1485 "perly.y" { (yyval.opval) = newUNOP(OP_POSTDEC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; case 252: /* termunop: term POSTJOIN */ -#line 1491 "perly.y" +#line 1488 "perly.y" { (yyval.opval) = op_convert_list(OP_JOIN, 0, op_append_elem( OP_LIST, @@ -1633,59 +1630,59 @@ case 2: /* @1: %empty */ break; case 253: /* termunop: PREINC term */ -#line 1502 "perly.y" +#line 1499 "perly.y" { (yyval.opval) = newUNOP(OP_PREINC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; case 254: /* termunop: PREDEC term */ -#line 1505 "perly.y" +#line 1502 "perly.y" { (yyval.opval) = newUNOP(OP_PREDEC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; case 255: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */ -#line 1513 "perly.y" +#line 1510 "perly.y" { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; case 256: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1515 "perly.y" +#line 1512 "perly.y" { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; case 257: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */ -#line 1517 "perly.y" +#line 1514 "perly.y" { 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 258: /* anonymous: KW_SUB_anon startanonsub proto subattrlist */ -#line 1520 "perly.y" +#line 1517 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; case 259: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */ -#line 1522 "perly.y" +#line 1519 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); } break; case 260: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist */ -#line 1525 "perly.y" +#line 1522 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; case 261: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */ -#line 1527 "perly.y" +#line 1524 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); @@ -1694,103 +1691,103 @@ case 2: /* @1: %empty */ break; case 262: /* anonymous: KW_METHOD_anon startanonmethod subattrlist */ -#line 1532 "perly.y" +#line 1529 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; case 263: /* termdo: KW_DO term */ -#line 1537 "perly.y" +#line 1534 "perly.y" { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; case 264: /* termdo: KW_DO block */ -#line 1539 "perly.y" +#line 1536 "perly.y" { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; case 269: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */ -#line 1547 "perly.y" +#line 1544 "perly.y" { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 270: /* term: REFGEN term */ -#line 1549 "perly.y" +#line 1546 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; case 271: /* term: myattrterm */ -#line 1551 "perly.y" +#line 1548 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 272: /* term: KW_LOCAL term */ -#line 1553 "perly.y" +#line 1550 "perly.y" { (yyval.opval) = localize((ps[0].val.opval),0); } break; case 273: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1555 "perly.y" +#line 1552 "perly.y" { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 274: /* term: QWLIST */ -#line 1557 "perly.y" +#line 1554 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 275: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1559 "perly.y" +#line 1556 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); } break; case 276: /* term: scalar */ -#line 1561 "perly.y" +#line 1558 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 277: /* term: star */ -#line 1563 "perly.y" +#line 1560 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 278: /* term: hsh */ -#line 1565 "perly.y" +#line 1562 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 279: /* term: ary */ -#line 1567 "perly.y" +#line 1564 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 280: /* term: arylen */ -#line 1569 "perly.y" +#line 1566 "perly.y" { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} break; case 281: /* term: subscripted */ -#line 1571 "perly.y" +#line 1568 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 282: /* term: sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1573 "perly.y" +#line 1570 "perly.y" { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1804,7 +1801,7 @@ case 2: /* @1: %empty */ break; case 283: /* term: kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1583 "perly.y" +#line 1580 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, @@ -1818,7 +1815,7 @@ case 2: /* @1: %empty */ break; case 284: /* term: sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1593 "perly.y" +#line 1590 "perly.y" { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1832,7 +1829,7 @@ case 2: /* @1: %empty */ break; case 285: /* term: kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1603 "perly.y" +#line 1600 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, @@ -1846,26 +1843,26 @@ case 2: /* @1: %empty */ break; case 286: /* term: THING */ -#line 1613 "perly.y" +#line 1610 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 287: /* term: amper */ -#line 1615 "perly.y" +#line 1612 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; case 288: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1617 "perly.y" +#line 1614 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; case 289: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1620 "perly.y" +#line 1617 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); @@ -1874,7 +1871,7 @@ case 2: /* @1: %empty */ break; case 290: /* term: NOAMP subname optlistexpr */ -#line 1625 "perly.y" +#line 1622 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } @@ -1882,130 +1879,130 @@ case 2: /* @1: %empty */ break; case 291: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */ -#line 1629 "perly.y" +#line 1626 "perly.y" { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; case 292: /* term: term ARROW PERLY_SNAIL PERLY_STAR */ -#line 1631 "perly.y" +#line 1628 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; case 293: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */ -#line 1633 "perly.y" +#line 1630 "perly.y" { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; case 294: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */ -#line 1635 "perly.y" +#line 1632 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; case 295: /* term: term ARROW PERLY_STAR PERLY_STAR */ -#line 1638 "perly.y" +#line 1635 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; case 296: /* term: LOOPEX */ -#line 1640 "perly.y" +#line 1637 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; case 297: /* term: LOOPEX term */ -#line 1643 "perly.y" +#line 1640 "perly.y" { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; case 298: /* term: NOTOP listexpr */ -#line 1645 "perly.y" +#line 1642 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 299: /* term: UNIOP */ -#line 1647 "perly.y" +#line 1644 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 300: /* term: UNIOP block */ -#line 1649 "perly.y" +#line 1646 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 301: /* term: UNIOP term */ -#line 1651 "perly.y" +#line 1648 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 302: /* term: KW_REQUIRE */ -#line 1653 "perly.y" +#line 1650 "perly.y" { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; case 303: /* term: KW_REQUIRE term */ -#line 1655 "perly.y" +#line 1652 "perly.y" { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; case 304: /* term: UNIOPSUB */ -#line 1657 "perly.y" +#line 1654 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 305: /* term: UNIOPSUB term */ -#line 1659 "perly.y" +#line 1656 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; case 306: /* term: FUNC0 */ -#line 1662 "perly.y" +#line 1659 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 307: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1664 "perly.y" +#line 1661 "perly.y" { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; case 308: /* term: FUNC0OP */ -#line 1666 "perly.y" +#line 1663 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 309: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1668 "perly.y" +#line 1665 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; case 310: /* term: FUNC0SUB */ -#line 1670 "perly.y" +#line 1667 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 311: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1672 "perly.y" +#line 1669 "perly.y" { (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); } @@ -2013,13 +2010,13 @@ case 2: /* @1: %empty */ break; case 312: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1676 "perly.y" +#line 1673 "perly.y" { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 313: /* @23: %empty */ -#line 1678 "perly.y" +#line 1675 "perly.y" { if ( (ps[0].val.opval)->op_type != OP_TRANS && (ps[0].val.opval)->op_type != OP_TRANSR @@ -2034,67 +2031,67 @@ case 2: /* @1: %empty */ break; case 314: /* term: PMFUNC @23 SUBLEXSTART listexpr optrepl SUBLEXEND */ -#line 1689 "perly.y" +#line 1686 "perly.y" { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } break; case 318: /* myattrterm: KW_MY myterm myattrlist */ -#line 1698 "perly.y" +#line 1695 "perly.y" { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; case 319: /* myattrterm: KW_MY myterm */ -#line 1700 "perly.y" +#line 1697 "perly.y" { (yyval.opval) = localize((ps[0].val.opval),1); } break; case 320: /* myattrterm: KW_MY REFGEN myterm myattrlist */ -#line 1702 "perly.y" +#line 1699 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; case 321: /* myattrterm: KW_MY REFGEN term */ -#line 1704 "perly.y" +#line 1701 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; case 322: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1709 "perly.y" +#line 1706 "perly.y" { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 323: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1711 "perly.y" +#line 1708 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); } break; case 324: /* myterm: scalar */ -#line 1714 "perly.y" +#line 1711 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 325: /* myterm: hsh */ -#line 1716 "perly.y" +#line 1713 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 326: /* myterm: ary */ -#line 1718 "perly.y" +#line 1715 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 327: /* fieldvar: scalar */ -#line 1723 "perly.y" +#line 1720 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2103,7 +2100,7 @@ case 2: /* @1: %empty */ break; case 328: /* fieldvar: hsh */ -#line 1728 "perly.y" +#line 1725 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2112,7 +2109,7 @@ case 2: /* @1: %empty */ break; case 329: /* fieldvar: ary */ -#line 1733 "perly.y" +#line 1730 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2121,19 +2118,19 @@ case 2: /* @1: %empty */ break; case 330: /* optfieldattrlist: COLONATTR THING */ -#line 1741 "perly.y" +#line 1738 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 331: /* optfieldattrlist: COLONATTR */ -#line 1743 "perly.y" +#line 1740 "perly.y" { (yyval.opval) = NULL; } break; case 333: /* fielddecl: KW_FIELD fieldvar optfieldattrlist */ -#line 1749 "perly.y" +#line 1746 "perly.y" { parser->in_my = 0; if((ps[0].val.opval)) @@ -2144,7 +2141,7 @@ case 2: /* @1: %empty */ break; case 334: /* $@24: %empty */ -#line 1756 "perly.y" +#line 1753 "perly.y" { parser->in_my = 0; if((ps[-1].val.opval)) @@ -2156,7 +2153,7 @@ case 2: /* @1: %empty */ break; case 335: /* fielddecl: KW_FIELD fieldvar optfieldattrlist ASSIGNOP $@24 term */ -#line 1764 "perly.y" +#line 1761 "perly.y" { class_set_field_defop((PADNAME *)(ps[-4].val.pval), (ps[-2].val.ival), (ps[0].val.opval)); LEAVE; @@ -2166,25 +2163,25 @@ case 2: /* @1: %empty */ break; case 341: /* optrepl: PERLY_SLASH expr */ -#line 1784 "perly.y" +#line 1781 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 342: /* my_scalar: scalar */ -#line 1790 "perly.y" +#line 1787 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 343: /* list_of_scalars: list_of_scalars PERLY_COMMA */ -#line 1795 "perly.y" +#line 1792 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 344: /* list_of_scalars: list_of_scalars PERLY_COMMA scalar */ -#line 1797 "perly.y" +#line 1794 "perly.y" { (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval)); } @@ -2192,25 +2189,25 @@ case 2: /* @1: %empty */ break; case 346: /* my_list_of_scalars: list_of_scalars */ -#line 1804 "perly.y" +#line 1801 "perly.y" { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } break; case 354: /* amper: PERLY_AMPERSAND indirob */ -#line 1821 "perly.y" +#line 1818 "perly.y" { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } break; case 355: /* scalar: PERLY_DOLLAR indirob */ -#line 1825 "perly.y" +#line 1822 "perly.y" { (yyval.opval) = newSVREF((ps[0].val.opval)); } break; case 356: /* ary: PERLY_SNAIL indirob */ -#line 1829 "perly.y" +#line 1826 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } @@ -2218,7 +2215,7 @@ case 2: /* @1: %empty */ break; case 357: /* hsh: PERLY_PERCENT_SIGN indirob */ -#line 1835 "perly.y" +#line 1832 "perly.y" { (yyval.opval) = newHVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } @@ -2226,61 +2223,61 @@ case 2: /* @1: %empty */ break; case 358: /* arylen: DOLSHARP indirob */ -#line 1841 "perly.y" +#line 1838 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; case 359: /* arylen: term ARROW DOLSHARP PERLY_STAR */ -#line 1843 "perly.y" +#line 1840 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; case 360: /* star: PERLY_STAR indirob */ -#line 1847 "perly.y" +#line 1844 "perly.y" { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; case 362: /* sliceme: term ARROW PERLY_SNAIL */ -#line 1852 "perly.y" +#line 1849 "perly.y" { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; case 364: /* kvslice: term ARROW PERLY_PERCENT_SIGN */ -#line 1857 "perly.y" +#line 1854 "perly.y" { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; case 366: /* gelem: term ARROW PERLY_STAR */ -#line 1862 "perly.y" +#line 1859 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; case 367: /* indirob: BAREWORD */ -#line 1867 "perly.y" +#line 1864 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; case 368: /* indirob: scalar */ -#line 1869 "perly.y" +#line 1866 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; case 369: /* indirob: block */ -#line 1871 "perly.y" +#line 1868 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 370: /* indirob: PRIVATEREF */ -#line 1874 "perly.y" +#line 1871 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; @@ -2292,6 +2289,6 @@ case 2: /* @1: %empty */ /* Generated from: - * 0ea5e16fd46e1f357915fea4dea06698c6f759773e1c1dc5d11f3370940ae8bb perly.y + * 518d99fb6b32e38f3b668033ccd9846a65b84d5b9381db7009114282219cbe63 perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.h b/perly.h index 995a90446498..e7373ad33149 100644 --- a/perly.h +++ b/perly.h @@ -246,6 +246,6 @@ int yyparse (void); /* Generated from: - * 0ea5e16fd46e1f357915fea4dea06698c6f759773e1c1dc5d11f3370940ae8bb perly.y + * 518d99fb6b32e38f3b668033ccd9846a65b84d5b9381db7009114282219cbe63 perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.tab b/perly.tab index 0d2016a090b7..71029d5f59d1 100644 --- a/perly.tab +++ b/perly.tab @@ -359,43 +359,43 @@ static const yytype_uint8 yytranslate[] = static const yytype_int16 yyrline[] = { 0, 187, 187, 186, 198, 197, 208, 207, 221, 220, - 234, 233, 247, 246, 257, 256, 269, 278, 300, 294, - 318, 326, 334, 341, 354, 359, 349, 380, 393, 412, - 428, 424, 453, 475, 489, 505, 518, 532, 540, 561, - 556, 577, 575, 612, 609, 642, 639, 668, 663, 685, - 699, 716, 714, 732, 744, 759, 768, 770, 775, 783, - 787, 794, 799, 806, 812, 816, 818, 815, 825, 826, - 836, 837, 846, 850, 854, 861, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, - 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, - 902, 906, 924, 925, 929, 933, 935, 937, 939, 941, - 943, 945, 948, 954, 955, 960, 971, 972, 977, 979, - 984, 991, 992, 996, 1000, 1004, 1009, 1013, 1017, 1018, - 1021, 1027, 1032, 1037, 1043, 1044, 1049, 1050, 1055, 1056, - 1063, 1068, 1070, 1081, 1083, 1088, 1090, 1094, 1099, 1103, - 1111, 1116, 1124, 1126, 1131, 1133, 1141, 1142, 1143, 1148, - 1149, 1154, 1155, 1159, 1163, 1163, 1196, 1197, 1202, 1214, - 1215, 1220, 1219, 1232, 1234, 1236, 1238, 1240, 1244, 1246, - 1251, 1255, 1259, 1263, 1267, 1273, 1278, 1284, 1290, 1296, - 1302, 1304, 1306, 1309, 1308, 1322, 1323, 1327, 1331, 1334, - 1339, 1344, 1347, 1351, 1355, 1361, 1369, 1376, 1382, 1384, - 1386, 1391, 1393, 1395, 1397, 1399, 1401, 1406, 1408, 1410, - 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, - 1432, 1434, 1436, 1440, 1442, 1444, 1446, 1448, 1452, 1454, - 1458, 1460, 1462, 1464, 1468, 1470, 1475, 1477, 1480, 1482, - 1484, 1487, 1490, 1501, 1504, 1512, 1514, 1516, 1519, 1521, - 1524, 1526, 1531, 1536, 1538, 1542, 1543, 1544, 1545, 1546, - 1548, 1550, 1552, 1554, 1556, 1558, 1560, 1562, 1564, 1566, - 1568, 1570, 1572, 1582, 1592, 1602, 1612, 1614, 1616, 1619, - 1624, 1628, 1630, 1632, 1634, 1637, 1639, 1642, 1644, 1646, - 1648, 1650, 1652, 1654, 1656, 1658, 1661, 1663, 1665, 1667, - 1669, 1671, 1675, 1678, 1677, 1690, 1691, 1692, 1697, 1699, - 1701, 1703, 1708, 1710, 1713, 1715, 1717, 1722, 1727, 1732, - 1740, 1742, 1744, 1748, 1756, 1755, 1773, 1774, 1778, 1779, - 1783, 1784, 1789, 1794, 1796, 1800, 1803, 1807, 1808, 1809, - 1812, 1813, 1816, 1817, 1820, 1824, 1828, 1834, 1840, 1842, - 1846, 1850, 1851, 1855, 1856, 1860, 1861, 1866, 1868, 1870, - 1873 + 234, 233, 247, 246, 257, 256, 269, 277, 299, 293, + 316, 324, 332, 339, 352, 357, 347, 378, 391, 410, + 426, 422, 451, 473, 487, 503, 516, 530, 538, 559, + 554, 574, 572, 609, 606, 639, 636, 665, 660, 682, + 696, 713, 711, 729, 741, 756, 765, 767, 772, 780, + 784, 791, 796, 803, 809, 813, 815, 812, 822, 823, + 833, 834, 843, 847, 851, 858, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 903, 921, 922, 926, 930, 932, 934, 936, 938, + 940, 942, 945, 951, 952, 957, 968, 969, 974, 976, + 981, 988, 989, 993, 997, 1001, 1006, 1010, 1014, 1015, + 1018, 1024, 1029, 1034, 1040, 1041, 1046, 1047, 1052, 1053, + 1060, 1065, 1067, 1078, 1080, 1085, 1087, 1091, 1096, 1100, + 1108, 1113, 1121, 1123, 1128, 1130, 1138, 1139, 1140, 1145, + 1146, 1151, 1152, 1156, 1160, 1160, 1193, 1194, 1199, 1211, + 1212, 1217, 1216, 1229, 1231, 1233, 1235, 1237, 1241, 1243, + 1248, 1252, 1256, 1260, 1264, 1270, 1275, 1281, 1287, 1293, + 1299, 1301, 1303, 1306, 1305, 1319, 1320, 1324, 1328, 1331, + 1336, 1341, 1344, 1348, 1352, 1358, 1366, 1373, 1379, 1381, + 1383, 1388, 1390, 1392, 1394, 1396, 1398, 1403, 1405, 1407, + 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, + 1429, 1431, 1433, 1437, 1439, 1441, 1443, 1445, 1449, 1451, + 1455, 1457, 1459, 1461, 1465, 1467, 1472, 1474, 1477, 1479, + 1481, 1484, 1487, 1498, 1501, 1509, 1511, 1513, 1516, 1518, + 1521, 1523, 1528, 1533, 1535, 1539, 1540, 1541, 1542, 1543, + 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, + 1565, 1567, 1569, 1579, 1589, 1599, 1609, 1611, 1613, 1616, + 1621, 1625, 1627, 1629, 1631, 1634, 1636, 1639, 1641, 1643, + 1645, 1647, 1649, 1651, 1653, 1655, 1658, 1660, 1662, 1664, + 1666, 1668, 1672, 1675, 1674, 1687, 1688, 1689, 1694, 1696, + 1698, 1700, 1705, 1707, 1710, 1712, 1714, 1719, 1724, 1729, + 1737, 1739, 1741, 1745, 1753, 1752, 1770, 1771, 1775, 1776, + 1780, 1781, 1786, 1791, 1793, 1797, 1800, 1804, 1805, 1806, + 1809, 1810, 1813, 1814, 1817, 1821, 1825, 1831, 1837, 1839, + 1843, 1847, 1848, 1852, 1853, 1857, 1858, 1863, 1865, 1867, + 1870 }; #endif @@ -1673,6 +1673,6 @@ static const toketypes yy_type_tab[] = }; /* Generated from: - * 0ea5e16fd46e1f357915fea4dea06698c6f759773e1c1dc5d11f3370940ae8bb perly.y + * 518d99fb6b32e38f3b668033ccd9846a65b84d5b9381db7009114282219cbe63 perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.y b/perly.y index db5bb92ceba9..723d287a32e2 100644 --- a/perly.y +++ b/perly.y @@ -269,8 +269,7 @@ bare_statement_block : block cont { - /* a block is a loop that happens once */ - $$ = newWHILEOP(0, 1, NULL, NULL, $block, $cont, 0); + $$ = new_block_statement ($block, $cont); } ; @@ -307,8 +306,7 @@ bare_statement_class_definition stmtseq PERLY_BRACE_CLOSE { - /* a block is a loop that happens once */ - $$ = newWHILEOP(0, 1, NULL, NULL, block_end($remember, $stmtseq), NULL, 0); + $$ = new_block_statement (block_end ($remember, $stmtseq), NULL); if (parser->copline > (line_t)$PERLY_BRACE_OPEN) parser->copline = (line_t)$PERLY_BRACE_OPEN; } @@ -564,8 +562,7 @@ bare_statement_package_definition stmtseq PERLY_BRACE_CLOSE { - /* a block is a loop that happens once */ - $$ = newWHILEOP(0, 1, NULL, NULL, block_end($remember, $stmtseq), NULL, 0); + $$ = new_block_statement (block_end ($remember, $stmtseq), NULL); if (parser->copline > (line_t)$PERLY_BRACE_OPEN) parser->copline = (line_t)$PERLY_BRACE_OPEN; } diff --git a/proto.h b/proto.h index 247108b89f69..30070f5dfbc9 100644 --- a/proto.h +++ b/proto.h @@ -3173,6 +3173,12 @@ Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, XSUBADDR_t subaddr, con #define PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS \ assert(subaddr) +PERL_CALLCONV OP * +Perl_new_block_statement(pTHX_ OP *block, OP *cont) + __attribute__visibility__("hidden"); +#define PERL_ARGS_ASSERT_NEW_BLOCK_STATEMENT \ + assert(block) + PERL_CALLCONV PERL_SI * Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems) __attribute__warn_unused_result__;