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 2023-07-30 20:57:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-XS-Parse-Keyword (Old)
 and      /work/SRC/openSUSE:Factory/.perl-XS-Parse-Keyword.new.32662 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-XS-Parse-Keyword"

Sun Jul 30 20:57:26 2023 rev:15 rq:1101231 version:0.360.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-XS-Parse-Keyword/perl-XS-Parse-Keyword.changes  
    2023-07-12 17:26:38.802247928 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-XS-Parse-Keyword.new.32662/perl-XS-Parse-Keyword.changes
   2023-07-30 20:57:32.115135371 +0200
@@ -1,0 +2,20 @@
+Fri Jul 21 03:11:07 UTC 2023 - Tina Müller <timueller+p...@suse.de>
+
+- updated to 0.36
+   see /usr/share/doc/packages/perl-XS-Parse-Keyword/Changes
+
+  0.36    2023-07-20
+          [BUGFIXES]
+           * Remember to also call `op_scope()` after `block_end()` if the
+             XPK_FLAG_BLOCKSCOPE flag is set
+
+  0.35    2023-07-19
+          [CHANGES]
+           * Added XPK_INTRO_MY, to call `intro_my()`
+           * Added XPK_FLAG_BLOCKSCOPE to wrap a block_start()+block_end()
+             around a syntax construction
+           * Renamed XPK_PARENSCOPE to XPK_PARENS, etc..
+           * Adjusted documentation of XS::Parse::Infix for release of
+             Perl v5.38
+
+-------------------------------------------------------------------

Old:
----
  XS-Parse-Keyword-0.34.tar.gz

New:
----
  XS-Parse-Keyword-0.36.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-XS-Parse-Keyword.spec ++++++
--- /var/tmp/diff_new_pack.rW49Zy/_old  2023-07-30 20:57:32.839139669 +0200
+++ /var/tmp/diff_new_pack.rW49Zy/_new  2023-07-30 20:57:32.843139693 +0200
@@ -18,12 +18,14 @@
 
 %define cpan_name XS-Parse-Keyword
 Name:           perl-XS-Parse-Keyword
-Version:        0.34
+Version:        0.360.0
 Release:        0
+%define cpan_version 0.36
+Provides:       perl(XS::Parse::Keyword) = 0.360.0
 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}
-Source0:        
https://cpan.metacpan.org/authors/id/P/PE/PEVANS/%{cpan_name}-%{version}.tar.gz
+Source0:        
https://cpan.metacpan.org/authors/id/P/PE/PEVANS/%{cpan_name}-%{cpan_version}.tar.gz
 Source1:        cpanspec.yml
 BuildRequires:  perl
 BuildRequires:  perl-macros
@@ -32,6 +34,10 @@
 BuildRequires:  perl(ExtUtils::ParseXS) >= 3.16
 BuildRequires:  perl(Module::Build) >= 0.400400
 BuildRequires:  perl(Test2::V0)
+Provides:       perl(XS::Parse::Infix) = 0.360.0
+Provides:       perl(XS::Parse::Infix::Builder) = 0.360.0
+Provides:       perl(XS::Parse::Keyword::Builder) = 0.360.0
+%define         __perllib_provides /bin/true
 %{perl_requires}
 
 %description
@@ -47,7 +53,7 @@
 requiring changes or at least a rebuild of any module that depends on it.
 
 %prep
-%autosetup  -n %{cpan_name}-%{version}
+%autosetup  -n %{cpan_name}-%{cpan_version}
 
 %build
 perl Build.PL --installdirs=vendor optimize="%{optflags}"

++++++ XS-Parse-Keyword-0.34.tar.gz -> XS-Parse-Keyword-0.36.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/Changes 
new/XS-Parse-Keyword-0.36/Changes
--- old/XS-Parse-Keyword-0.34/Changes   2023-06-14 18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/Changes   2023-07-20 17:56:49.000000000 +0200
@@ -1,5 +1,19 @@
 Revision history for XS-Parse-Keyword
 
+0.36    2023-07-20
+        [BUGFIXES]
+         * Remember to also call `op_scope()` after `block_end()` if the
+           XPK_FLAG_BLOCKSCOPE flag is set
+
+0.35    2023-07-19
+        [CHANGES]
+         * Added XPK_INTRO_MY, to call `intro_my()`
+         * Added XPK_FLAG_BLOCKSCOPE to wrap a block_start()+block_end()
+           around a syntax construction
+         * Renamed XPK_PARENSCOPE to XPK_PARENS, etc..
+         * Adjusted documentation of XS::Parse::Infix for release of
+           Perl v5.38
+
 0.34    2023-06-14
         [CHANGES]
          * Swap all unit tests from Test::More to Test2::V0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/MANIFEST 
new/XS-Parse-Keyword-0.36/MANIFEST
--- old/XS-Parse-Keyword-0.34/MANIFEST  2023-06-14 18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/MANIFEST  2023-07-20 17:56:49.000000000 +0200
@@ -43,7 +43,7 @@
 t/38pieces-infix.t
 t/40build.t
 t/41structures.t
-t/42scopes.t
+t/42containers.t
 t/43probing.t
 t/50flags-autosemi.t
 t/60line.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/META.json 
new/XS-Parse-Keyword-0.36/META.json
--- old/XS-Parse-Keyword-0.34/META.json 2023-06-14 18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/META.json 2023-07-20 17:56:49.000000000 +0200
@@ -40,19 +40,19 @@
    "provides" : {
       "XS::Parse::Infix" : {
          "file" : "lib/XS/Parse/Infix.pm",
-         "version" : "0.34"
+         "version" : "0.36"
       },
       "XS::Parse::Infix::Builder" : {
          "file" : "lib/XS/Parse/Infix/Builder.pm",
-         "version" : "0.34"
+         "version" : "0.36"
       },
       "XS::Parse::Keyword" : {
          "file" : "lib/XS/Parse/Keyword.pm",
-         "version" : "0.34"
+         "version" : "0.36"
       },
       "XS::Parse::Keyword::Builder" : {
          "file" : "lib/XS/Parse/Keyword/Builder.pm",
-         "version" : "0.34"
+         "version" : "0.36"
       }
    },
    "release_status" : "stable",
@@ -61,6 +61,6 @@
          "http://dev.perl.org/licenses/";
       ]
    },
