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 2024-07-31 13:28:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-XS-Parse-Keyword (Old)
and /work/SRC/openSUSE:Factory/.perl-XS-Parse-Keyword.new.7232 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-XS-Parse-Keyword"
Wed Jul 31 13:28:17 2024 rev:22 rq:1190267 version:0.440.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-XS-Parse-Keyword/perl-XS-Parse-Keyword.changes
2024-07-08 19:06:53.595740468 +0200
+++
/work/SRC/openSUSE:Factory/.perl-XS-Parse-Keyword.new.7232/perl-XS-Parse-Keyword.changes
2024-07-31 13:28:21.865513104 +0200
@@ -1,0 +2,16 @@
+Sat Jul 20 05:29:36 UTC 2024 - Tina Müller <[email protected]>
+
+- updated to 0.440.0 (0.44)
+ see /usr/share/doc/packages/perl-XS-Parse-Keyword/Changes
+
+ 0.44 2024-07-19
+ [BUGFIXES]
+ * `boot_xs_parse_infix()` has to load `XS/Parse/Infix.pm`, the perl
+ module
+ * Fix opname check for lexical operator alises, to match Perl's
+ actual identifier rules
+ * Fix deparse logic for fully-qualified infix operator names
+ * Fix `lex_scan_packagename()` to not get confused by attribute
+ syntax
+
+-------------------------------------------------------------------
Old:
----
XS-Parse-Keyword-0.43.tar.gz
New:
----
XS-Parse-Keyword-0.44.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-XS-Parse-Keyword.spec ++++++
--- /var/tmp/diff_new_pack.JQYJwI/_old 2024-07-31 13:28:22.497539062 +0200
+++ /var/tmp/diff_new_pack.JQYJwI/_new 2024-07-31 13:28:22.497539062 +0200
@@ -18,10 +18,10 @@
%define cpan_name XS-Parse-Keyword
Name: perl-XS-Parse-Keyword
-Version: 0.430.0
+Version: 0.440.0
Release: 0
-# 0.43 -> normalize -> 0.430.0
-%define cpan_version 0.43
+# 0.44 -> normalize -> 0.440.0
+%define cpan_version 0.44
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: XS functions to assist in parsing keyword syntax
URL: https://metacpan.org/release/%{cpan_name}
++++++ XS-Parse-Keyword-0.43.tar.gz -> XS-Parse-Keyword-0.44.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/Changes
new/XS-Parse-Keyword-0.44/Changes
--- old/XS-Parse-Keyword-0.43/Changes 2024-07-03 17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/Changes 2024-07-19 14:26:26.000000000 +0200
@@ -1,5 +1,15 @@
Revision history for XS-Parse-Keyword
+0.44 2024-07-19
+ [BUGFIXES]
+ * `boot_xs_parse_infix()` has to load `XS/Parse/Infix.pm`, the perl
+ module
+ * Fix opname check for lexical operator alises, to match Perl's
+ actual identifier rules
+ * Fix deparse logic for fully-qualified infix operator names
+ * Fix `lex_scan_packagename()` to not get confused by attribute
+ syntax
+
0.43 2024-07-03
[CHANGES]
* Use `File::ShareDir` for storing .h include files, rather than
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/META.json
new/XS-Parse-Keyword-0.44/META.json
--- old/XS-Parse-Keyword-0.43/META.json 2024-07-03 17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/META.json 2024-07-19 14:26:26.000000000 +0200
@@ -41,19 +41,19 @@
"provides" : {
"XS::Parse::Infix" : {
"file" : "lib/XS/Parse/Infix.pm",
- "version" : "0.43"
+ "version" : "0.44"
},
"XS::Parse::Infix::Builder" : {
"file" : "lib/XS/Parse/Infix/Builder.pm",
- "version" : "0.43"
+ "version" : "0.44"
},
"XS::Parse::Keyword" : {
"file" : "lib/XS/Parse/Keyword.pm",
- "version" : "0.43"
+ "version" : "0.44"
},
"XS::Parse::Keyword::Builder" : {
"file" : "lib/XS/Parse/Keyword/Builder.pm",
- "version" : "0.43"
+ "version" : "0.44"
}
},
"release_status" : "stable",
@@ -62,6 +62,6 @@
"http://dev.perl.org/licenses/"
]
},
- "version" : "0.43",
+ "version" : "0.44",
"x_serialization_backend" : "JSON::PP version 4.16"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/META.yml
new/XS-Parse-Keyword-0.44/META.yml
--- old/XS-Parse-Keyword-0.43/META.yml 2024-07-03 17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/META.yml 2024-07-19 14:26:26.000000000 +0200
@@ -19,20 +19,20 @@
provides:
XS::Parse::Infix:
file: lib/XS/Parse/Infix.pm
- version: '0.43'
+ version: '0.44'
XS::Parse::Infix::Builder:
file: lib/XS/Parse/Infix/Builder.pm
- version: '0.43'
+ version: '0.44'
XS::Parse::Keyword:
file: lib/XS/Parse/Keyword.pm
- version: '0.43'
+ version: '0.44'
XS::Parse::Keyword::Builder:
file: lib/XS/Parse/Keyword/Builder.pm
- version: '0.43'
+ version: '0.44'
requires:
File::ShareDir: '1.00'
perl: '5.014'
resources:
license: http://dev.perl.org/licenses/
-version: '0.43'
+version: '0.44'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/hax/lexer-additions.c.inc
new/XS-Parse-Keyword-0.44/hax/lexer-additions.c.inc
--- old/XS-Parse-Keyword-0.43/hax/lexer-additions.c.inc 2024-07-03
17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/hax/lexer-additions.c.inc 2024-07-19
14:26:26.000000000 +0200
@@ -45,6 +45,10 @@
char *ident = PL_parser->bufptr;
+ /* Don't get confused by things that look like attrs */
+ if((flags & LEX_IDENT_PACKAGENAME) && (ident[0] == ':' && ident[1] != ':'))
+ return FALSE;
+
while((c = lex_peek_unichar(0))) {
if(at_start ? isIDFIRST_uni(c) : isALNUM_uni(c))
at_start = FALSE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/hax/newOP_CUSTOM.c.inc
new/XS-Parse-Keyword-0.44/hax/newOP_CUSTOM.c.inc
--- old/XS-Parse-Keyword-0.43/hax/newOP_CUSTOM.c.inc 2024-07-03
17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/hax/newOP_CUSTOM.c.inc 2024-07-19
14:26:26.000000000 +0200
@@ -5,12 +5,12 @@
* https://rt.cpan.org/Ticket/Display.html?id=128562
*/
-#define newOP_CUSTOM(func, flags) S_newOP_CUSTOM(aTHX_ func,
flags)
-#define newUNOP_CUSTOM(func, flags, first) S_newUNOP_CUSTOM(aTHX_
func, flags, first)
-#define newSVOP_CUSTOM(func, flags, sv) S_newSVOP_CUSTOM(aTHX_
func, flags, sv)
-#define newBINOP_CUSTOM(func, flags, first, last) S_newBINOP_CUSTOM(aTHX_
func, flags, first, last)
-#define newLISTOP_CUSTOM(func, flags, first, last) S_newLISTOP_CUSTOM(aTHX_
func, flags, first, last)
-#define newLOGOP_CUSTOM(func, flags, first, other) S_newLOGOP_CUSTOM(aTHX_
func, flags, first, other)
+#define newOP_CUSTOM(func, flags) S_newOP_CUSTOM(aTHX_
func, flags)
+#define newUNOP_CUSTOM(func, flags, first) S_newUNOP_CUSTOM(aTHX_
func, flags, first)
+#define newSVOP_CUSTOM(func, flags, sv) S_newSVOP_CUSTOM(aTHX_
func, flags, sv)
+#define newBINOP_CUSTOM(func, flags, first, last) S_newBINOP_CUSTOM(aTHX_
func, flags, first, last)
+#define newLISTOP_CUSTOM(func, flags, first, last) S_newLISTOP_CUSTOM(aTHX_
func, flags, first, last)
+#define newLOGOP_CUSTOM(func, flags, first, other) S_newLOGOP_CUSTOM(aTHX_
func, flags, first, other)
static OP *S_newOP_CUSTOM(pTHX_ OP *(*func)(pTHX), U32 flags)
{
@@ -132,3 +132,15 @@
return o;
}
+
+#if HAVE_PERL_VERSION(5, 22, 0)
+# define newUNOP_AUX_CUSTOM(func, flags, first, aux)
S_newUNOP_AUX_CUSTOM(aTHX_ func, flags, first, aux)
+
+static OP *S_newUNOP_AUX_CUSTOM(pTHX_ OP *(*func)(pTHX), U32 flags, OP *first,
UNOP_AUX_item *aux)
+{
+ UNOP_AUX *unop;
+ unop = (UNOP_AUX *)newUNOP_AUX(OP_CUSTOM, flags, first, aux);
+ unop->op_ppaddr = func;
+ return (OP *)unop;
+}
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/lib/XS/Parse/Infix/Builder.pm
new/XS-Parse-Keyword-0.44/lib/XS/Parse/Infix/Builder.pm
--- old/XS-Parse-Keyword-0.43/lib/XS/Parse/Infix/Builder.pm 2024-07-03
17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/lib/XS/Parse/Infix/Builder.pm 2024-07-19
14:26:26.000000000 +0200
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2021 -- [email protected]
-package XS::Parse::Infix::Builder 0.43;
+package XS::Parse::Infix::Builder 0.44;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/XS-Parse-Keyword-0.43/lib/XS/Parse/Infix/Builder_data.pm.PL
new/XS-Parse-Keyword-0.44/lib/XS/Parse/Infix/Builder_data.pm.PL
--- old/XS-Parse-Keyword-0.43/lib/XS/Parse/Infix/Builder_data.pm.PL
2024-07-03 17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/lib/XS/Parse/Infix/Builder_data.pm.PL
2024-07-19 14:26:26.000000000 +0200
@@ -23,7 +23,7 @@
=~ s/__BUILDER_CFLAGS__/$quoted_cflags/r );
__DATA__
-package XS::Parse::Infix::Builder_data 0.43;
+package XS::Parse::Infix::Builder_data 0.44;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/lib/XS/Parse/Infix.pm
new/XS-Parse-Keyword-0.44/lib/XS/Parse/Infix.pm
--- old/XS-Parse-Keyword-0.43/lib/XS/Parse/Infix.pm 2024-07-03
17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/lib/XS/Parse/Infix.pm 2024-07-19
14:26:26.000000000 +0200
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2021-2024 -- [email protected]
-package XS::Parse::Infix 0.43;
+package XS::Parse::Infix 0.44;
use v5.14;
use warnings;
@@ -150,9 +150,7 @@
croak "Unrecognised apply_infix options " . join( ", ", sort keys %opts )
if %opts;
- # localname must either be an identifier, or entirely non-identifier
- # characters
- $localname =~ m/\A\p{ID_Start}\p{ID_Continue}*\Z/ or $localname !~
m/\p{ID_Start}/ or
+ XS::Parse::Infix::check_opname( $localname ) or
croak "Local name '$localname' for imported operator $name is
invalid";
my $hintkey = "XS::Parse::Infix/$localname";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/XS-Parse-Keyword-0.43/lib/XS/Parse/Keyword/Builder.pm
new/XS-Parse-Keyword-0.44/lib/XS/Parse/Keyword/Builder.pm
--- old/XS-Parse-Keyword-0.43/lib/XS/Parse/Keyword/Builder.pm 2024-07-03
17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/lib/XS/Parse/Keyword/Builder.pm 2024-07-19
14:26:26.000000000 +0200
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2021 -- [email protected]
-package XS::Parse::Keyword::Builder 0.43;
+package XS::Parse::Keyword::Builder 0.44;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/XS-Parse-Keyword-0.43/lib/XS/Parse/Keyword/Builder_data.pm.PL
new/XS-Parse-Keyword-0.44/lib/XS/Parse/Keyword/Builder_data.pm.PL
--- old/XS-Parse-Keyword-0.43/lib/XS/Parse/Keyword/Builder_data.pm.PL
2024-07-03 17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/lib/XS/Parse/Keyword/Builder_data.pm.PL
2024-07-19 14:26:26.000000000 +0200
@@ -23,7 +23,7 @@
=~ s/__BUILDER_CFLAGS__/$quoted_cflags/r );
__DATA__
-package XS::Parse::Keyword::Builder_data 0.43;
+package XS::Parse::Keyword::Builder_data 0.44;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/lib/XS/Parse/Keyword.pm
new/XS-Parse-Keyword-0.44/lib/XS/Parse/Keyword.pm
--- old/XS-Parse-Keyword-0.43/lib/XS/Parse/Keyword.pm 2024-07-03
17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/lib/XS/Parse/Keyword.pm 2024-07-19
14:26:26.000000000 +0200
@@ -3,7 +3,7 @@
#
# (C) Paul Evans, 2021-2023 -- [email protected]
-package XS::Parse::Keyword 0.43;
+package XS::Parse::Keyword 0.44;
use v5.14;
use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/lib/XS/Parse/Keyword.xs
new/XS-Parse-Keyword-0.44/lib/XS/Parse/Keyword.xs
--- old/XS-Parse-Keyword-0.43/lib/XS/Parse/Keyword.xs 2024-07-03
17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/lib/XS/Parse/Keyword.xs 2024-07-19
14:26:26.000000000 +0200
@@ -59,6 +59,18 @@
XSParseInfix_register(aTHX_ opname, hooks, hookdata);
}
+MODULE = XS::Parse::Keyword PACKAGE = XS::Parse::Infix
+
+bool check_opname(SV *opname)
+ CODE:
+ {
+ STRLEN namelen;
+ const char *namepv = SvPV(opname, namelen);
+ RETVAL = XSParseInfix_check_opname(aTHX_ namepv, namelen);
+ }
+ OUTPUT:
+ RETVAL
+
MODULE = XS::Parse::Keyword PACKAGE = XS::Parse::Keyword
BOOT:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/share/include/XSParseInfix.h
new/XS-Parse-Keyword-0.44/share/include/XSParseInfix.h
--- old/XS-Parse-Keyword-0.43/share/include/XSParseInfix.h 2024-07-03
17:20:57.000000000 +0200
+++ new/XS-Parse-Keyword-0.44/share/include/XSParseInfix.h 2024-07-19
14:26:26.000000000 +0200
@@ -122,8 +122,7 @@
SV **svp;
SV *versv = ver ? newSVnv(ver) : NULL;
- /* XS::Parse::Infix is implemented in XS::Parse::Keyword's .so file */
- load_module(PERL_LOADMOD_NOIMPORT, newSVpvs("XS::Parse::Keyword"), versv,
NULL);
+ load_module(PERL_LOADMOD_NOIMPORT, newSVpvs("XS::Parse::Infix"), versv,
NULL);
svp = hv_fetchs(PL_modglobal, "XS::Parse::Infix/ABIVERSION_MIN", 0);
if(!svp)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/src/infix.c
new/XS-Parse-Keyword-0.44/src/infix.c
--- old/XS-Parse-Keyword-0.43/src/infix.c 2024-07-03 17:20:57.000000000
+0200
+++ new/XS-Parse-Keyword-0.44/src/infix.c 2024-07-19 14:26:26.000000000
+0200
@@ -159,6 +159,7 @@
int opname_is_WIDE : 1;
int opname_is_ident : 1;
+ int opname_is_fq : 1;
};
static struct Registration *registrations, /* for legacy-style global
key-enabled ones */
@@ -879,14 +880,40 @@
SV **hinthashsvp = hv_fetchs(MUTABLE_HV(SvRV(deparseobj)), "hinthash", 0);
HV *hinthash = hinthashsvp ? MUTABLE_HV(SvRV(*hinthashsvp)) : NULL;
- if(hinthash && hv_fetch(hinthash, reg->hd.hooks->permit_hintkey,
reg->permit_hintkey_len, 0)) {
+ SV *opnamesv;
+
+ bool infix_is_visible = FALSE;
+ /* Operator visibility rules differ for fully-qualified operator names */
+ if(reg->opname_is_fq) {
+ hv_iterinit(hinthash);
+ HE *he;
+ while((he = hv_iternext(hinthash))) {
+#define PREFIXLEN 17
+ STRLEN len;
+ if(!strnEQ(HePV(he, len), "XS::Parse::Infix/", PREFIXLEN))
+ continue;
+
+ if(!strEQ(SvPV_nolen(HeVAL(he)), reg->info.opname))
+ continue;
+
+ infix_is_visible = TRUE;
+ opnamesv = newSVpvn_flags(HePV(he, len) + PREFIXLEN, len - PREFIXLEN,
HeUTF8(he) ? SVf_UTF8 : 0);
+ break;
+ }
+ }
+ else {
+ infix_is_visible = (hinthash && hv_fetch(hinthash,
reg->hd.hooks->permit_hintkey, reg->permit_hintkey_len, 0));
+ opnamesv = newSVpvn_flags(reg->info.opname, reg->oplen,
reg->opname_is_WIDE ? SVf_UTF8 : 0);
+ }
+
+ if(infix_is_visible) {
ENTER;
SAVETMPS;
EXTEND(SP, 4);
PUSHMARK(SP);
PUSHs(deparseobj);
- mPUSHs(newSVpvn_flags(reg->info.opname, reg->oplen, reg->opname_is_WIDE ?
SVf_UTF8 : 0));
+ mPUSHs(opnamesv);
PUSHs(ST(1));
PUSHs(ST(2));
PUTBACK;
@@ -959,6 +986,33 @@
}
}
+bool XSParseInfix_check_opname(pTHX_ const char *opname, STRLEN oplen)
+{
+ const char *opname_end = opname + oplen;
+
+ bool opname_is_fq = strstr(opname, "::") != NULL;
+ bool opname_is_ident = !opname_is_fq && isIDFIRST_utf8_safe(opname,
opname_end);
+
+ const char *s = opname;
+ s += UTF8SKIP(s);
+
+ while(s < opname_end) {
+ if(opname_is_ident) {
+ if(!isIDCONT_utf8_safe(s, opname_end))
+ // name that starts with an identifier may not have non-identifier
characters in it
+ return FALSE;
+ }
+ else {
+ if(isIDFIRST_utf8_safe(s, opname_end))
+ // name that does not start with an identifer may not have identifier
characters in it
+ return FALSE;
+ }
+ s += UTF8SKIP(s);
+ }
+
+ return TRUE;
+}
+
void XSParseInfix_register(pTHX_ const char *opname, const struct
XSParseInfixHooks *hooks, void *hookdata)
{
STRLEN oplen = strlen(opname);
@@ -967,20 +1021,8 @@
bool opname_is_ident = !opname_is_fq && isIDFIRST_utf8_safe(opname,
opname_end);
if(!opname_is_fq) {
- const char *s = opname;
- s += UTF8SKIP(s);
-
- while(s < opname_end) {
- if(opname_is_ident) {
- if(!isIDCONT_utf8_safe(s, opname_end))
- croak("Infix operator name that starts with an identifier may not
have non-identifier characters in it");
- }
- else {
- if(isIDFIRST_utf8_safe(s, opname_end))
- croak("Infix operator name that does not start with an identifer may
not have identifier characters in it");
- }
- s += UTF8SKIP(s);
- }
+ if(!XSParseInfix_check_opname(aTHX_ opname, oplen))
+ croak("Infix operator name is invalid; must be an identifier or entirely
non-identifier characters");
}
bool is_listassoc = hooks->flags & XPI_FLAG_LISTASSOC;
@@ -1092,6 +1134,7 @@
reg->oplen = oplen;
reg->opname_is_ident = opname_is_ident;
+ reg->opname_is_fq = opname_is_fq;
reg->hd.hooks = hooks;
reg->hd.data = hookdata;
@@ -1150,8 +1193,6 @@
CV *cv = newXS(SvPVX(namesv), deparse_infix, __FILE__);
CvXSUBANY(cv).any_ptr = reg;
-
- load_module(PERL_LOADMOD_NOIMPORT, newSVpvs("XS::Parse::Infix"), NULL);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XS-Parse-Keyword-0.43/src/infix.h
new/XS-Parse-Keyword-0.44/src/infix.h
--- old/XS-Parse-Keyword-0.43/src/infix.h 2024-07-03 17:20:57.000000000
+0200
+++ new/XS-Parse-Keyword-0.44/src/infix.h 2024-07-19 14:26:26.000000000
+0200
@@ -1,4 +1,5 @@
bool XSParseInfix_parse(pTHX_ enum XSParseInfixSelection select, struct
XSParseInfixInfo **infop);
OP *XSParseInfix_new_op(pTHX_ const struct XSParseInfixInfo *info, U32 flags,
OP *lhs, OP *rhs);
+bool XSParseInfix_check_opname(pTHX_ const char *opname, STRLEN oplen);
void XSParseInfix_register(pTHX_ const char *opname, const struct
XSParseInfixHooks *hooks, void *hookdata);
void XSParseInfix_boot(pTHX);