This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Devel-PPPort to match last 3.66 release
authorNicolas R <atoomic@cpan.org>
Fri, 4 Mar 2022 00:01:23 +0000 (18:01 -0600)
committerKarl Williamson <khw@cpan.org>
Thu, 10 Mar 2022 16:47:07 +0000 (09:47 -0700)
27 files changed:
dist/Devel-PPPort/Changes
dist/Devel-PPPort/MANIFEST.SKIP
dist/Devel-PPPort/PPPort_pm.PL
dist/Devel-PPPort/devel/devtools.pl
dist/Devel-PPPort/devel/mktodo
dist/Devel-PPPort/devel/mktodo.pl
dist/Devel-PPPort/devel/regenerate
dist/Devel-PPPort/parts/apicheck.pl
dist/Devel-PPPort/parts/base/5003007
dist/Devel-PPPort/parts/base/5009002
dist/Devel-PPPort/parts/base/5009004
dist/Devel-PPPort/parts/base/5009005
dist/Devel-PPPort/parts/base/5017004
dist/Devel-PPPort/parts/base/5035004
dist/Devel-PPPort/parts/base/5035009
dist/Devel-PPPort/parts/base/5035010
dist/Devel-PPPort/parts/embed.fnc
dist/Devel-PPPort/parts/inc/Sv_set
dist/Devel-PPPort/parts/inc/call
dist/Devel-PPPort/parts/inc/magic
dist/Devel-PPPort/parts/inc/misc
dist/Devel-PPPort/parts/inc/newSVpv
dist/Devel-PPPort/parts/inc/utf8
dist/Devel-PPPort/parts/inc/version
dist/Devel-PPPort/parts/ppport.fnc
dist/Devel-PPPort/parts/todo/5006000
dist/Devel-PPPort/parts/todo/5035010

index 69a3444..b800818 100644 (file)
@@ -1,5 +1,17 @@
 Revision history for Devel-PPPort
 
+3.66 - 2022-03-22
+
+  * Fix corrupted release (missing files)
+
+3.65 - 2022-03-02
+
+  * Enable AppVeyor CI
+  * Fix CROAK_IF_ERROR without BRACE GROUPS
+  * Refactor to use static inline function in multiple parts/inc
+  * devel/regenerate: Add --skip-devels option
+  * Don't list has_builtin as being provided
+
 3.64 - 2022-02-01
   * Fix: better support for STMT_START / STMT_END definition
   * Fix: Only use '-Wdeclaration-after-statement' if possible
index 90b86af..1b940f0 100644 (file)
@@ -1,5 +1,6 @@
 ^\.git
 ^MYMETA.*$
+^META_new.*
 ^Makefile$
 ~$
 \.old(?:\..*)?$
@@ -22,3 +23,4 @@
 Devel-PPPort.*
 Devel-PPPort.*\.tar\.gz$
 .travis.yml
+.appveyor.yml
index 6c7bf42..74f18c4 100644 (file)
@@ -756,7 +756,7 @@ package Devel::PPPort;
 use strict;
 use vars qw($VERSION $data);
 