-   "version" : "0.34",
+   "version" : "0.36",
    "x_serialization_backend" : "JSON::PP version 4.07"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/META.yml 
new/XS-Parse-Keyword-0.36/META.yml
--- old/XS-Parse-Keyword-0.34/META.yml  2023-06-14 18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/META.yml  2023-07-20 17:56:49.000000000 +0200
@@ -19,19 +19,19 @@
 provides:
   XS::Parse::Infix:
     file: lib/XS/Parse/Infix.pm
-    version: '0.34'
+    version: '0.36'
   XS::Parse::Infix::Builder:
     file: lib/XS/Parse/Infix/Builder.pm
-    version: '0.34'
+    version: '0.36'
   XS::Parse::Keyword:
     file: lib/XS/Parse/Keyword.pm
-    version: '0.34'
+    version: '0.36'
   XS::Parse::Keyword::Builder:
     file: lib/XS/Parse/Keyword/Builder.pm
-    version: '0.34'
+    version: '0.36'
 requires:
   perl: '5.014'
 resources:
   license: http://dev.perl.org/licenses/
-version: '0.34'
+version: '0.36'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/README 
new/XS-Parse-Keyword-0.36/README
--- old/XS-Parse-Keyword-0.34/README    2023-06-14 18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/README    2023-07-20 17:56:49.000000000 +0200
@@ -71,6 +71,13 @@
 
       The semicolon, if present, will be consumed automatically.
 
+    XPK_FLAG_BLOCKSCOPE
+
+      The entire parse and build process will be wrapped in a pair of
+      block_start() and block_end() calls. This ensures that, for example,
+      any newly-introduced lexical variables do not escape from the scope
+      of the syntax created by the keyword.
+
  The permit Stage
 
        const char *permit_hintkey;
@@ -535,6 +542,14 @@
     whereas XPK_KEYWORD("key") would not because of the subsequent "w"
     character.
 
+ XPK_INTRO_MY
+
+    atomic, emits nothing.
+
+    Calls the core perl intro_my() function immediately. No input is
+    consumed and no output value is generated. This is often useful after
+    XPK_LEXVAR_MY.
+
  XPK_SEQUENCE
 
     structural, might support probe, emits nothing.
@@ -628,46 +643,45 @@
     An XPK_COMMALIST supports probe if its first contained piece does; i.e.
     is transparent to probing.
 
- XPK_PARENSCOPE
+ XPK_PARENS
 
     structural, can probe, emits nothing.
 
-       XPK_PARENSCOPE(pieces ...)
+       XPK_PARENS(pieces ...)
 
     A structural type which expects to find a sequence of pieces, all
     contained in parentheses as ( ... ). This will pass no extra arguments.
 
- XPK_ARGSCOPE
+ XPK_ARGS
 
     structural, emits nothing.
 
-       XPK_ARGSCOPE(pieces ...)
+       XPK_ARGS(pieces ...)
 
-    A structural type similar to XPK_PARENSCOPE, except that the
-    parentheses themselves are optional; much like Perl's parsing of calls
-    to known functions.
+    A structural type similar to XPK_PARENS, except that the parentheses
+    themselves are optional; much like Perl's parsing of calls to known
+    functions.
 
     If parentheses are encountered in the input, they will be consumed by
-    this piece and it will behave identically to XPK_PARENSCOPE. If there
-    is no open parenthesis, this piece will behave like XPK_SEQUENCE and
-    consume all the pieces inside it, without expecting a closing
-    parenthesis.
+    this piece and it will behave identically to XPK_PARENS. If there is no
+    open parenthesis, this piece will behave like XPK_SEQUENCE and consume
+    all the pieces inside it, without expecting a closing parenthesis.
 
- XPK_BRACKETSCOPE
+ XPK_BRACKETS
 
     structural, can probe, emits nothing.
 
-       XPK_BRACKETSCOPE(pieces ...)
+       XPK_BRACKETS(pieces ...)
 
     A structural type which expects to find a sequence of pieces, all
     contained in square brackets as [ ... ]. This will pass no extra
     arguments.
 
- XPK_BRACESCOPE
+ XPK_BRACES
 
     structural, can probe, emits nothing.
 
-       XPK_BRACESCOPE(pieces ...)
+       XPK_BRACES(pieces ...)
 
     A structural type which expects to find a sequence of pieces, all
     contained in braces as { ... }. This will pass no extra arguments.
@@ -677,11 +691,11 @@
     special constrained syntax that should not just accept an arbitrary
     block.
 
- XPK_CHEVRONSCOPE
+ XPK_CHEVRONS
 
     structural, can probe, emits nothing.
 
-       XPK_CHEVRONSCOPE(pieces ...)
+       XPK_CHEVRONS(pieces ...)
 
     A structural type which expects to find a sequence of pieces, all
     contained in angle brackets as < ... >. This will pass no extra
@@ -691,20 +705,19 @@
     contents of this scope shouldn't allow arbitrary expressions or the
     closing bracket will be ambiguous.
 
- XPK_PARENSCOPE_OPT, XPK_BRACKETSCOPE_OPT, XPK_BRACESCOPE_OPT,
- XPK_CHEVRONSCOPE_OPT
+ XPK_PARENS_OPT, XPK_BRACKETS_OPT, XPK_BRACES_OPT, XPK_CHEVRONS_OPT
 
     structural, can probe, emits i.
 
-       XPK_PARENSCOPE_OPT(pieces ...)
-       XPK_BRACKETSCOPE_OPT(pieces ...)
-       XPK_BRACESCOPE_OPT(pieces ...)
-       XPK_CHEVERONSCOPE_OPT(pieces ...)
-
-    Each of the four XPK_...SCOPE macros above has an optional variant,
-    whose name is suffixed by _OPT. These pass an argument whose i field is
-    either true or false, indicating whether the scope was found, followed
-    by the values from the scope itself.
+       XPK_PARENS_OPT(pieces ...)
+       XPK_BRACKETS_OPT(pieces ...)
+       XPK_BRACES_OPT(pieces ...)
+       XPK_CHEVERONS_OPT(pieces ...)
+
+    Each of the four contained structure macros above has an optional
+    variant, whose name is suffixed by _OPT. These pass an argument whose i
+    field is either true or false, indicating whether the scope was found,
+    followed by the values from the scope itself.
 
     This is a convenient shortcut to nesting the scope within a
     XPK_OPTIONAL macro.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/XSParseKeyword.h 
