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
^\.git
^MYMETA.*$
+^META_new.*
^Makefile$
~$
\.old(?:\..*)?$
Devel-PPPort.*
Devel-PPPort.*\.tar\.gz$
.travis.yml
+.appveyor.yml
use strict;
use vars qw($VERSION $data);
-$VERSION = '3.64';
+$VERSION = '3.66';
sub _init_data
{
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
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,
# 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();
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";
}
# 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}};
}
else {
print STDERR "blead compiled without warnings nor errors.\n"
- . "Proceeding with everything else\n";
+ . "Proceeding with everything else\n\n";
}
}
# 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
);
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();
}
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]*';
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();
--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
# 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
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
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
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
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
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
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
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
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
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
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
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
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 \
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
|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 \
SV_NOSTEAL
sv_setsv_flags
newSVsv_nomg
+newSVsv_flags
=implementation
} \
} STMT_END
#else
+#define sv_setsv_flags(dstr, sstr, flags) \
( \
(((flags) & SV_NOSTEAL) && (sstr) && (SvFLAGS((SV *)(sstr)) & SVs_TEMP)) ? ( \
SvTEMP_off((SV *)(sstr)), \
)
#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)
__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
=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
NVTYPE
PERLIO_FUNCS_CAST
PERLIO_FUNCS_DECL
+PERL_STATIC_INLINE
PERL_UNUSED_ARG
PERL_UNUSED_CONTEXT
PERL_UNUSED_DECL
=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)
__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
# 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
__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
/* 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
=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__) \
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
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
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