-$VERSION = '3.64';
+$VERSION = '3.66';
 
 sub _init_data
 {
index b138e1d..cdf8440 100644 (file)
@@ -155,6 +155,7 @@ sub get_and_sort_perls($)
     my $starting;
     $starting = int_parse_version($opt->{'debug-start'})
                                                        if $opt->{'debug-start'};
+    my $skip_devels = $opt->{'skip-devels'} // 0;
 
     # Uses the opt structure parameter to find the perl versions to use this
     # run, and returns an array with a hash representing blead in the 0th
@@ -178,6 +179,19 @@ sub get_and_sort_perls($)
         my $file = int_parse_version($version);
         $version = format_version($version);
 
+        if ($skip_devels) {
+            my ($super, $major, $minor) = parse_version($version);
+
+            # If skipping development releases, we still use blead (0th entry).
+            # Devel releases are odd numbered ones 5.6 and above, but use every
+            # release for below 5.6
+            if ($i != 0 && $major >= 6 && $major % 2 != 0) {
+                splice @perls, $i, 1;
+                last if $i >= @perls;
+                redo;
+            }
+        }
+
         # Make this entry a hash with its version, file name, and path
         $perls[$i] = { version =>  $version,
                        file    =>  $file,
index d3eba62..26a0d63 100755 (executable)
@@ -53,7 +53,7 @@ our %opt = (
 # ppport.h, so we get, as patched by ppport.h, what gets added when
 
 GetOptions(\%opt, qw( base check! verbose install=s blead=s blead-version=s
-                      debug=i debug-start=s)) or die;
+                      debug=i debug-start=s skip-devels)) or die;
 
 identify();
 
@@ -74,5 +74,6 @@ for (my $i = 0; $i < @$perls_ref; $i++) {
   push @args, '--verbose' if $opt{verbose};
   push @args, '--nocheck' unless $opt{check};
   push @args, '--final', $this_perl->{'final'} if $this_perl->{'final'};
-  runperl('devel/mktodo.pl', @args) or die "error running mktodo.pl [$!] [$?]\n";
+  runperl('devel/mktodo.pl', @args)
+     or die "error running mktodo.pl [$!] [$?] " . join(" ", @args) . "\n";
 }
index 7f7f6f9..de54fe9 100644 (file)
@@ -193,8 +193,10 @@ retry:
   # If there were warnings, we ask the user before continuing when creating
   # the base files of blead.  This leads to a potential early exit when things
   # aren't working right.
+  my $is_blead = 0;
   if ($opt{blead} && $opt{base}) {
     undef $opt{blead};  # Only warn once.
+    $is_blead = 1;      # But let the code below know
     if (@{$r->{stderr}}) {
         print STDERR "Warnings and errors from compiling blead:\n";
         print STDERR @{$r->{stderr}};
@@ -204,7 +206,7 @@ retry:
     }
     else {
         print STDERR "blead compiled without warnings nor errors.\n"
-                   . "Proceeding with everything else\n";
+                   . "Proceeding with everything else\n\n";
     }
   }
 
@@ -317,9 +319,16 @@ retry:
 
   # Display each newly found undefined symbol, and add it to the list of todo
   # symbols
-  for (@new) {
-    display_sym('new', @$_);
-    $todo{$_->[0]} = $_->[1];
+  if (@new) {
+    for (@new) {
+        display_sym('new', @$_);
+        $todo{$_->[0]} = $_->[1];
+    }
+
+    if ($is_blead) {
+        ask_or_quit("\nUndefined symbols in blead indicate a bug in blead\n"
+                  . "Shall I proceed?");
+    }
   }
 
   print STDERR __LINE__, ": %todo at end of iteration ", Dumper \%todo
index e5ab3de..fc79609 100755 (executable)
@@ -31,7 +31,7 @@ our %opt = (
 );
 
 GetOptions(\%opt, qw( check! verbose yes install=s blead=s blead-version=s
-                      debug=i debug-start=s)) or die pod2usage();
+                      debug=i debug-start=s skip-devels)) or die pod2usage();
 
 identify();
 
@@ -41,7 +41,10 @@ unless (-e 'parts/embed.fnc' and -e 'parts/apidoc.fnc') {
 }
 
 if (! $opt{'yes'}) {
-    ask_or_quit("Are you SURE you have:\n1) updated parts/embed.fnc to latest blead?\n2) run devel/mkapidoc.pl to update parts/apidoc.fnc?\n3) run devel/mkppport_fnc.pl to update parts/ppport.fnc?\n");
+    ask_or_quit("Are you SURE you have:\n1) updated parts/embed.fnc to"
+              . "latest blead?\n2) run devel/mkapidoc.pl to update"
+              . " parts/apidoc.fnc?\n3) run devel/mkppport_fnc.pl to"
+              . "update parts/ppport.fnc?\n");
 }
 
 my $files_glob_pattern = '[12345789]*';
@@ -153,6 +156,7 @@ push @perlargs, "--debug=$opt{debug}" if $opt{debug};
 push @perlargs, "--install=$opt{install}" if $opt{install};
 push @perlargs, "--blead=$opt{blead}" if $opt{blead};
 push @perlargs, "--debug-start=$opt{'debug-start'}" if $opt{'debug-start'};
+push @perlargs, "--skip-devels" if $opt{'skip-devels'};
 
 my $T0 = time;
 my @args = ddverbose();
@@ -228,6 +232,7 @@ regenerate - Automatically regenerate Devel::PPPort's API information
   --verbose      show verbose output
   --yes          the answer to all the standard questions is 'yes',
                  can be used to nohup this.
+  --skip-devels  do not look at development-only releases
 
 =head1 COPYRIGHT
 
