mirror of
https://github.com/Perl/perl5.git
synced 2026-01-27 01:44:43 +00:00
Prior to this, toke.c and perly.y used the token name `THING` for a number of apparently totally unrelated reasons. While I haven't attempted to fix most of them, I did find that the one used for attribute lists is unrelated to the others, so I have renamed that to something more sensible and meaningful.
2305 lines
65 KiB
C
Generated
2305 lines
65 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_scalars 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_scalars: list_of_scalars PERLY_COMMA */
|
|
#line 1805 "perly.y"
|
|
{ (yyval.opval) = (ps[-1].val.opval); }
|
|
|
|
break;
|
|
|
|
case 345: /* list_of_scalars: list_of_scalars PERLY_COMMA scalar */
|
|
#line 1807 "perly.y"
|
|
{
|
|
(yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval));
|
|
}
|
|
|
|
break;
|
|
|
|
case 347: /* my_list_of_scalars: list_of_scalars */
|
|
#line 1814 "perly.y"
|
|
{ parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); }
|
|
|
|
break;
|
|
|
|
case 355: /* amper: PERLY_AMPERSAND indirob */
|
|
#line 1831 "perly.y"
|
|
{ (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 356: /* scalar: PERLY_DOLLAR indirob */
|
|
#line 1835 "perly.y"
|
|
{ (yyval.opval) = newSVREF((ps[0].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 357: /* ary: PERLY_SNAIL indirob */
|
|
#line 1839 "perly.y"
|
|
{ (yyval.opval) = newAVREF((ps[0].val.opval));
|
|
if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
|
|
}
|
|
|
|
break;
|
|
|
|
case 358: /* hsh: PERLY_PERCENT_SIGN indirob */
|
|
#line 1845 "perly.y"
|
|
{ (yyval.opval) = newHVREF((ps[0].val.opval));
|
|
if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
|
|
}
|
|
|
|
break;
|
|
|
|
case 359: /* arylen: DOLSHARP indirob */
|
|
#line 1851 "perly.y"
|
|
{ (yyval.opval) = newAVREF((ps[0].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 360: /* arylen: term ARROW DOLSHARP PERLY_STAR */
|
|
#line 1853 "perly.y"
|
|
{ (yyval.opval) = newAVREF((ps[-3].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 361: /* star: PERLY_STAR indirob */
|
|
#line 1857 "perly.y"
|
|
{ (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 363: /* sliceme: term ARROW PERLY_SNAIL */
|
|
#line 1862 "perly.y"
|
|
{ (yyval.opval) = newAVREF((ps[-2].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 365: /* kvslice: term ARROW PERLY_PERCENT_SIGN */
|
|
#line 1867 "perly.y"
|
|
{ (yyval.opval) = newHVREF((ps[-2].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 367: /* gelem: term ARROW PERLY_STAR */
|
|
#line 1872 "perly.y"
|
|
{ (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 368: /* indirob: BAREWORD */
|
|
#line 1877 "perly.y"
|
|
{ (yyval.opval) = scalar((ps[0].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 369: /* indirob: scalar */
|
|
#line 1879 "perly.y"
|
|
{ (yyval.opval) = scalar((ps[0].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 370: /* indirob: block */
|
|
#line 1881 "perly.y"
|
|
{ (yyval.opval) = op_scope((ps[0].val.opval)); }
|
|
|
|
break;
|
|
|
|
case 371: /* indirob: PRIVATEREF */
|
|
#line 1884 "perly.y"
|
|
{ (yyval.opval) = (ps[0].val.opval); }
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default: break;
|
|
|
|
|
|
/* Generated from:
|
|
* 8444cada5b7e31b67a9eec8f91fdf7511e00378bd03fb2bc726dc0ff958643de perly.y
|
|
* f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl
|
|
* ex: set ro ft=c: */
|