new/XS-Parse-Keyword-0.36/XSParseKeyword.h
--- old/XS-Parse-Keyword-0.34/XSParseKeyword.h  2023-06-14 18:44:30.000000000 
+0200
+++ new/XS-Parse-Keyword-0.36/XSParseKeyword.h  2023-07-20 17:56:49.000000000 
+0200
@@ -9,7 +9,7 @@
   union {
     char c;                                       /* LITERALCHAR */
     const char *str;                              /* LITERALSTR */
-    const struct XSParseKeywordPieceType *pieces; /* SCOPEs */
+    const struct XSParseKeywordPieceType *pieces; /* containers */
     void (*callback)(pTHX_ void *hookdata);       /* SETUP, ANONSUB 
PREPARE+START */
 
     OP *(*op_wrap_callback)(pTHX_ OP *o, void *hookdata);
@@ -17,9 +17,10 @@
 };
 
 enum {
-  XPK_FLAG_EXPR     = (1<<0),
-  XPK_FLAG_STMT     = (1<<1),
-  XPK_FLAG_AUTOSEMI = (1<<2),
+  XPK_FLAG_EXPR       = (1<<0),
+  XPK_FLAG_STMT       = (1<<1),
+  XPK_FLAG_AUTOSEMI   = (1<<2),
+  XPK_FLAG_BLOCKSCOPE = (1<<3),
 };
 
 enum {
@@ -46,6 +47,8 @@
 
   XS_PARSE_KEYWORD_INFIX = 0x40,      /* infix */
 
+  XS_PARSE_KEYWORD_INTRO_MY = 0x60,   /* emits nothing */
+
   XS_PARSE_KEYWORD_SETUP = 0x70,      /* invokes callback, emits nothing */
 
   XS_PARSE_KEYWORD_ANONSUB_PREPARE,   /* invokes callback, emits nothing */
@@ -58,10 +61,10 @@
   XS_PARSE_KEYWORD_CHOICE,            /* i, contained */
   XS_PARSE_KEYWORD_TAGGEDCHOICE,      /* i, contained */
   XS_PARSE_KEYWORD_SEPARATEDLIST,     /* i, contained */
-  XS_PARSE_KEYWORD_PARENSCOPE = 0xb0, /* contained */
-  XS_PARSE_KEYWORD_BRACKETSCOPE,      /* contained */
-  XS_PARSE_KEYWORD_BRACESCOPE,        /* contained */
-  XS_PARSE_KEYWORD_CHEVRONSCOPE,      /* contained */
+  XS_PARSE_KEYWORD_PARENS = 0xb0,     /* contained */
+  XS_PARSE_KEYWORD_BRACKETS,          /* contained */
+  XS_PARSE_KEYWORD_BRACES,            /* contained */
+  XS_PARSE_KEYWORD_CHEVRONS,          /* contained */
 };
 
 enum {
@@ -84,7 +87,7 @@
 
   XPK_TYPEFLAG_ENTERLEAVE = (1<<20), /* wrap ENTER/LEAVE pair around the item 
*/
 
-  XPK_TYPEFLAG_MAYBEPARENS = (1<<21), /* parens themselves are optional on 
PARENSCOPE */
+  XPK_TYPEFLAG_MAYBEPARENS = (1<<21), /* parens themselves are optional on 
PARENS */
 };
 
 #define XPK_BLOCK_flags(flags) {.type = XS_PARSE_KEYWORD_BLOCK|(flags), 
.u.pieces = NULL}
@@ -156,6 +159,8 @@
 #define XPK_INFIX_MATCH_NOSMART  XPK_INFIX(XPI_SELECT_MATCH_NOSMART)
 #define XPK_INFIX_MATCH_SMART    XPK_INFIX(XPI_SELECT_MATCH_SMART)
 
+#define XPK_INTRO_MY           {.type = XS_PARSE_KEYWORD_INTRO_MY}
+
 #define XPK_SEQUENCE_pieces(p) {.type = XS_PARSE_KEYWORD_SEQUENCE, .u.pieces = 
p}
 #define XPK_SEQUENCE(...)      XPK_SEQUENCE_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
 
@@ -181,28 +186,44 @@
 
 #define XPK_FAILURE(s) {.type = XS_PARSE_KEYWORD_FAILURE, .u.str = (const char 
*)s}
 
