perl/perly.act
Paul "LeoNerd" Evans da6c78e212 Allow multivariable foreach to use refaliases
As noted by https://github.com/Perl/perl5/issues/24027, while multivar
foreach and refalias foreach have each been available separately for
some time now, it wasn't possible to combine the two until now.

This current implementation does have limits on the number of variables
in total are allowed in a multivariable foreach loop if any are
refaliases (no more than 256), and which ones can be refaliases (none
past the 24th) that are all to do with the way I am abusing the U32
`op_targ` field to store the variable count in the lower 8 bits, and a
bitmask of which vars are refaliases in the upper 24 bits. I decided to
do that as it means I don't have to make the `OP_ITER` op any larger -
such as by expanding it to an UNOP_AUX to give it that extra storage
space. In practice I don't imagine those limits will be a problem for
any practical use-case.

If in a future version we did want to expand on those limits, I think it
would be possible by moving the `refalias_mask` storage to a PV stored
in the UNOP_AUX vector, or somesuch.
2026-01-22 00:07:41 +00:00

2321 lines
66 KiB
C
Generated

/* -*- mode: C; buffer-read-only: t -*-
!!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by regen_perly.pl from perly.y.
Any changes made here will be lost!
*/
case 2: /* @1: %empty */
#line 188 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
}
break;
case 3: /* grammar: GRAMPROG @1 remember stmtseq */
#line 193 "perly.y"
{
newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval)));
PL_compiling.cop_seq = 0;
(yyval.ival) = 0;
}
break;
case 4: /* @2: %empty */
#line 199 "perly.y"
{
parser->expect = XTERM;
(yyval.ival) = 0;
}
break;
case 5: /* grammar: GRAMEXPR @2 optexpr */
#line 204 "perly.y"
{
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
}
break;
case 6: /* @3: %empty */
#line 209 "perly.y"
{
parser->expect = XBLOCK;
(yyval.ival) = 0;
}
break;
case 7: /* grammar: GRAMBLOCK @3 block */
#line 214 "perly.y"
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
yyunlex();
parser->yychar = yytoken = YYEOF;
}
break;
case 8: /* @4: %empty */
#line 222 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
}
break;
case 9: /* grammar: GRAMBARESTMT @4 barestmt */
#line 227 "perly.y"
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
yyunlex();
parser->yychar = yytoken = YYEOF;
}
break;
case 10: /* @5: %empty */
#line 235 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
}
break;
case 11: /* grammar: GRAMFULLSTMT @5 fullstmt */
#line 240 "perly.y"
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
yyunlex();
parser->yychar = yytoken = YYEOF;
}
break;
case 12: /* @6: %empty */
#line 248 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
}
break;
case 13: /* grammar: GRAMSTMTSEQ @6 stmtseq */
#line 253 "perly.y"
{
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
}
break;
case 14: /* @7: %empty */
#line 258 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
}
break;
case 15: /* grammar: GRAMSUBSIGNATURE @7 subsigguts */
#line 263 "perly.y"
{
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
}
break;
case 16: /* bare_statement_block: block cont */
#line 272 "perly.y"
{
(yyval.opval) = new_block_statement ((ps[-1].val.opval), (ps[0].val.opval));
}
break;
case 17: /* bare_statement_class_declaration: KW_CLASS BAREWORD BAREWORD optattrlist PERLY_SEMICOLON */
#line 283 "perly.y"
{
package ((ps[-2].val.opval), (ps[-3].val.opval));
(yyval.opval) = NULL;
class_setup_stash(PL_curstash);
if ((ps[-1].val.opval)) {
class_apply_attributes(PL_curstash, (ps[-1].val.opval));
}
}
break;
case 18: /* $@8: %empty */
#line 300 "perly.y"
{
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));
}
}
break;
case 19: /* bare_statement_class_definition: KW_CLASS BAREWORD BAREWORD optattrlist PERLY_BRACE_OPEN remember $@8 stmtseq PERLY_BRACE_CLOSE */
#line 309 "perly.y"
{
(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);
}
break;
case 20: /* bare_statement_default: KW_DEFAULT block */
#line 319 "perly.y"
{
(yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval)));
}
break;
case 21: /* bare_statement_defer: KW_DEFER mblock */
#line 326 "perly.y"
{
(yyval.opval) = newDEFEROP(0, op_scope((ps[0].val.opval)));
}
break;
case 22: /* bare_statement_expression: sideff PERLY_SEMICOLON */
#line 334 "perly.y"
{
(yyval.opval) = (ps[-1].val.opval);
}
break;
case 23: /* bare_statement_field_declaration: fielddecl PERLY_SEMICOLON */
#line 342 "perly.y"
{
(yyval.opval) = (ps[-1].val.opval);
}
break;
case 24: /* $@9: %empty */
#line 353 "perly.y"
{
parser->expect = XTERM;
}
break;
case 25: /* $@10: %empty */
#line 358 "perly.y"
{
parser->expect = XTERM;
}
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 365 "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));
if (initop) {
forop = op_prepend_elem(
OP_LINESEQ,
initop,
op_append_elem(OP_LINESEQ, newOP(OP_UNSTACK, OPf_SPECIAL), forop)
);
}
PL_hints |= HINT_BLOCK_SCOPE;
(yyval.opval) = block_end((ps[-10].val.ival), forop);
parser->copline = (line_t)(ps[-12].val.ival);
}
break;
case 27: /* bare_statement_for: KW_FOR KW_MY remember my_scalar PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */
#line 388 "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);
}
break;
case 28: /* bare_statement_for: KW_FOR KW_MY remember PERLY_PAREN_OPEN my_list_of_itervars PERLY_PAREN_CLOSE PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */
#line 403 "perly.y"
{
if ((ps[-6].val.opval)->op_type == OP_PADSV)
/* degenerate case of 1 var: for my ($x) ....
Flag it so it can be special-cased in newFOROP */
(ps[-6].val.opval)->op_flags |= OPf_PARENS;
(yyval.opval) = block_end((ps[-8].val.ival), newFOROP(0, (ps[-6].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
parser->copline = (line_t)(ps[-10].val.ival);
}
break;
case 29: /* bare_statement_for: KW_FOR scalar PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */
#line 419 "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);
}
break;
case 30: /* @11: %empty */
#line 427 "perly.y"
{
parser->in_my = 0;
(yyval.opval) = my((ps[0].val.opval));
}
break;
case 31: /* bare_statement_for: KW_FOR my_refgen remember my_var @11 PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */
#line 436 "perly.y"
{
(yyval.opval) = block_end(
(ps[-7].val.ival),
newFOROP(
0,
op_lvalue(
newUNOP(OP_REFGEN, 0, (ps[-5].val.opval)),
OP_ENTERLOOP
),
(ps[-3].val.opval),
(ps[-1].val.opval),
(ps[0].val.opval)
)
);
parser->copline = (line_t)(ps[-9].val.ival);
}
break;
case 32: /* bare_statement_for: KW_FOR REFGEN refgen_topic PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */
#line 461 "perly.y"
{
(yyval.opval) = block_end (
(ps[-4].val.ival),
newFOROP (
0,
op_lvalue (newUNOP(OP_REFGEN, 0, (ps[-6].val.opval)), OP_ENTERLOOP),
(ps[-3].val.opval),
(ps[-1].val.opval),
(ps[0].val.opval)
)
);
parser->copline = (line_t)(ps[-8].val.ival);
}
break;
case 33: /* bare_statement_for: KW_FOR PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */
#line 481 "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);
}
break;
case 34: /* bare_statement_format: KW_FORMAT startformsub formname formblock */
#line 492 "perly.y"
{
CV *fmtcv = PL_compcv;
newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval));
if (CvOUTSIDE(fmtcv) && !CvEVAL(CvOUTSIDE(fmtcv))) {
pad_add_weakref(fmtcv);
}
parser->parsed_sub = 1;
(yyval.opval) = NULL;
}
break;
case 35: /* bare_statement_given: KW_GIVEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */
#line 510 "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);
}
break;
case 36: /* bare_statement_if: KW_IF PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */
#line 524 "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);
}
break;
case 37: /* bare_statement_null: PERLY_SEMICOLON */
#line 532 "perly.y"
{
(yyval.opval) = NULL;
parser->copline = NOLINE;
}
break;
case 38: /* bare_statement_package_declaration: KW_PACKAGE BAREWORD BAREWORD PERLY_SEMICOLON */
#line 548 "perly.y"
{
package ((ps[-1].val.opval), (ps[-2].val.opval));
(yyval.opval) = NULL;
}
break;
case 39: /* $@12: %empty */
#line 560 "perly.y"
{
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 565 "perly.y"
{
(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);
}
break;
case 41: /* $@13: %empty */
#line 575 "perly.y"
{
switch((ps[-1].val.ival)) {
case KEY_ADJUST:
croak_kw_unless_class("ADJUST");
class_prepare_method_parse(PL_compcv);
break;
default:
NOT_REACHED;
}
}
break;
case 42: /* bare_statement_phaser: PHASER startsub $@13 optsubbody */
#line 586 "perly.y"
{
OP *body = (ps[0].val.opval);
SvREFCNT_inc_simple_void(PL_compcv);
CV *cv;
switch((ps[-3].val.ival)) {
case KEY_ADJUST:
cv = newATTRSUB((ps[-2].val.ival), NULL, NULL, NULL, body);
class_add_ADJUST(PL_curstash, cv);
break;
}
(yyval.opval) = NULL;
parser->parsed_sub = 1;
}
break;
case 43: /* $@14: %empty */
#line 610 "perly.y"
{
init_named_cv(PL_compcv, (ps[-1].val.opval));
if((ps[-2].val.ival) == KW_METHOD_named) {
croak_kw_unless_class("method");
class_prepare_method_parse(PL_compcv);
}
parser->in_my = 0;
parser->in_my_stash = NULL;
}
break;
case 44: /* bare_statement_sub_signature: sigsub_or_method_named subname startsub $@14 subattrlist optsigsubbody */
#line 621 "perly.y"
{
OP *body = (ps[0].val.opval);
SvREFCNT_inc_simple_void(PL_compcv);
(ps[-4].val.opval)->op_type == OP_CONST
? newATTRSUB((ps[-3].val.ival), (ps[-4].val.opval), NULL, (ps[-1].val.opval), body)
: newMYSUB( (ps[-3].val.ival), (ps[-4].val.opval), NULL, (ps[-1].val.opval), body)
;
intro_my();
parser->parsed_sub = 1;
(yyval.opval) = NULL;
}
break;
case 45: /* $@15: %empty */
#line 640 "perly.y"
{
init_named_cv(PL_compcv, (ps[-1].val.opval));
parser->in_my = 0;
parser->in_my_stash = NULL;
}
break;
case 46: /* bare_statement_sub_traditional: KW_SUB_named subname startsub $@15 proto subattrlist optsubbody */
#line 648 "perly.y"
{
SvREFCNT_inc_simple_void(PL_compcv);
(ps[-5].val.opval)->op_type == OP_CONST
? newATTRSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval))
: newMYSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval))
;
intro_my();
parser->parsed_sub = 1;
(yyval.opval) = NULL;
}
break;
case 47: /* $@16: %empty */
#line 666 "perly.y"
{
if(!(ps[0].val.opval)) {
yyerror("catch block requires a (VAR)");
YYERROR;
}
}
break;
case 48: /* bare_statement_try_catch: KW_TRY mblock KW_CATCH remember catch_paren $@16 mblock finally */
#line 674 "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))
(yyval.opval) = op_wrap_finally((yyval.opval), (ps[0].val.opval));
parser->copline = (line_t)(ps[-7].val.ival);
}
break;
case 49: /* bare_statement_unless: KW_UNLESS PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */
#line 690 "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);
}
break;
case 50: /* bare_statement_until: KW_UNTIL PERLY_PAREN_OPEN remember iexpr PERLY_PAREN_CLOSE mintro mblock cont */
#line 705 "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);
}
break;
case 51: /* $@17: %empty */
#line 714 "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 721 "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));
parser->parsed_sub = 1;
(yyval.opval) = NULL;
}
break;
case 53: /* bare_statement_when: KW_WHEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */
#line 736 "perly.y"
{
(yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval))));
}
break;
case 54: /* bare_statement_while: KW_WHILE PERLY_PAREN_OPEN remember texpr PERLY_PAREN_CLOSE mintro mblock cont */
#line 750 "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);
}
break;
case 55: /* bare_statement_yadayada: YADAYADA PERLY_SEMICOLON */
#line 758 "perly.y"
{
/* diag_listed_as: Unimplemented */
(yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
}
break;
case 56: /* sigsub_or_method_named: KW_SUB_named_sig */
#line 767 "perly.y"
{ (yyval.ival) = KW_SUB_named_sig; }
break;
case 57: /* sigsub_or_method_named: KW_METHOD_named */
#line 769 "perly.y"
{ (yyval.ival) = KW_METHOD_named; }
break;
case 58: /* block: PERLY_BRACE_OPEN remember stmtseq PERLY_BRACE_CLOSE */
#line 774 "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));
}
break;
case 59: /* empty: %empty */
#line 781 "perly.y"
{ (yyval.opval) = NULL; }
break;
case 60: /* formblock: PERLY_EQUAL_SIGN remember PERLY_SEMICOLON FORMRBRACK formstmtseq PERLY_SEMICOLON PERLY_DOT */
#line 786 "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));
}
break;
case 61: /* remember: %empty */
#line 793 "perly.y"
{ (yyval.ival) = block_start(TRUE);
parser->parsed_sub = 0; }
break;
case 62: /* mblock: PERLY_BRACE_OPEN mremember stmtseq PERLY_BRACE_CLOSE */
#line 798 "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));
}
break;
case 63: /* mremember: %empty */
#line 805 "perly.y"
{ (yyval.ival) = block_start(FALSE);
parser->parsed_sub = 0; }
break;
case 65: /* $@18: %empty */
#line 814 "perly.y"
{ parser->in_my = KEY_catch; }
break;
case 66: /* $@19: %empty */
#line 816 "perly.y"
{ parser->in_my = 0; intro_my(); }
break;
case 67: /* catch_paren: PERLY_PAREN_OPEN $@18 scalar $@19 PERLY_PAREN_CLOSE */
#line 818 "perly.y"
{ (yyval.opval) = (ps[-2].val.opval); }
break;
case 69: /* stmtseq: stmtseq fullstmt */
#line 825 "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))
PL_hints |= HINT_BLOCK_SCOPE;
}
break;
case 71: /* formstmtseq: formstmtseq formline */
#line 836 "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))
PL_hints |= HINT_BLOCK_SCOPE;
}
break;
case 72: /* fullstmt: barestmt */
#line 845 "perly.y"
{
(yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL;
}
break;
case 73: /* fullstmt: labfullstmt */
#line 849 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 74: /* labfullstmt: LABEL barestmt */
#line 853 "perly.y"
{
SV *label = cSVOPx_sv((ps[-1].val.opval));
(yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8,
savepv(SvPVX_const(label)), (ps[0].val.opval));
op_free((ps[-1].val.opval));
}
break;
case 75: /* labfullstmt: LABEL labfullstmt */
#line 860 "perly.y"
{
SV *label = cSVOPx_sv((ps[-1].val.opval));
(yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8,
savepv(SvPVX_const(label)), (ps[0].val.opval));
op_free((ps[-1].val.opval));
}
break;
case 101: /* formline: THING formarg */
#line 905 "perly.y"
{ OP *list;
if ((ps[0].val.opval)) {
OP *term = (ps[0].val.opval);
list = op_append_elem(OP_LIST, (ps[-1].val.opval), term);
}
else {
list = (ps[-1].val.opval);
}
if (parser->copline == NOLINE)
parser->copline = CopLINE(PL_curcop)-1;
else parser->copline--;
(yyval.opval) = newSTATEOP(0, NULL,
op_convert_list(OP_FORMLINE, 0, list));
}
break;
case 103: /* formarg: FORMLBRACK stmtseq FORMRBRACK */
#line 924 "perly.y"
{ (yyval.opval) = op_unscope((ps[-1].val.opval)); }
break;
case 105: /* sideff: error */
#line 932 "perly.y"
{ (yyval.opval) = NULL; }
break;
case 106: /* sideff: expr */
#line 934 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 107: /* sideff: expr KW_IF condition */
#line 936 "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 938 "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 940 "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 942 "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 944 "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 947 "perly.y"
{ (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); }
break;
case 114: /* else: KW_ELSE mblock */
#line 954 "perly.y"
{
((ps[0].val.opval))->op_flags |= OPf_PARENS;
(yyval.opval) = op_scope((ps[0].val.opval));
}
break;
case 115: /* else: KW_ELSIF PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock else */
#line 959 "perly.y"
{ parser->copline = (line_t)(ps[-5].val.ival);
(yyval.opval) = newCONDOP(0,
newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)),
op_scope((ps[-1].val.opval)), (ps[0].val.opval));
PL_hints |= HINT_BLOCK_SCOPE;
}
break;
case 117: /* cont: KW_CONTINUE block */
#line 971 "perly.y"
{ (yyval.opval) = op_scope((ps[0].val.opval)); }
break;
case 118: /* finally: %empty */
#line 976 "perly.y"
{ (yyval.opval) = NULL; }
break;
case 119: /* finally: KW_FINALLY block */
#line 978 "perly.y"
{ (yyval.opval) = op_scope((ps[0].val.opval)); }
break;
case 120: /* mintro: %empty */
#line 983 "perly.y"
{ (yyval.ival) = (PL_min_intro_pending &&
PL_max_intro_pending >= PL_min_intro_pending);
intro_my(); }
break;
case 123: /* texpr: %empty */
#line 995 "perly.y"
{ YYSTYPE tmplval;
(void)scan_num("1", &tmplval);
(yyval.opval) = tmplval.opval; }
break;
case 125: /* iexpr: expr */
#line 1003 "perly.y"
{ (yyval.opval) = invert(scalar((ps[0].val.opval))); }
break;
case 126: /* mexpr: expr */
#line 1008 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); intro_my(); }
break;
case 127: /* mnexpr: nexpr */
#line 1012 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); intro_my(); }
break;
case 128: /* formname: BAREWORD */
#line 1015 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 130: /* startsub: %empty */
#line 1020 "perly.y"
{ (yyval.ival) = start_subparse(FALSE, 0);
SAVEFREESV(PL_compcv); }
break;
case 131: /* startanonsub: %empty */
#line 1026 "perly.y"
{ (yyval.ival) = start_subparse(FALSE, CVf_ANON);
SAVEFREESV(PL_compcv); }
break;
case 132: /* startanonmethod: %empty */
#line 1031 "perly.y"
{ (yyval.ival) = start_subparse(FALSE, CVf_ANON|CVf_IsMETHOD);
SAVEFREESV(PL_compcv); }
break;
case 133: /* startformsub: %empty */
#line 1036 "perly.y"
{ (yyval.ival) = start_subparse(TRUE, 0);
SAVEFREESV(PL_compcv); }
break;
case 139: /* subattrlist: COLONATTR ATTRLIST */
#line 1055 "perly.y"
{
OP *attrlist = (ps[0].val.opval);
if(attrlist && !PL_parser->sig_seen)
attrlist = apply_builtin_cv_attributes(PL_compcv, attrlist);
(yyval.opval) = attrlist;
}
break;
case 140: /* subattrlist: COLONATTR */
#line 1062 "perly.y"
{ (yyval.opval) = NULL; }
break;
case 141: /* attrlist: COLONATTR ATTRLIST */
#line 1067 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 142: /* attrlist: COLONATTR */
#line 1069 "perly.y"
{ (yyval.opval) = NULL; }
break;
case 145: /* sigvar: %empty */
#line 1084 "perly.y"
{ parser->in_my = 0; (yyval.ival) = 0; }
break;
case 146: /* sigvar: PRIVATEREF */
#line 1086 "perly.y"
{ parser->in_my = 0; (yyval.ival) = (ps[0].val.opval)->op_targ; op_free((ps[0].val.opval)); }
break;
case 147: /* sigslurpsigil: PERLY_SNAIL */
#line 1091 "perly.y"
{ (yyval.ival) = '@'; }
break;
case 148: /* sigslurpsigil: PERLY_PERCENT_SIGN */
#line 1093 "perly.y"
{ (yyval.ival) = '%'; }
break;
case 149: /* sigslurpelem: sigslurpsigil sigvar */
#line 1097 "perly.y"
{
subsignature_append_slurpy((ps[-1].val.ival), (ps[0].val.ival));
(yyval.opval) = NULL;
}
break;
case 150: /* sigslurpelem: sigslurpsigil sigvar ASSIGNOP */
#line 1102 "perly.y"
{
yyerror("A slurpy parameter may not have a default value");
}
break;
case 151: /* sigslurpelem: sigslurpsigil sigvar ASSIGNOP term */
#line 1106 "perly.y"
{
yyerror("A slurpy parameter may not have a default value");
}
break;
case 152: /* optcolon: %empty */
#line 1112 "perly.y"
{ (yyval.ival) = 0; }
break;
case 153: /* optcolon: PERLY_COLON */
#line 1114 "perly.y"
{ (yyval.ival) = ':'; }
break;
case 154: /* sigscalarelem: optcolon PERLY_DOLLAR sigvar */
#line 1120 "perly.y"
{
if((ps[-2].val.ival)) {
PADNAME *pn = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.ival)];
subsignature_append_named(PadnamePV(pn)+1, (ps[0].val.ival), 0, NULL);
}
else
subsignature_append_positional((ps[0].val.ival), 0, NULL);
(yyval.opval) = NULL;
}
break;
case 155: /* sigscalarelem: optcolon PERLY_DOLLAR sigvar ASSIGNOP optsigscalardefault */
#line 1130 "perly.y"
{
if((ps[-4].val.ival)) {
PADNAME *pn = PadnamelistARRAY(PL_comppad_name)[(ps[-2].val.ival)];
subsignature_append_named(PadnamePV(pn)+1, (ps[-2].val.ival), (ps[-1].val.ival), (ps[0].val.opval));
}
else
subsignature_append_positional((ps[-2].val.ival), (ps[-1].val.ival), (ps[0].val.opval));
(yyval.opval) = NULL;
}
break;
case 156: /* optsigscalardefault: %empty */
#line 1143 "perly.y"
{ (yyval.opval) = newOP(OP_NULL, 0); }
break;
case 158: /* sigelem: sigscalarelem */
#line 1150 "perly.y"
{ parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
break;
case 159: /* sigelem: sigslurpelem */
#line 1152 "perly.y"
{ parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
break;
case 167: /* subsignature: PERLY_PAREN_OPEN subsigguts PERLY_PAREN_CLOSE */
#line 1178 "perly.y"
{ (yyval.opval) = (ps[-1].val.opval); }
break;
case 168: /* $@20: %empty */
#line 1181 "perly.y"
{
ENTER;
subsignature_start();
parser->in_my = KEY_sigvar;
}
break;
case 169: /* subsigguts: $@20 optsiglist */
#line 1187 "perly.y"
{
if (!FEATURE_SIGNATURES_IS_ENABLED && !CvIsMETHOD(PL_compcv))
croak("Experimental "
"subroutine signatures not enabled");
/* We shouldn't get here otherwise */
(yyval.opval) = subsignature_finish();
CvSIGNATURE_on(PL_compcv);
parser->in_my = 0;
/* tell the toker that attrributes can follow
* this sig, but only so that the toker
* can skip through any (illegal) trailing
* attribute text then give a useful error
* message about "attributes before sig",
* rather than falling over ina mess at
* unrecognised syntax.
*/
parser->expect = XATTRBLOCK;
parser->sig_seen = TRUE;
LEAVE;
}
break;
case 171: /* optsubbody: PERLY_SEMICOLON */
#line 1215 "perly.y"
{ (yyval.opval) = NULL; }
break;
case 172: /* subbody: remember PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE */
#line 1221 "perly.y"
{
if (parser->copline > (line_t)(ps[-2].val.ival))
parser->copline = (line_t)(ps[-2].val.ival);
(yyval.opval) = block_end((ps[-3].val.ival), (ps[-1].val.opval));
}
break;
case 174: /* optsigsubbody: PERLY_SEMICOLON */
#line 1233 "perly.y"
{ (yyval.opval) = NULL; }
break;
case 175: /* $@21: %empty */
#line 1238 "perly.y"
{ PL_parser->sig_seen = FALSE; }
break;
case 176: /* sigsubbody: remember optsubsignature PERLY_BRACE_OPEN $@21 stmtseq PERLY_BRACE_CLOSE */
#line 1240 "perly.y"
{
if (parser->copline > (line_t)(ps[-3].val.ival))
parser->copline = (line_t)(ps[-3].val.ival);
(yyval.opval) = block_end((ps[-5].val.ival),
op_append_list(OP_LINESEQ, (ps[-4].val.opval), (ps[-1].val.opval)));
}
break;
case 177: /* expr: expr ANDOP expr */
#line 1251 "perly.y"
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 178: /* expr: expr PLUGIN_LOGICAL_AND_LOW_OP expr */
#line 1253 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 179: /* expr: expr OROP expr */
#line 1255 "perly.y"
{ (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 180: /* expr: expr PLUGIN_LOGICAL_OR_LOW_OP expr */
#line 1257 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 182: /* listexpr: listexpr PERLY_COMMA */
#line 1263 "perly.y"
{ (yyval.opval) = (ps[-1].val.opval); }
break;
case 183: /* listexpr: listexpr PERLY_COMMA term */
#line 1265 "perly.y"
{
OP* term = (ps[0].val.opval);
(yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term);
}
break;
case 185: /* listop: LSTOP indirob listexpr */
#line 1274 "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)) );
}
break;
case 186: /* listop: BLKLSTOP block listexpr */
#line 1278 "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)) );
}
break;
case 187: /* listop: FUNC PERLY_PAREN_OPEN indirob expr PERLY_PAREN_CLOSE */
#line 1282 "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)) );
}
break;
case 188: /* listop: term ARROW methodname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */
#line 1286 "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)),
newMETHOP(OP_METHOD, 0, (ps[-3].val.opval))));
}
break;
case 189: /* listop: term ARROW methodname */
#line 1292 "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))));
}
break;
case 190: /* listop: term ARROW PERLY_AMPERSAND subname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */
#line 1297 "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)),
newCVREF(0, (ps[-3].val.opval))));
}
break;
case 191: /* listop: term ARROW PERLY_AMPERSAND subname */
#line 1303 "perly.y"
{ (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
scalar((ps[-3].val.opval)),
newCVREF(0, (ps[0].val.opval))));
}
break;
case 192: /* listop: METHCALL0 indirob optlistexpr */
#line 1309 "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)),
newMETHOP(OP_METHOD, 0, (ps[-2].val.opval))));
}
break;
case 193: /* listop: METHCALL indirob PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */
#line 1315 "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)),
newMETHOP(OP_METHOD, 0, (ps[-4].val.opval))));
}
break;
case 194: /* listop: LSTOP optlistexpr */
#line 1321 "perly.y"
{ (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); }
break;
case 195: /* listop: FUNC PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */
#line 1323 "perly.y"
{ (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
break;
case 196: /* listop: FUNC SUBLEXSTART optexpr SUBLEXEND */
#line 1325 "perly.y"
{ (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
break;
case 197: /* @22: %empty */
#line 1327 "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 */
(ps[0].val.opval) = NULL;
}
break;
case 198: /* listop: LSTOPSUB startanonsub block @22 optlistexpr */
#line 1333 "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)));
}
break;
case 201: /* subscripted: gelem PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */
#line 1348 "perly.y"
{ (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); }
break;
case 202: /* subscripted: scalar PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */
#line 1350 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval)));
}
break;
case 203: /* subscripted: term ARROW PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */
#line 1353 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[-4].val.opval)),OP_RV2AV),
scalar((ps[-1].val.opval)));
}
break;
case 204: /* subscripted: subscripted PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */
#line 1358 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[-3].val.opval)),OP_RV2AV),
scalar((ps[-1].val.opval)));
}
break;
case 205: /* subscripted: scalar PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */
#line 1363 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval)));
}
break;
case 206: /* subscripted: term ARROW PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */
#line 1366 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[-5].val.opval)),OP_RV2HV),
jmaybe((ps[-2].val.opval))); }
break;
case 207: /* subscripted: subscripted PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */
#line 1370 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[-4].val.opval)),OP_RV2HV),
jmaybe((ps[-2].val.opval))); }
break;
case 208: /* subscripted: term ARROW PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
#line 1374 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
newCVREF(0, scalar((ps[-3].val.opval))));
if (parser->expect == XBLOCK)
parser->expect = XOPERATOR;
}
break;
case 209: /* subscripted: term ARROW PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
#line 1380 "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)))));
if (parser->expect == XBLOCK)
parser->expect = XOPERATOR;
}
break;
case 210: /* subscripted: subscripted PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
#line 1388 "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)))));
if (parser->expect == XBLOCK)
parser->expect = XOPERATOR;
}
break;
case 211: /* subscripted: subscripted PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
#line 1395 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
newCVREF(0, scalar((ps[-2].val.opval))));
if (parser->expect == XBLOCK)
parser->expect = XOPERATOR;
}
break;
case 212: /* subscripted: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */
#line 1401 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); }
break;
case 213: /* subscripted: QWLIST PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */
#line 1403 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); }
break;
case 214: /* subscripted: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */
#line 1405 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); }
break;
case 215: /* termbinop: term PLUGIN_HIGH_OP term */
#line 1410 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 216: /* termbinop: term ASSIGNOP term */
#line 1412 "perly.y"
{ (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); }
break;
case 217: /* termbinop: term PLUGIN_ASSIGN_OP term */
#line 1414 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 218: /* termbinop: term POWOP term */
#line 1416 "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_POW_OP term */
#line 1418 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 220: /* termbinop: term MULOP term */
#line 1420 "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)));
}
break;
case 221: /* termbinop: term PLUGIN_MUL_OP term */
#line 1425 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 222: /* termbinop: term ADDOP term */
#line 1427 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 223: /* termbinop: term PLUGIN_ADD_OP term */
#line 1429 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 224: /* termbinop: term SHIFTOP term */
#line 1431 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 225: /* termbinop: termrelop */
#line 1433 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 226: /* termbinop: termeqop */
#line 1435 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 227: /* termbinop: term BITANDOP term */
#line 1437 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 228: /* termbinop: term BITOROP term */
#line 1439 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 229: /* termbinop: term DOTDOT term */
#line 1441 "perly.y"
{ (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 230: /* termbinop: term ANDAND term */
#line 1443 "perly.y"
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 231: /* termbinop: term PLUGIN_LOGICAL_AND_OP term */
#line 1445 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 232: /* termbinop: term OROR term */
#line 1447 "perly.y"
{ (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 233: /* termbinop: term PLUGIN_LOGICAL_OR_OP term */
#line 1449 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 234: /* termbinop: term DORDOR term */
#line 1451 "perly.y"
{ (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 235: /* termbinop: term MATCHOP term */
#line 1453 "perly.y"
{ (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 236: /* termbinop: term PLUGIN_LOW_OP term */
#line 1455 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 237: /* termrelop: relopchain */
#line 1459 "perly.y"
{ (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
break;
case 238: /* termrelop: term NCRELOP term */
#line 1461 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 239: /* termrelop: termrelop NCRELOP */
#line 1463 "perly.y"
{ yyerror("syntax error"); YYERROR; }
break;
case 240: /* termrelop: termrelop CHRELOP */
#line 1465 "perly.y"
{ yyerror("syntax error"); YYERROR; }
break;
case 241: /* termrelop: term PLUGIN_REL_OP term */
#line 1467 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 242: /* relopchain: term CHRELOP term */
#line 1471 "perly.y"
{ (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 243: /* relopchain: relopchain CHRELOP term */
#line 1473 "perly.y"
{ (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 244: /* termeqop: eqopchain */
#line 1477 "perly.y"
{ (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
break;
case 245: /* termeqop: term NCEQOP term */
#line 1479 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 246: /* termeqop: termeqop NCEQOP */
#line 1481 "perly.y"
{ yyerror("syntax error"); YYERROR; }
break;
case 247: /* termeqop: termeqop CHEQOP */
#line 1483 "perly.y"
{ yyerror("syntax error"); YYERROR; }
break;
case 248: /* eqopchain: term CHEQOP term */
#line 1487 "perly.y"
{ (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 249: /* eqopchain: eqopchain CHEQOP term */
#line 1489 "perly.y"
{ (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 250: /* termunop: PERLY_MINUS term */
#line 1494 "perly.y"
{ (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
break;
case 251: /* termunop: PERLY_PLUS term */
#line 1496 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 252: /* termunop: PERLY_EXCLAMATION_MARK term */
#line 1499 "perly.y"
{ (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
break;
case 253: /* termunop: PERLY_TILDE term */
#line 1501 "perly.y"
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
break;
case 254: /* termunop: term POSTINC */
#line 1503 "perly.y"
{ (yyval.opval) = newUNOP(OP_POSTINC, 0,
op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); }
break;
case 255: /* termunop: term POSTDEC */
#line 1506 "perly.y"
{ (yyval.opval) = newUNOP(OP_POSTDEC, 0,
op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));}
break;
case 256: /* termunop: term POSTJOIN */
#line 1509 "perly.y"
{ (yyval.opval) = op_convert_list(OP_JOIN, 0,
op_append_elem(
OP_LIST,
newSVREF(scalar(
newSVOP(OP_CONST,0,
newSVpvs("\""))
)),
(ps[-1].val.opval)
));
}
break;
case 257: /* termunop: PREINC term */
#line 1520 "perly.y"
{ (yyval.opval) = newUNOP(OP_PREINC, 0,
op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); }
break;
case 258: /* termunop: PREDEC term */
#line 1523 "perly.y"
{ (yyval.opval) = newUNOP(OP_PREDEC, 0,
op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); }
break;
case 259: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */
#line 1531 "perly.y"
{ (yyval.opval) = newANONLIST((ps[-1].val.opval)); }
break;
case 260: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */
#line 1533 "perly.y"
{ (yyval.opval) = newANONHASH((ps[-2].val.opval)); }
break;
case 261: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */
#line 1535 "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 262: /* anonymous: KW_SUB_anon startanonsub proto subattrlist */
#line 1538 "perly.y"
{ yyerror("Illegal declaration of anonymous subroutine"); YYERROR; }
break;
case 263: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */
#line 1540 "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 264: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist */
#line 1543 "perly.y"
{ yyerror("Illegal declaration of anonymous subroutine"); YYERROR; }
break;
case 265: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */
#line 1545 "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 266: /* anonymous: KW_METHOD_anon startanonmethod subattrlist */
#line 1550 "perly.y"
{ yyerror("Illegal declaration of anonymous subroutine"); YYERROR; }
break;
case 267: /* termdo: KW_DO term */
#line 1555 "perly.y"
{ (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));}
break;
case 268: /* termdo: KW_DO block */
#line 1557 "perly.y"
{ (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));}
break;
case 273: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */
#line 1565 "perly.y"
{ (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 274: /* term: REFGEN term */
#line 1567 "perly.y"
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
break;
case 275: /* term: myattrterm */
#line 1569 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 276: /* term: KW_LOCAL term */
#line 1571 "perly.y"
{ (yyval.opval) = localize((ps[0].val.opval),0); }
break;
case 277: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
#line 1573 "perly.y"
{ (yyval.opval) = sawparens((ps[-1].val.opval)); }
break;
case 278: /* term: QWLIST */
#line 1575 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 279: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
#line 1577 "perly.y"
{ (yyval.opval) = sawparens(newNULLLIST()); }
break;
case 280: /* term: scalar */
#line 1579 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 281: /* term: star */
#line 1581 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 282: /* term: hsh */
#line 1583 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 283: /* term: ary */
#line 1585 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 284: /* term: arylen */
#line 1587 "perly.y"
{ (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
break;
case 285: /* term: subscripted */
#line 1589 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 286: /* term: sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */
#line 1591 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_ASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_ASLICE, 0,
list((ps[-1].val.opval)),
ref((ps[-3].val.opval), OP_ASLICE)));
if ((yyval.opval) && (ps[-3].val.opval))
(yyval.opval)->op_private |=
(ps[-3].val.opval)->op_private & OPpSLICEWARNING;
}
break;
case 287: /* term: kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */
#line 1601 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_KVASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_KVASLICE, 0,
list((ps[-1].val.opval)),
ref(oopsAV((ps[-3].val.opval)), OP_KVASLICE)));
if ((yyval.opval) && (ps[-3].val.opval))
(yyval.opval)->op_private |=
(ps[-3].val.opval)->op_private & OPpSLICEWARNING;
}
break;
case 288: /* term: sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */
#line 1611 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_HSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_HSLICE, 0,
list((ps[-2].val.opval)),
ref(oopsHV((ps[-4].val.opval)), OP_HSLICE)));
if ((yyval.opval) && (ps[-4].val.opval))
(yyval.opval)->op_private |=
(ps[-4].val.opval)->op_private & OPpSLICEWARNING;
}
break;
case 289: /* term: kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */
#line 1621 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_KVHSLICE, 0,
list((ps[-2].val.opval)),
ref((ps[-4].val.opval), OP_KVHSLICE)));
if ((yyval.opval) && (ps[-4].val.opval))
(yyval.opval)->op_private |=
(ps[-4].val.opval)->op_private & OPpSLICEWARNING;
}
break;
case 290: /* term: THING */
#line 1631 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 291: /* term: amper */
#line 1633 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); }
break;
case 292: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
#line 1635 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval)));
}
break;
case 293: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
#line 1638 "perly.y"
{
(yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval))));
}
break;
case 294: /* term: NOAMP subname optlistexpr */
#line 1643 "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 295: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */
#line 1647 "perly.y"
{ (yyval.opval) = newSVREF((ps[-3].val.opval)); }
break;
case 296: /* term: term ARROW PERLY_SNAIL PERLY_STAR */
#line 1649 "perly.y"
{ (yyval.opval) = newAVREF((ps[-3].val.opval)); }
break;
case 297: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */
#line 1651 "perly.y"
{ (yyval.opval) = newHVREF((ps[-3].val.opval)); }
break;
case 298: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */
#line 1653 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); }
break;
case 299: /* term: term ARROW PERLY_STAR PERLY_STAR */
#line 1656 "perly.y"
{ (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); }
break;
case 300: /* term: LOOPEX */
#line 1658 "perly.y"
{ (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL);
PL_hints |= HINT_BLOCK_SCOPE; }
break;
case 301: /* term: LOOPEX term */
#line 1661 "perly.y"
{ (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); }
break;
case 302: /* term: NOTOP listexpr */
#line 1663 "perly.y"
{ (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
break;
case 303: /* term: UNIOP */
#line 1665 "perly.y"
{ (yyval.opval) = newOP((ps[0].val.ival), 0); }
break;
case 304: /* term: UNIOP block */
#line 1667 "perly.y"
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
break;
case 305: /* term: UNIOP term */
#line 1669 "perly.y"
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
break;
case 306: /* term: KW_REQUIRE */
#line 1671 "perly.y"
{ (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); }
break;
case 307: /* term: KW_REQUIRE term */
#line 1673 "perly.y"
{ (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); }
break;
case 308: /* term: UNIOPSUB */
#line 1675 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
break;
case 309: /* term: UNIOPSUB term */
#line 1677 "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 310: /* term: FUNC0 */
#line 1680 "perly.y"
{ (yyval.opval) = newOP((ps[0].val.ival), 0); }
break;
case 311: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
#line 1682 "perly.y"
{ (yyval.opval) = newOP((ps[-2].val.ival), 0);}
break;
case 312: /* term: FUNC0OP */
#line 1684 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 313: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
#line 1686 "perly.y"
{ (yyval.opval) = (ps[-2].val.opval); }
break;
case 314: /* term: FUNC0SUB */
#line 1688 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
break;
case 315: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
#line 1690 "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); }
break;
case 316: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
#line 1694 "perly.y"
{ (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
break;
case 317: /* @23: %empty */
#line 1696 "perly.y"
{
if ( (ps[0].val.opval)->op_type != OP_TRANS
&& (ps[0].val.opval)->op_type != OP_TRANSR
&& (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV))
{
(yyval.ival) = start_subparse(FALSE, CVf_ANON);
SAVEFREESV(PL_compcv);
} else
(yyval.ival) = 0;
}
break;
case 318: /* term: PMFUNC @23 SUBLEXSTART listexpr optrepl SUBLEXEND */
#line 1707 "perly.y"
{ (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); }
break;
case 322: /* myattrterm: KW_MY myterm attrlist */
#line 1716 "perly.y"
{ (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); }
break;
case 323: /* myattrterm: KW_MY myterm */
#line 1718 "perly.y"
{ (yyval.opval) = localize((ps[0].val.opval),1); }
break;
case 324: /* myattrterm: KW_MY REFGEN myterm attrlist */
#line 1720 "perly.y"
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); }
break;
case 325: /* myattrterm: KW_MY REFGEN term */
#line 1722 "perly.y"
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); }
break;
case 326: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
#line 1727 "perly.y"
{ (yyval.opval) = sawparens((ps[-1].val.opval)); }
break;
case 327: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
#line 1729 "perly.y"
{ (yyval.opval) = sawparens(newNULLLIST()); }
break;
case 328: /* myterm: scalar */
#line 1732 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 329: /* myterm: hsh */
#line 1734 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 330: /* myterm: ary */
#line 1736 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 331: /* fieldvar: scalar */
#line 1741 "perly.y"
{
(yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ];
op_free((ps[0].val.opval));
}
break;
case 332: /* fieldvar: hsh */
#line 1746 "perly.y"
{
(yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ];
op_free((ps[0].val.opval));
}
break;
case 333: /* fieldvar: ary */
#line 1751 "perly.y"
{
(yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ];
op_free((ps[0].val.opval));
}
break;
case 334: /* fielddecl: KW_FIELD fieldvar optattrlist */
#line 1759 "perly.y"
{
parser->in_my = 0;
if((ps[0].val.opval))
class_apply_field_attributes((PADNAME *)(ps[-1].val.pval), (ps[0].val.opval));
(yyval.opval) = newOP(OP_NULL, 0);
}
break;
case 335: /* $@24: %empty */
#line 1766 "perly.y"
{
parser->in_my = 0;
if((ps[-1].val.opval))
class_apply_field_attributes((PADNAME *)(ps[-2].val.pval), (ps[-1].val.opval));
ENTER;
class_prepare_initfield_parse();
}
break;
case 336: /* fielddecl: KW_FIELD fieldvar optattrlist ASSIGNOP $@24 term */
#line 1774 "perly.y"
{
class_set_field_defop((PADNAME *)(ps[-4].val.pval), (ps[-2].val.ival), (ps[0].val.opval));
LEAVE;
(yyval.opval) = newOP(OP_NULL, 0);
}
break;
case 342: /* optrepl: PERLY_SLASH expr */
#line 1794 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 343: /* my_scalar: scalar */
#line 1800 "perly.y"
{ parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
break;
case 344: /* list_of_itervars: list_of_itervars PERLY_COMMA */
#line 1805 "perly.y"
{ (yyval.opval) = (ps[-1].val.opval); }
break;
case 345: /* list_of_itervars: list_of_itervars PERLY_COMMA scalar */
#line 1807 "perly.y"
{
(yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval));
}
break;
case 346: /* list_of_itervars: list_of_itervars PERLY_COMMA REFGEN my_var */
#line 1811 "perly.y"
{
(yyval.opval) = op_append_elem(OP_LIST, (ps[-3].val.opval), newUNOP(OP_REFGEN, 0, (ps[0].val.opval)));
}
break;
case 348: /* list_of_itervars: REFGEN my_var */
#line 1816 "perly.y"
{
(yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval));
}
break;
case 349: /* my_list_of_itervars: list_of_itervars */
#line 1822 "perly.y"
{ parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); }
break;
case 357: /* amper: PERLY_AMPERSAND indirob */
#line 1839 "perly.y"
{ (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
break;
case 358: /* scalar: PERLY_DOLLAR indirob */
#line 1843 "perly.y"
{ (yyval.opval) = newSVREF((ps[0].val.opval)); }
break;
case 359: /* ary: PERLY_SNAIL indirob */
#line 1847 "perly.y"
{ (yyval.opval) = newAVREF((ps[0].val.opval));
if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
}
break;
case 360: /* hsh: PERLY_PERCENT_SIGN indirob */
#line 1853 "perly.y"
{ (yyval.opval) = newHVREF((ps[0].val.opval));
if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
}
break;
case 361: /* arylen: DOLSHARP indirob */
#line 1859 "perly.y"
{ (yyval.opval) = newAVREF((ps[0].val.opval)); }
break;
case 362: /* arylen: term ARROW DOLSHARP PERLY_STAR */
#line 1861 "perly.y"
{ (yyval.opval) = newAVREF((ps[-3].val.opval)); }
break;
case 363: /* star: PERLY_STAR indirob */
#line 1865 "perly.y"
{ (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
break;
case 365: /* sliceme: term ARROW PERLY_SNAIL */
#line 1870 "perly.y"
{ (yyval.opval) = newAVREF((ps[-2].val.opval)); }
break;
case 367: /* kvslice: term ARROW PERLY_PERCENT_SIGN */
#line 1875 "perly.y"
{ (yyval.opval) = newHVREF((ps[-2].val.opval)); }
break;
case 369: /* gelem: term ARROW PERLY_STAR */
#line 1880 "perly.y"
{ (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
break;
case 370: /* indirob: BAREWORD */
#line 1885 "perly.y"
{ (yyval.opval) = scalar((ps[0].val.opval)); }
break;
case 371: /* indirob: scalar */
#line 1887 "perly.y"
{ (yyval.opval) = scalar((ps[0].val.opval)); }
break;
case 372: /* indirob: block */
#line 1889 "perly.y"
{ (yyval.opval) = op_scope((ps[0].val.opval)); }
break;
case 373: /* indirob: PRIVATEREF */
#line 1892 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
default: break;
/* Generated from:
* 11a76178c6bb99bd6c08dfcc2b9fa80e33e491a061e3f2722d8ff2a9d9a5e7fd perly.y
* f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl
* ex: set ro ft=c: */