index 0a20470..1457d89 100644 (file)
@@ -245,10 +245,11 @@ for $f (sort { dictionary_order($a->{'name'}, $b->{'name'}) } @f) {
 
   # only public API members, except those in ppport.fnc are there because we
   # want them to be tested even if non-public.  X,M functions are supposed to
-  # be considered to have just the macro form public.
+  # be considered to have just the macro form public (but not if restricted by
+  # 'E').
       $f->{'flags'}{'A'}
   or  $f->{'ppport_fnc'}
-  or ($f->{'flags'}{'X'} and $f->{'flags'}{'M'})
+  or ($f->{'flags'}{'X'} and $f->{'flags'}{'M'} and ! $f->{'flags'}{'E'} )
   or next;
 
   # Don't test unorthodox things that we aren't set up to do
index 9b834cf..5b82727 100644 (file)
@@ -59,7 +59,6 @@ BmPREVIOUS                     # Z added by devel/scanprov
 BmRARE                         # Z added by devel/scanprov
 BmUSEFUL                       # Z added by devel/scanprov
 BOL                            # Z added by devel/scanprov
-bool                           # Z added by devel/scanprov
 boot_core_UNIVERSAL            # F added by devel/scanprov
 BOUND                          # Z added by devel/scanprov
 BRANCH                         # Z added by devel/scanprov
@@ -371,7 +370,6 @@ gv_stashsv                     # T
 GvSV                           # T
 GvXPVGV                        # Z added by devel/scanprov
 HAS_ALARM                      # K added by devel/scanprov
-HAS_BOOL                       # Z added by devel/scanprov
 HAS_CHOWN                      # K added by devel/scanprov
 HAS_CHROOT                     # K added by devel/scanprov
 HAS_CRYPT                      # K added by devel/scanprov
index a133fd3..a335d95 100644 (file)
@@ -2,7 +2,6 @@
 CopyD                          # E
 DEBUG_COMPILE_r                # Z added by devel/scanprov
 DEBUG_EXECUTE_r                # Z added by devel/scanprov
-DEBUG_OFFSETS_r                # Z added by devel/scanprov
 DEBUG_OPTIMISE_r               # Z added by devel/scanprov
 DEBUG_TRIE_COMPILE_MORE_r      # Z added by devel/scanprov
 DEBUG_TRIE_COMPILE_r           # Z added by devel/scanprov
index 7f1ba71..fa3833a 100644 (file)
@@ -58,7 +58,6 @@ KEY_state                      # Z added by devel/scanprov
 LIKELY                         # U
 magic_clearhint                # F added by devel/scanprov
 magic_sethint                  # F added by devel/scanprov
-MJD_OFFSET_DEBUG               # Z added by devel/scanprov
 more_sv                        # F added by devel/scanprov
 my_snprintf                    # M added by devel/scanprov
 my_strlcat                     # U
@@ -124,7 +123,6 @@ RE_DEBUG_EXECUTE_MASK          # Z added by devel/scanprov
 RE_DEBUG_EXECUTE_MATCH         # Z added by devel/scanprov
 RE_DEBUG_EXECUTE_TRIE          # Z added by devel/scanprov
 RE_DEBUG_EXTRA_MASK            # Z added by devel/scanprov
-RE_DEBUG_EXTRA_OFFSETS         # Z added by devel/scanprov
 RE_DEBUG_EXTRA_STATE           # Z added by devel/scanprov
 RE_DEBUG_EXTRA_TRIE            # Z added by devel/scanprov
 RE_DEBUG_FLAG                  # Z added by devel/scanprov
index 3939c93..f88655d 100644 (file)
@@ -181,7 +181,6 @@ QR_PAT_MODS                    # Z added by devel/scanprov
 re_compile                     # U
 RE_DEBUG_COMPILE_FLAGS         # Z added by devel/scanprov
 RE_DEBUG_EXTRA_BUFFERS         # Z added by devel/scanprov
-RE_DEBUG_EXTRA_OFFDEBUG        # Z added by devel/scanprov
 RE_DEBUG_EXTRA_OPTIMISE        # Z added by devel/scanprov
 RE_DEBUG_EXTRA_STACK           # Z added by devel/scanprov
 REF_HE_KEY                     # Z added by devel/scanprov
@@ -207,7 +206,6 @@ reg_scan_name                  # F added by devel/scanprov
 reg_skipcomment                # F added by devel/scanprov
 reg_temp_copy                  # F added by devel/scanprov
 require_tie_mod                # F added by devel/scanprov
-RE_TRACK_PATTERN_OFFSETS       # Z added by devel/scanprov
 RXapif_ALL                     # Z added by devel/scanprov
 RXapif_CLEAR                   # Z added by devel/scanprov
 RXapif_DELETE                  # Z added by devel/scanprov
index d726613..3ad8869 100644 (file)
@@ -59,6 +59,5 @@ RX_SUBOFFSET                   # Z added by devel/scanprov
 SAWAMPERSAND_LEFT              # Z added by devel/scanprov
 SAWAMPERSAND_MIDDLE            # Z added by devel/scanprov
 SAWAMPERSAND_RIGHT             # Z added by devel/scanprov
-sv_len_utf8_nomg               # F added by devel/scanprov
 UTF8_IS_ABOVE_LATIN1           # Z added by devel/scanprov
 WARN_EXPERIMENTAL              # E
index f46896a..2289abd 100644 (file)
@@ -316,7 +316,9 @@ TRIE_tb                        # Z added by devel/scanprov
 UNISKIP_BY_MSB                 # Z added by devel/scanprov
 UNLESSM_t8                     # Z added by devel/scanprov
 UNLESSM_tb                     # Z added by devel/scanprov
+utf16_to_utf8                  # Z added by devel/scanprov
 utf16_to_utf8_base             # F added by devel/scanprov
+utf16_to_utf8_reversed         # Z added by devel/scanprov
 UTF8_IS_PERL_EXTENDED          # Z added by devel/scanprov
 utf8_to_utf16                  # Z added by devel/scanprov
 utf8_to_utf16_base             # F added by devel/scanprov
index 7034ef2..092b9fb 100644 (file)
@@ -5,6 +5,7 @@ CvSIGNATURE_off                # Z added by devel/scanprov
 CvSIGNATURE_on                 # Z added by devel/scanprov
 NV_ZERO_IS_ALLBITS_ZERO        # K added by devel/scanprov
 PERL_INC_VERSION_LIST          # K added by devel/scanprov
+PL_prevailing_version          # Z added by devel/scanprov
 sv_numeq                       # U
 sv_numeq_flags                 # U
 sv_streq                       # U
index 99a9a28..be825a4 100644 (file)
@@ -1,4 +1,15 @@
 5.035010
-utf16_to_utf8                  # U (Perl_utf16_to_utf8)
-utf16_to_utf8_reversed         # U (Perl_utf16_to_utf8_reversed)
+LOOKBEHIND_END                 # Z added by devel/scanprov
+LOOKBEHIND_END_t8              # Z added by devel/scanprov
+LOOKBEHIND_END_t8_p8           # Z added by devel/scanprov
+LOOKBEHIND_END_t8_pb           # Z added by devel/scanprov
+LOOKBEHIND_END_tb              # Z added by devel/scanprov
+LOOKBEHIND_END_tb_p8           # Z added by devel/scanprov
+LOOKBEHIND_END_tb_pb           # Z added by devel/scanprov
+reg_la_NOTHING                 # F added by devel/scanprov
+reg_la_OPFAIL                  # F added by devel/scanprov
+REG_LB_SEEN                    # Z added by devel/scanprov
+regnode_guts_debug             # F added by devel/scanprov
+sv_len_utf8_nomg               # U (Perl_sv_len_utf8_nomg)
+SvPOK_or_cached_IV             # Z added by devel/scanprov
 UTF8_IS_REPLACEMENT            # U
index 45c6fd2..1e3f87a 100644 (file)
@@ -1879,7 +1879,7 @@ Apd       |int    |sv_isa         |NULLOK SV* sv|NN const char *const name
 Apd    |int    |sv_isobject    |NULLOK SV* sv
 Apd    |STRLEN |sv_len         |NULLOK SV *const sv
 Apd    |STRLEN |sv_len_utf8    |NULLOK SV *const sv
-p      |STRLEN |sv_len_utf8_nomg|NN SV *const sv
+Apd    |STRLEN |sv_len_utf8_nomg|NN SV *const sv
 Apd    |void   |sv_magic       |NN SV *const sv|NULLOK SV *const obj|const int how \
                                |NULLOK const char *const name|const I32 namlen
 Apd    |MAGIC *|sv_magicext    |NN SV *const sv|NULLOK SV *const obj|const int how \
@@ -2026,12 +2026,19 @@ EiR     |SV*    |invlist_contents|NN SV* const invlist              \
 EixRT  |UV     |invlist_lowest|NN SV* const invlist
 ERS    |SV*    |make_exactf_invlist    |NN RExC_state_t *pRExC_state \
                                        |NN regnode *node
+ES     |regnode_offset|reg_la_NOTHING  |NN RExC_state_t *pRExC_state \
+                                       |U32 flags|NN const char *type
+ES     |regnode_offset|reg_la_OPFAIL   |NN RExC_state_t *pRExC_state \
+                                       |U32 flags|NN const char *type
 ES     |regnode_offset|reg     |NN RExC_state_t *pRExC_state \
                                |I32 paren|NN I32 *flagp|U32 depth
 ES     |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state          \
-                               |const U8 op                               \
-                               |const STRLEN extra_len                    \
-                               |NN const char* const name
+                               |const STRLEN extra_len
+#ifdef DEBUGGING
+ES     |regnode_offset|regnode_guts_debug|NN RExC_state_t *pRExC_state     \
+                               |const U8 op                                \
+                               |const STRLEN extra_len
+#endif
 ES     |void   |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size
 ES     |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \
                                |U32 arg
@@ -2108,13 +2115,12 @@ ES      |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \
                                |NN SV** invlist
 ES     |regnode_offset|handle_named_backref|NN RExC_state_t *pRExC_state   \
                                |NN I32 *flagp                              \
-                               |NN char * parse_start                      \
+                               |NN char * backref_parse_start              \
                                |char ch
 ESTR   |unsigned int|regex_set_precedence|const U8 my_operator
 ES     |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \
                                |NULLOK SV ** return_invlist            \
-                               |NN I32 *flagp|U32 depth                \
-                               |NN char * const oregcomp_parse
+                               |NN I32 *flagp|U32 depth
 ES     |void   |set_regex_pv   |NN RExC_state_t *pRExC_state|NN REGEXP *Rx
 #  if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING)
 ES     |void   |dump_regex_sets_structures                                 \
index 487fe96..dd91f51 100644 (file)
@@ -15,6 +15,7 @@ __UNDEFINED__
 SV_NOSTEAL
 sv_setsv_flags
 newSVsv_nomg
+newSVsv_flags
 
 =implementation
 
@@ -34,6 +35,7 @@ __UNDEFINED__ SV_NOSTEAL 16
     }                                                                              \
   } STMT_END
 #else