-#define XPK_PARENSCOPE_pieces(p) {.type = XS_PARSE_KEYWORD_PARENSCOPE, 
.u.pieces = p}
-#define XPK_PARENSCOPE(...)      XPK_PARENSCOPE_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
-#define XPK_PARENSCOPE_OPT(...) \
-  {.type = XS_PARSE_KEYWORD_PARENSCOPE|XPK_TYPEFLAG_OPT, .u.pieces = (const 
struct XSParseKeywordPieceType []){ __VA_ARGS__, {0} }}
-
-#define XPK_ARGSCOPE_pieces(p) {.type = 
XS_PARSE_KEYWORD_PARENSCOPE|XPK_TYPEFLAG_MAYBEPARENS, .u.pieces = p}
-#define XPK_ARGSCOPE(...)      XPK_ARGSCOPE_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
-
-#define XPK_BRACKETSCOPE_pieces(p) {.type = XS_PARSE_KEYWORD_BRACKETSCOPE, 
.u.pieces = p}
-#define XPK_BRACKETSCOPE(...)      XPK_BRACKETSCOPE_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
-#define XPK_BRACKETSCOPE_OPT(...) \
-  {.type = XS_PARSE_KEYWORD_BRACKETSCOPE|XPK_TYPEFLAG_OPT, .u.pieces = (const 
struct XSParseKeywordPieceType []){ __VA_ARGS__, {0} }}
-
-#define XPK_BRACESCOPE_pieces(p) {.type = XS_PARSE_KEYWORD_BRACESCOPE, 
.u.pieces = p}
-#define XPK_BRACESCOPE(...)      XPK_BRACESCOPE_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
-#define XPK_BRACESCOPE_OPT(...) \
-  {.type = XS_PARSE_KEYWORD_BRACESCOPE|XPK_TYPEFLAG_OPT, .u.pieces = (const 
struct XSParseKeywordPieceType []){ __VA_ARGS__, {0} }}
-
-#define XPK_CHEVRONSCOPE_pieces(p) {.type = XS_PARSE_KEYWORD_CHEVRONSCOPE, 
.u.pieces = p}
-#define XPK_CHEVRONSCOPE(...)      XPK_CHEVRONSCOPE_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
-#define XPK_CHEVRONSCOPE_OPT(...) \
-  {.type = XS_PARSE_KEYWORD_CHEVRONSCOPE|XPK_TYPEFLAG_OPT, .u.pieces = (const 
struct XSParseKeywordPieceType []){ __VA_ARGS__, {0} }}
+#define XPK_PARENS_pieces(p) {.type = XS_PARSE_KEYWORD_PARENS, .u.pieces = p}
+#define XPK_PARENS(...)      XPK_PARENS_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
+#define XPK_PARENS_OPT(...) \
+  {.type = XS_PARSE_KEYWORD_PARENS|XPK_TYPEFLAG_OPT, .u.pieces = (const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }}
+
+#define XPK_ARGS_pieces(p) {.type = 
XS_PARSE_KEYWORD_PARENS|XPK_TYPEFLAG_MAYBEPARENS, .u.pieces = p}
+#define XPK_ARGS(...)      XPK_ARGS_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
+
+#define XPK_BRACKETS_pieces(p) {.type = XS_PARSE_KEYWORD_BRACKETS, .u.pieces = 
p}
+#define XPK_BRACKETS(...)      XPK_BRACKETS_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
+#define XPK_BRACKETS_OPT(...) \
+  {.type = XS_PARSE_KEYWORD_BRACKETS|XPK_TYPEFLAG_OPT, .u.pieces = (const 
struct XSParseKeywordPieceType []){ __VA_ARGS__, {0} }}
+
+#define XPK_BRACES_pieces(p) {.type = XS_PARSE_KEYWORD_BRACES, .u.pieces = p}
+#define XPK_BRACES(...)      XPK_BRACES_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
+#define XPK_BRACES_OPT(...) \
+  {.type = XS_PARSE_KEYWORD_BRACES|XPK_TYPEFLAG_OPT, .u.pieces = (const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }}
+
+#define XPK_CHEVRONS_pieces(p) {.type = XS_PARSE_KEYWORD_CHEVRONS, .u.pieces = 
p}
+#define XPK_CHEVRONS(...)      XPK_CHEVRONS_pieces(((const struct 
XSParseKeywordPieceType []){ __VA_ARGS__, {0} }))
+#define XPK_CHEVRONS_OPT(...) \
+  {.type = XS_PARSE_KEYWORD_CHEVRONS|XPK_TYPEFLAG_OPT, .u.pieces = (const 
struct XSParseKeywordPieceType []){ __VA_ARGS__, {0} }}
+
+/* back-compat for older names */
+#define XPK_PARENSCOPE_pieces    XPK_PARENS_pieces
+#define XPK_PARENSCOPE           XPK_PARENS
+#define XPK_PARENSCOPE_OPT       XPK_PARENS_OPT
+#define XPK_ARGSCOPE_pieces      XPK_ARGS_pieces
+#define XPK_ARGSCOPE             XPK_ARGS
+#define XPK_BRACKETSCOPE_pieces  XPK_BRACKETS_pieces
+#define XPK_BRACKETSCOPE         XPK_BRACKETS
+#define XPK_BRACKETSCOPE_OPT     XPK_BRACKETS_OPT
+#define XPK_BRACESCOPE_pieces    XPK_BRACES_pieces
+#define XPK_BRACESCOPE           XPK_BRACES
+#define XPK_BRACESCOPE_OPT       XPK_BRACES_OPT
+#define XPK_CHEVRONSCOPE_pieces  XPK_CHEVRONS_pieces
+#define XPK_CHEVRONSCOPE         XPK_CHEVRONS
+#define XPK_CHEVRONSCOPE_OPT     XPK_CHEVRONS_OPT
 
 /* This type defined in XSParseInfix.h */
 typedef struct XSParseInfixInfo XSParseInfixInfo;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/hax/perl-backcompat.c.inc 
new/XS-Parse-Keyword-0.36/hax/perl-backcompat.c.inc
--- old/XS-Parse-Keyword-0.34/hax/perl-backcompat.c.inc 2023-06-14 
18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/hax/perl-backcompat.c.inc 2023-07-20 
17:56:49.000000000 +0200
@@ -198,16 +198,18 @@
 }
 #endif
 
-#ifdef PERL_USE_GCC_BRACE_GROUPS
-#  define xV_FROM_REF(XV, ref)  \
+#ifndef xV_FROM_REF
+#  ifdef PERL_USE_GCC_BRACE_GROUPS
+#    define xV_FROM_REF(XV, ref)  \
   ({ SV *_ref = ref; assert(SvROK(_ref)); assert(SvTYPE(SvRV(_ref)) == SVt_PV 
## XV); (XV *)(SvRV(_ref)); })
-#else
-#  define xV_FROM_REF(XV, ref)  ((XV *)SvRV(ref))
-#endif
+#  else
+#    define xV_FROM_REF(XV, ref)  ((XV *)SvRV(ref))
+#  endif
 
-#define AV_FROM_REF(ref)  xV_FROM_REF(AV, ref)
-#define CV_FROM_REF(ref)  xV_FROM_REF(CV, ref)
-#define HV_FROM_REF(ref)  xV_FROM_REF(HV, ref)
+#  define AV_FROM_REF(ref)  xV_FROM_REF(AV, ref)
+#  define CV_FROM_REF(ref)  xV_FROM_REF(CV, ref)
+#  define HV_FROM_REF(ref)  xV_FROM_REF(HV, ref)
+#endif
 
 #ifndef newPADxVOP
 #  define newPADxVOP(type, flags, padix)  S_newPADxVOP(aTHX_ type, flags, 
padix)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/lib/XS/Parse/Infix/Builder.pm 
new/XS-Parse-Keyword-0.36/lib/XS/Parse/Infix/Builder.pm
--- old/XS-Parse-Keyword-0.34/lib/XS/Parse/Infix/Builder.pm     2023-06-14 
18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/lib/XS/Parse/Infix/Builder.pm     2023-07-20 
17:56:49.000000000 +0200
@@ -3,7 +3,7 @@
 #
 #  (C) Paul Evans, 2021 -- leon...@leonerd.org.uk
 
-package XS::Parse::Infix::Builder 0.34;
+package XS::Parse::Infix::Builder 0.36;
 
 use v5.14;
 use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/XS-Parse-Keyword-0.34/lib/XS/Parse/Infix/Builder_data.pm.PL 
new/XS-Parse-Keyword-0.36/lib/XS/Parse/Infix/Builder_data.pm.PL
--- old/XS-Parse-Keyword-0.34/lib/XS/Parse/Infix/Builder_data.pm.PL     
2023-06-14 18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/lib/XS/Parse/Infix/Builder_data.pm.PL     
2023-07-20 17:56:49.000000000 +0200
@@ -28,7 +28,7 @@
    <$in_h> } );
 
 __DATA__
