--- Data-Alias-1.18-orig/Alias.xs 2013-09-21 08:02:59.000000000 -0700
+++ Data-Alias-1.18-hsUEy_/Alias.xs 2014-09-10 08:15:07.000000000 -0700
@@ -1800,6 +1800,7 @@ STATIC void da_peep2(pTHX_ OP *o) {
useful = o->op_private & OPpUSEFUL;
op_null(o);
o->op_ppaddr = PL_ppaddr[OP_NULL];
+ cLISTOPo->op_last = cUNOPx(cLISTOPo->op_first)->op_first;
k = o = cLISTOPo->op_first;
while ((sib = k->op_sibling))
k = sib;
@@ -1900,8 +1901,9 @@ STATIC OP *da_ck_rv2cv(pTHX_ OP *o) {
if ((PL_nexttype[PL_nexttoke++] = yylex()) == '{') {
PL_nexttype[PL_nexttoke++] = DO;
sv_setpv((SV *) cv, "$");
- if (PERL_COMBI_VERSION >= 5011002 &&
- *PL_bufptr == '(') {
+ if ((PERL_COMBI_VERSION >= 5011002 &&
+ *PL_bufptr == '(')
+ || PERL_COMBI_VERSION >= 5021004) {
/*
* A paren here triggers special lexer
* behaviour for a parenthesised argument
@@ -1910,6 +1912,10 @@ STATIC OP *da_ck_rv2cv(pTHX_ OP *o) {
* Suppress it by injecting a semicolon,
* which is otherwise a no-op coming just
* after the opening brace of a block.
+ * Also inject the semicolon for 5.21.4
+ * and higher, because our setting of
+ * PL_expect is undone, as PL_lex_expect
+ * is not used any more.
*/
Move(PL_bufptr, PL_bufptr+1,
PL_bufend+1-PL_bufptr, char);
@@ -1920,7 +1926,9 @@ STATIC OP *da_ck_rv2cv(pTHX_ OP *o) {
}
if(PL_lex_state != LEX_KNOWNEXT) {
PL_lex_defer = PL_lex_state;
+#if PERL_COMBI_VERSION < 5021004
PL_lex_expect = PL_expect;
+#endif
PL_lex_state = LEX_KNOWNEXT;
}
PL_yylval = yylval;