+#define sv_setsv_flags(dstr, sstr, flags)                                          \
   (                                                                                \
     (((flags) & SV_NOSTEAL) && (sstr) && (SvFLAGS((SV *)(sstr)) & SVs_TEMP)) ? (   \
       SvTEMP_off((SV *)(sstr)),                                                    \
@@ -101,10 +103,24 @@ __UNDEFINED__ sv_setsv_flags(dstr, sstr, flags)
   )
 #endif
 
-#if defined(PERL_USE_GCC_BRACE_GROUPS)
-__UNDEFINED__ newSVsv_flags(sv, flags) ({ SV *_sv = newSV(0); sv_setsv_flags(_sv, (sv), (flags)); _sv; })
-#else
-__UNDEFINED__ newSVsv_flags(sv, flags) ((PL_Sv = newSV(0)), sv_setsv_flags(PL_Sv, (sv), (flags)), PL_Sv)
+#ifndef newSVsv_flags
+#  if defined(PERL_USE_GCC_BRACE_GROUPS)
+#    define  newSVsv_flags(sv, flags)                       \
+        ({                                                  \
+            SV *new = newSV(0);                             \
+            sv_setsv_flags(new, (sv), (flags));             \
+            new;                                            \
+        })
+#  else
+    PERL_STATIC_INLINE SV* D_PPP_newSVsv_flags(SV *const old, I32 flags)
+        {
+            dTHX;
+            SV *new = newSV(0);
+            sv_setsv_flags(new, old, flags);
+            return new;
+        }
+#    define  newSVsv_flags(sv, flags) D_PPP_newSVsv_flags(sv, flags)
+#  endif
 #endif
 
 __UNDEFINED__ newSVsv_nomg(sv) newSVsv_flags((sv), SV_NOSTEAL)
index 351f8cc..b88ea25 100644 (file)
@@ -49,9 +49,22 @@ __UNDEFINED__ PERL_LOADMOD_NOIMPORT     0x2
 __UNDEFINED__ PERL_LOADMOD_IMPORT_OPS   0x4
 
 #if defined(PERL_USE_GCC_BRACE_GROUPS)
-# define D_PPP_CROAK_IF_ERROR(cond) ({ SV *_errsv; ((cond) && (_errsv = ERRSV) && (SvROK(_errsv) || SvTRUE(_errsv)) && (croak_sv(_errsv), 1)); })
+# define D_PPP_CROAK_IF_ERROR(cond) ({              \
+    SV *_errsv;                                     \
+    (   (cond)                                      \
+     && (_errsv = ERRSV)                            \
+     && (SvROK(_errsv) || SvTRUE(_errsv))           \
+     && (croak_sv(_errsv), 1));                     \
+  })
 #else