-package XS::Parse::Infix::Builder_data 0.34;
+package XS::Parse::Infix::Builder_data 0.36;
 
 use v5.14;
 use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/lib/XS/Parse/Infix.pm 
new/XS-Parse-Keyword-0.36/lib/XS/Parse/Infix.pm
--- old/XS-Parse-Keyword-0.34/lib/XS/Parse/Infix.pm     2023-06-14 
18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/lib/XS/Parse/Infix.pm     2023-07-20 
17:56:49.000000000 +0200
@@ -1,9 +1,9 @@
 #  You may distribute under the terms of either the GNU General Public License
 #  or the Artistic License (the same terms as Perl itself)
 #
-#  (C) Paul Evans, 2021-2022 -- leon...@leonerd.org.uk
+#  (C) Paul Evans, 2021-2023 -- leon...@leonerd.org.uk
 
-package XS::Parse::Infix 0.34;
+package XS::Parse::Infix 0.36;
 
 use v5.14;
 use warnings;
@@ -28,9 +28,8 @@
 changes or at least a rebuild of any module that depends on it.
 
 In addition, the places this functionality can be used are relatively small.
-No current release of perl actually supports custom infix operators, though it
-has now been merged to C<blead>, the main development branch, and will be
-present in development release C<v5.37.7> onwards.
+Support for custom infix operators as added in Perl development release
+C<v5.37.7>, and is therefore present in Perl C<v5.38.0>.
 
 In addition, the various C<XPK_INFIX_*> token types of L<XS::Parse::Keyword>
 support querying on this module, so some syntax provided by other modules may
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/XS-Parse-Keyword-0.34/lib/XS/Parse/Keyword/Builder.pm 
new/XS-Parse-Keyword-0.36/lib/XS/Parse/Keyword/Builder.pm
--- old/XS-Parse-Keyword-0.34/lib/XS/Parse/Keyword/Builder.pm   2023-06-14 
18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/lib/XS/Parse/Keyword/Builder.pm   2023-07-20 
17:56:49.000000000 +0200
@@ -3,7 +3,7 @@
 #
 #  (C) Paul Evans, 2021 -- leon...@leonerd.org.uk
 
-package XS::Parse::Keyword::Builder 0.34;
+package XS::Parse::Keyword::Builder 0.36;
 
 use v5.14;
 use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/XS-Parse-Keyword-0.34/lib/XS/Parse/Keyword/Builder_data.pm.PL 
new/XS-Parse-Keyword-0.36/lib/XS/Parse/Keyword/Builder_data.pm.PL
--- old/XS-Parse-Keyword-0.34/lib/XS/Parse/Keyword/Builder_data.pm.PL   
2023-06-14 18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/lib/XS/Parse/Keyword/Builder_data.pm.PL   
2023-07-20 17:56:49.000000000 +0200
@@ -28,7 +28,7 @@
    <$in_h> } );
 
 __DATA__
-package XS::Parse::Keyword::Builder_data 0.34;
+package XS::Parse::Keyword::Builder_data 0.36;
 
 use v5.14;
 use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/lib/XS/Parse/Keyword.pm 
new/XS-Parse-Keyword-0.36/lib/XS/Parse/Keyword.pm
--- old/XS-Parse-Keyword-0.34/lib/XS/Parse/Keyword.pm   2023-06-14 
18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/lib/XS/Parse/Keyword.pm   2023-07-20 
17:56:49.000000000 +0200
@@ -3,7 +3,7 @@
 #
 #  (C) Paul Evans, 2021-2022 -- leon...@leonerd.org.uk
 
-package XS::Parse::Keyword 0.34;
+package XS::Parse::Keyword 0.36;
 
 use v5.14;
 use warnings;
@@ -85,6 +85,13 @@
 
 The semicolon, if present, will be consumed automatically.
 
+=item C<XPK_FLAG_BLOCKSCOPE>
+
+The entire parse and build process will be wrapped in a pair of
+C<block_start()> and C<block_end()> calls. This ensures that, for example, any
+newly-introduced lexical variables do not escape from the scope of the syntax
+created by the keyword.
+
 =back
 
 =head2 The C<permit> Stage
@@ -549,6 +556,13 @@
 C<"keyword">, the piece C<XPK_LITERAL("key")> would match it, whereas
 C<XPK_KEYWORD("key")> would not because of the subsequent C<"w"> character.
 
+=head2 XPK_INTRO_MY
+
+I<atomic, emits nothing.>
+
+Calls the core perl C<intro_my()> function immediately. No input is consumed
+and no output value is generated. This is often useful after C<XPK_LEXVAR_MY>.
+
 =head2 XPK_SEQUENCE
 
 I<structural, might support probe, emits nothing.>
@@ -638,43 +652,43 @@
 An C<XPK_COMMALIST> supports probe if its first contained piece does; i.e.
 is transparent to probing.
 
-=head2 XPK_PARENSCOPE
+=head2 XPK_PARENS
 
 I<structural, can probe, emits nothing.>
 
-   XPK_PARENSCOPE(pieces ...)
+   XPK_PARENS(pieces ...)
 
 A structural type which expects to find a sequence of pieces, all contained in
 parentheses as C<( ... )>. This will pass no extra arguments.
 
-=head2 XPK_ARGSCOPE
+=head2 XPK_ARGS
 
 I<structural, emits nothing.>
 
