Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-XS-Parse-Keyword for
openSUSE:Factory checked in at 2022-08-17 18:16:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-XS-Parse-Keyword (Old)
and /work/SRC/openSUSE:Factory/.perl-XS-Parse-Keyword.new.1521 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-XS-Parse-Keyword"
Wed Aug 17 18:16:38 2022 rev:8 rq:997338 version:0.25
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-XS-Parse-Keyword/perl-XS-Parse-Keyword.changes
2022-06-28 15:21:43.733884762 +0200
+++
/work/SRC/openSUSE:Factory/.perl-XS-Parse-Keyword.new.1521/perl-XS-Parse-Keyword.changes
2022-08-17 18:23:04.175168450 +0200
@@ -1,0 +2,15 @@
+Wed Jul 27 03:09:17 UTC 2022 - Tina M??ller <[email protected]>
+
+- updated to 0.25
+ see /usr/share/doc/packages/perl-XS-Parse-Keyword/Changes
+
+ 0.25 2022-07-25
+ [CHANGES]
+ * Permit infix operators to consume fewer than all the available
+ symbols; allowing for RHS operands that begin with symbols without
+ intervening whitespace
+ * Improved unit-testing of infix operator parser precedence issues
+ * Added `XPI_OPERAND_ARITH`; renumbered `XPI_OPERAND_TERM` to be
+ non-zero. Currently zero is accepted for back-compat
+
+-------------------------------------------------------------------
Old:
----
XS-Parse-Keyword-0.24.tar.gz
New:
----
XS-Parse-Keyword-0.25.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-XS-Parse-Keyword.spec ++++++
--- /var/tmp/diff_new_pack.RoDUPo/_old 2022-08-17 18:23:04.563169255 +0200
+++ /var/tmp/diff_new_pack.RoDUPo/_new 2022-08-17 18:23:04.567169263 +0200
@@ -18,7 +18,7 @@
%define cpan_name XS-Parse-Keyword
Name: perl-XS-Parse-Keyword
-Version: 0.24
+Version: 0.25
Release: 0
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: XS functions to assist in parsing keyword syntax
++++++ XS-Parse-Keyword-0.24.tar.gz -> XS-Parse-Keyword-0.25.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/Changes
new/XS-Parse-Keyword-0.25/Changes
--- old/XS-Parse-Keyword-0.24/Changes 2022-06-26 20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/Changes 2022-07-26 00:36:23.000000000 +0200
@@ -1,5 +1,14 @@
Revision history for XS-Parse-Keyword
+0.25 2022-07-25
+ [CHANGES]
+ * Permit infix operators to consume fewer than all the available
+ symbols; allowing for RHS operands that begin with symbols without
+ intervening whitespace
+ * Improved unit-testing of infix operator parser precedence issues
+ * Added `XPI_OPERAND_ARITH`; renumbered `XPI_OPERAND_TERM` to be
+ non-zero. Currently zero is accepted for back-compat
+
0.24 2022-06-26
[CHANGES]
* Skip attempting to create duplicate wrapper funcs, in case of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/META.json
new/XS-Parse-Keyword-0.25/META.json
--- old/XS-Parse-Keyword-0.24/META.json 2022-06-26 20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/META.json 2022-07-26 00:36:23.000000000 +0200
@@ -40,19 +40,19 @@
"provides" : {
"XS::Parse::Infix" : {
"file" : "lib/XS/Parse/Infix.pm",
- "version" : "0.24"
+ "version" : "0.25"
},
"XS::Parse::Infix::Builder" : {
"file" : "lib/XS/Parse/Infix/Builder.pm",
- "version" : "0.24"
+ "version" : "0.25"
},
"XS::Parse::Keyword" : {
"file" : "lib/XS/Parse/Keyword.pm",
- "version" : "0.24"
+ "version" : "0.25"
},
"XS::Parse::Keyword::Builder" : {
"file" : "lib/XS/Parse/Keyword/Builder.pm",
- "version" : "0.24"
+ "version" : "0.25"
}
},
"release_status" : "stable",
@@ -61,6 +61,6 @@
"http://dev.perl.org/licenses/"
]
},
- "version" : "0.24",
+ "version" : "0.25",
"x_serialization_backend" : "JSON::PP version 4.06"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/META.yml
new/XS-Parse-Keyword-0.25/META.yml
--- old/XS-Parse-Keyword-0.24/META.yml 2022-06-26 20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/META.yml 2022-07-26 00:36:23.000000000 +0200
@@ -19,19 +19,19 @@
provides:
XS::Parse::Infix:
file: lib/XS/Parse/Infix.pm
- version: '0.24'
+ version: '0.25'
XS::Parse::Infix::Builder:
file: lib/XS/Parse/Infix/Builder.pm
- version: '0.24'
+ version: '0.25'
XS::Parse::Keyword:
file: lib/XS/Parse/Keyword.pm
- version: '0.24'
+ version: '0.25'
XS::Parse::Keyword::Builder:
file: lib/XS/Parse/Keyword/Builder.pm
- version: '0.24'
+ version: '0.25'
requires:
perl: '5.014'
resources:
license: http://dev.perl.org/licenses/
-version: '0.24'
+version: '0.25'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/XSParseInfix.h
new/XS-Parse-Keyword-0.25/XSParseInfix.h
--- old/XS-Parse-Keyword-0.24/XSParseInfix.h 2022-06-26 20:38:08.000000000
+0200
+++ new/XS-Parse-Keyword-0.25/XSParseInfix.h 2022-07-26 00:36:23.000000000
+0200
@@ -31,13 +31,15 @@
/* lhs_flags, rhs_flags */
enum {
- XPI_OPERAND_TERM = 0, /* the "default" termexpr with no context */
/* other space reserved for other scalar types */
+ XPI_OPERAND_ARITH = 2,
+ XPI_OPERAND_TERM = 4,
XPI_OPERAND_TERM_LIST = 6, /* term in list context */
XPI_OPERAND_LIST = 7, /* list in list context */
/* Other bitflags */
XPI_OPERAND_ONLY_LOOK = (1<<3),
+ XPI_OPERAND_CUSTOM = (1<<7), /* rhs_flags only */
};
struct XSParseInfixHooks {
@@ -54,6 +56,9 @@
/* These hooks are alternatives; the first one defined is used */
OP *(*new_op)(pTHX_ U32 flags, OP *lhs, OP *rhs, void *hookdata);
OP *(*ppaddr)(pTHX); /* A pp func used directly in newBINOP_custom() */
+
+ /* Used if rhs_flags & XPI_OPERAND_CUSTOM */
+ OP *(*parse_rhs)(pTHX_ void *hookdata);
};
struct XSParseInfixInfo {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/hax/perl-backcompat.c.inc
new/XS-Parse-Keyword-0.25/hax/perl-backcompat.c.inc
--- old/XS-Parse-Keyword-0.24/hax/perl-backcompat.c.inc 2022-06-26
20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/hax/perl-backcompat.c.inc 2022-07-26
00:36:23.000000000 +0200
@@ -23,6 +23,7 @@
typedef SV PADNAME;
# define PadnamePV(pn) (SvPOKp(pn) ? SvPVX(pn) : NULL)
# define PadnameLEN(pn) SvCUR(pn)
+# define PadnameIsSTATE(pn) (!!SvPAD_STATE(pn))
# define PadnameOUTER(pn) (SvFAKE(pn) && !SvPAD_STATE(pn))
# define PadnamelistARRAY(pnl) AvARRAY(pnl)
# define PadnamelistMAX(pnl) AvFILLp(pnl)
@@ -31,6 +32,14 @@
# define PadMAX(pad) AvFILLp(pad)
#endif
+#if !HAVE_PERL_VERSION(5, 22, 0)
+# define CvPADLIST_set(cv, padlist) (CvPADLIST(cv) = padlist)
+#endif
+
+#ifndef av_count
+# define av_count(av) (AvFILL(av) + 1)
+#endif
+
#ifndef av_top_index
# define av_top_index(av) AvFILL(av)
#endif
@@ -43,6 +52,10 @@
# define block_start(a) Perl_block_start(aTHX_ a)
#endif
+#ifndef cophh_exists_pvs
+# define cophh_exists_pvs(a,b,c) cBOOL(cophh_fetch_pvs(a,b,c))
+#endif
+
#ifndef cv_clone
# define cv_clone(a) Perl_cv_clone(aTHX_ a)
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/lib/XS/Parse/Infix/Builder.pm
new/XS-Parse-Keyword-0.25/lib/XS/Parse/Infix/Builder.pm
--- old/XS-Parse-Keyword-0.24/lib/XS/Parse/Infix/Builder.pm 2022-06-26
20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/lib/XS/Parse/Infix/Builder.pm 2022-07-26
00:36:23.000000000 +0200
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2021 -- [email protected]
-package XS::Parse::Infix::Builder 0.24;
+package XS::Parse::Infix::Builder 0.25;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/XS-Parse-Keyword-0.24/lib/XS/Parse/Infix/Builder_data.pm.PL
new/XS-Parse-Keyword-0.25/lib/XS/Parse/Infix/Builder_data.pm.PL
--- old/XS-Parse-Keyword-0.24/lib/XS/Parse/Infix/Builder_data.pm.PL
2022-06-26 20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/lib/XS/Parse/Infix/Builder_data.pm.PL
2022-07-26 00:36:23.000000000 +0200
@@ -28,7 +28,7 @@
<$in_h> } );
__DATA__
-package XS::Parse::Infix::Builder_data 0.24;
+package XS::Parse::Infix::Builder_data 0.25;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/lib/XS/Parse/Infix.pm
new/XS-Parse-Keyword-0.25/lib/XS/Parse/Infix.pm
--- old/XS-Parse-Keyword-0.24/lib/XS/Parse/Infix.pm 2022-06-26
20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/lib/XS/Parse/Infix.pm 2022-07-26
00:36:23.000000000 +0200
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2021 -- [email protected]
-package XS::Parse::Infix 0.24;
+package XS::Parse::Infix 0.25;
use v5.14;
use warnings;
@@ -137,9 +137,13 @@
=over 4
-=item XPI_OPERAND_TERM (0)
+=item XPI_OPERAND_ARITH
-Default. The operand is a term expression.
+The operand is an arithmetic expression.
+
+=item XPI_OPERAND_TERM
+
+The operand is a term expression.
=item XPI_OPERAND_TERM_LIST
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/XS-Parse-Keyword-0.24/lib/XS/Parse/Keyword/Builder.pm
new/XS-Parse-Keyword-0.25/lib/XS/Parse/Keyword/Builder.pm
--- old/XS-Parse-Keyword-0.24/lib/XS/Parse/Keyword/Builder.pm 2022-06-26
20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/lib/XS/Parse/Keyword/Builder.pm 2022-07-26
00:36:23.000000000 +0200
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2021 -- [email protected]
-package XS::Parse::Keyword::Builder 0.24;
+package XS::Parse::Keyword::Builder 0.25;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/XS-Parse-Keyword-0.24/lib/XS/Parse/Keyword/Builder_data.pm.PL
new/XS-Parse-Keyword-0.25/lib/XS/Parse/Keyword/Builder_data.pm.PL
--- old/XS-Parse-Keyword-0.24/lib/XS/Parse/Keyword/Builder_data.pm.PL
2022-06-26 20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/lib/XS/Parse/Keyword/Builder_data.pm.PL
2022-07-26 00:36:23.000000000 +0200
@@ -28,7 +28,7 @@
<$in_h> } );
__DATA__
-package XS::Parse::Keyword::Builder_data 0.24;
+package XS::Parse::Keyword::Builder_data 0.25;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/lib/XS/Parse/Keyword.pm
new/XS-Parse-Keyword-0.25/lib/XS/Parse/Keyword.pm
--- old/XS-Parse-Keyword-0.24/lib/XS/Parse/Keyword.pm 2022-06-26
20:38:08.000000000 +0200
+++ new/XS-Parse-Keyword-0.25/lib/XS/Parse/Keyword.pm 2022-07-26
00:36:23.000000000 +0200
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2021-2022 -- [email protected]
-package XS::Parse::Keyword 0.24;
+package XS::Parse::Keyword 0.25;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/src/infix.c
new/XS-Parse-Keyword-0.25/src/infix.c
--- old/XS-Parse-Keyword-0.24/src/infix.c 2022-06-26 20:38:08.000000000
+0200
+++ new/XS-Parse-Keyword-0.25/src/infix.c 2022-07-26 00:36:23.000000000
+0200
@@ -73,26 +73,58 @@
static enum OperandShape operand_shape(const struct HooksAndData *hd)
{
- U8 args_flags = (hd->hooks->lhs_flags & 0x07) << 4 | (hd->hooks->rhs_flags &
0x07);
+ U8 lhs_gimme;
+ switch(hd->hooks->lhs_flags & 0x07) {
+ case 0: /* back-compat */
+ case XPI_OPERAND_ARITH:
+ case XPI_OPERAND_TERM:
+ lhs_gimme = G_SCALAR;
+ break;
- switch(args_flags) {
- /* scalar OP scalar */
+ case XPI_OPERAND_TERM_LIST:
+ case XPI_OPERAND_LIST:
+ lhs_gimme = G_LIST;
+ break;
+
+ default:
+ croak("TODO: Unsure how to classify operand shape of .lhs_flags=%02X\n",
+ hd->hooks->lhs_flags & 0x07);
+ }
+
+ U8 rhs_gimme;
+ switch(hd->hooks->rhs_flags & 0x07) {
+ case 0: /* back-compat */
+ case XPI_OPERAND_ARITH:
case XPI_OPERAND_TERM:
- return SHAPE_SCALARSCALAR;
+ rhs_gimme = G_SCALAR;
+ break;
- /* scalar OP list */
case XPI_OPERAND_TERM_LIST:
case XPI_OPERAND_LIST:
+ rhs_gimme = G_LIST;
+ break;
+
+ default:
+ croak("TODO: Unsure how to classify operand shape of .rhs_flags=%02X\n",
+ hd->hooks->rhs_flags & 0x07);
+ }
+
+ switch((lhs_gimme << 4) | (rhs_gimme)) {
+ /* scalar OP scalar */
+ case (G_SCALAR<<4) | G_SCALAR:
+ return SHAPE_SCALARSCALAR;
+
+ /* scalar OP list */
+ case (G_SCALAR<<4) | G_LIST:
return SHAPE_SCALARLIST;
/* list OP list */
- case (XPI_OPERAND_TERM_LIST<<4) | XPI_OPERAND_TERM_LIST:
- case (XPI_OPERAND_TERM_LIST<<4) | XPI_OPERAND_LIST:
+ case (G_LIST<<4) | G_LIST:
return SHAPE_LISTLIST;
default:
- croak("TODO: Unsure how to classify operand shape of args_flags=%02X\n",
- args_flags);
+ croak("TODO: Unsure how to classify operand shape of lhs_gimme=%d
rhs_gimme=%d\n",
+ lhs_gimme, rhs_gimme);
break;
}
}
@@ -217,7 +249,12 @@
lex_read_space(0);
OP *rhs = NULL;
- switch(reg->hd.hooks->rhs_flags & 0x07) {
+ switch(reg->hd.hooks->rhs_flags & 0x87) {
+ case XPI_OPERAND_ARITH:
+ rhs = parse_arithexpr(0);
+ break;
+
+ case 0: /* back-compat */
case XPI_OPERAND_TERM:
rhs = parse_termexpr(0);
break;
@@ -230,6 +267,10 @@
rhs = force_list_keeping_pushmark(parse_listexpr(0));
break;
+ case XPI_OPERAND_CUSTOM:
+ rhs = (*reg->hd.hooks->parse_rhs)(aTHX_ reg->hd.data);
+ break;
+
default:
croak("hooks->rhs_flags did not provide a valid RHS type");
}
@@ -246,13 +287,13 @@
HV *hints = GvHV(PL_hintgv);
- struct Registration *reg;
+ struct Registration *reg, *bestreg = NULL;
for(reg = registrations; reg; reg = reg->next) {
/* custom registrations have hooks, builtin ones do not */
if(!reg->hd.hooks)
continue;
- if(reg->oplen != oplen || !strEQ(reg->info.opname, op))
+ if(reg->oplen > oplen || !strnEQ(reg->info.opname, op, reg->oplen))
continue;
if(reg->hd.hooks->permit_hintkey &&
@@ -263,11 +304,20 @@
!(*reg->hd.hooks->permit)(aTHX_ reg->hd.data))
continue;
- *def = ®->def;
- return oplen;
+ /* This is a candidate and the best one, unless we already have something
+ * longer
+ */
+ if(bestreg && bestreg->oplen > reg->oplen)
+ continue;
+
+ bestreg = reg;
}
- return (*next_infix_plugin)(aTHX_ op, oplen, def);
+ if(!bestreg)
+ return (*next_infix_plugin)(aTHX_ op, oplen, def);
+
+ *def = &bestreg->def;
+ return bestreg->oplen;
}
#endif
@@ -622,6 +672,9 @@
}
switch(hooks->lhs_flags & ~(XPI_OPERAND_ONLY_LOOK)) {
+ case 0:
+ //warn("No .lhs_flags specified for XSParseInfixHooks; defaulting to
XPI_OPERAND_TERM");
+ /* FALLTHROUGH */
case XPI_OPERAND_TERM:
case XPI_OPERAND_TERM_LIST:
break;
@@ -630,9 +683,14 @@
}
switch(hooks->rhs_flags & ~(XPI_OPERAND_ONLY_LOOK)) {
+ case 0:
+ //warn("No .rhs_flags specified for XSParseInfixHooks; defaulting to
XPI_OPERAND_TERM");
+ /* FALLTHROUGH */
+ case XPI_OPERAND_ARITH:
case XPI_OPERAND_TERM:
case XPI_OPERAND_TERM_LIST:
case XPI_OPERAND_LIST:
+ case XPI_OPERAND_CUSTOM:
break;
default:
croak("Unrecognised XSParseInfixHooks.rhs_flags value 0x%X",
hooks->rhs_flags);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/t/70infix.t
new/XS-Parse-Keyword-0.25/t/70infix.t
--- old/XS-Parse-Keyword-0.24/t/70infix.t 2022-06-26 20:38:08.000000000
+0200
+++ new/XS-Parse-Keyword-0.25/t/70infix.t 2022-07-26 00:36:23.000000000
+0200
@@ -6,16 +6,16 @@
use Test::More;
-use B qw( svref_2object walkoptree );
-
use B::Deparse;
-my $deparser = B::Deparse->new();
+my $deparser = B::Deparse->new( "-p" );
use lib "t";
use testcase "t::infix";
BEGIN { plan skip_all => "No PL_infix_plugin" unless
XS::Parse::Infix::HAVE_PL_INFIX_PLUGIN; }
+use v5.16;
+
BEGIN { $^H{"t::infix/permit"} = 1; }
{
@@ -38,6 +38,64 @@
[ 3, 5, 7 ], 'addpairs infix operator' );
}
+sub _getoptree
+{
+ my ( $sub ) = @_;
+
+ # Ugh - this would be so much neater if we could pass coderefs into
+ # B::walkoptree directly
+ # Additionally there's no pre-mid-postfix walk options :(
+
+ my $dump_optree = sub {
+ my $sub = __SUB__;
+ my ( $op ) = @_;
+ my $opname = $op->name;
+
+ # Avoid test-dependence on the actual ppaddr by mangling out the name
+ $opname =~ s/0x[[:xdigit:]]+/0xXXX/;
+
+ return $op->first->$sub if $opname eq "null";
+
+ my @kids;
+ if( $op->flags & B::OPf_KIDS ) {
+ my $kid = $op->first;
+ while( $kid ) {
+ push @kids, $kid->$sub;
+
+ $kid = $kid->sibling; undef $kid if ref($kid) eq "B::NULL";
+ }
+ }
+
+ my $ret = $opname;
+ $ret .= "[" . join( ", ", @kids ) . "]" if @kids;
+ return $ret;
+ };
+
+ # Reach inside to the first statement
+ return B::svref_2object( $sub )->ROOT->first->first->sibling
+ ->$dump_optree;
+}
+
+sub is_optree
+{
+ my ( $sub, $exp, $name ) = @_;
+ is( _getoptree( $sub ), $exp, $name );
+}
+
+{
+ is_optree sub { $_[0] add $_[1] },
+ "infix_add_0xXXX[aelemfast, aelemfast]",
+ 'optree of call to infix operator';
+
+ is_optree sub { $_[0] * $_[1] add $_[2] * $_[3] },
+ "infix_add_0xXXX[multiply[aelemfast, aelemfast], multiply[aelemfast,
aelemfast]]",
+ 'optree of call to infix operator at default precedence';
+
+ is_optree sub { $_[0] * ($_[1] add $_[2]) * $_[3] },
+ "multiply[multiply[aelemfast, infix_add_0xXXX[aelemfast, aelemfast]],
aelemfast]",
+ 'optree of call to infix operator at forced precedence';
+}
+
sub is_deparsed
{
my ( $sub, $exp, $name ) = @_;
@@ -60,6 +118,10 @@
'$_[0] add $_[1];',
'deparsed call to infix operator';
+ is_deparsed sub { $_[0] * $_[1] add $_[2] * $_[3] },
+ '($_[0] * $_[1]) add ($_[2] * $_[3]);',
+ 'deparsed call to infix operator at default precedence';
+
is_deparsed sub { $_[0] ??? $_[1] },
'$_[0] ??? $_[1];',
'deparsed operator yields UTF-8';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.24/t/infix.xs
new/XS-Parse-Keyword-0.25/t/infix.xs
--- old/XS-Parse-Keyword-0.24/t/infix.xs 2022-06-26 20:38:08.000000000
+0200
+++ new/XS-Parse-Keyword-0.25/t/infix.xs 2022-07-26 00:36:23.000000000
+0200
@@ -26,6 +26,8 @@
}
static const struct XSParseInfixHooks hooks_add = {
+ .lhs_flags = XPI_OPERAND_TERM,
+ .rhs_flags = XPI_OPERAND_TERM,
.permit_hintkey = hintkey,
.cls = 0,
@@ -44,6 +46,8 @@
}
static const struct XSParseInfixHooks hooks_xor = {
+ .lhs_flags = XPI_OPERAND_TERM,
+ .rhs_flags = XPI_OPERAND_TERM,
.permit_hintkey = hintkey,
.cls = 0,
@@ -82,6 +86,7 @@
}
static const struct XSParseInfixHooks hooks_intersperse = {
+ .lhs_flags = XPI_OPERAND_TERM,
.rhs_flags = XPI_OPERAND_LIST,
.permit_hintkey = hintkey,
.cls = 0,