-# define D_PPP_CROAK_IF_ERROR(cond) ((cond) && (SvROK(ERRSV) || SvTRUE(ERRSV)) && (croak_sv(ERRSV), 1))
+  PERL_STATIC_INLINE void D_PPP_CROAK_IF_ERROR(int cond) {
+    dTHX;
+    SV *errsv;
+    if (!cond) return;
+    errsv = ERRSV;
+    if (SvROK(errsv) || SvTRUE(errsv)) croak_sv(errsv);
+  }
+# define D_PPP_CROAK_IF_ERROR(cond) D_PPP_CROAK_IF_ERROR(cond)
 #endif
 
 #ifndef G_METHOD
index 8783e02..806aa18 100644 (file)
@@ -25,7 +25,8 @@ SvTRUE_nomg
 
 =implementation
 
-__UNDEFINED__  SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
+#undef  SvGETMAGIC
+__UNDEFINED__  SvGETMAGIC(x) ((void)(UNLIKELY(SvGMAGICAL(x)) && mg_get(x)))
 
 /* That's the best we can do... */
 __UNDEFINED__  sv_catpvn_nomg     sv_catpvn
index 6d3edbc..72437be 100644 (file)
@@ -19,6 +19,7 @@ MUTABLE_PTR
 NVTYPE
 PERLIO_FUNCS_CAST
 PERLIO_FUNCS_DECL
