commit perl-XS-Parse-Keyword for openSUSE:Factory
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 <timueller+perl@suse.de> + +- 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 -- leonerd@leonerd.org.uk -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 -- leonerd@leonerd.org.uk -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 -- leonerd@leonerd.org.uk -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 -- leonerd@leonerd.org.uk -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);
participants (1)
-
Source-Sync