-   XPK_ARGSCOPE(pieces ...)
+   XPK_ARGS(pieces ...)
 
-A structural type similar to C<XPK_PARENSCOPE>, except that the parentheses
+A structural type similar to C<XPK_PARENS>, except that the parentheses
 themselves are optional; much like Perl's parsing of calls to known functions.
 
 If parentheses are encountered in the input, they will be consumed by this
-piece and it will behave identically to C<XPK_PARENSCOPE>. If there is no open
+piece and it will behave identically to C<XPK_PARENS>. If there is no open
 parenthesis, this piece will behave like C<XPK_SEQUENCE> and consume all the
 pieces inside it, without expecting a closing parenthesis.
 
-=head2 XPK_BRACKETSCOPE
+=head2 XPK_BRACKETS
 
 I<structural, can probe, emits nothing.>
 
-   XPK_BRACKETSCOPE(pieces ...)
+   XPK_BRACKETS(pieces ...)
 
 A structural type which expects to find a sequence of pieces, all contained in
 square brackets as C<[ ... ]>. This will pass no extra arguments.
 
-=head2 XPK_BRACESCOPE
+=head2 XPK_BRACES
 
 I<structural, can probe, emits nothing.>
 
-   XPK_BRACESCOPE(pieces ...)
+   XPK_BRACES(pieces ...)
 
 A structural type which expects to find a sequence of pieces, all contained in
 braces as C<{ ... }>. This will pass no extra arguments.
@@ -683,11 +697,11 @@
 those will already consume a set of braces. This is intended for special
 constrained syntax that should not just accept an arbitrary block.
 
-=head2 XPK_CHEVRONSCOPE
+=head2 XPK_CHEVRONS
 
 I<structural, can probe, emits nothing.>
 
-   XPK_CHEVRONSCOPE(pieces ...)
+   XPK_CHEVRONS(pieces ...)
 
 A structural type which expects to find a sequence of pieces, all contained in
 angle brackets as C<< < ... > >>. This will pass no extra arguments.
@@ -696,19 +710,19 @@
 contents of this scope shouldn't allow arbitrary expressions or the closing
 bracket will be ambiguous.
 
-=head2 XPK_PARENSCOPE_OPT, XPK_BRACKETSCOPE_OPT, XPK_BRACESCOPE_OPT, 
XPK_CHEVRONSCOPE_OPT
+=head2 XPK_PARENS_OPT, XPK_BRACKETS_OPT, XPK_BRACES_OPT, XPK_CHEVRONS_OPT
 
 I<structural, can probe, emits i.>
 
-   XPK_PARENSCOPE_OPT(pieces ...)
-   XPK_BRACKETSCOPE_OPT(pieces ...)
-   XPK_BRACESCOPE_OPT(pieces ...)
-   XPK_CHEVERONSCOPE_OPT(pieces ...)
-
-Each of the four C<XPK_...SCOPE> macros above has an optional variant, whose
-name is suffixed by C<_OPT>. These pass an argument whose I<i> field is either
-true or false, indicating whether the scope was found, followed by the values
-from the scope itself.
+   XPK_PARENS_OPT(pieces ...)
+   XPK_BRACKETS_OPT(pieces ...)
+   XPK_BRACES_OPT(pieces ...)
+   XPK_CHEVERONS_OPT(pieces ...)
+
+Each of the four contained structure macros above has an optional variant,
+whose name is suffixed by C<_OPT>. These pass an argument whose I<i> field is
+either true or false, indicating whether the scope was found, followed by the
+values from the scope itself.
 
 This is a convenient shortcut to nesting the scope within a C<XPK_OPTIONAL>
 macro.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/src/keyword.c 
new/XS-Parse-Keyword-0.36/src/keyword.c
--- old/XS-Parse-Keyword-0.34/src/keyword.c     2023-06-14 18:44:30.000000000 
+0200
+++ new/XS-Parse-Keyword-0.36/src/keyword.c     2023-07-20 17:56:49.000000000 
+0200
@@ -313,9 +313,9 @@
       return TRUE;
     }
 
-    case XS_PARSE_KEYWORD_PARENSCOPE:
+    case XS_PARSE_KEYWORD_PARENS:
       if(piece->type & XPK_TYPEFLAG_MAYBEPARENS)
-        croak("TODO: probe_piece on type=PARENSCOPE+MAYBEPARENS");
+        croak("TODO: probe_piece on type=PARENS+MAYBEPARENS");
 
       if(lex_peek_unichar(0) != '(')
         return FALSE;
@@ -323,21 +323,21 @@
       parse_piece(aTHX_ argsv, argidx, piece, hookdata);
       return TRUE;
 
-    case XS_PARSE_KEYWORD_BRACKETSCOPE:
+    case XS_PARSE_KEYWORD_BRACKETS:
       if(lex_peek_unichar(0) != '[')
         return FALSE;
 
       parse_piece(aTHX_ argsv, argidx, piece, hookdata);
       return TRUE;
 
-    case XS_PARSE_KEYWORD_BRACESCOPE:
+    case XS_PARSE_KEYWORD_BRACES:
       if(lex_peek_unichar(0) != '{')
         return FALSE;
 
       parse_piece(aTHX_ argsv, argidx, piece, hookdata);
       return TRUE;
 
-    case XS_PARSE_KEYWORD_CHEVRONSCOPE:
+    case XS_PARSE_KEYWORD_CHEVRONS:
       if(lex_peek_unichar(0) != '<')
         return FALSE;
 
@@ -666,6 +666,10 @@
       (*argidx)++;
       return;
 
+    case XS_PARSE_KEYWORD_INTRO_MY:
+      intro_my();
+      return;
+
     case XS_PARSE_KEYWORD_INFIX:
     {
       if(!XSParseInfix_parse(aTHX_ piece->u.c, &THISARG.infix))
@@ -728,7 +732,7 @@
       }
       return;
 
-    case XS_PARSE_KEYWORD_PARENSCOPE:
+    case XS_PARSE_KEYWORD_PARENS:
     {
       bool has_paren = (lex_peek_unichar(0) == '(');
 
@@ -758,7 +762,7 @@
       return;
     }
 