+PERL_STATIC_INLINE
 PERL_UNUSED_ARG
 PERL_UNUSED_CONTEXT
 PERL_UNUSED_DECL
@@ -38,6 +39,12 @@ ASSUME
 
 =implementation
 
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+__UNDEFINED__ PERL_STATIC_INLINE static inline
+#else
+__UNDEFINED__ PERL_STATIC_INLINE static
+#endif
+
 __UNDEFINED__ cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0)
 __UNDEFINED__ OpHAS_SIBLING(o)      (cBOOL((o)->op_sibling))
 __UNDEFINED__ OpSIBLING(o)          (0 + (o)->op_sibling)
@@ -52,7 +59,7 @@ __UNDEFINED__ __ASSERT_(statement)  assert(statement),
 __UNDEFINED__ __ASSERT_(statement)
 #endif
 
-__UNDEFINED__  __has_builtin(x) 0
+__UNDEF_NOT_PROVIDED__  __has_builtin(x) 0
 
 #if __has_builtin(__builtin_unreachable)
 #  define D_PPP_HAS_BUILTIN_UNREACHABLE
@@ -278,7 +285,9 @@ __UNDEF_NOT_PROVIDED__  PERL_GCC_BRACE_GROUPS_FORBIDDEN
 #  endif
 #endif
 
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
+#if  ! defined(__GNUC__) || defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) || defined(__cplusplus)
+#    undef PERL_USE_GCC_BRACE_GROUPS
+#else
 #  ifndef PERL_USE_GCC_BRACE_GROUPS
 #    define PERL_USE_GCC_BRACE_GROUPS
 #  endif
