Commit 9687ca8af6 for perl
commit 9687ca8af614293fecea436bfc775361f49d753c
Author: Branislav Zahradník <barney@cpan.org>
Date: Sun Sep 27 13:50:11 2026 +0200
[perly] function invocation -> Reformat code (ws only)
One token per line make it easier to see similarities and differences,
as well as track subsequent refactorings
diff --git a/perly.act b/perly.act
index 64c4884a8e..64fdada0f3 100644
--- a/perly.act
+++ b/perly.act
@@ -1313,39 +1313,51 @@ case 2: /* @1: %empty */
break;
case 203: /* @24: %empty */
-#line 1424 "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;
- }
+#line 1427 "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 204: /* listop: LSTOPSUB startanonsub block @24 optlistexpr */
-#line 1430 "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)));
+#line 1436 "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 207: /* subscripted: gelem subscript_keys */
-#line 1445 "perly.y"
+#line 1462 "perly.y"
{ (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-1].val.opval), scalar((ps[0].val.opval))); }
break;
case 208: /* subscripted: scalar subscript_index */
-#line 1447 "perly.y"
+#line 1464 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-1].val.opval)), scalar((ps[0].val.opval)));
}
break;
case 209: /* subscripted: subscriptable_reference subscript_index */
-#line 1450 "perly.y"
+#line 1467 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[-1].val.opval)),OP_RV2AV),
scalar((ps[0].val.opval)));
@@ -1354,14 +1366,14 @@ case 2: /* @1: %empty */
break;
case 210: /* subscripted: scalar subscript_keys */
-#line 1455 "perly.y"
+#line 1472 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-1].val.opval)), jmaybe((ps[0].val.opval)));
}
break;
case 211: /* subscripted: subscriptable_reference subscript_keys */
-#line 1458 "perly.y"
+#line 1475 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[-1].val.opval)),OP_RV2HV),
jmaybe((ps[0].val.opval))); }
@@ -1369,76 +1381,87 @@ case 2: /* @1: %empty */
break;
case 212: /* subscripted: subscriptable_reference PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
-#line 1462 "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;
+#line 1483 "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 213: /* subscripted: subscriptable_reference PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
-#line 1469 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar((ps[-2].val.opval))));
- if (parser->expect == XBLOCK)
- parser->expect = XOPERATOR;
+#line 1500 "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 214: /* subscripted: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE subscript_index */
-#line 1475 "perly.y"
+#line 1510 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[0].val.opval), (ps[-2].val.opval)); }
break;
case 215: /* subscripted: QWLIST subscript_index */
-#line 1477 "perly.y"
+#line 1512 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[0].val.opval), (ps[-1].val.opval)); }
break;
case 216: /* subscripted: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE subscript_index */
-#line 1479 "perly.y"
+#line 1514 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[0].val.opval), NULL); }
break;
case 217: /* termbinop: term PLUGIN_HIGH_OP term */
-#line 1484 "perly.y"
+#line 1519 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 218: /* termbinop: term ASSIGNOP term */
-#line 1486 "perly.y"
+#line 1521 "perly.y"
{ (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); }
break;
case 219: /* termbinop: term PLUGIN_ASSIGN_OP term */
-#line 1488 "perly.y"
+#line 1523 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 220: /* termbinop: term POWOP term */
-#line 1490 "perly.y"
+#line 1525 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 221: /* termbinop: term PLUGIN_POW_OP term */
-#line 1492 "perly.y"
+#line 1527 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 222: /* termbinop: term MULOP term */
-#line 1494 "perly.y"
+#line 1529 "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)));
@@ -1447,219 +1470,219 @@ case 2: /* @1: %empty */
break;
case 223: /* termbinop: term PLUGIN_MUL_OP term */
-#line 1499 "perly.y"
+#line 1534 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 224: /* termbinop: term ADDOP term */
-#line 1501 "perly.y"
+#line 1536 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 225: /* termbinop: term PLUGIN_ADD_OP term */
-#line 1503 "perly.y"
+#line 1538 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 226: /* termbinop: term SHIFTOP term */
-#line 1505 "perly.y"
+#line 1540 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 227: /* termbinop: termrelop */
-#line 1507 "perly.y"
+#line 1542 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 228: /* termbinop: termeqop */
-#line 1509 "perly.y"
+#line 1544 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 229: /* termbinop: term BITANDOP term */
-#line 1511 "perly.y"
+#line 1546 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 230: /* termbinop: term BITOROP term */
-#line 1513 "perly.y"
+#line 1548 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 231: /* termbinop: term DOTDOT term */
-#line 1515 "perly.y"
+#line 1550 "perly.y"
{ (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 232: /* termbinop: term ANDAND term */
-#line 1517 "perly.y"
+#line 1552 "perly.y"
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 233: /* termbinop: term PLUGIN_LOGICAL_AND_OP term */
-#line 1519 "perly.y"
+#line 1554 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 234: /* termbinop: term OROR term */
-#line 1521 "perly.y"
+#line 1556 "perly.y"
{ (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 235: /* termbinop: term PLUGIN_LOGICAL_OR_OP term */
-#line 1523 "perly.y"
+#line 1558 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 236: /* termbinop: term DORDOR term */
-#line 1525 "perly.y"
+#line 1560 "perly.y"
{ (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 237: /* termbinop: term MATCHOP term */
-#line 1527 "perly.y"
+#line 1562 "perly.y"
{ (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 238: /* termbinop: term PLUGIN_LOW_OP term */
-#line 1529 "perly.y"
+#line 1564 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 239: /* termrelop: relopchain */
-#line 1533 "perly.y"
+#line 1568 "perly.y"
{ (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
break;
case 240: /* termrelop: term NCRELOP term */
-#line 1535 "perly.y"
+#line 1570 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 241: /* termrelop: termrelop NCRELOP */
-#line 1537 "perly.y"
+#line 1572 "perly.y"
{ yyerror("syntax error"); YYERROR; }
break;
case 242: /* termrelop: termrelop CHRELOP */
-#line 1539 "perly.y"
+#line 1574 "perly.y"
{ yyerror("syntax error"); YYERROR; }
break;
case 243: /* termrelop: term PLUGIN_REL_OP term */
-#line 1541 "perly.y"
+#line 1576 "perly.y"
{ (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); }
break;
case 244: /* relopchain: term CHRELOP term */
-#line 1545 "perly.y"
+#line 1580 "perly.y"
{ (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 245: /* relopchain: relopchain CHRELOP term */
-#line 1547 "perly.y"
+#line 1582 "perly.y"
{ (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 246: /* termeqop: eqopchain */
-#line 1551 "perly.y"
+#line 1586 "perly.y"
{ (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
break;
case 247: /* termeqop: term NCEQOP term */
-#line 1553 "perly.y"
+#line 1588 "perly.y"
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
case 248: /* termeqop: termeqop NCEQOP */
-#line 1555 "perly.y"
+#line 1590 "perly.y"
{ yyerror("syntax error"); YYERROR; }
break;
case 249: /* termeqop: termeqop CHEQOP */
-#line 1557 "perly.y"
+#line 1592 "perly.y"
{ yyerror("syntax error"); YYERROR; }
break;
case 250: /* eqopchain: term CHEQOP term */
-#line 1561 "perly.y"
+#line 1596 "perly.y"
{ (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 251: /* eqopchain: eqopchain CHEQOP term */
-#line 1563 "perly.y"
+#line 1598 "perly.y"
{ (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 252: /* termunop: PERLY_MINUS term */
-#line 1568 "perly.y"
+#line 1603 "perly.y"
{ (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
break;
case 253: /* termunop: PERLY_PLUS term */
-#line 1570 "perly.y"
+#line 1605 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 254: /* termunop: PERLY_EXCLAMATION_MARK term */
-#line 1573 "perly.y"
+#line 1608 "perly.y"
{ (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
break;
case 255: /* termunop: PERLY_TILDE term */
-#line 1575 "perly.y"
+#line 1610 "perly.y"
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
break;
case 256: /* termunop: term POSTINC */
-#line 1577 "perly.y"
+#line 1612 "perly.y"
{ (yyval.opval) = newUNOP(OP_POSTINC, 0,
op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); }
break;
case 257: /* termunop: term POSTDEC */
-#line 1580 "perly.y"
+#line 1615 "perly.y"
{ (yyval.opval) = newUNOP(OP_POSTDEC, 0,
op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));}
break;
case 258: /* termunop: term POSTJOIN */
-#line 1583 "perly.y"
+#line 1618 "perly.y"
{ (yyval.opval) = op_convert_list(OP_JOIN, 0,
op_append_elem(
OP_LIST,
@@ -1674,59 +1697,59 @@ case 2: /* @1: %empty */
break;
case 259: /* termunop: PREINC term */
-#line 1594 "perly.y"
+#line 1629 "perly.y"
{ (yyval.opval) = newUNOP(OP_PREINC, 0,
op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); }
break;
case 260: /* termunop: PREDEC term */
-#line 1597 "perly.y"
+#line 1632 "perly.y"
{ (yyval.opval) = newUNOP(OP_PREDEC, 0,
op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); }
break;
case 261: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */
-#line 1605 "perly.y"
+#line 1640 "perly.y"
{ (yyval.opval) = newANONLIST((ps[-1].val.opval)); }
break;
case 262: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */
-#line 1607 "perly.y"
+#line 1642 "perly.y"
{ (yyval.opval) = newANONHASH((ps[-2].val.opval)); }
break;
case 263: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */
-#line 1609 "perly.y"
+#line 1644 "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 264: /* anonymous: KW_SUB_anon startanonsub proto subattrlist */
-#line 1612 "perly.y"
+#line 1647 "perly.y"
{ yyerror("Illegal declaration of anonymous subroutine"); YYERROR; }
break;
case 265: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */
-#line 1614 "perly.y"
+#line 1649 "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_SUB_anon_sig startanonsub subattrlist */
-#line 1617 "perly.y"
+#line 1652 "perly.y"
{ yyerror("Illegal declaration of anonymous subroutine"); YYERROR; }
break;
case 267: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */
-#line 1619 "perly.y"
+#line 1654 "perly.y"
{
SvREFCNT_inc_simple_void(PL_compcv);
(yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval));
@@ -1735,103 +1758,103 @@ case 2: /* @1: %empty */
break;
case 268: /* anonymous: KW_METHOD_anon startanonmethod subattrlist */
-#line 1624 "perly.y"
+#line 1659 "perly.y"
{ yyerror("Illegal declaration of anonymous subroutine"); YYERROR; }
break;
case 269: /* termdo: KW_DO term */
-#line 1629 "perly.y"
+#line 1664 "perly.y"
{ (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));}
break;
case 270: /* termdo: KW_DO block */
-#line 1631 "perly.y"
+#line 1666 "perly.y"
{ (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));}
break;
case 275: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */
-#line 1639 "perly.y"
+#line 1674 "perly.y"
{ (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
case 276: /* term: REFGEN term */
-#line 1641 "perly.y"
+#line 1676 "perly.y"
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
break;
case 277: /* term: myattrterm */
-#line 1643 "perly.y"
+#line 1678 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 278: /* term: KW_LOCAL term */
-#line 1645 "perly.y"
+#line 1680 "perly.y"
{ (yyval.opval) = localize((ps[0].val.opval),0); }
break;
case 279: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
-#line 1647 "perly.y"
+#line 1682 "perly.y"
{ (yyval.opval) = sawparens((ps[-1].val.opval)); }
break;
case 280: /* term: QWLIST */
-#line 1649 "perly.y"
+#line 1684 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 281: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
-#line 1651 "perly.y"
+#line 1686 "perly.y"
{ (yyval.opval) = sawparens(newNULLLIST()); }
break;
case 282: /* term: scalar */
-#line 1653 "perly.y"
+#line 1688 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 283: /* term: star */
-#line 1655 "perly.y"
+#line 1690 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 284: /* term: hsh */
-#line 1657 "perly.y"
+#line 1692 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 285: /* term: ary */
-#line 1659 "perly.y"
+#line 1694 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 286: /* term: arylen */
-#line 1661 "perly.y"
+#line 1696 "perly.y"
{ (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
break;
case 287: /* term: subscripted */
-#line 1663 "perly.y"
+#line 1698 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 288: /* term: sliceme subscript_index */
-#line 1665 "perly.y"
+#line 1700 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_ASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_ASLICE, 0,
@@ -1845,7 +1868,7 @@ case 2: /* @1: %empty */
break;
case 289: /* term: kvslice subscript_index */
-#line 1675 "perly.y"
+#line 1710 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_KVASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_KVASLICE, 0,
@@ -1859,7 +1882,7 @@ case 2: /* @1: %empty */
break;
case 290: /* term: sliceme subscript_keys */
-#line 1685 "perly.y"
+#line 1720 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_HSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_HSLICE, 0,
@@ -1873,7 +1896,7 @@ case 2: /* @1: %empty */
break;
case 291: /* term: kvslice subscript_keys */
-#line 1695 "perly.y"
+#line 1730 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_KVHSLICE, 0,
@@ -1887,166 +1910,213 @@ case 2: /* @1: %empty */
break;
case 292: /* term: THING */
-#line 1705 "perly.y"
+#line 1740 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 293: /* term: amper */
-#line 1707 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); }
+#line 1743 "perly.y"
+ {
+ (yyval.opval) = newUNOP (
+ OP_ENTERSUB,
+ 0,
+ scalar ((ps[0].val.opval))
+ );
+ }
break;
case 294: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
-#line 1709 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval)));
+#line 1754 "perly.y"
+ {
+ (yyval.opval) = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ scalar ((ps[-2].val.opval))
+ );
}
break;
case 295: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
-#line 1712 "perly.y"
+#line 1766 "perly.y"
{
- (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval))));
+ (yyval.opval) = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ op_append_elem (
+ OP_LIST,
+ (ps[-1].val.opval),
+ scalar ((ps[-3].val.opval))
+ )
+ );
}
break;
case 296: /* term: NOAMP subname optlistexpr */
-#line 1717 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval))));
+#line 1781 "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 297: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */
-#line 1721 "perly.y"
+#line 1793 "perly.y"
{ (yyval.opval) = newSVREF((ps[-3].val.opval)); }
break;
case 298: /* term: term ARROW PERLY_SNAIL PERLY_STAR */
-#line 1723 "perly.y"
+#line 1795 "perly.y"
{ (yyval.opval) = newAVREF((ps[-3].val.opval)); }
break;
case 299: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */
-#line 1725 "perly.y"
+#line 1797 "perly.y"
{ (yyval.opval) = newHVREF((ps[-3].val.opval)); }
break;
case 300: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */
-#line 1727 "perly.y"
+#line 1799 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); }
break;
case 301: /* term: term ARROW PERLY_STAR PERLY_STAR */
-#line 1730 "perly.y"
+#line 1802 "perly.y"
{ (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); }
break;
case 302: /* term: LOOPEX */
-#line 1732 "perly.y"
+#line 1804 "perly.y"
{ (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL);
PL_hints |= HINT_BLOCK_SCOPE; }
break;
case 303: /* term: LOOPEX term */
-#line 1735 "perly.y"
+#line 1807 "perly.y"
{ (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); }
break;
case 304: /* term: NOTOP listexpr */
-#line 1737 "perly.y"
+#line 1809 "perly.y"
{ (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
break;
case 305: /* term: UNIOP */
-#line 1739 "perly.y"
+#line 1811 "perly.y"
{ (yyval.opval) = newOP((ps[0].val.ival), 0); }
break;
case 306: /* term: UNIOP block */
-#line 1741 "perly.y"
+#line 1813 "perly.y"
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
break;
case 307: /* term: UNIOP term */
-#line 1743 "perly.y"
+#line 1815 "perly.y"
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
break;
case 308: /* term: KW_REQUIRE */
-#line 1745 "perly.y"
+#line 1817 "perly.y"
{ (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); }
break;
case 309: /* term: KW_REQUIRE term */
-#line 1747 "perly.y"
+#line 1819 "perly.y"
{ (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); }
break;
case 310: /* term: UNIOPSUB */
-#line 1749 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
+#line 1821 "perly.y"
+ {
+ (yyval.opval) = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ scalar ((ps[0].val.opval))
+ );
+ }
break;
case 311: /* term: UNIOPSUB term */
-#line 1751 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); }
+#line 1831 "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 312: /* term: FUNC0 */
-#line 1754 "perly.y"
+#line 1843 "perly.y"
{ (yyval.opval) = newOP((ps[0].val.ival), 0); }
break;
case 313: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
-#line 1756 "perly.y"
+#line 1845 "perly.y"
{ (yyval.opval) = newOP((ps[-2].val.ival), 0);}
break;
case 314: /* term: FUNC0OP */
-#line 1758 "perly.y"
+#line 1847 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 315: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
-#line 1760 "perly.y"
+#line 1849 "perly.y"
{ (yyval.opval) = (ps[-2].val.opval); }
break;
case 316: /* term: FUNC0SUB */
-#line 1762 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
+#line 1852 "perly.y"
+ {
+ (yyval.opval) = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ scalar ((ps[0].val.opval))
+ );
+ }
break;
case 317: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
-#line 1764 "perly.y"
+#line 1860 "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); }
@@ -2054,13 +2124,13 @@ case 2: /* @1: %empty */
break;
case 318: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
-#line 1768 "perly.y"
+#line 1864 "perly.y"
{ (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
break;
case 319: /* @25: %empty */
-#line 1770 "perly.y"
+#line 1866 "perly.y"
{
if ( (ps[0].val.opval)->op_type != OP_TRANS
&& (ps[0].val.opval)->op_type != OP_TRANSR
@@ -2075,67 +2145,67 @@ case 2: /* @1: %empty */
break;
case 320: /* term: PMFUNC @25 SUBLEXSTART listexpr optrepl SUBLEXEND */
-#line 1781 "perly.y"
+#line 1877 "perly.y"
{ (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); }
break;
case 324: /* myattrterm: KW_MY myterm attrlist */
-#line 1790 "perly.y"
+#line 1886 "perly.y"
{ (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); }
break;
case 325: /* myattrterm: KW_MY myterm */
-#line 1792 "perly.y"
+#line 1888 "perly.y"
{ (yyval.opval) = localize((ps[0].val.opval),1); }
break;
case 326: /* myattrterm: KW_MY REFGEN myterm attrlist */
-#line 1794 "perly.y"
+#line 1890 "perly.y"
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); }
break;
case 327: /* myattrterm: KW_MY REFGEN term */
-#line 1796 "perly.y"
+#line 1892 "perly.y"
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); }
break;
case 328: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */
-#line 1801 "perly.y"
+#line 1897 "perly.y"
{ (yyval.opval) = sawparens((ps[-1].val.opval)); }
break;
case 329: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */
-#line 1803 "perly.y"
+#line 1899 "perly.y"
{ (yyval.opval) = sawparens(newNULLLIST()); }
break;
case 330: /* myterm: scalar */
-#line 1806 "perly.y"
+#line 1902 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 331: /* myterm: hsh */
-#line 1808 "perly.y"
+#line 1904 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 332: /* myterm: ary */
-#line 1810 "perly.y"
+#line 1906 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 333: /* fieldvar: scalar */
-#line 1815 "perly.y"
+#line 1911 "perly.y"
{
(yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ];
op_free((ps[0].val.opval));
@@ -2144,7 +2214,7 @@ case 2: /* @1: %empty */
break;
case 334: /* fieldvar: hsh */
-#line 1820 "perly.y"
+#line 1916 "perly.y"
{
(yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ];
op_free((ps[0].val.opval));
@@ -2153,7 +2223,7 @@ case 2: /* @1: %empty */
break;
case 335: /* fieldvar: ary */
-#line 1825 "perly.y"
+#line 1921 "perly.y"
{
(yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ];
op_free((ps[0].val.opval));
@@ -2162,7 +2232,7 @@ case 2: /* @1: %empty */
break;
case 336: /* fielddecl: KW_FIELD fieldvar optattrlist */
-#line 1833 "perly.y"
+#line 1929 "perly.y"
{
parser->in_my = 0;
if((ps[0].val.opval))
@@ -2173,7 +2243,7 @@ case 2: /* @1: %empty */
break;
case 337: /* $@26: %empty */
-#line 1840 "perly.y"
+#line 1936 "perly.y"
{
parser->in_my = 0;
if((ps[-1].val.opval))
@@ -2185,7 +2255,7 @@ case 2: /* @1: %empty */
break;
case 338: /* fielddecl: KW_FIELD fieldvar optattrlist ASSIGNOP $@26 term */
-#line 1848 "perly.y"
+#line 1944 "perly.y"
{
class_set_field_defop((PADNAME *)(ps[-4].val.pval), (ps[-2].val.ival), (ps[0].val.opval));
LEAVE;
@@ -2195,25 +2265,25 @@ case 2: /* @1: %empty */
break;
case 344: /* optrepl: PERLY_SLASH expr */
-#line 1868 "perly.y"
+#line 1964 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
case 345: /* my_scalar: scalar */
-#line 1874 "perly.y"
+#line 1970 "perly.y"
{ parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
break;
case 346: /* list_of_itervars: list_of_itervars PERLY_COMMA */
-#line 1879 "perly.y"
+#line 1975 "perly.y"
{ (yyval.opval) = (ps[-1].val.opval); }
break;
case 347: /* list_of_itervars: list_of_itervars PERLY_COMMA scalar */
-#line 1881 "perly.y"
+#line 1977 "perly.y"
{
(yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval));
}
@@ -2221,7 +2291,7 @@ case 2: /* @1: %empty */
break;
case 348: /* list_of_itervars: list_of_itervars PERLY_COMMA REFGEN my_var */
-#line 1885 "perly.y"
+#line 1981 "perly.y"
{
(yyval.opval) = op_append_elem(OP_LIST, (ps[-3].val.opval), newUNOP(OP_REFGEN, 0, (ps[0].val.opval)));
}
@@ -2229,7 +2299,7 @@ case 2: /* @1: %empty */
break;
case 350: /* list_of_itervars: REFGEN my_var */
-#line 1890 "perly.y"
+#line 1986 "perly.y"
{
(yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval));
}
@@ -2237,25 +2307,25 @@ case 2: /* @1: %empty */
break;
case 351: /* my_list_of_itervars: list_of_itervars */
-#line 1896 "perly.y"
+#line 1992 "perly.y"
{ parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); }
break;
case 359: /* amper: PERLY_AMPERSAND indirob */
-#line 1913 "perly.y"
+#line 2009 "perly.y"
{ (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
break;
case 360: /* scalar: PERLY_DOLLAR indirob */
-#line 1917 "perly.y"
+#line 2013 "perly.y"
{ (yyval.opval) = newSVREF((ps[0].val.opval)); }
break;
case 361: /* ary: PERLY_SNAIL indirob */
-#line 1921 "perly.y"
+#line 2017 "perly.y"
{ (yyval.opval) = newAVREF((ps[0].val.opval));
if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
}
@@ -2263,7 +2333,7 @@ case 2: /* @1: %empty */
break;
case 362: /* hsh: PERLY_PERCENT_SIGN indirob */
-#line 1927 "perly.y"
+#line 2023 "perly.y"
{ (yyval.opval) = newHVREF((ps[0].val.opval));
if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
}
@@ -2271,61 +2341,61 @@ case 2: /* @1: %empty */
break;
case 363: /* arylen: DOLSHARP indirob */
-#line 1933 "perly.y"
+#line 2029 "perly.y"
{ (yyval.opval) = newAVREF((ps[0].val.opval)); }
break;
case 364: /* arylen: term ARROW DOLSHARP PERLY_STAR */
-#line 1935 "perly.y"
+#line 2031 "perly.y"
{ (yyval.opval) = newAVREF((ps[-3].val.opval)); }
break;
case 365: /* star: PERLY_STAR indirob */
-#line 1939 "perly.y"
+#line 2035 "perly.y"
{ (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
break;
case 367: /* sliceme: term ARROW PERLY_SNAIL */
-#line 1944 "perly.y"
+#line 2040 "perly.y"
{ (yyval.opval) = newAVREF((ps[-2].val.opval)); }
break;
case 369: /* kvslice: term ARROW PERLY_PERCENT_SIGN */
-#line 1949 "perly.y"
+#line 2045 "perly.y"
{ (yyval.opval) = newHVREF((ps[-2].val.opval)); }
break;
case 371: /* gelem: term ARROW PERLY_STAR */
-#line 1954 "perly.y"
+#line 2050 "perly.y"
{ (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
break;
case 372: /* indirob: BAREWORD */
-#line 1959 "perly.y"
+#line 2055 "perly.y"
{ (yyval.opval) = scalar((ps[0].val.opval)); }
break;
case 373: /* indirob: scalar */
-#line 1961 "perly.y"
+#line 2057 "perly.y"
{ (yyval.opval) = scalar((ps[0].val.opval)); }
break;
case 374: /* indirob: block */
-#line 1963 "perly.y"
+#line 2059 "perly.y"
{ (yyval.opval) = op_scope((ps[0].val.opval)); }
break;
case 375: /* indirob: PRIVATEREF */
-#line 1966 "perly.y"
+#line 2062 "perly.y"
{ (yyval.opval) = (ps[0].val.opval); }
break;
@@ -2337,6 +2407,6 @@ case 2: /* @1: %empty */
/* Generated from:
- * b5e6ab7c55756d33fa71abcf265983baf1706f90247cd28f30e446d04f94b5d2 perly.y
+ * ace56d97c7f5e3d041e7e3a801bb6e97384ddd1e10f1d8ed0d033e4b65f73f67 perly.y
* ba173fe7f0e9b6b5465fb5d0705af3290ac7d8b511f0eead585307eb6c68918d regen_perly.pl
* ex: set ro ft=c: */
diff --git a/perly.h b/perly.h
index 978df52f1c..3f44d1c3d5 100644
--- a/perly.h
+++ b/perly.h
@@ -248,6 +248,6 @@ int yyparse (void);
/* Generated from:
- * b5e6ab7c55756d33fa71abcf265983baf1706f90247cd28f30e446d04f94b5d2 perly.y
+ * ace56d97c7f5e3d041e7e3a801bb6e97384ddd1e10f1d8ed0d033e4b65f73f67 perly.y
* ba173fe7f0e9b6b5465fb5d0705af3290ac7d8b511f0eead585307eb6c68918d regen_perly.pl
* ex: set ro ft=c: */
diff --git a/perly.tab b/perly.tab
index 476085e504..310723172b 100644
--- a/perly.tab
+++ b/perly.tab
@@ -385,24 +385,24 @@ static const yytype_int16 yyrline[] =
1219, 1223, 1227, 1227, 1260, 1261, 1267, 1266, 1283, 1284,
1289, 1294, 1288, 1306, 1308, 1310, 1312, 1314, 1318, 1320,
1325, 1329, 1333, 1337, 1342, 1356, 1367, 1382, 1394, 1405,
- 1417, 1419, 1421, 1424, 1423, 1437, 1438, 1442, 1446, 1449,
- 1454, 1457, 1461, 1468, 1474, 1476, 1478, 1483, 1485, 1487,
- 1489, 1491, 1493, 1498, 1500, 1502, 1504, 1506, 1508, 1510,
- 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1532,
- 1534, 1536, 1538, 1540, 1544, 1546, 1550, 1552, 1554, 1556,
- 1560, 1562, 1567, 1569, 1572, 1574, 1576, 1579, 1582, 1593,
- 1596, 1604, 1606, 1608, 1611, 1613, 1616, 1618, 1623, 1628,
- 1630, 1634, 1635, 1636, 1637, 1638, 1640, 1642, 1644, 1646,
- 1648, 1650, 1652, 1654, 1656, 1658, 1660, 1662, 1664, 1674,
- 1684, 1694, 1704, 1706, 1708, 1711, 1716, 1720, 1722, 1724,
- 1726, 1729, 1731, 1734, 1736, 1738, 1740, 1742, 1744, 1746,
- 1748, 1750, 1753, 1755, 1757, 1759, 1761, 1763, 1767, 1770,
- 1769, 1782, 1783, 1784, 1789, 1791, 1793, 1795, 1800, 1802,
- 1805, 1807, 1809, 1814, 1819, 1824, 1832, 1840, 1839, 1857,
- 1858, 1862, 1863, 1867, 1868, 1873, 1878, 1880, 1884, 1888,
- 1889, 1895, 1899, 1900, 1901, 1904, 1905, 1908, 1909, 1912,
- 1916, 1920, 1926, 1932, 1934, 1938, 1942, 1943, 1947, 1948,
- 1952, 1953, 1958, 1960, 1962, 1965
+ 1417, 1419, 1421, 1427, 1423, 1454, 1455, 1459, 1463, 1466,
+ 1471, 1474, 1478, 1496, 1509, 1511, 1513, 1518, 1520, 1522,
+ 1524, 1526, 1528, 1533, 1535, 1537, 1539, 1541, 1543, 1545,
+ 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1567,
+ 1569, 1571, 1573, 1575, 1579, 1581, 1585, 1587, 1589, 1591,
+ 1595, 1597, 1602, 1604, 1607, 1609, 1611, 1614, 1617, 1628,
+ 1631, 1639, 1641, 1643, 1646, 1648, 1651, 1653, 1658, 1663,
+ 1665, 1669, 1670, 1671, 1672, 1673, 1675, 1677, 1679, 1681,
+ 1683, 1685, 1687, 1689, 1691, 1693, 1695, 1697, 1699, 1709,
+ 1719, 1729, 1739, 1741, 1750, 1761, 1777, 1792, 1794, 1796,
+ 1798, 1801, 1803, 1806, 1808, 1810, 1812, 1814, 1816, 1818,
+ 1820, 1828, 1842, 1844, 1846, 1848, 1850, 1859, 1863, 1866,
+ 1865, 1878, 1879, 1880, 1885, 1887, 1889, 1891, 1896, 1898,
+ 1901, 1903, 1905, 1910, 1915, 1920, 1928, 1936, 1935, 1953,
+ 1954, 1958, 1959, 1963, 1964, 1969, 1974, 1976, 1980, 1984,
+ 1985, 1991, 1995, 1996, 1997, 2000, 2001, 2004, 2005, 2008,
+ 2012, 2016, 2022, 2028, 2030, 2034, 2038, 2039, 2043, 2044,
+ 2048, 2049, 2054, 2056, 2058, 2061
};
#endif
@@ -1667,6 +1667,6 @@ static const toketypes yy_type_tab[] =
};
/* Generated from:
- * b5e6ab7c55756d33fa71abcf265983baf1706f90247cd28f30e446d04f94b5d2 perly.y
+ * ace56d97c7f5e3d041e7e3a801bb6e97384ddd1e10f1d8ed0d033e4b65f73f67 perly.y
* ba173fe7f0e9b6b5465fb5d0705af3290ac7d8b511f0eead585307eb6c68918d regen_perly.pl
* ex: set ro ft=c: */
diff --git a/perly.y b/perly.y
index 00773c8f02..629f4447aa 100644
--- a/perly.y
+++ b/perly.y
@@ -1420,16 +1420,33 @@ listop : LSTOP indirob listexpr /* map {...} @args or print $fh @args */
{ $$ = op_convert_list($FUNC, 0, $optexpr); }
| FUNC SUBLEXSTART optexpr SUBLEXEND /* uc($arg) from "\U..." */
{ $$ = op_convert_list($FUNC, 0, $optexpr); }
- | LSTOPSUB startanonsub block /* sub f(&@); f { foo } ... */
- { SvREFCNT_inc_simple_void(PL_compcv);
- $<opval>$ = newANONATTRSUB($startanonsub, 0, NULL, $block);
- /* prevent double op_free() if the following fails to parse */
- $block = NULL;
- }[anonattrsub]
- optlistexpr %prec LSTOP /* ... @bar */
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST,
- op_prepend_elem(OP_LIST, $<opval>anonattrsub, $optlistexpr), $LSTOPSUB));
+ | LSTOPSUB
+ startanonsub
+ block
+ /* sub f(&@); f { foo } ... */
+ {
+ SvREFCNT_inc_simple_void(PL_compcv);
+ $<opval>$ = newANONATTRSUB($startanonsub, 0, NULL, $block);
+ /* prevent double op_free() if the following fails to parse */
+ $block = NULL;
+ }[anonattrsub]
+ optlistexpr
+ %prec LSTOP
+ /* ... @bar */
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ op_append_elem (
+ OP_LIST,
+ op_prepend_elem (
+ OP_LIST,
+ $<opval>anonattrsub,
+ $optlistexpr
+ ),
+ $LSTOPSUB
+ )
+ );
}
;
@@ -1458,18 +1475,36 @@ subscripted: gelem subscript_keys[selector] /* *main::{something} */
{ $$ = newBINOP(OP_HELEM, 0,
ref(newHVREF($hash_reference),OP_RV2HV),
jmaybe($selector)); }
- | subscriptable_reference[code_reference] PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE /* $subref->(@args); $foo->{bar}(@args) */
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, $expr,
- newCVREF(0, scalar($code_reference))));
- if (parser->expect == XBLOCK)
- parser->expect = XOPERATOR;
- }
- | subscriptable_reference[code_reference] PERLY_PAREN_OPEN PERLY_PAREN_CLOSE /* $subref->(); $foo->{bar}() */
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar($code_reference)));
- if (parser->expect == XBLOCK)
- parser->expect = XOPERATOR;
+ | subscriptable_reference [code_reference]
+ PERLY_PAREN_OPEN
+ expr
+ PERLY_PAREN_CLOSE
+ /* $subref->(@args); $foo->{bar}(@args) */
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ op_append_elem (
+ OP_LIST,
+ $expr,
+ newCVREF (0, scalar ($code_reference))
+ )
+ );
+ if (parser->expect == XBLOCK)
+ parser->expect = XOPERATOR;
+ }
+ | subscriptable_reference[code_reference]
+ PERLY_PAREN_OPEN
+ PERLY_PAREN_CLOSE
+ /* $subref->(); $foo->{bar}() */
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ newCVREF (0, scalar($code_reference))
+ );
+ if (parser->expect == XBLOCK)
+ parser->expect = XOPERATOR;
}
| PERLY_PAREN_OPEN expr[list] PERLY_PAREN_CLOSE subscript_index[selector] /* list slice */
{ $$ = newSLICEOP(0, $selector, $list); }
@@ -1703,19 +1738,56 @@ term[product] : termbinop
}
| THING %prec PERLY_PAREN_OPEN
{ $$ = $THING; }
- | amper /* &foo; */
- { $$ = newUNOP(OP_ENTERSUB, 0, scalar($amper)); }
- | amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE /* &foo() or foo() */
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($amper));
+ | amper
+ /* &foo; */
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ 0,
+ scalar ($amper)
+ );
}
- | amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE /* &foo(@args) or foo(@args) */
+ | amper
+ PERLY_PAREN_OPEN
+ PERLY_PAREN_CLOSE
+ /* &foo() or foo() */
{
- $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, $expr, scalar($amper)));
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ scalar ($amper)
+ );
}
- | NOAMP subname optlistexpr /* foo @args (no parens) */
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, $optlistexpr, scalar($subname)));
+ | amper
+ PERLY_PAREN_OPEN
+ expr
+ PERLY_PAREN_CLOSE
+ /* &foo(@args) or foo(@args) */
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ op_append_elem (
+ OP_LIST,
+ $expr,
+ scalar ($amper)
+ )
+ );
+ }
+ | NOAMP
+ subname
+ optlistexpr
+ /* foo @args (no parens) */
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ op_append_elem (
+ OP_LIST,
+ $optlistexpr,
+ scalar ($subname)
+ )
+ );
}
| term[operand] ARROW PERLY_DOLLAR PERLY_STAR
{ $$ = newSVREF($operand); }
@@ -1746,10 +1818,27 @@ term[product] : termbinop
| KW_REQUIRE term[operand] /* require Foo */
{ $$ = newUNOP(OP_REQUIRE, $KW_REQUIRE ? OPf_SPECIAL : 0, $operand); }
| UNIOPSUB
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($UNIOPSUB)); }
- | UNIOPSUB term[operand] /* Sub treated as unop */
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, $operand, scalar($UNIOPSUB))); }
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ scalar ($UNIOPSUB)
+ );
+ }
+ | UNIOPSUB
+ term[operand]
+ /* Sub treated as unop */
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ op_append_elem (
+ OP_LIST,
+ $operand,
+ scalar ($UNIOPSUB)
+ )
+ );
+ }
| FUNC0 /* Nullary operator */
{ $$ = newOP($FUNC0, 0); }
| FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE
@@ -1758,8 +1847,15 @@ term[product] : termbinop
{ $$ = $FUNC0OP; }
| FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE
{ $$ = $FUNC0OP; }
- | FUNC0SUB /* Sub treated as nullop */
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($FUNC0SUB)); }
+ | FUNC0SUB
+ /* Sub treated as nullop */
+ {
+ $$ = newUNOP (
+ OP_ENTERSUB,
+ OPf_STACKED,
+ scalar ($FUNC0SUB)
+ );
+ }
| FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE /* not () */
{ $$ = ($FUNC1 == OP_NOT)
? newUNOP($FUNC1, 0, newSVOP(OP_CONST, 0, newSViv(0)))