-    case XS_PARSE_KEYWORD_BRACKETSCOPE:
+    case XS_PARSE_KEYWORD_BRACKETS:
       if(is_optional) {
         THISARG.i = 0;
         (*argidx)++;
@@ -775,7 +779,7 @@
 
       return;
 
-    case XS_PARSE_KEYWORD_BRACESCOPE:
+    case XS_PARSE_KEYWORD_BRACES:
       if(is_optional) {
         THISARG.i = 0;
         (*argidx)++;
@@ -792,7 +796,7 @@
 
       return;
 
-    case XS_PARSE_KEYWORD_CHEVRONSCOPE:
+    case XS_PARSE_KEYWORD_CHEVRONS:
       if(is_optional) {
         THISARG.i = 0;
         (*argidx)++;
@@ -836,6 +840,12 @@
   SV *argsv = newSV(maxargs * sizeof(XSParseKeywordPiece));
   SAVEFREESV(argsv);
 
+  bool is_blockscope = hooks->flags & XPK_FLAG_BLOCKSCOPE;
+
+  int floor;
+  if(is_blockscope)
+    floor = block_start(TRUE);
+
   size_t argidx = 0;
   if(hooks->build)
     parse_pieces(aTHX_ argsv, &argidx, hooks->pieces, reg->hookdata);
@@ -879,6 +889,9 @@
   else
     ret = (*hooks->build1)(aTHX_ op, args + 0, reg->hookdata);
 
+  if(is_blockscope)
+    *op = op_scope(block_end(floor, *op));
+
   switch(hooks->flags & (XPK_FLAG_EXPR|XPK_FLAG_STMT)) {
     case XPK_FLAG_EXPR:
       if(ret && (ret != KEYWORD_PLUGIN_EXPR))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/t/35pieces-lexvar.t 
new/XS-Parse-Keyword-0.36/t/35pieces-lexvar.t
--- old/XS-Parse-Keyword-0.34/t/35pieces-lexvar.t       2023-06-14 
18:44:30.000000000 +0200
+++ new/XS-Parse-Keyword-0.36/t/35pieces-lexvar.t       2023-07-20 
17:56:49.000000000 +0200
@@ -37,4 +37,12 @@
    is( $ret2, $ret, 'result of piecelexvar matches previous' );
 }
 
+# intro_my()
+{
+   my $one = "outside";
+   my $ret = piecelexvarmyintro $one in $one + 2;
+   is( $ret, 3, 'result of piecelexvarmyintro' );
+   is( $one, "outside", 'lexvar inside does not leak out' );
+}
+
 done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/t/42containers.t 
new/XS-Parse-Keyword-0.36/t/42containers.t
--- old/XS-Parse-Keyword-0.34/t/42containers.t  1970-01-01 01:00:00.000000000 
+0100
+++ new/XS-Parse-Keyword-0.36/t/42containers.t  2023-07-20 17:56:49.000000000 
+0200
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+
+use v5.14;
+use warnings;
+
+use Test2::V0;
+
+use lib "t";
+use testcase "t::structures";
+
+BEGIN { $^H{"t::structures/permit"} = 1; }
+
+# parens
+{
+   is( parens ( "abc" ), "abc", 'parenthesis container' );
+}
+
+# args - parens are optional
+{
+   is( args ( "123" ), "123", 'arguments container with parens' );
+   is( args "123",     "123", 'arguments container without parens' );
+}
+
+# brackets
+{
+   is( brackets [ "def" ], "def", 'bracket container' );
+}
+
+# braces
+{
+   is( braces { "ghi" }, "ghi", 'brace container' );
+}
+
+# chevrons
+{
+   # takes a bareword identifier
+   is( chevrons < jkl >, "jkl", 'chevron container' );
+}
+
+done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/t/42scopes.t 
new/XS-Parse-Keyword-0.36/t/42scopes.t
--- old/XS-Parse-Keyword-0.34/t/42scopes.t      2023-06-14 18:44:30.000000000 
+0200
+++ new/XS-Parse-Keyword-0.36/t/42scopes.t      1970-01-01 01:00:00.000000000 
+0100
@@ -1,40 +0,0 @@
-#!/usr/bin/perl
-
-use v5.14;
-use warnings;
-
-use Test2::V0;
-
-use lib "t";
-use testcase "t::structures";
-
-BEGIN { $^H{"t::structures/permit"} = 1; }
-
-# paren scope
-{
-   is( scopeparen ( "abc" ), "abc", 'parenthesis scope' );
-}
-
-# arg scope - parens are optional
-{
-   is( scopeargs ( "123" ), "123", 'arguments scope with parens' );
-   is( scopeargs "123",     "123", 'arguments scope without parens' );
-}
-
-# bracket scope
-{
-   is( scopebracket [ "def" ], "def", 'bracket scope' );
-}
-
-# brace scope
-{
-   is( scopebrace { "ghi" }, "ghi", 'brace scope' );
-}
-
-# chevron scope
-{
-   # takes a bareword identifier
-   is( scopechevron < jkl >, "jkl", 'chevron scope' );
-}
-
-done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/t/pieces.xs 
new/XS-Parse-Keyword-0.36/t/pieces.xs
--- old/XS-Parse-Keyword-0.34/t/pieces.xs       2023-06-14 18:44:30.000000000 
+0200
+++ new/XS-Parse-Keyword-0.36/t/pieces.xs       2023-07-20 17:56:49.000000000 
+0200
@@ -125,6 +125,20 @@
   return KEYWORD_PLUGIN_EXPR;
 }
 
+static int build_lexvar_intro(pTHX_ OP **out, XSParseKeywordPiece *args[], 
size_t nargs, void *hookdata)
+{
+  PADOFFSET padix = args[0]->padix;
+  OP *expr = args[1]->op;
+
+  OP *varop = newOP(OP_PADSV, OPf_MOD|OPf_REF | (OPpLVAL_INTRO << 8));
+  varop->op_targ = padix;
+
+  OP *assignop = newASSIGNOP(OPf_WANT_VOID, varop, 0, newSVOP(OP_CONST, 0, 
newSViv(1)));
+
+  *out = newLISTOP(OP_LINESEQ, 0, assignop, expr);
+  return KEYWORD_PLUGIN_EXPR;
+}
+
 static void setup_block_VAR(pTHX_ void *hookdata)
 {
   char *varname = hookdata;
@@ -294,6 +308,20 @@
   .build1 = &build_constpadix,
 };
 
+static const struct XSParseKeywordHooks hooks_lexvar_my_intro = {
+  .flags = XPK_FLAG_BLOCKSCOPE,
+  .permit_hintkey = hintkey,
+
+  .pieces = (const struct XSParseKeywordPieceType []){
+    XPK_LEXVAR_MY(XPK_LEXVAR_ANY),
+    XPK_KEYWORD("in"),
+    XPK_INTRO_MY,
+    XPK_TERMEXPR,
+    0
+  },
+  .build = &build_lexvar_intro,
+};
+
 static const struct XSParseKeywordHooks hooks_attrs = {
   .permit_hintkey = hintkey,
 
@@ -389,6 +417,7 @@
   register_xs_parse_keyword("piecelexvarname", &hooks_lexvar_name, NULL);
   register_xs_parse_keyword("piecelexvar",     &hooks_lexvar,      NULL);
   register_xs_parse_keyword("piecelexvarmy",   &hooks_lexvar_my,   NULL);
+  register_xs_parse_keyword("piecelexvarmyintro", &hooks_lexvar_my_intro, 
NULL);
 
   register_xs_parse_keyword("pieceattrs", &hooks_attrs, NULL);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/t/probing.xs 
new/XS-Parse-Keyword-0.36/t/probing.xs
--- old/XS-Parse-Keyword-0.34/t/probing.xs      2023-06-14 18:44:30.000000000 
+0200
+++ new/XS-Parse-Keyword-0.36/t/probing.xs      2023-07-20 17:56:49.000000000 
+0200
@@ -126,7 +126,7 @@
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
-    XPK_OPTIONAL( XPK_PARENSCOPE( XPK_TERMEXPR ) ),
+    XPK_OPTIONAL( XPK_PARENS( XPK_TERMEXPR ) ),
     {0}
   },
   .build = &build_constbool,
@@ -136,7 +136,7 @@
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
-    XPK_OPTIONAL( XPK_BRACKETSCOPE( XPK_TERMEXPR ) ),
+    XPK_OPTIONAL( XPK_BRACKETS( XPK_TERMEXPR ) ),
     {0}
   },
   .build = &build_constbool,
@@ -146,7 +146,7 @@
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
-    XPK_OPTIONAL( XPK_BRACESCOPE( XPK_TERMEXPR ) ),
+    XPK_OPTIONAL( XPK_BRACES( XPK_TERMEXPR ) ),
     {0}
   },
   .build = &build_constbool,