index 6e96dfa..7a44d71 100644 (file)
@@ -31,11 +31,25 @@ __UNDEFINED__  newSVpvn_utf8(s, len, u)  newSVpvn_flags((s), (len), (u) ? SVf_UT
 __UNDEFINED__  SVf_UTF8  0
 
 #ifndef newSVpvn_flags
-#if defined(PERL_USE_GCC_BRACE_GROUPS)
-# define newSVpvn_flags(s, len, flags) ({ SV *_sv = newSVpvn(D_PPP_CONSTPV_ARG((s)), (len)); SvFLAGS(_sv) |= ((flags) & SVf_UTF8); ((flags) & SVs_TEMP) ? sv_2mortal(_sv) : _sv; })
-#else
-# define newSVpvn_flags(s, len, flags) ((PL_Sv = newSVpvn(D_PPP_CONSTPV_ARG((s)), (len))), SvFLAGS(PL_Sv) |= ((flags) & SVf_UTF8), (((flags) & SVs_TEMP) ? sv_2mortal(PL_Sv) : PL_Sv))
-#endif
+#  if defined(PERL_USE_GCC_BRACE_GROUPS)
+#    define newSVpvn_flags(s, len, flags)                       \
+        ({                                                      \
+            SV * sv = newSVpvn(D_PPP_CONSTPV_ARG(s), (len));    \
+            SvFLAGS(sv) |= ((flags) & SVf_UTF8);                \
+            if ((flags) & SVs_TEMP) sv = sv_2mortal(sv);        \
+            sv;                                                 \
+        })
+#  else
+     PERL_STATIC_INLINE SV* D_PPP_newSVpvn_flags(const char *const s, const STRLEN len, const U32 flags)
+     {
+        dTHX;
+        SV * sv = newSVpvn(s, len));
+        SvFLAGS(sv) |= (flags & SVf_UTF8);
+        if (flags & SVs_TEMP) return sv_2mortal(sv);
+        return sv;
+     }
+#    define newSVpvn_flags(s, len, flags) D_PPP_newSVpvn_flags((s), (len), (flags));
+#  endif
 #endif
 
 =xsubs
index 727d615..ac909ec 100644 (file)
@@ -431,23 +431,80 @@ __UNDEFINED__  utf8_to_uvchr(s, lp)
 /* Replace utf8_to_uvchr with utf8_to_uvchr_buf */
 
 #ifdef sv_len_utf8
-   /* Older Perl versions have broken sv_len_utf8() when passed sv does not have SVf_UTF8 flag set */
-   /* Also note that SvGETMAGIC() may change presence of SVf_UTF8 flag */
-#  if { VERSION < 5.17.5 }
+#  if { VERSION >= 5.17.5 }
+#    ifndef  sv_len_utf8_nomg
+#      if defined(PERL_USE_GCC_BRACE_GROUPS)
+#        define sv_len_utf8_nomg(sv)                                    \
+            ({                                                          \
+                SV *sv_ = (sv);                                         \
+                sv_len_utf8(!SvGMAGICAL(sv_)                            \
+                            ? sv_                                       \
+                            : sv_mortalcopy_flags(sv_, SV_NOSTEAL));    \
+            })
+#      else
+         PERL_STATIC_INLINE STRLEN D_PPP_sv_len_utf8_nomg(SV * sv)
+         {
+             dTHX;
+             if (SvGMAGICAL(sv))
+                 return sv_len_utf8(sv_mortalcopy_flags(sv,
+                                                        SV_NOSTEAL));
+             else return sv_len_utf8(sv);
+         }
+#        define  sv_len_utf8_nomg(sv) D_PPP_sv_len_utf8_nomg(sv)
+#      endif
+#    endif
+#  else /* < 5.17.5 */
+    /* Older Perl versions have broken sv_len_utf8() when passed sv does not
+     * have SVf_UTF8 flag set */
+    /* Also note that SvGETMAGIC() may change presence of SVf_UTF8 flag */
 #    undef sv_len_utf8
 #    if defined(PERL_USE_GCC_BRACE_GROUPS)