@@ -156,7 +156,7 @@
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
-    XPK_OPTIONAL( XPK_CHEVRONSCOPE( XPK_IDENT ) ),
+    XPK_OPTIONAL( XPK_CHEVRONS( XPK_IDENT ) ),
     {0}
   },
   .build = &build_constbool,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/XS-Parse-Keyword-0.34/t/structures.xs 
new/XS-Parse-Keyword-0.36/t/structures.xs
--- old/XS-Parse-Keyword-0.34/t/structures.xs   2023-06-14 18:44:30.000000000 
+0200
+++ new/XS-Parse-Keyword-0.36/t/structures.xs   2023-07-20 17:56:49.000000000 
+0200
@@ -107,52 +107,52 @@
   .build = &build_constiv,
 };
 
-static const struct XSParseKeywordHooks hooks_scope_paren = {
+static const struct XSParseKeywordHooks hooks_parens = {
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
-    XPK_PARENSCOPE( XPK_TERMEXPR ),
+    XPK_PARENS( XPK_TERMEXPR ),
     {0}
   },
   .build = &build_op,
 };
 
-static const struct XSParseKeywordHooks hooks_scope_args = {
+static const struct XSParseKeywordHooks hooks_args = {
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
-    XPK_ARGSCOPE( XPK_TERMEXPR ),
+    XPK_ARGS( XPK_TERMEXPR ),
     {0}
   },
   .build = &build_op,
 };
 
-static const struct XSParseKeywordHooks hooks_scope_bracket = {
+static const struct XSParseKeywordHooks hooks_brackets = {
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
-    XPK_BRACKETSCOPE( XPK_TERMEXPR ),
+    XPK_BRACKETS( XPK_TERMEXPR ),
     {0}
   },
   .build = &build_op,
 };
 
-static const struct XSParseKeywordHooks hooks_scope_brace = {
+static const struct XSParseKeywordHooks hooks_braces = {
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
-    XPK_BRACESCOPE( XPK_TERMEXPR ),
+    XPK_BRACES( XPK_TERMEXPR ),
     {0}
   },
   .build = &build_op,
 };
 
-static const struct XSParseKeywordHooks hooks_scope_chevron = {
+static const struct XSParseKeywordHooks hooks_chevrons = {
   .permit_hintkey = hintkey,
 
   .pieces = (const struct XSParseKeywordPieceType []){
     /* A TERMEXPR inside chevrons is ambiguous, because of the < 2 > 1 > 
problem */
-    XPK_CHEVRONSCOPE( XPK_IDENT ),
+    XPK_CHEVRONS( XPK_IDENT ),
     {0}
   },
   .build = &build_constsv,
@@ -170,8 +170,8 @@
   register_xs_parse_keyword("structtagged", &hooks_tagged, NULL);
   register_xs_parse_keyword("structcommalist", &hooks_commalist, NULL);
 
-  register_xs_parse_keyword("scopeparen",   &hooks_scope_paren,   NULL);
-  register_xs_parse_keyword("scopeargs",    &hooks_scope_args,    NULL);
-  register_xs_parse_keyword("scopebracket", &hooks_scope_bracket, NULL);
-  register_xs_parse_keyword("scopebrace",   &hooks_scope_brace,   NULL);
-  register_xs_parse_keyword("scopechevron", &hooks_scope_chevron, NULL);
+  register_xs_parse_keyword("parens",   &hooks_parens,   NULL);
+  register_xs_parse_keyword("args",     &hooks_args,     NULL);
+  register_xs_parse_keyword("brackets", &hooks_brackets, NULL);
+  register_xs_parse_keyword("braces",   &hooks_braces,   NULL);
+  register_xs_parse_keyword("chevrons", &hooks_chevrons, NULL);

Reply via email to