-#      define sv_len_utf8_nomg(sv) ({ SV *_sv2 = (sv); (SvUTF8(_sv2) ? Perl_sv_len_utf8(aTHX_ (!SvGMAGICAL(_sv2) ? _sv2 : sv_mortalcopy_flags(_sv2, SV_NOSTEAL))) : ({ STRLEN _len; SvPV_nomg(_sv2, _len); _len; })); })
-#      define sv_len_utf8(sv) ({ SV *_sv1 = (sv); SvGETMAGIC(_sv1); sv_len_utf8_nomg(_sv1); })
-#    else
-#      define sv_len_utf8_nomg(sv) (PL_Sv = (sv), (SvUTF8(PL_Sv) ? Perl_sv_len_utf8(aTHX_ (!SvGMAGICAL(PL_Sv) ? PL_Sv : sv_mortalcopy_flags(PL_Sv, SV_NOSTEAL))) : (SvPV_nomg(PL_Sv, PL_na), PL_na)))
-#      define sv_len_utf8(sv) (PL_Sv = (sv), SvGETMAGIC(PL_Sv), sv_len_utf8_nomg(PL_Sv))
+#      define sv_len_utf8_nomg(sv)                                          \
+        ({                                                                  \
+            SV *sv2 = (sv);                                                 \
+            STRLEN len;                                                     \
+            if (SvUTF8(sv2)) {                                              \
+                if (SvGMAGICAL(sv2))                                        \
+                    len = Perl_sv_len_utf8(aTHX_                            \
+                                           sv_mortalcopy_flags(sv2,         \
+                                                               SV_NOSTEAL));\
+                else                                                        \
+                    len = Perl_sv_len_utf8(aTHX_ sv2);                      \
+             }                                                              \
+             else SvPV_nomg(sv2, len);                                      \
+             len;                                                           \
+       })
+#      define sv_len_utf8(sv) ({ SV *_sv1 = (sv);                           \
+                                 SvGETMAGIC(_sv1);                          \
+                                 sv_len_utf8_nomg(_sv1);                    \
+                              })
+#    else   /* Below is no brace groups */
+       PERL_STATIC_INLINE STRLEN D_PPP_sv_len_utf8_nomg(SV * sv)
+       {
+          dTHX;
+          STRLEN len;
+          if (SvUTF8(sv)) {
+              if (SvGMAGICAL(sv))
+                  len = Perl_sv_len_utf8(aTHX_
+                                         sv_mortalcopy_flags(sv,
+                                                             SV_NOSTEAL));
+              else
+                  len = Perl_sv_len_utf8(aTHX_ sv);
+          }
+          else SvPV_nomg(sv, len);
+          return len;
+       }
+#      define sv_len_utf8_nomg(sv) D_PPP_sv_len_utf8_nomg(sv)
+
+       PERL_STATIC_INLINE STRLEN D_PPP_sv_len_utf8(SV * sv)
+       {
+          dTHX;
+          SvGETMAGIC(sv);
+          return sv_len_utf8_nomg(sv);
+       }
+#      define sv_len_utf8(sv) D_PPP_sv_len_utf8(sv)
 #    endif
-#  endif
-#  if defined(PERL_USE_GCC_BRACE_GROUPS)
-     __UNDEFINED__ sv_len_utf8_nomg(sv) ({ SV *_sv = (sv); sv_len_utf8(!SvGMAGICAL(_sv) ? _sv : sv_mortalcopy_flags(_sv, SV_NOSTEAL)); })
-#  else
-     __UNDEFINED__ sv_len_utf8_nomg(sv) ((PL_Sv = (sv)), sv_len_utf8(!SvGMAGICAL(PL_Sv) ? PL_Sv : sv_mortalcopy_flags(PL_Sv, SV_NOSTEAL)))
-#  endif
+#  endif    /* End of < 5.17.5 */
 #endif
 
 =xsinit
index 68a5f36..89646d6 100644 (file)
@@ -26,7 +26,7 @@ PERL_BCDVERSION
 
 =implementation
 
-#define D_PPP_RELEASE_DATE 1643673600 /* 2022-02-01 */
+#define D_PPP_RELEASE_DATE 1646179200 /* 2022-03-02 */
 
 #if ! defined(PERL_REVISION) && ! defined(PERL_VERSION_MAJOR)
 #  if   !   defined(__PATCHLEVEL_H_INCLUDED__)                                  \
index 3c7cb04..0cb9818 100644 (file)
@@ -45,6 +45,7 @@ AmnT|void|PERL_MAGIC_glob
 AmnT|void|PERL_MAGIC_mutex
 AmnT|void|PERL_MAGIC_overload
 AmnT|void|PERL_MAGIC_overload_elem
+AmnT|void|PERL_STATIC_INLINE
 AmnT|void|Perl_warner_nocontext
 AmnT|void|PL_bufend
 AmnT|void|PL_bufptr
index 15e7b84..1a18ba3 100644 (file)
@@ -119,6 +119,7 @@ SvIOK_notUV                    # U
 SvIOK_only_UV                  # U
 SvIOK_UV                       # U
 sv_len_utf8                    # U
+sv_len_utf8_nomg               # U
 SvPOK_only_UTF8                # U
 sv_pos_b2u                     # U
 sv_pos_u2b                     # U
index 37ff115..ce8ca4f 100644 (file)
@@ -1,9 +1,2 @@
 5.035010
-LOCK_LC_NUMERIC_STANDARD       # E
-PERL_ARGS_ASSERT_CROAK_XS_USAGE # E
-PERL_VERSION_EQ                # E
-PERL_VERSION_NE                # E
-UNLOCK_LC_NUMERIC_STANDARD     # E
-utf16_to_utf8                  # U (Perl_utf16_to_utf8)
-utf16_to_utf8_reversed         # U (Perl_utf16_to_utf8_reversed)
 UTF8_IS_REPLACEMENT            # U