Imported Upstream version 5.23.2 31/136031/1
authorDongHun Kwak <dh0128.kwak@samsung.com>
Wed, 28 Jun 2017 01:42:48 +0000 (10:42 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Wed, 28 Jun 2017 01:42:53 +0000 (10:42 +0900)
Change-Id: I6aaf597b5cbd6c307c4b2541d97c36cc8df87f21
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
233 files changed:
.gitignore
AUTHORS
Configure
Cross/Makefile-cross-SH
Cross/cflags-cross-arm
Cross/config.sh-arm-linux
Cross/config.sh-arm-linux-n770
INSTALL
MANIFEST
META.json
META.yml
Makefile.SH
Makefile.micro
NetWare/Makefile
NetWare/config_H.wc
Porting/Maintainers.pl
Porting/bisect-runner.pl
Porting/config.sh
Porting/config_H
Porting/epigraphs.pod
Porting/makerel
Porting/perldelta_template.pod
Porting/release_announcement_template.txt
Porting/release_managers_guide.pod
Porting/release_schedule.pod
Porting/todo.pod
README.haiku
README.macosx
README.os2
README.vms
README.win32
charclass_invlists.h
cop.h
cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm
cpan/CPAN-Meta-YAML/t/00-report-prereqs.dd [deleted file]
cpan/CPAN-Meta-YAML/t/01_api.t
cpan/CPAN-Meta-YAML/t/01_compile.t
cpan/CPAN-Meta-YAML/t/10_read.t
cpan/CPAN-Meta-YAML/t/11_read_string.t
cpan/CPAN-Meta-YAML/t/12_write.t
cpan/CPAN-Meta-YAML/t/13_write_string.t
cpan/CPAN-Meta-YAML/t/20_subclass.t
cpan/CPAN-Meta-YAML/t/21_yamlpm_compat.t
cpan/CPAN-Meta-YAML/t/30_yaml_spec_tml.t
cpan/CPAN-Meta-YAML/t/31_local_tml.t
cpan/CPAN-Meta-YAML/t/32_world_tml.t
cpan/CPAN-Meta-YAML/t/README.md
cpan/CPAN-Meta-YAML/t/lib/SubtestCompat.pm [new file with mode: 0644]
cpan/CPAN-Meta-YAML/t/lib/TestBridge.pm
cpan/CPAN-Meta-YAML/t/lib/TestML/Tiny.pm
cpan/CPAN-Meta-YAML/t/tml
cpan/Encode/Encode.pm
cpan/Encode/ucm/koi8-u.ucm
cpan/Filter-Util-Call/Call.pm
cpan/Filter-Util-Call/Call.xs
cpan/Filter-Util-Call/filter-util.pl
cpan/Filter-Util-Call/t/rt_101033.pm [new file with mode: 0644]
cpan/Filter-Util-Call/t/rt_101033.t [new file with mode: 0644]
cpan/Term-Cap/Cap.pm
cpan/perlfaq/lib/perlfaq.pm
cpan/perlfaq/lib/perlfaq.pod
cpan/perlfaq/lib/perlfaq1.pod
cpan/perlfaq/lib/perlfaq2.pod
cpan/perlfaq/lib/perlfaq3.pod
cpan/perlfaq/lib/perlfaq4.pod
cpan/perlfaq/lib/perlfaq5.pod
cpan/perlfaq/lib/perlfaq6.pod
cpan/perlfaq/lib/perlfaq7.pod
cpan/perlfaq/lib/perlfaq8.pod
cpan/perlfaq/lib/perlfaq9.pod
cpan/perlfaq/lib/perlglossary.pod
dist/Attribute-Handlers/Changes
dist/Attribute-Handlers/lib/Attribute/Handlers.pm
dist/Carp/Makefile.PL
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Constants.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/CountLines.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Eval.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm
dist/Module-CoreList/Changes
dist/Module-CoreList/lib/Module/CoreList.pm
dist/Module-CoreList/lib/Module/CoreList/TieHashDelta.pm
dist/Module-CoreList/lib/Module/CoreList/Utils.pm
dist/PathTools/Cwd.pm
dist/PathTools/lib/File/Spec.pm
dist/PathTools/lib/File/Spec/Cygwin.pm
dist/PathTools/lib/File/Spec/Epoc.pm
dist/PathTools/lib/File/Spec/Functions.pm
dist/PathTools/lib/File/Spec/Mac.pm
dist/PathTools/lib/File/Spec/OS2.pm
dist/PathTools/lib/File/Spec/Unix.pm
dist/PathTools/lib/File/Spec/VMS.pm
dist/PathTools/lib/File/Spec/Win32.pm
dist/XSLoader/Makefile.PL
doio.c
doop.c
dquote.c [moved from dquote_static.c with 53% similarity]
dquote_inline.h [new file with mode: 0644]
dump.c
embed.fnc
embed.h
embedvar.h
ext/B/t/b.t
ext/B/t/f_map.t
ext/B/t/f_sort.t
ext/B/t/optree_misc.t
ext/B/t/optree_samples.t
ext/B/t/optree_sort.t
ext/File-Find/lib/File/Find.pm
ext/Hash-Util/lib/Hash/Util.pm
ext/Hash-Util/t/Util.t
ext/POSIX/POSIX.xs
ext/POSIX/lib/POSIX.pm
ext/POSIX/lib/POSIX.pod
ext/POSIX/t/math.t
ext/XS-APItest/t/handy.t
ext/re/Makefile.PL
gv.c
gv.h
handy.h
hints/catamount.sh
hints/darwin.sh
hv.c
hv_func.h
intrpvar.h
invlist_inline.h [moved from inline_invlist.c with 99% similarity]
l1_char_class_tab.h
lib/B/Op_private.pm
lib/Unicode/UCD.pm
lib/Unicode/UCD.t
lib/h2xs.t
lib/locale.t
lib/unicore/README.perl
lib/unicore/mktables
lib/utf8_heavy.pl
locale.c
makedef.pl
malloc.c
mathoms.c
mg.c
mg_names.inc [moved from mg_names.c with 99% similarity]
mro_core.c
numeric.c
op.c
op.h
opcode.h
overload.inc [moved from overload.c with 99% similarity]
packsizetables.inc [moved from packsizetables.c with 100% similarity]
pad.c
pad.h
patchlevel.h
perl.c
perl.h
perlio.c
perlio.h
perlsdio.h
plan9/config.plan9
plan9/config_sh.sample
plan9/mkfile
pod/.gitignore
pod/perl.pod
pod/perl5231delta.pod [new file with mode: 0644]
pod/perldelta.pod
pod/perldiag.pod
pod/perlfilter.pod
pod/perlgit.pod
pod/perlhist.pod
pod/perlop.pod
pod/perlpolicy.pod
pod/perlvar.pod
pp.c
pp_ctl.c
pp_hot.c
pp_pack.c
pp_sys.c
proto.h
regcharclass.h
regcomp.c
regen/embed.pl
regen/genpacksizetables.pl
regen/mg_vtable.pl
regen/mk_PL_charclass.pl
regen/mk_invlists.pl
regen/op_private
regen/overload.pl
regen/regcharclass.pl
regen/regcharclass_multi_char_folds.pl
regen/regen_lib.pl
regen/unicode_constants.pl
regexec.c
scope.c
scope.h
sv.c
sv.h
t/base/rs.t
t/lib/croak/toke
t/lib/warnings/pp_sys
t/loc_tools.pl
t/op/aassign.t [new file with mode: 0644]
t/op/array.t
t/op/gmagic.t
t/op/hash.t
t/op/mkdir.t
t/op/sort.t
t/op/sprintf2.t
t/op/stat.t
t/op/tr.t
t/opbasic/cmp.t
t/perf/benchmarks
t/perf/optree.t
t/porting/args_assert.t
t/porting/known_pod_issues.dat
t/re/pat_advanced.t
t/re/re_tests
t/uni/overload.t
t/uni/variables.t
time64.c
time64.h
toke.c
unicode_constants.h
utf8.c
utf8.h
utfebcdic.h
util.c
vms/descrip_mms.template
win32/GNUmakefile
win32/Makefile
win32/Makefile.ce
win32/makefile.mk
win32/pod.mak
win32/win32.c
win32/wince.c

index 96cd2fa..6b57f5e 100644 (file)
@@ -182,6 +182,9 @@ MANIFEST.srt
 # generated by the top level install.html target. XXX Why does it need this?
 /vms/README_vms.pod
 
+# generated be ext/re/Makefile
+ext/re/invlist_inline.h
+
 # ctags
 tags
 TAGS
diff --git a/AUTHORS b/AUTHORS
index 2a28775..c844e9e 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -21,6 +21,7 @@ A. Sinan Unur                 <nanis@cpan.org>
 Aaron Crane                    <arc@cpan.org>
 Aaron B. Dossett               <aaron@iglou.com>
 Aaron J. Mackey                        <ajm6q@virginia.edu>
+Aaron Priven                   <aaron@priven.com>
 Aaron Trevena                  <aaaron.trevena@gmail.com>
 Augustina Blair                        <auggy@cpan.org>
 Abe Timmerman                  <abe@ztreet.demon.nl>
@@ -513,6 +514,7 @@ Ingy döt Net                       <ingy@ttul.org>
 insecure                       <insecure@mail.od.ua>
 Irving Reid                    <irving@tor.securecomputing.com>
 Ivan Kurmanov                  <kurmanov@openlib.org>
+Ivan Pozdeev                   <vano@mail.mipt.ru>
 Ivan Tubert-Brohman            <itub@cpan.org>
 J. David Blackstone            <jdb@dfwnet.sbms.sbc.com>
 J. van Krieken                 <John.van.Krieken@ATComputing.nl>
@@ -733,6 +735,7 @@ Louis Strous                        <louis.strous@gmail.com>
 Luc St-Louis                   <luc.st-louis@ca.transport.bombardier.com>
 Luca Fini
 Lucas Holt                     <luke@foolishgames.com>
+Ludovic E. R. Tolhurst-Cleaver                 <camel@ltcdev.com>
 Lukas Mai                      <l.mai@web.de>
 Luke Closs                     <lukec@cpan.org>
 Luke Ross                      <lukeross@gmail.com>
index f16a4bf..464737d 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -8040,7 +8040,7 @@ cat <<EOM
 Perl can be built to support DTrace on platforms that support it.
 DTrace is a diagnosis and performance analysis tool from Sun.
 
-If this doesn't make any sense to you, just accept the default '$dflt'.
+If this doesn't make any sense to you, just accept the default.
 EOM
 
 while $test 1 ; do
@@ -8413,7 +8413,7 @@ int main() {
     exit(1); /* fail */
 }
 EOM
-       if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
+       if $cc $ccflags $ldflags -o a.out try.c >/dev/null 2>&1 && $run ./a.out; then
            bin_ELF="$define"
        fi
        $rm_try
@@ -23459,13 +23459,13 @@ find_extensions='
        case "$xxx" in
            DynaLoader|dynaload) ;;
            *)
-           this_ext=`echo $xxx | $sed -e s/-/\\\//g`;
+           this_ext=`echo "$xxx" | $sed -e s/-/\\\//g`;
            case "$this_ext" in
                Scalar/List/Utils) this_ext="List/Util" ;;
                PathTools)         this_ext="Cwd"       ;;
            esac;
-           echo " $xs_extensions $nonxs_extensions" > $tdir/$$.tmp;
-           if $contains " $this_ext " $tdir/$$.tmp; then
+           echo " $xs_extensions $nonxs_extensions" > "$tdir/$$.tmp";
+           if $contains " $this_ext " "$tdir/$$.tmp"; then
                echo >&4;
                echo "Duplicate directories detected for extension $xxx" >&4;
                echo "Configure cannot correctly recover from this - shall I abort?" >&4;
@@ -23483,15 +23483,15 @@ find_extensions='
                esac;
                echo "Ok.  You will need to correct config.sh before running make." >&4;
            fi;
-           $ls -1 $xxx > $tdir/$$.tmp;
-           if   $contains "\.xs$" $tdir/$$.tmp > /dev/null 2>&1; then
+           $ls -1 "$xxx" > "$tdir/$$.tmp";
+           if   $contains "\.xs$" "$tdir/$$.tmp" > /dev/null 2>&1; then
                xs_extensions="$xs_extensions $this_ext";
-           elif $contains "\.c$"  $tdir/$$.tmp > /dev/null 2>&1; then
+           elif $contains "\.c$"  "$tdir/$$.tmp" > /dev/null 2>&1; then
                xs_extensions="$xs_extensions $this_ext";
-           elif $test -d $xxx; then
+           elif $test -d "$xxx"; then
                nonxs_extensions="$nonxs_extensions $this_ext";
            fi;
-           $rm -f $tdir/$$.tmp;
+           $rm -f "$tdir/$$.tmp";
            ;;
        esac;
     done'
index 01cde92..4b6bf12 100644 (file)
@@ -345,17 +345,17 @@ h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h
 h5 = utf8.h warnings.h
 h = $(h1) $(h2) $(h3) $(h4) $(h5)
 
-c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c
+c1 = av.c scope.c op.c doop.c doio.c dquote.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c
 c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c
-c3 = taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c
+c3 = taint.c time64.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c
 c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c
 c5 = $(mallocsrc)
 
 c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c perlmain.c opmini.c
 
-obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT)
+obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dquote$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT)
 obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) perl$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
-obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT)
+obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) time64$(OBJ_EXT)
 
 obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
 
index 8ee55a5..3006394 100644 (file)
@@ -73,6 +73,7 @@ for file do
     dl) ;;
     doio) ;;
     doop) ;;
+    dquote) ;;
     dump) ;;
     globals) ;;
     gv) ;;
@@ -102,6 +103,7 @@ for file do
     scope) ;;
     sv) ;;
     taint) ;;
+    time64) ;;
     toke) ;;
     universal) ;;
     usersub) ;;
index 996d28b..c470fbf 100644 (file)
@@ -32,12 +32,12 @@ alignbytes='4'
 ansi2knr=''
 aphostname='/bin/hostname'
 api_revision='5'
-api_subversion='1'
+api_subversion='2'
 api_version='23'
-api_versionstring='5.23.1'
+api_versionstring='5.23.2'
 ar='ar'
-archlib='/usr/lib/perl5/5.23.1/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.23.1/armv4l-linux'
+archlib='/usr/lib/perl5/5.23.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.23.2/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -56,7 +56,7 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.23.1/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.23.2/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -796,7 +796,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.23.1/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.23.2/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -804,13 +804,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.23.1'
+installprivlib='./install_me_here/usr/lib/perl5/5.23.2'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.23.1/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.23.2/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.23.1'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.23.2'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -944,8 +944,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.23.1'
-privlibexp='/usr/lib/perl5/5.23.1'
+privlib='/usr/lib/perl5/5.23.2'
+privlibexp='/usr/lib/perl5/5.23.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1010,17 +1010,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.23.1/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.23.1/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.23.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.23.2/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.23.1'
+sitelib='/usr/lib/perl5/site_perl/5.23.2'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.23.1'
+sitelibexp='/usr/lib/perl5/site_perl/5.23.2'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1059,7 +1059,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1151,8 +1151,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.23.1'
-version_patchlevel_string='version 23 subversion 1'
+version='5.23.2'
+version_patchlevel_string='version 23 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1166,9 +1166,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=23
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=23
-PERL_API_SUBVERSION=1
+PERL_API_SUBVERSION=2
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
index fc734b7..c16c4eb 100644 (file)
@@ -32,12 +32,12 @@ alignbytes='4'
 ansi2knr=''
 aphostname='/bin/hostname'
 api_revision='5'
-api_subversion='1'
+api_subversion='2'
 api_version='23'
-api_versionstring='5.23.1'
+api_versionstring='5.23.2'
 ar='ar'
-archlib='/usr/lib/perl5/5.23.1/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.23.1/armv4l-linux'
+archlib='/usr/lib/perl5/5.23.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.23.2/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -55,7 +55,7 @@ castflags='0'
 cat='cat'
 cc='arm-none-linux-gnueabi-gcc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.23.1/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.23.2/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -699,7 +699,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.23.1/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.23.2/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -707,13 +707,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.23.1'
+installprivlib='./install_me_here/usr/lib/perl5/5.23.2'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.23.1/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.23.2/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.23.1'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.23.2'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -841,8 +841,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.23.1'
-privlibexp='/usr/lib/perl5/5.23.1'
+privlib='/usr/lib/perl5/5.23.2'
+privlibexp='/usr/lib/perl5/5.23.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -903,17 +903,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.23.1/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.23.1/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.23.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.23.2/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.23.1'
+sitelib='/usr/lib/perl5/site_perl/5.23.2'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.23.1'
+sitelibexp='/usr/lib/perl5/site_perl/5.23.2'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -950,7 +950,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1035,8 +1035,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.23.1'
-version_patchlevel_string='version 23 subversion 1'
+version='5.23.2'
+version_patchlevel_string='version 23 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1050,9 +1050,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=23
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=23
-PERL_API_SUBVERSION=1
+PERL_API_SUBVERSION=2
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
diff --git a/INSTALL b/INSTALL
index 23ca435..7b129bd 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -332,9 +332,6 @@ this support (if it is available).
 Note that the exact format and range of long doubles varies:
 the most common is the x86 80-bit (64 bits of mantissa) format,
 but there are others, with different mantissa and exponent ranges.
-In fact, the type may not be called "long double" at C level, and
-therefore the C<uselongdouble> means "using floating point larger
-than double".
 
 =head3 "more bits"
 
@@ -584,7 +581,7 @@ The directories set up by Configure fall into three broad categories.
 
 =item Directories for the perl distribution
 
-By default, Configure will use the following directories for 5.23.1.
+By default, Configure will use the following directories for 5.23.2.
 $version is the full perl version number, including subversion, e.g.
 5.12.3, and $archname is a string like sun4-sunos,
 determined by Configure.  The full definitions of all Configure
@@ -2443,7 +2440,7 @@ http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
 
 =head1 Coexistence with earlier versions of perl 5
 
-Perl 5.23.1 is not binary compatible with earlier versions of Perl.
+Perl 5.23.2 is not binary compatible with earlier versions of Perl.
 In other words, you will have to recompile your XS modules.
 
 In general, you can usually safely upgrade from one version of Perl
@@ -2518,9 +2515,9 @@ won't interfere with another version.  (The defaults guarantee this for
 libraries after 5.6.0, but not for executables. TODO?)  One convenient
 way to do this is by using a separate prefix for each version, such as
 
-       sh Configure -Dprefix=/opt/perl5.23.1
+       sh Configure -Dprefix=/opt/perl5.23.2
 
-and adding /opt/perl5.23.1/bin to the shell PATH variable.  Such users
+and adding /opt/perl5.23.2/bin to the shell PATH variable.  Such users
 may also wish to add a symbolic link /usr/local/bin/perl so that
 scripts can still start with #!/usr/local/bin/perl.
 
@@ -2533,13 +2530,13 @@ seriously consider using a separate directory, since development
 subversions may not have all the compatibility wrinkles ironed out
 yet.
 
-=head2 Upgrading from 5.23.0 or earlier
+=head2 Upgrading from 5.23.1 or earlier
 
-B<Perl 5.23.1 may not be binary compatible with Perl 5.23.0 or
+B<Perl 5.23.2 may not be binary compatible with Perl 5.23.1 or
 earlier Perl releases.>  Perl modules having binary parts
 (meaning that a C compiler is used) will have to be recompiled to be
-used with 5.23.1.  If you find you do need to rebuild an extension with
-5.23.1, you may safely do so without disturbing the older
+used with 5.23.2.  If you find you do need to rebuild an extension with
+5.23.2, you may safely do so without disturbing the older
 installations.  (See L<"Coexistence with earlier versions of perl 5">
 above.)
 
@@ -2572,15 +2569,15 @@ Firstly, the bare minimum to run this script
      print("$f\n");
   }
 
-in Linux with perl-5.23.1 is as follows (under $Config{prefix}):
+in Linux with perl-5.23.2 is as follows (under $Config{prefix}):
 
   ./bin/perl
-  ./lib/perl5/5.23.1/strict.pm
-  ./lib/perl5/5.23.1/warnings.pm
-  ./lib/perl5/5.23.1/i686-linux/File/Glob.pm
-  ./lib/perl5/5.23.1/feature.pm
-  ./lib/perl5/5.23.1/XSLoader.pm
-  ./lib/perl5/5.23.1/i686-linux/auto/File/Glob/Glob.so
+  ./lib/perl5/5.23.2/strict.pm
+  ./lib/perl5/5.23.2/warnings.pm
+  ./lib/perl5/5.23.2/i686-linux/File/Glob.pm
+  ./lib/perl5/5.23.2/feature.pm
+  ./lib/perl5/5.23.2/XSLoader.pm
+  ./lib/perl5/5.23.2/i686-linux/auto/File/Glob/Glob.so
 
 Secondly, for perl-5.10.1, the Debian perl-base package contains 591
 files, (of which 510 are for lib/unicore) totaling about 3.5MB in its
index 61437ba..097427f 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -327,7 +327,6 @@ cpan/CPAN-Meta/t/repository.t
 cpan/CPAN-Meta/t/save-load.t
 cpan/CPAN-Meta/t/validator.t
 cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm              CPAN-Meta-YAML files
-cpan/CPAN-Meta-YAML/t/00-report-prereqs.dd
 cpan/CPAN-Meta-YAML/t/01_api.t
 cpan/CPAN-Meta-YAML/t/01_compile.t             CPAN-Meta-YAML files
 cpan/CPAN-Meta-YAML/t/10_read.t
@@ -345,6 +344,7 @@ cpan/CPAN-Meta-YAML/t/data/latin1.yml
 cpan/CPAN-Meta-YAML/t/data/multibyte.yml               CPAN-Meta-YAML files
 cpan/CPAN-Meta-YAML/t/data/utf_16_le_bom.yml           CPAN-Meta-YAML files
 cpan/CPAN-Meta-YAML/t/data/utf_8_bom.yml
+cpan/CPAN-Meta-YAML/t/lib/SubtestCompat.pm
 cpan/CPAN-Meta-YAML/t/lib/TestBridge.pm
 cpan/CPAN-Meta-YAML/t/lib/TestML/Tiny.pm
 cpan/CPAN-Meta-YAML/t/lib/TestUtils.pm
@@ -1160,6 +1160,8 @@ cpan/Filter-Util-Call/Call.pm     Filter::Util::Call extension module
 cpan/Filter-Util-Call/Call.xs  Filter::Util::Call extension external subroutines
 cpan/Filter-Util-Call/filter-util.pl           See if Filter::Util::Call works
 cpan/Filter-Util-Call/t/call.t See if Filter::Util::Call works
+cpan/Filter-Util-Call/t/rt_101033.pm
+cpan/Filter-Util-Call/t/rt_101033.t
 cpan/Filter-Util-Call/t/rt_54452-rebless.t
 cpan/Getopt-Long/lib/Getopt/Long.pm    Fetch command options (GetOptions)
 cpan/Getopt-Long/t/gol-basic.t         See if Getopt::Long works
@@ -3527,7 +3529,8 @@ djgpp/fixpmain            DOS/DJGPP port
 doio.c                 I/O operations
 doop.c                 Support code for various operations
 dosish.h               Some defines for MS/DOSish machines
-dquote_static.c                Static functions for double quotish contexts
+dquote.c               Functions for double quotish contexts
+dquote_inline.h                Inline functions for double quotish contexts
 dump.c                 Debugging output
 ebcdic_tables.h                Generated tables included in utfebcdic.h
 embed.fnc              Database used by embed.pl
@@ -4107,7 +4110,6 @@ hv.c                              Hash value code
 hv_func.h                      Hash value static inline function header
 hv.h                           Hash value header
 inline.h                       Static inline functions
-inline_invlist.c               Inline functions for handling inversion lists
 INSTALL                                Detailed installation instructions
 installhtml                    Perl script to install html files for pods
 install_lib.pl                 functions shared between install* scripts
@@ -4115,6 +4117,7 @@ installman                        Perl script to install man pages for pods
 installperl                    Perl script to do "make install" dirty work
 INTERN.h                       Included before domestic .h files
 intrpvar.h                     Variables held in each interpreter instance
+invlist_inline.h               Inline functions for handling inversion lists
 iperlsys.h                     Perl's interface to the system
 keywords.c                     Perl_keyword(), generated by regen/keywords.pl
 keywords.h                     The keyword numbers
@@ -4385,7 +4388,7 @@ META.json                 Distribution meta-data in JSON
 META.yml                       Distribution meta-data in YAML
 mg.c                           Magic code
 mg.h                           Magic header
-mg_names.c                     Generated magic names used by dump.c
+mg_names.inc                   Generated magic names used by dump.c
 mg_raw.h                       Generated magic data used by generate_uudmap.c
 mg_vtable.h                    Generated magic vtable data
 miniperlmain.c                 Basic perl w/o dynamic loading or extensions
@@ -4515,9 +4518,9 @@ os2/OS2/typemap                   Common typemap for OS/2 types
 os2/perl2cmd.pl                        Corrects installed binaries under OS/2
 os2/perlrexx.c                 Support perl interpreter embedded in REXX
 os2/perlrexx.cmd               Test perl interpreter embedded in REXX
-overload.c                     generated overload enum (public)
-overload.h                     generated overload name table (implementation)
-packsizetables.c               The generated packprops array used in pp_pack.c
+overload.h                     generated overload enum (public)
+overload.inc                   generated overload name table (implementation)
+packsizetables.inc             The generated packprops array used in pp_pack.c
 pad.c                          Scratchpad functions
 pad.h                          Scratchpad headers
 parser.h                       parser object header
@@ -4583,6 +4586,7 @@ pod/perl5201delta.pod             Perl changes in version 5.20.1
 pod/perl5202delta.pod          Perl changes in version 5.20.2
 pod/perl5220delta.pod          Perl changes in version 5.22.0
 pod/perl5230delta.pod          Perl changes in version 5.23.0
+pod/perl5231delta.pod          Perl changes in version 5.23.1
 pod/perl561delta.pod           Perl changes in version 5.6.1
 pod/perl56delta.pod            Perl changes in version 5.6
 pod/perl581delta.pod           Perl changes in version 5.8.1
@@ -5146,6 +5150,7 @@ t/mro/vulcan_dfs.t                mro tests
 t/mro/vulcan_dfs_utf8.t                utf8 mro tests
 toke.c                         The tokener
 t/op/64bitint.t                        See if 64 bit integers work
+t/op/aassign.t                 test list assign
 t/op/alarm.t                   See if alarm works
 t/op/anonconst.t               See if :const works
 t/op/anonsub.t                 See if anonymous subroutines work
index 04750e4..7f54836 100644 (file)
--- a/META.json
+++ b/META.json
          "url" : "http://perl5.git.perl.org/"
       }
    },
-   "version" : "5.023001",
+   "version" : "5.023002",
    "x_serialization_backend" : "JSON::PP version 2.27300"
 }
index 11ffebb..739d308 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -112,5 +112,5 @@ resources:
   homepage: http://www.perl.org/
   license: http://dev.perl.org/licenses/
   repository: http://perl5.git.perl.org/
-version: '5.023001'
-x_serialization_backend: 'CPAN::Meta::YAML version 0.016'
+version: '5.023002'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.017'
index 2b0f95c..bc5837e 100755 (executable)
@@ -476,7 +476,7 @@ h = $(h1) $(h2) $(h3) $(h4) $(h5) $(h6)
 c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c
 c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c
 c3 = taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c
-c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c
+c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c dquote.c time64.c
 c5 = $(mallocsrc)
 
 c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c opmini.c perlmini.c
@@ -485,14 +485,14 @@ obj0 = op$(OBJ_EXT) perl$(OBJ_EXT)
 obj0mini = perlmini$(OBJ_EXT) opmini$(OBJ_EXT) miniperlmain$(OBJ_EXT)
 obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT) keywords$(OBJ_EXT)
 obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
-obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) caretx$(OBJ_EXT)
+obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) caretx$(OBJ_EXT) dquote$(OBJ_EXT) time64$(OBJ_EXT)
 
 minindt_obj = $(obj0mini) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
 mini_obj = $(minindt_obj) $(MINIDTRACE_O)
 ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
 obj = $(ndt_obj) $(DTRACE_O)
 
-perltoc_pod_prereqs = extra.pods pod/perl5231delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
+perltoc_pod_prereqs = extra.pods pod/perl5232delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
 generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
 generated_headers = uudmap.h bitcount.h mg_data.h
 
@@ -1020,9 +1020,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc
 pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
        $(MINIPERL) pod/perlmodlib.PL -q
 
-pod/perl5231delta.pod: pod/perldelta.pod
-       $(RMS) pod/perl5231delta.pod
-       $(LNS) perldelta.pod pod/perl5231delta.pod
+pod/perl5232delta.pod: pod/perldelta.pod
+       $(RMS) pod/perl5232delta.pod
+       $(LNS) perldelta.pod pod/perl5232delta.pod
 
 extra.pods: $(MINIPERL_EXE)
        -@test ! -f extra.pods || rm -f `cat extra.pods`
index dedf183..a697e16 100644 (file)
@@ -14,13 +14,13 @@ RUN =
 
 all:   microperl
 
-O = uav$(_O) udeb$(_O) udoio$(_O) udoop$(_O) udump$(_O) \
+O = uav$(_O) udeb$(_O) udoio$(_O) udoop$(_O) udquote$(_O) udump$(_O) \
        uglobals$(_O) ugv$(_O) uhv$(_O) umro$(_O)\
        umg$(_O) uperlmain$(_O) uop$(_O) ureentr$(_O) \
        upad$(_O) uperl$(_O) uperlio$(_O) uperly$(_O) upp$(_O) \
        upp_ctl$(_O) upp_hot$(_O) upp_sys$(_O) upp_pack$(_O) upp_sort$(_O) \
        uregcomp$(_O) uregexec$(_O) urun$(_O) \
-       uscope$(_O) usv$(_O) utaint$(_O) utoke$(_O) \
+       uscope$(_O) usv$(_O) utaint$(_O) utime64$(_O) utoke$(_O) \
        unumeric$(_O) ulocale$(_O) umathoms$(_O) \
        uuniversal$(_O) uutf8$(_O) uutil$(_O) uperlapi$(_O) ukeywords$(_O)
 
@@ -76,6 +76,9 @@ udoio$(_O):   $(HE) doio.c
 udoop$(_O):    $(HE) doop.c
        $(CC) $(CCFLAGS) -o $@ $(CFLAGS) doop.c
 
+udquote$(_O):  $(HE) dquote.c regcomp.h regnodes.h
+       $(CC) $(CCFLAGS) -o $@ $(CFLAGS) dquote.c
+
 udump$(_O):    $(HE) dump.c regcomp.h regnodes.h
        $(CC) $(CCFLAGS) -o $@ $(CFLAGS) dump.c
 
@@ -154,6 +157,9 @@ usv$(_O):   $(HE) sv.c
 utaint$(_O):   $(HE) taint.c
        $(CC) $(CCFLAGS) -o $@ $(CFLAGS) taint.c
 
+utime64$(_O):  $(HE) time64.c time64.h time64_config.h
+       $(CC) $(CCFLAGS) -o $@ $(CFLAGS) time64.c
+
 utoke$(_O):    $(HE) toke.c keywords.h
        $(CC) $(CCFLAGS) -o $@ $(CFLAGS) toke.c
 
index 422c5cb..dd4df14 100644 (file)
@@ -86,7 +86,7 @@ NLM_VERSION    = 3,20,0
 
 
 # Here comes the CW tools - TO BE FILLED TO BUILD WITH CW -
-MODULE_DESC     = "Perl 5.23.1 for NetWare"
+MODULE_DESC     = "Perl 5.23.2 for NetWare"
 CCTYPE          = CodeWarrior
 C_COMPILER             = mwccnlm -c
 CPP_COMPILER   = mwccnlm
@@ -462,7 +462,7 @@ INST_NW_TOP2 = $(INST_NW_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-INST_VER       = \5.23.1
+INST_VER       = \5.23.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -689,6 +689,7 @@ MICROCORE_SRC       =               \
                ..\deb.c        \
                ..\doio.c       \
                ..\doop.c       \
+               ..\dquote.c     \
                ..\dump.c       \
                ..\globals.c    \
                ..\gv.c         \
@@ -716,6 +717,7 @@ MICROCORE_SRC       =               \
                ..\scope.c      \
                ..\sv.c         \
                ..\taint.c      \
+               ..\time64.c     \
                ..\toke.c       \
                ..\universal.c  \
                ..\utf8.c       \
index 3f915fa..88fddc7 100644 (file)
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "c:\\perl\\5.23.1\\lib\\NetWare-x86-multi-thread"              /**/
+#define ARCHLIB "c:\\perl\\5.23.2\\lib\\NetWare-x86-multi-thread"              /**/
 /*#define ARCHLIB_EXP ""       /**/
 
 /* ARCHNAME:
  *     This symbol is the filename expanded version of the BIN symbol, for
  *     programs that do not want to deal with that at run-time.
  */
-#define BIN "c:\\perl\\5.23.1\\bin\\NetWare-x86-multi-thread"  /**/
-#define BIN_EXP "c:\\perl\\5.23.1\\bin\\NetWare-x86-multi-thread"      /**/
+#define BIN "c:\\perl\\5.23.2\\bin\\NetWare-x86-multi-thread"  /**/
+#define BIN_EXP "c:\\perl\\5.23.2\\bin\\NetWare-x86-multi-thread"      /**/
 
 /* BYTEORDER:
  *     This symbol holds the hexadecimal constant defined in byteorder,
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "c:\\perl\\site\\5.23.1\\lib\\NetWare-x86-multi-thread"               /**/
+#define SITEARCH "c:\\perl\\site\\5.23.2\\lib\\NetWare-x86-multi-thread"               /**/
 /*#define SITEARCH_EXP ""      /**/
 
 /* SITELIB:
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "c:\\perl\\site\\5.23.1\\lib"          /**/
+#define SITELIB "c:\\perl\\site\\5.23.2\\lib"          /**/
 /*#define SITELIB_EXP ""       /**/
 #define SITELIB_STEM ""                /**/
 
index cc5e564..7ea239e 100755 (executable)
@@ -18,11 +18,12 @@ use File::Glob qw(:case);
 @IGNORABLE = qw(
     .cvsignore .dualLivedDiffConfig .gitignore .perlcriticrc .perltidyrc
     .travis.yml ANNOUNCE Announce Artistic AUTHORS BENCHMARK BUGS Build.PL
-    CHANGELOG ChangeLog Changelog CHANGES Changes CONTRIBUTING CONTRIBUTING.mkdn
-    COPYING Copying cpanfile CREDITS dist.ini GOALS HISTORY INSTALL INSTALL.SKIP
-    LICENCE LICENSE Makefile.PL MANIFEST MANIFEST.SKIP META.json META.yml
-    MYMETA.json MYMETA.yml NEW NEWS NOTES perlcritic.rc ppport.h README
-    README.md README.PATCHING SIGNATURE THANKS TODO Todo VERSION WHATSNEW
+    CHANGELOG ChangeLog Changelog CHANGES Changes CONTRIBUTING CONTRIBUTING.md
+    CONTRIBUTING.mkdn COPYING Copying cpanfile CREDITS dist.ini GOALS HISTORY
+    INSTALL INSTALL.SKIP LICENCE LICENSE Makefile.PL MANIFEST MANIFEST.SKIP
+    META.json META.yml MYMETA.json MYMETA.yml NEW NEWS NOTES perlcritic.rc
+    ppport.h README README.md README.pod README.PATCHING SIGNATURE THANKS TODO
+    Todo VERSION WHATSNEW
 );
 
 # Each entry in the  %Modules hash roughly represents a distribution,
@@ -128,7 +129,7 @@ use File::Glob qw(:case);
     },
 
     'Attribute::Handlers' => {
-        'DISTRIBUTION' => 'SMUELLER/Attribute-Handlers-0.96.tar.gz',
+        'DISTRIBUTION' => 'RJBS/Attribute-Handlers-0.99.tar.gz',
         'FILES'        => q[dist/Attribute-Handlers],
     },
 
@@ -309,7 +310,7 @@ use File::Glob qw(:case);
     },
 
     'CPAN::Meta::YAML' => {
-        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-YAML-0.016.tar.gz',
+        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-YAML-0.017-TRIAL.tar.gz',
         'FILES'        => q[cpan/CPAN-Meta-YAML],
         'EXCLUDED'     => [
             't/00-report-prereqs.t',
@@ -381,7 +382,7 @@ use File::Glob qw(:case);
     },
 
     'Encode' => {
-        'DISTRIBUTION' => 'DANKOGAI/Encode-2.75.tar.gz',
+        'DISTRIBUTION' => 'DANKOGAI/Encode-2.76.tar.gz',
         'FILES'        => q[cpan/Encode],
     },
 
@@ -562,7 +563,7 @@ use File::Glob qw(:case);
     },
 
     'Filter::Util::Call' => {
-        'DISTRIBUTION' => 'RURBAN/Filter-1.54.tar.gz',
+        'DISTRIBUTION' => 'RURBAN/Filter-1.55.tar.gz',
         'FILES'        => q[cpan/Filter-Util-Call
                  pod/perlfilter.pod
                 ],
@@ -747,7 +748,7 @@ use File::Glob qw(:case);
     },
 
     'Math::BigInt' => {
-        'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-1.9993.tar.gz',
+        'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-1.9997.tar.gz',
         'FILES'        => q[dist/Math-BigInt],
         'EXCLUDED'     => [
             qr{^inc/},
@@ -819,7 +820,7 @@ use File::Glob qw(:case);
     },
 
     'Module::CoreList' => {
-        'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20150620.tar.gz',
+        'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20150720.tar.gz',
         'FILES'        => q[dist/Module-CoreList],
     },
 
@@ -892,7 +893,7 @@ use File::Glob qw(:case);
     },
 
     'perlfaq' => {
-        'DISTRIBUTION' => 'ETHER/perlfaq-5.021009.tar.gz',
+        'DISTRIBUTION' => 'LLAP/perlfaq-5.021010.tar.gz',
         'FILES'        => q[cpan/perlfaq],
         'EXCLUDED'     => [
             qw( inc/CreateQuestionList.pm
@@ -1054,7 +1055,7 @@ use File::Glob qw(:case);
     },
 
     'Term::Cap' => {
-        'DISTRIBUTION' => 'JSTOWE/Term-Cap-1.15.tar.gz',
+        'DISTRIBUTION' => 'JSTOWE/Term-Cap-1.17.tar.gz',
         'FILES'        => q[cpan/Term-Cap],
     },
 
index 417ac2b..5c228b8 100755 (executable)
@@ -1249,7 +1249,7 @@ sub match_and_exit {
         while (<$fh>) {
             if ($_ =~ $re) {
                 ++$matches;
-                if (tr/\t\r\n -~\200-\377//c) {
+                if (/[^[:^cntrl:]\h\v]/a) { # Matches non-spacing non-C1 controls
                     print "Binary file $file matches\n";
                 } else {
                     $_ .= "\n" unless /\n\z/;
index b8e5cce..fda6c0b 100644 (file)
@@ -39,12 +39,12 @@ alignbytes='4'
 ansi2knr=''
 aphostname='/bin/hostname'
 api_revision='5'
-api_subversion='1'
+api_subversion='2'
 api_version='23'
-api_versionstring='5.23.1'
+api_versionstring='5.23.2'
 ar='ar'
-archlib='/pro/lib/perl5/5.23.1/i686-linux-64int'
-archlibexp='/pro/lib/perl5/5.23.1/i686-linux-64int'
+archlib='/pro/lib/perl5/5.23.2/i686-linux-64int'
+archlibexp='/pro/lib/perl5/5.23.2/i686-linux-64int'
 archname64='64int'
 archname='i686-linux-64int'
 archobjs=''
@@ -813,7 +813,7 @@ incpath=''
 incpth='/usr/lib/gcc/i586-suse-linux/4.8/include /usr/local/include /usr/lib/gcc/i586-suse-linux/4.8/include-fixed /usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/include /usr/include'
 inews=''
 initialinstalllocation='/pro/bin'
-installarchlib='/pro/lib/perl5/5.23.1/i686-linux-64int'
+installarchlib='/pro/lib/perl5/5.23.2/i686-linux-64int'
 installbin='/pro/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -821,13 +821,13 @@ installman1dir='/pro/local/man/man1'
 installman3dir='/pro/local/man/man3'
 installprefix='/pro'
 installprefixexp='/pro'
-installprivlib='/pro/lib/perl5/5.23.1'
+installprivlib='/pro/lib/perl5/5.23.2'
 installscript='/pro/bin'
-installsitearch='/pro/lib/perl5/site_perl/5.23.1/i686-linux-64int'
+installsitearch='/pro/lib/perl5/site_perl/5.23.2/i686-linux-64int'
 installsitebin='/pro/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='/pro/lib/perl5/site_perl/5.23.1'
+installsitelib='/pro/lib/perl5/site_perl/5.23.2'
 installsiteman1dir='/pro/local/man/man1'
 installsiteman3dir='/pro/local/man/man3'
 installsitescript='/pro/bin'
@@ -953,7 +953,7 @@ perl_patchlevel=''
 perl_static_inline='static __inline__'
 perladmin='hmbrand@cpan.org'
 perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/pro/bin/perl5.23.1'
+perlpath='/pro/bin/perl5.23.2'
 pg='pg'
 phostname='hostname'
 pidtype='pid_t'
@@ -962,8 +962,8 @@ pmake=''
 pr=''
 prefix='/pro'
 prefixexp='/pro'
-privlib='/pro/lib/perl5/5.23.1'
-privlibexp='/pro/lib/perl5/5.23.1'
+privlib='/pro/lib/perl5/5.23.2'
+privlibexp='/pro/lib/perl5/5.23.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1029,17 +1029,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
 sig_size='69'
 signal_t='void'
-sitearch='/pro/lib/perl5/site_perl/5.23.1/i686-linux-64int'
-sitearchexp='/pro/lib/perl5/site_perl/5.23.1/i686-linux-64int'
+sitearch='/pro/lib/perl5/site_perl/5.23.2/i686-linux-64int'
+sitearchexp='/pro/lib/perl5/site_perl/5.23.2/i686-linux-64int'
 sitebin='/pro/bin'
 sitebinexp='/pro/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/pro/lib/perl5/site_perl/5.23.1'
+sitelib='/pro/lib/perl5/site_perl/5.23.2'
 sitelib_stem='/pro/lib/perl5/site_perl'
-sitelibexp='/pro/lib/perl5/site_perl/5.23.1'
+sitelibexp='/pro/lib/perl5/site_perl/5.23.2'
 siteman1dir='/pro/local/man/man1'
 siteman1direxp='/pro/local/man/man1'
 siteman3dir='/pro/local/man/man3'
@@ -1065,7 +1065,7 @@ src='.'
 ssizetype='ssize_t'
 st_ino_sign='1'
 st_ino_size='8'
-startperl='#!/pro/bin/perl5.23.1'
+startperl='#!/pro/bin/perl5.23.2'
 startsh='#!/bin/sh'
 static_ext=' '
 stdchar='char'
@@ -1078,7 +1078,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/usr/share/man/man1'
 sysroot=''
 tail=''
@@ -1177,8 +1177,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.23.1'
-version_patchlevel_string='version 23 subversion 1'
+version='5.23.2'
+version_patchlevel_string='version 23 subversion 2'
 versiononly='define'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1188,10 +1188,10 @@ zcat=''
 zip='zip'
 PERL_REVISION=5
 PERL_VERSION=23
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=23
-PERL_API_SUBVERSION=1
+PERL_API_SUBVERSION=2
 PERL_PATCHLEVEL=''
 PERL_CONFIG_SH=true
 : Variables propagated from previous config.sh file.
index 7b6de26..b880c6c 100644 (file)
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "/pro/lib/perl5/5.23.1/i686-linux-64int-ld"            /**/
-#define ARCHLIB_EXP "/pro/lib/perl5/5.23.1/i686-linux-64int-ld"                /**/
+#define ARCHLIB "/pro/lib/perl5/5.23.2/i686-linux-64int-ld"            /**/
+#define ARCHLIB_EXP "/pro/lib/perl5/5.23.2/i686-linux-64int-ld"                /**/
 
 /* ARCHNAME:
  *     This symbol holds a string representing the architecture name.
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/pro/lib/perl5/5.23.1"                /**/
-#define PRIVLIB_EXP "/pro/lib/perl5/5.23.1"            /**/
+#define PRIVLIB "/pro/lib/perl5/5.23.2"                /**/
+#define PRIVLIB_EXP "/pro/lib/perl5/5.23.2"            /**/
 
 /* PTRSIZE:
  *     This symbol contains the size of a pointer, so that the C preprocessor
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/pro/lib/perl5/site_perl/5.23.1/i686-linux-64int-ld"         /**/
-#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.23.1/i686-linux-64int-ld"             /**/
+#define SITEARCH "/pro/lib/perl5/site_perl/5.23.2/i686-linux-64int-ld"         /**/
+#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.23.2/i686-linux-64int-ld"             /**/
 
 /* SITELIB:
  *     This symbol contains the name of the private library for this package.
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/pro/lib/perl5/site_perl/5.23.1"              /**/
-#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.23.1"          /**/
+#define SITELIB "/pro/lib/perl5/site_perl/5.23.2"              /**/
+#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.23.2"          /**/
 #define SITELIB_STEM "/pro/lib/perl5/site_perl"                /**/
 
 /* SSize_t:
  *     script to make sure (one hopes) that it runs with perl and not
  *     some shell.
  */
-#define STARTPERL "#!/pro/bin/perl5.23.1"              /**/
+#define STARTPERL "#!/pro/bin/perl5.23.2"              /**/
 
 /* HAS_STDIO_STREAM_ARRAY:
  *     This symbol, if defined, tells that there is an array
index a71ac18..fffd1b6 100644 (file)
@@ -17,6 +17,63 @@ Consult your favorite dictionary for details.
 
 =head1 EPIGRAPHS
 
+=head2 v5.23.1 - Elizabeth Haydon, "The Assassin King"
+
+L<Announced on 2015-07-20 by Matthew Horsfall|http://www.nntp.perl.org/group/perl.perl5.porters/2015/07/msg229413.html>
+
+  I was born beneath this willow,
+  Where my sire the earth did farm
+  Had the green grass as my pillow
+  The east wind as a blanket warm.
+
+  But away! away! called the wind from the west
+  And in answer I did run
+  Seeking glory and adventure
+  Promised by the rising sun.
+
+  I found love beneath this willow,
+  As true a love as life could hold,
+  Pledged my heart and swore my fealty
+  Sealed with a kiss and a band of gold.
+
+  But to arms! to arms! called the wind from the west
+  In faithful answer I did run
+  Marching forth for king and country
+  In battles 'neath the midday sun.
+
+  Oft I dreamt of that fair willow
+  As the seven seas I plied
+  And the girl who I left waiting
+  Longing to be at her side.
+
+  But about! about! called the wind from the west
+  As once again my ship did run
+  Down the coast, about the wide world
+  Flying sails in the setting sun.
+
+  Now I lie beneath the willow
+  Now at last no more to roam,
+  My bride and earth so tightly hold me
+  In their arms I'm finally home.
+
+  While away! away! calls the wind from the west
+  Beyond the grave my spirit, free
+  Will chase the sun into the morning
+  Beyond the sky, beyond the sea.
+
+=head2 v5.23.0 - Bob Dylan, Maggie's Farm
+
+L<Announced on 2015-06-20 by Ricardo Signes|http://www.nntp.perl.org/group/perl.perl5.porters/2015/06/msg228807.html>
+
+  I ain't gonna work on Maggie's farm no more
+  I ain't gonna work on Maggie's farm no more
+  Well, I try my best
+  To be just like I am
+  But everybody wants you
+  To be just like them
+  They sing while you slave and I just get bored
+  I ain't gonna work on Maggie's farm no more
+
 =head2 v5.22.0 - Gene Wolfe, The Citadel of the Autarch
 
 L<Announced on 2015-06-01 by Ricardo Signes|http://www.nntp.perl.org/group/perl.perl5.porters/2015/06/msg228300.html>
index 11e22fd..a2160fb 100755 (executable)
@@ -141,7 +141,7 @@ my @writables = qw(
     proto.h
     embed.h
     embedvar.h
-    overload.c
+    overload.inc
     overload.h
     mg_vtable.h
     perlapi.h
index b052ec1..8ac9e75 100644 (file)
@@ -378,7 +378,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.23.1..HEAD
+  perl Porting/acknowledgements.pl v5.23.2..HEAD
 
 =head1 Reporting Bugs
 
index a83e113..c1fb1e7 100644 (file)
@@ -24,7 +24,7 @@ https://metacpan.org/pod/release/[AUTHOR]/perl-5.[VERSION.SUBVERSION]/pod/perlde
 [ACKNOWLEDGEMENTS SECTION FROM PERLDELTA]
 
 We expect to release version [NEXT BLEAD VERSION.SUBVERSION] on [FUTURE
-DATE].  The next major stable release of Perl 5, version 22.0, should
-appear in May 2015.
+DATE].  The next major stable release of Perl 5, version 24.0, should
+appear in May 2016.
 
 [YOUR SALUTATION HERE]
index d80dafb..55b50bb 100644 (file)
@@ -637,7 +637,10 @@ Also edit Module::CoreList's new version number in its F<Changes> file.
 
 =head4 Add Module::CoreList version bump to perldelta
 
-Add a perldelta entry for the new Module::CoreList version.
+Add a perldelta entry for the new Module::CoreList version. You only
+need to do this if you want to add notes about the changes included
+with this version of Module::CoreList. Otherwise, its version bump
+will be automatically filled in below in L<finalize perldelta>.
 
 =for checklist skip RC
 
index 31b4ee1..dfe2d18 100644 (file)
@@ -51,8 +51,8 @@ you should reset the version numbers to the next blead series.
 
 =head2 Perl 5.23
 
-  2015-06-20  5.23.0          Ricardo Signes
-  2015-07-20  5.23.1          Matthew Horsfall
+  2015-06-20  5.23.0 âœ“        Ricardo Signes
+  2015-07-20  5.23.1 âœ“        Matthew Horsfall
   2015-08-20  5.23.2          ?
   2015-09-20  5.23.3          ?
   2015-10-20  5.23.4          Steve Hay
index 89ad5a4..1ed467f 100644 (file)
@@ -71,8 +71,8 @@ instead there is an intentionally simpler library, F<t/test.pl>. However,
 quite a few tests in F<t/> have not been refactored to use it. Refactoring
 any of these tests, one at a time, is a useful thing TODO.
 
-The subdirectories F<base>, F<cmd> and F<comp>, that contain the most
-basic tests, should be excluded from this task.
+The subdirectories F<base>, F<cmd>, F<comp> and F<opbasic>, that contain the
+most basic tests, should be excluded from this task.
 
 =head2 Automate perldelta generation
 
@@ -467,7 +467,7 @@ Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
 On these systems, it might be the default compilation mode, and there
 is currently no guarantee that passing no use64bitall option to the
 Configure process will build a 32bit perl. Implementing -Duse32bit*
-options would be nice for perl 5.23.1.
+options would be nice for perl 5.23.2.
 
 =head2 Profile Perl - am I hot or not?
 
@@ -1169,7 +1169,7 @@ L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-01/msg00339.html>
 =head1 Big projects
 
 Tasks that will get your name mentioned in the description of the "Highlights
-of 5.23.1"
+of 5.23.2"
 
 =head2 make ithreads more robust
 
index b893beb..59b0eb1 100644 (file)
@@ -22,9 +22,9 @@ The build procedure is completely standard:
 Make perl executable and create a symlink for libperl:
 
   chmod a+x /boot/common/bin/perl
-  cd /boot/common/lib; ln -s perl5/5.23.1/BePC-haiku/CORE/libperl.so .
+  cd /boot/common/lib; ln -s perl5/5.23.2/BePC-haiku/CORE/libperl.so .
 
-Replace C<5.23.1> with your respective version of Perl.
+Replace C<5.23.2> with your respective version of Perl.
 
 =head1 KNOWN PROBLEMS
 
index 975638a..13fff32 100644 (file)
@@ -10,9 +10,9 @@ perlmacosx - Perl under Mac OS X
 
 This document briefly describes Perl under Mac OS X.
 
-  curl -O http://www.cpan.org/src/perl-5.23.1.tar.gz
-  tar -xzf perl-5.23.1.tar.gz
-  cd perl-5.23.1
+  curl -O http://www.cpan.org/src/perl-5.23.2.tar.gz
+  tar -xzf perl-5.23.2.tar.gz
+  cd perl-5.23.2
   ./Configure -des -Dprefix=/usr/local/
   make
   make test
@@ -20,7 +20,7 @@ This document briefly describes Perl under Mac OS X.
 
 =head1 DESCRIPTION
 
-The latest Perl release (5.23.1 as of this writing) builds without changes
+The latest Perl release (5.23.2 as of this writing) builds without changes
 under all versions of Mac OS X from 10.3 "Panther" onwards. 
 
 In order to build your own version of Perl you will need 'make',
index 84894a3..b0b2993 100644 (file)
@@ -619,7 +619,7 @@ C<set PERLLIB_PREFIX> in F<Config.sys>, see L<"PERLLIB_PREFIX">.
 
 =item Additional Perl modules
 
-  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.23.1/
+  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.23.2/
 
 Same remark as above applies.  Additionally, if this directory is not
 one of directories on @INC (and @INC is influenced by C<PERLLIB_PREFIX>), you
index 5dd9afb..4cbf269 100644 (file)
@@ -142,11 +142,11 @@ You may need to set up a foreign symbol for the unpacking utility of
 choice.  Once you have done so, use a command like the following to
 unpack the archive:
 
-    vmstar -xvf perl-5^.23^.1.tar
+    vmstar -xvf perl-5^.23^.2.tar
 
 Then set default to the top-level source directory like so:
 
-    set default [.perl-5^.23^.1]
+    set default [.perl-5^.23^.2]
 
 and proceed with configuration as described in the next section.
 
index ec29cfa..b4a07a6 100644 (file)
@@ -42,7 +42,7 @@ following compilers on the Intel x86 architecture:
       Microsoft Visual C++    version 6.0 or later
       Intel C++ Compiler      (experimental)
       Gcc by mingw.org        gcc version 3.4.5 or later
-      Gcc by mingw-w64.sf.net gcc version 4.4.3 or later
+      Gcc by mingw-w64.org    gcc version 4.4.3 or later
 
 Note that the last two of these are actually competing projects both
 delivering complete gcc toolchain for MS Windows:
@@ -53,7 +53,7 @@ delivering complete gcc toolchain for MS Windows:
 
 Delivers gcc toolchain targeting 32-bit Windows platform.
 
-=item L<http://mingw-w64.sf.net>
+=item L<http://mingw-w64.org>
 
 Delivers gcc toolchain targeting both 64-bit Windows and 32-bit Windows
 platforms (despite the project name "mingw-w64" they are not only 64-bit
@@ -74,7 +74,7 @@ This port can also be built on IA64/AMD64 using:
       MinGW64 compiler (gcc version 4.4.3 or later)
 
 The Windows SDK can be downloaded from L<http://www.microsoft.com/>.
-The MinGW64 compiler is available at L<http://sourceforge.net/projects/mingw-w64>.
+The MinGW64 compiler is available at L<http://mingw-w64.org>.
 The latter is actually a cross-compiler targeting Win64. There's also a trimmed
 down compiler (no java, or gfortran) suitable for building perl available at:
 L<http://strawberryperl.com/package/kmx/64_gcctoolchain/>
@@ -369,7 +369,7 @@ You will have to make sure that CCTYPE is set correctly and that
 CCHOME points to wherever you installed your compiler.
 
 If building with the cross-compiler provided by
-mingw-w64.sourceforge.net you'll need to uncomment the line that sets
+mingw-w64.org you'll need to uncomment the line that sets
 GCCCROSS in the makefile.mk. Do this only if it's the cross-compiler - ie
 only if the bin folder doesn't contain a gcc.exe. (The cross-compiler
 does not provide a gcc.exe, g++.exe, ar.exe, etc. Instead, all of these
index 076d223..8f14d31 100644 (file)
@@ -312,7 +312,387 @@ static const UV Cased_invlist[] = { /* for ASCII/Latin1 */
        0x1F18A
 };
 
-static const UV Grapheme_Cluster_Break_invlist[] = { /* for ASCII/Latin1 */
+#endif /* defined(PERL_IN_PERL_C) */
+
+#if defined(PERL_IN_REGCOMP_C)
+
+static const UV NonL1_Perl_Non_Final_Folds_invlist[] = { /* for ASCII/Latin1 */
+       45,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x2BC,
+       0x2BD,
+       0x308,
+       0x309,
+       0x313,
+       0x314,
+       0x342,
+       0x343,
+       0x3AC,
+       0x3AD,
+       0x3AE,
+       0x3AF,
+       0x3B1,
+       0x3B2,
+       0x3B7,
+       0x3B8,
+       0x3B9,
+       0x3BA,
+       0x3C1,
+       0x3C2,
+       0x3C5,
+       0x3C6,
+       0x3C9,
+       0x3CA,
+       0x3CE,
+       0x3CF,
+       0x565,
+       0x566,
+       0x574,
+       0x575,
+       0x57E,
+       0x57F,
+       0x1F00,
+       0x1F08,
+       0x1F20,
+       0x1F28,
+       0x1F60,
+       0x1F68,
+       0x1F70,
+       0x1F71,
+       0x1F74,
+       0x1F75,
+       0x1F7C,
+       0x1F7D
+};
+
+static const UV _Perl_Any_Folds_invlist[] = { /* for ASCII/Latin1 */
+       247,    /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x41,
+       0x5B,
+       0x61,
+       0x7B,
+       0xB5,
+       0xB6,
+       0xC0,
+       0xD7,
+       0xD8,
+       0xF7,
+       0xF8,
+       0x131,
+       0x132,
+       0x138,
+       0x139,
+       0x18D,
+       0x18E,
+       0x19B,
+       0x19C,
+       0x1AA,
+       0x1AC,
+       0x1BA,
+       0x1BC,
+       0x1BE,
+       0x1BF,
+       0x1C0,
+       0x1C4,
+       0x221,
+       0x222,
+       0x234,
+       0x23A,
+       0x255,
+       0x256,
+       0x258,
+       0x259,
+       0x25A,
+       0x25B,
+       0x25D,
+       0x260,
+       0x262,
+       0x263,
+       0x264,
+       0x265,
+       0x267,
+       0x268,
+       0x26A,
+       0x26B,
+       0x26D,
+       0x26F,
+       0x270,
+       0x271,
+       0x273,
+       0x275,
+       0x276,
+       0x27D,
+       0x27E,
+       0x280,
+       0x281,
+       0x283,
+       0x284,
+       0x287,
+       0x28D,
+       0x292,
+       0x293,
+       0x29D,
+       0x29F,
+       0x2BC,
+       0x2BD,
+       0x2BE,
+       0x2BF,
+       0x300,
+       0x302,
+       0x307,
+       0x309,
+       0x30A,
+       0x30B,
+       0x30C,
+       0x30D,
+       0x313,
+       0x314,
+       0x331,
+       0x332,
+       0x342,
+       0x343,
+       0x345,
+       0x346,
+       0x370,
+       0x374,
+       0x376,
+       0x378,
+       0x37B,
+       0x37E,
+       0x37F,
+       0x380,
+       0x386,
+       0x387,
+       0x388,
+       0x38B,
+       0x38C,
+       0x38D,
+       0x38E,
+       0x3A2,
+       0x3A3,
+       0x3D2,
+       0x3D5,
+       0x3F6,
+       0x3F7,
+       0x3FC,
+       0x3FD,
+       0x482,
+       0x48A,
+       0x530,
+       0x531,
+       0x557,
+       0x561,
+       0x588,
+       0x10A0,
+       0x10C6,
+       0x10C7,
+       0x10C8,
+       0x10CD,
+       0x10CE,
+       0x13A0,
+       0x13F6,
+       0x13F8,
+       0x13FE,
+       0x1D79,
+       0x1D7A,
+       0x1D7D,
+       0x1D7E,
+       0x1E00,
+       0x1E9C,
+       0x1E9E,
+       0x1E9F,
+       0x1EA0,
+       0x1F16,
+       0x1F18,
+       0x1F1E,
+       0x1F20,
+       0x1F46,
+       0x1F48,
+       0x1F4E,
+       0x1F50,
+       0x1F58,
+       0x1F59,
+       0x1F5A,
+       0x1F5B,
+       0x1F5C,
+       0x1F5D,
+       0x1F5E,
+       0x1F5F,
+       0x1F7E,
+       0x1F80,
+       0x1FB5,
+       0x1FB6,
+       0x1FBD,
+       0x1FBE,
+       0x1FBF,
+       0x1FC2,
+       0x1FC5,
+       0x1FC6,
+       0x1FCD,
+       0x1FD0,
+       0x1FD4,
+       0x1FD6,
+       0x1FDC,
+       0x1FE0,
+       0x1FED,
+       0x1FF2,
+       0x1FF5,
+       0x1FF6,
+       0x1FFD,
+       0x2126,
+       0x2127,
+       0x212A,
+       0x212C,
+       0x2132,
+       0x2133,
+       0x214E,
+       0x214F,
+       0x2160,
+       0x2180,
+       0x2183,
+       0x2185,
+       0x24B6,
+       0x24EA,
+       0x2C00,
+       0x2C2F,
+       0x2C30,
+       0x2C5F,
+       0x2C60,
+       0x2C71,
+       0x2C72,
+       0x2C74,
+       0x2C75,
+       0x2C77,
+       0x2C7E,
+       0x2CE4,
+       0x2CEB,
+       0x2CEF,
+       0x2CF2,
+       0x2CF4,
+       0x2D00,
+       0x2D26,
+       0x2D27,
+       0x2D28,
+       0x2D2D,
+       0x2D2E,
+       0xA640,
+       0xA66E,
+       0xA680,
+       0xA69C,
+       0xA722,
+       0xA730,
+       0xA732,
+       0xA770,
+       0xA779,
+       0xA788,
+       0xA78B,
+       0xA78E,
+       0xA790,
+       0xA794,
+       0xA796,
+       0xA7AE,
+       0xA7B0,
+       0xA7B8,
+       0xAB53,
+       0xAB54,
+       0xAB70,
+       0xABC0,
+       0xFB00,
+       0xFB07,
+       0xFB13,
+       0xFB18,
+       0xFF21,
+       0xFF3B,
+       0xFF41,
+       0xFF5B,
+       0x10400,
+       0x10450,
+       0x10C80,
+       0x10CB3,
+       0x10CC0,
+       0x10CF3,
+       0x118A0,
+       0x118E0
+};
+
+static const UV _Perl_Folds_To_Multi_Char_invlist[] = { /* for ASCII/Latin1 */
+       59,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0xDF,
+       0xE0,
+       0x130,
+       0x131,
+       0x149,
+       0x14A,
+       0x1F0,
+       0x1F1,
+       0x390,
+       0x391,
+       0x3B0,
+       0x3B1,
+       0x587,
+       0x588,
+       0x1E96,
+       0x1E9B,
+       0x1E9E,
+       0x1E9F,
+       0x1F50,
+       0x1F51,
+       0x1F52,
+       0x1F53,
+       0x1F54,
+       0x1F55,
+       0x1F56,
+       0x1F57,
+       0x1F80,
+       0x1FB0,
+       0x1FB2,
+       0x1FB5,
+       0x1FB6,
+       0x1FB8,
+       0x1FBC,
+       0x1FBD,
+       0x1FC2,
+       0x1FC5,
+       0x1FC6,
+       0x1FC8,
+       0x1FCC,
+       0x1FCD,
+       0x1FD2,
+       0x1FD4,
+       0x1FD6,
+       0x1FD8,
+       0x1FE2,
+       0x1FE5,
+       0x1FE6,
+       0x1FE8,
+       0x1FF2,
+       0x1FF5,
+       0x1FF6,
+       0x1FF8,
+       0x1FFC,
+       0x1FFD,
+       0xFB00,
+       0xFB07,
+       0xFB13,
+       0xFB18
+};
+
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
+#if defined(PERL_IN_PERL_C)
+
+static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
        1502,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -1844,7 +2224,7 @@ typedef enum {
        GCB_V = 13
 } GCB_enum;
 
-static const GCB_enum Grapheme_Cluster_Break_invmap[] = { /* for ASCII/Latin1 */
+static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
        GCB_Control,
        GCB_LF,
        GCB_Control,
@@ -3351,382 +3731,6 @@ static const GCB_enum Grapheme_Cluster_Break_invmap[] = { /* for ASCII/Latin1 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
-#if defined(PERL_IN_REGCOMP_C)
-
-static const UV NonL1_Perl_Non_Final_Folds_invlist[] = { /* for ASCII/Latin1 */
-       45,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x2BC,
-       0x2BD,
-       0x308,
-       0x309,
-       0x313,
-       0x314,
-       0x342,
-       0x343,
-       0x3AC,
-       0x3AD,
-       0x3AE,
-       0x3AF,
-       0x3B1,
-       0x3B2,
-       0x3B7,
-       0x3B8,
-       0x3B9,
-       0x3BA,
-       0x3C1,
-       0x3C2,
-       0x3C5,
-       0x3C6,
-       0x3C9,
-       0x3CA,
-       0x3CE,
-       0x3CF,
-       0x565,
-       0x566,
-       0x574,
-       0x575,
-       0x57E,
-       0x57F,
-       0x1F00,
-       0x1F08,
-       0x1F20,
-       0x1F28,
-       0x1F60,
-       0x1F68,
-       0x1F70,
-       0x1F71,
-       0x1F74,
-       0x1F75,
-       0x1F7C,
-       0x1F7D
-};
-
-static const UV _Perl_Any_Folds_invlist[] = { /* for ASCII/Latin1 */
-       247,    /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x41,
-       0x5B,
-       0x61,
-       0x7B,
-       0xB5,
-       0xB6,
-       0xC0,
-       0xD7,
-       0xD8,
-       0xF7,
-       0xF8,
-       0x131,
-       0x132,
-       0x138,
-       0x139,
-       0x18D,
-       0x18E,
-       0x19B,
-       0x19C,
-       0x1AA,
-       0x1AC,
-       0x1BA,
-       0x1BC,
-       0x1BE,
-       0x1BF,
-       0x1C0,
-       0x1C4,
-       0x221,
-       0x222,
-       0x234,
-       0x23A,
-       0x255,
-       0x256,
-       0x258,
-       0x259,
-       0x25A,
-       0x25B,
-       0x25D,
-       0x260,
-       0x262,
-       0x263,
-       0x264,
-       0x265,
-       0x267,
-       0x268,
-       0x26A,
-       0x26B,
-       0x26D,
-       0x26F,
-       0x270,
-       0x271,
-       0x273,
-       0x275,
-       0x276,
-       0x27D,
-       0x27E,
-       0x280,
-       0x281,
-       0x283,
-       0x284,
-       0x287,
-       0x28D,
-       0x292,
-       0x293,
-       0x29D,
-       0x29F,
-       0x2BC,
-       0x2BD,
-       0x2BE,
-       0x2BF,
-       0x300,
-       0x302,
-       0x307,
-       0x309,
-       0x30A,
-       0x30B,
-       0x30C,
-       0x30D,
-       0x313,
-       0x314,
-       0x331,
-       0x332,
-       0x342,
-       0x343,
-       0x345,
-       0x346,
-       0x370,
-       0x374,
-       0x376,
-       0x378,
-       0x37B,
-       0x37E,
-       0x37F,
-       0x380,
-       0x386,
-       0x387,
-       0x388,
-       0x38B,
-       0x38C,
-       0x38D,
-       0x38E,
-       0x3A2,
-       0x3A3,
-       0x3D2,
-       0x3D5,
-       0x3F6,
-       0x3F7,
-       0x3FC,
-       0x3FD,
-       0x482,
-       0x48A,
-       0x530,
-       0x531,
-       0x557,
-       0x561,
-       0x588,
-       0x10A0,
-       0x10C6,
-       0x10C7,
-       0x10C8,
-       0x10CD,
-       0x10CE,
-       0x13A0,
-       0x13F6,
-       0x13F8,
-       0x13FE,
-       0x1D79,
-       0x1D7A,
-       0x1D7D,
-       0x1D7E,
-       0x1E00,
-       0x1E9C,
-       0x1E9E,
-       0x1E9F,
-       0x1EA0,
-       0x1F16,
-       0x1F18,
-       0x1F1E,
-       0x1F20,
-       0x1F46,
-       0x1F48,
-       0x1F4E,
-       0x1F50,
-       0x1F58,
-       0x1F59,
-       0x1F5A,
-       0x1F5B,
-       0x1F5C,
-       0x1F5D,
-       0x1F5E,
-       0x1F5F,
-       0x1F7E,
-       0x1F80,
-       0x1FB5,
-       0x1FB6,
-       0x1FBD,
-       0x1FBE,
-       0x1FBF,
-       0x1FC2,
-       0x1FC5,
-       0x1FC6,
-       0x1FCD,
-       0x1FD0,
-       0x1FD4,
-       0x1FD6,
-       0x1FDC,
-       0x1FE0,
-       0x1FED,
-       0x1FF2,
-       0x1FF5,
-       0x1FF6,
-       0x1FFD,
-       0x2126,
-       0x2127,
-       0x212A,
-       0x212C,
-       0x2132,
-       0x2133,
-       0x214E,
-       0x214F,
-       0x2160,
-       0x2180,
-       0x2183,
-       0x2185,
-       0x24B6,
-       0x24EA,
-       0x2C00,
-       0x2C2F,
-       0x2C30,
-       0x2C5F,
-       0x2C60,
-       0x2C71,
-       0x2C72,
-       0x2C74,
-       0x2C75,
-       0x2C77,
-       0x2C7E,
-       0x2CE4,
-       0x2CEB,
-       0x2CEF,
-       0x2CF2,
-       0x2CF4,
-       0x2D00,
-       0x2D26,
-       0x2D27,
-       0x2D28,
-       0x2D2D,
-       0x2D2E,
-       0xA640,
-       0xA66E,
-       0xA680,
-       0xA69C,
-       0xA722,
-       0xA730,
-       0xA732,
-       0xA770,
-       0xA779,
-       0xA788,
-       0xA78B,
-       0xA78E,
-       0xA790,
-       0xA794,
-       0xA796,
-       0xA7AE,
-       0xA7B0,
-       0xA7B8,
-       0xAB53,
-       0xAB54,
-       0xAB70,
-       0xABC0,
-       0xFB00,
-       0xFB07,
-       0xFB13,
-       0xFB18,
-       0xFF21,
-       0xFF3B,
-       0xFF41,
-       0xFF5B,
-       0x10400,
-       0x10450,
-       0x10C80,
-       0x10CB3,
-       0x10CC0,
-       0x10CF3,
-       0x118A0,
-       0x118E0
-};
-
-static const UV _Perl_Folds_To_Multi_Char_invlist[] = { /* for ASCII/Latin1 */
-       59,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0xDF,
-       0xE0,
-       0x130,
-       0x131,
-       0x149,
-       0x14A,
-       0x1F0,
-       0x1F1,
-       0x390,
-       0x391,
-       0x3B0,
-       0x3B1,
-       0x587,
-       0x588,
-       0x1E96,
-       0x1E9B,
-       0x1E9E,
-       0x1E9F,
-       0x1F50,
-       0x1F51,
-       0x1F52,
-       0x1F53,
-       0x1F54,
-       0x1F55,
-       0x1F56,
-       0x1F57,
-       0x1F80,
-       0x1FB0,
-       0x1FB2,
-       0x1FB5,
-       0x1FB6,
-       0x1FB8,
-       0x1FBC,
-       0x1FBD,
-       0x1FC2,
-       0x1FC5,
-       0x1FC6,
-       0x1FC8,
-       0x1FCC,
-       0x1FCD,
-       0x1FD2,
-       0x1FD4,
-       0x1FD6,
-       0x1FD8,
-       0x1FE2,
-       0x1FE5,
-       0x1FE6,
-       0x1FE8,
-       0x1FF2,
-       0x1FF5,
-       0x1FF6,
-       0x1FF8,
-       0x1FFC,
-       0x1FFD,
-       0xFB00,
-       0xFB07,
-       0xFB13,
-       0xFB18
-};
-
-#endif /* defined(PERL_IN_REGCOMP_C) */
-
 #if defined(PERL_IN_UTF8_C)
 
 static const UV _Perl_IDCont_invlist[] = { /* for ASCII/Latin1 */
@@ -6193,7 +6197,7 @@ static const UV _Perl_IDStart_invlist[] = { /* for ASCII/Latin1 */
 
 #if defined(PERL_IN_PERL_C)
 
-static const UV Sentence_Break_invlist[] = { /* for ASCII/Latin1 */
+static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
        2896,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -9121,7 +9125,7 @@ typedef enum {
        SB_Upper = 15
 } SB_enum;
 
-static const SB_enum Sentence_Break_invmap[] = { /* for ASCII/Latin1 */
+static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
        SB_Other,
        SB_Sp,
        SB_LF,
@@ -12022,37 +12026,9 @@ static const SB_enum Sentence_Break_invmap[] = { /* for ASCII/Latin1 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
-#if defined(PERL_IN_REGCOMP_C)
-
-static const UV UpperLatin1_invlist[] = { /* for ASCII/Latin1 */
-       3,      /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x80,
-       0x100
-};
-
-#endif /* defined(PERL_IN_REGCOMP_C) */
-
 #if defined(PERL_IN_PERL_C)
 
-static const UV VertSpace_invlist[] = { /* for ASCII/Latin1 */
-       7,      /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0xA,
-       0xE,
-       0x85,
-       0x86,
-       0x2028,
-       0x202A
-};
-
-static const UV Word_Break_invlist[] = { /* for ASCII/Latin1 */
+static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
        1524,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -13611,7 +13587,7 @@ typedef enum {
        WB_UNKNOWN = 18
 } WB_enum;
 
-static const WB_enum Word_Break_invmap[] = { /* for ASCII/Latin1 */
+static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
        WB_Other,
        WB_LF,
        WB_Newline,
@@ -15140,8 +15116,36 @@ static const WB_enum Word_Break_invmap[] = { /* for ASCII/Latin1 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
+#if defined(PERL_IN_REGCOMP_C)
+
+static const UV UpperLatin1_invlist[] = { /* for ASCII/Latin1 */
+       3,      /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x80,
+       0x100
+};
+
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
 #if defined(PERL_IN_PERL_C)
 
+static const UV VertSpace_invlist[] = { /* for ASCII/Latin1 */
+       7,      /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0xA,
+       0xE,
+       0x85,
+       0x86,
+       0x2028,
+       0x202A
+};
+
 static const UV XPerlSpace_invlist[] = { /* for ASCII/Latin1 */
        21,     /* Number of elements */
        148565664, /* Version and data structure type */
@@ -24947,7 +24951,419 @@ static const UV Cased_invlist[] = { /* for EBCDIC 1047 */
        0x1F18A
 };
 
-static const UV Grapheme_Cluster_Break_invlist[] = { /* for EBCDIC 1047 */
+#endif /* defined(PERL_IN_PERL_C) */
+
+#if defined(PERL_IN_REGCOMP_C)
+
+static const UV NonL1_Perl_Non_Final_Folds_invlist[] = { /* for EBCDIC 1047 */
+       45,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x2BC,
+       0x2BD,
+       0x308,
+       0x309,
+       0x313,
+       0x314,
+       0x342,
+       0x343,
+       0x3AC,
+       0x3AD,
+       0x3AE,
+       0x3AF,
+       0x3B1,
+       0x3B2,
+       0x3B7,
+       0x3B8,
+       0x3B9,
+       0x3BA,
+       0x3C1,
+       0x3C2,
+       0x3C5,
+       0x3C6,
+       0x3C9,
+       0x3CA,
+       0x3CE,
+       0x3CF,
+       0x565,
+       0x566,
+       0x574,
+       0x575,
+       0x57E,
+       0x57F,
+       0x1F00,
+       0x1F08,
+       0x1F20,
+       0x1F28,
+       0x1F60,
+       0x1F68,
+       0x1F70,
+       0x1F71,
+       0x1F74,
+       0x1F75,
+       0x1F7C,
+       0x1F7D
+};
+
+static const UV _Perl_Any_Folds_invlist[] = { /* for EBCDIC 1047 */
+       279,    /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x42,
+       0x4A,
+       0x51,
+       0x5A,
+       0x62,
+       0x6A,
+       0x70,
+       0x79,
+       0x80,
+       0x8A,
+       0x8C,
+       0x8F,
+       0x91,
+       0x9A,
+       0x9C,
+       0x9D,
+       0x9E,
+       0x9F,
+       0xA0,
+       0xA1,
+       0xA2,
+       0xAA,
+       0xAC,
+       0xAD,
+       0xAE,
+       0xAF,
+       0xBA,
+       0xBB,
+       0xC1,
+       0xCA,
+       0xCB,
+       0xD0,
+       0xD1,
+       0xDA,
+       0xDB,
+       0xE0,
+       0xE2,
+       0xEA,
+       0xEB,
+       0xF0,
+       0xFB,
+       0xFF,
+       0x100,
+       0x131,
+       0x132,
+       0x138,
+       0x139,
+       0x18D,
+       0x18E,
+       0x19B,
+       0x19C,
+       0x1AA,
+       0x1AC,
+       0x1BA,
+       0x1BC,
+       0x1BE,
+       0x1BF,
+       0x1C0,
+       0x1C4,
+       0x221,
+       0x222,
+       0x234,
+       0x23A,
+       0x255,
+       0x256,
+       0x258,
+       0x259,
+       0x25A,
+       0x25B,
+       0x25D,
+       0x260,
+       0x262,
+       0x263,
+       0x264,
+       0x265,
+       0x267,
+       0x268,
+       0x26A,
+       0x26B,
+       0x26D,
+       0x26F,
+       0x270,
+       0x271,
+       0x273,
+       0x275,
+       0x276,
+       0x27D,
+       0x27E,
+       0x280,
+       0x281,
+       0x283,
+       0x284,
+       0x287,
+       0x28D,
+       0x292,
+       0x293,
+       0x29D,
+       0x29F,
+       0x2BC,
+       0x2BD,
+       0x2BE,
+       0x2BF,
+       0x300,
+       0x302,
+       0x307,
+       0x309,
+       0x30A,
+       0x30B,
+       0x30C,
+       0x30D,
+       0x313,
+       0x314,
+       0x331,
+       0x332,
+       0x342,
+       0x343,
+       0x345,
+       0x346,
+       0x370,
+       0x374,
+       0x376,
+       0x378,
+       0x37B,
+       0x37E,
+       0x37F,
+       0x380,
+       0x386,
+       0x387,
+       0x388,
+       0x38B,
+       0x38C,
+       0x38D,
+       0x38E,
+       0x3A2,
+       0x3A3,
+       0x3D2,
+       0x3D5,
+       0x3F6,
+       0x3F7,
+       0x3FC,
+       0x3FD,
+       0x482,
+       0x48A,
+       0x530,
+       0x531,
+       0x557,
+       0x561,
+       0x588,
+       0x10A0,
+       0x10C6,
+       0x10C7,
+       0x10C8,
+       0x10CD,
+       0x10CE,
+       0x13A0,
+       0x13F6,
+       0x13F8,
+       0x13FE,
+       0x1D79,
+       0x1D7A,
+       0x1D7D,
+       0x1D7E,
+       0x1E00,
+       0x1E9C,
+       0x1E9E,
+       0x1E9F,
+       0x1EA0,
+       0x1F16,
+       0x1F18,
+       0x1F1E,
+       0x1F20,
+       0x1F46,
+       0x1F48,
+       0x1F4E,
+       0x1F50,
+       0x1F58,
+       0x1F59,
+       0x1F5A,
+       0x1F5B,
+       0x1F5C,
+       0x1F5D,
+       0x1F5E,
+       0x1F5F,
+       0x1F7E,
+       0x1F80,
+       0x1FB5,
+       0x1FB6,
+       0x1FBD,
+       0x1FBE,
+       0x1FBF,
+       0x1FC2,
+       0x1FC5,
+       0x1FC6,
+       0x1FCD,
+       0x1FD0,
+       0x1FD4,
+       0x1FD6,
+       0x1FDC,
+       0x1FE0,
+       0x1FED,
+       0x1FF2,
+       0x1FF5,
+       0x1FF6,
+       0x1FFD,
+       0x2126,
+       0x2127,
+       0x212A,
+       0x212C,
+       0x2132,
+       0x2133,
+       0x214E,
+       0x214F,
+       0x2160,
+       0x2180,
+       0x2183,
+       0x2185,
+       0x24B6,
+       0x24EA,
+       0x2C00,
+       0x2C2F,
+       0x2C30,
+       0x2C5F,
+       0x2C60,
+       0x2C71,
+       0x2C72,
+       0x2C74,
+       0x2C75,
+       0x2C77,
+       0x2C7E,
+       0x2CE4,
+       0x2CEB,
+       0x2CEF,
+       0x2CF2,
+       0x2CF4,
+       0x2D00,
+       0x2D26,
+       0x2D27,
+       0x2D28,
+       0x2D2D,
+       0x2D2E,
+       0xA640,
+       0xA66E,
+       0xA680,
+       0xA69C,
+       0xA722,
+       0xA730,
+       0xA732,
+       0xA770,
+       0xA779,
+       0xA788,
+       0xA78B,
+       0xA78E,
+       0xA790,
+       0xA794,
+       0xA796,
+       0xA7AE,
+       0xA7B0,
+       0xA7B8,
+       0xAB53,
+       0xAB54,
+       0xAB70,
+       0xABC0,
+       0xFB00,
+       0xFB07,
+       0xFB13,
+       0xFB18,
+       0xFF21,
+       0xFF3B,
+       0xFF41,
+       0xFF5B,
+       0x10400,
+       0x10450,
+       0x10C80,
+       0x10CB3,
+       0x10CC0,
+       0x10CF3,
+       0x118A0,
+       0x118E0
+};
+
+static const UV _Perl_Folds_To_Multi_Char_invlist[] = { /* for EBCDIC 1047 */
+       59,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x59,
+       0x5A,
+       0x130,
+       0x131,
+       0x149,
+       0x14A,
+       0x1F0,
+       0x1F1,
+       0x390,
+       0x391,
+       0x3B0,
+       0x3B1,
+       0x587,
+       0x588,
+       0x1E96,
+       0x1E9B,
+       0x1E9E,
+       0x1E9F,
+       0x1F50,
+       0x1F51,
+       0x1F52,
+       0x1F53,
+       0x1F54,
+       0x1F55,
+       0x1F56,
+       0x1F57,
+       0x1F80,
+       0x1FB0,
+       0x1FB2,
+       0x1FB5,
+       0x1FB6,
+       0x1FB8,
+       0x1FBC,
+       0x1FBD,
+       0x1FC2,
+       0x1FC5,
+       0x1FC6,
+       0x1FC8,
+       0x1FCC,
+       0x1FCD,
+       0x1FD2,
+       0x1FD4,
+       0x1FD6,
+       0x1FD8,
+       0x1FE2,
+       0x1FE5,
+       0x1FE6,
+       0x1FE8,
+       0x1FF2,
+       0x1FF5,
+       0x1FF6,
+       0x1FF8,
+       0x1FFC,
+       0x1FFD,
+       0xFB00,
+       0xFB07,
+       0xFB13,
+       0xFB18
+};
+
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
+#if defined(PERL_IN_PERL_C)
+
+static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
        1502,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -26479,7 +26895,7 @@ typedef enum {
        GCB_V = 13
 } GCB_enum;
 
-static const GCB_enum Grapheme_Cluster_Break_invmap[] = { /* for EBCDIC 1047 */
+static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
        GCB_Control,
        GCB_CR,
        GCB_Control,
@@ -27986,414 +28402,6 @@ static const GCB_enum Grapheme_Cluster_Break_invmap[] = { /* for EBCDIC 1047 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
-#if defined(PERL_IN_REGCOMP_C)
-
-static const UV NonL1_Perl_Non_Final_Folds_invlist[] = { /* for EBCDIC 1047 */
-       45,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x2BC,
-       0x2BD,
-       0x308,
-       0x309,
-       0x313,
-       0x314,
-       0x342,
-       0x343,
-       0x3AC,
-       0x3AD,
-       0x3AE,
-       0x3AF,
-       0x3B1,
-       0x3B2,
-       0x3B7,
-       0x3B8,
-       0x3B9,
-       0x3BA,
-       0x3C1,
-       0x3C2,
-       0x3C5,
-       0x3C6,
-       0x3C9,
-       0x3CA,
-       0x3CE,
-       0x3CF,
-       0x565,
-       0x566,
-       0x574,
-       0x575,
-       0x57E,
-       0x57F,
-       0x1F00,
-       0x1F08,
-       0x1F20,
-       0x1F28,
-       0x1F60,
-       0x1F68,
-       0x1F70,
-       0x1F71,
-       0x1F74,
-       0x1F75,
-       0x1F7C,
-       0x1F7D
-};
-
-static const UV _Perl_Any_Folds_invlist[] = { /* for EBCDIC 1047 */
-       279,    /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x42,
-       0x4A,
-       0x51,
-       0x5A,
-       0x62,
-       0x6A,
-       0x70,
-       0x79,
-       0x80,
-       0x8A,
-       0x8C,
-       0x8F,
-       0x91,
-       0x9A,
-       0x9C,
-       0x9D,
-       0x9E,
-       0x9F,
-       0xA0,
-       0xA1,
-       0xA2,
-       0xAA,
-       0xAC,
-       0xAD,
-       0xAE,
-       0xAF,
-       0xBA,
-       0xBB,
-       0xC1,
-       0xCA,
-       0xCB,
-       0xD0,
-       0xD1,
-       0xDA,
-       0xDB,
-       0xE0,
-       0xE2,
-       0xEA,
-       0xEB,
-       0xF0,
-       0xFB,
-       0xFF,
-       0x100,
-       0x131,
-       0x132,
-       0x138,
-       0x139,
-       0x18D,
-       0x18E,
-       0x19B,
-       0x19C,
-       0x1AA,
-       0x1AC,
-       0x1BA,
-       0x1BC,
-       0x1BE,
-       0x1BF,
-       0x1C0,
-       0x1C4,
-       0x221,
-       0x222,
-       0x234,
-       0x23A,
-       0x255,
-       0x256,
-       0x258,
-       0x259,
-       0x25A,
-       0x25B,
-       0x25D,
-       0x260,
-       0x262,
-       0x263,
-       0x264,
-       0x265,
-       0x267,
-       0x268,
-       0x26A,
-       0x26B,
-       0x26D,
-       0x26F,
-       0x270,
-       0x271,
-       0x273,
-       0x275,
-       0x276,
-       0x27D,
-       0x27E,
-       0x280,
-       0x281,
-       0x283,
-       0x284,
-       0x287,
-       0x28D,
-       0x292,
-       0x293,
-       0x29D,
-       0x29F,
-       0x2BC,
-       0x2BD,
-       0x2BE,
-       0x2BF,
-       0x300,
-       0x302,
-       0x307,
-       0x309,
-       0x30A,
-       0x30B,
-       0x30C,
-       0x30D,
-       0x313,
-       0x314,
-       0x331,
-       0x332,
-       0x342,
-       0x343,
-       0x345,
-       0x346,
-       0x370,
-       0x374,
-       0x376,
-       0x378,
-       0x37B,
-       0x37E,
-       0x37F,
-       0x380,
-       0x386,
-       0x387,
-       0x388,
-       0x38B,
-       0x38C,
-       0x38D,
-       0x38E,
-       0x3A2,
-       0x3A3,
-       0x3D2,
-       0x3D5,
-       0x3F6,
-       0x3F7,
-       0x3FC,
-       0x3FD,
-       0x482,
-       0x48A,
-       0x530,
-       0x531,
-       0x557,
-       0x561,
-       0x588,
-       0x10A0,
-       0x10C6,
-       0x10C7,
-       0x10C8,
-       0x10CD,
-       0x10CE,
-       0x13A0,
-       0x13F6,
-       0x13F8,
-       0x13FE,
-       0x1D79,
-       0x1D7A,
-       0x1D7D,
-       0x1D7E,
-       0x1E00,
-       0x1E9C,
-       0x1E9E,
-       0x1E9F,
-       0x1EA0,
-       0x1F16,
-       0x1F18,
-       0x1F1E,
-       0x1F20,
-       0x1F46,
-       0x1F48,
-       0x1F4E,
-       0x1F50,
-       0x1F58,
-       0x1F59,
-       0x1F5A,
-       0x1F5B,
-       0x1F5C,
-       0x1F5D,
-       0x1F5E,
-       0x1F5F,
-       0x1F7E,
-       0x1F80,
-       0x1FB5,
-       0x1FB6,
-       0x1FBD,
-       0x1FBE,
-       0x1FBF,
-       0x1FC2,
-       0x1FC5,
-       0x1FC6,
-       0x1FCD,
-       0x1FD0,
-       0x1FD4,
-       0x1FD6,
-       0x1FDC,
-       0x1FE0,
-       0x1FED,
-       0x1FF2,
-       0x1FF5,
-       0x1FF6,
-       0x1FFD,
-       0x2126,
-       0x2127,
-       0x212A,
-       0x212C,
-       0x2132,
-       0x2133,
-       0x214E,
-       0x214F,
-       0x2160,
-       0x2180,
-       0x2183,
-       0x2185,
-       0x24B6,
-       0x24EA,
-       0x2C00,
-       0x2C2F,
-       0x2C30,
-       0x2C5F,
-       0x2C60,
-       0x2C71,
-       0x2C72,
-       0x2C74,
-       0x2C75,
-       0x2C77,
-       0x2C7E,
-       0x2CE4,
-       0x2CEB,
-       0x2CEF,
-       0x2CF2,
-       0x2CF4,
-       0x2D00,
-       0x2D26,
-       0x2D27,
-       0x2D28,
-       0x2D2D,
-       0x2D2E,
-       0xA640,
-       0xA66E,
-       0xA680,
-       0xA69C,
-       0xA722,
-       0xA730,
-       0xA732,
-       0xA770,
-       0xA779,
-       0xA788,
-       0xA78B,
-       0xA78E,
-       0xA790,
-       0xA794,
-       0xA796,
-       0xA7AE,
-       0xA7B0,
-       0xA7B8,
-       0xAB53,
-       0xAB54,
-       0xAB70,
-       0xABC0,
-       0xFB00,
-       0xFB07,
-       0xFB13,
-       0xFB18,
-       0xFF21,
-       0xFF3B,
-       0xFF41,
-       0xFF5B,
-       0x10400,
-       0x10450,
-       0x10C80,
-       0x10CB3,
-       0x10CC0,
-       0x10CF3,
-       0x118A0,
-       0x118E0
-};
-
-static const UV _Perl_Folds_To_Multi_Char_invlist[] = { /* for EBCDIC 1047 */
-       59,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x59,
-       0x5A,
-       0x130,
-       0x131,
-       0x149,
-       0x14A,
-       0x1F0,
-       0x1F1,
-       0x390,
-       0x391,
-       0x3B0,
-       0x3B1,
-       0x587,
-       0x588,
-       0x1E96,
-       0x1E9B,
-       0x1E9E,
-       0x1E9F,
-       0x1F50,
-       0x1F51,
-       0x1F52,
-       0x1F53,
-       0x1F54,
-       0x1F55,
-       0x1F56,
-       0x1F57,
-       0x1F80,
-       0x1FB0,
-       0x1FB2,
-       0x1FB5,
-       0x1FB6,
-       0x1FB8,
-       0x1FBC,
-       0x1FBD,
-       0x1FC2,
-       0x1FC5,
-       0x1FC6,
-       0x1FC8,
-       0x1FCC,
-       0x1FCD,
-       0x1FD2,
-       0x1FD4,
-       0x1FD6,
-       0x1FD8,
-       0x1FE2,
-       0x1FE5,
-       0x1FE6,
-       0x1FE8,
-       0x1FF2,
-       0x1FF5,
-       0x1FF6,
-       0x1FF8,
-       0x1FFC,
-       0x1FFD,
-       0xFB00,
-       0xFB07,
-       0xFB13,
-       0xFB18
-};
-
-#endif /* defined(PERL_IN_REGCOMP_C) */
-
 #if defined(PERL_IN_UTF8_C)
 
 static const UV _Perl_IDCont_invlist[] = { /* for EBCDIC 1047 */
@@ -30910,7 +30918,7 @@ static const UV _Perl_IDStart_invlist[] = { /* for EBCDIC 1047 */
 
 #if defined(PERL_IN_PERL_C)
 
-static const UV Sentence_Break_invlist[] = { /* for EBCDIC 1047 */
+static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
        2920,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -33862,7 +33870,7 @@ typedef enum {
        SB_Upper = 15
 } SB_enum;
 
-static const SB_enum Sentence_Break_invmap[] = { /* for EBCDIC 1047 */
+static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
        SB_Other,
        SB_Sp,
        SB_Other,
@@ -36787,91 +36795,9 @@ static const SB_enum Sentence_Break_invmap[] = { /* for EBCDIC 1047 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
-#if defined(PERL_IN_REGCOMP_C)
-
-static const UV UpperLatin1_invlist[] = { /* for EBCDIC 1047 */
-       55,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x4,
-       0x5,
-       0x6,
-       0x7,
-       0x8,
-       0xB,
-       0x14,
-       0x15,
-       0x17,
-       0x18,
-       0x1A,
-       0x1C,
-       0x20,
-       0x26,
-       0x28,
-       0x2D,
-       0x30,
-       0x32,
-       0x33,
-       0x37,
-       0x38,
-       0x3C,
-       0x3E,
-       0x3F,
-       0x41,
-       0x4B,
-       0x51,
-       0x5A,
-       0x62,
-       0x6B,
-       0x70,
-       0x79,
-       0x80,
-       0x81,
-       0x8A,
-       0x91,
-       0x9A,
-       0xA1,
-       0xAA,
-       0xAD,
-       0xAE,
-       0xBD,
-       0xBE,
-       0xC0,
-       0xCA,
-       0xD0,
-       0xDA,
-       0xE0,
-       0xE1,
-       0xE2,
-       0xEA,
-       0xF0,
-       0xFA,
-       0x100
-};
-
-#endif /* defined(PERL_IN_REGCOMP_C) */
-
 #if defined(PERL_IN_PERL_C)
 
-static const UV VertSpace_invlist[] = { /* for EBCDIC 1047 */
-       9,      /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0xB,
-       0xE,
-       0x15,
-       0x16,
-       0x25,
-       0x26,
-       0x2028,
-       0x202A
-};
-
-static const UV Word_Break_invlist[] = { /* for EBCDIC 1047 */
+static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
        1549,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -38455,7 +38381,7 @@ typedef enum {
        WB_UNKNOWN = 18
 } WB_enum;
 
-static const WB_enum Word_Break_invmap[] = { /* for EBCDIC 1047 */
+static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
        WB_Other,
        WB_Newline,
        WB_CR,
@@ -40009,8 +39935,90 @@ static const WB_enum Word_Break_invmap[] = { /* for EBCDIC 1047 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
+#if defined(PERL_IN_REGCOMP_C)
+
+static const UV UpperLatin1_invlist[] = { /* for EBCDIC 1047 */
+       55,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x4,
+       0x5,
+       0x6,
+       0x7,
+       0x8,
+       0xB,
+       0x14,
+       0x15,
+       0x17,
+       0x18,
+       0x1A,
+       0x1C,
+       0x20,
+       0x26,
+       0x28,
+       0x2D,
+       0x30,
+       0x32,
+       0x33,
+       0x37,
+       0x38,
+       0x3C,
+       0x3E,
+       0x3F,
+       0x41,
+       0x4B,
+       0x51,
+       0x5A,
+       0x62,
+       0x6B,
+       0x70,
+       0x79,
+       0x80,
+       0x81,
+       0x8A,
+       0x91,
+       0x9A,
+       0xA1,
+       0xAA,
+       0xAD,
+       0xAE,
+       0xBD,
+       0xBE,
+       0xC0,
+       0xCA,
+       0xD0,
+       0xDA,
+       0xE0,
+       0xE1,
+       0xE2,
+       0xEA,
+       0xF0,
+       0xFA,
+       0x100
+};
+
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
 #if defined(PERL_IN_PERL_C)
 
+static const UV VertSpace_invlist[] = { /* for EBCDIC 1047 */
+       9,      /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0xB,
+       0xE,
+       0x15,
+       0x16,
+       0x25,
+       0x26,
+       0x2028,
+       0x202A
+};
+
 static const UV XPerlSpace_invlist[] = { /* for EBCDIC 1047 */
        23,     /* Number of elements */
        148565664, /* Version and data structure type */
@@ -49924,174 +49932,582 @@ static const UV Cased_invlist[] = { /* for EBCDIC 037 */
        0x1F18A
 };
 
-static const UV Grapheme_Cluster_Break_invlist[] = { /* for EBCDIC 037 */
-       1502,   /* Number of elements */
+#endif /* defined(PERL_IN_PERL_C) */
+
+#if defined(PERL_IN_REGCOMP_C)
+
+static const UV NonL1_Perl_Non_Final_Folds_invlist[] = { /* for EBCDIC 037 */
+       45,     /* Number of elements */
        148565664, /* Version and data structure type */
-       0,      /* 0 if the list starts at 0;
+       1,      /* 0 if the list starts at 0;
                   1 if it starts at the element beyond 0 */
        0x0,
-       0xD,
-       0xE,
-       0x25,
-       0x26,
-       0x40,
+       0x2BC,
+       0x2BD,
+       0x308,
+       0x309,
+       0x313,
+       0x314,
+       0x342,
+       0x343,
+       0x3AC,
+       0x3AD,
+       0x3AE,
+       0x3AF,
+       0x3B1,
+       0x3B2,
+       0x3B7,
+       0x3B8,
+       0x3B9,
+       0x3BA,
+       0x3C1,
+       0x3C2,
+       0x3C5,
+       0x3C6,
+       0x3C9,
+       0x3CA,
+       0x3CE,
+       0x3CF,
+       0x565,
+       0x566,
+       0x574,
+       0x575,
+       0x57E,
+       0x57F,
+       0x1F00,
+       0x1F08,
+       0x1F20,
+       0x1F28,
+       0x1F60,
+       0x1F68,
+       0x1F70,
+       0x1F71,
+       0x1F74,
+       0x1F75,
+       0x1F7C,
+       0x1F7D
+};
+
+static const UV _Perl_Any_Folds_invlist[] = { /* for EBCDIC 037 */
+       275,    /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x42,
+       0x4A,
+       0x51,
+       0x5A,
+       0x62,
+       0x6A,
+       0x70,
+       0x79,
+       0x80,
+       0x8A,
+       0x8C,
+       0x8F,
+       0x91,
+       0x9A,
+       0x9C,
+       0x9D,
+       0x9E,
+       0x9F,
+       0xA0,
+       0xA1,
+       0xA2,
+       0xAA,
+       0xAC,
+       0xAF,
+       0xC1,
        0xCA,
        0xCB,
+       0xD0,
+       0xD1,
+       0xDA,
+       0xDB,
+       0xE0,
+       0xE2,
+       0xEA,
+       0xEB,
+       0xF0,
+       0xFB,
        0xFF,
        0x100,
+       0x131,
+       0x132,
+       0x138,
+       0x139,
+       0x18D,
+       0x18E,
+       0x19B,
+       0x19C,
+       0x1AA,
+       0x1AC,
+       0x1BA,
+       0x1BC,
+       0x1BE,
+       0x1BF,
+       0x1C0,
+       0x1C4,
+       0x221,
+       0x222,
+       0x234,
+       0x23A,
+       0x255,
+       0x256,
+       0x258,
+       0x259,
+       0x25A,
+       0x25B,
+       0x25D,
+       0x260,
+       0x262,
+       0x263,
+       0x264,
+       0x265,
+       0x267,
+       0x268,
+       0x26A,
+       0x26B,
+       0x26D,
+       0x26F,
+       0x270,
+       0x271,
+       0x273,
+       0x275,
+       0x276,
+       0x27D,
+       0x27E,
+       0x280,
+       0x281,
+       0x283,
+       0x284,
+       0x287,
+       0x28D,
+       0x292,
+       0x293,
+       0x29D,
+       0x29F,
+       0x2BC,
+       0x2BD,
+       0x2BE,
+       0x2BF,
        0x300,
+       0x302,
+       0x307,
+       0x309,
+       0x30A,
+       0x30B,
+       0x30C,
+       0x30D,
+       0x313,
+       0x314,
+       0x331,
+       0x332,
+       0x342,
+       0x343,
+       0x345,
+       0x346,
        0x370,
-       0x483,
+       0x374,
+       0x376,
+       0x378,
+       0x37B,
+       0x37E,
+       0x37F,
+       0x380,
+       0x386,
+       0x387,
+       0x388,
+       0x38B,
+       0x38C,
+       0x38D,
+       0x38E,
+       0x3A2,
+       0x3A3,
+       0x3D2,
+       0x3D5,
+       0x3F6,
+       0x3F7,
+       0x3FC,
+       0x3FD,
+       0x482,
        0x48A,
-       0x591,
-       0x5BE,
-       0x5BF,
-       0x5C0,
-       0x5C1,
-       0x5C3,
-       0x5C4,
-       0x5C6,
-       0x5C7,
-       0x5C8,
-       0x600,
-       0x606,
-       0x610,
-       0x61B,
-       0x61C,
-       0x61D,
-       0x64B,
-       0x660,
-       0x670,
-       0x671,
-       0x6D6,
-       0x6DD,
-       0x6DE,
-       0x6DF,
-       0x6E5,
-       0x6E7,
-       0x6E9,
-       0x6EA,
-       0x6EE,
-       0x70F,
-       0x710,
-       0x711,
-       0x712,
-       0x730,
-       0x74B,
-       0x7A6,
-       0x7B1,
-       0x7EB,
-       0x7F4,
-       0x816,
-       0x81A,
-       0x81B,
-       0x824,
-       0x825,
-       0x828,
-       0x829,
-       0x82E,
-       0x859,
-       0x85C,
-       0x8E3,
-       0x903,
-       0x904,
-       0x93A,
-       0x93B,
-       0x93C,
-       0x93D,
-       0x93E,
-       0x941,
-       0x949,
-       0x94D,
-       0x94E,
-       0x950,
-       0x951,
-       0x958,
-       0x962,
-       0x964,
-       0x981,
-       0x982,
-       0x984,
-       0x9BC,
-       0x9BD,
-       0x9BE,
-       0x9BF,
-       0x9C1,
-       0x9C5,
-       0x9C7,
-       0x9C9,
-       0x9CB,
-       0x9CD,
-       0x9CE,
-       0x9D7,
-       0x9D8,
-       0x9E2,
-       0x9E4,
-       0xA01,
-       0xA03,
-       0xA04,
-       0xA3C,
-       0xA3D,
-       0xA3E,
-       0xA41,
-       0xA43,
-       0xA47,
-       0xA49,
-       0xA4B,
-       0xA4E,
-       0xA51,
-       0xA52,
-       0xA70,
-       0xA72,
-       0xA75,
-       0xA76,
-       0xA81,
-       0xA83,
-       0xA84,
-       0xABC,
-       0xABD,
-       0xABE,
-       0xAC1,
-       0xAC6,
-       0xAC7,
-       0xAC9,
-       0xACA,
-       0xACB,
-       0xACD,
-       0xACE,
-       0xAE2,
-       0xAE4,
-       0xB01,
-       0xB02,
-       0xB04,
-       0xB3C,
-       0xB3D,
-       0xB3E,
-       0xB40,
-       0xB41,
-       0xB45,
-       0xB47,
-       0xB49,
-       0xB4B,
-       0xB4D,
-       0xB4E,
-       0xB56,
-       0xB58,
-       0xB62,
-       0xB64,
-       0xB82,
-       0xB83,
-       0xBBE,
-       0xBBF,
-       0xBC0,
-       0xBC1,
-       0xBC3,
-       0xBC6,
-       0xBC9,
-       0xBCA,
-       0xBCD,
-       0xBCE,
-       0xBD7,
+       0x530,
+       0x531,
+       0x557,
+       0x561,
+       0x588,
+       0x10A0,
+       0x10C6,
+       0x10C7,
+       0x10C8,
+       0x10CD,
+       0x10CE,
+       0x13A0,
+       0x13F6,
+       0x13F8,
+       0x13FE,
+       0x1D79,
+       0x1D7A,
+       0x1D7D,
+       0x1D7E,
+       0x1E00,
+       0x1E9C,
+       0x1E9E,
+       0x1E9F,
+       0x1EA0,
+       0x1F16,
+       0x1F18,
+       0x1F1E,
+       0x1F20,
+       0x1F46,
+       0x1F48,
+       0x1F4E,
+       0x1F50,
+       0x1F58,
+       0x1F59,
+       0x1F5A,
+       0x1F5B,
+       0x1F5C,
+       0x1F5D,
+       0x1F5E,
+       0x1F5F,
+       0x1F7E,
+       0x1F80,
+       0x1FB5,
+       0x1FB6,
+       0x1FBD,
+       0x1FBE,
+       0x1FBF,
+       0x1FC2,
+       0x1FC5,
+       0x1FC6,
+       0x1FCD,
+       0x1FD0,
+       0x1FD4,
+       0x1FD6,
+       0x1FDC,
+       0x1FE0,
+       0x1FED,
+       0x1FF2,
+       0x1FF5,
+       0x1FF6,
+       0x1FFD,
+       0x2126,
+       0x2127,
+       0x212A,
+       0x212C,
+       0x2132,
+       0x2133,
+       0x214E,
+       0x214F,
+       0x2160,
+       0x2180,
+       0x2183,
+       0x2185,
+       0x24B6,
+       0x24EA,
+       0x2C00,
+       0x2C2F,
+       0x2C30,
+       0x2C5F,
+       0x2C60,
+       0x2C71,
+       0x2C72,
+       0x2C74,
+       0x2C75,
+       0x2C77,
+       0x2C7E,
+       0x2CE4,
+       0x2CEB,
+       0x2CEF,
+       0x2CF2,
+       0x2CF4,
+       0x2D00,
+       0x2D26,
+       0x2D27,
+       0x2D28,
+       0x2D2D,
+       0x2D2E,
+       0xA640,
+       0xA66E,
+       0xA680,
+       0xA69C,
+       0xA722,
+       0xA730,
+       0xA732,
+       0xA770,
+       0xA779,
+       0xA788,
+       0xA78B,
+       0xA78E,
+       0xA790,
+       0xA794,
+       0xA796,
+       0xA7AE,
+       0xA7B0,
+       0xA7B8,
+       0xAB53,
+       0xAB54,
+       0xAB70,
+       0xABC0,
+       0xFB00,
+       0xFB07,
+       0xFB13,
+       0xFB18,
+       0xFF21,
+       0xFF3B,
+       0xFF41,
+       0xFF5B,
+       0x10400,
+       0x10450,
+       0x10C80,
+       0x10CB3,
+       0x10CC0,
+       0x10CF3,
+       0x118A0,
+       0x118E0
+};
+
+static const UV _Perl_Folds_To_Multi_Char_invlist[] = { /* for EBCDIC 037 */
+       59,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x59,
+       0x5A,
+       0x130,
+       0x131,
+       0x149,
+       0x14A,
+       0x1F0,
+       0x1F1,
+       0x390,
+       0x391,
+       0x3B0,
+       0x3B1,
+       0x587,
+       0x588,
+       0x1E96,
+       0x1E9B,
+       0x1E9E,
+       0x1E9F,
+       0x1F50,
+       0x1F51,
+       0x1F52,
+       0x1F53,
+       0x1F54,
+       0x1F55,
+       0x1F56,
+       0x1F57,
+       0x1F80,
+       0x1FB0,
+       0x1FB2,
+       0x1FB5,
+       0x1FB6,
+       0x1FB8,
+       0x1FBC,
+       0x1FBD,
+       0x1FC2,
+       0x1FC5,
+       0x1FC6,
+       0x1FC8,
+       0x1FCC,
+       0x1FCD,
+       0x1FD2,
+       0x1FD4,
+       0x1FD6,
+       0x1FD8,
+       0x1FE2,
+       0x1FE5,
+       0x1FE6,
+       0x1FE8,
+       0x1FF2,
+       0x1FF5,
+       0x1FF6,
+       0x1FF8,
+       0x1FFC,
+       0x1FFD,
+       0xFB00,
+       0xFB07,
+       0xFB13,
+       0xFB18
+};
+
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
+#if defined(PERL_IN_PERL_C)
+
+static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
+       1502,   /* Number of elements */
+       148565664, /* Version and data structure type */
+       0,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0xD,
+       0xE,
+       0x25,
+       0x26,
+       0x40,
+       0xCA,
+       0xCB,
+       0xFF,
+       0x100,
+       0x300,
+       0x370,
+       0x483,
+       0x48A,
+       0x591,
+       0x5BE,
+       0x5BF,
+       0x5C0,
+       0x5C1,
+       0x5C3,
+       0x5C4,
+       0x5C6,
+       0x5C7,
+       0x5C8,
+       0x600,
+       0x606,
+       0x610,
+       0x61B,
+       0x61C,
+       0x61D,
+       0x64B,
+       0x660,
+       0x670,
+       0x671,
+       0x6D6,
+       0x6DD,
+       0x6DE,
+       0x6DF,
+       0x6E5,
+       0x6E7,
+       0x6E9,
+       0x6EA,
+       0x6EE,
+       0x70F,
+       0x710,
+       0x711,
+       0x712,
+       0x730,
+       0x74B,
+       0x7A6,
+       0x7B1,
+       0x7EB,
+       0x7F4,
+       0x816,
+       0x81A,
+       0x81B,
+       0x824,
+       0x825,
+       0x828,
+       0x829,
+       0x82E,
+       0x859,
+       0x85C,
+       0x8E3,
+       0x903,
+       0x904,
+       0x93A,
+       0x93B,
+       0x93C,
+       0x93D,
+       0x93E,
+       0x941,
+       0x949,
+       0x94D,
+       0x94E,
+       0x950,
+       0x951,
+       0x958,
+       0x962,
+       0x964,
+       0x981,
+       0x982,
+       0x984,
+       0x9BC,
+       0x9BD,
+       0x9BE,
+       0x9BF,
+       0x9C1,
+       0x9C5,
+       0x9C7,
+       0x9C9,
+       0x9CB,
+       0x9CD,
+       0x9CE,
+       0x9D7,
+       0x9D8,
+       0x9E2,
+       0x9E4,
+       0xA01,
+       0xA03,
+       0xA04,
+       0xA3C,
+       0xA3D,
+       0xA3E,
+       0xA41,
+       0xA43,
+       0xA47,
+       0xA49,
+       0xA4B,
+       0xA4E,
+       0xA51,
+       0xA52,
+       0xA70,
+       0xA72,
+       0xA75,
+       0xA76,
+       0xA81,
+       0xA83,
+       0xA84,
+       0xABC,
+       0xABD,
+       0xABE,
+       0xAC1,
+       0xAC6,
+       0xAC7,
+       0xAC9,
+       0xACA,
+       0xACB,
+       0xACD,
+       0xACE,
+       0xAE2,
+       0xAE4,
+       0xB01,
+       0xB02,
+       0xB04,
+       0xB3C,
+       0xB3D,
+       0xB3E,
+       0xB40,
+       0xB41,
+       0xB45,
+       0xB47,
+       0xB49,
+       0xB4B,
+       0xB4D,
+       0xB4E,
+       0xB56,
+       0xB58,
+       0xB62,
+       0xB64,
+       0xB82,
+       0xB83,
+       0xBBE,
+       0xBBF,
+       0xBC0,
+       0xBC1,
+       0xBC3,
+       0xBC6,
+       0xBC9,
+       0xBCA,
+       0xBCD,
+       0xBCE,
+       0xBD7,
        0xBD8,
        0xC00,
        0xC01,
@@ -51456,7 +51872,7 @@ typedef enum {
        GCB_V = 13
 } GCB_enum;
 
-static const GCB_enum Grapheme_Cluster_Break_invmap[] = { /* for EBCDIC 037 */
+static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
        GCB_Control,
        GCB_CR,
        GCB_Control,
@@ -52963,410 +53379,6 @@ static const GCB_enum Grapheme_Cluster_Break_invmap[] = { /* for EBCDIC 037 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
-#if defined(PERL_IN_REGCOMP_C)
-
-static const UV NonL1_Perl_Non_Final_Folds_invlist[] = { /* for EBCDIC 037 */
-       45,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x2BC,
-       0x2BD,
-       0x308,
-       0x309,
-       0x313,
-       0x314,
-       0x342,
-       0x343,
-       0x3AC,
-       0x3AD,
-       0x3AE,
-       0x3AF,
-       0x3B1,
-       0x3B2,
-       0x3B7,
-       0x3B8,
-       0x3B9,
-       0x3BA,
-       0x3C1,
-       0x3C2,
-       0x3C5,
-       0x3C6,
-       0x3C9,
-       0x3CA,
-       0x3CE,
-       0x3CF,
-       0x565,
-       0x566,
-       0x574,
-       0x575,
-       0x57E,
-       0x57F,
-       0x1F00,
-       0x1F08,
-       0x1F20,
-       0x1F28,
-       0x1F60,
-       0x1F68,
-       0x1F70,
-       0x1F71,
-       0x1F74,
-       0x1F75,
-       0x1F7C,
-       0x1F7D
-};
-
-static const UV _Perl_Any_Folds_invlist[] = { /* for EBCDIC 037 */
-       275,    /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x42,
-       0x4A,
-       0x51,
-       0x5A,
-       0x62,
-       0x6A,
-       0x70,
-       0x79,
-       0x80,
-       0x8A,
-       0x8C,
-       0x8F,
-       0x91,
-       0x9A,
-       0x9C,
-       0x9D,
-       0x9E,
-       0x9F,
-       0xA0,
-       0xA1,
-       0xA2,
-       0xAA,
-       0xAC,
-       0xAF,
-       0xC1,
-       0xCA,
-       0xCB,
-       0xD0,
-       0xD1,
-       0xDA,
-       0xDB,
-       0xE0,
-       0xE2,
-       0xEA,
-       0xEB,
-       0xF0,
-       0xFB,
-       0xFF,
-       0x100,
-       0x131,
-       0x132,
-       0x138,
-       0x139,
-       0x18D,
-       0x18E,
-       0x19B,
-       0x19C,
-       0x1AA,
-       0x1AC,
-       0x1BA,
-       0x1BC,
-       0x1BE,
-       0x1BF,
-       0x1C0,
-       0x1C4,
-       0x221,
-       0x222,
-       0x234,
-       0x23A,
-       0x255,
-       0x256,
-       0x258,
-       0x259,
-       0x25A,
-       0x25B,
-       0x25D,
-       0x260,
-       0x262,
-       0x263,
-       0x264,
-       0x265,
-       0x267,
-       0x268,
-       0x26A,
-       0x26B,
-       0x26D,
-       0x26F,
-       0x270,
-       0x271,
-       0x273,
-       0x275,
-       0x276,
-       0x27D,
-       0x27E,
-       0x280,
-       0x281,
-       0x283,
-       0x284,
-       0x287,
-       0x28D,
-       0x292,
-       0x293,
-       0x29D,
-       0x29F,
-       0x2BC,
-       0x2BD,
-       0x2BE,
-       0x2BF,
-       0x300,
-       0x302,
-       0x307,
-       0x309,
-       0x30A,
-       0x30B,
-       0x30C,
-       0x30D,
-       0x313,
-       0x314,
-       0x331,
-       0x332,
-       0x342,
-       0x343,
-       0x345,
-       0x346,
-       0x370,
-       0x374,
-       0x376,
-       0x378,
-       0x37B,
-       0x37E,
-       0x37F,
-       0x380,
-       0x386,
-       0x387,
-       0x388,
-       0x38B,
-       0x38C,
-       0x38D,
-       0x38E,
-       0x3A2,
-       0x3A3,
-       0x3D2,
-       0x3D5,
-       0x3F6,
-       0x3F7,
-       0x3FC,
-       0x3FD,
-       0x482,
-       0x48A,
-       0x530,
-       0x531,
-       0x557,
-       0x561,
-       0x588,
-       0x10A0,
-       0x10C6,
-       0x10C7,
-       0x10C8,
-       0x10CD,
-       0x10CE,
-       0x13A0,
-       0x13F6,
-       0x13F8,
-       0x13FE,
-       0x1D79,
-       0x1D7A,
-       0x1D7D,
-       0x1D7E,
-       0x1E00,
-       0x1E9C,
-       0x1E9E,
-       0x1E9F,
-       0x1EA0,
-       0x1F16,
-       0x1F18,
-       0x1F1E,
-       0x1F20,
-       0x1F46,
-       0x1F48,
-       0x1F4E,
-       0x1F50,
-       0x1F58,
-       0x1F59,
-       0x1F5A,
-       0x1F5B,
-       0x1F5C,
-       0x1F5D,
-       0x1F5E,
-       0x1F5F,
-       0x1F7E,
-       0x1F80,
-       0x1FB5,
-       0x1FB6,
-       0x1FBD,
-       0x1FBE,
-       0x1FBF,
-       0x1FC2,
-       0x1FC5,
-       0x1FC6,
-       0x1FCD,
-       0x1FD0,
-       0x1FD4,
-       0x1FD6,
-       0x1FDC,
-       0x1FE0,
-       0x1FED,
-       0x1FF2,
-       0x1FF5,
-       0x1FF6,
-       0x1FFD,
-       0x2126,
-       0x2127,
-       0x212A,
-       0x212C,
-       0x2132,
-       0x2133,
-       0x214E,
-       0x214F,
-       0x2160,
-       0x2180,
-       0x2183,
-       0x2185,
-       0x24B6,
-       0x24EA,
-       0x2C00,
-       0x2C2F,
-       0x2C30,
-       0x2C5F,
-       0x2C60,
-       0x2C71,
-       0x2C72,
-       0x2C74,
-       0x2C75,
-       0x2C77,
-       0x2C7E,
-       0x2CE4,
-       0x2CEB,
-       0x2CEF,
-       0x2CF2,
-       0x2CF4,
-       0x2D00,
-       0x2D26,
-       0x2D27,
-       0x2D28,
-       0x2D2D,
-       0x2D2E,
-       0xA640,
-       0xA66E,
-       0xA680,
-       0xA69C,
-       0xA722,
-       0xA730,
-       0xA732,
-       0xA770,
-       0xA779,
-       0xA788,
-       0xA78B,
-       0xA78E,
-       0xA790,
-       0xA794,
-       0xA796,
-       0xA7AE,
-       0xA7B0,
-       0xA7B8,
-       0xAB53,
-       0xAB54,
-       0xAB70,
-       0xABC0,
-       0xFB00,
-       0xFB07,
-       0xFB13,
-       0xFB18,
-       0xFF21,
-       0xFF3B,
-       0xFF41,
-       0xFF5B,
-       0x10400,
-       0x10450,
-       0x10C80,
-       0x10CB3,
-       0x10CC0,
-       0x10CF3,
-       0x118A0,
-       0x118E0
-};
-
-static const UV _Perl_Folds_To_Multi_Char_invlist[] = { /* for EBCDIC 037 */
-       59,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x59,
-       0x5A,
-       0x130,
-       0x131,
-       0x149,
-       0x14A,
-       0x1F0,
-       0x1F1,
-       0x390,
-       0x391,
-       0x3B0,
-       0x3B1,
-       0x587,
-       0x588,
-       0x1E96,
-       0x1E9B,
-       0x1E9E,
-       0x1E9F,
-       0x1F50,
-       0x1F51,
-       0x1F52,
-       0x1F53,
-       0x1F54,
-       0x1F55,
-       0x1F56,
-       0x1F57,
-       0x1F80,
-       0x1FB0,
-       0x1FB2,
-       0x1FB5,
-       0x1FB6,
-       0x1FB8,
-       0x1FBC,
-       0x1FBD,
-       0x1FC2,
-       0x1FC5,
-       0x1FC6,
-       0x1FC8,
-       0x1FCC,
-       0x1FCD,
-       0x1FD2,
-       0x1FD4,
-       0x1FD6,
-       0x1FD8,
-       0x1FE2,
-       0x1FE5,
-       0x1FE6,
-       0x1FE8,
-       0x1FF2,
-       0x1FF5,
-       0x1FF6,
-       0x1FF8,
-       0x1FFC,
-       0x1FFD,
-       0xFB00,
-       0xFB07,
-       0xFB13,
-       0xFB18
-};
-
-#endif /* defined(PERL_IN_REGCOMP_C) */
-
 #if defined(PERL_IN_UTF8_C)
 
 static const UV _Perl_IDCont_invlist[] = { /* for EBCDIC 037 */
@@ -55875,7 +55887,7 @@ static const UV _Perl_IDStart_invlist[] = { /* for EBCDIC 037 */
 
 #if defined(PERL_IN_PERL_C)
 
-static const UV Sentence_Break_invlist[] = { /* for EBCDIC 037 */
+static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
        2916,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -58823,7 +58835,7 @@ typedef enum {
        SB_Upper = 15
 } SB_enum;
 
-static const SB_enum Sentence_Break_invmap[] = { /* for EBCDIC 037 */
+static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
        SB_Other,
        SB_Sp,
        SB_Other,
@@ -61744,93 +61756,9 @@ static const SB_enum Sentence_Break_invmap[] = { /* for EBCDIC 037 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
-#if defined(PERL_IN_REGCOMP_C)
-
-static const UV UpperLatin1_invlist[] = { /* for EBCDIC 037 */
-       57,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x4,
-       0x5,
-       0x6,
-       0x7,
-       0x8,
-       0xB,
-       0x14,
-       0x16,
-       0x17,
-       0x18,
-       0x1A,
-       0x1C,
-       0x20,
-       0x25,
-       0x28,
-       0x2D,
-       0x30,
-       0x32,
-       0x33,
-       0x37,
-       0x38,
-       0x3C,
-       0x3E,
-       0x3F,
-       0x41,
-       0x4B,
-       0x51,
-       0x5A,
-       0x5F,
-       0x60,
-       0x62,
-       0x6B,
-       0x70,
-       0x79,
-       0x80,
-       0x81,
-       0x8A,
-       0x91,
-       0x9A,
-       0xA1,
-       0xAA,
-       0xB0,
-       0xB1,
-       0xBA,
-       0xBC,
-       0xC0,
-       0xCA,
-       0xD0,
-       0xDA,
-       0xE0,
-       0xE1,
-       0xE2,
-       0xEA,
-       0xF0,
-       0xFA,
-       0x100
-};
-
-#endif /* defined(PERL_IN_REGCOMP_C) */
-
 #if defined(PERL_IN_PERL_C)
 
-static const UV VertSpace_invlist[] = { /* for EBCDIC 037 */
-       9,      /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0xB,
-       0xE,
-       0x15,
-       0x16,
-       0x25,
-       0x26,
-       0x2028,
-       0x202A
-};
-
-static const UV Word_Break_invlist[] = { /* for EBCDIC 037 */
+static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
        1545,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -63410,7 +63338,7 @@ typedef enum {
        WB_UNKNOWN = 18
 } WB_enum;
 
-static const WB_enum Word_Break_invmap[] = { /* for EBCDIC 037 */
+static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
        WB_Other,
        WB_Newline,
        WB_CR,
@@ -64960,8 +64888,92 @@ static const WB_enum Word_Break_invmap[] = { /* for EBCDIC 037 */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
+#if defined(PERL_IN_REGCOMP_C)
+
+static const UV UpperLatin1_invlist[] = { /* for EBCDIC 037 */
+       57,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x4,
+       0x5,
+       0x6,
+       0x7,
+       0x8,
+       0xB,
+       0x14,
+       0x16,
+       0x17,
+       0x18,
+       0x1A,
+       0x1C,
+       0x20,
+       0x25,
+       0x28,
+       0x2D,
+       0x30,
+       0x32,
+       0x33,
+       0x37,
+       0x38,
+       0x3C,
+       0x3E,
+       0x3F,
+       0x41,
+       0x4B,
+       0x51,
+       0x5A,
+       0x5F,
+       0x60,
+       0x62,
+       0x6B,
+       0x70,
+       0x79,
+       0x80,
+       0x81,
+       0x8A,
+       0x91,
+       0x9A,
+       0xA1,
+       0xAA,
+       0xB0,
+       0xB1,
+       0xBA,
+       0xBC,
+       0xC0,
+       0xCA,
+       0xD0,
+       0xDA,
+       0xE0,
+       0xE1,
+       0xE2,
+       0xEA,
+       0xF0,
+       0xFA,
+       0x100
+};
+
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
 #if defined(PERL_IN_PERL_C)
 
+static const UV VertSpace_invlist[] = { /* for EBCDIC 037 */
+       9,      /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0xB,
+       0xE,
+       0x15,
+       0x16,
+       0x25,
+       0x26,
+       0x2028,
+       0x202A
+};
+
 static const UV XPerlSpace_invlist[] = { /* for EBCDIC 037 */
        23,     /* Number of elements */
        148565664, /* Version and data structure type */
@@ -74865,164 +74877,574 @@ static const UV Cased_invlist[] = { /* for EBCDIC POSIX-BC */
        0x1F18A
 };
 
-static const UV Grapheme_Cluster_Break_invlist[] = { /* for EBCDIC POSIX-BC */
-       1502,   /* Number of elements */
+#endif /* defined(PERL_IN_PERL_C) */
+
+#if defined(PERL_IN_REGCOMP_C)
+
+static const UV NonL1_Perl_Non_Final_Folds_invlist[] = { /* for EBCDIC POSIX-BC */
+       45,     /* Number of elements */
        148565664, /* Version and data structure type */
-       0,      /* 0 if the list starts at 0;
+       1,      /* 0 if the list starts at 0;
                   1 if it starts at the element beyond 0 */
        0x0,
-       0xD,
-       0xE,
-       0x15,
-       0x16,
-       0x40,
-       0x5F,
-       0x60,
+       0x2BC,
+       0x2BD,
+       0x308,
+       0x309,
+       0x313,
+       0x314,
+       0x342,
+       0x343,
+       0x3AC,
+       0x3AD,
+       0x3AE,
+       0x3AF,
+       0x3B1,
+       0x3B2,
+       0x3B7,
+       0x3B8,
+       0x3B9,
+       0x3BA,
+       0x3C1,
+       0x3C2,
+       0x3C5,
+       0x3C6,
+       0x3C9,
+       0x3CA,
+       0x3CE,
+       0x3CF,
+       0x565,
+       0x566,
+       0x574,
+       0x575,
+       0x57E,
+       0x57F,
+       0x1F00,
+       0x1F08,
+       0x1F20,
+       0x1F28,
+       0x1F60,
+       0x1F68,
+       0x1F70,
+       0x1F71,
+       0x1F74,
+       0x1F75,
+       0x1F7C,
+       0x1F7D
+};
+
+static const UV _Perl_Any_Folds_invlist[] = { /* for EBCDIC POSIX-BC */
+       277,    /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x42,
+       0x4A,
+       0x51,
+       0x5A,
+       0x62,
+       0x6A,
+       0x70,
+       0x79,
+       0x80,
+       0x8A,
+       0x8C,
+       0x8F,
+       0x91,
+       0x9A,
+       0x9C,
+       0x9D,
+       0x9E,
+       0x9F,
+       0xA0,
+       0xA1,
+       0xA2,
+       0xAA,
+       0xAC,
+       0xAF,
+       0xC0,
        0xCA,
        0xCB,
+       0xD0,
+       0xD1,
+       0xDA,
+       0xDB,
+       0xE1,
+       0xE2,
+       0xEA,
+       0xEB,
+       0xF0,
+       0xFC,
+       0xFD,
+       0xFE,
+       0xFF,
+       0x100,
+       0x131,
+       0x132,
+       0x138,
+       0x139,
+       0x18D,
+       0x18E,
+       0x19B,
+       0x19C,
+       0x1AA,
+       0x1AC,
+       0x1BA,
+       0x1BC,
+       0x1BE,
+       0x1BF,
+       0x1C0,
+       0x1C4,
+       0x221,
+       0x222,
+       0x234,
+       0x23A,
+       0x255,
+       0x256,
+       0x258,
+       0x259,
+       0x25A,
+       0x25B,
+       0x25D,
+       0x260,
+       0x262,
+       0x263,
+       0x264,
+       0x265,
+       0x267,
+       0x268,
+       0x26A,
+       0x26B,
+       0x26D,
+       0x26F,
+       0x270,
+       0x271,
+       0x273,
+       0x275,
+       0x276,
+       0x27D,
+       0x27E,
+       0x280,
+       0x281,
+       0x283,
+       0x284,
+       0x287,
+       0x28D,
+       0x292,
+       0x293,
+       0x29D,
+       0x29F,
+       0x2BC,
+       0x2BD,
+       0x2BE,
+       0x2BF,
        0x300,
+       0x302,
+       0x307,
+       0x309,
+       0x30A,
+       0x30B,
+       0x30C,
+       0x30D,
+       0x313,
+       0x314,
+       0x331,
+       0x332,
+       0x342,
+       0x343,
+       0x345,
+       0x346,
        0x370,
-       0x483,
+       0x374,
+       0x376,
+       0x378,
+       0x37B,
+       0x37E,
+       0x37F,
+       0x380,
+       0x386,
+       0x387,
+       0x388,
+       0x38B,
+       0x38C,
+       0x38D,
+       0x38E,
+       0x3A2,
+       0x3A3,
+       0x3D2,
+       0x3D5,
+       0x3F6,
+       0x3F7,
+       0x3FC,
+       0x3FD,
+       0x482,
        0x48A,
-       0x591,
-       0x5BE,
-       0x5BF,
-       0x5C0,
-       0x5C1,
-       0x5C3,
-       0x5C4,
-       0x5C6,
-       0x5C7,
-       0x5C8,
-       0x600,
-       0x606,
-       0x610,
-       0x61B,
-       0x61C,
-       0x61D,
-       0x64B,
-       0x660,
-       0x670,
-       0x671,
-       0x6D6,
-       0x6DD,
-       0x6DE,
-       0x6DF,
-       0x6E5,
-       0x6E7,
-       0x6E9,
-       0x6EA,
-       0x6EE,
-       0x70F,
-       0x710,
-       0x711,
-       0x712,
-       0x730,
-       0x74B,
-       0x7A6,
-       0x7B1,
-       0x7EB,
-       0x7F4,
-       0x816,
-       0x81A,
-       0x81B,
-       0x824,
-       0x825,
-       0x828,
-       0x829,
-       0x82E,
-       0x859,
-       0x85C,
-       0x8E3,
-       0x903,
-       0x904,
-       0x93A,
-       0x93B,
-       0x93C,
-       0x93D,
-       0x93E,
-       0x941,
-       0x949,
-       0x94D,
-       0x94E,
-       0x950,
-       0x951,
-       0x958,
-       0x962,
-       0x964,
-       0x981,
-       0x982,
-       0x984,
-       0x9BC,
-       0x9BD,
-       0x9BE,
-       0x9BF,
-       0x9C1,
-       0x9C5,
-       0x9C7,
-       0x9C9,
-       0x9CB,
-       0x9CD,
-       0x9CE,
-       0x9D7,
-       0x9D8,
-       0x9E2,
-       0x9E4,
-       0xA01,
-       0xA03,
-       0xA04,
-       0xA3C,
-       0xA3D,
-       0xA3E,
-       0xA41,
-       0xA43,
-       0xA47,
-       0xA49,
-       0xA4B,
-       0xA4E,
-       0xA51,
-       0xA52,
-       0xA70,
-       0xA72,
-       0xA75,
-       0xA76,
-       0xA81,
-       0xA83,
-       0xA84,
-       0xABC,
-       0xABD,
-       0xABE,
-       0xAC1,
-       0xAC6,
-       0xAC7,
-       0xAC9,
-       0xACA,
-       0xACB,
-       0xACD,
-       0xACE,
-       0xAE2,
-       0xAE4,
-       0xB01,
-       0xB02,
-       0xB04,
-       0xB3C,
-       0xB3D,
-       0xB3E,
-       0xB40,
-       0xB41,
-       0xB45,
-       0xB47,
-       0xB49,
-       0xB4B,
-       0xB4D,
-       0xB4E,
-       0xB56,
-       0xB58,
-       0xB62,
-       0xB64,
-       0xB82,
-       0xB83,
-       0xBBE,
+       0x530,
+       0x531,
+       0x557,
+       0x561,
+       0x588,
+       0x10A0,
+       0x10C6,
+       0x10C7,
+       0x10C8,
+       0x10CD,
+       0x10CE,
+       0x13A0,
+       0x13F6,
+       0x13F8,
+       0x13FE,
+       0x1D79,
+       0x1D7A,
+       0x1D7D,
+       0x1D7E,
+       0x1E00,
+       0x1E9C,
+       0x1E9E,
+       0x1E9F,
+       0x1EA0,
+       0x1F16,
+       0x1F18,
+       0x1F1E,
+       0x1F20,
+       0x1F46,
+       0x1F48,
+       0x1F4E,
+       0x1F50,
+       0x1F58,
+       0x1F59,
+       0x1F5A,
+       0x1F5B,
+       0x1F5C,
+       0x1F5D,
+       0x1F5E,
+       0x1F5F,
+       0x1F7E,
+       0x1F80,
+       0x1FB5,
+       0x1FB6,
+       0x1FBD,
+       0x1FBE,
+       0x1FBF,
+       0x1FC2,
+       0x1FC5,
+       0x1FC6,
+       0x1FCD,
+       0x1FD0,
+       0x1FD4,
+       0x1FD6,
+       0x1FDC,
+       0x1FE0,
+       0x1FED,
+       0x1FF2,
+       0x1FF5,
+       0x1FF6,
+       0x1FFD,
+       0x2126,
+       0x2127,
+       0x212A,
+       0x212C,
+       0x2132,
+       0x2133,
+       0x214E,
+       0x214F,
+       0x2160,
+       0x2180,
+       0x2183,
+       0x2185,
+       0x24B6,
+       0x24EA,
+       0x2C00,
+       0x2C2F,
+       0x2C30,
+       0x2C5F,
+       0x2C60,
+       0x2C71,
+       0x2C72,
+       0x2C74,
+       0x2C75,
+       0x2C77,
+       0x2C7E,
+       0x2CE4,
+       0x2CEB,
+       0x2CEF,
+       0x2CF2,
+       0x2CF4,
+       0x2D00,
+       0x2D26,
+       0x2D27,
+       0x2D28,
+       0x2D2D,
+       0x2D2E,
+       0xA640,
+       0xA66E,
+       0xA680,
+       0xA69C,
+       0xA722,
+       0xA730,
+       0xA732,
+       0xA770,
+       0xA779,
+       0xA788,
+       0xA78B,
+       0xA78E,
+       0xA790,
+       0xA794,
+       0xA796,
+       0xA7AE,
+       0xA7B0,
+       0xA7B8,
+       0xAB53,
+       0xAB54,
+       0xAB70,
+       0xABC0,
+       0xFB00,
+       0xFB07,
+       0xFB13,
+       0xFB18,
+       0xFF21,
+       0xFF3B,
+       0xFF41,
+       0xFF5B,
+       0x10400,
+       0x10450,
+       0x10C80,
+       0x10CB3,
+       0x10CC0,
+       0x10CF3,
+       0x118A0,
+       0x118E0
+};
+
+static const UV _Perl_Folds_To_Multi_Char_invlist[] = { /* for EBCDIC POSIX-BC */
+       59,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x59,
+       0x5A,
+       0x130,
+       0x131,
+       0x149,
+       0x14A,
+       0x1F0,
+       0x1F1,
+       0x390,
+       0x391,
+       0x3B0,
+       0x3B1,
+       0x587,
+       0x588,
+       0x1E96,
+       0x1E9B,
+       0x1E9E,
+       0x1E9F,
+       0x1F50,
+       0x1F51,
+       0x1F52,
+       0x1F53,
+       0x1F54,
+       0x1F55,
+       0x1F56,
+       0x1F57,
+       0x1F80,
+       0x1FB0,
+       0x1FB2,
+       0x1FB5,
+       0x1FB6,
+       0x1FB8,
+       0x1FBC,
+       0x1FBD,
+       0x1FC2,
+       0x1FC5,
+       0x1FC6,
+       0x1FC8,
+       0x1FCC,
+       0x1FCD,
+       0x1FD2,
+       0x1FD4,
+       0x1FD6,
+       0x1FD8,
+       0x1FE2,
+       0x1FE5,
+       0x1FE6,
+       0x1FE8,
+       0x1FF2,
+       0x1FF5,
+       0x1FF6,
+       0x1FF8,
+       0x1FFC,
+       0x1FFD,
+       0xFB00,
+       0xFB07,
+       0xFB13,
+       0xFB18
+};
+
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
+#if defined(PERL_IN_PERL_C)
+
+static const UV _Perl_GCB_invlist[] = { /* for EBCDIC POSIX-BC */
+       1502,   /* Number of elements */
+       148565664, /* Version and data structure type */
+       0,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0xD,
+       0xE,
+       0x15,
+       0x16,
+       0x40,
+       0x5F,
+       0x60,
+       0xCA,
+       0xCB,
+       0x300,
+       0x370,
+       0x483,
+       0x48A,
+       0x591,
+       0x5BE,
+       0x5BF,
+       0x5C0,
+       0x5C1,
+       0x5C3,
+       0x5C4,
+       0x5C6,
+       0x5C7,
+       0x5C8,
+       0x600,
+       0x606,
+       0x610,
+       0x61B,
+       0x61C,
+       0x61D,
+       0x64B,
+       0x660,
+       0x670,
+       0x671,
+       0x6D6,
+       0x6DD,
+       0x6DE,
+       0x6DF,
+       0x6E5,
+       0x6E7,
+       0x6E9,
+       0x6EA,
+       0x6EE,
+       0x70F,
+       0x710,
+       0x711,
+       0x712,
+       0x730,
+       0x74B,
+       0x7A6,
+       0x7B1,
+       0x7EB,
+       0x7F4,
+       0x816,
+       0x81A,
+       0x81B,
+       0x824,
+       0x825,
+       0x828,
+       0x829,
+       0x82E,
+       0x859,
+       0x85C,
+       0x8E3,
+       0x903,
+       0x904,
+       0x93A,
+       0x93B,
+       0x93C,
+       0x93D,
+       0x93E,
+       0x941,
+       0x949,
+       0x94D,
+       0x94E,
+       0x950,
+       0x951,
+       0x958,
+       0x962,
+       0x964,
+       0x981,
+       0x982,
+       0x984,
+       0x9BC,
+       0x9BD,
+       0x9BE,
+       0x9BF,
+       0x9C1,
+       0x9C5,
+       0x9C7,
+       0x9C9,
+       0x9CB,
+       0x9CD,
+       0x9CE,
+       0x9D7,
+       0x9D8,
+       0x9E2,
+       0x9E4,
+       0xA01,
+       0xA03,
+       0xA04,
+       0xA3C,
+       0xA3D,
+       0xA3E,
+       0xA41,
+       0xA43,
+       0xA47,
+       0xA49,
+       0xA4B,
+       0xA4E,
+       0xA51,
+       0xA52,
+       0xA70,
+       0xA72,
+       0xA75,
+       0xA76,
+       0xA81,
+       0xA83,
+       0xA84,
+       0xABC,
+       0xABD,
+       0xABE,
+       0xAC1,
+       0xAC6,
+       0xAC7,
+       0xAC9,
+       0xACA,
+       0xACB,
+       0xACD,
+       0xACE,
+       0xAE2,
+       0xAE4,
+       0xB01,
+       0xB02,
+       0xB04,
+       0xB3C,
+       0xB3D,
+       0xB3E,
+       0xB40,
+       0xB41,
+       0xB45,
+       0xB47,
+       0xB49,
+       0xB4B,
+       0xB4D,
+       0xB4E,
+       0xB56,
+       0xB58,
+       0xB62,
+       0xB64,
+       0xB82,
+       0xB83,
+       0xBBE,
        0xBBF,
        0xBC0,
        0xBC1,
@@ -76397,7 +76819,7 @@ typedef enum {
        GCB_V = 13
 } GCB_enum;
 
-static const GCB_enum Grapheme_Cluster_Break_invmap[] = { /* for EBCDIC POSIX-BC */
+static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC POSIX-BC */
        GCB_Control,
        GCB_CR,
        GCB_Control,
@@ -77904,412 +78326,6 @@ static const GCB_enum Grapheme_Cluster_Break_invmap[] = { /* for EBCDIC POSIX-BC
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
-#if defined(PERL_IN_REGCOMP_C)
-
-static const UV NonL1_Perl_Non_Final_Folds_invlist[] = { /* for EBCDIC POSIX-BC */
-       45,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x2BC,
-       0x2BD,
-       0x308,
-       0x309,
-       0x313,
-       0x314,
-       0x342,
-       0x343,
-       0x3AC,
-       0x3AD,
-       0x3AE,
-       0x3AF,
-       0x3B1,
-       0x3B2,
-       0x3B7,
-       0x3B8,
-       0x3B9,
-       0x3BA,
-       0x3C1,
-       0x3C2,
-       0x3C5,
-       0x3C6,
-       0x3C9,
-       0x3CA,
-       0x3CE,
-       0x3CF,
-       0x565,
-       0x566,
-       0x574,
-       0x575,
-       0x57E,
-       0x57F,
-       0x1F00,
-       0x1F08,
-       0x1F20,
-       0x1F28,
-       0x1F60,
-       0x1F68,
-       0x1F70,
-       0x1F71,
-       0x1F74,
-       0x1F75,
-       0x1F7C,
-       0x1F7D
-};
-
-static const UV _Perl_Any_Folds_invlist[] = { /* for EBCDIC POSIX-BC */
-       277,    /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x42,
-       0x4A,
-       0x51,
-       0x5A,
-       0x62,
-       0x6A,
-       0x70,
-       0x79,
-       0x80,
-       0x8A,
-       0x8C,
-       0x8F,
-       0x91,
-       0x9A,
-       0x9C,
-       0x9D,
-       0x9E,
-       0x9F,
-       0xA0,
-       0xA1,
-       0xA2,
-       0xAA,
-       0xAC,
-       0xAF,
-       0xC0,
-       0xCA,
-       0xCB,
-       0xD0,
-       0xD1,
-       0xDA,
-       0xDB,
-       0xE1,
-       0xE2,
-       0xEA,
-       0xEB,
-       0xF0,
-       0xFC,
-       0xFD,
-       0xFE,
-       0xFF,
-       0x100,
-       0x131,
-       0x132,
-       0x138,
-       0x139,
-       0x18D,
-       0x18E,
-       0x19B,
-       0x19C,
-       0x1AA,
-       0x1AC,
-       0x1BA,
-       0x1BC,
-       0x1BE,
-       0x1BF,
-       0x1C0,
-       0x1C4,
-       0x221,
-       0x222,
-       0x234,
-       0x23A,
-       0x255,
-       0x256,
-       0x258,
-       0x259,
-       0x25A,
-       0x25B,
-       0x25D,
-       0x260,
-       0x262,
-       0x263,
-       0x264,
-       0x265,
-       0x267,
-       0x268,
-       0x26A,
-       0x26B,
-       0x26D,
-       0x26F,
-       0x270,
-       0x271,
-       0x273,
-       0x275,
-       0x276,
-       0x27D,
-       0x27E,
-       0x280,
-       0x281,
-       0x283,
-       0x284,
-       0x287,
-       0x28D,
-       0x292,
-       0x293,
-       0x29D,
-       0x29F,
-       0x2BC,
-       0x2BD,
-       0x2BE,
-       0x2BF,
-       0x300,
-       0x302,
-       0x307,
-       0x309,
-       0x30A,
-       0x30B,
-       0x30C,
-       0x30D,
-       0x313,
-       0x314,
-       0x331,
-       0x332,
-       0x342,
-       0x343,
-       0x345,
-       0x346,
-       0x370,
-       0x374,
-       0x376,
-       0x378,
-       0x37B,
-       0x37E,
-       0x37F,
-       0x380,
-       0x386,
-       0x387,
-       0x388,
-       0x38B,
-       0x38C,
-       0x38D,
-       0x38E,
-       0x3A2,
-       0x3A3,
-       0x3D2,
-       0x3D5,
-       0x3F6,
-       0x3F7,
-       0x3FC,
-       0x3FD,
-       0x482,
-       0x48A,
-       0x530,
-       0x531,
-       0x557,
-       0x561,
-       0x588,
-       0x10A0,
-       0x10C6,
-       0x10C7,
-       0x10C8,
-       0x10CD,
-       0x10CE,
-       0x13A0,
-       0x13F6,
-       0x13F8,
-       0x13FE,
-       0x1D79,
-       0x1D7A,
-       0x1D7D,
-       0x1D7E,
-       0x1E00,
-       0x1E9C,
-       0x1E9E,
-       0x1E9F,
-       0x1EA0,
-       0x1F16,
-       0x1F18,
-       0x1F1E,
-       0x1F20,
-       0x1F46,
-       0x1F48,
-       0x1F4E,
-       0x1F50,
-       0x1F58,
-       0x1F59,
-       0x1F5A,
-       0x1F5B,
-       0x1F5C,
-       0x1F5D,
-       0x1F5E,
-       0x1F5F,
-       0x1F7E,
-       0x1F80,
-       0x1FB5,
-       0x1FB6,
-       0x1FBD,
-       0x1FBE,
-       0x1FBF,
-       0x1FC2,
-       0x1FC5,
-       0x1FC6,
-       0x1FCD,
-       0x1FD0,
-       0x1FD4,
-       0x1FD6,
-       0x1FDC,
-       0x1FE0,
-       0x1FED,
-       0x1FF2,
-       0x1FF5,
-       0x1FF6,
-       0x1FFD,
-       0x2126,
-       0x2127,
-       0x212A,
-       0x212C,
-       0x2132,
-       0x2133,
-       0x214E,
-       0x214F,
-       0x2160,
-       0x2180,
-       0x2183,
-       0x2185,
-       0x24B6,
-       0x24EA,
-       0x2C00,
-       0x2C2F,
-       0x2C30,
-       0x2C5F,
-       0x2C60,
-       0x2C71,
-       0x2C72,
-       0x2C74,
-       0x2C75,
-       0x2C77,
-       0x2C7E,
-       0x2CE4,
-       0x2CEB,
-       0x2CEF,
-       0x2CF2,
-       0x2CF4,
-       0x2D00,
-       0x2D26,
-       0x2D27,
-       0x2D28,
-       0x2D2D,
-       0x2D2E,
-       0xA640,
-       0xA66E,
-       0xA680,
-       0xA69C,
-       0xA722,
-       0xA730,
-       0xA732,
-       0xA770,
-       0xA779,
-       0xA788,
-       0xA78B,
-       0xA78E,
-       0xA790,
-       0xA794,
-       0xA796,
-       0xA7AE,
-       0xA7B0,
-       0xA7B8,
-       0xAB53,
-       0xAB54,
-       0xAB70,
-       0xABC0,
-       0xFB00,
-       0xFB07,
-       0xFB13,
-       0xFB18,
-       0xFF21,
-       0xFF3B,
-       0xFF41,
-       0xFF5B,
-       0x10400,
-       0x10450,
-       0x10C80,
-       0x10CB3,
-       0x10CC0,
-       0x10CF3,
-       0x118A0,
-       0x118E0
-};
-
-static const UV _Perl_Folds_To_Multi_Char_invlist[] = { /* for EBCDIC POSIX-BC */
-       59,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x59,
-       0x5A,
-       0x130,
-       0x131,
-       0x149,
-       0x14A,
-       0x1F0,
-       0x1F1,
-       0x390,
-       0x391,
-       0x3B0,
-       0x3B1,
-       0x587,
-       0x588,
-       0x1E96,
-       0x1E9B,
-       0x1E9E,
-       0x1E9F,
-       0x1F50,
-       0x1F51,
-       0x1F52,
-       0x1F53,
-       0x1F54,
-       0x1F55,
-       0x1F56,
-       0x1F57,
-       0x1F80,
-       0x1FB0,
-       0x1FB2,
-       0x1FB5,
-       0x1FB6,
-       0x1FB8,
-       0x1FBC,
-       0x1FBD,
-       0x1FC2,
-       0x1FC5,
-       0x1FC6,
-       0x1FC8,
-       0x1FCC,
-       0x1FCD,
-       0x1FD2,
-       0x1FD4,
-       0x1FD6,
-       0x1FD8,
-       0x1FE2,
-       0x1FE5,
-       0x1FE6,
-       0x1FE8,
-       0x1FF2,
-       0x1FF5,
-       0x1FF6,
-       0x1FF8,
-       0x1FFC,
-       0x1FFD,
-       0xFB00,
-       0xFB07,
-       0xFB13,
-       0xFB18
-};
-
-#endif /* defined(PERL_IN_REGCOMP_C) */
-
 #if defined(PERL_IN_UTF8_C)
 
 static const UV _Perl_IDCont_invlist[] = { /* for EBCDIC POSIX-BC */
@@ -80822,7 +80838,7 @@ static const UV _Perl_IDStart_invlist[] = { /* for EBCDIC POSIX-BC */
 
 #if defined(PERL_IN_PERL_C)
 
-static const UV Sentence_Break_invlist[] = { /* for EBCDIC POSIX-BC */
+static const UV _Perl_SB_invlist[] = { /* for EBCDIC POSIX-BC */
        2924,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -83778,7 +83794,7 @@ typedef enum {
        SB_Upper = 15
 } SB_enum;
 
-static const SB_enum Sentence_Break_invmap[] = { /* for EBCDIC POSIX-BC */
+static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC POSIX-BC */
        SB_Other,
        SB_Sp,
        SB_Other,
@@ -86707,93 +86723,9 @@ static const SB_enum Sentence_Break_invmap[] = { /* for EBCDIC POSIX-BC */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
-#if defined(PERL_IN_REGCOMP_C)
-
-static const UV UpperLatin1_invlist[] = { /* for EBCDIC POSIX-BC */
-       57,     /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0x4,
-       0x5,
-       0x6,
-       0x7,
-       0x8,
-       0xB,
-       0x14,
-       0x15,
-       0x17,
-       0x18,
-       0x1A,
-       0x1C,
-       0x20,
-       0x26,
-       0x28,
-       0x2D,
-       0x30,
-       0x32,
-       0x33,
-       0x37,
-       0x38,
-       0x3C,
-       0x3E,
-       0x3F,
-       0x41,
-       0x4A,
-       0x51,
-       0x5A,
-       0x5F,
-       0x60,
-       0x62,
-       0x6A,
-       0x70,
-       0x7A,
-       0x80,
-       0x81,
-       0x8A,
-       0x91,
-       0x9A,
-       0xA2,
-       0xAA,
-       0xBB,
-       0xBE,
-       0xC1,
-       0xCA,
-       0xD1,
-       0xDA,
-       0xE2,
-       0xEA,
-       0xF0,
-       0xFA,
-       0xFB,
-       0xFC,
-       0xFD,
-       0xFE,
-       0xFF
-};
-
-#endif /* defined(PERL_IN_REGCOMP_C) */
-
 #if defined(PERL_IN_PERL_C)
 
-static const UV VertSpace_invlist[] = { /* for EBCDIC POSIX-BC */
-       9,      /* Number of elements */
-       148565664, /* Version and data structure type */
-       1,      /* 0 if the list starts at 0;
-                  1 if it starts at the element beyond 0 */
-       0x0,
-       0xB,
-       0xE,
-       0x15,
-       0x16,
-       0x25,
-       0x26,
-       0x2028,
-       0x202A
-};
-
-static const UV Word_Break_invlist[] = { /* for EBCDIC POSIX-BC */
+static const UV _Perl_WB_invlist[] = { /* for EBCDIC POSIX-BC */
        1547,   /* Number of elements */
        148565664, /* Version and data structure type */
        0,      /* 0 if the list starts at 0;
@@ -88375,7 +88307,7 @@ typedef enum {
        WB_UNKNOWN = 18
 } WB_enum;
 
-static const WB_enum Word_Break_invmap[] = { /* for EBCDIC POSIX-BC */
+static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC POSIX-BC */
        WB_Other,
        WB_Newline,
        WB_CR,
@@ -89927,8 +89859,92 @@ static const WB_enum Word_Break_invmap[] = { /* for EBCDIC POSIX-BC */
 
 #endif /* defined(PERL_IN_REGEXEC_C) */
 
+#if defined(PERL_IN_REGCOMP_C)
+
+static const UV UpperLatin1_invlist[] = { /* for EBCDIC POSIX-BC */
+       57,     /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0x4,
+       0x5,
+       0x6,
+       0x7,
+       0x8,
+       0xB,
+       0x14,
+       0x15,
+       0x17,
+       0x18,
+       0x1A,
+       0x1C,
+       0x20,
+       0x26,
+       0x28,
+       0x2D,
+       0x30,
+       0x32,
+       0x33,
+       0x37,
+       0x38,
+       0x3C,
+       0x3E,
+       0x3F,
+       0x41,
+       0x4A,
+       0x51,
+       0x5A,
+       0x5F,
+       0x60,
+       0x62,
+       0x6A,
+       0x70,
+       0x7A,
+       0x80,
+       0x81,
+       0x8A,
+       0x91,
+       0x9A,
+       0xA2,
+       0xAA,
+       0xBB,
+       0xBE,
+       0xC1,
+       0xCA,
+       0xD1,
+       0xDA,
+       0xE2,
+       0xEA,
+       0xF0,
+       0xFA,
+       0xFB,
+       0xFC,
+       0xFD,
+       0xFE,
+       0xFF
+};
+
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
 #if defined(PERL_IN_PERL_C)
 
+static const UV VertSpace_invlist[] = { /* for EBCDIC POSIX-BC */
+       9,      /* Number of elements */
+       148565664, /* Version and data structure type */
+       1,      /* 0 if the list starts at 0;
+                  1 if it starts at the element beyond 0 */
+       0x0,
+       0xB,
+       0xE,
+       0x15,
+       0x16,
+       0x25,
+       0x26,
+       0x2028,
+       0x202A
+};
+
 static const UV XPerlSpace_invlist[] = { /* for EBCDIC POSIX-BC */
        23,     /* Number of elements */
        148565664, /* Version and data structure type */
@@ -99479,7 +99495,7 @@ static const UV XPosixXDigit_invlist[] = { /* for EBCDIC POSIX-BC */
 #endif /* EBCDIC POSIX-BC */
 
 /* Generated from:
- * 083180df694deb1fc173361406c1a75619fb8376403db3a76dc585c1e3951eca lib/Unicode/UCD.pm
+ * 0bca60a25eb4ccf2e04f50446db5f882322f50a9c61dc57bb806ccfc9b2e26a4 lib/Unicode/UCD.pm
  * ae98bec7e4f0564758eed81eca5015481ba32581f8a735a825b71b3bba714450 lib/unicore/ArabicShaping.txt
  * 1687fe5994eb7e5c0dab8503fc2a1b3b479d91af9d3b8055941c9bd791f7d0b5 lib/unicore/BidiBrackets.txt
  * 350d1302116194b0b21def287434b55c5088098fbc726e879f7420a391965643 lib/unicore/BidiMirroring.txt
@@ -99521,8 +99537,8 @@ static const UV XPosixXDigit_invlist[] = { /* for EBCDIC POSIX-BC */
  * 1a0687fb9c6c4567e853913549df0944fe40821279a3e9cdaa6ab8679bc286fd lib/unicore/extracted/DLineBreak.txt
  * 40bcfed3ca727c19e1331f6c33806231d5f7eeeabd2e6a9e06a3740c85d0c250 lib/unicore/extracted/DNumType.txt
  * a18d502bad39d527ac5586d7bc93e29f565859e3bcc24ada627eff606d6f5fed lib/unicore/extracted/DNumValues.txt
- * c9326eab8d7861c3543963e555d5b927348f4467c93071db23154dece7619654 lib/unicore/mktables
+ * ad739a46951b5f46396074b0682a2cfeed24b633a742a8e1aa0e337f69ef8b1c lib/unicore/mktables
  * 462c9aaa608fb2014cd9649af1c5c009485c60b9c8b15b89401fdc10cf6161c6 lib/unicore/version
  * c6884f4d629f04d1316f3476cb1050b6a1b98ca30c903262955d4eae337c6b1e regen/charset_translations.pl
- * f199f92c0b5f87882b0198936ea8ef3dc43627b57a77ac3eb9250bd2664bbd88 regen/mk_invlists.pl
+ * 8a097f8f726bb1619af2f27f149ab87e60a1602f790147e3a561358be16abd27 regen/mk_invlists.pl
  * ex: set ro: */
diff --git a/cop.h b/cop.h
index bf287a1..70e7817 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -154,10 +154,10 @@ typedef struct refcounted_he COPHH;
 /*
 =for apidoc Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
 
-Look up the entry in the cop hints hash I<cophh> with the key specified by
-I<keypv> and I<keylen>.  If I<flags> has the C<COPHH_KEY_UTF8> bit set,
+Look up the entry in the cop hints hash C<cophh> with the key specified by
+C<keypv> and C<keylen>.  If C<flags> has the C<COPHH_KEY_UTF8> bit set,
 the key octets are interpreted as UTF-8, otherwise they are interpreted
-as Latin-1.  I<hash> is a precomputed hash of the key string, or zero if
+as Latin-1.  C<hash> is a precomputed hash of the key string, or zero if
 it has not been precomputed.  Returns a mortal scalar copy of the value
 associated with the key, or C<&PL_sv_placeholder> if there is no value
 associated with the key.
@@ -208,7 +208,7 @@ string/length pair.
 =for apidoc Amx|HV *|cophh_2hv|const COPHH *cophh|U32 flags
 
 Generates and returns a standard Perl hash representing the full set of
-key/value pairs in the cop hints hash I<cophh>.  I<flags> is currently
+key/value pairs in the cop hints hash C<cophh>.  C<flags> is currently
 unused and must be zero.
 
 =cut
@@ -220,7 +220,7 @@ unused and must be zero.
 /*
 =for apidoc Amx|COPHH *|cophh_copy|COPHH *cophh
 
-Make and return a complete copy of the cop hints hash I<cophh>.
+Make and return a complete copy of the cop hints hash C<cophh>.
 
 =cut
 */
@@ -230,7 +230,7 @@ Make and return a complete copy of the cop hints hash I<cophh>.
 /*
 =for apidoc Amx|void|cophh_free|COPHH *cophh
 
-Discard the cop hints hash I<cophh>, freeing all resources associated
+Discard the cop hints hash C<cophh>, freeing all resources associated
 with it.
 
 =cut
@@ -251,18 +251,18 @@ Generate and return a fresh cop hints hash containing no entries.
 /*
 =for apidoc Amx|COPHH *|cophh_store_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags
 
-Stores a value, associated with a key, in the cop hints hash I<cophh>,
+Stores a value, associated with a key, in the cop hints hash C<cophh>,
 and returns the modified hash.  The returned hash pointer is in general
 not the same as the hash pointer that was passed in.  The input hash is
 consumed by the function, and the pointer to it must not be subsequently
 used.  Use L</cophh_copy> if you need both hashes.
 
-The key is specified by I<keypv> and I<keylen>.  If I<flags> has the
+The key is specified by C<keypv> and C<keylen>.  If C<flags> has the
 C<COPHH_KEY_UTF8> bit set, the key octets are interpreted as UTF-8,
-otherwise they are interpreted as Latin-1.  I<hash> is a precomputed
+otherwise they are interpreted as Latin-1.  C<hash> is a precomputed
 hash of the key string, or zero if it has not been precomputed.
 
-I<value> is the scalar value to store for this key.  I<value> is copied
+C<value> is the scalar value to store for this key.  C<value> is copied
 by this function, which thus does not take ownership of any reference
 to it, and later changes to the scalar will not be reflected in the
 value visible in the cop hints hash.  Complex types of scalar will not
@@ -313,15 +313,15 @@ string/length pair.
 /*
 =for apidoc Amx|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
 
-Delete a key and its associated value from the cop hints hash I<cophh>,
+Delete a key and its associated value from the cop hints hash C<cophh>,
 and returns the modified hash.  The returned hash pointer is in general
 not the same as the hash pointer that was passed in.  The input hash is
 consumed by the function, and the pointer to it must not be subsequently
 used.  Use L</cophh_copy> if you need both hashes.
 
-The key is specified by I<keypv> and I<keylen>.  If I<flags> has the
+The key is specified by C<keypv> and C<keylen>.  If C<flags> has the
 C<COPHH_KEY_UTF8> bit set, the key octets are interpreted as UTF-8,
-otherwise they are interpreted as Latin-1.  I<hash> is a precomputed
+otherwise they are interpreted as Latin-1.  C<hash> is a precomputed
 hash of the key string, or zero if it has not been precomputed.
 
 =cut
@@ -457,10 +457,10 @@ struct cop {
 /*
 =for apidoc Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
 
-Look up the hint entry in the cop I<cop> with the key specified by
-I<keypv> and I<keylen>.  If I<flags> has the C<COPHH_KEY_UTF8> bit set,
+Look up the hint entry in the cop C<cop> with the key specified by
+C<keypv> and C<keylen>.  If C<flags> has the C<COPHH_KEY_UTF8> bit set,
 the key octets are interpreted as UTF-8, otherwise they are interpreted
-as Latin-1.  I<hash> is a precomputed hash of the key string, or zero if
+as Latin-1.  C<hash> is a precomputed hash of the key string, or zero if
 it has not been precomputed.  Returns a mortal scalar copy of the value
 associated with the key, or C<&PL_sv_placeholder> if there is no value
 associated with the key.
@@ -511,7 +511,7 @@ string/length pair.
 =for apidoc Am|HV *|cop_hints_2hv|const COP *cop|U32 flags
 
 Generates and returns a standard Perl hash representing the full set of
-hint entries in the cop I<cop>.  I<flags> is currently unused and must
+hint entries in the cop C<cop>.  C<flags> is currently unused and must
 be zero.
 
 =cut
index 96ed0ca..f0c1900 100644 (file)
@@ -1,11 +1,11 @@
 use 5.008001; # sane UTF-8 support
 use strict;
 use warnings;
-package CPAN::Meta::YAML; # git description: v1.66-5-ge09e1ae
+package CPAN::Meta::YAML; # git description: v1.68-2-gcc5324e
 # XXX-INGY is 5.8.1 too old/broken for utf8?
 # XXX-XDG Lancaster consensus was that it was sufficient until
 # proven otherwise
-$CPAN::Meta::YAML::VERSION = '0.016';
+$CPAN::Meta::YAML::VERSION = '0.017'; # TRIAL
 ; # original $VERSION removed by Doppelgaenger
 
 #####################################################################
@@ -878,7 +878,7 @@ CPAN::Meta::YAML - Read and write a subset of YAML for CPAN Meta files
 
 =head1 VERSION
 
-version 0.016
+version 0.017
 
 =head1 SYNOPSIS
 
diff --git a/cpan/CPAN-Meta-YAML/t/00-report-prereqs.dd b/cpan/CPAN-Meta-YAML/t/00-report-prereqs.dd
deleted file mode 100644 (file)
index 98d00aa..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-do { my $x = {
-       'configure' => {
-                        'requires' => {
-                                        'ExtUtils::MakeMaker' => '6.17',
-                                        'perl' => '5.008001'
-                                      }
-                      },
-       'develop' => {
-                      'requires' => {
-                                      'Dist::Zilla' => '5',
-                                      'Dist::Zilla::Plugin::AppendExternalData' => '0',
-                                      'Dist::Zilla::Plugin::Doppelgaenger' => '0.007',
-                                      'Dist::Zilla::Plugin::Encoding' => '0',
-                                      'Dist::Zilla::Plugin::Git::NextVersion' => '0',
-                                      'Dist::Zilla::Plugin::MakeMaker::Highlander' => '0.003',
-                                      'Dist::Zilla::Plugin::MetaResources' => '0',
-                                      'Dist::Zilla::Plugin::PkgVersion' => '0',
-                                      'Dist::Zilla::Plugin::PodWeaver' => '0',
-                                      'Dist::Zilla::Plugin::PruneFiles' => '0',
-                                      'Dist::Zilla::Plugin::RemovePrereqs' => '0',
-                                      'Dist::Zilla::PluginBundle::DAGOLDEN' => '0.072',
-                                      'File::Spec' => '0',
-                                      'File::Temp' => '0',
-                                      'IO::Handle' => '0',
-                                      'IPC::Open3' => '0',
-                                      'Test::CPAN::Meta' => '0',
-                                      'Test::More' => '0',
-                                      'Test::Pod' => '1.41',
-                                      'Test::Version' => '1'
-                                    }
-                    },
-       'runtime' => {
-                      'requires' => {
-                                      'B' => '0',
-                                      'Carp' => '0',
-                                      'Exporter' => '0',
-                                      'Fcntl' => '0',
-                                      'Scalar::Util' => '0',
-                                      'perl' => '5.008001',
-                                      'strict' => '0',
-                                      'warnings' => '0'
-                                    }
-                    },
-       'test' => {
-                   'recommends' => {
-                                     'CPAN::Meta' => '2.120900'
-                                   },
-                   'requires' => {
-                                   'ExtUtils::MakeMaker' => '0',
-                                   'File::Basename' => '0',
-                                   'File::Find' => '0',
-                                   'File::Spec' => '0',
-                                   'File::Spec::Functions' => '0',
-                                   'File::Temp' => '0.19',
-                                   'IO::Dir' => '0',
-                                   'JSON::PP' => '0',
-                                   'Test::More' => '0.99',
-                                   'lib' => '0',
-                                   'perl' => '5.008001',
-                                   'utf8' => '0',
-                                   'vars' => '0'
-                                 }
-                 }
-     };
-  $x;
- }
\ No newline at end of file
index 3d57c85..643660f 100644 (file)
@@ -4,7 +4,8 @@ use strict;
 use warnings;
 
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
+use SubtestCompat;
 use TestBridge;
 use CPAN::Meta::YAML;
 
index e7b3870..916c6ce 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
     $|  = 1;
 }
 
-use Test::More 0.99;
+use Test::More 0.88;
 
 # Check their perl version
 ok( $] ge '5.008001', "Your perl is new enough" );
index af02e79..f70f217 100644 (file)
@@ -2,7 +2,8 @@ use strict;
 use warnings;
 use utf8;
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
+use SubtestCompat;
 use TestUtils;
 use TestBridge;
 
index 9b00291..491fd8e 100644 (file)
@@ -1,7 +1,8 @@
 use strict;
 use warnings;
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
+use SubtestCompat;
 use TestUtils;
 use TestBridge;
 
index b4be78a..23d9ccf 100644 (file)
@@ -2,7 +2,8 @@ use utf8;
 use strict;
 use warnings;
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
+use SubtestCompat;
 use TestBridge;
 use TestUtils;
 
index 48113d0..14dd85c 100644 (file)
@@ -1,7 +1,8 @@
 use strict;
 use warnings;
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
+use SubtestCompat;
 use TestUtils;
 use TestBridge;
 
index 9935ca9..e1d260c 100644 (file)
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
 use TestUtils;
 
 use File::Spec::Functions ':ALL';
index 944ceff..b7b0c0c 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
 use TestBridge;
 use File::Spec::Functions 'catfile';
 use File::Temp 0.19; # newdir
index 1209a96..9d9f773 100644 (file)
@@ -2,14 +2,16 @@
 use strict;
 use warnings;
 use lib 't/lib';
-use Test::More 0.99;
+use Test::More 0.88;
+use SubtestCompat;
 use TestBridge;
 use TestUtils;
 
 my $JSON = json_class()
     or Test::More::plan skip_all => 'no JSON backends available!?';
 
-diag 'using JSON backend: ' . $JSON;
+diag 'using JSON backend: ' . $JSON . ' ' . $JSON->VERSION
+    if not $ENV{PERL_CORE};
 
 # Each spec test will need a different bridge and arguments:
 my @spec_tests = (
@@ -24,7 +26,6 @@ for my $test (@spec_tests) {
     my $code = sub {
         my ($file, $blocks) = @_;
         subtest "YAML Spec Test; file: $file" => sub {
-            plan tests => scalar @$blocks;
             my $func = \&{$bridge};
             $func->($_) for @$blocks;
         };
index 2339773..23e0e31 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
 use TestBridge;
 use IO::Dir;
 use File::Spec::Functions qw/catdir/;
index 5dcca9a..11b785a 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 use lib 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
 use TestBridge;
 
 run_all_testml_files(
index e95ebfe..56450af 100644 (file)
@@ -19,10 +19,8 @@ of those modules as necessary to avoid known bugs.
 Some .t files have complete inputs/outputs for their tests.  Others iterate
 over .tml files in the t/tml-* directories.
 
-A .t file should load Test::More and either use `done_testing` or provide a
-test plan.  If tests iterate over external data, the use of `done_testing` is
-preferred so that external data can be updated with new tests without needing
-to also update a test plan.
+A .t file should load Test::More and use `done_testing` at the end
+to so that new tests may be added without needing to also update a test plan.
 
 Currently, the convention is to name .t files matching the pattern
 qr/^\d\d_\w+\.t$/
@@ -35,10 +33,16 @@ libraries can assume that if they were loaded, that 't/lib' is already in @INC.
 
 The test libraries are:
 
+* SubtestCompat
 * TestML::Tiny
 * TestBridge
 * TestUtils
 
+The "SubtestCompat" library provides a limited emulation of
+Test::More::subtest that is reasonably compatible back to 0.88.  If using
+subtests, you must not set a plan in the subtest and you must use
+done_testing in the *.t file.
+
 The TestML::Tiny library contains functions for parsing and executing TestML
 tests with callbacks.  TestML is a data-driven testing language; TestML::Tiny
 implements a small subset of its features. See the section on TestML, below,
diff --git a/cpan/CPAN-Meta-YAML/t/lib/SubtestCompat.pm b/cpan/CPAN-Meta-YAML/t/lib/SubtestCompat.pm
new file mode 100644 (file)
index 0000000..17b3953
--- /dev/null
@@ -0,0 +1,66 @@
+use 5.008001;
+use strict;
+use warnings;
+
+package SubtestCompat;
+
+# XXX must be used with no_plan or done_testing
+use Test::More 0.88;
+
+use base 'Exporter';
+our @EXPORT;
+
+our $INDENT = -2;
+
+# intercept 'skip_all' in subtest and turn into a regular skip
+sub _fake_plan {
+    my ( $self, $cmd, $arg ) = @_;
+
+    return unless $cmd;
+
+    if ( $cmd eq 'skip_all' ) {
+        die bless { reason => $arg }, "Subtest::SKIP";
+    }
+    else {
+        goto &Test::Builder::plan;
+    }
+}
+
+unless ( Test::More->can("subtest") ) {
+    *subtest = sub {
+        my ( $label, $code ) = @_;
+        local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+        local $INDENT = $INDENT + 2;
+
+        $label = "TEST: $label";
+        my $sep_len = 60 - length($label);
+
+        note( " " x $INDENT . "$label { " . ( " " x ($sep_len-$INDENT-2) ) );
+        eval {
+            no warnings 'redefine';
+            local *Test::Builder::plan = \&_fake_plan;
+            # only want subtest error reporting to look up to the code ref
+            # for where test was called, not further up to *our* callers,
+            # so we *reset* the Level, rather than increment it
+            local $Test::Builder::Level = 1;
+            $code->();
+        };
+        if ( my $err = $@ ) {
+            if ( ref($err) eq 'Subtest::SKIP' ) {
+                SKIP: {
+                    skip $err->{reason}, 1;
+                }
+            }
+            else {
+                fail("SUBTEST: $label");
+                diag("Caught exception: $err");
+                die "$err\n";
+            }
+        }
+        note( " " x $INDENT . "}" );
+    };
+    push @EXPORT, 'subtest';
+}
+
+1;
index eb2ebe7..70f7d40 100644 (file)
@@ -2,8 +2,9 @@ package TestBridge;
 
 use strict;
 use warnings;
-
-use Test::More 0.99;
+use lib 't/lib';
+use Test::More 0.88;
+use SubtestCompat;
 use TestUtils;
 use TestML::Tiny;
 
@@ -51,8 +52,7 @@ my %WARN = (
 # run_all_testml_files
 #
 # Iterate over all .tml files in a directory using a particular test bridge
-# code # reference.  Each file is wrapped in a subtest with a test plan
-# equal to the number of blocks.
+# code # reference.  Each file is wrapped in a subtest.
 #--------------------------------------------------------------------------#
 
 sub run_all_testml_files {
@@ -61,7 +61,6 @@ sub run_all_testml_files {
     my $code = sub {
         my ($file, $blocks) = @_;
         subtest "$label: $file" => sub {
-            plan tests => scalar @$blocks;
             $bridge->($_, @args) for @$blocks;
         };
     };
index 5a3df6f..1056e07 100644 (file)
@@ -4,7 +4,7 @@ package TestML::Tiny;
 ; # original $VERSION removed by Doppelgaenger
 
 use Carp();
-use Test::More 0.99 ();
+use Test::More 0.88 ();
 
 # use XXX;
 
index d4e3fe7..cdcb9ca 100755 (executable)
@@ -2,7 +2,8 @@
 use strict;
 use warnings;
 use lib 'lib', 't/lib/';
-use Test::More 0.99;
+use Test::More 0.88;
+use SubtestCompat;
 use Getopt::Long qw/:config passthrough/;
 use List::Util qw/first/;
 use TestBridge;
@@ -42,7 +43,6 @@ sub main {
             sub {
                 my ($file, $blocks) = @_;
                 subtest "TestML dev runner: $file" => sub {
-                    plan tests => scalar @$blocks;
                     $BRIDGE_MAP{$bridge}->($_) for @$blocks;
                 };
                 done_testing;
index e94b3e9..1fea02b 100644 (file)
@@ -1,10 +1,10 @@
 #
-# $Id: Encode.pm,v 2.75 2015/06/30 09:57:15 dankogai Exp $
+# $Id: Encode.pm,v 2.76 2015/07/31 02:17:53 dankogai Exp $
 #
 package Encode;
 use strict;
 use warnings;
-our $VERSION = sprintf "%d.%02d", q$Revision: 2.75 $ =~ /(\d+)/g;
+our $VERSION = sprintf "%d.%02d", q$Revision: 2.76 $ =~ /(\d+)/g;
 use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
 use XSLoader ();
 XSLoader::load( __PACKAGE__, $VERSION );
index d92df5a..c955083 100644 (file)
@@ -1,11 +1,11 @@
 #
-# $Id: koi8-u.ucm,v 2.1 2013/08/14 02:29:54 dankogai Exp $
+# $Id: koi8-u.ucm,v 2.2 2015/07/31 02:18:28 dankogai Exp dankogai $
 #
-# Written $Id: koi8-u.ucm,v 2.1 2013/08/14 02:29:54 dankogai Exp $
+# Written $Id: koi8-u.ucm,v 2.2 2015/07/31 02:18:28 dankogai Exp dankogai $
 # ./compile -n koi8-u -o Encode/koi8-u.ucm Encode/koi8-u.enc
 #
 # Original table can be obtained at
-# http://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-R.TXT
+# http://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-U.TXT
 #
 #       Copyright (c) 1991-2008 Unicode, Inc.  All Rights reserved.
 #
@@ -178,7 +178,7 @@ CHARMAP
 <U2593> \x92 |0 # DARK SHADE
 <U2320> \x93 |0 # TOP HALF INTEGRAL
 <U25A0> \x94 |0 # BLACK SQUARE
-<U2022> \x95 |0 # BULLET
+<U2219> \x95 |0 # BULLET OPERATOR
 <U221A> \x96 |0 # SQUARE ROOT
 <U2248> \x97 |0 # ALMOST EQUAL TO
 <U2264> \x98 |0 # LESS-THAN OR EQUAL TO
index f282a15..8b4d41a 100644 (file)
@@ -1,7 +1,7 @@
-
 # Call.pm
 #
 # Copyright (c) 1995-2011 Paul Marquess. All rights reserved.
+# Copyright (c) 2011-2014 Reini Urban. All rights reserved.
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the same terms as Perl itself.
@@ -18,7 +18,7 @@ use vars qw($VERSION @ISA @EXPORT) ;
 
 @ISA = qw(Exporter DynaLoader);
 @EXPORT = qw( filter_add filter_del filter_read filter_read_exact) ;
-$VERSION = "1.54" ;
+$VERSION = "1.55" ;
 
 sub filter_read_exact($)
 {
@@ -292,6 +292,29 @@ See L<Example 4: Using filter_del> for details.
 Internal function which adds the filter, based on the L<filter_add>
 argument type.
 
+=item I<unimport()>
+
+May be used to disable a filter, but is rarely needed. See L<filter_del>.
+
+=back
+
+=head1 LIMITATIONS
+
+See L<perlfilter/LIMITATIONS> for an overview of the general problems
+filtering code in a textual line-level only.
+
+=over
+
+=item __DATA__ is ignored
+
+The content from the __DATA__ block is not filtered.
+This is a serious limitation, e.g. for the L<Switch> module.
+See L<http://search.cpan.org/perldoc?Switch#LIMITATIONS> for more.
+
+=item Max. codesize limited to 32-bit
+
+Currently internal buffer lengths are limited to 32-bit only.
+
 =back
 
 =head1 EXAMPLES
index fd79c57..97280d7 100644 (file)
@@ -3,7 +3,7 @@
  * 
  * Author   : Paul Marquess 
  * Date     : 2014-12-09 02:48:44 rurban
- * Version  : 1.54
+ * Version  : 1.55
  *
  *    Copyright (c) 1995-2011 Paul Marquess. All rights reserved.
  *    Copyright (c) 2011-2014 Reini Urban. All rights reserved.
@@ -131,19 +131,15 @@ filter_call(pTHX_ int idx, SV *buf_sv, int maxlen)
            DEFSV_set(newSVpv("", 0)) ; 
 
            PUSHMARK(sp) ;
-
            if (CODE_REF(my_sv)) {
            /* if (SvROK(PERL_OBJECT(my_sv)) && SvTYPE(SvRV(PERL_OBJECT(my_sv))) == SVt_PVCV) { */
                count = perl_call_sv((SV*)PERL_OBJECT(my_sv), G_SCALAR);
            }
            else {
                 XPUSHs((SV*)PERL_OBJECT(my_sv)) ;  
-       
                PUTBACK ;
-
                count = perl_call_method("filter", G_SCALAR);
            }
-
            SPAGAIN ;
 
             if (count != 1)
index 1bc3bfb..44e8b1e 100644 (file)
@@ -9,8 +9,8 @@ sub readFile
     my ($filename) = @_ ;
     my ($string) = '' ;
 
-    open (F, "<$filename") 
-       or die "Cannot open $filename: $!\n" ;
+    open (F, "<", $filename)
+       or die "Cannot read $filename: $!\n" ;
     while (<F>)
       { $string .= $_ }
     close F ;
@@ -20,8 +20,8 @@ sub readFile
 sub writeFile
 {
     my($filename, @strings) = @_ ;
-    open (F, ">$filename") 
-       or die "Cannot open $filename: $!\n" ;
+    open (F, ">", $filename)
+       or die "Cannot write $filename: $!\n" ;
     binmode(F) if $filename =~ /bin$/i;
     foreach (@strings)
       { print F }
diff --git a/cpan/Filter-Util-Call/t/rt_101033.pm b/cpan/Filter-Util-Call/t/rt_101033.pm
new file mode 100644 (file)
index 0000000..526a97c
--- /dev/null
@@ -0,0 +1,27 @@
+package rt_101033;
+
+use strict;
+use Filter::Util::Call;
+
+sub import
+{
+  filter_add({});
+  1;
+}
+    
+sub unimport
+{      
+  filter_del()
+}
+      
+sub filter
+{
+  my($self) = @_ ;
+  my $status = 1;
+  $status = filter_read(1_000_000);
+  #print "code: !$_!\n\n";
+  return $status;
+}
+
+1;
+                
diff --git a/cpan/Filter-Util-Call/t/rt_101033.t b/cpan/Filter-Util-Call/t/rt_101033.t
new file mode 100644 (file)
index 0000000..4df3614
--- /dev/null
@@ -0,0 +1,11 @@
+#! perl
+use lib 't';
+use rt_101033;
+
+print "1..1\n";
+my $s = <DATA>;
+print "not " if $s !~ /^test/;
+print "ok 1 # TODO RT #101033 + Switch #97440 ignores __DATA__\n";
+
+__DATA__
+test
index 9a70251..12d8299 100644 (file)
@@ -19,51 +19,8 @@ use strict;
 use vars qw($VERSION $VMS_TERMCAP);
 use vars qw($termpat $state $first $entry);
 
-$VERSION = '1.15';
-
-# Version undef: Thu Dec 14 20:02:42 CST 1995 by sanders@bsdi.com
-# Version 1.00:  Thu Nov 30 23:34:29 EST 2000 by schwern@pobox.com
-#      [PATCH] $VERSION crusade, strict, tests, etc... all over lib/
-# Version 1.01:  Wed May 23 00:00:00 CST 2001 by d-lewart@uiuc.edu
-#      Avoid warnings in Tgetent and Tputs
-# Version 1.02:  Sat Nov 17 13:50:39 GMT 2001 by jns@gellyfish.com
-#       Altered layout of the POD
-#       Added Test::More to PREREQ_PM in Makefile.PL
-#       Fixed no argument Tgetent()
-# Version 1.03:  Wed Nov 28 10:09:38 GMT 2001
-#       VMS Support from Charles Lane <lane@DUPHY4.Physics.Drexel.Edu>
-# Version 1.04:  Thu Nov 29 16:22:03 GMT 2001
-#       Fixed warnings in test
-# Version 1.05:  Mon Dec  3 15:33:49 GMT 2001
-#       Don't try to fall back on infocmp if it's not there. From chromatic.
-# Version 1.06:  Thu Dec  6 18:43:22 GMT 2001
-#       Preload the default VMS termcap from Charles Lane
-#       Don't carp at setting OSPEED unless warnings are on.
-# Version 1.07:  Wed Jan  2 21:35:09 GMT 2002
-#       Sanity check on infocmp output from Norton Allen
-#       Repaired INSTALLDIRS thanks to Michael Schwern
-# Version 1.08:  Sat Sep 28 11:33:15 BST 2002
-#       Late loading of 'Carp' as per Michael Schwern
-# Version 1.09:  Tue Apr 20 12:06:51 BST 2004
-#       Merged in changes from and to Core
-#       Core (Fri Aug 30 14:15:55 CEST 2002):
-#       Cope with comments lines from 'infocmp' from Brendan O'Dea
-#       Allow for EBCDIC in Tgoto magic test.
-# Version 1.10: Thu Oct 18 16:52:20 BST 2007
-#       Don't use try to use $ENV{HOME} if it doesn't exist
-#       Give Win32 'dumb' if TERM isn't set
-#       Provide fallback 'dumb' termcap entry as last resort
-# Version 1.11: Thu Oct 25 09:33:07 BST 2007
-#       EBDIC fixes from Chun Bing Ge <gecb@cn.ibm.com>
-# Version 1.12: Sat Dec  8 00:10:21 GMT 2007
-#       QNX test fix from Matt Kraai <kraai@ftbfs.org>
-# Version 1.13: Thu Dec 22 22:21:09 GMT 2011
-#       POD error fix from Domin Hargreaves <dom@earth.li>
-# Version 1.14 Sat Oct 26 19:16:38 BST 2013
-#       Applied all patches from RT and updated contact details
-# Version 1.15 Sat Oct 26 21:32:24 BST 2013
-#        Metadata change from David Steinbrunner
-#        Forgot to update the email somewhere
+$VERSION = '1.17';
+
 # TODO:
 # support Berkeley DB termcaps
 # force $FH into callers package?
@@ -279,7 +236,7 @@ sub Tgetent
 
     my @termcap_path = termcap_path();
 
-    unless ( @termcap_path || $entry )
+    if ( !@termcap_path && !$entry )
     {
 
         # last resort--fake up a termcap from terminfo
@@ -405,25 +362,25 @@ sub Tgetent
     $entry =~ s/^[^:]*://;
     foreach $field ( split( /:[\s:\\]*/, $entry ) )
     {
-        if ( defined $field && $field =~ /^(\w\w)$/ )
+        if ( defined $field && $field =~ /^(\w{2,})$/ )
         {
             $self->{ '_' . $field } = 1 unless defined $self->{ '_' . $1 };
 
             # print STDERR "DEBUG: flag $1\n";
         }
-        elsif ( defined $field && $field =~ /^(\w\w)\@/ )
+        elsif ( defined $field && $field =~ /^(\w{2,})\@/ )
         {
             $self->{ '_' . $1 } = "";
 
             # print STDERR "DEBUG: unset $1\n";
         }
-        elsif ( defined $field && $field =~ /^(\w\w)#(.*)/ )
+        elsif ( defined $field && $field =~ /^(\w{2,})#(.*)/ )
         {
             $self->{ '_' . $1 } = $2 unless defined $self->{ '_' . $1 };
 
             # print STDERR "DEBUG: numeric $1 = $2\n";
         }
-        elsif ( defined $field && $field =~ /^(\w\w)=(.*)/ )
+        elsif ( defined $field && $field =~ /^(\w{2,})=(.*)/ )
         {
 
             # print STDERR "DEBUG: string $1 = $2\n";
@@ -770,7 +727,13 @@ sub Trequire
 
 =head1 COPYRIGHT AND LICENSE
 
-Please see the README file in distribution.
+Copyright 1995-2015 (c) perl5 porters.
+
+This software is free software and can be modified and distributed under
+the same terms as Perl itself.
+
+Please see the file README in the Perl source distribution for details of
+the Perl license.
 
 =head1 AUTHOR
 
index 8fc808a..0be9c18 100644 (file)
@@ -1,5 +1,5 @@
 use strict;
 use warnings;
 package perlfaq;
-$perlfaq::VERSION = '5.021009';
+$perlfaq::VERSION = '5.021010';
 1;
index 9ffec6f..5be2f6d 100644 (file)
@@ -4,7 +4,7 @@ perlfaq - frequently asked questions about Perl
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index fb52cd3..c2c793e 100644 (file)
@@ -4,7 +4,7 @@ perlfaq1 - General Questions About Perl
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index d4f81b0..4c652db 100644 (file)
@@ -4,7 +4,7 @@ perlfaq2 - Obtaining and Learning about Perl
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index 9411862..78a2bab 100644 (file)
@@ -4,7 +4,7 @@ perlfaq3 - Programming Tools
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index 6645aac..f6bf2ca 100644 (file)
@@ -4,7 +4,7 @@ perlfaq4 - Data Manipulation
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
@@ -490,7 +490,7 @@ operators so you can compare them directly:
 You can also get differences with a subtraction, which returns a
 L<Time::Seconds> object:
 
-    my $diff = $date1 - $date2;
+    my $date_diff = $date1 - $date2;
     print "The difference is ", $date_diff->days, " days\n";
 
 If you want to work with formatted dates, the L<Date::Manip>,
index 9550e58..cbb73c7 100644 (file)
@@ -4,7 +4,7 @@ perlfaq5 - Files and Formats
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index 2cc1af5..c889ca4 100644 (file)
@@ -4,7 +4,7 @@ perlfaq6 - Regular Expressions
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index 3a1238c..fb67736 100644 (file)
@@ -4,7 +4,7 @@ perlfaq7 - General Perl Language Issues
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index c5a1604..3bbd459 100644 (file)
@@ -4,7 +4,7 @@ perlfaq8 - System Interaction
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
@@ -204,7 +204,7 @@ method returns the string for the given capability:
     use Term::Cap;
 
     my $terminal = Term::Cap->Tgetent( { OSPEED => 9600 } );
-    my $clear_string = $terminal->Tputs('cl');
+    my $clear_screen = $terminal->Tputs('cl');
 
     print $clear_screen;
 
index ea9a55e..bc68746 100644 (file)
@@ -4,7 +4,7 @@ perlfaq9 - Web, Email and Networking
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index 7db2bb3..76a54f0 100644 (file)
@@ -7,7 +7,7 @@ perlglossary - Perl Glossary
 
 =head1 VERSION
 
-version 5.021009
+version 5.021010
 
 =head1 DESCRIPTION
 
index f81a472..6278c9a 100644 (file)
@@ -172,3 +172,6 @@ t Revision history for Perl extension Attribute-Handlers
 
 0.97   Sun Jun  1 12:00:00 GMT 2015
        - fixes to deal with CVs without GVs
+
+0.99 Fri Jul 24 18:44:48 EDT 2015
+  - CPAN release of v0.97 code
index 17c4bb7..7c049d4 100644 (file)
@@ -4,7 +4,7 @@ use Carp;
 use warnings;
 use strict;
 use vars qw($VERSION $AUTOLOAD);
-$VERSION = '0.97'; # remember to update version in POD!
+$VERSION = '0.99'; # remember to update version in POD!
 # $DB::single=1;
 
 my %symcache;
@@ -270,7 +270,7 @@ Attribute::Handlers - Simpler definition of attribute handlers
 
 =head1 VERSION
 
-This document describes version 0.97 of Attribute::Handlers.
+This document describes version 0.99 of Attribute::Handlers.
 
 =head1 SYNOPSIS
 
index 05aabd3..7aa6132 100644 (file)
@@ -14,7 +14,7 @@ WriteMakefile(
                "IPC::Open3" => "1.0103",
                "Test::More" => 0,
                "overload" => 0,
-               "parent" => 0,
+               "parent" => 0.217,
                "strict" => 0,
                "warnings" => 0,
        },
index 0987500..8b4d7cf 100644 (file)
@@ -11,7 +11,7 @@ use Symbol;
 
 our $VERSION;
 BEGIN {
-  $VERSION = '3.28';
+  $VERSION = '3.29';
 }
 use ExtUtils::ParseXS::Constants $VERSION;
 use ExtUtils::ParseXS::CountLines $VERSION;
@@ -1577,6 +1577,25 @@ sub QuoteArgs {
   return join (' ', ($cmd, @args));
 }
 
+# code copied from CPAN::HandleConfig::safe_quote
+#  - that has doc saying leave if start/finish with same quote, but no code
+# given text, will conditionally quote it to protect from shell
+{
+  my ($quote, $use_quote) = $^O eq 'MSWin32'
+      ? (q{"}, q{"})
+      : (q{"'}, q{'});
+  sub _safe_quote {
+      my ($self, $command) = @_;
+      # Set up quote/default quote
+      if (defined($command)
+          and $command =~ /\s/
+          and $command !~ /[$quote]/) {
+          return qq{$use_quote$command$use_quote}
+      }
+      return $command;
+  }
+}
+
 sub INCLUDE_COMMAND_handler {
   my $self = shift;
   $_ = shift;
@@ -1598,7 +1617,8 @@ sub INCLUDE_COMMAND_handler {
 
   # If $^X is used in INCLUDE_COMMAND, we know it's supposed to be
   # the same perl interpreter as we're currently running
-  s/^\s*\$\^X/$^X/;
+  my $X = $self->_safe_quote($^X); # quotes if has spaces
+  s/^\s*\$\^X/$X/;
 
   # open the new file
   open ($self->{FH}, "-|", $_)
index 5603613..7ea1a82 100644 (file)
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 use Symbol;
 
-our $VERSION = '3.28';
+our $VERSION = '3.29';
 
 =head1 NAME
 
index b30812c..6724522 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::ParseXS::CountLines;
 use strict;
 
-our $VERSION = '3.28';
+our $VERSION = '3.29';
 
 our $SECTION_END_MARKER;
 
index b4f41cb..f85740d 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::ParseXS::Eval;
 use strict;
 use warnings;
 
-our $VERSION = '3.28';
+our $VERSION = '3.29';
 
 =head1 NAME
 
index 37094cb..a5920fd 100644 (file)
@@ -5,7 +5,7 @@ use Exporter;
 use File::Spec;
 use ExtUtils::ParseXS::Constants ();
 
-our $VERSION = '3.28';
+our $VERSION = '3.29';
 
 our (@ISA, @EXPORT_OK);
 @ISA = qw(Exporter);
index f9b568d..98cb34a 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::Typemaps;
 use 5.006001;
 use strict;
 use warnings;
-our $VERSION = '3.28';
+our $VERSION = '3.29';
 
 require ExtUtils::ParseXS;
 require ExtUtils::ParseXS::Constants;
index d5cb688..deb3ddb 100644 (file)
@@ -1,3 +1,6 @@
+5.20150820
+  - Updated for v5.23.2
+
 5.20150720
   - Updated for v5.23.1
 
index 2cea131..266dbba 100644 (file)
@@ -4,7 +4,7 @@ use vars qw/$VERSION %released %version %families %upstream
            %bug_tracker %deprecated %delta/;
 use Module::CoreList::TieHashDelta;
 use version;
-$VERSION = '5.20150720';
+$VERSION = '5.20150820';
 
 sub _released_order {   # Sort helper, to make '?' sort after everything else
     (substr($released{$a}, 0, 1) eq "?")
@@ -281,6 +281,7 @@ sub changes_between {
     5.022000 => '2015-06-01',
     5.023000 => '2015-06-20',
     5.023001 => '2015-07-20',
+    5.023002 => '2015-08-20',
   );
 
 for my $version ( sort { $a <=> $b } keys %released ) {
@@ -11651,6 +11652,44 @@ for my $version ( sort { $a <=> $b } keys %released ) {
             'autodie::ScopeUtil'    => 1,
         }
     },
+    5.023002 => {
+        delta_from => 5.023001,
+        changed => {
+            'Attribute::Handlers'   => '0.99',
+            'B::Op_private'         => '5.023002',
+            'CPAN::Meta::YAML'      => '0.017',
+            'Config'                => '5.023002',
+            'Cwd'                   => '3.57',
+            'Encode'                => '2.76',
+            'ExtUtils::ParseXS'     => '3.29',
+            'ExtUtils::ParseXS::Constants'=> '3.29',
+            'ExtUtils::ParseXS::CountLines'=> '3.29',
+            'ExtUtils::ParseXS::Eval'=> '3.29',
+            'ExtUtils::ParseXS::Utilities'=> '3.29',
+            'ExtUtils::Typemaps'    => '3.29',
+            'File::Find'            => '1.30',
+            'File::Spec'            => '3.57',
+            'File::Spec::Cygwin'    => '3.57',
+            'File::Spec::Epoc'      => '3.57',
+            'File::Spec::Functions' => '3.57',
+            'File::Spec::Mac'       => '3.57',
+            'File::Spec::OS2'       => '3.57',
+            'File::Spec::Unix'      => '3.57',
+            'File::Spec::VMS'       => '3.57',
+            'File::Spec::Win32'     => '3.57',
+            'Filter::Util::Call'    => '1.55',
+            'Hash::Util'            => '0.19',
+            'Module::CoreList'      => '5.20150820',
+            'Module::CoreList::TieHashDelta'=> '5.20150820',
+            'Module::CoreList::Utils'=> '5.20150820',
+            'POSIX'                 => '1.56',
+            'Term::Cap'             => '1.17',
+            'Unicode::UCD'          => '0.62',
+            'perlfaq'               => '5.021010',
+        },
+        removed => {
+        }
+    },
 );
 
 sub is_core
@@ -12221,6 +12260,13 @@ for my $version (sort { $a <=> $b } keys %delta) {
         removed => {
         }
     },
+    5.023002 => {
+        delta_from => 5.023001,
+        changed => {
+        },
+        removed => {
+        }
+    },
 );
 
 for my $version (sort { $a <=> $b } keys %deprecated) {
index f60f5cd..1f2c8ab 100644 (file)
@@ -3,7 +3,7 @@ package Module::CoreList::TieHashDelta;
 use strict;
 use vars qw($VERSION);
 
-$VERSION = '5.20150720';
+$VERSION = '5.20150820';
 
 sub TIEHASH {
     my ($class, $changed, $removed, $parent) = @_;
index 3141a87..bfc1800 100644 (file)
@@ -6,7 +6,7 @@ use vars qw[$VERSION %utilities];
 use Module::CoreList;
 use Module::CoreList::TieHashDelta;
 
-$VERSION = '5.20150720';
+$VERSION = '5.20150820';
 
 sub utilities {
     my $perl = shift;
@@ -1066,6 +1066,13 @@ my %delta = (
         removed => {
         }
     },
+    5.023002 => {
+        delta_from => 5.023001,
+        changed => {
+        },
+        removed => {
+        }
+    },
 );
 
 for my $version (sort { $a <=> $b } keys %delta) {
index 49cc4c1..0765de4 100644 (file)
@@ -3,7 +3,7 @@ use strict;
 use Exporter;
 use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 my $xs_version = $VERSION;
 $VERSION =~ tr/_//;
 
@@ -600,20 +600,23 @@ sub _vms_abs_path {
 }
 
 sub _os2_cwd {
-    $ENV{'PWD'} = `cmd /c cd`;
-    chomp $ENV{'PWD'};
-    $ENV{'PWD'} =~ s:\\:/:g ;
-    return $ENV{'PWD'};
+    my $pwd = `cmd /c cd`;
+    chomp $pwd;
+    $pwd =~ s:\\:/:g ;
+    $ENV{'PWD'} = $pwd;
+    return $pwd;
 }
 
 sub _win32_cwd_simple {
-    $ENV{'PWD'} = `cd`;
-    chomp $ENV{'PWD'};
-    $ENV{'PWD'} =~ s:\\:/:g ;
-    return $ENV{'PWD'};
+    my $pwd = `cd`;
+    chomp $pwd;
+    $pwd =~ s:\\:/:g ;
+    $ENV{'PWD'} = $pwd;
+    return $pwd;
 }
 
 sub _win32_cwd {
+    my $pwd;
     # Need to avoid taking any sort of reference to the typeglob or the code in
     # the optree, so that this tests the runtime state of things, as the
     # ExtUtils::MakeMaker tests for "miniperl" need to be able to fake things at
@@ -622,35 +625,38 @@ sub _win32_cwd {
     # problems (for reasons that we haven't been able to get to the bottom of -
     # rt.cpan.org #56225)
     if (*{$DynaLoader::{boot_DynaLoader}}{CODE}) {
-       $ENV{'PWD'} = Win32::GetCwd();
+       $pwd = Win32::GetCwd();
     }
     else { # miniperl
-       chomp($ENV{'PWD'} = `cd`);
+       chomp($pwd = `cd`);
     }
-    $ENV{'PWD'} =~ s:\\:/:g ;
-    return $ENV{'PWD'};
+    $pwd =~ s:\\:/:g ;
+    $ENV{'PWD'} = $pwd;
+    return $pwd;
 }
 
 *_NT_cwd = defined &Win32::GetCwd ? \&_win32_cwd : \&_win32_cwd_simple;
 
 sub _dos_cwd {
+    my $pwd;
     if (!defined &Dos::GetCwd) {
-        $ENV{'PWD'} = `command /c cd`;
-        chomp $ENV{'PWD'};
-        $ENV{'PWD'} =~ s:\\:/:g ;
+        chomp($pwd = `command /c cd`);
+        $pwd =~ s:\\:/:g ;
     } else {
-        $ENV{'PWD'} = Dos::GetCwd();
+        $pwd = Dos::GetCwd();
     }
-    return $ENV{'PWD'};
+    $ENV{'PWD'} = $pwd;
+    return $pwd;
 }
 
 sub _qnx_cwd {
        local $ENV{PATH} = '';
        local $ENV{CDPATH} = '';
        local $ENV{ENV} = '';
-    $ENV{'PWD'} = `/usr/bin/fullpath -t`;
-    chomp $ENV{'PWD'};
-    return $ENV{'PWD'};
+    my $pwd = `/usr/bin/fullpath -t`;
+    chomp $pwd;
+    $ENV{'PWD'} = $pwd;
+    return $pwd;
 }
 
 sub _qnx_abs_path {
@@ -669,8 +675,7 @@ sub _qnx_abs_path {
 }
 
 sub _epoc_cwd {
-    $ENV{'PWD'} = EPOC::getcwd();
-    return $ENV{'PWD'};
+    return $ENV{'PWD'} = EPOC::getcwd();
 }
 
 
index 8c77c98..2f35526 100644 (file)
@@ -3,7 +3,7 @@ package File::Spec;
 use strict;
 use vars qw(@ISA $VERSION);
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 $VERSION =~ tr/_//;
 
 my %module = (MacOS   => 'Mac',
index 1b77e6a..e5839e9 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use vars qw(@ISA $VERSION);
 require File::Spec::Unix;
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 $VERSION =~ tr/_//;
 
 @ISA = qw(File::Spec::Unix);
index 7bc3867..390a641 100644 (file)
@@ -3,7 +3,7 @@ package File::Spec::Epoc;
 use strict;
 use vars qw($VERSION @ISA);
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 $VERSION =~ tr/_//;
 
 require File::Spec::Unix;
index 8eafe24..5c2cec0 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 
 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 $VERSION =~ tr/_//;
 
 require Exporter;
index 02cae14..7cc816f 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use vars qw(@ISA $VERSION);
 require File::Spec::Unix;
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 $VERSION =~ tr/_//;
 
 @ISA = qw(File::Spec::Unix);
index fb8f101..8d3951f 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use vars qw(@ISA $VERSION);
 require File::Spec::Unix;
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 $VERSION =~ tr/_//;
 
 @ISA = qw(File::Spec::Unix);
index f76b29e..48e2b60 100644 (file)
@@ -3,7 +3,7 @@ package File::Spec::Unix;
 use strict;
 use vars qw($VERSION);
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 my $xs_version = $VERSION;
 $VERSION =~ tr/_//;
 
index 254f524..5e4a3b3 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use vars qw(@ISA $VERSION);
 require File::Spec::Unix;
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 $VERSION =~ tr/_//;
 
 @ISA = qw(File::Spec::Unix);
index 53f3854..77e0fed 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use vars qw(@ISA $VERSION);
 require File::Spec::Unix;
 
-$VERSION = '3.56';
+$VERSION = '3.57';
 $VERSION =~ tr/_//;
 
 @ISA = qw(File::Spec::Unix);
index 008f602..899cc89 100644 (file)
@@ -48,7 +48,7 @@ WriteMakefile(
         resources   => {
             repository  => 'git://perl5.git.perl.org/perl.git',
             license     => 'http://dev.perl.org/licenses/',
-            homepage    => 'https://metacpan.org/module/Math::BigInt',
+            homepage    => 'https://metacpan.org/module/XSLoader',
             irc         => 'irc://irc.perl.org/#p5p',
             mailinglist => 'http://lists.perl.org/list/perl5-porters.html',
             bugtracker  => "https://rt.perl.org/rt3/Search/Results.html?Query=Queue='perl5' AND Content LIKE 'module=XSLoader' AND (Status='open' OR Status='new' OR Status='stalled')",
diff --git a/doio.c b/doio.c
index ecfe3db..39e5ce7 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -2522,7 +2522,7 @@ Perl_do_shmio(pTHX_ I32 optype, SV **mark, SV **sp)
 Function called by C<do_readline> to spawn a glob (or do the glob inside
 perl on VMS).  This code used to be inline, but now perl uses C<File::Glob>
 this glob starter is only used by miniperl during the build process.
-Moving it away shrinks pp_hot.c; shrinking pp_hot.c helps speed perl up.
+Moving it away shrinks F<pp_hot.c>; shrinking F<pp_hot.c> helps speed perl up.
 
 =cut
 */
diff --git a/doop.c b/doop.c
index 22e614a..19fe310 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -1263,8 +1263,7 @@ Perl_do_kv(pTHX)
            XPUSHs(sv);
        }
        if (dovalues) {
-           SV *tmpstr;
-           tmpstr = hv_iterval(keys,entry);
+           SV *tmpstr = hv_iterval(keys,entry);
            DEBUG_H(Perl_sv_setpvf(aTHX_ tmpstr, "%lu%%%d=%lu",
                            (unsigned long)HeHASH(entry),
                            (int)HvMAX(keys)+1,
similarity index 53%
rename from dquote_static.c
rename to dquote.c
index 885ba06..9d35f20 100644 (file)
+++ b/dquote.c
@@ -1,46 +1,21 @@
-/*    dquote_static.c
+/*    dquote.c
  *
- * This file contains static functions that are related to
- * parsing double-quotish expressions, but are used in more than
- * one file.
+ * This file contains functions that are related to
+ * parsing double-quotish expressions.
  *
- * It is currently #included by regcomp.c and toke.c.
 */
 
-#define PERL_IN_DQUOTE_STATIC_C
-#include "embed.h"
-
-/*
- - regcurly - a little FSA that accepts {\d+,?\d*}
-    Pulled from regcomp.c.
- */
-PERL_STATIC_INLINE I32
-S_regcurly(const char *s)
-{
-    PERL_ARGS_ASSERT_REGCURLY;
-
-    if (*s++ != '{')
-       return FALSE;
-    if (!isDIGIT(*s))
-       return FALSE;
-    while (isDIGIT(*s))
-       s++;
-    if (*s == ',') {
-       s++;
-       while (isDIGIT(*s))
-           s++;
-    }
-
-    return *s == '}';
-}
+#include "EXTERN.h"
+#define PERL_IN_DQUOTE_C
+#include "perl.h"
 
 /* XXX Add documentation after final interface and behavior is decided */
-/* May want to show context for error, so would pass Perl_bslash_c(pTHX_ const char* current, const char* start, const bool output_warning)
+/* May want to show context for error, so would pass S_grok_bslash_c(pTHX_ const char* current, const char* start, const bool output_warning)
     U8 source = *current;
 */
 
-STATIC char
-S_grok_bslash_c(pTHX_ const char source, const bool output_warning)
+char
+Perl_grok_bslash_c(pTHX_ const char source, const bool output_warning)
 {
 
     U8 result;
@@ -79,8 +54,8 @@ S_grok_bslash_c(pTHX_ const char source, const bool output_warning)
     return result;
 }
 
-STATIC bool
-S_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg,
+bool
+Perl_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg,
                       const bool output_warning, const bool strict,
                       const bool silence_non_portable,
                       const bool UTF)
@@ -190,132 +165,8 @@ S_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg,
     return TRUE;
 }
 
-PERL_STATIC_INLINE bool
-S_grok_bslash_x(pTHX_ char **s, UV *uv, const char** error_msg,
-                      const bool output_warning, const bool strict,
-                      const bool silence_non_portable,
-                      const bool UTF)
-{
-
-/*  Documentation to be supplied when interface nailed down finally
- *  This returns FALSE if there is an error which the caller need not recover
- *  from; otherwise TRUE.
- *  It guarantees that the returned codepoint, *uv, when expressed as
- *  utf8 bytes, would fit within the skipped "\x{...}" bytes.
- *
- *  On input:
- *     s   is the address of a pointer to a NULL terminated string that begins
- *         with 'x', and the previous character was a backslash.  At exit, *s
- *         will be advanced to the byte just after those absorbed by this
- *         function.  Hence the caller can continue parsing from there.  In
- *         the case of an error, this routine has generally positioned *s to
- *         point just to the right of the first bad spot, so that a message
- *         that has a "<--" to mark the spot will be correctly positioned.
- *     uv  points to a UV that will hold the output value, valid only if the
- *         return from the function is TRUE
- *      error_msg is a pointer that will be set to an internal buffer giving an
- *         error message upon failure (the return is FALSE).  Untouched if
- *         function succeeds
- *     output_warning says whether to output any warning messages, or suppress
- *         them
- *     strict is true if anything out of the ordinary should cause this to
- *         fail instead of warn or be silent.  For example, it requires
- *         exactly 2 digits following the \x (when there are no braces).
- *         3 digits could be a mistake, so is forbidden in this mode.
- *      silence_non_portable is true if to suppress warnings about the code
- *          point returned being too large to fit on all platforms.
- *     UTF is true iff the string *s is encoded in UTF-8.
- */
-    char* e;
-    STRLEN numbers_len;
-    I32 flags = PERL_SCAN_DISALLOW_PREFIX;
-#ifdef DEBUGGING
-    char *start = *s - 1;
-    assert(*start == '\\');
-#endif
-
-    PERL_ARGS_ASSERT_GROK_BSLASH_X;
-
-    assert(**s == 'x');
-    (*s)++;
-
-    if (strict || ! output_warning) {
-        flags |= PERL_SCAN_SILENT_ILLDIGIT;
-    }
-
-    if (**s != '{') {
-        STRLEN len = (strict) ? 3 : 2;
-
-       *uv = grok_hex(*s, &len, &flags, NULL);
-       *s += len;
-        if (strict && len != 2) {
-            if (len < 2) {
-                *s += (UTF) ? UTF8SKIP(*s) : 1;
-                *error_msg = "Non-hex character";
-            }
-            else {
-                *error_msg = "Use \\x{...} for more than two hex characters";
-            }
-            return FALSE;
-        }
-       goto ok;
-    }
-
-    e = strchr(*s, '}');
-    if (!e) {
-        (*s)++;  /* Move past the '{' */
-        while (isXDIGIT(**s)) { /* Position beyond the legal digits */
-            (*s)++;
-        }
-        /* XXX The corresponding message above for \o is just '\\o{'; other
-         * messages for other constructs include the '}', so are inconsistent.
-         */
-       *error_msg = "Missing right brace on \\x{}";
-       return FALSE;
-    }
-
-    (*s)++;    /* Point to expected first digit (could be first byte of utf8
-                  sequence if not a digit) */
-    numbers_len = e - *s;
-    if (numbers_len == 0) {
-        if (strict) {
-            (*s)++;    /* Move past the } */
-            *error_msg = "Number with no digits";
-            return FALSE;
-        }
-        *s = e + 1;
-        *uv = 0;
-        goto ok;
-    }
-
-    flags |= PERL_SCAN_ALLOW_UNDERSCORES;
-    if (silence_non_portable) {
-        flags |= PERL_SCAN_SILENT_NON_PORTABLE;
-    }
-
-    *uv = grok_hex(*s, &numbers_len, &flags, NULL);
-    /* Note that if has non-hex, will ignore everything starting with that up
-     * to the '}' */
-
-    if (strict && numbers_len != (STRLEN) (e - *s)) {
-        *s += numbers_len;
-        *s += (UTF) ? UTF8SKIP(*s) : 1;
-        *error_msg = "Non-hex character";
-        return FALSE;
-    }
-
-    /* Return past the '}' */
-    *s = e + 1;
-
-  ok:
-    /* guarantee replacing "\x{...}" with utf8 bytes fits within
-     * existing space */
-    assert(OFFUNISKIP(*uv) < *s - start);
-    return TRUE;
-}
-
-STATIC char*
-S_form_short_octal_warning(pTHX_
+char*
+Perl_form_short_octal_warning(pTHX_
                            const char * const s, /* Points to first non-octal */
                            const STRLEN len      /* Length of octals string, so
                                                     (s-len) points to first
diff --git a/dquote_inline.h b/dquote_inline.h
new file mode 100644 (file)
index 0000000..d8548bf
--- /dev/null
@@ -0,0 +1,160 @@
+/*    dquote_inline.h
+ *
+ *    Copyright (C) 2015 by Larry Wall and others
+ *
+ *    You may distribute under the terms of either the GNU General Public
+ *    License or the Artistic License, as specified in the README file.
+ */
+
+#ifndef DQUOTE_INLINE_H /* Guard against nested #inclusion */
+#define DQUOTE_INLINE_H
+
+/*
+ - regcurly - a little FSA that accepts {\d+,?\d*}
+    Pulled from reg.c.
+ */
+PERL_STATIC_INLINE I32
+S_regcurly(const char *s)
+{
+    PERL_ARGS_ASSERT_REGCURLY;
+
+    if (*s++ != '{')
+       return FALSE;
+    if (!isDIGIT(*s))
+       return FALSE;
+    while (isDIGIT(*s))
+       s++;
+    if (*s == ',') {
+       s++;
+       while (isDIGIT(*s))
+           s++;
+    }
+
+    return *s == '}';
+}
+
+PERL_STATIC_INLINE bool
+S_grok_bslash_x(pTHX_ char **s, UV *uv, const char** error_msg,
+                      const bool output_warning, const bool strict,
+                      const bool silence_non_portable,
+                      const bool UTF)
+{
+
+/*  Documentation to be supplied when interface nailed down finally
+ *  This returns FALSE if there is an error which the caller need not recover
+ *  from; otherwise TRUE.
+ *  It guarantees that the returned codepoint, *uv, when expressed as
+ *  utf8 bytes, would fit within the skipped "\x{...}" bytes.
+ *
+ *  On input:
+ *     s   is the address of a pointer to a NULL terminated string that begins
+ *         with 'x', and the previous character was a backslash.  At exit, *s
+ *         will be advanced to the byte just after those absorbed by this
+ *         function.  Hence the caller can continue parsing from there.  In
+ *         the case of an error, this routine has generally positioned *s to
+ *         point just to the right of the first bad spot, so that a message
+ *         that has a "<--" to mark the spot will be correctly positioned.
+ *     uv  points to a UV that will hold the output value, valid only if the
+ *         return from the function is TRUE
+ *      error_msg is a pointer that will be set to an internal buffer giving an
+ *         error message upon failure (the return is FALSE).  Untouched if
+ *         function succeeds
+ *     output_warning says whether to output any warning messages, or suppress
+ *         them
+ *     strict is true if anything out of the ordinary should cause this to
+ *         fail instead of warn or be silent.  For example, it requires
+ *         exactly 2 digits following the \x (when there are no braces).
+ *         3 digits could be a mistake, so is forbidden in this mode.
+ *      silence_non_portable is true if to suppress warnings about the code
+ *          point returned being too large to fit on all platforms.
+ *     UTF is true iff the string *s is encoded in UTF-8.
+ */
+    char* e;
+    STRLEN numbers_len;
+    I32 flags = PERL_SCAN_DISALLOW_PREFIX;
+#ifdef DEBUGGING
+    char *start = *s - 1;
+    assert(*start == '\\');
+#endif
+
+    PERL_ARGS_ASSERT_GROK_BSLASH_X;
+
+    assert(**s == 'x');
+    (*s)++;
+
+    if (strict || ! output_warning) {
+        flags |= PERL_SCAN_SILENT_ILLDIGIT;
+    }
+
+    if (**s != '{') {
+        STRLEN len = (strict) ? 3 : 2;
+
+       *uv = grok_hex(*s, &len, &flags, NULL);
+       *s += len;
+        if (strict && len != 2) {
+            if (len < 2) {
+                *s += (UTF) ? UTF8SKIP(*s) : 1;
+                *error_msg = "Non-hex character";
+            }
+            else {
+                *error_msg = "Use \\x{...} for more than two hex characters";
+            }
+            return FALSE;
+        }
+       goto ok;
+    }
+
+    e = strchr(*s, '}');
+    if (!e) {
+        (*s)++;  /* Move past the '{' */
+        while (isXDIGIT(**s)) { /* Position beyond the legal digits */
+            (*s)++;
+        }
+        /* XXX The corresponding message above for \o is just '\\o{'; other
+         * messages for other constructs include the '}', so are inconsistent.
+         */
+       *error_msg = "Missing right brace on \\x{}";
+       return FALSE;
+    }
+
+    (*s)++;    /* Point to expected first digit (could be first byte of utf8
+                  sequence if not a digit) */
+    numbers_len = e - *s;
+    if (numbers_len == 0) {
+        if (strict) {
+            (*s)++;    /* Move past the } */
+            *error_msg = "Number with no digits";
+            return FALSE;
+        }
+        *s = e + 1;
+        *uv = 0;
+        goto ok;
+    }
+
+    flags |= PERL_SCAN_ALLOW_UNDERSCORES;
+    if (silence_non_portable) {
+        flags |= PERL_SCAN_SILENT_NON_PORTABLE;
+    }
+
+    *uv = grok_hex(*s, &numbers_len, &flags, NULL);
+    /* Note that if has non-hex, will ignore everything starting with that up
+     * to the '}' */
+
+    if (strict && numbers_len != (STRLEN) (e - *s)) {
+        *s += numbers_len;
+        *s += (UTF) ? UTF8SKIP(*s) : 1;
+        *error_msg = "Non-hex character";
+        return FALSE;
+    }
+
+    /* Return past the '}' */
+    *s = e + 1;
+
+  ok:
+    /* guarantee replacing "\x{...}" with utf8 bytes fits within
+     * existing space */
+    assert(OFFUNISKIP(*uv) < *s - start);
+    return TRUE;
+}
+
+#endif  /* DQUOTE_INLINE_H */
diff --git a/dump.c b/dump.c
index c4d4018..778e345 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -1116,7 +1116,7 @@ Perl_gv_dump(pTHX_ GV *gv)
  */
 
 static const struct { const char type; const char *name; } magic_names[] = {
-#include "mg_names.c"
+#include "mg_names.inc"
        /* this null string terminates the list */
        { 0,                         NULL },
 };
@@ -2032,7 +2032,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
        Perl_dump_indent(aTHX_ level, file, "    GPFLAGS = 0x%"UVxf
                                            " (%s)\n",
                               (UV)GvGPFLAGS(sv),
-                              GvALIASED_SV(sv) ? "ALIASED_SV" : "");
+                              "");
        Perl_dump_indent(aTHX_ level, file, "    LINE = %"IVdf"\n", (IV)GvLINE(sv));
        Perl_dump_indent(aTHX_ level, file, "    FILE = \"%s\"\n", GvFILE(sv));
        do_gv_dump (level, file, "    EGV", GvEGV(sv));
index af63435..12c0551 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -798,22 +798,22 @@ p |OP*    |localize       |NN OP *o|I32 lex
 ApdR   |I32    |looks_like_number|NN SV *const sv
 Apd    |UV     |grok_bin       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-EMsR   |char   |grok_bslash_c  |const char source|const bool output_warning
-EMsR   |bool   |grok_bslash_o  |NN char** s|NN UV* uv           \
+EMiR   |bool   |grok_bslash_x  |NN char** s|NN UV* uv           \
                                |NN const char** error_msg       \
                                |const bool output_warning       \
                                |const bool strict               \
                                |const bool silence_non_portable \
                                |const bool utf8
-EMiR   |bool   |grok_bslash_x  |NN char** s|NN UV* uv           \
+#endif
+EMpRX  |char   |grok_bslash_c  |const char source|const bool output_warning
+EMpRX  |bool   |grok_bslash_o  |NN char** s|NN UV* uv           \
                                |NN const char** error_msg       \
                                |const bool output_warning       \
                                |const bool strict               \
                                |const bool silence_non_portable \
                                |const bool utf8
-EMsPR  |char*|form_short_octal_warning|NN const char * const s  \
+EMpPRX |char*|form_short_octal_warning|NN const char * const s  \
                                |const STRLEN len
-#endif
 Apd    |UV     |grok_hex       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
 Apd    |int    |grok_infnan    |NN const char** sp|NN const char *send
 Apd    |int    |grok_number    |NN const char *pv|STRLEN len|NULLOK UV *valuep
@@ -962,9 +962,6 @@ ADMnoPR     |UV     |ASCII_TO_NEED  |const UV enc|const UV ch
 Apa    |OP*    |newANONLIST    |NULLOK OP* o
 Apa    |OP*    |newANONHASH    |NULLOK OP* o
 Ap     |OP*    |newANONSUB     |I32 floor|NULLOK OP* proto|NULLOK OP* block
-#if defined(PERL_IN_OP_C)
-i      |bool   |aassign_common_vars    |NULLOK OP* o
-#endif
 Apda   |OP*    |newASSIGNOP    |I32 flags|NULLOK OP* left|I32 optype|NULLOK OP* right
 Apda   |OP*    |newCONDOP      |I32 flags|NN OP* first|NULLOK OP* trueop|NULLOK OP* falseop
 Apd    |CV*    |newCONSTSUB    |NULLOK HV* stash|NULLOK const char* name|NULLOK SV* sv
@@ -1260,7 +1257,6 @@ Ap        |void   |savestack_grow_cnt     |I32 need
 Amp    |void   |save_aelem     |NN AV* av|SSize_t idx|NN SV **sptr
 Ap     |void   |save_aelem_flags|NN AV* av|SSize_t idx|NN SV **sptr \
                                 |const U32 flags
-p      |void   |save_aliased_sv|NN GV* gv
 Ap     |I32    |save_alloc     |I32 size|I32 pad
 Ap     |void   |save_aptr      |NN AV** aptr
 Ap     |AV*    |save_ary       |NN GV* gv
@@ -2745,7 +2741,7 @@ so        |void   |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \
 #endif
 Xpon   |I32    |xs_handshake   |const U32 key|NN void * v_my_perl\
                                |NN const char * file| ...
-Xp     |void   |xs_boot_epilog |const U32 ax
+Xp     |void   |xs_boot_epilog |const I32 ax
 #ifndef HAS_STRLCAT
 Apnod  |Size_t |my_strlcat     |NULLOK char *dst|NULLOK const char *src|Size_t size
 #endif
diff --git a/embed.h b/embed.h
index 5963253..0611ea9 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define av_reify(a)            Perl_av_reify(aTHX_ a)
 #define current_re_engine()    Perl_current_re_engine(aTHX)
 #define cv_ckproto_len_flags(a,b,c,d,e)        Perl_cv_ckproto_len_flags(aTHX_ a,b,c,d,e)
+#define form_short_octal_warning(a,b)  Perl_form_short_octal_warning(aTHX_ a,b)
 #define grok_atoUV             Perl_grok_atoUV
+#define grok_bslash_c(a,b)     Perl_grok_bslash_c(aTHX_ a,b)
+#define grok_bslash_o(a,b,c,d,e,f,g)   Perl_grok_bslash_o(aTHX_ a,b,c,d,e,f,g)
 #define mg_find_mglob(a)       Perl_mg_find_mglob(aTHX_ a)
 #define multideref_stringify(a,b)      Perl_multideref_stringify(aTHX_ a,b)
 #define op_clear(a)            Perl_op_clear(aTHX_ a)
 #define _core_swash_init(a,b,c,d,e,f,g)        Perl__core_swash_init(aTHX_ a,b,c,d,e,f,g)
 #  endif
 #  if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-#define form_short_octal_warning(a,b)  S_form_short_octal_warning(aTHX_ a,b)
-#define grok_bslash_c(a,b)     S_grok_bslash_c(aTHX_ a,b)
-#define grok_bslash_o(a,b,c,d,e,f,g)   S_grok_bslash_o(aTHX_ a,b,c,d,e,f,g)
 #define grok_bslash_x(a,b,c,d,e,f,g)   S_grok_bslash_x(aTHX_ a,b,c,d,e,f,g)
 #define regcurly               S_regcurly
 #  endif
 #define rsignal_restore(a,b)   Perl_rsignal_restore(aTHX_ a,b)
 #define rsignal_save(a,b,c)    Perl_rsignal_save(aTHX_ a,b,c)
 #define rxres_save(a,b)                Perl_rxres_save(aTHX_ a,b)
-#define save_aliased_sv(a)     Perl_save_aliased_sv(aTHX_ a)
 #define save_strlen(a)         Perl_save_strlen(aTHX_ a)
 #define sawparens(a)           Perl_sawparens(aTHX_ a)
 #define scalar(a)              Perl_scalar(aTHX_ a)
 #define mro_get_linear_isa_dfs(a,b)    S_mro_get_linear_isa_dfs(aTHX_ a,b)
 #  endif
 #  if defined(PERL_IN_OP_C)
-#define aassign_common_vars(a) S_aassign_common_vars(aTHX_ a)
 #define apply_attrs(a,b,c)     S_apply_attrs(aTHX_ a,b,c)
 #define apply_attrs_my(a,b,c,d)        S_apply_attrs_my(aTHX_ a,b,c,d)
 #define assignment_type(a)     S_assignment_type(aTHX_ a)
index 9ed30e0..c6213c0 100644 (file)
 #define PL_savestack           (vTHX->Isavestack)
 #define PL_savestack_ix                (vTHX->Isavestack_ix)
 #define PL_savestack_max       (vTHX->Isavestack_max)
-#define PL_sawalias            (vTHX->Isawalias)
 #ifndef PL_sawampersand
 #define PL_sawampersand                (vTHX->Isawampersand)
 #endif
index 1420f91..4638c3e 100644 (file)
@@ -209,12 +209,6 @@ is($gv_ref->SAFENAME(), "gv", "Test SAFENAME()");
 like($gv_ref->FILE(), qr/b\.t$/, "Testing FILE()");
 is($gv_ref->SvTYPE(), B::SVt_PVGV, "Test SvTYPE()");
 is($gv_ref->FLAGS() & B::SVTYPEMASK, B::SVt_PVGV, "Test SVTYPEMASK");
-is($gv_ref->GPFLAGS & B::GPf_ALIASED_SV, 0, 'GPFLAGS are unset');
-{
-    local *gv = \my $x;
-    is($gv_ref->GPFLAGS & B::GPf_ALIASED_SV, B::GPf_ALIASED_SV,
-        'GPFLAGS gets GPf_ALIASED_SV set');
-}    
 
 # The following return B::SPECIALs.
 is(ref B::sv_yes(), "B::SPECIAL", "B::sv_yes()");
index 4f19427..a1cbc38 100644 (file)
@@ -59,7 +59,7 @@ checkOptree(note   => q{},
 # a  <0> pushmark s
 # b  <#> gv[*chars] s
 # c  <1> rv2av[t2] lKRM*/1
-# d  <2> aassign[t9] KS/COMMON
+# d  <2> aassign[t9] KS/COM_AGG
 # e  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 559 (eval 15):1) v
@@ -75,7 +75,7 @@ EOT_EOT
 # a  <0> pushmark s
 # b  <$> gv(*chars) s
 # c  <1> rv2av[t1] lKRM*/1
-# d  <2> aassign[t6] KS/COMMON
+# d  <2> aassign[t6] KS/COM_AGG
 # e  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -109,7 +109,7 @@ checkOptree(note   => q{},
 # g  <0> pushmark s
 # h  <#> gv[*hash] s
 # i  <1> rv2hv lKRM*/1
-# j  <2> aassign[t10] KS/COMMON
+# j  <2> aassign[t10] KS/COM_AGG
 # k  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 560 (eval 15):1) v:{
@@ -131,7 +131,7 @@ EOT_EOT
 # g  <0> pushmark s
 # h  <$> gv(*hash) s
 # i  <1> rv2hv lKRM*/1
-# j  <2> aassign[t5] KS/COMMON
+# j  <2> aassign[t5] KS/COM_AGG
 # k  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -244,7 +244,7 @@ checkOptree(note   => q{},
 # b  <0> pushmark s
 # c  <#> gv[*hash] s
 # d  <1> rv2hv lKRM*/1
-# e  <2> aassign[t10] KS/COMMON
+# e  <2> aassign[t10] KS/COM_AGG
 # f  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 560 (eval 15):1) v
@@ -261,7 +261,7 @@ EOT_EOT
 # b  <0> pushmark s
 # c  <$> gv(*hash) s
 # d  <1> rv2hv lKRM*/1
-# e  <2> aassign[t6] KS/COMMON
+# e  <2> aassign[t6] KS/COM_AGG
 # f  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -290,7 +290,7 @@ checkOptree(note   => q{},
 # b  <0> pushmark s
 # c  <#> gv[*hash] s
 # d  <1> rv2hv lKRM*/1
-# e  <2> aassign[t10] KS/COMMON
+# e  <2> aassign[t10] KS/COM_AGG
 # f  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 560 (eval 15):1) v
@@ -307,7 +307,7 @@ EOT_EOT
 # b  <0> pushmark s
 # c  <$> gv(*hash) s
 # d  <1> rv2hv lKRM*/1
-# e  <2> aassign[t6] KS/COMMON
+# e  <2> aassign[t6] KS/COM_AGG
 # f  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -336,7 +336,7 @@ checkOptree(note   => q{},
 # b  <0> pushmark s
 # c  <#> gv[*hash] s
 # d  <1> rv2hv lKRM*/1
-# e  <2> aassign[t9] KS/COMMON
+# e  <2> aassign[t9] KS/COM_AGG
 # f  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 589 (eval 26):1) v
@@ -353,7 +353,7 @@ EOT_EOT
 # b  <0> pushmark s
 # c  <$> gv(*hash) s
 # d  <1> rv2hv lKRM*/1
-# e  <2> aassign[t5] KS/COMMON
+# e  <2> aassign[t5] KS/COM_AGG
 # f  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -382,7 +382,7 @@ checkOptree(note   => q{},
 # b  <0> pushmark s
 # c  <#> gv[*hash] s
 # d  <1> rv2hv lKRM*/1
-# e  <2> aassign[t8] KS/COMMON
+# e  <2> aassign[t8] KS/COM_AGG
 # f  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 593 (eval 28):1) v
@@ -399,7 +399,7 @@ EOT_EOT
 # b  <0> pushmark s
 # c  <$> gv(*hash) s
 # d  <1> rv2hv lKRM*/1
-# e  <2> aassign[t5] KS/COMMON
+# e  <2> aassign[t5] KS/COM_AGG
 # f  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -427,7 +427,7 @@ checkOptree(note   => q{},
 # a  <0> pushmark s
 # b  <#> gv[*hash] s
 # c  <1> rv2hv lKRM*/1
-# d  <2> aassign[t6] KS/COMMON
+# d  <2> aassign[t6] KS/COM_AGG
 # e  <#> gv[*array] s
 # f  <1> rv2av[t8] K/1
 # g  <@> list K
@@ -446,7 +446,7 @@ EOT_EOT
 # a  <0> pushmark s
 # b  <$> gv(*hash) s
 # c  <1> rv2hv lKRM*/1
-# d  <2> aassign[t4] KS/COMMON
+# d  <2> aassign[t4] KS/COM_AGG
 # e  <$> gv(*array) s
 # f  <1> rv2av[t5] K/1
 # g  <@> list K
@@ -480,7 +480,7 @@ checkOptree(note   => q{},
 # d  <0> pushmark s
 # e  <#> gv[*hashes] s
 # f  <1> rv2av[t2] lKRM*/1
-# g  <2> aassign[t8] KS/COMMON
+# g  <2> aassign[t8] KS/COM_AGG
 # h  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 601 (eval 32):1) v
@@ -499,6 +499,6 @@ EOT_EOT
 # d  <0> pushmark s
 # e  <$> gv(*hashes) s
 # f  <1> rv2av[t1] lKRM*/1
-# g  <2> aassign[t5] KS/COMMON
+# g  <2> aassign[t5] KS/COM_AGG
 # h  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
index 55811ed..eda5a21 100644 (file)
@@ -60,7 +60,7 @@ checkOptree(note   => q{},
 # 7  <0> pushmark s
 # 8  <#> gv[*articles] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t5] KS
+# a  <2> aassign[t5] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 545 (eval 15):1) v
@@ -72,7 +72,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*articles) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t3] KS
+# a  <2> aassign[t3] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -97,7 +97,7 @@ checkOptree(note   => q{},
 # 7  <0> pushmark s
 # 8  <#> gv[*articles] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t3] KS
+# a  <2> aassign[t3] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -109,7 +109,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*articles) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t2] KS
+# a  <2> aassign[t2] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -135,7 +135,7 @@ checkOptree(note   => q{},
 # 7  <0> pushmark s
 # 8  <#> gv[*articles] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t10] KS
+# a  <2> aassign[t10] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -148,7 +148,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*articles) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t6] KS
+# a  <2> aassign[t6] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -173,7 +173,7 @@ checkOptree(note   => q{},
 # 7  <0> pushmark s
 # 8  <#> gv[*articles] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t3] KS
+# a  <2> aassign[t3] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -185,7 +185,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*articles) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t2] KS
+# a  <2> aassign[t2] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -210,7 +210,7 @@ checkOptree(note   => q{},
 # 7  <0> pushmark s
 # 8  <#> gv[*articles] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t3] KS
+# a  <2> aassign[t3] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -222,7 +222,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*articles) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t2] KS
+# a  <2> aassign[t2] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -247,7 +247,7 @@ checkOptree(note   => q{},
 # 7  <0> pushmark s
 # 8  <#> gv[*articles] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t3] KS
+# a  <2> aassign[t3] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -259,7 +259,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*articles) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t2] KS
+# a  <2> aassign[t2] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -288,7 +288,7 @@ checkOptree(note   => q{},
 # 8  <0> pushmark s
 # 9  <#> gv[*eldest] s
 # a  <1> rv2av[t2] lKRM*/1
-# b  <2> aassign[t11] KS/COMMON
+# b  <2> aassign[t11] KS/COM_AGG
 # c  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -303,7 +303,7 @@ EOT_EOT
 # 8  <0> pushmark s
 # 9  <$> gv(*eldest) s
 # a  <1> rv2av[t1] lKRM*/1
-# b  <2> aassign[t5] KS/COMMON
+# b  <2> aassign[t5] KS/COM_AGG
 # c  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -333,7 +333,7 @@ checkOptree(note   => q{},
 # 8  <0> pushmark s
 # 9  <#> gv[*sortedclass] s
 # a  <1> rv2av[t2] lKRM*/1
-# b  <2> aassign[t5] KS
+# b  <2> aassign[t5] KS/COM_AGG
 # c  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -347,7 +347,7 @@ EOT_EOT
 # 8  <0> pushmark s
 # 9  <$> gv(*sortedclass) s
 # a  <1> rv2av[t1] lKRM*/1
-# b  <2> aassign[t3] KS
+# b  <2> aassign[t3] KS/COM_AGG
 # c  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -530,7 +530,7 @@ checkOptree(name   => q{Compound sort/map Expression },
 # n  <0> pushmark s
 # o  <#> gv[*new] s
 # p  <1> rv2av[t2] lKRM*/1
-# q  <2> aassign[t22] KS/COMMON
+# q  <2> aassign[t22] KS/COM_AGG
 # r  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 609 (eval 34):3) v:{
@@ -560,7 +560,7 @@ EOT_EOT
 # n  <0> pushmark s
 # o  <$> gv(*new) s
 # p  <1> rv2av[t1] lKRM*/1
-# q  <2> aassign[t13] KS/COMMON
+# q  <2> aassign[t13] KS/COM_AGG
 # r  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -592,7 +592,7 @@ checkOptree(name   => q{sort other::sub LIST },
 # 8  <0> pushmark s
 # 9  <#> gv[*new] s
 # a  <1> rv2av[t2] lKRM*/1
-# b  <2> aassign[t5] KS
+# b  <2> aassign[t5] KS/COM_AGG
 # c  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 614 (eval 36):2) v:{
@@ -606,7 +606,7 @@ EOT_EOT
 # 8  <0> pushmark s
 # 9  <$> gv(*new) s
 # a  <1> rv2av[t1] lKRM*/1
-# b  <2> aassign[t3] KS
+# b  <2> aassign[t3] KS/COM_AGG
 # c  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -634,7 +634,7 @@ checkOptree(note   => q{},
 # 8  <0> pushmark s
 # 9  <#> gv[*new] s
 # a  <1> rv2av[t2] lKRM*/1
-# b  <2> aassign[t5] KS
+# b  <2> aassign[t5] KS/COM_AGG
 # c  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -648,7 +648,7 @@ EOT_EOT
 # 8  <0> pushmark s
 # 9  <$> gv(*new) s
 # a  <1> rv2av[t1] lKRM*/1
-# b  <2> aassign[t3] KS
+# b  <2> aassign[t3] KS/COM_AGG
 # c  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -672,7 +672,7 @@ my ($expect, $expect_nt) = (<<'EOT_EOT', <<'EONT_EONT');
 # 7  <0> pushmark s
 # 8  <#> gv[*new] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t14] KS
+# a  <2> aassign[t14] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 578 (eval 15):1) v:%,{
@@ -685,7 +685,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*new) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t6] KS
+# a  <2> aassign[t6] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -717,7 +717,7 @@ checkOptree(note   => q{},
 # 7  <0> pushmark s
 # 8  <#> gv[*new] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t14] KS
+# a  <2> aassign[t14] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 578 (eval 15):1) v:%,{
@@ -730,7 +730,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*new) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t6] KS
+# a  <2> aassign[t6] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -756,7 +756,7 @@ checkOptree(note   => q{},
 # 7  <0> pushmark s
 # 8  <#> gv[*articles] s
 # 9  <1> rv2av[t2] lKRM*/1
-# a  <2> aassign[t8] KS
+# a  <2> aassign[t8] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 546 (eval 15):1) v
@@ -769,7 +769,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*articles) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t4] KS
+# a  <2> aassign[t4] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
@@ -803,7 +803,7 @@ checkOptree(note   => q{},
 # d  <0> pushmark s
 # e  <#> gv[*result] s
 # f  <1> rv2av[t2] lKRM*/1
-# g  <2> aassign[t3] KS/COMMON
+# g  <2> aassign[t3] KS/COM_AGG
 # h  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 547 (eval 15):1) v
@@ -824,7 +824,7 @@ EOT_EOT
 # d  <0> pushmark s
 # e  <$> gv(*result) s
 # f  <1> rv2av[t1] lKRM*/1
-# g  <2> aassign[t2] KS/COMMON
+# g  <2> aassign[t2] KS/COM_AGG
 # h  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
     
index 9bfcc49..2d6b80f 100644 (file)
@@ -205,7 +205,7 @@ checkOptree ( name      => 'padrange',
 # -           <0> padsv[$x:1,2] vM/LVINTRO ->-
 # -           <0> padsv[$y:1,2] vM/LVINTRO ->-
 # 3        <;> nextstate(main 2 -e:1) v:>,<,% ->4
-# 8        <2> aassign[t4] vKS ->9
+# 8        <2> aassign[t4] vKS/COM_AGG ->9
 # -           <1> ex-list lKP ->5
 # 4              <0> padrange[$x:1,2; $y:1,2] /2 ->5
 # -              <0> padsv[$x:1,2] s ->-
@@ -215,7 +215,7 @@ checkOptree ( name      => 'padrange',
 # 7              <1> rv2av[t3] lKRM*/1 ->8
 # 6                 <#> gv[*a] s ->7
 # 9        <;> nextstate(main 2 -e:1) v:>,<,%,{ ->a
-# e        <2> aassign[t6] KS ->f
+# e        <2> aassign[t6] KS/COM_RC1 ->f
 # -           <1> ex-list lK ->d
 # a              <0> pushmark s ->b
 # c              <1> rv2av[t5] lK/1 ->d
@@ -233,7 +233,7 @@ EOT_EOT
 # -           <0> padsv[$x:1,2] vM/LVINTRO ->-
 # -           <0> padsv[$y:1,2] vM/LVINTRO ->-
 # 3        <;> nextstate(main 2 -e:1) v:>,<,% ->4
-# 8        <2> aassign[t4] vKS ->9
+# 8        <2> aassign[t4] vKS/COM_AGG ->9
 # -           <1> ex-list lKP ->5
 # 4              <0> padrange[$x:1,2; $y:1,2] /2 ->5
 # -              <0> padsv[$x:1,2] s ->-
@@ -243,7 +243,7 @@ EOT_EOT
 # 7              <1> rv2av[t3] lKRM*/1 ->8
 # 6                 <$> gv(*a) s ->7
 # 9        <;> nextstate(main 2 -e:1) v:>,<,%,{ ->a
-# e        <2> aassign[t6] KS ->f
+# e        <2> aassign[t6] KS/COM_RC1 ->f
 # -           <1> ex-list lK ->d
 # a              <0> pushmark s ->b
 # c              <1> rv2av[t5] lK/1 ->d
@@ -276,7 +276,7 @@ checkOptree ( name      => 'padrange and @_',
 # -              <0> padsv[$a:1,4] sRM*/LVINTRO ->-
 # -              <0> padsv[$b:1,4] sRM*/LVINTRO ->-
 # 4        <;> nextstate(main 2 p3:2) v:>,<,% ->5
-# 9        <2> aassign[t10] vKS ->a
+# 9        <2> aassign[t10] vKS/COM_RC1 ->a
 # -           <1> ex-list lK ->8
 # 5              <0> pushmark s ->6
 # 7              <1> rv2av[t9] lK/1 ->8
@@ -309,7 +309,7 @@ EOT_EOT
 # -              <0> padsv[$a:1,4] sRM*/LVINTRO ->-
 # -              <0> padsv[$b:1,4] sRM*/LVINTRO ->-
 # 4        <;> nextstate(main 2 p3:2) v:>,<,% ->5
-# 9        <2> aassign[t10] vKS ->a
+# 9        <2> aassign[t10] vKS/COM_RC1 ->a
 # -           <1> ex-list lK ->8
 # 5              <0> pushmark s ->6
 # 7              <1> rv2av[t9] lK/1 ->8
index d259bf9..c6288d9 100644 (file)
@@ -437,7 +437,7 @@ checkOptree ( name  => '@foo = grep(!/^\#/, @bar)',
 # a  <0> pushmark s
 # b  <#> gv[*foo] s
 # c  <1> rv2av[t2] lKRM*/1
-# d  <2> aassign[t6] KS
+# d  <2> aassign[t6] KS/COM_AGG
 # e  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 496 (eval 20):1) v:{
@@ -453,7 +453,7 @@ EOT_EOT
 # a  <0> pushmark s
 # b  <$> gv(*foo) s
 # c  <1> rv2av[t1] lKRM*/1
-# d  <2> aassign[t4] KS
+# d  <2> aassign[t4] KS/COM_AGG
 # e  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -485,7 +485,7 @@ checkOptree ( name  => '%h = map { getkey($_) => $_ } @a',
 # h  <#> gv[*h] s
 # i  <1> rv2hv[t2] lKRM*/1         < 5.019006
 # i  <1> rv2hv lKRM*/1             >=5.019006
-# j  <2> aassign[t10] KS/COMMON
+# j  <2> aassign[t10] KS/COM_AGG
 # k  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 501 (eval 22):1) v:{
@@ -509,7 +509,7 @@ EOT_EOT
 # h  <$> gv(*h) s
 # i  <1> rv2hv[t1] lKRM*/1         < 5.019006
 # i  <1> rv2hv lKRM*/1             >=5.019006
-# j  <2> aassign[t5] KS/COMMON
+# j  <2> aassign[t5] KS/COM_AGG
 # k  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
index 660d9b2..0b5897d 100644 (file)
@@ -77,7 +77,7 @@ checkOptree ( name    => 'sub {@a = sort @a}',
 7  <0> pushmark s
 8  <#> gv[*a] s
 9  <1> rv2av[t2] lKRM*/1
-a  <2> aassign[t5] KS/COMMON
+a  <2> aassign[t5] KS/COM_AGG
 b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 65 optree.t:311) v:>,<,%
@@ -89,7 +89,7 @@ EOT_EOT
 # 7  <0> pushmark s
 # 8  <$> gv(*a) s
 # 9  <1> rv2av[t1] lKRM*/1
-# a  <2> aassign[t3] KS/COMMON
+# a  <2> aassign[t3] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
@@ -198,7 +198,7 @@ checkOptree ( name  => 'sub {my @a; @a = sort @a}',
 7  <@> sort lK
 8  <0> pushmark s
 9  <0> padav[@a:-437,-436] lRM*
-a  <2> aassign[t2] KS/COMMON
+a  <2> aassign[t2] KS/COM_AGG
 b  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 427 optree_sort.t:172) v:>,<,%
@@ -210,7 +210,7 @@ EOT_EOT
 # 7  <@> sort lK
 # 8  <0> pushmark s
 # 9  <0> padav[@a:-437,-436] lRM*
-# a  <2> aassign[t2] KS/COMMON
+# a  <2> aassign[t2] KS/COM_AGG
 # b  <1> leavesub[1 ref] K/REFC,1
 EONT_EONT
 
index af2a2e7..a888925 100644 (file)
@@ -3,7 +3,7 @@ use 5.006;
 use strict;
 use warnings;
 use warnings::register;
-our $VERSION = '1.29';
+our $VERSION = '1.30';
 require Exporter;
 require Cwd;
 
@@ -1051,7 +1051,8 @@ following globals available: C<$File::Find::topdir>,
 C<$File::Find::topdev>, C<$File::Find::topino>,
 C<$File::Find::topmode> and C<$File::Find::topnlink>.
 
-This library is useful for the C<find2perl> tool, which when fed,
+This library is useful for the C<find2perl> tool (distribued as part of the
+App-find2perl CPAN distribution), which when fed,
 
     find2perl / -name .nfs\* -mtime +7 \
         -exec rm -f {} \; -o -fstype nfs -prune
index da02510..a947b9a 100644 (file)
@@ -31,10 +31,11 @@ our @EXPORT_OK  = qw(
                      hash_seed hash_value hv_store
                      bucket_stats bucket_stats_formatted bucket_info bucket_array
                      lock_hash_recurse unlock_hash_recurse
+                     lock_hashref_recurse unlock_hashref_recurse
 
                      hash_traversal_mask
                     );
-our $VERSION = '0.18';
+our $VERSION = '0.19';
 require XSLoader;
 XSLoader::load();
 
@@ -78,6 +79,7 @@ Hash::Util - A selection of general-utility hash subroutines
                      hash_seed hash_value hv_store
                      bucket_stats bucket_info bucket_array
                      lock_hash_recurse unlock_hash_recurse
+                     lock_hashref_recurse unlock_hashref_recurse
 
                      hash_traversal_mask
                    );
@@ -364,7 +366,7 @@ sub unlock_hashref_recurse {
         if (defined($type) and $type eq 'HASH') {
             unlock_hashref_recurse($value);
         }
-        Internals::SvREADONLY($value,1);
+        Internals::SvREADONLY($value,0);
     }
     unlock_ref_keys($hash);
     return $hash;
index 031d074..4a12fd1 100644 (file)
@@ -44,8 +44,9 @@ BEGIN {
                      hash_seed hash_value bucket_stats bucket_info bucket_array
                      hv_store
                      lock_hash_recurse unlock_hash_recurse
+                     lock_hashref_recurse unlock_hashref_recurse
                     );
-    plan tests => 236 + @Exported_Funcs;
+    plan tests => 244 + @Exported_Funcs;
     use_ok 'Hash::Util', @Exported_Funcs;
 }
 foreach my $func (@Exported_Funcs) {
@@ -530,6 +531,7 @@ ok(defined($hash_seed) && $hash_seed ne '', "hash_seed $hash_seed");
 }
 
 {
+    # lock_hash_recurse / unlock_hash_recurse
     my %hash = (
         a   => 'alpha',
         b   => [ qw( beta gamma delta ) ],
@@ -549,6 +551,43 @@ ok(defined($hash_seed) && $hash_seed ne '', "hash_seed $hash_seed");
         "unlock_hash_recurse(): top-level hash unlocked" );
     ok( hash_unlocked(%{$hash{d}}),
         "unlock_hash_recurse(): element which is hashref unlocked" );
+    {
+        local $@;
+        eval { $hash{d} = { theta => 'kappa' }; };
+        ok(! $@, "No error; can assign to unlocked hash")
+            or diag($@);
+    }
+    ok( hash_unlocked(%{$hash{c}[1]}),
+        "unlock_hash_recurse(): element which is hashref in array ref not locked" );
+}
+
+{
+    # lock_hashref_recurse / unlock_hashref_recurse
+    my %hash = (
+        a   => 'alpha',
+        b   => [ qw( beta gamma delta ) ],
+        c   => [ 'epsilon', { zeta => 'eta' }, ],
+        d   => { theta => 'iota' },
+    );
+    Hash::Util::lock_hashref_recurse(\%hash);
+    ok( hash_locked(%hash),
+        "lock_hash_recurse(): top-level hash locked" );
+    ok( hash_locked(%{$hash{d}}),
+        "lock_hash_recurse(): element which is hashref locked" );
+    ok( ! hash_locked(%{$hash{c}[1]}),
+        "lock_hash_recurse(): element which is hashref in array ref not locked" );
+
+    Hash::Util::unlock_hashref_recurse(\%hash);
+    ok( hash_unlocked(%hash),
+        "unlock_hash_recurse(): top-level hash unlocked" );
+    ok( hash_unlocked(%{$hash{d}}),
+        "unlock_hash_recurse(): element which is hashref unlocked" );
+    {
+        local $@;
+        eval { $hash{d} = { theta => 'kappa' }; };
+        ok(! $@, "No error; can assign to unlocked hash")
+            or diag($@);
+    }
     ok( hash_unlocked(%{$hash{c}[1]}),
         "unlock_hash_recurse(): element which is hashref in array ref not locked" );
 }
index 96892d9..801bf4b 100644 (file)
@@ -1229,7 +1229,9 @@ static void S_setpayload(NV* nvp, NV_PAYLOAD_TYPE payload, bool signaling)
   }
 #ifdef USE_LONG_DOUBLE
 # if LONG_DOUBLEKIND == 3 || LONG_DOUBLEKIND == 4
+#  if LONG_DOUBLESIZE > 10
   memset((char *)nvp + 10, '\0', LONG_DOUBLESIZE - 10); /* x86 long double */
+#  endif
 # endif
 #endif
   for (i = 0; i < (int)C_ARRAY_LENGTH(a); i++) {
index 7717fce..ff01b21 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 
 our ($AUTOLOAD, %SIGRT);
 
-our $VERSION = '1.55';
+our $VERSION = '1.56';
 
 require XSLoader;
 
index 3e6f78d..a021d13 100644 (file)
@@ -1244,7 +1244,9 @@ should not rely on more than 32 bits of payload.
 Whether a "signaling" NaN is in any way different from a "quiet" NaN,
 depends on the platform.  Also note that the payload of the default
 NaN (no argument to nan()) is not necessarily zero, use C<setpayload>
-to explicitly set the payload.
+to explicitly set the payload.  On some platforms like the 32-bit x86,
+(unless using the 80-bit long doubles) the signaling bit is not supported
+at all.
 
 See also L</isnan>, L</setpayload> and L</issignaling>.
 
index 2618865..5a9759a 100644 (file)
@@ -172,8 +172,26 @@ SKIP: {
     # (3) and is signaling
     setpayloadsig($x, 0x12345);
     ok(isnan($x), "setpayloadsig + isnan");
-    is(getpayload($x), 0x12345, "setpayload + getpayload");
-    ok(issignaling($x), "setpayloadsig + issignaling");
+    is(getpayload($x), 0x12345, "setpayloadsig + getpayload");
+  SKIP: {
+      # https://rt.perl.org/Ticket/Display.html?id=125710
+      # In the 32-bit x86 ABI cannot preserve the signaling bit
+      # (the x87 simply does not preserve that).  But using the
+      # 80-bit extended format aka long double, the bit is preserved.
+      # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57484
+      my $could_be_x86_32 =
+          # This is a really weak test: there are other 32-bit
+          # little-endian platforms than just Intel (some embedded
+          # processors, for example), but we use this just for not
+          # bothering with the test if things look iffy.
+          # We could, say, $Config{ccsymbols} =~ /\b__[xi][3-7]86=1\b/,
+          # but that feels quite shaky.
+          $Config{byteorder} eq '1234' &&
+          $Config{ivsize} == 4 &&  # Really redundant with the 'byteorder'.
+          $Config{ptrsize} == 4;
+      skip($^O, 1) if $could_be_x86_32 && !$Config{uselongdouble};
+      ok(issignaling($x), "setpayloadsig + issignaling");
+    }
 
     # Try a payload more than one byte.
     is(getpayload(nan(0x12345)), 0x12345, "nan + getpayload");
index 9ebe0d3..eea81e8 100644 (file)
@@ -42,7 +42,7 @@ my %properties = (
                    alnum => 'Word',
                    wordchar => 'Word',
                    alphanumeric => 'Alnum',
-                   alpha => 'Alpha',
+                   alpha => 'XPosixAlpha',
                    ascii => 'ASCII',
                    blank => 'Blank',
                    cntrl => 'Control',
@@ -50,14 +50,14 @@ my %properties = (
                    graph => 'Graph',
                    idfirst => '_Perl_IDStart',
                    idcont => '_Perl_IDCont',
-                   lower => 'Lower',
+                   lower => 'XPosixLower',
                    print => 'Print',
                    psxspc => 'XPosixSpace',
                    punct => 'XPosixPunct',
                    quotemeta => '_Perl_Quotemeta',
                    space => 'XPerlSpace',
                    vertws => 'VertSpace',
-                   upper => 'Upper',
+                   upper => 'XPosixUpper',
                    xdigit => 'XDigit',
                 );
 
@@ -69,8 +69,13 @@ foreach my $name (sort keys %properties) {
     my $property = $properties{$name};
     my @invlist = prop_invlist($property, '_perl_core_internal_ok');
     if (! @invlist) {
-        fail("No inversion list found for $property");
-        next;
+
+        # An empty return could mean an unknown property, or merely that it is
+        # empty.  Call in scalar context to differentiate
+        if (! prop_invlist($property, '_perl_core_internal_ok')) {
+            fail("No inversion list found for $property");
+            next;
+        }
     }
 
     # Include all the Latin1 code points, plus 0x100.
@@ -270,7 +275,7 @@ foreach my $name (sort keys %to_properties) {
         fail("No inversion map found for $property");
         next;
     }
-    if ($format ne "al") {
+    if ($format !~ / ^ a l? $ /x) {
         fail("Unexpected inversion map format ('$format') found for $property");
         next;
     }
index c6338c7..4a21934 100644 (file)
@@ -12,7 +12,7 @@ WriteMakefile(
     XSPROTOARG         => '-noprototypes',
     OBJECT             => $object,
     DEFINE             => $defines,
-    clean              => { FILES => '*$(OBJ_EXT) *.c ../../lib/re.pm' },
+    clean              => { FILES => '*$(OBJ_EXT) invlist_inline.h *.c ../../lib/re.pm' },
 );
 
 package MY;
@@ -24,29 +24,29 @@ sub upupfile {
 sub postamble {
     my $regcomp_c = upupfile('regcomp.c');
     my $regexec_c = upupfile('regexec.c');
-    my $dquote_static_c = upupfile('dquote_static.c');
-    my $inline_invlist_c = upupfile('inline_invlist.c');
+    my $dquote_c = upupfile('dquote.c');
+    my $invlist_inline_h = upupfile('invlist_inline.h');
 
     <<EOF;
 re_comp.c : $regcomp_c
        - \$(RM_F) re_comp.c
        \$(CP) $regcomp_c re_comp.c
 
-re_comp\$(OBJ_EXT) : re_comp.c dquote_static.c inline_invlist.c
+re_comp\$(OBJ_EXT) : re_comp.c dquote.c invlist_inline.h
 
 re_exec.c : $regexec_c
        - \$(RM_F) re_exec.c
        \$(CP) $regexec_c re_exec.c
 
-re_exec\$(OBJ_EXT) : re_exec.c inline_invlist.c
+re_exec\$(OBJ_EXT) : re_exec.c invlist_inline.h
 
-dquote_static.c : $dquote_static_c
-       - \$(RM_F) dquote_static.c
-       \$(CP) $dquote_static_c dquote_static.c
+dquote.c : $dquote_c
+       - \$(RM_F) dquote.c
+       \$(CP) $dquote_c dquote.c
 
-inline_invlist.c : $inline_invlist_c
-       - \$(RM_F) inline_invlist.c
-       \$(CP) $inline_invlist_c inline_invlist.c
+invlist_inline.h : $invlist_inline_h
+       - \$(RM_F) invlist_inline.h
+       \$(CP) $invlist_inline_h invlist_inline.h
 
 EOF
 }
diff --git a/gv.c b/gv.c
index 242ea87..5ffc7fe 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -34,7 +34,7 @@ Perl stores its global variables.
 #include "EXTERN.h"
 #define PERL_IN_GV_C
 #include "perl.h"
-#include "overload.c"
+#include "overload.inc"
 #include "keywords.h"
 #include "feature.h"
 
@@ -129,7 +129,7 @@ Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
        sv_setpvn(GvSV(gv), name, namelen);
 #endif
     }
-    if ((PERLDB_LINE || PERLDB_SAVESRC) && !GvAV(gv))
+    if (PERLDB_LINE_OR_SAVESRC && !GvAV(gv))
            hv_magic(GvHVn(gv), GvAVn(gv), PERL_MAGIC_dbfile);
     if (tmpbuf != smallbuf)
        Safefree(tmpbuf);
@@ -572,7 +572,9 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
     }
     CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE
                          from PL_curcop. */
-    (void)gv_fetchfile(file);
+    /* XSUBs can't be perl lang/perl5db.pl debugged
+    if (PERLDB_LINE_OR_SAVESRC)
+        (void)gv_fetchfile(file); */
     CvFILE(cv) = (char *)file;
     /* XXX This is inefficient, as doing things this order causes
            a prototype check in newATTRSUB.  But we have to do
@@ -1411,7 +1413,7 @@ S_gv_stashpvn_internal(pTHX_ const char *name, U32 namelen, I32 flags)
     tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
     if (tmpbuf != smallbuf)
        Safefree(tmpbuf);
-    if (!tmpgv)
+    if (!tmpgv || !isGV_with_GP(tmpgv))
        return NULL;
     stash = GvHV(tmpgv);
     if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL;
diff --git a/gv.h b/gv.h
index a6bb749..a6b695e 100644 (file)
--- a/gv.h
+++ b/gv.h
@@ -72,11 +72,6 @@ struct gp {
 #define GvNAME(gv)     GvNAME_get(gv)
 #define GvNAMELEN(gv)  GvNAMELEN_get(gv)
 
-#define        GvASSIGN_GENERATION(gv)         (0 + ((XPV*) SvANY(gv))->xpv_len)
-#define        GvASSIGN_GENERATION_set(gv,val)                 \
-       STMT_START { assert(SvTYPE(gv) == SVt_PVGV);    \
-               (((XPV*) SvANY(gv))->xpv_len = (val)); } STMT_END
-
 /*
 =head1 GV Functions
 
@@ -198,12 +193,6 @@ Return the CV from the GV.
 #define GvIMPORTED_CV_on(gv)   (GvFLAGS(gv) |= GVf_IMPORTED_CV)
 #define GvIMPORTED_CV_off(gv)  (GvFLAGS(gv) &= ~GVf_IMPORTED_CV)
 
-#define GPf_ALIASED_SV 1
-
-#define GvALIASED_SV(gv)       (GvGPFLAGS(gv) & GPf_ALIASED_SV)
-#define GvALIASED_SV_on(gv)    (GvGPFLAGS(gv) |= GPf_ALIASED_SV)
-#define GvALIASED_SV_off(gv)   (GvGPFLAGS(gv) &= ~GPf_ALIASED_SV)
-
 #ifndef PERL_CORE
 #  define GvIN_PAD(gv)         0
 #  define GvIN_PAD_on(gv)      NOOP
diff --git a/handy.h b/handy.h
index 2f0c50c..248b685 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -173,12 +173,11 @@ typedef I16TYPE I16;
 typedef U16TYPE U16;
 typedef I32TYPE I32;
 typedef U32TYPE U32;
-#ifdef PERL_CORE
-#   ifdef HAS_QUAD
+
+#ifdef HAS_QUAD
 typedef I64TYPE I64;
 typedef U64TYPE U64;
-#   endif
-#endif /* PERL_CORE */
+#endif
 
 /* INT64_C/UINT64_C are C99 from <stdint.h> (so they will not be
  * available in strict C89 mode), but they are nice, so let's define
@@ -205,8 +204,8 @@ typedef U64TYPE U64;
 #    define PeRl_UINT64_C(c)   CAT2(c,UI64)
 #  endif
 #  ifndef PeRl_INT64_C
-#    define PeRl_INT64_C(c)    ((I64TYPE)(c)) /* last resort */
-#    define PeRl_UINT64_C(c)   ((U64TYPE)(c))
+#    define PeRl_INT64_C(c)    ((I64)(c)) /* last resort */
+#    define PeRl_UINT64_C(c)   ((U64)(c))
 #  endif
 /* In OS X the INT64_C/UINT64_C are defined with LL/ULL, which will
  * not fly with C89-pedantic gcc, so let's undefine them first so that
@@ -554,8 +553,8 @@ Variant C<isFOO_LC_uvchr> is like C<isFOO_LC>, but is defined on any UV.  It
 returns the same as C<isFOO_LC> for input code points less than 256, and
 returns the hard-coded, not-affected-by-locale, Unicode results for larger ones.
 
-Variant C<isFOO_LC_utf8> is like C<isFOO_LC_uvchr>, but the input is a pointer to a
-(known to be well-formed) UTF-8 encoded string (C<U8*> or C<char*>).  The
+Variant C<isFOO_LC_utf8> is like C<isFOO_LC_uvchr>, but the input is a pointer
+to a (known to be well-formed) UTF-8 encoded string (C<U8*> or C<char*>).  The
 classification of just the first (possibly multi-byte) character in the string
 is tested.
 
@@ -682,9 +681,8 @@ C<isSPACE()> forms don't match a Vertical Tab, and the C<isPSXSPC()> forms do.
 Otherwise they are identical.  Thus this macro is analogous to what
 C<m/[[:space:]]/> matches in a regular expression.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isPSXSPC_A>, C<isPSXSPC_L1>, C<isPSXSPC_uni>, C<isPSXSPC_utf8>, C<isPSXSPC_LC>,
-C<isPSXSPC_LC_uvchr>, and C<isPSXSPC_LC_utf8>.
+variants C<isPSXSPC_A>, C<isPSXSPC_L1>, C<isPSXSPC_uni>, C<isPSXSPC_utf8>,
+C<isPSXSPC_LC>, C<isPSXSPC_LC_uvchr>, and C<isPSXSPC_LC_utf8>.
 
 =for apidoc Am|bool|isUPPER|char ch
 Returns a boolean indicating whether the specified character is an
@@ -812,8 +810,8 @@ ASCII uppercase character, that input character itself is returned.  Variant
 C<toLOWER_A> is equivalent.
 
 =for apidoc Am|U8|toLOWER_L1|U8 ch
-Converts the specified Latin1 character to lowercase.  The results are undefined if
-the input doesn't fit in a byte.
+Converts the specified Latin1 character to lowercase.  The results are
+undefined if the input doesn't fit in a byte.
 
 =for apidoc Am|U8|toLOWER_LC|U8 ch
 Converts the specified character to lowercase using the current locale's rules,
@@ -842,9 +840,9 @@ The input character at C<p> is assumed to be well-formed.
 =for apidoc Am|U8|toTITLE|U8 ch
 Converts the specified character to titlecase.  If the input is anything but an
 ASCII lowercase character, that input character itself is returned.  Variant
-C<toTITLE_A> is equivalent.  (There is no C<toTITLE_L1> for the full Latin1 range,
-as the full generality of L</toTITLE_uni> is needed there.  Titlecase is not a
-concept used in locale handling, so there is no functionality for that.)
+C<toTITLE_A> is equivalent.  (There is no C<toTITLE_L1> for the full Latin1
+range, as the full generality of L</toTITLE_uni> is needed there.  Titlecase is
+not a concept used in locale handling, so there is no functionality for that.)
 
 =for apidoc Am|UV|toTITLE_uni|UV cp|U8* s|STRLEN* lenp
 Converts the Unicode code point C<cp> to its titlecase version, and
@@ -999,7 +997,9 @@ typedef enum {
 #define POSIX_SWASH_COUNT _FIRST_NON_SWASH_CC
 #define POSIX_CC_COUNT    (_HIGHEST_REGCOMP_DOT_H_SYNC + 1)
 
-#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+#if defined(PERL_IN_UTF8_C)                         \
+ || defined(PERL_IN_REGCOMP_C)                      \
+ || defined(PERL_IN_REGEXEC_C)
 #   if _CC_WORDCHAR != 0 || _CC_DIGIT != 1 || _CC_ALPHA != 2 || _CC_LOWER != 3 \
        || _CC_UPPER != 4 || _CC_PUNCT != 5 || _CC_PRINT != 6                   \
        || _CC_ALPHANUMERIC != 7 || _CC_GRAPH != 8 || _CC_CASED != 9
@@ -1050,9 +1050,9 @@ END_EXTERN_C
     /* For internal core Perl use only: the base macro for defining macros like
      * isALPHA_A.  The foo_A version makes sure that both the desired bit and
      * the ASCII bit are present */
-#   define _generic_isCC_A(c, classnum) (FITS_IN_8_BITS(c)  \
-        && ((PL_charclass[(U8) (c)] & _CC_mask_A(classnum)) \
-                                == _CC_mask_A(classnum)))
+#   define _generic_isCC_A(c, classnum) (FITS_IN_8_BITS(c)      \
+        && ((PL_charclass[(U8) (c)] & _CC_mask_A(classnum))     \
+                                   == _CC_mask_A(classnum)))
 
 #   define isALPHA_A(c)  _generic_isCC_A(c, _CC_ALPHA)
 #   define isALPHANUMERIC_A(c) _generic_isCC_A(c, _CC_ALPHANUMERIC)
@@ -1066,7 +1066,8 @@ END_EXTERN_C
 #   define isSPACE_A(c)  _generic_isCC_A(c, _CC_SPACE)
 #   define isUPPER_A(c)  _generic_isCC_A(c, _CC_UPPER)
 #   define isWORDCHAR_A(c) _generic_isCC_A(c, _CC_WORDCHAR)
-#   define isXDIGIT_A(c)  _generic_isCC(c, _CC_XDIGIT) /* No non-ASCII xdigits */
+#   define isXDIGIT_A(c)  _generic_isCC(c, _CC_XDIGIT) /* No non-ASCII xdigits
+                                                        */
 #   define isIDFIRST_A(c) _generic_isCC_A(c, _CC_IDFIRST)
 #   define isALPHA_L1(c)  _generic_isCC(c, _CC_ALPHA)
 #   define isALPHANUMERIC_L1(c) _generic_isCC(c, _CC_ALPHANUMERIC)
@@ -1079,7 +1080,7 @@ END_EXTERN_C
 #   define isGRAPH_L1(c)  _generic_isCC(c, _CC_GRAPH)
 #   define isLOWER_L1(c)  _generic_isCC(c, _CC_LOWER)
 #   define isPRINT_L1(c)  _generic_isCC(c, _CC_PRINT)
-#   define isPSXSPC_L1(c) isSPACE_L1(c)
+#   define isPSXSPC_L1(c)  isSPACE_L1(c)
 #   define isPUNCT_L1(c)  _generic_isCC(c, _CC_PUNCT)
 #   define isSPACE_L1(c)  _generic_isCC(c, _CC_SPACE)
 #   define isUPPER_L1(c)  _generic_isCC(c, _CC_UPPER)
@@ -1098,9 +1099,9 @@ END_EXTERN_C
 
 #   define _isQUOTEMETA(c) _generic_isCC(c, _CC_QUOTEMETA)
 #   define _IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
-                                            _generic_isCC(c, _CC_NON_FINAL_FOLD)
+                                           _generic_isCC(c, _CC_NON_FINAL_FOLD)
 #   define _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
-                                            _generic_isCC(c, _CC_IS_IN_SOME_FOLD)
+                                           _generic_isCC(c, _CC_IS_IN_SOME_FOLD)
 #   define _IS_MNEMONIC_CNTRL_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
                                             _generic_isCC(c, _CC_MNEMONIC_CNTRL)
 #else   /* else we don't have perl.h H_PERL */
@@ -1363,7 +1364,7 @@ END_EXTERN_C
                     (! FITS_IN_8_BITS(c)                                       \
                     ? (c)                                                      \
                     : ((! IN_UTF8_CTYPE_LOCALE)                                \
-                      ? (cast)function((cast)(c))                                    \
+                      ? (cast)function((cast)(c))                              \
                       : ((((U8)(c)) == MICRO_SIGN)                             \
                         ? GREEK_CAPITAL_LETTER_MU                              \
                         : ((((U8)(c)) == LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)  \
@@ -1410,20 +1411,25 @@ END_EXTERN_C
      * Not all possible weirdnesses are checked for, just the ones that were
      * detected on actual Microsoft code pages */
 
-#  define isCNTRL_LC(c)    _generic_LC(c, _CC_CNTRL, iscntrl)
-#  define isSPACE_LC(c)    _generic_LC(c, _CC_SPACE, isspace)
-
-#  define isALPHA_LC(c)    (_generic_LC(c, _CC_ALPHA, isalpha) && isALPHANUMERIC_LC(c))
-#  define isALPHANUMERIC_LC(c)  (_generic_LC(c, _CC_ALPHANUMERIC, isalnum) && ! isPUNCT_LC(c))
-#  define isDIGIT_LC(c)    (_generic_LC(c, _CC_DIGIT, isdigit) && isALPHANUMERIC_LC(c))
-#  define isGRAPH_LC(c)    (_generic_LC(c, _CC_GRAPH, isgraph) && isPRINT_LC(c))
-#  define isIDFIRST_LC(c)  (((c) == '_') || (_generic_LC(c, _CC_IDFIRST, isalpha) && ! isPUNCT_LC(c)))
-#  define isLOWER_LC(c)    (_generic_LC(c, _CC_LOWER, islower) && isALPHA_LC(c))
-#  define isPRINT_LC(c)    (_generic_LC(c, _CC_PRINT, isprint) && ! isCNTRL_LC(c))
-#  define isPUNCT_LC(c)    (_generic_LC(c, _CC_PUNCT, ispunct) && ! isCNTRL_LC(c))
-#  define isUPPER_LC(c)    (_generic_LC(c, _CC_UPPER, isupper) && isALPHA_LC(c))
+#  define isCNTRL_LC(c)  _generic_LC(c, _CC_CNTRL, iscntrl)
+#  define isSPACE_LC(c)  _generic_LC(c, _CC_SPACE, isspace)
+
+#  define isALPHA_LC(c)  (_generic_LC(c, _CC_ALPHA, isalpha)                  \
+                                                    && isALPHANUMERIC_LC(c))
+#  define isALPHANUMERIC_LC(c)  (_generic_LC(c, _CC_ALPHANUMERIC, isalnum) && \
+                                                              ! isPUNCT_LC(c))
+#  define isDIGIT_LC(c)  (_generic_LC(c, _CC_DIGIT, isdigit) &&               \
+                                                         isALPHANUMERIC_LC(c))
+#  define isGRAPH_LC(c)  (_generic_LC(c, _CC_GRAPH, isgraph) && isPRINT_LC(c))
+#  define isIDFIRST_LC(c) (((c) == '_')                                       \
+                 || (_generic_LC(c, _CC_IDFIRST, isalpha) && ! isPUNCT_LC(c)))
+#  define isLOWER_LC(c)  (_generic_LC(c, _CC_LOWER, islower) && isALPHA_LC(c))
+#  define isPRINT_LC(c)  (_generic_LC(c, _CC_PRINT, isprint) && ! isCNTRL_LC(c))
+#  define isPUNCT_LC(c)  (_generic_LC(c, _CC_PUNCT, ispunct) && ! isCNTRL_LC(c))
+#  define isUPPER_LC(c)  (_generic_LC(c, _CC_UPPER, isupper) && isALPHA_LC(c))
 #  define isWORDCHAR_LC(c) (((c) == '_') || isALPHANUMERIC_LC(c))
-#  define isXDIGIT_LC(c)   (_generic_LC(c, _CC_XDIGIT, isxdigit) && isALPHANUMERIC_LC(c))
+#  define isXDIGIT_LC(c) (_generic_LC(c, _CC_XDIGIT, isxdigit)                \
+                                                    && isALPHANUMERIC_LC(c))
 
 #  define toLOWER_LC(c) _generic_toLOWER_LC((c), tolower, U8)
 #  define toUPPER_LC(c) _generic_toUPPER_LC((c), toupper, U8)
@@ -1453,19 +1459,19 @@ END_EXTERN_C
 
 #else  /* The final fallback position */
 
-#  define isALPHA_LC(c)        (isascii(c) && isalpha(c))
-#  define isALPHANUMERIC_LC(c) (isascii(c) && isalnum(c))
-#  define isCNTRL_LC(c)        (isascii(c) && iscntrl(c))
-#  define isDIGIT_LC(c)        (isascii(c) && isdigit(c))
-#  define isGRAPH_LC(c)        (isascii(c) && isgraph(c))
+#  define isALPHA_LC(c)                (isascii(c) && isalpha(c))
+#  define isALPHANUMERIC_LC(c)  (isascii(c) && isalnum(c))
+#  define isCNTRL_LC(c)                (isascii(c) && iscntrl(c))
+#  define isDIGIT_LC(c)                (isascii(c) && isdigit(c))
+#  define isGRAPH_LC(c)                (isascii(c) && isgraph(c))
 #  define isIDFIRST_LC(c)      (isascii(c) && (isalpha(c) || (c) == '_'))
-#  define isLOWER_LC(c)        (isascii(c) && islower(c))
-#  define isPRINT_LC(c)        (isascii(c) && isprint(c))
-#  define isPUNCT_LC(c)        (isascii(c) && ispunct(c))
-#  define isSPACE_LC(c)        (isascii(c) && isspace(c))
-#  define isUPPER_LC(c)        (isascii(c) && isupper(c))
+#  define isLOWER_LC(c)                (isascii(c) && islower(c))
+#  define isPRINT_LC(c)                (isascii(c) && isprint(c))
+#  define isPUNCT_LC(c)                (isascii(c) && ispunct(c))
+#  define isSPACE_LC(c)                (isascii(c) && isspace(c))
+#  define isUPPER_LC(c)                (isascii(c) && isupper(c))
 #  define isWORDCHAR_LC(c)     (isascii(c) && (isalnum(c) || (c) == '_'))
-#  define isXDIGIT_LC(c)      (isascii(c) && isxdigit(c))
+#  define isXDIGIT_LC(c)        (isascii(c) && isxdigit(c))
 
 #  define toLOWER_LC(c)        (isascii(c) ? tolower(c) : (c))
 #  define toUPPER_LC(c)        (isascii(c) ? toupper(c) : (c))
@@ -1538,27 +1544,29 @@ END_EXTERN_C
 #define isALPHA_LC_uvchr(c)  _generic_LC_swash_uvchr(isALPHA_LC, _CC_ALPHA, c)
 #define isALPHANUMERIC_LC_uvchr(c)  _generic_LC_swash_uvchr(isALPHANUMERIC_LC, \
                                                          _CC_ALPHANUMERIC, c)
-#define isASCII_LC_uvchr(c)  isASCII_LC(c)
-#define isBLANK_LC_uvchr(c)  _generic_LC_uvchr(isBLANK_LC, is_HORIZWS_cp_high, c)
+#define isASCII_LC_uvchr(c)   isASCII_LC(c)
+#define isBLANK_LC_uvchr(c)  _generic_LC_uvchr(isBLANK_LC,                    \
+                                                        is_HORIZWS_cp_high, c)
 #define isCNTRL_LC_uvchr(c)  (c < 256 ? isCNTRL_LC(c) : 0)
 #define isDIGIT_LC_uvchr(c)  _generic_LC_swash_uvchr(isDIGIT_LC, _CC_DIGIT, c)
 #define isGRAPH_LC_uvchr(c)  _generic_LC_swash_uvchr(isGRAPH_LC, _CC_GRAPH, c)
-#define isIDCONT_LC_uvchr(c)  _generic_LC_uvchr(isIDCONT_LC,                  \
+#define isIDCONT_LC_uvchr(c) _generic_LC_uvchr(isIDCONT_LC,                   \
                                                   _is_uni_perl_idcont, c)
-#define isIDFIRST_LC_uvchr(c)  _generic_LC_uvchr(isIDFIRST_LC,                 \
+#define isIDFIRST_LC_uvchr(c) _generic_LC_uvchr(isIDFIRST_LC,                 \
                                                   _is_uni_perl_idstart, c)
 #define isLOWER_LC_uvchr(c)  _generic_LC_swash_uvchr(isLOWER_LC, _CC_LOWER, c)
 #define isPRINT_LC_uvchr(c)  _generic_LC_swash_uvchr(isPRINT_LC, _CC_PRINT, c)
-#define isPSXSPC_LC_uvchr(c) isSPACE_LC_uvchr(c)
+#define isPSXSPC_LC_uvchr(c)  isSPACE_LC_uvchr(c)
 #define isPUNCT_LC_uvchr(c)  _generic_LC_swash_uvchr(isPUNCT_LC, _CC_PUNCT, c)
-#define isSPACE_LC_uvchr(c)  _generic_LC_uvchr(isSPACE_LC,                     \
+#define isSPACE_LC_uvchr(c)  _generic_LC_uvchr(isSPACE_LC,                    \
                                                     is_XPERLSPACE_cp_high, c)
 #define isUPPER_LC_uvchr(c)  _generic_LC_swash_uvchr(isUPPER_LC, _CC_UPPER, c)
-#define isWORDCHAR_LC_uvchr(c)  _generic_LC_swash_uvchr(isWORDCHAR_LC,              \
+#define isWORDCHAR_LC_uvchr(c) _generic_LC_swash_uvchr(isWORDCHAR_LC,         \
                                                            _CC_WORDCHAR, c)
-#define isXDIGIT_LC_uvchr(c) _generic_LC_uvchr(isXDIGIT_LC, is_XDIGIT_cp_high, c)
+#define isXDIGIT_LC_uvchr(c) _generic_LC_uvchr(isXDIGIT_LC,                  \
+                                                       is_XDIGIT_cp_high, c)
 
-#define isBLANK_LC_uni(c)      isBLANK_LC_uvchr(UNI_TO_NATIVE(c))
+#define isBLANK_LC_uni(c)    isBLANK_LC_uvchr(UNI_TO_NATIVE(c))
 
 /* For internal core Perl use only: the base macros for defining macros like
  * isALPHA_utf8.  These are like the earlier defined macros, but take an input
@@ -1575,8 +1583,8 @@ END_EXTERN_C
                                                                    *((p)+1 )), \
                                                 classnum)                      \
                                            : utf8)
-/* Like the above, but calls 'above_latin1(p)' to get the utf8 value.  'above_latin1'
- * can be a macro */
+/* Like the above, but calls 'above_latin1(p)' to get the utf8 value.
+ * 'above_latin1' can be a macro */
 #define _generic_func_utf8(classnum, above_latin1, p)  \
                                     _generic_utf8(classnum, p, above_latin1(p))
 /* Like the above, but passes classnum to _isFOO_utf8(), instead of having an
@@ -1603,12 +1611,12 @@ END_EXTERN_C
  * points; the regcharclass.h ones are implemented as a series of
  * "if-else-if-else ..." */
 
-#define isALPHA_utf8(p)         _generic_swash_utf8(_CC_ALPHA, p)
-#define isALPHANUMERIC_utf8(p)  _generic_swash_utf8(_CC_ALPHANUMERIC, p)
-#define isASCII_utf8(p)         isASCII(*p) /* Because ASCII is invariant under
+#define isALPHA_utf8(p)        _generic_swash_utf8(_CC_ALPHA, p)
+#define isALPHANUMERIC_utf8(p) _generic_swash_utf8(_CC_ALPHANUMERIC, p)
+#define isASCII_utf8(p)        isASCII(*p) /* Because ASCII is invariant under
                                                utf8, the non-utf8 macro works
                                              */
-#define isBLANK_utf8(p)         _generic_func_utf8(_CC_BLANK, is_HORIZWS_high, p)
+#define isBLANK_utf8(p)        _generic_func_utf8(_CC_BLANK, is_HORIZWS_high, p)
 
 #ifdef EBCDIC
     /* Because all controls are UTF-8 invariants in EBCDIC, we can use this
@@ -1630,18 +1638,18 @@ END_EXTERN_C
  * ever wanted to know about.  (In the ASCII range, there isn't a difference.)
  * This used to be not the XID version, but we decided to go with the more
  * modern Unicode definition */
-#define isIDFIRST_utf8(p)       _generic_func_utf8(_CC_IDFIRST,               \
+#define isIDFIRST_utf8(p)   _generic_func_utf8(_CC_IDFIRST,                  \
                                                 _is_utf8_perl_idstart, p)
 
-#define isLOWER_utf8(p)         _generic_swash_utf8(_CC_LOWER, p)
-#define isPRINT_utf8(p)         _generic_swash_utf8(_CC_PRINT, p)
-#define isPSXSPC_utf8(p)        isSPACE_utf8(p)
-#define isPUNCT_utf8(p)         _generic_swash_utf8(_CC_PUNCT, p)
-#define isSPACE_utf8(p)         _generic_func_utf8(_CC_SPACE, is_XPERLSPACE_high, p)
-#define isUPPER_utf8(p)         _generic_swash_utf8(_CC_UPPER, p)
-#define isVERTWS_utf8(p)        _generic_func_utf8(_CC_VERTSPACE, is_VERTWS_high, p)
-#define isWORDCHAR_utf8(p)      _generic_swash_utf8(_CC_WORDCHAR, p)
-#define isXDIGIT_utf8(p)        _generic_utf8_no_upper_latin1(_CC_XDIGIT, p,   \
+#define isLOWER_utf8(p)     _generic_swash_utf8(_CC_LOWER, p)
+#define isPRINT_utf8(p)     _generic_swash_utf8(_CC_PRINT, p)
+#define isPSXSPC_utf8(p)    isSPACE_utf8(p)
+#define isPUNCT_utf8(p)     _generic_swash_utf8(_CC_PUNCT, p)
+#define isSPACE_utf8(p)     _generic_func_utf8(_CC_SPACE, is_XPERLSPACE_high, p)
+#define isUPPER_utf8(p)     _generic_swash_utf8(_CC_UPPER, p)
+#define isVERTWS_utf8(p)    _generic_func_utf8(_CC_VERTSPACE, is_VERTWS_high, p)
+#define isWORDCHAR_utf8(p)  _generic_swash_utf8(_CC_WORDCHAR, p)
+#define isXDIGIT_utf8(p)    _generic_utf8_no_upper_latin1(_CC_XDIGIT, p,     \
                                                           is_XDIGIT_high(p))
 
 #define toFOLD_utf8(p,s,l)     to_utf8_fold(p,s,l)
@@ -1665,47 +1673,52 @@ END_EXTERN_C
 #define _generic_LC_func_utf8(macro, above_latin1, p)                         \
                               _generic_LC_utf8(macro, p, above_latin1(p))
 
-#define isALPHANUMERIC_LC_utf8(p)  _generic_LC_swash_utf8(isALPHANUMERIC_LC,  \
+#define isALPHANUMERIC_LC_utf8(p) _generic_LC_swash_utf8(isALPHANUMERIC_LC,   \
                                                       _CC_ALPHANUMERIC, p)
-#define isALPHA_LC_utf8(p)   _generic_LC_swash_utf8(isALPHA_LC, _CC_ALPHA, p)
-#define isASCII_LC_utf8(p)   isASCII_LC(*p)
-#define isBLANK_LC_utf8(p)   _generic_LC_func_utf8(isBLANK_LC, is_HORIZWS_high, p)
-#define isCNTRL_LC_utf8(p)   _generic_LC_utf8(isCNTRL_LC, p, 0)
-#define isDIGIT_LC_utf8(p)   _generic_LC_swash_utf8(isDIGIT_LC, _CC_DIGIT, p)
-#define isGRAPH_LC_utf8(p)   _generic_LC_swash_utf8(isGRAPH_LC, _CC_GRAPH, p)
-#define isIDCONT_LC_utf8(p) _generic_LC_func_utf8(isIDCONT_LC, _is_utf8_perl_idcont, p)
-#define isIDFIRST_LC_utf8(p) _generic_LC_func_utf8(isIDFIRST_LC, _is_utf8_perl_idstart, p)
-#define isLOWER_LC_utf8(p)   _generic_LC_swash_utf8(isLOWER_LC, _CC_LOWER, p)
-#define isPRINT_LC_utf8(p)   _generic_LC_swash_utf8(isPRINT_LC, _CC_PRINT, p)
-#define isPSXSPC_LC_utf8(p)  isSPACE_LC_utf8(p)
-#define isPUNCT_LC_utf8(p)   _generic_LC_swash_utf8(isPUNCT_LC, _CC_PUNCT, p)
-#define isSPACE_LC_utf8(p)   _generic_LC_func_utf8(isSPACE_LC, is_XPERLSPACE_high, p)
-#define isUPPER_LC_utf8(p)   _generic_LC_swash_utf8(isUPPER_LC, _CC_UPPER, p)
+#define isALPHA_LC_utf8(p)    _generic_LC_swash_utf8(isALPHA_LC, _CC_ALPHA, p)
+#define isASCII_LC_utf8(p)     isASCII_LC(*p)
+#define isBLANK_LC_utf8(p)    _generic_LC_func_utf8(isBLANK_LC,               \
+                                                         is_HORIZWS_high, p)
+#define isCNTRL_LC_utf8(p)    _generic_LC_utf8(isCNTRL_LC, p, 0)
+#define isDIGIT_LC_utf8(p)    _generic_LC_swash_utf8(isDIGIT_LC, _CC_DIGIT, p)
+#define isGRAPH_LC_utf8(p)    _generic_LC_swash_utf8(isGRAPH_LC, _CC_GRAPH, p)
+#define isIDCONT_LC_utf8(p)   _generic_LC_func_utf8(isIDCONT_LC,              \
+                                                    _is_utf8_perl_idcont, p)
+#define isIDFIRST_LC_utf8(p)  _generic_LC_func_utf8(isIDFIRST_LC,             \
+                                                    _is_utf8_perl_idstart, p)
+#define isLOWER_LC_utf8(p)    _generic_LC_swash_utf8(isLOWER_LC, _CC_LOWER, p)
+#define isPRINT_LC_utf8(p)    _generic_LC_swash_utf8(isPRINT_LC, _CC_PRINT, p)
+#define isPSXSPC_LC_utf8(p)    isSPACE_LC_utf8(p)
+#define isPUNCT_LC_utf8(p)    _generic_LC_swash_utf8(isPUNCT_LC, _CC_PUNCT, p)
+#define isSPACE_LC_utf8(p)    _generic_LC_func_utf8(isSPACE_LC,               \
+                                                        is_XPERLSPACE_high, p)
+#define isUPPER_LC_utf8(p)    _generic_LC_swash_utf8(isUPPER_LC, _CC_UPPER, p)
 #define isWORDCHAR_LC_utf8(p) _generic_LC_swash_utf8(isWORDCHAR_LC,           \
                                                             _CC_WORDCHAR, p)
-#define isXDIGIT_LC_utf8(p)  _generic_LC_func_utf8(isXDIGIT_LC, is_XDIGIT_high, p)
+#define isXDIGIT_LC_utf8(p)   _generic_LC_func_utf8(isXDIGIT_LC,              \
+                                                            is_XDIGIT_high, p)
 
 /* Macros for backwards compatibility and for completeness when the ASCII and
  * Latin1 values are identical */
-#define isALPHAU(c)     isALPHA_L1(c)
-#define isDIGIT_L1(c)   isDIGIT_A(c)
-#define isOCTAL(c)      isOCTAL_A(c)
-#define isOCTAL_L1(c)   isOCTAL_A(c)
-#define isXDIGIT_L1(c)  isXDIGIT_A(c)
-#define isALNUM(c)      isWORDCHAR(c)
-#define isALNUMU(c)     isWORDCHAR_L1(c)
-#define isALNUM_LC(c)   isWORDCHAR_LC(c)
-#define isALNUM_uni(c)  isWORDCHAR_uni(c)
+#define isALPHAU(c)         isALPHA_L1(c)
+#define isDIGIT_L1(c)       isDIGIT_A(c)
+#define isOCTAL(c)          isOCTAL_A(c)
+#define isOCTAL_L1(c)       isOCTAL_A(c)
+#define isXDIGIT_L1(c)      isXDIGIT_A(c)
+#define isALNUM(c)          isWORDCHAR(c)
+#define isALNUMU(c)         isWORDCHAR_L1(c)
+#define isALNUM_LC(c)       isWORDCHAR_LC(c)
+#define isALNUM_uni(c)      isWORDCHAR_uni(c)
 #define isALNUM_LC_uvchr(c) isWORDCHAR_LC_uvchr(c)
-#define isALNUM_utf8(p) isWORDCHAR_utf8(p)
-#define isALNUM_LC_utf8(p) isWORDCHAR_LC_utf8(p)
-#define isALNUMC_A(c)   isALPHANUMERIC_A(c)      /* Mnemonic: "C's alnum" */
-#define isALNUMC_L1(c)  isALPHANUMERIC_L1(c)
-#define isALNUMC(c)    isALPHANUMERIC(c)
-#define isALNUMC_LC(c) isALPHANUMERIC_LC(c)
-#define isALNUMC_uni(c) isALPHANUMERIC_uni(c)
+#define isALNUM_utf8(p)     isWORDCHAR_utf8(p)
+#define isALNUM_LC_utf8(p)  isWORDCHAR_LC_utf8(p)
+#define isALNUMC_A(c)       isALPHANUMERIC_A(c)      /* Mnemonic: "C's alnum" */
+#define isALNUMC_L1(c)      isALPHANUMERIC_L1(c)
+#define isALNUMC(c)        isALPHANUMERIC(c)
+#define isALNUMC_LC(c)     isALPHANUMERIC_LC(c)
+#define isALNUMC_uni(c)     isALPHANUMERIC_uni(c)
 #define isALNUMC_LC_uvchr(c) isALPHANUMERIC_LC_uvchr(c)
-#define isALNUMC_utf8(p) isALPHANUMERIC_utf8(p)
+#define isALNUMC_utf8(p)    isALPHANUMERIC_utf8(p)
 #define isALNUMC_LC_utf8(p) isALPHANUMERIC_LC_utf8(p)
 
 /* On EBCDIC platforms, CTRL-@ is 0, CTRL-A is 1, etc, just like on ASCII,
@@ -2110,7 +2123,8 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe
    shortcut macro defined without -DPERL_CORE. Neither codesearch.google.com nor
    CPAN::Unpack show any users outside the core.  */
 #ifdef PERL_CORE
-#  define deprecate(s) Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED), "Use of " s " is deprecated")
+#  define deprecate(s) Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),    \
+                                            "Use of " s " is deprecated")
 #endif
 
 /* Internal macros to deal with gids and uids */
index 950476b..9bedff9 100644 (file)
 # mkdir -p /opt/perl-catamount
 # mkdir -p /opt/perl-catamount/include
 # mkdir -p /opt/perl-catamount/lib
-# mkdir -p /opt/perl-catamount/lib/perl5/5.23.1
+# mkdir -p /opt/perl-catamount/lib/perl5/5.23.2
 # mkdir -p /opt/perl-catamount/bin
 # cp *.h /opt/perl-catamount/include
 # cp libperl.a /opt/perl-catamount/lib
-# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.23.1
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.23.2
 # cp miniperl perl run.sh cc.sh /opt/perl-catamount/lib
 #
 # With the headers and the libperl.a you can embed Perl to your Catamount
index fec05fd..81cdcff 100644 (file)
@@ -301,6 +301,11 @@ case "$usemymalloc" in
 esac
 # However sbrk() returns -1 (failure) somewhere in lib/unicore/mktables at
 # around 14M, so we need to use system malloc() as our sbrk()
+#
+# sbrk() in Darwin deprecated since Mavericks (10.9), it still exists
+# in Yosemite (10.10) but that is just an emulation, and fails for
+# allocations beyond 4MB.  One should use e.g. mmap instead (or system
+# malloc, as suggested above, that but is kind of backward).
 malloc_cflags='ccflags="-DUSE_PERL_SBRK -DPERL_SBRK_VIA_MALLOC $ccflags"'
 
 # Locales aren't feeling well.
diff --git a/hv.c b/hv.c
index 2fd36ee..469221f 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -1490,10 +1490,10 @@ Perl_newHVhv(pTHX_ HV *ohv)
 /*
 =for apidoc Am|HV *|hv_copy_hints_hv|HV *ohv
 
-A specialised version of L</newHVhv> for copying C<%^H>.  I<ohv> must be
+A specialised version of L</newHVhv> for copying C<%^H>.  C<ohv> must be
 a pointer to a hash (which may have C<%^H> magic, but should be generally
 non-magical), or C<NULL> (interpreted as an empty hash).  The content
-of I<ohv> is copied to a new hash, which has the C<%^H>-specific magic
+of C<ohv> is copied to a new hash, which has the C<%^H>-specific magic
 added to it.  A pointer to the new hash is returned.
 
 =cut
@@ -3064,7 +3064,7 @@ S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
 
 Generates and returns a C<HV *> representing the content of a
 C<refcounted_he> chain.
-I<flags> is currently unused and must be zero.
+C<flags> is currently unused and must be zero.
 
 =cut
 */
@@ -3171,9 +3171,9 @@ Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain, U32 flags)
 =for apidoc m|SV *|refcounted_he_fetch_pvn|const struct refcounted_he *chain|const char *keypv|STRLEN keylen|U32 hash|U32 flags
 
 Search along a C<refcounted_he> chain for an entry with the key specified
-by I<keypv> and I<keylen>.  If I<flags> has the C<REFCOUNTED_HE_KEY_UTF8>
+by C<keypv> and C<keylen>.  If C<flags> has the C<REFCOUNTED_HE_KEY_UTF8>
 bit set, the key octets are interpreted as UTF-8, otherwise they
-are interpreted as Latin-1.  I<hash> is a precomputed hash of the key
+are interpreted as Latin-1.  C<hash> is a precomputed hash of the key
 string, or zero if it has not been precomputed.  Returns a mortal scalar
 representing the value associated with the key, or C<&PL_sv_placeholder>
 if there is no value associated with the key.
@@ -3310,25 +3310,25 @@ be empty), and thus forms a longer chain.  When using the longer chain,
 the new key/value pair takes precedence over any entry for the same key
 further along the chain.
 
-The new key is specified by I<keypv> and I<keylen>.  If I<flags> has
+The new key is specified by C<keypv> and C<keylen>.  If C<flags> has
 the C<REFCOUNTED_HE_KEY_UTF8> bit set, the key octets are interpreted
-as UTF-8, otherwise they are interpreted as Latin-1.  I<hash> is
+as UTF-8, otherwise they are interpreted as Latin-1.  C<hash> is
 a precomputed hash of the key string, or zero if it has not been
 precomputed.
 
-I<value> is the scalar value to store for this key.  I<value> is copied
+C<value> is the scalar value to store for this key.  C<value> is copied
 by this function, which thus does not take ownership of any reference
 to it, and later changes to the scalar will not be reflected in the
 value visible in the C<refcounted_he>.  Complex types of scalar will not
 be stored with referential integrity, but will be coerced to strings.
-I<value> may be either null or C<&PL_sv_placeholder> to indicate that no
+C<value> may be either null or C<&PL_sv_placeholder> to indicate that no
 value is to be associated with the key; this, as with any non-null value,
 takes precedence over the existence of a value for the key further along
 the chain.
 
-I<parent> points to the rest of the C<refcounted_he> chain to be
+C<parent> points to the rest of the C<refcounted_he> chain to be
 attached to the new C<refcounted_he>.  This function takes ownership
-of one reference to I<parent>, and returns one reference to the new
+of one reference to C<parent>, and returns one reference to the new
 C<refcounted_he>.
 
 =cut
index 708c6c7..b0e50e3 100644 (file)
--- a/hv_func.h
+++ b/hv_func.h
  * are only needed to help derive these 3.
  *
  * U8TO32_LE(x)   Read a little endian unsigned 32-bit int
- * UNALIGNED_SAFE   Defined if READ_UINT32 works on non-word boundaries
+ * UNALIGNED_SAFE   Defined if unaligned access is safe
  * ROTL32(x,r)      Rotate x left by r bits
  */
 
                       +((const U8 *)(d))[0])
 #endif
 
-
-/* Now find best way we can to READ_UINT32 */
 #if (BYTEORDER == 0x1234 || BYTEORDER == 0x12345678) && U32SIZE == 4
   /* CPU endian matches murmurhash algorithm, so read 32-bit word directly */
   #define U8TO32_LE(ptr)   (*((U32*)(ptr)))
 #ifndef U64TYPE
 /* This probably isn't going to work, but failing with a compiler error due to
    lack of uint64_t is no worse than failing right now with an #error.  */
-#define U64TYPE uint64_t
+#define U64 uint64_t
 #endif
 #endif
 
   /* gcc recognises this code and generates a rotate instruction for CPUs with one */
   #define ROTL32(x,r)  (((U32)x << r) | ((U32)x >> (32 - r)))
   #ifdef HAS_QUAD
-    #define ROTL64(x,r)  (((U64TYPE)x << r) | ((U64TYPE)x >> (64 - r)))
+    #define ROTL64(x,r)  (((U64)x << r) | ((U64)x >> (64 - r)))
   #endif
 #endif
 
 #ifdef HAS_QUAD
 
 #define U8TO64_LE(p) \
-  (((U64TYPE)((p)[0])      ) | \
-   ((U64TYPE)((p)[1]) <<  8) | \
-   ((U64TYPE)((p)[2]) << 16) | \
-   ((U64TYPE)((p)[3]) << 24) | \
-   ((U64TYPE)((p)[4]) << 32) | \
-   ((U64TYPE)((p)[5]) << 40) | \
-   ((U64TYPE)((p)[6]) << 48) | \
-   ((U64TYPE)((p)[7]) << 56))
+  (((U64)((p)[0])      ) | \
+   ((U64)((p)[1]) <<  8) | \
+   ((U64)((p)[2]) << 16) | \
+   ((U64)((p)[3]) << 24) | \
+   ((U64)((p)[4]) << 32) | \
+   ((U64)((p)[5]) << 40) | \
+   ((U64)((p)[6]) << 48) | \
+   ((U64)((p)[7]) << 56))
 
 #define SIPROUND            \
   do {              \
 PERL_STATIC_INLINE U32
 S_perl_hash_siphash_2_4(const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) {
   /* "somepseudorandomlygeneratedbytes" */
-  U64TYPE v0 = UINT64_C(0x736f6d6570736575);
-  U64TYPE v1 = UINT64_C(0x646f72616e646f6d);
-  U64TYPE v2 = UINT64_C(0x6c7967656e657261);
-  U64TYPE v3 = UINT64_C(0x7465646279746573);
-
-  U64TYPE b;
-  U64TYPE k0 = ((U64TYPE*)seed)[0];
-  U64TYPE k1 = ((U64TYPE*)seed)[1];
-  U64TYPE m;
+  U64 v0 = UINT64_C(0x736f6d6570736575);
+  U64 v1 = UINT64_C(0x646f72616e646f6d);
+  U64 v2 = UINT64_C(0x6c7967656e657261);
+  U64 v3 = UINT64_C(0x7465646279746573);
+
+  U64 b;
+  U64 k0 = ((U64*)seed)[0];
+  U64 k1 = ((U64*)seed)[1];
+  U64 m;
   const int left = inlen & 7;
   const U8 *end = in + inlen - left;
 
-  b = ( ( U64TYPE )(inlen) ) << 56;
+  b = ( ( U64 )(inlen) ) << 56;
   v3 ^= k1;
   v2 ^= k0;
   v1 ^= k1;
@@ -233,13 +231,13 @@ S_perl_hash_siphash_2_4(const unsigned char * const seed, const unsigned char *i
 
   switch( left )
   {
-  case 7: b |= ( ( U64TYPE )in[ 6] )  << 48;
-  case 6: b |= ( ( U64TYPE )in[ 5] )  << 40;
-  case 5: b |= ( ( U64TYPE )in[ 4] )  << 32;
-  case 4: b |= ( ( U64TYPE )in[ 3] )  << 24;
-  case 3: b |= ( ( U64TYPE )in[ 2] )  << 16;
-  case 2: b |= ( ( U64TYPE )in[ 1] )  <<  8;
-  case 1: b |= ( ( U64TYPE )in[ 0] ); break;
+  case 7: b |= ( ( U64 )in[ 6] )  << 48;
+  case 6: b |= ( ( U64 )in[ 5] )  << 40;
+  case 5: b |= ( ( U64 )in[ 4] )  << 32;
+  case 4: b |= ( ( U64 )in[ 3] )  << 24;
+  case 3: b |= ( ( U64 )in[ 2] )  << 16;
+  case 2: b |= ( ( U64 )in[ 1] )  <<  8;
+  case 1: b |= ( ( U64 )in[ 0] ); break;
   case 0: break;
   }
 
@@ -570,7 +568,7 @@ S_perl_hash_old_one_at_a_time(const unsigned char * const seed, const unsigned c
    return a 32 bit hash.
 
    Note uses unaligned 64 bit loads - will NOT work on machines with
-   strict alginment requirements.
+   strict alignment requirements.
 
    Also this code may not be suitable for big-endian machines.
 */
@@ -579,16 +577,16 @@ S_perl_hash_old_one_at_a_time(const unsigned char * const seed, const unsigned c
 PERL_STATIC_INLINE U32
 S_perl_hash_murmur_hash_64a (const unsigned char * const seed, const unsigned char *str, const STRLEN len)
 {
-        const U64TYPE m = 0xc6a4a7935bd1e995;
+        const U64 m = UINT64_C(0xc6a4a7935bd1e995);
         const int r = 47;
-        U64TYPE h = *((U64TYPE*)seed) ^ len;
-        const U64TYPE * data = (const U64TYPE *)str;
-        const U64TYPE * end = data + (len/8);
+        U64 h = *((U64*)seed) ^ len;
+        const U64 * data = (const U64 *)str;
+        const U64 * end = data + (len/8);
         const unsigned char * data2;
 
         while(data != end)
         {
-            U64TYPE k = *data++;
+            U64 k = *data++;
 
             k *= m;
             k ^= k >> r;
@@ -602,13 +600,13 @@ S_perl_hash_murmur_hash_64a (const unsigned char * const seed, const unsigned ch
 
         switch(len & 7)
         {
-            case 7: h ^= (U64TYPE)(data2[6]) << 48; /* fallthrough */
-            case 6: h ^= (U64TYPE)(data2[5]) << 40; /* fallthrough */
-            case 5: h ^= (U64TYPE)(data2[4]) << 32; /* fallthrough */
-            case 4: h ^= (U64TYPE)(data2[3]) << 24; /* fallthrough */
-            case 3: h ^= (U64TYPE)(data2[2]) << 16; /* fallthrough */
-            case 2: h ^= (U64TYPE)(data2[1]) << 8;  /* fallthrough */
-            case 1: h ^= (U64TYPE)(data2[0]);       /* fallthrough */
+            case 7: h ^= (U64)(data2[6]) << 48; /* fallthrough */
+            case 6: h ^= (U64)(data2[5]) << 40; /* fallthrough */
+            case 5: h ^= (U64)(data2[4]) << 32; /* fallthrough */
+            case 4: h ^= (U64)(data2[3]) << 24; /* fallthrough */
+            case 3: h ^= (U64)(data2[2]) << 16; /* fallthrough */
+            case 2: h ^= (U64)(data2[1]) << 8;  /* fallthrough */
+            case 1: h ^= (U64)(data2[0]);       /* fallthrough */
                     h *= m;
         };
 
@@ -628,7 +626,7 @@ S_perl_hash_murmur_hash_64a (const unsigned char * const seed, const unsigned ch
    a 32 bit value
 
    Note uses unaligned 32 bit loads - will NOT work on machines with
-   strict alginment requirements.
+   strict alignment requirements.
 
    Also this code may not be suitable for big-endian machines.
 */
@@ -683,7 +681,7 @@ S_perl_hash_murmur_hash_64b (const unsigned char * const seed, const unsigned ch
 
         h1 ^= h2 >> 17; h1 *= m;
 
-        U64TYPE h = h1;
+        U64 h = h1;
 
         h = (h << 32) | h2;
         */
index fad08ba..20fd4df 100644 (file)
@@ -60,9 +60,6 @@ PERLVAR(I, markstack, I32 *)          /* stack_sp locations we're
 PERLVAR(I, markstack_ptr, I32 *)
 PERLVAR(I, markstack_max, I32 *)
 
-PERLVARI(I, sawalias,  bool,   FALSE)  /* must enable common-vars
-                                          pessimisation */
-
 #ifdef PERL_HASH_RANDOMIZE_KEYS
 #ifdef USE_PERL_PERTURB_KEYS
 PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */
@@ -179,7 +176,7 @@ PERLVAR(I, statgv,  GV *)
 PERLVARI(I, statname,  SV *,   NULL)
 
 #ifdef HAS_TIMES
-/* Will be removed soon after v5.23.1. See RT #121351 */
+/* Will be removed soon after v5.23.2. See RT #121351 */
 PERLVAR(I, timesbuf,   struct tms)
 #endif
 
@@ -492,7 +489,8 @@ PERLVAR(I, sys_intern,      struct interp_intern)
 
 /* more statics moved here */
 PERLVAR(I, DBcv,       CV *)           /* from perl.c */
-PERLVARI(I, generation,        int,    100)    /* from op.c */
+PERLVARI(I, generation,        int,    100)    /* scan sequence# for OP_AASSIGN
+                                           compile-time common elem detection */
 
 PERLVAR(I, unicode, U32)       /* Unicode features: $ENV{PERL_UNICODE} or -C */
 
@@ -753,7 +751,7 @@ PERLVARI(I, globhook,       globhook_t, NULL)
 
 PERLVARI(I, padlist_generation, U32, 1)        /* id to identify padlist clones */
 
-/* The last unconditional member of the interpreter structure when 5.23.1 was
+/* The last unconditional member of the interpreter structure when 5.23.2 was
    released. The offset of the end of this is baked into a global variable in 
    any shared perl library which will allow a sanity test in future perl
    releases.  */
similarity index 99%
rename from inline_invlist.c
rename to invlist_inline.h
index 1589f95..4ce04f9 100644 (file)
@@ -1,4 +1,4 @@
-/*    inline_invlist.c
+/*    invlist_inline.h
  *
  *    Copyright (C) 2012 by Larry Wall and others
  *
index bdab989..434190f 100644 (file)
 /* U+FC u with diaeresis */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
 /* U+FD y with acute */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
 /* U+FE thorn */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
-/* U+FF y with diaeresis */ (1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
+/* U+FF y with diaeresis */ (1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD)
 
 #endif /* ASCII/Latin1 */
 
 /* 0xFC U+DC U with DIAERESIS */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
 /* 0xFD U+D9 U with GRAVE */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
 /* 0xFE U+DA U with ACUTE */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
-/* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
+/* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)
 
 #endif /* EBCDIC 1047 */
 
 /* 0xFC U+DC U with DIAERESIS */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
 /* 0xFD U+D9 U with GRAVE */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
 /* 0xFE U+DA U with ACUTE */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
-/* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
+/* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)
 
 #endif /* EBCDIC 037 */
 
 /* 0xFC U+DC U with DIAERESIS */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
 /* 0xFD U+7D '}' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
 /* 0xFE U+DA U with ACUTE */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ALPHA)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_IS_IN_SOME_FOLD),
-/* 0xFF U+7E '~' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0xFF U+7E '~' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)
 
 #endif /* EBCDIC POSIX-BC */
 
index c9db867..f889efc 100644 (file)
@@ -118,7 +118,7 @@ package B::Op_private;
 our %bits;
 
 
-our $VERSION = "5.023001";
+our $VERSION = "5.023002";
 
 $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
 $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
@@ -228,7 +228,7 @@ my @bf = (
     },
 );
 
-@{$bits{aassign}}{6,1,0} = ('OPpASSIGN_COMMON', $bf[1], $bf[1]);
+@{$bits{aassign}}{6,5,4,1,0} = ('OPpASSIGN_COMMON_SCALAR', 'OPpASSIGN_COMMON_RC1', 'OPpASSIGN_COMMON_AGG', $bf[1], $bf[1]);
 $bits{abs}{0} = $bf[0];
 @{$bits{accept}}{3,2,1,0} = ($bf[3], $bf[3], $bf[3], $bf[3]);
 @{$bits{add}}{1,0} = ($bf[1], $bf[1]);
@@ -567,7 +567,9 @@ our %defines = (
     OPpARG3_MASK             =>   7,
     OPpARG4_MASK             =>  15,
     OPpASSIGN_BACKWARDS      =>  64,
-    OPpASSIGN_COMMON         =>  64,
+    OPpASSIGN_COMMON_AGG     =>  16,
+    OPpASSIGN_COMMON_RC1     =>  32,
+    OPpASSIGN_COMMON_SCALAR  =>  64,
     OPpASSIGN_CV_TO_GV       => 128,
     OPpCONST_BARE            =>  64,
     OPpCONST_ENTERED         =>  16,
@@ -660,7 +662,9 @@ our %defines = (
 our %labels = (
     OPpALLOW_FAKE            => 'FAKE',
     OPpASSIGN_BACKWARDS      => 'BKWARD',
-    OPpASSIGN_COMMON         => 'COMMON',
+    OPpASSIGN_COMMON_AGG     => 'COM_AGG',
+    OPpASSIGN_COMMON_RC1     => 'COM_RC1',
+    OPpASSIGN_COMMON_SCALAR  => 'COM_SCALAR',
     OPpASSIGN_CV_TO_GV       => 'CV2GV',
     OPpCONST_BARE            => 'BARE',
     OPpCONST_ENTERED         => 'ENTERED',
@@ -750,7 +754,7 @@ our %labels = (
 our %ops_using = (
     OPpALLOW_FAKE            => [qw(rv2gv)],
     OPpASSIGN_BACKWARDS      => [qw(sassign)],
-    OPpASSIGN_COMMON         => [qw(aassign)],
+    OPpASSIGN_COMMON_AGG     => [qw(aassign)],
     OPpCONST_BARE            => [qw(const)],
     OPpCOREARGS_DEREF1       => [qw(coreargs)],
     OPpEARLY_CV              => [qw(gv)],
@@ -793,6 +797,8 @@ our %ops_using = (
     OPpTRANS_COMPLEMENT      => [qw(trans transr)],
 );
 
+$ops_using{OPpASSIGN_COMMON_RC1} = $ops_using{OPpASSIGN_COMMON_AGG};
+$ops_using{OPpASSIGN_COMMON_SCALAR} = $ops_using{OPpASSIGN_COMMON_AGG};
 $ops_using{OPpASSIGN_CV_TO_GV} = $ops_using{OPpASSIGN_BACKWARDS};
 $ops_using{OPpCONST_ENTERED} = $ops_using{OPpCONST_BARE};
 $ops_using{OPpCONST_NOVER} = $ops_using{OPpCONST_BARE};
index 06fbfd1..1854982 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 no warnings 'surrogate';    # surrogates can be inputs to this
 use charnames ();
 
-our $VERSION = '0.61';
+our $VERSION = '0.62';
 
 require Exporter;
 
@@ -775,7 +775,6 @@ sub charprop ($$) {
     }
     else {
         croak __PACKAGE__, "::charprop: Internal error: unknown format '$format'.  Please perlbug this";
-        return undef;
     }
 }
 
@@ -877,6 +876,10 @@ sub _charblocks {
            local $_;
            local $/ = "\n";
            while (<$BLOCKSFH>) {
+
+                # Old versions used a different syntax to mark the range.
+                $_ =~ s/;\s+/../ if $v_unicode_version lt v3.1.0;
+
                if (/^([0-9A-F]+)\.\.([0-9A-F]+);\s+(.+)/) {
                    my ($lo, $hi) = (hex($1), hex($2));
                    my $subrange = [ $lo, $hi, $3 ];
@@ -2652,9 +2655,11 @@ or even better, C<"Gc=LC">).
 
 Many Unicode properties have more than one name (or alias).  C<prop_invmap>
 understands all of these, including Perl extensions to them.  Ambiguities are
-resolved as described above for L</prop_aliases()>.  The Perl internal
-property "Perl_Decimal_Digit, described below, is also accepted.  An empty
-list is returned if the property name is unknown.
+resolved as described above for L</prop_aliases()> (except if a property has
+both a complete mapping, and a binary C<Y>/C<N> mapping, then specifying the
+property name prefixed by C<"is"> causes the binary one to be returned).  The
+Perl internal property "Perl_Decimal_Digit, described below, is also accepted.
+An empty list is returned if the property name is unknown.
 See L<perluniprops/Properties accessible through Unicode::UCD> for the
 properties acceptable as inputs to this function.
 
@@ -3253,8 +3258,8 @@ RETRY:
             # we need to also read in that table.  Create a hash with the keys
             # being the code points, and the values being a list of the
             # aliases for the code point key.
-            my ($aliases_code_points, $aliases_maps, undef, undef) =
-                                                &prop_invmap('Name_Alias');
+            my ($aliases_code_points, $aliases_maps, undef, undef)
+                  = &prop_invmap("_Perl_Name_Alias", '_perl_core_internal_ok');
             my %aliases;
             for (my $i = 0; $i < @$aliases_code_points; $i++) {
                 my $code_point = $aliases_code_points->[$i];
@@ -3545,7 +3550,19 @@ RETRY:
 
     if ($swash->{'LIST'} =~ /^V/) {
         @invlist = split "\n", $swash->{'LIST'} =~ s/ \s* (?: \# .* )? $ //xmgr;
-        shift @invlist;
+
+        shift @invlist;     # Get rid of 'V';
+
+        # Could need to be inverted: add or subtract a 0 at the beginning of
+        # the list.
+        if ($swash->{'INVERT_IT'}) {
+            if (@invlist && $invlist[0] == 0) {
+                shift @invlist;
+            }
+            else {
+                unshift @invlist, 0;
+            }
+        }
         foreach my $i (0 .. @invlist - 1) {
             $invmap[$i] = ($i % 2 == 0) ? 'Y' : 'N'
         }
@@ -3558,6 +3575,10 @@ RETRY:
         }
     }
     else {
+        if ($swash->{'INVERT_IT'}) {
+            croak __PACKAGE__, ":prop_invmap: Don't know how to deal with inverted";
+        }
+
         # The LIST input lines look like:
         # ...
         # 0374\t\tCommon
@@ -3873,7 +3894,7 @@ RETRY:
         map { $_ = [ split " ", $_  ] if $_ =~ / / } @invmap;
         $format = 'sl';
     }
-    elsif ($returned_prop eq 'ToNameAlias') {
+    elsif ($returned_prop =~ / To ( _Perl )? NameAlias/x) {
 
         # This property currently doesn't have any lists, but theoretically
         # could
@@ -3888,7 +3909,14 @@ RETRY:
         # to indicate that need to add code point to it.
         $format = 'ar';
     }
-    elsif ($format ne 'n' && $format ne 'a') {
+    elsif ($format eq 'ax') {
+
+        # Normally 'ax' properties have overrides, and will have been handled
+        # above, but if not, they still need adjustment, and the hex values
+        # have already been converted to decimal
+        $format = 'a';
+    }
+    elsif ($format ne 'n' && $format !~ / ^ a /x) {
 
         # All others are simple scalars
         $format = 's';
@@ -4079,6 +4107,15 @@ for its block using C<charblock>).
 Note that starting in Unicode 6.1, many of the block names have shorter
 synonyms.  These are always given in the new style.
 
+=head2 Use with older Unicode versions
+
+The functions in this module work as well as can be expected when
+used on earlier Unicode versions.  But, obviously, they use the available data
+from that Unicode version.  For example, if the Unicode version predates the
+definition of the script property (Unicode 3.1), then any function that deals
+with scripts is going to return C<undef> for the script portion of the return
+value.
+
 =head1 AUTHOR
 
 Jarkko Hietaniemi.  Now maintained by perl5 porters.
index a799dd0..22b2edb 100644 (file)
@@ -19,14 +19,22 @@ use Test::More;
 
 use Unicode::UCD qw(charinfo charprop charprops_all);
 
+my $expected_version = '8.0.0';
+my $current_version = Unicode::UCD::UnicodeVersion;
+my $v_unicode_version = pack "C*", split /\./, $current_version;
+my $unknown_script = ($v_unicode_version lt v5.0.0)
+                     ? 'Common'
+                     : 'Unknown';
 my $input_record_separator = 7; # Make sure Unicode::UCD isn't affected by
 $/ = $input_record_separator;   # setting this.
 
 my $charinfo;
 
 is(charinfo(0x110000), undef, "Verify charinfo() of non-unicode is undef");
-is(charprop(0x110000, 'age'), "Unassigned", "Verify charprop(age) of non-unicode is Unassigned");
-is(charprop(0x110000, 'in'), "Unassigned", "Verify charprop(in), a bipartite Perl extension, works");
+if ($v_unicode_version ge v3.2.0) {
+    is(lc charprop(0x110000, 'age'), lc "Unassigned", "Verify charprop(age) of non-unicode is Unassigned");
+    is(charprop(0x110000, 'in'), "Unassigned", "Verify charprop(in), a bipartite Perl extension, works");
+}
 is(charprop(0x110000, 'Any'), undef, "Verify charprop of non-bipartite Perl extension returns undef");
 
 my $cp = 0;
@@ -37,9 +45,10 @@ is($charinfo->{code},           "0000",
 is($charinfo->{name},           "<control>");
 is(charprop($cp, "name"),       "");
 
-# This gets a sl-type property returning a flattened list
-is(charprop($cp, "name_alias"), "NULL: control,NUL: abbreviation");
-
+if ($v_unicode_version ge v6.1.0) {
+    # This gets a sl-type property returning a flattened list
+    is(charprop($cp, "name_alias"), "NULL: control,NUL: abbreviation");
+}
 is($charinfo->{category},       "Cc");
 is(charprop($cp, "category"),   "Control");
 is($charinfo->{combining},      "0");
@@ -66,8 +75,8 @@ is($charinfo->{title},          "");
 is(charprop($cp, "tc"),         "\0");
 is($charinfo->{block},          "Basic Latin");
 is(charprop($cp, "block"),      "Basic_Latin");
-is($charinfo->{script},         "Common");
-is(charprop($cp, "script"),     "Common");
+is($charinfo->{script},         "Common") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, "script"),     "Common") if $v_unicode_version gt v3.0.1;
 
 $cp = utf8::unicode_to_native(0x41);
 my $A_code = sprintf("%04X", ord("A"));
@@ -103,8 +112,8 @@ is($charinfo->{title},          "");
 is(charprop($cp, 'tc'),         "A");
 is($charinfo->{block},          "Basic Latin");
 is(charprop($cp, 'block'),      "Basic_Latin");
-is($charinfo->{script},         "Latin");
-is(charprop($cp, 'script'),     "Latin");
+is($charinfo->{script},         "Latin") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, 'script'),     "Latin") if $v_unicode_version gt v3.0.1;
 
 $cp = 0x100;
 $charinfo = charinfo($cp);
@@ -138,8 +147,8 @@ is($charinfo->{title},          "");
 is(charprop($cp, 'tc'),         "\x{100}");
 is($charinfo->{block},          "Latin Extended-A");
 is(charprop($cp, 'block'),      "Latin_Extended_A");
-is($charinfo->{script},         "Latin");
-is(charprop($cp, 'script'),     "Latin");
+is($charinfo->{script},         "Latin") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, 'script'),     "Latin") if $v_unicode_version gt v3.0.1;
 
 $cp = 0x590;               # 0x0590 is in the Hebrew block but unused.
 $charinfo = charinfo($cp);
@@ -152,7 +161,9 @@ is(charprop($cp, 'gc'),         "Unassigned");
 is($charinfo->{combining},      undef);
 is(charprop($cp, 'ccc'),        "Not_Reordered");
 is($charinfo->{bidi},           undef);
-is(charprop($cp, 'bc'),         "Right_To_Left");
+if ($v_unicode_version gt v3.2.0) {
+    is(charprop($cp, 'bc'),         "Right_To_Left");
+}
 is($charinfo->{decomposition},  undef);
 is(charprop($cp, 'dm'),         "\x{590}");
 is($charinfo->{decimal},        undef);
@@ -174,7 +185,8 @@ is(charprop($cp, 'tc'),         "\x{590}");
 is($charinfo->{block},          undef);
 is(charprop($cp, 'block'),      "Hebrew");
 is($charinfo->{script},         undef);
-is(charprop($cp, 'script'),     "Unknown");
+is(charprop($cp, 'script'),     $unknown_script) if $v_unicode_version gt
+v3.0.1;
 
 # 0x05d0 is in the Hebrew block and used.
 
@@ -210,8 +222,8 @@ is($charinfo->{title},          "");
 is(charprop($cp, 'tc'),         "\x{5d0}");
 is($charinfo->{block},          "Hebrew");
 is(charprop($cp, 'block'),      "Hebrew");
-is($charinfo->{script},         "Hebrew");
-is(charprop($cp, 'script'),     "Hebrew");
+is($charinfo->{script},         "Hebrew") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, 'script'),     "Hebrew") if $v_unicode_version gt v3.0.1;
 
 # An open syllable in Hangul.
 
@@ -247,8 +259,8 @@ is($charinfo->{title},          "");
 is(charprop($cp, 'tc'),         "\x{AC00}");
 is($charinfo->{block},          "Hangul Syllables");
 is(charprop($cp, 'block'),      "Hangul_Syllables");
-is($charinfo->{script},         "Hangul");
-is(charprop($cp, 'script'),     "Hangul");
+is($charinfo->{script},         "Hangul") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, 'script'),     "Hangul") if $v_unicode_version gt v3.0.1;
 
 # A closed syllable in Hangul.
 
@@ -284,85 +296,89 @@ is($charinfo->{title},          "");
 is(charprop($cp, 'tc'),         "\x{AE00}");
 is($charinfo->{block},          "Hangul Syllables");
 is(charprop($cp, 'block'),      "Hangul_Syllables");
-is($charinfo->{script},         "Hangul");
-is(charprop($cp, 'script'),     "Hangul");
-
-$cp = 0x1D400;
-$charinfo = charinfo($cp);
+is($charinfo->{script},         "Hangul") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, 'script'),     "Hangul") if $v_unicode_version gt v3.0.1;
+
+if ($v_unicode_version gt v3.0.1) {
+    $cp = 0x1D400;
+    $charinfo = charinfo($cp);
+
+    is($charinfo->{code},           "1D400", "MATHEMATICAL BOLD CAPITAL A");
+    is($charinfo->{name},           "MATHEMATICAL BOLD CAPITAL A");
+    is(charprop($cp, 'name'),       "MATHEMATICAL BOLD CAPITAL A");
+    is($charinfo->{category},       "Lu");
+    is(charprop($cp, 'gc'),         "Uppercase_Letter");
+    is($charinfo->{combining},      "0");
+    is(charprop($cp, 'ccc'),        "Not_Reordered");
+    is($charinfo->{bidi},           "L");
+    is(charprop($cp, 'bc'),         "Left_To_Right");
+    is($charinfo->{decomposition},  "<font> $A_code");
+    is(charprop($cp, 'dm'),         "A");
+    is($charinfo->{decimal},        "");
+    is($charinfo->{digit},          "");
+    is($charinfo->{numeric},        "");
+    is(charprop($cp, 'nv'),         "NaN");
+    is($charinfo->{mirrored},       "N");
+    is(charprop($cp, 'bidim'),      "No");
+    is($charinfo->{unicode10},      "");
+    is(charprop($cp, 'na1'),        "");
+    is($charinfo->{comment},        "");
+    is(charprop($cp, 'isc'),        "");
+    is($charinfo->{upper},          "");
+    is(charprop($cp, 'uc'),         "\x{1D400}");
+    is($charinfo->{lower},          "");
+    is(charprop($cp, 'lc'),         "\x{1D400}");
+    is($charinfo->{title},          "");
+    is(charprop($cp, 'tc'),         "\x{1D400}");
+    is($charinfo->{block},          "Mathematical Alphanumeric Symbols");
+    is(charprop($cp, 'block'),      "Mathematical_Alphanumeric_Symbols");
+    is($charinfo->{script},         "Common");
+    is(charprop($cp, 'script'),     "Common");
+}
 
-is($charinfo->{code},           "1D400", "MATHEMATICAL BOLD CAPITAL A");
-is($charinfo->{name},           "MATHEMATICAL BOLD CAPITAL A");
-is(charprop($cp, 'name'),       "MATHEMATICAL BOLD CAPITAL A");
-is($charinfo->{category},       "Lu");
-is(charprop($cp, 'gc'),         "Uppercase_Letter");
-is($charinfo->{combining},      "0");
-is(charprop($cp, 'ccc'),        "Not_Reordered");
-is($charinfo->{bidi},           "L");
-is(charprop($cp, 'bc'),         "Left_To_Right");
-is($charinfo->{decomposition},  "<font> $A_code");
-is(charprop($cp, 'dm'),         "A");
-is($charinfo->{decimal},        "");
-is($charinfo->{digit},          "");
-is($charinfo->{numeric},        "");
-is(charprop($cp, 'nv'),         "NaN");
-is($charinfo->{mirrored},       "N");
-is(charprop($cp, 'bidim'),      "No");
-is($charinfo->{unicode10},      "");
-is(charprop($cp, 'na1'),        "");
-is($charinfo->{comment},        "");
-is(charprop($cp, 'isc'),        "");
-is($charinfo->{upper},          "");
-is(charprop($cp, 'uc'),         "\x{1D400}");
-is($charinfo->{lower},          "");
-is(charprop($cp, 'lc'),         "\x{1D400}");
-is($charinfo->{title},          "");
-is(charprop($cp, 'tc'),         "\x{1D400}");
-is($charinfo->{block},          "Mathematical Alphanumeric Symbols");
-is(charprop($cp, 'block'),      "Mathematical_Alphanumeric_Symbols");
-is($charinfo->{script},         "Common");
-is(charprop($cp, 'script'),     "Common");
-
-$cp = 0x9FBA;                  #Bug 58428
-$charinfo = charinfo(0x9FBA);
-
-is($charinfo->{code},           "9FBA", "U+9FBA");
-is($charinfo->{name},           "CJK UNIFIED IDEOGRAPH-9FBA");
-is(charprop($cp, 'name'),       "CJK UNIFIED IDEOGRAPH-9FBA");
-is($charinfo->{category},       "Lo");
-is(charprop($cp, 'gc'),         "Other_Letter");
-is($charinfo->{combining},      "0");
-is(charprop($cp, 'ccc'),        "Not_Reordered");
-is($charinfo->{bidi},           "L");
-is(charprop($cp, 'bc'),         "Left_To_Right");
-is($charinfo->{decomposition},  "");
-is(charprop($cp, 'dm'),         "\x{9FBA}");
-is($charinfo->{decimal},        "");
-is($charinfo->{digit},          "");
-is($charinfo->{numeric},        "");
-is(charprop($cp, 'nv'),         "NaN");
-is($charinfo->{mirrored},       "N");
-is(charprop($cp, 'bidim'),      "No");
-is($charinfo->{unicode10},      "");
-is(charprop($cp, 'na1'),        "");
-is($charinfo->{comment},        "");
-is(charprop($cp, 'isc'),        "");
-is($charinfo->{upper},          "");
-is(charprop($cp, 'uc'),         "\x{9FBA}");
-is($charinfo->{lower},          "");
-is(charprop($cp, 'lc'),         "\x{9FBA}");
-is($charinfo->{title},          "");
-is(charprop($cp, 'tc'),         "\x{9FBA}");
-is($charinfo->{block},          "CJK Unified Ideographs");
-is(charprop($cp, 'block'),      "CJK_Unified_Ideographs");
-is($charinfo->{script},         "Han");
-is(charprop($cp, 'script'),     "Han");
+if ($v_unicode_version ge v4.1.0) {
+    $cp = 0x9FBA;                      #Bug 58428
+    $charinfo = charinfo(0x9FBA);
+
+    is($charinfo->{code},           "9FBA", "U+9FBA");
+    is($charinfo->{name},           "CJK UNIFIED IDEOGRAPH-9FBA");
+    is(charprop($cp, 'name'),       "CJK UNIFIED IDEOGRAPH-9FBA");
+    is($charinfo->{category},       "Lo");
+    is(charprop($cp, 'gc'),         "Other_Letter");
+    is($charinfo->{combining},      "0");
+    is(charprop($cp, 'ccc'),        "Not_Reordered");
+    is($charinfo->{bidi},           "L");
+    is(charprop($cp, 'bc'),         "Left_To_Right");
+    is($charinfo->{decomposition},  "");
+    is(charprop($cp, 'dm'),         "\x{9FBA}");
+    is($charinfo->{decimal},        "");
+    is($charinfo->{digit},          "");
+    is($charinfo->{numeric},        "");
+    is(charprop($cp, 'nv'),         "NaN");
+    is($charinfo->{mirrored},       "N");
+    is(charprop($cp, 'bidim'),      "No");
+    is($charinfo->{unicode10},      "");
+    is(charprop($cp, 'na1'),        "");
+    is($charinfo->{comment},        "");
+    is(charprop($cp, 'isc'),        "");
+    is($charinfo->{upper},          "");
+    is(charprop($cp, 'uc'),         "\x{9FBA}");
+    is($charinfo->{lower},          "");
+    is(charprop($cp, 'lc'),         "\x{9FBA}");
+    is($charinfo->{title},          "");
+    is(charprop($cp, 'tc'),         "\x{9FBA}");
+    is($charinfo->{block},          "CJK Unified Ideographs");
+    is(charprop($cp, 'block'),      "CJK_Unified_Ideographs");
+    is($charinfo->{script},         "Han");
+    is(charprop($cp, 'script'),     "Han");
+}
 
 use Unicode::UCD qw(charblock charscript);
 
 # 0x0590 is in the Hebrew block but unused.
 
 is(charblock(0x590),          "Hebrew", "0x0590 - Hebrew unused charblock");
-is(charscript(0x590),         "Unknown",    "0x0590 - Hebrew unused charscript");
+is(charscript(0x590),         $unknown_script, "0x0590 - Hebrew unused charscript") if $v_unicode_version gt v3.0.1;
 is(charblock(0x1FFFF),        "No_Block", "0x1FFFF - unused charblock");
 
 my $fraction_3_4_code = sprintf("%04X", utf8::unicode_to_native(0xbe));
@@ -401,8 +417,8 @@ is($charinfo->{title},          "");
 is(charprop($cp, 'tc'),         chr hex $cp);
 is($charinfo->{block},          "Latin-1 Supplement");
 is(charprop($cp, 'block'),      "Latin_1_Supplement");
-is($charinfo->{script},         "Common");
-is(charprop($cp, 'script'),     "Common");
+is($charinfo->{script},         "Common") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, 'script'),     "Common") if $v_unicode_version gt v3.0.1;
 
 # This is to test a case where both simple and full lowercases exist and
 # differ
@@ -435,13 +451,13 @@ is(charprop($cp, 'isc'),        "");
 is($charinfo->{upper},          "");
 is(charprop($cp, 'uc'),         "\x{130}");
 is($charinfo->{lower},          $i_code);
-is(charprop($cp, 'lc'),         "i\x{307}");
+is(charprop($cp, 'lc'),         "i\x{307}") if $v_unicode_version ge v3.2.0;
 is($charinfo->{title},          "");
 is(charprop($cp, 'tc'),         "\x{130}");
 is($charinfo->{block},          "Latin Extended-A");
 is(charprop($cp, 'block'),      "Latin_Extended_A");
-is($charinfo->{script},         "Latin");
-is(charprop($cp, 'script'),     "Latin");
+is($charinfo->{script},         "Latin") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, 'script'),     "Latin") if $v_unicode_version gt v3.0.1;
 
 # This is to test a case where both simple and full uppercases exist and
 # differ
@@ -478,19 +494,23 @@ is($charinfo->{title},          "1F88");
 is(charprop($cp, "tc"),         "\x{1F88}");
 is($charinfo->{block},          "Greek Extended");
 is(charprop($cp, "block"),      "Greek_Extended");
-is($charinfo->{script},         "Greek");
-is(charprop($cp, "script"),     "Greek");
+is($charinfo->{script},         "Greek") if $v_unicode_version gt v3.0.1;
+is(charprop($cp, "script"),     "Greek") if $v_unicode_version gt v3.0.1;
 
 is(charprop(ord("A"), "foo"),    undef,
                         "Verify charprop of unknown property returns <undef>");
 
 # These were created from inspection of the code to exercise the branches
-is(charprop(ord("("), "bpb"),    ")",
+if ($v_unicode_version ge v6.3.0) {
+    is(charprop(ord("("), "bpb"),    ")",
             "Verify charprop figures out that s-type properties can be char");
+}
 is(charprop(ord("9"), "nv"),     9,
                             "Verify charprop can adjust an ar-type property");
-is(charprop(utf8::unicode_to_native(0xAD), "NFKC_Casefold"), "",
+if ($v_unicode_version ge v5.2.0) {
+    is(charprop(utf8::unicode_to_native(0xAD), "NFKC_Casefold"), "",
                     "Verify charprop can handle an \"\" in ae-type property");
+}
 
 my $mark_props_ref = charprops_all(0x300);
 is($mark_props_ref->{'Bidi_Class'}, "Nonspacing_Mark",
@@ -499,9 +519,13 @@ is($mark_props_ref->{'Bidi_Mirrored'}, "No");
 is($mark_props_ref->{'Canonical_Combining_Class'}, "Above");
 is($mark_props_ref->{'Case_Folding'}, "\x{300}");
 is($mark_props_ref->{'Decomposition_Mapping'}, "\x{300}");
-is($mark_props_ref->{'Decomposition_Type'}, "None");
+is($mark_props_ref->{'Decomposition_Type'}, ($v_unicode_version le v4.0.0)
+                                             ? "none"
+                                             : "None");
 is($mark_props_ref->{'General_Category'}, "Nonspacing_Mark");
-is($mark_props_ref->{'ISO_Comment'}, "");
+if ($v_unicode_version gt v5.1.0) {
+    is($mark_props_ref->{'ISO_Comment'}, "");
+}
 is($mark_props_ref->{'Lowercase_Mapping'}, "\x{300}");
 is($mark_props_ref->{'Name'}, "COMBINING GRAVE ACCENT");
 is($mark_props_ref->{'Numeric_Type'}, "None");
@@ -522,36 +546,40 @@ ok(exists $charblocks->{Thai}, 'Thai charblock exists');
 is($charblocks->{Thai}->[0]->[0], hex('0e00'));
 ok(!exists $charblocks->{PigLatin}, 'PigLatin charblock does not exist');
 
-my $charscripts = charscripts();
+if ($v_unicode_version gt v3.0.1) {
+    my $charscripts = charscripts();
 
-ok(exists $charscripts->{Armenian}, 'Armenian charscript exists');
-is($charscripts->{Armenian}->[0]->[0], hex('0531'));
-ok(!exists $charscripts->{PigLatin}, 'PigLatin charscript does not exist');
+    ok(exists $charscripts->{Armenian}, 'Armenian charscript exists');
+    is($charscripts->{Armenian}->[0]->[0], hex('0531'));
+    ok(!exists $charscripts->{PigLatin}, 'PigLatin charscript does not exist');
 
-my $charscript;
+    my $charscript;
 
-$charscript = charscript("12ab");
-is($charscript, 'Ethiopic', 'Ethiopic charscript');
+    $charscript = charscript("12ab");
+    is($charscript, 'Ethiopic', 'Ethiopic charscript');
 
-$charscript = charscript("0x12ab");
-is($charscript, 'Ethiopic');
+    $charscript = charscript("0x12ab");
+    is($charscript, 'Ethiopic');
 
-$charscript = charscript("U+12ab");
-is($charscript, 'Ethiopic');
+    $charscript = charscript("U+12ab");
+    is($charscript, 'Ethiopic');
 
-my $ranges;
+    my $ranges;
 
-$ranges = charscript('Ogham');
-is($ranges->[0]->[0], hex('1680'), 'Ogham charscript');
-is($ranges->[0]->[1], hex('169C'));
+    if ($v_unicode_version gt v4.0.0) {
+        $ranges = charscript('Ogham');
+        is($ranges->[0]->[0], hex('1680'), 'Ogham charscript');
+        is($ranges->[0]->[1], hex('169C'));
+    }
 
-use Unicode::UCD qw(charinrange);
+    use Unicode::UCD qw(charinrange);
 
-$ranges = charscript('Cherokee');
-ok(!charinrange($ranges, "139f"), 'Cherokee charscript');
-ok( charinrange($ranges, "13a0"));
-ok( charinrange($ranges, "13f4"));
-ok(!charinrange($ranges, "13ff"));
+    $ranges = charscript('Cherokee');
+    ok(!charinrange($ranges, "139f"), 'Cherokee charscript');
+    ok( charinrange($ranges, "13a0"));
+    ok( charinrange($ranges, "13f4"));
+    ok(!charinrange($ranges, "13ff"));
+}
 
 use Unicode::UCD qw(general_categories);
 
@@ -571,7 +599,8 @@ is($bt->{AL}, 'Right-to-Left Arabic', 'AL is Right-to-Left Arabic');
 
 # If this fails, then maybe one should look at the Unicode changes to see
 # what else might need to be updated.
-is(Unicode::UCD::UnicodeVersion, '8.0.0', 'UnicodeVersion');
+ok($current_version le $expected_version,
+                    "Verify there isn't a new Unicode version to upgrade to");
 
 use Unicode::UCD qw(compexcl);
 
@@ -593,66 +622,93 @@ is($casefold->{full}, $a_code, 'casefold native(0x41) full');
 is($casefold->{simple}, $a_code, 'casefold native(0x41) simple');
 is($casefold->{turkic}, "", 'casefold native(0x41) turkic');
 
-$casefold = casefold(utf8::unicode_to_native(0xdf));
 my $sharp_s_code = sprintf("%04X", utf8::unicode_to_native(0xdf));
 my $S_code = sprintf("%04X", ord "S");
 my $s_code = sprintf("%04X", ord "s");
 
-is($casefold->{code}, $sharp_s_code, 'casefold native(0xDF) code');
-is($casefold->{status}, 'F', 'casefold native(0xDF) status');
-is($casefold->{mapping}, "$s_code $s_code", 'casefold native(0xDF) mapping');
-is($casefold->{full}, "$s_code $s_code", 'casefold native(0xDF) full');
-is($casefold->{simple}, "", 'casefold native(0xDF) simple');
-is($casefold->{turkic}, "", 'casefold native(0xDF) turkic');
-
-# Do different tests depending on if version < 3.2, or not.
-my $v_unicode_version = pack "C*", split /\./, Unicode::UCD::UnicodeVersion();
-if ($v_unicode_version lt v3.2.0) {
-       $casefold = casefold(0x130);
-
-       is($casefold->{code}, '0130', 'casefold 0x130 code');
-       is($casefold->{status}, 'I' , 'casefold 0x130 status');
-       is($casefold->{mapping}, $i_code, 'casefold 0x130 mapping');
-       is($casefold->{full}, $i_code, 'casefold 0x130 full');
-       is($casefold->{simple}, $i_code, 'casefold 0x130 simple');
-       is($casefold->{turkic}, $i_code, 'casefold 0x130 turkic');
-
-       $casefold = casefold(0x131);
-
-       is($casefold->{code}, '0131', 'casefold 0x131 code');
-       is($casefold->{status}, 'I' , 'casefold 0x131 status');
-       is($casefold->{mapping}, $i_code, 'casefold 0x131 mapping');
-       is($casefold->{full}, $i_code, 'casefold 0x131 full');
-       is($casefold->{simple}, $i_code, 'casefold 0x131 simple');
-       is($casefold->{turkic}, $i_code, 'casefold 0x131 turkic');
-} else {
-       $casefold = casefold(utf8::unicode_to_native(0x49));
-
-       is($casefold->{code}, $I_code, 'casefold native(0x49) code');
-       is($casefold->{status}, 'C' , 'casefold native(0x49) status');
-       is($casefold->{mapping}, $i_code, 'casefold native(0x49) mapping');
-       is($casefold->{full}, $i_code, 'casefold native(0x49) full');
-       is($casefold->{simple}, $i_code, 'casefold native(0x49) simple');
-       is($casefold->{turkic}, "0131", 'casefold native(0x49) turkic');
-
-       $casefold = casefold(0x130);
-
-       is($casefold->{code}, '0130', 'casefold 0x130 code');
-       is($casefold->{status}, 'F' , 'casefold 0x130 status');
-       is($casefold->{mapping}, "$i_code 0307", 'casefold 0x130 mapping');
-       is($casefold->{full}, "$i_code 0307", 'casefold 0x130 full');
-       is($casefold->{simple}, "", 'casefold 0x130 simple');
-       is($casefold->{turkic}, $i_code, 'casefold 0x130 turkic');
-}
+if ($v_unicode_version gt v3.0.0) { # These special ones don't work on early
+                                    # perls
+    $casefold = casefold(utf8::unicode_to_native(0xdf));
+
+    is($casefold->{code}, $sharp_s_code, 'casefold native(0xDF) code');
+    is($casefold->{status}, 'F', 'casefold native(0xDF) status');
+    is($casefold->{mapping}, "$s_code $s_code", 'casefold native(0xDF) mapping');
+    is($casefold->{full}, "$s_code $s_code", 'casefold native(0xDF) full');
+    is($casefold->{simple}, "", 'casefold native(0xDF) simple');
+    is($casefold->{turkic}, "", 'casefold native(0xDF) turkic');
+
+    # Do different tests depending on if version < 3.2, or not.
+    if ($v_unicode_version eq v3.0.1) {
+            # In this release, there was no special Turkic values.
+            # Both 0x130 and 0x131 folded to 'i'.
+
+            $casefold = casefold(0x130);
+
+            is($casefold->{code}, '0130', 'casefold 0x130 code');
+            is($casefold->{status}, 'C' , 'casefold 0x130 status');
+            is($casefold->{mapping}, $i_code, 'casefold 0x130 mapping');
+            is($casefold->{full}, $i_code, 'casefold 0x130 full');
+            is($casefold->{simple}, $i_code, 'casefold 0x130 simple');
+            is($casefold->{turkic}, "", 'casefold 0x130 turkic');
+
+            $casefold = casefold(0x131);
+
+            is($casefold->{code}, '0131', 'casefold 0x131 code');
+            is($casefold->{status}, 'C' , 'casefold 0x131 status');
+            is($casefold->{mapping}, $i_code, 'casefold 0x131 mapping');
+            is($casefold->{full}, $i_code, 'casefold 0x131 full');
+            is($casefold->{simple}, $i_code, 'casefold 0x131 simple');
+            is($casefold->{turkic}, "", 'casefold 0x131 turkic');
+    }
+    elsif ($v_unicode_version lt v3.2.0) {
+            $casefold = casefold(0x130);
+
+            is($casefold->{code}, '0130', 'casefold 0x130 code');
+            is($casefold->{status}, 'I' , 'casefold 0x130 status');
+            is($casefold->{mapping}, $i_code, 'casefold 0x130 mapping');
+            is($casefold->{full}, $i_code, 'casefold 0x130 full');
+            is($casefold->{simple}, $i_code, 'casefold 0x130 simple');
+            is($casefold->{turkic}, $i_code, 'casefold 0x130 turkic');
+
+            $casefold = casefold(0x131);
+
+            is($casefold->{code}, '0131', 'casefold 0x131 code');
+            is($casefold->{status}, 'I' , 'casefold 0x131 status');
+            is($casefold->{mapping}, $i_code, 'casefold 0x131 mapping');
+            is($casefold->{full}, $i_code, 'casefold 0x131 full');
+            is($casefold->{simple}, $i_code, 'casefold 0x131 simple');
+            is($casefold->{turkic}, $i_code, 'casefold 0x131 turkic');
+    } else {
+            $casefold = casefold(utf8::unicode_to_native(0x49));
+
+            is($casefold->{code}, $I_code, 'casefold native(0x49) code');
+            is($casefold->{status}, 'C' , 'casefold native(0x49) status');
+            is($casefold->{mapping}, $i_code, 'casefold native(0x49) mapping');
+            is($casefold->{full}, $i_code, 'casefold native(0x49) full');
+            is($casefold->{simple}, $i_code, 'casefold native(0x49) simple');
+            is($casefold->{turkic}, "0131", 'casefold native(0x49) turkic');
+
+            $casefold = casefold(0x130);
+
+            is($casefold->{code}, '0130', 'casefold 0x130 code');
+            is($casefold->{status}, 'F' , 'casefold 0x130 status');
+            is($casefold->{mapping}, "$i_code 0307", 'casefold 0x130 mapping');
+            is($casefold->{full}, "$i_code 0307", 'casefold 0x130 full');
+            is($casefold->{simple}, "", 'casefold 0x130 simple');
+            is($casefold->{turkic}, $i_code, 'casefold 0x130 turkic');
+    }
 
-$casefold = casefold(0x1F88);
+    if ($v_unicode_version gt v3.0.1) {
+        $casefold = casefold(0x1F88);
 
-is($casefold->{code}, '1F88', 'casefold 0x1F88 code');
-is($casefold->{status}, 'S' , 'casefold 0x1F88 status');
-is($casefold->{mapping}, '1F80', 'casefold 0x1F88 mapping');
-is($casefold->{full}, '1F00 03B9', 'casefold 0x1F88 full');
-is($casefold->{simple}, '1F80', 'casefold 0x1F88 simple');
-is($casefold->{turkic}, "", 'casefold 0x1F88 turkic');
+        is($casefold->{code}, '1F88', 'casefold 0x1F88 code');
+        is($casefold->{status}, 'S' , 'casefold 0x1F88 status');
+        is($casefold->{mapping}, '1F80', 'casefold 0x1F88 mapping');
+        is($casefold->{full}, '1F00 03B9', 'casefold 0x1F88 full');
+        is($casefold->{simple}, '1F80', 'casefold 0x1F88 simple');
+        is($casefold->{turkic}, "", 'casefold 0x1F88 turkic');
+    }
+}
 
 ok(!casefold(utf8::unicode_to_native(0x20)));
 
@@ -672,12 +728,16 @@ ok($casespec->{code} eq $sharp_s_code &&
 
 $casespec = casespec(0x307);
 
-ok($casespec->{az}->{code} eq '0307' &&
-   !defined $casespec->{az}->{lower} &&
-   $casespec->{az}->{title} eq '0307'  &&
-   $casespec->{az}->{upper} eq '0307' &&
-   $casespec->{az}->{condition} eq 'az After_I',
-   'casespec 0x307');
+if ($v_unicode_version gt v3.1.0) {
+    ok($casespec->{az}->{code} eq '0307'
+    && !defined $casespec->{az}->{lower}
+    && $casespec->{az}->{title} eq '0307'
+    && $casespec->{az}->{upper} eq '0307'
+    && $casespec->{az}->{condition} eq ($v_unicode_version le v3.2)
+                                        ? 'az After_Soft_Dotted'
+                                        : 'az After_I',
+    'casespec 0x307');
+}
 
 # perl #7305 UnicodeCD::compexcl is weird
 
@@ -699,11 +759,15 @@ is(Unicode::UCD::_getcode('x123'),    undef, "_getcode(x123)");
 is(Unicode::UCD::_getcode('0x123x'),  undef, "_getcode(x123)");
 is(Unicode::UCD::_getcode('U+123x'),  undef, "_getcode(x123)");
 
+SKIP:
 {
+    skip("Script property not in this release", 3) if $v_unicode_version lt v3.1.0;
     my $r1 = charscript('Latin');
     if (ok(defined $r1, "Found Latin script")) {
+        skip("Latin range count will be wrong when using older Unicode release",
+             2) if $v_unicode_version lt $expected_version;
         my $n1 = @$r1;
-        is($n1, 31, "number of ranges in Latin script (Unicode 7.0.0)") if $::IS_ASCII;
+        is($n1, 31, "number of ranges in Latin script (Unicode $expected_version)") if $::IS_ASCII;
         shift @$r1 while @$r1;
         my $r2 = charscript('Latin');
         is(@$r2, $n1, "modifying results should not mess up internal caches");
@@ -714,38 +778,72 @@ is(Unicode::UCD::_getcode('U+123x'),  undef, "_getcode(x123)");
        is(charinfo(0xdeadbeef), undef, "[perl #23273] warnings in Unicode::UCD");
 }
 
-use Unicode::UCD qw(namedseq);
-
-is(namedseq("KATAKANA LETTER AINU P"), "\x{31F7}\x{309A}", "namedseq");
-is(namedseq("KATAKANA LETTER AINU Q"), undef);
-is(namedseq(), undef);
-is(namedseq(qw(foo bar)), undef);
-my @ns = namedseq("KATAKANA LETTER AINU P");
-is(scalar @ns, 2);
-is($ns[0], 0x31F7);
-is($ns[1], 0x309A);
-my %ns = namedseq();
-is($ns{"KATAKANA LETTER AINU P"}, "\x{31F7}\x{309A}");
-@ns = namedseq(42);
-is(@ns, 0);
+if ($v_unicode_version ge v4.1.0) {
+    use Unicode::UCD qw(namedseq);
+
+    is(namedseq("KATAKANA LETTER AINU P"), "\x{31F7}\x{309A}", "namedseq");
+    is(namedseq("KATAKANA LETTER AINU Q"), undef);
+    is(namedseq(), undef);
+    is(namedseq(qw(foo bar)), undef);
+    my @ns = namedseq("KATAKANA LETTER AINU P");
+    is(scalar @ns, 2);
+    is($ns[0], 0x31F7);
+    is($ns[1], 0x309A);
+    my %ns = namedseq();
+    is($ns{"KATAKANA LETTER AINU P"}, "\x{31F7}\x{309A}");
+    @ns = namedseq(42);
+    is(@ns, 0);
+}
 
 use Unicode::UCD qw(num);
-use charnames ":full";
+use charnames ();   # Don't use \N{} on things not in original Unicode
+                    # version; else will get a compilation error when this .t
+                    # is run on an older version.
 
 is(num("0"), 0, 'Verify num("0") == 0');
 is(num("98765"), 98765, 'Verify num("98765") == 98765');
-ok(! defined num("98765\N{FULLWIDTH DIGIT FOUR}"), 'Verify num("98765\N{FULLWIDTH DIGIT FOUR}") isnt defined');
-is(num("\N{NEW TAI LUE DIGIT TWO}"), 2, 'Verify num("\N{NEW TAI LUE DIGIT TWO}") == 2');
-is(num("\N{NEW TAI LUE DIGIT ONE}"), 1, 'Verify num("\N{NEW TAI LUE DIGIT ONE}") == 1');
-is(num("\N{NEW TAI LUE DIGIT TWO}\N{NEW TAI LUE DIGIT ONE}"), 21, 'Verify num("\N{NEW TAI LUE DIGIT TWO}\N{NEW TAI LUE DIGIT ONE}") == 21');
-ok(! defined num("\N{NEW TAI LUE DIGIT TWO}\N{NEW TAI LUE THAM DIGIT ONE}"), 'Verify num("\N{NEW TAI LUE DIGIT TWO}\N{NEW TAI LUE THAM DIGIT ONE}") isnt defined');
-is(num("\N{CHAM DIGIT ZERO}\N{CHAM DIGIT THREE}"), 3, 'Verify num("\N{CHAM DIGIT ZERO}\N{CHAM DIGIT THREE}") == 3');
-ok(! defined num("\N{CHAM DIGIT ZERO}\N{JAVANESE DIGIT NINE}"), 'Verify num("\N{CHAM DIGIT ZERO}\N{JAVANESE DIGIT NINE}") isnt defined');
+ok(! defined num("98765\N{FULLWIDTH DIGIT FOUR}"),
+   'Verify num("98765\N{FULLWIDTH DIGIT FOUR}") isnt defined');
+my $tai_lue_2;
+if ($v_unicode_version ge v4.1.0) {
+    my $tai_lue_1 = charnames::string_vianame("NEW TAI LUE DIGIT ONE");
+    $tai_lue_2 = charnames::string_vianame("NEW TAI LUE DIGIT TWO");
+    is(num($tai_lue_2), 2, 'Verify num("\N{NEW TAI LUE DIGIT TWO}") == 2');
+    is(num($tai_lue_1), 1, 'Verify num("\N{NEW TAI LUE DIGIT ONE}") == 1');
+    is(num($tai_lue_2 . $tai_lue_1), 21,
+       'Verify num("\N{NEW TAI LUE DIGIT TWO}\N{NEW TAI LUE DIGIT ONE}") == 21');
+}
+if ($v_unicode_version ge v5.2.0) {
+    ok(! defined num($tai_lue_2
+         . charnames::string_vianame("NEW TAI LUE THAM DIGIT ONE")),
+         'Verify num("\N{NEW TAI LUE DIGIT TWO}\N{NEW TAI LUE THAM DIGIT ONE}") isnt defined');
+}
+if ($v_unicode_version ge v5.1.0) {
+    my $cham_0 = charnames::string_vianame("CHAM DIGIT ZERO");
+    is(num($cham_0 . charnames::string_vianame("CHAM DIGIT THREE")), 3,
+       'Verify num("\N{CHAM DIGIT ZERO}\N{CHAM DIGIT THREE}") == 3');
+    if ($v_unicode_version ge v5.2.0) {
+        ok(! defined num(  $cham_0
+                         . charnames::string_vianame("JAVANESE DIGIT NINE")),
+        'Verify num("\N{CHAM DIGIT ZERO}\N{JAVANESE DIGIT NINE}") isnt defined');
+    }
+}
 is(num("\N{SUPERSCRIPT TWO}"), 2, 'Verify num("\N{SUPERSCRIPT TWO} == 2');
-is(num("\N{ETHIOPIC NUMBER TEN THOUSAND}"), 10000, 'Verify num("\N{ETHIOPIC NUMBER TEN THOUSAND}") == 10000');
-is(num("\N{NORTH INDIC FRACTION ONE HALF}"), .5, 'Verify num("\N{NORTH INDIC FRACTION ONE HALF}") == .5');
-is(num("\N{U+12448}"), 9, 'Verify num("\N{U+12448}") == 9');
-is(num("\N{U+5146}"), 1000000000000, 'Verify num("\N{U+5146}") == 1000000000000');
+if ($v_unicode_version ge v3.0.0) {
+    is(num(charnames::string_vianame("ETHIOPIC NUMBER TEN THOUSAND")), 10000,
+       'Verify num("\N{ETHIOPIC NUMBER TEN THOUSAND}") == 10000');
+}
+if ($v_unicode_version ge v5.2.0) {
+    is(num(charnames::string_vianame("NORTH INDIC FRACTION ONE HALF")),
+       .5,
+       'Verify num("\N{NORTH INDIC FRACTION ONE HALF}") == .5');
+    is(num("\N{U+12448}"), 9, 'Verify num("\N{U+12448}") == 9');
+}
+if ($v_unicode_version gt v3.2.0) { # Is missing from non-Unihan files before
+                                    # this
+    is(num("\N{U+5146}"), 1000000000000,
+                                'Verify num("\N{U+5146}") == 1000000000000');
+}
 
 # Create a user-defined property
 sub InKana {<<'END'}
@@ -979,6 +1077,12 @@ while (<$propvalues>) {
     my @fields = split /\s*;\s*/; # Fields are separated by semi-colons
     my $prop = shift @fields;   # 0th field is the property,
 
+    # 'qc' is short in early versions of the file for any of the quick check
+    # properties.  Choose one of them.
+    if ($prop eq 'qc' && $v_unicode_version le v4.0.0) {
+        $prop = "NFKC_QC";
+    }
+
     # When changing properties, we examine the accumulated values for the old
     # one to see if our function that returns them matches.
     if ($prev_prop ne $prop) {
@@ -986,6 +1090,11 @@ while (<$propvalues>) {
             my @ucd_function_values = prop_values($prev_prop);
             @ucd_function_values = () unless @ucd_function_values;
 
+            # The file didn't include strictly numeric values until after this
+            if ($prev_prop eq 'ccc' && $v_unicode_version le v6.0.0) {
+                @ucd_function_values = grep { /\D/ } @ucd_function_values;
+            }
+
             # This perl extension doesn't appear in the official file
             push @this_prop_values, "Non_Canon" if $prev_prop eq 'dt';
 
@@ -1008,6 +1117,12 @@ while (<$propvalues>) {
     # characters that are ignored under loose matching to test that
     my $mod_prop = "$extra_chars$prop";
 
+    if ($prop eq 'blk' && $v_unicode_version le v5.0.0) {
+        foreach my $element (@fields) {
+            $element =~ s/-/_/g;
+        }
+    }
+
     if ($fields[0] eq 'n/a') {  # See comments in input file, essentially
                                 # means full name and short name are identical
         $fields[0] = $fields[1];
@@ -1190,36 +1305,39 @@ if ($::IS_ASCII) { # On EBCDIC, other things will come first, and can vary
 
     $prop = "lc";
     ($invlist_ref, $invmap_ref, $format, $missing) = prop_invmap($prop);
-    is($format, 'al', "prop_invmap() format of '$prop' is 'al'");
+    my $lc_format = ($v_unicode_version ge v3.2.0) ? 'al' : 'a';
+    is($format, $lc_format, "prop_invmap() format of '$prop' is '$lc_format");
     is($missing, '0', "prop_invmap() missing of '$prop' is '0'");
     is($invlist_ref->[1], 0x41, "prop_invmap('$prop') list[1] is 0x41");
     is($invmap_ref->[1], 0x61, "prop_invmap('$prop') map[1] is 0x61");
 }
 
 # This property is stable and small, so can test all of it
-$prop = "ASCII_Hex_Digit";
-($invlist_ref, $invmap_ref, $format, $missing) = prop_invmap($prop);
-is($format, 's', "prop_invmap() format of '$prop' is 's'");
-is($missing, 'N', "prop_invmap() missing of '$prop' is 'N'");
-if ($::IS_ASCII) {
-    is_deeply($invlist_ref, [ 0x0000, 0x0030, 0x003A,
-                              0x0041, 0x0047,
-                              0x0061, 0x0067, 0x110000
-                            ],
-          "prop_invmap('$prop') code point list is correct");
-}
-elsif ($::IS_EBCDIC) {
-    is_deeply($invlist_ref, [
-            utf8::unicode_to_native(0x0000),
-            utf8::unicode_to_native(0x0061), utf8::unicode_to_native(0x0066) + 1,
-            utf8::unicode_to_native(0x0041), utf8::unicode_to_native(0x0046) + 1,
-            utf8::unicode_to_native(0x0030), utf8::unicode_to_native(0x0039) + 1,
-            utf8::unicode_to_native(0x110000)
-          ],
-          "prop_invmap('$prop') code point list is correct");
+if ($v_unicode_version gt v3.1.0) {
+    $prop = "ASCII_Hex_Digit";
+    ($invlist_ref, $invmap_ref, $format, $missing) = prop_invmap($prop);
+    is($format, 's', "prop_invmap() format of '$prop' is 's'");
+    is($missing, 'N', "prop_invmap() missing of '$prop' is 'N'");
+    if ($::IS_ASCII) {
+        is_deeply($invlist_ref, [ 0x0000, 0x0030, 0x003A,
+                                0x0041, 0x0047,
+                                0x0061, 0x0067, 0x110000
+                                ],
+            "prop_invmap('$prop') code point list is correct");
+    }
+    elsif ($::IS_EBCDIC) {
+        is_deeply($invlist_ref, [
+                utf8::unicode_to_native(0x0000),
+                utf8::unicode_to_native(0x0061), utf8::unicode_to_native(0x0066) + 1,
+                utf8::unicode_to_native(0x0041), utf8::unicode_to_native(0x0046) + 1,
+                utf8::unicode_to_native(0x0030), utf8::unicode_to_native(0x0039) + 1,
+                utf8::unicode_to_native(0x110000)
+            ],
+            "prop_invmap('$prop') code point list is correct");
+    }
+    is_deeply($invmap_ref, [ 'N', 'Y', 'N', 'Y', 'N', 'Y', 'N', 'N' ] ,
+            "prop_invmap('$prop') map list is correct");
 }
-is_deeply($invmap_ref, [ 'N', 'Y', 'N', 'Y', 'N', 'Y', 'N', 'N' ] ,
-          "prop_invmap('$prop') map list is correct");
 
 is(prop_invlist("Unknown property"), undef, "prop_invlist(<Unknown property>) returns undef");
 is(prop_invlist(undef), undef, "prop_invlist(undef) returns undef");
@@ -1240,36 +1358,38 @@ is(prop_invlist("InKana"), undef, "prop_invlist(<user-defined property returns u
 # are there in the files.  As a small hedge against that, test some
 # prop_invlist() tables fully with the known correct result.  We choose
 # ASCII_Hex_Digit again, as it is stable.
-if ($::IS_ASCII) {
-    @invlist = prop_invlist("AHex");
-    is_deeply(\@invlist, [ 0x0030, 0x003A, 0x0041,
-                                 0x0047, 0x0061, 0x0067 ],
-          "prop_invlist('AHex') is exactly the expected set of points");
-    @invlist = prop_invlist("AHex=f");
-    is_deeply(\@invlist, [ 0x0000, 0x0030, 0x003A, 0x0041,
-                                 0x0047, 0x0061, 0x0067 ],
-          "prop_invlist('AHex=f') is exactly the expected set of points");
-}
-elsif ($::IS_EBCDIC) { # Relies on the ranges 0-9, a-f, and A-F each being
-                    # contiguous
-    @invlist = prop_invlist("AHex");
-    is_deeply(\@invlist, [
-            utf8::unicode_to_native(0x0061), utf8::unicode_to_native(0x0066) + 1,
-            utf8::unicode_to_native(0x0041), utf8::unicode_to_native(0x0046) + 1,
-            utf8::unicode_to_native(0x0030), utf8::unicode_to_native(0x0039) + 1,
-       ],
-       "prop_invlist('AHex') is exactly the expected set of points");
-    @invlist = prop_invlist("AHex=f");
-    is_deeply(\@invlist, [
-            utf8::unicode_to_native(0x0000),
-            utf8::unicode_to_native(0x0061),
-            utf8::unicode_to_native(0x0066) + 1,
-            utf8::unicode_to_native(0x0041),
-            utf8::unicode_to_native(0x0046) + 1,
-            utf8::unicode_to_native(0x0030),
-            utf8::unicode_to_native(0x0039) + 1,
-       ],
-       "prop_invlist('AHex=f') is exactly the expected set of points");
+if ($v_unicode_version gt v3.1.0) {
+    if ($::IS_ASCII) {
+        @invlist = prop_invlist("AHex");
+        is_deeply(\@invlist, [ 0x0030, 0x003A, 0x0041,
+                                    0x0047, 0x0061, 0x0067 ],
+            "prop_invlist('AHex') is exactly the expected set of points");
+        @invlist = prop_invlist("AHex=f");
+        is_deeply(\@invlist, [ 0x0000, 0x0030, 0x003A, 0x0041,
+                                    0x0047, 0x0061, 0x0067 ],
+            "prop_invlist('AHex=f') is exactly the expected set of points");
+    }
+    elsif ($::IS_EBCDIC) { # Relies on the ranges 0-9, a-f, and A-F each being
+                        # contiguous
+        @invlist = prop_invlist("AHex");
+        is_deeply(\@invlist, [
+                utf8::unicode_to_native(0x0061), utf8::unicode_to_native(0x0066) + 1,
+                utf8::unicode_to_native(0x0041), utf8::unicode_to_native(0x0046) + 1,
+                utf8::unicode_to_native(0x0030), utf8::unicode_to_native(0x0039) + 1,
+        ],
+        "prop_invlist('AHex') is exactly the expected set of points");
+        @invlist = prop_invlist("AHex=f");
+        is_deeply(\@invlist, [
+                utf8::unicode_to_native(0x0000),
+                utf8::unicode_to_native(0x0061),
+                utf8::unicode_to_native(0x0066) + 1,
+                utf8::unicode_to_native(0x0041),
+                utf8::unicode_to_native(0x0046) + 1,
+                utf8::unicode_to_native(0x0030),
+                utf8::unicode_to_native(0x0039) + 1,
+        ],
+        "prop_invlist('AHex=f') is exactly the expected set of points");
+    }
 }
 
 sub fail_with_diff ($$$$) {
@@ -1547,7 +1667,7 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
                 fail("prop_invmap('$prop')");
                 diag("is unknown to prop_aliases(), and we need it in order to test prop_invmap");
             }
-        next PROPERTY;
+            next PROPERTY;
         }
     }
 
@@ -1555,6 +1675,14 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
     # normalized version.
     $name = &utf8::_loose_name(lc $name);
 
+    # In the case of a combination property, both a map table and a match
+    # table are generated.  For all the tests except prop_invmap(), this is
+    # irrelevant, but for prop_invmap, having an 'is' prefix forces it to
+    # return the match table; otherwise the map.  We thus need to distinguish
+    # between the two forms.  The property name is what has this information.
+    $name = &utf8::_loose_name(lc $prop)
+                         if exists $Unicode::UCD::combination_property{$name};
+
     # Add in the characters that are supposed to be ignored to test loose
     # matching, which the tested function applies to all properties
     $display_prop = "$extra_chars$prop" unless $display_prop;
@@ -2309,7 +2437,7 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
         # And remove the aliases.  We read in the Name_Alias property, and go
         # through them one by one.
         my ($aliases_code_points, $aliases_maps, undef, undef)
-                                                = &prop_invmap('Name_Alias');
+                = &prop_invmap('_Perl_Name_Alias', '_perl_core_internal_ok');
         for (my $i = 0; $i < @$aliases_code_points; $i++) {
             my $code_point = $aliases_code_points->[$i];
 
@@ -2534,11 +2662,13 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
 # A few tests of search_invlist
 use Unicode::UCD qw(search_invlist);
 
-my ($scripts_ranges_ref, $scripts_map_ref) = prop_invmap("Script");
-my $index = search_invlist($scripts_ranges_ref, 0x390);
-is($scripts_map_ref->[$index], "Greek", "U+0390 is Greek");
-my @alpha_invlist = prop_invlist("Alpha");
-is(search_invlist(\@alpha_invlist, ord("\t")), undef, "search_invlist returns undef for code points before first one on the list");
+if ($v_unicode_version ge v3.1.0) { # No Script property before this
+    my ($scripts_ranges_ref, $scripts_map_ref) = prop_invmap("Script");
+    my $index = search_invlist($scripts_ranges_ref, 0x390);
+    is($scripts_map_ref->[$index], "Greek", "U+0390 is Greek");
+    my @alpha_invlist = prop_invlist("Alpha");
+    is(search_invlist(\@alpha_invlist, ord("\t")), undef, "search_invlist returns undef for code points before first one on the list");
+}
 
 ok($/ eq $input_record_separator,  "The record separator didn't get overridden");
 
index d10ce75..25502da 100644 (file)
@@ -72,7 +72,7 @@ my $thisversion = sprintf "%vd", $^V;
 $thisversion =~ s/^v//;
 
 # If this test has failed previously a copy may be left.
-rmtree($name);
+rmtree($name) if -e $name;
 
 my @tests = (
 "-f -n $name", $], <<"EOXSFILES",
index 1ebd0ce..1b510d2 100644 (file)
@@ -848,7 +848,8 @@ sub disp_str ($) {
             }
             else {
                 $result .= "  " unless $prev_was_punct;
-                $result .= charnames::viacode(ord $char);
+                my $name = charnames::viacode(ord $char);
+                $result .= (defined $name) ? $name : ':unknown:';
                 $prev_was_punct = 0;
             }
         }
index ef5fec6..f892334 100644 (file)
@@ -1,15 +1,12 @@
 # The goal is for perl to compile and reasonably run any version of Unicode.
-# But in v5.22, the earliest version that this works for is Unicode 5.1.
 # Working reasonably well doesn't mean that the test suite will run without
-# showing errors.  You may be able to compile an earlier version, and get
-# things to sort-of work. A few of the very-Unicode specific test files have been
+# showing errors.  A few of the very-Unicode specific test files have been
 # modified to account for different versions, but most have not.  For example,
 # some tests use characters that aren't encoded in all Unicode versions; others
 # have hard-coded the General Categories for a code point that were correct at
 # the time the test was written.  Perl itself will not compile under Unicode
 # releases prior to 3.0 without a simple change to Unicode::Normalize.
-# mktables contains instructions for this, as well as other hints for using
-# older Unicode versions.
+# mktables contains instructions for this.
 
 # The *.txt files were copied from
 
 
 # (which always points to the latest version) with subdirectories 'extracted' and
 # 'auxiliary'.  Older versions are located under Public with an appropriate name.
+# They are also available via http at www.unicode.org/versions/
+#
 
 # The Unihan files were not included due to space considerations.  Also NOT
-# included were any *.html files.  It is possible to add the Unihan files, and
-# edit mktables (see instructions near its beginning) to look at them.
+# included were any *.html files.  It is possible to add the Unihan files and
+# have some properties from them automatically compiled.  By editing mktables
+# (see instructions near its beginning) you can add other Unihan properties.
 
 # The file named 'version' should exist and be a single line with the Unicode
 # version, like:
+#
 # 5.2.0
+#
+# (without the initial '# ')
 
 # To be 8.3 filesystem friendly, the names of some of the input files have been
 # changed from the values that are in the Unicode DB.  Not all of the Test
@@ -58,6 +61,8 @@ mv extracted/DerivedJoiningType.txt extracted/DJoinType.txt
 mv extracted/DerivedLineBreak.txt extracted/DLineBreak.txt
 mv extracted/DerivedNumericType.txt extracted/DNumType.txt
 mv extracted/DerivedNumericValues.txt extracted/DNumValues.txt
+rmdir extracted 2>/dev/null     # Will fail if non-empty, but if it is empty
+                                # was an early release that didn't have it.
 
 mv auxiliary/GraphemeBreakTest.txt auxiliary/GCBTest.txt
 mv auxiliary/LineBreakTest.txt auxiliary/LBTest.txt
@@ -81,14 +86,31 @@ mv Unihan_Variants.txt UnihanVariants.txt
 # filesystems.
 
 # mktables is used to generate the tables used by the rest of Perl.  It will
-# warn you about any *.txt files in the directory substructure that it doesn't
-# know about.  You should remove any so-identified, or edit mktables to add
-# them to its lists to process.  You can run
+# warn you about any *.txt and *.html files in the directory substructure that
+# it doesn't know about.  You should remove any so-identified, or edit mktables
+# to add them to its lists to process.  You can run
 #
 #    mktables -globlist
 #
-#to have it try to process these tables generically.
-#
+# to have it try to process these tables generically.
+
+# COMPILING ON OLDER UNICODE VERSIONS
+#
+# To compile perl for use with an older Unicode release, delete everything in
+# the lib/unicore directory except mktables and Makefile.  Then download the
+# Unicode-supplied files for the desired version to that directory  (A url for
+# these is given earlier in this file).  Then create the 'version' file with a
+# single line, like '6.1.0'.  Do a 'make test' from the project level.  You
+# will get some porting errors for needing to regen.  Regenerate what it tells
+# you are needed, and make test again.  If you compile an old enough version,
+# you will also have to download a few files from later Unicode versions,
+# following the instructions that will be given if warranted.  It should
+# compile in any release without warnings, except for some casing conflicts
+# in Unicode 2.1.8, and some extraneous files will show up in very early
+# releases of the form qr/diff.*\.txt/.  If you add Unihan.txt, one line is in error in
+#
+# Other glitches are noted in mktables under 'UNICODE VERSIONS NOTES'
+
 # FOR PUMPKINS
 #
 # The files are inter-related.  If you take the latest UnicodeData.txt, for
index 572c299..8153936 100644 (file)
@@ -4,17 +4,9 @@
 # Any files created or read by this program should be listed in 'mktables.lst'
 # Use -makelist to regenerate it.
 
-# Needs 'no overloading' to run faster on miniperl.  Code commented out at the
-# subroutine objaddr can be used instead to work as far back (untested) as
-# 5.8: needs pack "U".  But almost all occurrences of objaddr have been
-# removed in favor of using 'no overloading'.  You also would have to go
-# through and replace occurrences like:
-#       my $addr = do { no overloading; pack 'J', $self; }
-# with
-#       my $addr = main::objaddr $self;
-# (or reverse commit 9b01bafde4b022706c3d6f947a0963f821b2e50b
-# that instituted the change to main::objaddr, and subsequent commits that
-# changed 0+$self to pack 'J', $self.)
+# There was an attempt when this was first rewritten to make it 5.8
+# compatible, but that has now been abandoned, and newer constructs are used
+# as convenient.
 
 my $start_time;
 BEGIN { # Get the time the script started running; do it at compilation to
@@ -32,6 +24,7 @@ use File::Path;
 use File::Spec;
 use Text::Tabs;
 use re "/aa";
+use feature 'state';
 
 sub DEBUG () { 0 }  # Set to 0 for production; 1 for development
 my $debugging_build = $Config{"ccflags"} =~ /-DDEBUGGING/;
@@ -292,8 +285,8 @@ my $unicode_reference_url = 'http://www.unicode.org/reports/tr44/';
 # As mentioned earlier, some properties are given in more than one file.  In
 # particular, the files in the extracted directory are supposedly just
 # reformattings of the others.  But they contain information not easily
-# derivable from the other files, including results for Unihan, which this
-# program doesn't ordinarily look at, and for unassigned code points.  They
+# derivable from the other files, including results for Unihan (which isn't
+# usually available to this program) and for unassigned code points.  They
 # also have historically had errors or been incomplete.  In an attempt to
 # create the best possible data, this program thus processes them first to
 # glean information missing from the other files; then processes those other
@@ -411,24 +404,19 @@ my $unicode_reference_url = 'http://www.unicode.org/reports/tr44/';
 #
 # A NOTE ON UNIHAN
 #
-# This program can generate tables from the Unihan database.  But it doesn't
-# by default, letting the CPAN module Unicode::Unihan handle them.  Prior to
-# version 5.2, this database was in a single file, Unihan.txt.  In 5.2 the
-# database was split into 8 different files, all beginning with the letters
-# 'Unihan'.  This program will read those file(s) if present, but it needs to
-# know which of the many properties in the file(s) should have tables created
-# for them.  It will create tables for any properties listed in
-# PropertyAliases.txt and PropValueAliases.txt, plus any listed in the
-# @cjk_properties array and the @cjk_property_values array.  Thus, if a
-# property you want is not in those files of the release you are building
-# against, you must add it to those two arrays.  Starting in 4.0, the
-# Unicode_Radical_Stroke was listed in those files, so if the Unihan database
-# is present in the directory, a table will be generated for that property.
-# In 5.2, several more properties were added.  For your convenience, the two
-# arrays are initialized with all the 6.0 listed properties that are also in
-# earlier releases.  But these are commented out.  You can just uncomment the
-# ones you want, or use them as a template for adding entries for other
-# properties.
+# This program can generate tables from the Unihan database.  But that db
+# isn't normally available, so it is marked as optional.  Prior to version
+# 5.2, this database was in a single file, Unihan.txt.  In 5.2 the database
+# was split into 8 different files, all beginning with the letters 'Unihan'.
+# If you plunk those files down into the directory mktables ($0) is in, this
+# program will read them and automatically create tables for the properties
+# from it that are listed in PropertyAliases.txt and PropValueAliases.txt,
+# plus any you add to the @cjk_properties array and the @cjk_property_values
+# array, being sure to add necessary '# @missings' lines to the latter.  For
+# Unicode versions earlier than 5.2, most of the Unihan properties are not
+# listed at all in PropertyAliases nor PropValueAliases.  This program assumes
+# for these early releases that you want the properties that are specified in
+# the 5.2 release.
 #
 # You may need to adjust the entries to suit your purposes.  setup_unihan(),
 # and filter_unihan_line() are the functions where this is done.  This program
@@ -437,8 +425,8 @@ my $unicode_reference_url = 'http://www.unicode.org/reports/tr44/';
 #
 # There is a bug in the 3.2 data file in which some values for the
 # kPrimaryNumeric property have commas and an unexpected comment.  A filter
-# could be added for these; or for a particular installation, the Unihan.txt
-# file could be edited to fix them.
+# could be added to correct these; or for a particular installation, the
+# Unihan.txt file could be edited to fix them.
 #
 # HOW TO ADD A FILE TO BE PROCESSED
 #
@@ -484,13 +472,13 @@ my $unicode_reference_url = 'http://www.unicode.org/reports/tr44/';
 # handled by Unicode::Normalize, nor will it compile when presented a version
 # that has them.  However, you can trivially get it to compile by simply
 # ignoring those decompositions, by changing the croak to a carp.  At the time
-# of this writing, the line (in cpan/Unicode-Normalize/mkheader) reads
+# of this writing, the line (in cpan/Unicode-Normalize/Normalize.pm or
+# cpan/Unicode-Normalize/mkheader) reads
 #
 #   croak("Weird Canonical Decomposition of U+$h");
 #
 # Simply comment it out.  It will compile, but will not know about any three
-# character decompositions.  If using the .pm version, there is a similar
-# line.
+# character decompositions.
 
 # The number of code points in \p{alpha=True} halved in 2.1.9.  It turns out
 # that the reason is that the CJK block starting at 4E00 was removed from
@@ -513,10 +501,13 @@ my $unicode_reference_url = 'http://www.unicode.org/reports/tr44/';
 # name for the class, it would not have been affected, but if it used the
 # mnemonic, it would have been.
 #
-# \p{Script=Hrkt} (Katakana_Or_Hiragana) came in 4.0.1.  Before that code
+# \p{Script=Hrkt} (Katakana_Or_Hiragana) came in 4.0.1.  Before that, code
 # points which eventually came to have this script property value, instead
 # mapped to "Unknown".  But in the next release all these code points were
 # moved to \p{sc=common} instead.
+
+# The tests furnished  by Unicode for testing WordBreak and SentenceBreak
+# generate errors in 5.0 and earlier.
 #
 # The default for missing code points for BidiClass is complicated.  Starting
 # in 3.1.1, the derived file DBidiClass.txt handles this, but this program
@@ -596,8 +587,8 @@ our $to_trace = 0;
                                     || $caller_name eq 'trace');
 
         my $output = "";
+        #print STDERR __LINE__, ": ", join ", ", @input, "\n";
         foreach my $string (@input) {
-            #print STDERR __LINE__, ": ", join ", ", @input, "\n";
             if (ref $string eq 'ARRAY' || ref $string eq 'HASH') {
                 $output .= simple_dumper($string);
             }
@@ -623,10 +614,11 @@ our $to_trace = 0;
 
 # This is for a rarely used development feature that allows you to compare two
 # versions of the Unicode standard without having to deal with changes caused
-# by the code points introduced in the later version.  Change the 0 to a
-# string containing a SINGLE dotted Unicode release number (e.g. "2.1").  Only
-# code points introduced in that release and earlier will be used; later ones
-# are thrown away.  You use the version number of the earliest one you want to
+# by the code points introduced in the later version.  You probably also want
+# to use the -annotate option when using this.  Change the 0 to a string
+# containing a SINGLE dotted Unicode release number (e.g. "2.1").  Only code
+# points introduced in that release and earlier will be used; later ones are
+# thrown away.  You use the version number of the earliest one you want to
 # compare; then run this program on directory structures containing each
 # release, and compare the outputs.  These outputs will therefore include only
 # the code points common to both releases, and you can see the changes caused
@@ -861,33 +853,8 @@ if ($v_version gt v3.2.0) {
                                 'Canonical_Combining_Class=Attached_Below_Left'
 }
 
-# These are listed in the Property aliases file in 6.0, but Unihan is ignored
-# unless explicitly added.
-if ($v_version ge v5.2.0) {
-    my $unihan = 'Unihan; remove from list if using Unihan';
-    foreach my $table (qw (
-                           kAccountingNumeric
-                           kOtherNumeric
-                           kPrimaryNumeric
-                           kCompatibilityVariant
-                           kIICore
-                           kIRG_GSource
-                           kIRG_HSource
-                           kIRG_JSource
-                           kIRG_KPSource
-                           kIRG_MSource
-                           kIRG_KSource
-                           kIRG_TSource
-                           kIRG_USource
-                           kIRG_VSource
-                           kRSUnicode
-                        ))
-    {
-        $why_suppress_if_empty_warn_if_not{$table} = $unihan;
-    }
-}
-
-# Enum values for to_output_map() method in the Map_Table package.
+# Enum values for to_output_map() method in the Map_Table package. (0 is don't
+# output)
 my $EXTERNAL_MAP = 1;
 my $INTERNAL_MAP = 2;
 my $OUTPUT_ADJUSTED = 3;
@@ -913,13 +880,6 @@ my %global_to_output_map = (
     Decomposition_Type => 0,
 );
 
-# Properties that this program ignores.
-my @unimplemented_properties;
-
-# With this release, it is automatically handled if the Unihan db is
-# downloaded
-push @unimplemented_properties, 'Unicode_Radical_Stroke' if $v_version le v5.2.0;
-
 # There are several types of obsolete properties defined by Unicode.  These
 # must be hand-edited for every new Unicode release.
 my %why_deprecated;  # Generates a deprecated warning message if used.
@@ -959,8 +919,6 @@ my %why_obsolete;    # Documentation only
         # existence is not noted in the comment.
         'Decomposition_Mapping' => 'Accessible via Unicode::Normalize or prop_invmap() or charprop() in Unicode::UCD::',
 
-        'Indic_Matra_Category' => "Withdrawn by Unicode while still provisional",
-
         # Don't suppress ISO_Comment, as otherwise special handling is needed
         # to differentiate between it and gc=c, which can be written as 'isc',
         # which is the same characters as ISO_Comment's short name.
@@ -1046,45 +1004,13 @@ if ($v_version ge v6.0.0) {
 my @output_mapped_properties = split "\n", <<END;
 END
 
-# If you are using the Unihan database in a Unicode version before 5.2, you
-# need to add the properties that you want to extract from it to this table.
-# For your convenience, the properties in the 6.0 PropertyAliases.txt file are
-# listed, commented out
+# If you want more Unihan properties than the default, you need to add them to
+# these arrays.  Depending on the property type, @missing lines might have to
+# be added to the second array.  A sample entry would be (including the '#'):
+# @missing: 0000..10FFFF; cjkAccountingNumeric; NaN
 my @cjk_properties = split "\n", <<'END';
-#cjkAccountingNumeric; kAccountingNumeric
-#cjkOtherNumeric; kOtherNumeric
-#cjkPrimaryNumeric; kPrimaryNumeric
-#cjkCompatibilityVariant; kCompatibilityVariant
-#cjkIICore ; kIICore
-#cjkIRG_GSource; kIRG_GSource
-#cjkIRG_HSource; kIRG_HSource
-#cjkIRG_JSource; kIRG_JSource
-#cjkIRG_KPSource; kIRG_KPSource
-#cjkIRG_KSource; kIRG_KSource
-#cjkIRG_TSource; kIRG_TSource
-#cjkIRG_USource; kIRG_USource
-#cjkIRG_VSource; kIRG_VSource
-#cjkRSUnicode; kRSUnicode                ; Unicode_Radical_Stroke; URS
 END
-
-# Similarly for the property values.  For your convenience, the lines in the
-# 6.0 PropertyAliases.txt file are listed.  Just remove the first BUT NOT both
-# '#' marks (for Unicode versions before 5.2)
 my @cjk_property_values = split "\n", <<'END';
-## @missing: 0000..10FFFF; cjkAccountingNumeric; NaN
-## @missing: 0000..10FFFF; cjkCompatibilityVariant; <code point>
-## @missing: 0000..10FFFF; cjkIICore; <none>
-## @missing: 0000..10FFFF; cjkIRG_GSource; <none>
-## @missing: 0000..10FFFF; cjkIRG_HSource; <none>
-## @missing: 0000..10FFFF; cjkIRG_JSource; <none>
-## @missing: 0000..10FFFF; cjkIRG_KPSource; <none>
-## @missing: 0000..10FFFF; cjkIRG_KSource; <none>
-## @missing: 0000..10FFFF; cjkIRG_TSource; <none>
-## @missing: 0000..10FFFF; cjkIRG_USource; <none>
-## @missing: 0000..10FFFF; cjkIRG_VSource; <none>
-## @missing: 0000..10FFFF; cjkOtherNumeric; NaN
-## @missing: 0000..10FFFF; cjkPrimaryNumeric; NaN
-## @missing: 0000..10FFFF; cjkRSUnicode; <none>
 END
 
 # The input files don't list every code point.  Those not listed are to be
@@ -1109,7 +1035,7 @@ my %default_mapping = (
     Decomposition_Type => 'None',
     East_Asian_Width => "Neutral",
     FC_NFKC_Closure => $CODE_POINT,
-    General_Category => 'Cn',
+    General_Category => ($v_version le 6.3.0) ? 'Cn' : 'Unassigned',
     Grapheme_Cluster_Break => 'Other',
     Hangul_Syllable_Type => 'NA',
     ISO_Comment => "",
@@ -1140,39 +1066,6 @@ my %default_mapping = (
     Word_Break => 'Other',
 );
 
-# Below are files that Unicode furnishes, but this program ignores, and why.
-# NormalizationCorrections.txt requires some more explanation.  It documents
-# the cumulative fixes to erroneous normalizations in earlier Unicode
-# versions.  Its main purpose is so that someone running on an earlier version
-# can use this file to override what got published in that earlier release.
-# It would be easy for mktables to read and handle this file.  But all the
-# corrections in it should already be in the other files for the release it
-# is.  To get it to actually mean something useful, someone would have to be
-# using an earlier Unicode release, and copy it to the files for that release
-# and recomplile.  So far there has been no demand to do that, so this hasn't
-# been implemented.
-my %ignored_files = (
-    'CJKRadicals.txt' => 'Maps the kRSUnicode property values to corresponding code points',
-    'Index.txt' => 'Alphabetical index of Unicode characters',
-    'NamedSqProv.txt' => 'Named sequences proposed for inclusion in a later version of the Unicode Standard; if you need them now, you can append this file to F<NamedSequences.txt> and recompile perl',
-    'NamesList.txt' => 'Annotated list of characters',
-    'NamesList.html' => 'Describes the format and contents of F<NamesList.txt>',
-    'NormalizationCorrections.txt' => 'Documentation of corrections already incorporated into the Unicode data base',
-    'Props.txt' => 'Only in very early releases; is a subset of F<PropList.txt> (which is used instead)',
-    'ReadMe.txt' => 'Documentation',
-    'StandardizedVariants.txt' => 'Certain glyph variations for character display are standardized.  This lists the non-Unihan ones; the Unihan ones are also not used by Perl, and are in a separate Unicode data base L<http://www.unicode.org/ivd>',
-    'StandardizedVariants.html' => 'Provides a visual display of the standard variant sequences derived from F<StandardizedVariants.txt>.',
-    'EmojiSources.txt' => 'Maps certain Unicode code points to their legacy Japanese cell-phone values',
-    'USourceData.txt' => 'Documentation of status and cross reference of proposals for encoding by Unicode of Unihan characters',
-    'USourceGlyphs.pdf' => 'Pictures of the characters in F<USourceData.txt>',
-    'auxiliary/WordBreakTest.html' => 'Documentation of validation tests',
-    'auxiliary/SentenceBreakTest.html' => 'Documentation of validation tests',
-    'auxiliary/GraphemeBreakTest.html' => 'Documentation of validation tests',
-    'auxiliary/LineBreakTest.html' => 'Documentation of validation tests',
-);
-
-my %skipped_files;  # List of files that we skip
-
 ### End of externally interesting definitions, except for @input_file_objects
 
 my $HEADER=<<"EOF";
@@ -1199,7 +1092,9 @@ my $DEVELOPMENT_ONLY=<<"EOF";
 
 EOF
 
-my $MAX_UNICODE_CODEPOINT_STRING = "10FFFF";
+my $MAX_UNICODE_CODEPOINT_STRING = ($v_version ge v2.0.0)
+                                   ? "10FFFF"
+                                   : "FFFF";
 my $MAX_UNICODE_CODEPOINT = hex $MAX_UNICODE_CODEPOINT_STRING;
 my $MAX_UNICODE_CODEPOINTS = $MAX_UNICODE_CODEPOINT + 1;
 
@@ -1229,8 +1124,7 @@ my $code_point_re = qr/\b$run_on_code_point_re/;
 # defaults for code points not listed (i.e., missing) in the file.  The code
 # depends on this ending with a semi-colon, so it can assume it is a valid
 # field when the line is split() by semi-colons
-my $missing_defaults_prefix =
-            qr/^#\s+\@missing:\s+0000\.\.$MAX_UNICODE_CODEPOINT_STRING\s*;/;
+my $missing_defaults_prefix = qr/^#\s+\@missing:\s+0000\.\.10FFFF\s*;/;
 
 # Property types.  Unicode has more types, but these are sufficient for our
 # purposes.
@@ -1307,11 +1201,15 @@ my $OBSOLETE = 'O';
 my $a_bold_obsolete = "an 'B<$OBSOLETE>'";
 my $A_bold_obsolete = "An 'B<$OBSOLETE>'";
 
+# Aliases can also have an extra status:
+my $INTERNAL_ALIAS = 'P';
+
 my %status_past_participles = (
     $DISCOURAGED => 'discouraged',
     $STABILIZED => 'stabilized',
     $OBSOLETE => 'obsolete',
     $DEPRECATED => 'deprecated',
+    $INTERNAL_ALIAS => 'reserved for Perl core internal use only',
 );
 
 # Table fates.  These are somewhat ordered, so that fates < $MAP_PROXIED should be
@@ -1374,18 +1272,21 @@ my %loose_to_file_of;       # loosely maps table names to their respective
                             # files
 my %stricter_to_file_of;    # same; but for stricter mapping.
 my %loose_property_to_file_of; # Maps a loose property name to its map file
+my %strict_property_to_file_of; # Same, but strict
 my @inline_definitions = "V0"; # Each element gives a definition of a unique
                             # inversion list.  When a definition is inlined,
                             # its value in the hash it's in (one of the two
                             # defined just above) will include an index into
                             # this array.  The 0th element is initialized to
-                            # the definition for a zero length invwersion list
+                            # the definition for a zero length inversion list
 my %file_to_swash_name;     # Maps the file name to its corresponding key name
                             # in the hash %utf8::SwashInfo
 my %nv_floating_to_rational; # maps numeric values floating point numbers to
                              # their rational equivalent
 my %loose_property_name_of; # Loosely maps (non_string) property names to
                             # standard form
+my %strict_property_name_of; # Strictly maps (non_string) property names to
+                            # standard form
 my %string_property_loose_to_name; # Same, for string properties.
 my %loose_defaults;         # keys are of form "prop=value", where 'prop' is
                             # the property name in standard loose form, and
@@ -1395,12 +1296,16 @@ my %loose_to_standard_value; # loosely maps table names to the canonical
                             # alias for them
 my %ambiguous_names;        # keys are alias names (in standard form) that
                             # have more than one possible meaning.
+my %combination_property;   # keys are alias names (in standard form) that
+                            # have both a map table, and a binary one that
+                            # yields true for all non-null maps.
 my %prop_aliases;           # Keys are standard property name; values are each
                             # one's aliases
 my %prop_value_aliases;     # Keys of top level are standard property name;
                             # values are keys to another hash,  Each one is
                             # one of the property's values, in standard form.
                             # The values are that prop-val's aliases.
+my %skipped_files;          # List of files that we skip
 my %ucd_pod;    # Holds entries that will go into the UCD section of the pod
 
 # Most properties are immune to caseless matching, otherwise you would get
@@ -1477,6 +1382,8 @@ my @named_sequences;       # NamedSequences.txt contents.
 my %potential_files;       # Generated list of all .txt files in the directory
                            # structure so we can warn if something is being
                            # ignored.
+my @missing_early_files;   # Generated list of absent files that we need to
+                           # proceed in compiling this early Unicode version
 my @files_actually_output; # List of files we generated.
 my @more_Names;            # Some code point names are compound; this is used
                            # to store the extra components of them.
@@ -1493,6 +1400,7 @@ my $block;
 my $perl_charname;
 my $print;
 my $All;
+my $Assigned;   # All assigned characters in this Unicode release
 my $script;
 
 # Are there conflicting names because of beginning with 'In_', or 'Is_'
@@ -1533,6 +1441,7 @@ sub objaddr($) {
 # after all the input has been processed.  But most can be skipped, as they
 # have the same descriptive phrases, such as being unassigned
 my @viacode;            # Contains the 1 million character names
+my @age;                # And their ages ("" if none)
 my @printable;          # boolean: And are those characters printable?
 my @annotate_char_type; # Contains a type of those characters, specifically
                         # for the purposes of annotation.
@@ -1591,12 +1500,14 @@ sub populate_char_info ($) {
             $annotate_char_type[$i] = $ABOVE_UNICODE_TYPE;
             $printable[$i] = 0;
             $end = $MAX_WORKING_CODEPOINT;
+            $age[$i] = "";
         }
         elsif ($gc-> table('Private_use')->contains($i)) {
             $viacode[$i] = 'Private Use';
             $annotate_char_type[$i] = $PRIVATE_USE_TYPE;
             $printable[$i] = 0;
             $end = $gc->table('Private_Use')->containing_range($i)->end;
+            $age[$i] = property_ref("Age")->value_of($i);
         }
         elsif ((defined ($nonchar =
                             Property::property_ref('Noncharacter_Code_Point'))
@@ -1607,16 +1518,18 @@ sub populate_char_info ($) {
             $printable[$i] = 0;
             $end = property_ref('Noncharacter_Code_Point')->table('Y')->
                                                     containing_range($i)->end;
+            $age[$i] = property_ref("Age")->value_of($i);
         }
         elsif ($gc-> table('Control')->contains($i)) {
             $viacode[$i] = property_ref('Name_Alias')->value_of($i) || 'Control';
             $annotate_char_type[$i] = $CONTROL_TYPE;
             $printable[$i] = 0;
+            $age[$i] = property_ref("Age")->value_of($i);
         }
         elsif ($gc-> table('Unassigned')->contains($i)) {
             $annotate_char_type[$i] = $UNASSIGNED_TYPE;
             $printable[$i] = 0;
-            if ($v_version lt v2.0.0) { # No blocks in earliest releases
+            if (defined $block) { # No blocks in earliest releases
                 $viacode[$i] = 'Unassigned';
                 $end = $gc-> table('Unassigned')->containing_range($i)->end;
             }
@@ -1632,17 +1545,14 @@ sub populate_char_info ($) {
                            $unassigned_sans_noncharacters->
                                                     containing_range($i)->end);
             }
+            $age[$i] = property_ref("Age")->value_of($i);
         }
-        elsif ($v_version lt v2.0.0) {  # No surrogates in earliest releases
-            $viacode[$i] = $gc->value_of($i);
-            $annotate_char_type[$i] = $UNKNOWN_TYPE;
-            $printable[$i] = 0;
-        }
-        elsif ($gc-> table('Surrogate')->contains($i)) {
+        elsif ($perl->table('_Perl_Surrogate')->contains($i)) {
             $viacode[$i] = 'Surrogate';
             $annotate_char_type[$i] = $SURROGATE_TYPE;
             $printable[$i] = 0;
             $end = $gc->table('Surrogate')->containing_range($i)->end;
+            $age[$i] = property_ref("Age")->value_of($i);
         }
         else {
             Carp::my_carp_bug("Can't figure out how to annotate "
@@ -1658,7 +1568,18 @@ sub populate_char_info ($) {
     # appended to the name, do that.
     elsif ($annotate_char_type[$i] == $CP_IN_NAME) {
         $viacode[$i] .= sprintf("-%04X", $i);
-        $end = $perl_charname->containing_range($i)->end;
+
+        # Do all these as groups of the same age, instead of individually,
+        # because their names are so meaningless, and there are typically
+        # large quantities of them.
+        my $Age = property_ref("Age");
+        $age[$i] = $Age->value_of($i);
+        my $limit = $perl_charname->containing_range($i)->end;
+        $end = $i + 1;
+        while ($end <= $limit && $Age->value_of($end) == $age[$i]) {
+            $end++;
+        }
+        $end--;
     }
 
     # And here, has a name, but if it's a hangul syllable one, replace it with
@@ -1671,8 +1592,12 @@ sub populate_char_info ($) {
         my $T = $TBase + $SIndex % $TCount;
         $viacode[$i] = "HANGUL SYLLABLE $Jamo{$L}$Jamo{$V}";
         $viacode[$i] .= $Jamo{$T} if $T != $TBase;
+        $age[$i] = property_ref("Age")->value_of($i);
         $end = $perl_charname->containing_range($i)->end;
     }
+    else {
+        $age[$i] = property_ref("Age")->value_of($i);
+    }
 
     return if ! defined wantarray;
     return $i if ! defined $end;    # If not a range, return the input
@@ -2110,6 +2035,7 @@ package Input_file;
 # while(next_line()) {...} loop.
 #
 # You can also set up handlers to
+#   0) call during object construction time, after everything else is done
 #   1) call before the first line is read, for pre processing
 #   2) call to adjust each line of the input before the main handler gets
 #      them.  This can be automatically generated, if appropriately simple
@@ -2121,19 +2047,29 @@ package Input_file;
 # each_line_handler()s.  So, if the format of the line is not in the desired
 # format for the main handler, these are used to do that adjusting.  They can
 # be stacked (by enclosing them in an [ anonymous array ] in the constructor,
-# so the $_ output of one is used as the input to the next.  None of the other
-# handlers are stackable, but could easily be changed to be so.
+# so the $_ output of one is used as the input to the next.  The eof handler
+# is also stackable, but none of the others are, but could easily be changed
+# to be so.
+#
+# Some properties are used by the Perl core but aren't defined until later
+# Unicode releases.  The perl interpreter would have problems working when
+# compiled with an earlier Unicode version that doesn't have them, so we need
+# to define them somehow for those releases.  The 'Early' constructor
+# parameter can be used to automatically handle this.  It is essentially
+# ignored if the Unicode version being compiled has a data file for this
+# property.  Either code to execute or a file to read can be specified.
+# Details are at the %early definition.
 #
 # Most of the handlers can call insert_lines() or insert_adjusted_lines()
 # which insert the parameters as lines to be processed before the next input
-# file line is read.  This allows the EOF handler to flush buffers, for
+# file line is read.  This allows the EOF handler(s) to flush buffers, for
 # example.  The difference between the two routines is that the lines inserted
 # by insert_lines() are subjected to the each_line_handler()s.  (So if you
-# called it from such a handler, you would get infinite recursion.)  Lines
-# inserted by insert_adjusted_lines() go directly to the main handler without
-# any adjustments.  If the  post-processing handler calls any of these, there
-# will be no effect.  Some error checking for these conditions could be added,
-# but it hasn't been done.
+# called it from such a handler, you would get infinite recursion without some
+# mechanism to prevent that.)  Lines inserted by insert_adjusted_lines() go
+# directly to the main handler without any adjustments.  If the
+# post-processing handler calls any of these, there will be no effect.  Some
+# error checking for these conditions could be added, but it hasn't been done.
 #
 # carp_bad_line() should be called to warn of bad input lines, which clears $_
 # to prevent further processing of the line.  This routine will output the
@@ -2169,10 +2105,16 @@ sub trace { return main::trace(@_); }
     main::set_access('property', \%property, qw{ c r });
 
     my %optional;
-    # If this is true, the file is optional.  If not present, no warning is
-    # output.  If it is present, the string given by this parameter is
-    # evaluated, and if false the file is not processed.
-    main::set_access('optional', \%optional, 'c', 'r');
+    # This is either an unsigned number, or a list of property names.  In the
+    # former case, if it is non-zero, it means the file is optional, so if the
+    # file is absent, no warning about that is output.  In the latter case, it
+    # is a list of properties that the file (exclusively) defines.  If the
+    # file is present, tables for those properties will be produced; if
+    # absent, none will, even if they are listed elsewhere (namely
+    # PropertyAliases.txt and PropValueAliases.txt) as being in this release,
+    # and no warnings will be raised about them not being available.  (And no
+    # warning about the file itself will be raised.)
+    main::set_access('optional', \%optional, qw{ c readable_array } );
 
     my %non_skip;
     # This is used for debugging, to skip processing of all but a few input
@@ -2181,16 +2123,19 @@ sub trace { return main::trace(@_); }
     main::set_access('non_skip', \%non_skip, 'c');
 
     my %skip;
-    # This is used to skip processing of this input file semi-permanently,
-    # when it evaluates to true.  The value should be the reason the file is
-    # being skipped.  It is used for files that we aren't planning to process
-    # anytime soon, but want to allow to be in the directory and not raise a
-    # message that we are not handling.  Mostly for test files.  This is in
-    # contrast to the non_skip element, which is supposed to be used very
-    # temporarily for debugging.  Sets 'optional' to 1.  Also, files that we
-    # pretty much will never look at can be placed in the global
-    # %ignored_files instead.  Ones used here will be added to %skipped files
-    main::set_access('skip', \%skip, 'c');
+    # This is used to skip processing of this input file (semi-) permanently.
+    # The value should be the reason the file is being skipped.  It is used
+    # for files that we aren't planning to process anytime soon, but want to
+    # allow to be in the directory and be checked for their names not
+    # conflicting with any other files on a DOS 8.3 name filesystem, but to
+    # not otherwise be processed, and to not raise a warning about not being
+    # handled.  In the constructor call, any value that evaluates to a numeric
+    # 0 or undef means don't skip.  Any other value is a string giving the
+    # reason it is being skippped, and this will appear in generated pod.
+    # However, an empty string reason will suppress the pod entry.
+    # Internally, calls that evaluate to numeric 0 are changed into undef to
+    # distinguish them from an empty string call.
+    main::set_access('skip', \%skip, 'c', 'r');
 
     my %each_line_handler;
     # list of subroutines to look at and filter each non-comment line in the
@@ -2221,21 +2166,28 @@ sub trace { return main::trace(@_); }
     main::set_access('has_missings_defaults',
                                         \%has_missings_defaults, qw{ c r });
 
+    my %construction_time_handler;
+    # Subroutine to call at the end of the new method.  If undef, no such
+    # handler is called.
+    main::set_access('construction_time_handler',
+                                        \%construction_time_handler, qw{ c });
+
     my %pre_handler;
     # Subroutine to call before doing anything else in the file.  If undef, no
     # such handler is called.
     main::set_access('pre_handler', \%pre_handler, qw{ c });
 
     my %eof_handler;
-    # Subroutine to call upon getting an EOF on the input file, but before
+    # Subroutines to call upon getting an EOF on the input file, but before
     # that is returned to the main handler.  This is to allow buffers to be
     # flushed.  The handler is expected to call insert_lines() or
     # insert_adjusted() with the buffered material
-    main::set_access('eof_handler', \%eof_handler, qw{ c });
+    main::set_access('eof_handler', \%eof_handler, qw{ c });
 
     my %post_handler;
     # Subroutine to call after all the lines of the file are read in and
-    # processed.  If undef, no such handler is called.
+    # processed.  If undef, no such handler is called.  Note that this cannot
+    # add lines to be processed; instead use eof_handler
     main::set_access('post_handler', \%post_handler, qw{ c });
 
     my %progress_message;
@@ -2263,6 +2215,69 @@ sub trace { return main::trace(@_); }
     # storage of '@missing' defaults lines
     main::set_access('missings', \%missings);
 
+    my %early;
+    # Used for properties that must be defined (for Perl's purposes) on
+    # versions of Unicode earlier than Unicode itself defines them.  The
+    # parameter is an array (it would be better to be a hash, but not worth
+    # bothering about due to its rare use).
+    #
+    # The first element is either a code reference to call when in a release
+    # earlier than the Unicode file is available in, or it is an alternate
+    # file to use instead of the non-existent one.  This file must have been
+    # plunked down in the same directory as mktables.  Should you be compiling
+    # on a release that needs such a file, mktables will abort the
+    # compilation, and tell you where to get the necessary file(s), and what
+    # name(s) to use to store them as.
+    # In the case of specifying an alternate file, the array must contain two
+    # further elements:
+    #
+    # [1] is the name of the property that will be generated by this file.
+    # The class automatically takes the input file and excludes any code
+    # points in it that were not assigned in the Unicode version being
+    # compiled.  It then uses this result to define the property in the given
+    # version.  Since the property doesn't actually exist in the Unicode
+    # version being compiled, this should be a name accessible only by core
+    # perl.  If it is the same name as the regular property, the constructor
+    # will mark the output table as a $PLACEHOLDER so that it doesn't actually
+    # get output, and so will be unusable by non-core code.  Otherwise it gets
+    # marked as $INTERNAL_ONLY.
+    #
+    # [2] is a property value to assign (only when compiling Unicode 1.1.5) to
+    # the Hangul syllables in that release (which were ripped out in version
+    # 2) for the given property .  (Hence it is ignored except when compiling
+    # version 1.  You only get one value that applies to all of them, which
+    # may not be the actual reality, but probably nobody cares anyway for
+    # these obsolete characters.)
+    #
+    # Not all files can be handled in the above way, and so the code ref
+    # alternative is available.  It can do whatever it needs to.  The other
+    # array elements are optional in this case, and the code is free to use or
+    # ignore them if they are present.
+    #
+    # Internally, the constructor unshifts a 0 or 1 onto this array to
+    # indicate if an early alternative is actually being used or not.  This
+    # makes for easier testing later on.
+    main::set_access('early', \%early, 'c');
+
+    my %required_even_in_debug_skip;
+    # debug_skip is used to speed up compilation during debugging by skipping
+    # processing files that are not needed for the task at hand.  However,
+    # some files pretty much can never be skipped, and this is used to specify
+    # that this is one of them.  In order to skip this file, the call to the
+    # constructor must be edited to comment out this parameter.
+    main::set_access('required_even_in_debug_skip',
+                     \%required_even_in_debug_skip, 'c');
+
+    my %withdrawn;
+    # Some files get removed from the Unicode DB.  This is a version object
+    # giving the first release without this file.
+    main::set_access('withdrawn', \%withdrawn, 'c');
+
+    my %in_this_release;
+    # Calculated value from %first_released and %withdrawn.  Are we compiling
+    # a Unicode release which includes this file?
+    main::set_access('in_this_release', \%in_this_release);
+
     sub _next_line;
     sub _next_line_with_remapped_range;
 
@@ -2275,22 +2290,23 @@ sub trace { return main::trace(@_); }
         # Set defaults
         $handler{$addr} = \&main::process_generic_property_file;
         $non_skip{$addr} = 0;
-        $skip{$addr} = 0;
+        $skip{$addr} = undef;
         $has_missings_defaults{$addr} = $NO_DEFAULTS;
         $handle{$addr} = undef;
         $added_lines{$addr} = [ ];
         $remapped_lines{$addr} = [ ];
         $each_line_handler{$addr} = [ ];
+        $eof_handler{$addr} = [ ];
         $errors{$addr} = { };
         $missings{$addr} = [ ];
+        $early{$addr} = [ ];
+        $optional{$addr} = [ ];
 
         # Two positional parameters.
         return Carp::carp_too_few_args(\@_, 2) if main::DEBUG && @_ < 2;
         $file{$addr} = main::internal_file_to_platform(shift);
         $first_released{$addr} = shift;
 
-        undef $file{$addr} if $first_released{$addr} gt $v_version;
-
         # The rest of the arguments are key => value pairs
         # %constructor_fields has been set up earlier to list all possible
         # ones.  Either set or push, depending on how the default has been set
@@ -2322,30 +2338,206 @@ sub trace { return main::trace(@_); }
             delete $args{$key};
         };
 
-        # If the file has a property for it, it means that the property is not
-        # listed in the file's entries.  So add a handler to the list of line
-        # handlers to insert the property name into the lines, to provide a
-        # uniform interface to the final processing subroutine.
-        # the final code doesn't have to worry about that.
-        if ($property{$addr}) {
-            push @{$each_line_handler{$addr}}, \&_insert_property_into_line;
+        $non_skip{$addr} = 1 if $required_even_in_debug_skip{$addr};
+
+        # Convert 0 (meaning don't skip) to undef
+        undef $skip{$addr} unless $skip{$addr};
+
+        # Handle the case where this file is optional
+        my $pod_message_for_non_existent_optional = "";
+        if ($optional{$addr}->@*) {
+
+            # First element is the pod message
+            $pod_message_for_non_existent_optional
+                                                = shift $optional{$addr}->@*;
+            # Convert a 0 'Optional' argument to an empty list to make later
+            # code more concise.
+            if (   $optional{$addr}->@*
+                && $optional{$addr}->@* == 1
+                && $optional{$addr}[0] ne ""
+                && $optional{$addr}[0] !~ /\D/
+                && $optional{$addr}[0] == 0)
+            {
+                $optional{$addr} = [ ];
+            }
+            else {  # But if the only element doesn't evaluate to 0, make sure
+                    # that this file is indeed considered optional below.
+                unshift $optional{$addr}->@*, 1;
+            }
+        }
+
+        my $progress;
+        my $function_instead_of_file = 0;
+
+        # If we are compiling a Unicode release earlier than the file became
+        # available, the constructor may have supplied a substitute
+        if ($first_released{$addr} gt $v_version && $early{$addr}->@*) {
+
+            # Yes, we have a substitute, that we will use; mark it so
+            unshift $early{$addr}->@*, 1;
+
+            # See the definition of %early for what the array elements mean.
+            # If we have a property this defines, create a table and default
+            # map for it now (at essentially compile time), so that it will be
+            # available for the whole of run time.  (We will want to add this
+            # name as an alias when we are using the official property name;
+            # but this must be deferred until run(), because at construction
+            # time the official names have yet to be defined.)
+            if ($early{$addr}[2]) {
+                my $fate = ($property{$addr}
+                            && $property{$addr} eq $early{$addr}[2])
+                          ? $PLACEHOLDER
+                          : $INTERNAL_ONLY;
+                my $prop_object = Property->new($early{$addr}[2],
+                                                Fate => $fate,
+                                                Perl_Extension => 1,
+                                                );
+
+                # Use the default mapping for the regular property for this
+                # substitute one.
+                if (    defined $property{$addr}
+                    &&  defined $default_mapping{$property{$addr}})
+                {
+                    $prop_object
+                        ->set_default_map($default_mapping{$property{$addr}});
+                }
+            }
+
+            if (ref $early{$addr}[1] eq 'CODE') {
+                $function_instead_of_file = 1;
+
+                # If the first element of the array is a code ref, the others
+                # are optional.
+                $handler{$addr} = $early{$addr}[1];
+                $property{$addr} = $early{$addr}[2]
+                                                if defined $early{$addr}[2];
+                $progress = "substitute $file{$addr}";
+
+                undef $file{$addr};
+            }
+            else {  # Specifying a substitute file
+
+                if (! main::file_exists($early{$addr}[1])) {
+
+                    # If we don't see the substitute file, generate an error
+                    # message giving the needed things, and add it to the list
+                    # of such to output before actual processing happens
+                    # (hence the user finds out all of them in one run).
+                    # Instead of creating a general method for NameAliases,
+                    # hard-code it here, as there is unlikely to ever be a
+                    # second one which needs special handling.
+                    my $string_version = ($file{$addr} eq "NameAliases.txt")
+                                    ? 'at least 6.1 (the later, the better)'
+                                    : sprintf "%vd", $first_released{$addr};
+                    push @missing_early_files, <<END;
+'$file{$addr}' version $string_version should be copied to '$early{$addr}[1]'.
+END
+                    ;
+                    return;
+                }
+                $progress = $early{$addr}[1];
+                $progress .= ", substituting for $file{$addr}" if $file{$addr};
+                $file{$addr} = $early{$addr}[1];
+                $property{$addr} = $early{$addr}[2];
+
+                # Ignore code points not in the version being compiled
+                push $each_line_handler{$addr}->@*, \&_exclude_unassigned;
+
+                if (   $v_version lt v2.0        # Hanguls in this release ...
+                    && defined $early{$addr}[3]) # ... need special treatment
+                {
+                    push $eof_handler{$addr}->@*, \&_fixup_obsolete_hanguls;
+                }
+            }
+
+            # And this substitute is valid for all releases.
+            $first_released{$addr} = v0;
+        }
+        else {  # Normal behavior
+            $progress = $file{$addr};
+            unshift $early{$addr}->@*, 0; # No substitute
         }
 
-        if ($non_skip{$addr} && ! $debug_skip && $verbosity) {
-            print "Warning: " . __PACKAGE__ . " constructor for $file{$addr} has useless 'non_skip' in it\n";
+        my $file = $file{$addr};
+        $progress_message{$addr} = "Processing $progress"
+                                            unless $progress_message{$addr};
+
+        # A file should be there if it is within the window of versions for
+        # which Unicode supplies it
+        if ($withdrawn{$addr} && $withdrawn{$addr} le $v_version) {
+            $in_this_release{$addr} = 0;
+            $skip{$addr} = "";
+        }
+        else {
+            $in_this_release{$addr} = $first_released{$addr} le $v_version;
+
+            # Check that the file for this object (possibly using a substitute
+            # for early releases) exists or we have a function alternative
+            if (   ! $function_instead_of_file
+                && ! main::file_exists($file))
+            {
+                # Here there is nothing available for this release.  This is
+                # fine if we aren't expecting anything in this release.
+                if (! $in_this_release{$addr}) {
+                    $skip{$addr} = "";  # Don't remark since we expected
+                                        # nothing and got nothing
+                }
+                elsif ($optional{$addr}->@*) {
+
+                    # Here the file is optional in this release; Use the
+                    # passed in text to document this case in the pod.
+                    $skip{$addr} = $pod_message_for_non_existent_optional;
+                }
+                elsif (   $in_this_release{$addr}
+                       && ! defined $skip{$addr}
+                       && defined $file)
+                { # Doesn't exist but should.
+                    $skip{$addr} = "'$file' not found.  Possibly Big problems";
+                    Carp::my_carp($skip{$addr});
+                }
+            }
+            elsif ($debug_skip && ! defined $skip{$addr} && ! $non_skip{$addr})
+            {
+
+                # The file exists; if not skipped for another reason, and we are
+                # skipping most everything during debugging builds, use that as
+                # the skip reason.
+                $skip{$addr} = '$debug_skip is on'
+            }
+        }
+
+        if (   ! $debug_skip
+            && $non_skip{$addr}
+            && ! $required_even_in_debug_skip{$addr}
+            && $verbosity)
+        {
+            print "Warning: " . __PACKAGE__ . " constructor for $file has useless 'non_skip' in it\n";
         }
 
-        # If skipping, set to optional, and add to list of ignored files,
-        # including its reason
-        if ($skip{$addr}) {
-            $optional{$addr} = 1;
-            $skipped_files{$file{$addr}} = $skip{$addr} if $file{$addr};
+        # Here, we have figured out if we will be skipping this file or not.
+        # If so, we add any single property it defines to any passed in
+        # optional property list.  These will be dealt with at run time.
+        if (defined $skip{$addr}) {
+            if ($property{$addr}) {
+                push $optional{$addr}->@*, $property{$addr};
+            }
+        } # Otherwise, are going to process the file.
+        elsif ($property{$addr}) {
+
+            # If the file has a property defined in the constructor for it, it
+            # means that the property is not listed in the file's entries.  So
+            # add a handler (to the list of line handlers) to insert the
+            # property name into the lines, to provide a uniform interface to
+            # the final processing subroutine.
+            push @{$each_line_handler{$addr}}, \&_insert_property_into_line;
         }
         elsif ($properties{$addr}) {
 
-            # Add a handler for each line in the input so that it creates a
-            # separate input line for each property in those input lines, thus
-            # making them suitable for process_generic_property_file().
+            # Similarly, there may be more than one property represented on
+            # each line, with no clue but the constructor input what those
+            # might be.  Add a handler for each line in the input so that it
+            # creates a separate input line for each property in those input
+            # lines, thus making them suitable to handle generically.
 
             push @{$each_line_handler{$addr}},
                  sub {
@@ -2376,7 +2568,7 @@ sub trace { return main::trace(@_); }
                 };
         }
 
-        {   # On non-ascii platforms, we use a special handler
+        {   # On non-ascii platforms, we use a special pre-handler
             no strict;
             no warnings 'once';
             *next_line = (main::NON_ASCII_PLATFORM)
@@ -2384,6 +2576,9 @@ sub trace { return main::trace(@_); }
                          : *_next_line;
         }
 
+        &{$construction_time_handler{$addr}}($self)
+                                        if $construction_time_handler{$addr};
+
         return $self;
     }
 
@@ -2401,13 +2596,13 @@ sub trace { return main::trace(@_); }
         return __PACKAGE__ . " object for " . $self->file;
     }
 
-    # flag to make sure extracted files are processed early
-    my $seen_non_extracted_non_age = 0;
-
     sub run {
         # Process the input object $self.  This opens and closes the file and
         # calls all the handlers for it.  Currently,  this can only be called
-        # once per file, as it destroy's the EOF handler
+        # once per file, as it destroy's the EOF handlers
+
+        # flag to make sure extracted files are processed early
+        state $seen_non_extracted_non_age = 0;
 
         my $self = shift;
         Carp::carp_extra_args(\@_) if main::DEBUG && @_;
@@ -2416,61 +2611,14 @@ sub trace { return main::trace(@_); }
 
         my $file = $file{$addr};
 
-        # Don't process if not expecting this file (because released later
-        # than this Unicode version), and isn't there.  This means if someone
-        # copies it into an earlier version's directory, we will go ahead and
-        # process it.
-        return if $first_released{$addr} gt $v_version
-                  && (! defined $file || ! -e $file);
-
-        # If in debugging mode and this file doesn't have the non-skip
-        # flag set, and isn't one of the critical files, skip it.
-        if ($debug_skip
-            && $first_released{$addr} ne v0
-            && ! $non_skip{$addr})
-        {
-            print "Skipping $file in debugging\n" if $verbosity;
-            return;
-        }
-
-        # File could be optional
-        if ($optional{$addr}) {
-            return unless -e $file;
-            my $result = eval $optional{$addr};
-            if (! defined $result) {
-                Carp::my_carp_bug("Got '$@' when tried to eval $optional{$addr}.  $file Skipped.");
-                return;
-            }
-            if (! $result) {
-                if ($verbosity) {
-                    print STDERR "Skipping processing input file '$file' because '$optional{$addr}' is not true\n";
-                }
-                return;
-            }
-        }
-
-        if (! defined $file || ! -e $file) {
-
-            # If the file doesn't exist, see if have internal data for it
-            # (based on first_released being 0).
-            if ($first_released{$addr} eq v0) {
-                $handle{$addr} = 'pretend_is_open';
-            }
-            else {
-                if (! $optional{$addr}  # File could be optional
-                    && $v_version ge $first_released{$addr})
-                {
-                    print STDERR "Skipping processing input file '$file' because not found\n" if $v_version ge $first_released{$addr};
-                }
-                return;
-            }
+        if (! $file) {
+            $handle{$addr} = 'pretend_is_open';
         }
         else {
-
-            # Here, the file exists.  Some platforms may change the case of
-            # its name
             if ($seen_non_extracted_non_age) {
-                if ($file =~ /$EXTRACTED/i) {
+                if ($file =~ /$EXTRACTED/i) # Some platforms may change the
+                                            # case of the file's name
+                {
                     Carp::my_carp_bug(main::join_lines(<<END
 $file should be processed just after the 'Prop...Alias' files, and before
 anything not in the $EXTRACTED_DIR directory.  Proceeding, but the results may
@@ -2480,7 +2628,10 @@ END
                 }
             }
             elsif ($EXTRACTED_DIR
-                    && $first_released{$addr} ne v0
+
+                    # We only do this check for generic property files
+                    && $handler{$addr} == \&main::process_generic_property_file
+
                     && $file !~ /$EXTRACTED/i
                     && lc($file) ne 'dage.txt')
             {
@@ -2490,71 +2641,137 @@ END
                 $seen_non_extracted_non_age = 1;
             }
 
-            # And mark the file as having being processed, and warn if it
+            # Mark the file as having being processed, and warn if it
             # isn't a file we are expecting.  As we process the files,
             # they are deleted from the hash, so any that remain at the
             # end of the program are files that we didn't process.
             my $fkey = File::Spec->rel2abs($file);
-            my $expecting = delete $potential_files{lc($fkey)};
+            my $exists = delete $potential_files{lc($fkey)};
+
+            Carp::my_carp("Was not expecting '$file'.")
+                                    if $exists && ! $in_this_release{$addr};
+
+            # If there is special handling for compiling Unicode releases
+            # earlier than the first one in which Unicode defines this
+            # property ...
+            if ($early{$addr}->@* > 1) {
+
+                # Mark as processed any substitute file that would be used in
+                # such a release
+                $fkey = File::Spec->rel2abs($early{$addr}[1]);
+                delete $potential_files{lc($fkey)};
+
+                # As commented in the constructor code, when using the
+                # official property, we still have to allow the publicly
+                # inaccessible early name so that the core code which uses it
+                # will work regardless.
+                if (! $early{$addr}[0] && $early{$addr}->@* > 2) {
+                    my $early_property_name = $early{$addr}[2];
+                    if ($property{$addr} ne $early_property_name) {
+                        main::property_ref($property{$addr})
+                                            ->add_alias($early_property_name);
+                    }
+                }
+            }
+
+            # We may be skipping this file ...
+            if (defined $skip{$addr}) {
 
-            Carp::my_carp("Was not expecting '$file'.") if
-                    ! $expecting
-                    && ! defined $handle{$addr};
+                # If the file isn't supposed to be in this release, there is
+                # nothing to do
+                if ($in_this_release{$addr}) {
+
+                    # But otherwise, we may print a message
+                    if ($debug_skip) {
+                        print STDERR "Skipping input file '$file'",
+                                     " because '$skip{$addr}'\n";
+                    }
+
+                    # And add it to the list of skipped files, which is later
+                    # used to make the pod
+                    $skipped_files{$file} = $skip{$addr};
+
+                    # The 'optional' list contains properties that are also to
+                    # be skipped along with the file.  (There may also be
+                    # digits which are just placeholders to make sure it isn't
+                    # an empty list
+                    foreach my $property ($optional{$addr}->@*) {
+                        next unless $property =~ /\D/;
+                        my $prop_object = main::property_ref($property);
+                        next unless defined $prop_object;
+                        $prop_object->set_fate($SUPPRESSED, $skip{$addr});
+                    }
+                }
 
-            # Having deleted from expected files, we can quit if not to do
-            # anything.  Don't print progress unless really want verbosity
-            if ($skip{$addr}) {
-                print "Skipping $file.\n" if $verbosity >= $VERBOSE;
                 return;
             }
 
-            # Open the file, converting the slashes used in this program
-            # into the proper form for the OS
+            # Here, we are going to process the file.  Open it, converting the
+            # slashes used in this program into the proper form for the OS
             my $file_handle;
             if (not open $file_handle, "<", $file) {
                 Carp::my_carp("Can't open $file.  Skipping: $!");
-                return 0;
+                return;
             }
             $handle{$addr} = $file_handle; # Cache the open file handle
 
-            if ($v_version ge v3.2.0 && lc($file) ne 'unicodedata.txt') {
+            # If possible, make sure that the file is the correct version.
+            # (This data isn't available on early Unicode releases or in
+            # UnicodeData.txt.)  We don't do this check if we are using a
+            # substitute file instead of the official one (though the code
+            # could be extended to do so).
+            if ($in_this_release{$addr}
+                && ! $early{$addr}[0]
+                && lc($file) ne 'unicodedata.txt')
+            {
                 if ($file !~ /^Unihan/i) {
-                    $_ = <$file_handle>;
-                    if ($_ !~ / - $string_version \. /x) {
-                        chomp;
-                        $_ =~ s/^#\s*//;
-                        die Carp::my_carp("File '$file' is version '$_'.  It should be version $string_version");
+
+                    # The non-Unihan files started getting version numbers in
+                    # 3.2, but some files in 4.0 are unchanged from 3.2, and
+                    # marked as 3.2.  4.0.1 is the first version where there
+                    # are no files marked as being from less than 4.0, though
+                    # some are marked as 4.0.  In versions after that, the
+                    # numbers are correct.
+                    if ($v_version ge v4.0.1) {
+                        $_ = <$file_handle>;    # The version number is in the
+                                                # very first line
+                        if ($_ !~ / - $string_version \. /x) {
+                            chomp;
+                            $_ =~ s/^#\s*//;
+
+                            # 4.0.1 had some valid files that weren't updated.
+                            if (! ($v_version eq v4.0.1 && $_ =~ /4\.0\.0/)) {
+                                die Carp::my_carp("File '$file' is version "
+                                                . "'$_'.  It should be "
+                                                . "version $string_version");
+                            }
+                        }
                     }
                 }
-                else {
+                elsif ($v_version ge v6.0.0) { # Unihan
+
+                    # Unihan files didn't get accurate version numbers until
+                    # 6.0.  The version is somewhere in the first comment
+                    # block
                     while (<$file_handle>) {
                         if ($_ !~ /^#/) {
-                            Carp::my_carp_bug("Could not find the expected version info in file '$file'");
+                            Carp::my_carp_bug("Could not find the expected "
+                                            . "version info in file '$file'");
                             last;
                         }
                         chomp;
                         $_ =~ s/^#\s*//;
                         next if $_ !~ / version: /x;
                         last if $_ =~ /$string_version/;
-                        die Carp::my_carp("File '$file' is '$_'.  It should be version $string_version");
+                        die Carp::my_carp("File '$file' is version "
+                                        . "'$_'.  It should be "
+                                        . "version $string_version");
                     }
                 }
             }
         }
 
-        if ($verbosity >= $PROGRESS) {
-            if ($progress_message{$addr}) {
-                print "$progress_message{$addr}\n";
-            }
-            else {
-                # If using a virtual file, say so.
-                print "Processing ", (-e $file)
-                                       ? $file
-                                       : "substitute $file",
-                                     "\n";
-            }
-        }
-
+        print "$progress_message{$addr}\n" if $verbosity >= $PROGRESS;
 
         # Call any special handler for before the file.
         &{$pre_handler{$addr}}($self) if $pre_handler{$addr};
@@ -2742,11 +2959,11 @@ END
             return 1;
         } # End of looping through lines.
 
-        # If there is an EOF handler, call it (only once) and if it generates
+        # If there are EOF handlers, call each (only once) and if it generates
         # more lines to process go back in the loop to handle them.
-        if ($eof_handler{$addr}) {
-            &{$eof_handler{$addr}}($self);
-            $eof_handler{$addr} = "";   # Currently only get one shot at it.
+        while ($eof_handler{$addr}->@*) {
+            &{$eof_handler{$addr}[0]}($self);
+            shift $eof_handler{$addr}->@*;   # Currently only get one shot at it.
             goto LINE if $added_lines{$addr};
         }
 
@@ -2943,6 +3160,82 @@ END
         return @return;
     }
 
+    sub _exclude_unassigned {
+
+        # Takes the range in $_ and excludes code points that aren't assigned
+        # in this release
+
+        state $skip_inserted_count = 0;
+
+        # Ignore recursive calls.
+        if ($skip_inserted_count) {
+            $skip_inserted_count--;
+            return;
+        }
+
+        # Find what code points are assigned in this release
+        main::calculate_Assigned() if ! defined $Assigned;
+
+        my $self = shift;
+        my $addr = do { no overloading; pack 'J', $self; };
+        Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+
+        my ($range, @remainder)
+            = split /\s*;\s*/, $_, -1; # -1 => retain trailing null fields
+
+        # Examine the range.
+        if ($range =~ /^ ($code_point_re) (?:\.\. ($code_point_re) )? $/x)
+        {
+            my $low = hex $1;
+            my $high = (defined $2) ? hex $2 : $low;
+
+            # Split the range into subranges of just those code points in it
+            # that are assigned.
+            my @ranges = (Range_List->new(Initialize
+                              => Range->new($low, $high)) & $Assigned)->ranges;
+
+            # Do nothing if nothing in the original range is assigned in this
+            # release; handle normally if everything is in this release.
+            if (! @ranges) {
+                $_ = "";
+            }
+            elsif (@ranges != 1) {
+
+                # Here, some code points in the original range aren't in this
+                # release; @ranges gives the ones that are.  Create fake input
+                # lines for each of the ranges, and set things up so that when
+                # this routine is called on that fake input, it will do
+                # nothing.
+                $skip_inserted_count = @ranges;
+                my $remainder = join ";", @remainder;
+                for my $range (@ranges) {
+                    $self->insert_lines(sprintf("%04X..%04X;%s",
+                                    $range->start, $range->end, $remainder));
+                }
+                $_ = "";    # The original range is now defunct.
+            }
+        }
+
+        return;
+    }
+
+    sub _fixup_obsolete_hanguls {
+
+        # This is called only when compiling Unicode version 1.  All Unicode
+        # data for subsequent releases assumes that the code points that were
+        # Hangul syllables in this release only are something else, so if
+        # using such data, we have to override it
+
+        my $self = shift;
+        my $addr = do { no overloading; pack 'J', $self; };
+        Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+
+        my $object = main::property_ref($property{$addr});
+        $object->add_map(0x3400, 0x4DFF,
+                         $early{$addr}[3],  # Passed-in value for these
+                         Replace => $UNCONDITIONALLY);
+    }
+
     sub _insert_property_into_line {
         # Add a property field to $_, if this file requires it.
 
@@ -3027,6 +3320,8 @@ package Multi_Default;
         #        .
         #        .
         #        'U'));
+        # It is best to leave the final value be the one that matches the
+        # above-Unicode code points.
 
         my $class = shift;
 
@@ -3732,7 +4027,7 @@ sub trace { return main::trace(@_); }
         #       => $MULTIPLE_BEFORE means that if this range duplicates an
         #                         existing one, but has a different value,
         #                         don't replace the existing one, but insert
-        #                         this, one so that the same range can occur
+        #                         this one so that the same range can occur
         #                         multiple times.  They are stored LIFO, so
         #                         that the final one inserted is the first one
         #                         returned in an ordered search of the table.
@@ -3747,6 +4042,7 @@ sub trace { return main::trace(@_); }
         #                         existing range, this one is discarded
         #                         (leaving the existing one in its original,
         #                         higher priority position
+        #       => $CROAK         Die with an error if is already there
         #       => anything else  is the same as => $IF_NOT_EQUIVALENT
         #
         # "same value" means identical for non-type-0 ranges, and it means
@@ -3835,7 +4131,7 @@ sub trace { return main::trace(@_); }
 
                 # Here, the new range starts just after the current highest in
                 # the range list, and they have the same type and value.
-                # Extend the current range to incorporate the new one.
+                # Extend the existing range to incorporate the new one.
                 @{$r}[-1]->set_end($end);
             }
 
@@ -4228,7 +4524,7 @@ sub trace { return main::trace(@_); }
             # In other words,
             #   r[$i-1]->end < $start <= r[$i]->end
             # And:
-            #   r[$i-1]->end < $start <= $end <= r[$j+1]->start
+            #   r[$i-1]->end < $start <= $end < r[$j+1]->start
             #
             # Also:
             #   $clean_insert is a boolean which is set true if and only if
@@ -5093,6 +5389,7 @@ sub trace { return main::trace(@_); }
         my $note = delete $args{'Note'};
         my $make_re_pod_entry = delete $args{'Re_Pod_Entry'};
         my $perl_extension = delete $args{'Perl_Extension'};
+        my $suppression_reason = delete $args{'Suppression_Reason'};
 
         # Shouldn't have any left over
         Carp::carp_extra_args(\%args) if main::DEBUG && %args;
@@ -5134,11 +5431,12 @@ END
         {
             $fate{$addr} = $SUPPRESSED;
         }
-        elsif ($fate{$addr} == $SUPPRESSED
-               && ! exists $why_suppressed{$property{$addr}->complete_name})
-        {
-            Carp::my_carp_bug("There is no current capability to set the reason for suppressing.");
-            # perhaps Fate => [ $SUPPRESSED, "reason" ]
+        elsif ($fate{$addr} == $SUPPRESSED) {
+            Carp::my_carp_bug("Need reason for suppressing") unless $suppression_reason;
+            # Though currently unused
+        }
+        elsif ($suppression_reason) {
+            Carp::my_carp_bug("A reason was given for suppressing, but not suppressed");
         }
 
         # If hasn't set its status already, see if it is on one of the
@@ -5266,17 +5564,18 @@ END
         my %args = @_;
         my $loose_match = delete $args{'Fuzzy'};
 
-        my $make_re_pod_entry = delete $args{'Re_Pod_Entry'};
-        $make_re_pod_entry = $YES unless defined $make_re_pod_entry;
-
         my $ok_as_filename = delete $args{'OK_as_Filename'};
         $ok_as_filename = 1 unless defined $ok_as_filename;
 
-        my $status = delete $args{'Status'};
-        $status = $NORMAL unless defined $status;
-
         # An internal name does not get documented, unless overridden by the
-        # input.
+        # input; same for making tests for it.
+        my $status = delete $args{'Status'} || (($name =~ /^_/)
+                                                ? $INTERNAL_ALIAS
+                                                : $NORMAL);
+        my $make_re_pod_entry = delete $args{'Re_Pod_Entry'}
+                                            // (($status ne $INTERNAL_ALIAS)
+                                               ? (($name =~ /^_/) ? $NO : $YES)
+                                               : $NO);
         my $ucd = delete $args{'UCD'} // (($name =~ /^_/) ? 0 : 1);
 
         Carp::carp_extra_args(\%args) if main::DEBUG && %args;
@@ -5346,7 +5645,7 @@ END
                 $insert_position,
                 0,
                 Alias->new($name, $loose_match, $make_re_pod_entry,
-                                                $ok_as_filename, $status, $ucd);
+                           $ok_as_filename, $status, $ucd);
 
         # This name may be shorter than any existing ones, so clear the cache
         # of the shortest, so will have to be recalculated.
@@ -6064,7 +6363,10 @@ END
                                 else { # Indent if not displaying code points
                                     $annotation = " " x 4;
                                 }
-                                $annotation .= " $range_name" if $range_name;
+                                if ($range_name) {
+                                    $annotation .= " $age[$i]" if $age[$i];
+                                    $annotation .= " $range_name";
+                                }
 
                                 # Include the number of code points in the
                                 # range
@@ -6141,7 +6443,7 @@ END
                                 }
 
                                 if ($include_cp) {
-                                    $annotation = sprintf "%04X", $i;
+                                    $annotation = sprintf "%04X %s", $i, $age[$i];
                                     if ($use_adjustments) {
                                         $annotation .= " => $output_value";
                                     }
@@ -6267,7 +6569,8 @@ END
         }
 
         # Save the reason for suppression for output
-        if ($fate == $SUPPRESSED && defined $reason) {
+        if ($fate >= $SUPPRESSED) {
+            $reason = "" unless defined $reason;
             $why_suppressed{$complete_name{$addr}} = $reason;
         }
 
@@ -6763,7 +7066,7 @@ END
         # The ranges that map to the default aren't output, so subtract that
         # to get those actually output.  A property with matching tables
         # already has the information calculated.
-        if ($property->type != $STRING) {
+        if ($property->type != $STRING && $property->type != $FORCED_BINARY) {
             $count -= $property->table($default_map)->count;
         }
         elsif (defined $default_map) {
@@ -6839,9 +7142,11 @@ END
         $comment .= "This file returns the $mapping:\n";
 
         my $ucd_accessible_name = "";
+        my $has_underscore_name = 0;
         my $full_name = $self->property->full_name;
         for my $i (0 .. @property_aliases - 1) {
             my $name = $property_aliases[$i]->name;
+            $has_underscore_name = 1 if $name =~ /^_/;
             $comment .= sprintf("%-8s%s\n", " ", $name . '(cp)');
             if ($property_aliases[$i]->ucd) {
                 if ($name eq $full_name) {
@@ -6854,7 +7159,12 @@ END
         }
         $comment .= "\nwhere 'cp' is $cp.";
         if ($ucd_accessible_name) {
-            $comment .= "  Note that $these_mappings $are accessible via the functions prop_invmap('$full_name') or charprop() in Unicode::UCD";
+            $comment .= "  Note that $these_mappings";
+            if ($has_underscore_name) {
+                $comment .= " (except for the one(s) that begin with an underscore)";
+            }
+            $comment .= " $are accessible via the functions prop_invmap('$full_name') or charprop() in Unicode::UCD";
+
         }
 
         # And append any commentary already set from the actual property.
@@ -6888,7 +7198,7 @@ END
                 # There are tables which end up only having one element per
                 # range, but it is not worth keeping track of for making just
                 # this comment a little better.
-                $comment.= <<END;
+                $comment .= <<END;
 non-comment portions of the main body of lines of this file is:
 START\\tSTOP\\tMAPPING where START is the starting code point of the
 range, in hex; STOP is the ending point, or if omitted, the range has just one
@@ -7848,7 +8158,6 @@ END
                             main::uniques($leader, @{$equivalents{$addr}});
         my $has_unrelated = (@parents >= 2);  # boolean, ? are there unrelated
                                               # tables
-
         for my $parent (@parents) {
 
             my $property = $parent->property;
@@ -7906,7 +8215,7 @@ END
                 # commentary that the other combinations are possible.
                 # Because regular expressions don't recognize things like
                 # \p{jsn=}, only look at non-null right-hand-sides
-                my @property_aliases = $table_property->aliases;
+                my @property_aliases = grep { $_->status ne $INTERNAL_ALIAS } $table_property->aliases;
                 my @table_aliases = grep { $_->name ne "" } $table->aliases;
 
                 # The alias lists above are already ordered in the order we
@@ -7918,8 +8227,7 @@ END
                                     ?  main::max(scalar @table_aliases,
                                                  scalar @property_aliases)
                                     : 0;
-                trace "$listed_combos, tables=", scalar @table_aliases, "; names=", scalar @property_aliases if main::DEBUG;
-
+                trace "$listed_combos, tables=", scalar @table_aliases, "; property names=", scalar @property_aliases if main::DEBUG;
 
                 my $property_had_compound_name = 0;
 
@@ -8070,8 +8378,14 @@ END
             foreach my $flag (sort keys %flags) {
                 $comment .= <<END;
 '$flag' below means that this form is $flags{$flag}.
-Consult $pod_file.pod
 END
+                if ($flag eq $INTERNAL_ALIAS) {
+                    $comment .= "DO NOT USE!!!";
+                }
+                else {
+                    $comment .= "Consult $pod_file.pod";
+                }
+                $comment .= "\n";
             }
             $comment .= "\n";
         }
@@ -8436,18 +8750,27 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
             $perl_extension
                         = $self->perl_extension if ! defined $perl_extension;
 
+            my $fate;
+            my $suppression_reason = "";
+            if ($self->name =~ /^_/) {
+                $fate = $SUPPRESSED;
+                $suppression_reason = "Parent property is internal only";
+            }
+            elsif ($self->fate >= $SUPPRESSED) {
+                $fate = $self->fate;
+                $suppression_reason = $why_suppressed{$self->complete_name};
+
+            }
+            elsif ($name =~ /^_/) {
+                $fate = $INTERNAL_ONLY;
+            }
             $table = Match_Table->new(
                                 Name => $name,
                                 Perl_Extension => $perl_extension,
                                 _Alias_Hash => $table_ref{$addr},
                                 _Property => $self,
-
-                                # gets property's fate and status by default,
-                                # except if the name begind with an
-                                # underscore, default it to internal
-                                Fate => ($name =~ /^_/)
-                                         ? $INTERNAL_ONLY
-                                         : $self->fate,
+                                Fate => $fate,
+                                Suppression_Reason => $suppression_reason,
                                 Status => $self->status,
                                 _Status_Info => $self->status_info,
                                 %args);
@@ -8562,10 +8885,13 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
         # Swash names are used only on either
         # 1) legacy-only properties, because the formats for these are
         #    unchangeable, and they have had these lines in them; or
-        # 2) regular map tables; otherwise there should be no access to the
+        # 2) regular or internal-only map tables
+        # 3) otherwise there should be no access to the
         #    property map table from other parts of Perl.
         return if $map{$addr}->fate != $ORDINARY
-                  && $map{$addr}->fate != $LEGACY_ONLY;
+                  && $map{$addr}->fate != $LEGACY_ONLY
+                  && ! ($map{$addr}->name =~ /^_/
+                        && $map{$addr}->fate == $INTERNAL_ONLY);
 
         return $file{$addr} if defined $file{$addr};
         return $map{$addr}->external_name;
@@ -8589,9 +8915,6 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
         # to it.
         return 0 if $type{$addr} == $STRING;
 
-        # Don't generate anything for unimplemented properties.
-        return 0 if grep { $self->complete_name eq $_ }
-                                                    @unimplemented_properties;
         # Otherwise, do.
         return 1;
     }
@@ -8808,7 +9131,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
         Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
         my $addr = do { no overloading; pack 'J', $self; };
-        if ($fate == $SUPPRESSED) {
+        if ($fate >= $SUPPRESSED) {
             $why_suppressed{$self->complete_name} = $reason;
         }
 
@@ -8894,15 +9217,15 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
 
 package main;
 
-    sub display_chr {
-        # Converts an ordinal printable character value to a displayable
-        # string, using a dotted circle to hold combining characters.
+sub display_chr {
+    # Converts an ordinal printable character value to a displayable string,
+    # using a dotted circle to hold combining characters.
 
-        my $ord = shift;
-        my $chr = chr $ord;
-        return $chr if $ccc->table(0)->contains($ord);
-        return "\x{25CC}$chr";
-    }
+    my $ord = shift;
+    my $chr = chr $ord;
+    return $chr if $ccc->table(0)->contains($ord);
+    return "\x{25CC}$chr";
+}
 
 sub join_lines($) {
     # Returns lines of the input joined together, so that they can be folded
@@ -9443,7 +9766,6 @@ sub dump_inside_out {
 
     my $object = shift;
     my $fields_ref = shift;
-    Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
     my $addr = do { no overloading; pack 'J', $object; };
 
@@ -9520,6 +9842,17 @@ sub _operator_not_equal {
     return ! _operator_equal($self, $other);
 }
 
+sub substitute_PropertyAliases($) {
+    # Deal with early releases that don't have the crucial PropertyAliases.txt
+    # file.
+
+    my $file_object = shift;
+    $file_object->insert_lines(get_old_property_aliases());
+
+    process_PropertyAliases($file_object);
+}
+
+
 sub process_PropertyAliases($) {
     # This reads in the PropertyAliases.txt file, which contains almost all
     # the character properties in Unicode and their equivalent aliases:
@@ -9532,11 +9865,6 @@ sub process_PropertyAliases($) {
     my $file= shift;
     Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
-    # This whole file was non-existent in early releases, so use our own
-    # internal one.
-    $file->insert_lines(get_old_property_aliases())
-                                                if ! -e 'PropertyAliases.txt';
-
     # Add any cjk properties that may have been defined.
     $file->insert_lines(@cjk_properties);
 
@@ -9546,8 +9874,17 @@ sub process_PropertyAliases($) {
 
         my $full = $data[1];
 
+        # This line is defective in early Perls.  The property in Unihan.txt
+        # is kRSUnicode.
+        if ($full eq 'Unicode_Radical_Stroke' && @data < 3) {
+            push @data, qw(cjkRSUnicode kRSUnicode);
+        }
+
         my $this = Property->new($data[0], Full_Name => $full);
 
+        $this->set_fate($SUPPRESSED, $why_suppressed{$full})
+                                                    if $why_suppressed{$full};
+
         # Start looking for more aliases after these two.
         for my $i (2 .. @data - 1) {
             $this->add_alias($data[$i]);
@@ -9573,18 +9910,6 @@ sub finish_property_setup {
         Property->new('JSN', Full_Name => 'Jamo_Short_Name');
     }
 
-    # These two properties must be defined in all releases so we can generate
-    # the tables from them to make regex \X work, but suppress their output so
-    # aren't application visible prior to releases where they should be
-    if (! defined property_ref('GCB')) {
-        Property->new('GCB', Full_Name => 'Grapheme_Cluster_Break',
-                      Fate => $PLACEHOLDER);
-    }
-    if (! defined property_ref('hst')) {
-        Property->new('hst', Full_Name => 'Hangul_Syllable_Type',
-                      Fate => $PLACEHOLDER);
-    }
-
     # These are used so much, that we set globals for them.
     $gc = property_ref('General_Category');
     $block = property_ref('Block');
@@ -9701,22 +10026,15 @@ sub finish_property_setup {
     # for non-assigned code points; 'AL' for assigned.
     if (file_exists("${EXTRACTED}DLineBreak.txt") || -e 'LineBreak.txt') {
         my $lb = property_ref('Line_Break');
-        if ($v_version gt 3.2.0) {
+        if (file_exists("${EXTRACTED}DLineBreak.txt")) {
             $lb->set_default_map('Unknown');
         }
         else {
-            my $default = Multi_Default->new( 'Unknown' => '$gc->table("Cn")',
-                                              'AL');
+            my $default = Multi_Default->new('AL' => '~ $gc->table("Cn")',
+                                             'Unknown',
+                                            );
             $lb->set_default_map($default);
         }
-
-        # If has the URS property, make sure that the standard aliases are in
-        # it, since not in the input tables in some versions.
-        my $urs = property_ref('Unicode_Radical_Stroke');
-        if (defined $urs) {
-            $urs->add_alias('cjkRSUnicode');
-            $urs->add_alias('kRSUnicode');
-        }
     }
 
     # For backwards compatibility with applications that may read the mapping
@@ -9874,6 +10192,16 @@ END
     return @return;
 }
 
+sub substitute_PropValueAliases($) {
+    # Deal with early releases that don't have the crucial
+    # PropValueAliases.txt file.
+
+    my $file_object = shift;
+    $file_object->insert_lines(get_old_property_value_aliases());
+
+    process_PropValueAliases($file_object);
+}
+
 sub process_PropValueAliases {
     # This file contains values that properties look like:
     # bc ; AL        ; Arabic_Letter
@@ -9899,35 +10227,29 @@ sub process_PropValueAliases {
     my $file= shift;
     Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
-    # This whole file was non-existent in early releases, so use our own
-    # internal one if necessary.
-    if (! -e 'PropValueAliases.txt') {
-        $file->insert_lines(get_old_property_value_aliases());
-    }
-
     if ($v_version lt 4.0.0) {
         $file->insert_lines(split /\n/, <<'END'
-hst; L                                ; Leading_Jamo
-hst; LV                               ; LV_Syllable
-hst; LVT                              ; LVT_Syllable
-hst; NA                               ; Not_Applicable
-hst; T                                ; Trailing_Jamo
-hst; V                                ; Vowel_Jamo
+Hangul_Syllable_Type; L                                ; Leading_Jamo
+Hangul_Syllable_Type; LV                               ; LV_Syllable
+Hangul_Syllable_Type; LVT                              ; LVT_Syllable
+Hangul_Syllable_Type; NA                               ; Not_Applicable
+Hangul_Syllable_Type; T                                ; Trailing_Jamo
+Hangul_Syllable_Type; V                                ; Vowel_Jamo
 END
         );
     }
     if ($v_version lt 4.1.0) {
         $file->insert_lines(split /\n/, <<'END'
-GCB; CN                               ; Control
-GCB; CR                               ; CR
-GCB; EX                               ; Extend
-GCB; L                                ; L
-GCB; LF                               ; LF
-GCB; LV                               ; LV
-GCB; LVT                              ; LVT
-GCB; T                                ; T
-GCB; V                                ; V
-GCB; XX                               ; Other
+_Perl_GCB; CN                               ; Control
+_Perl_GCB; CR                               ; CR
+_Perl_GCB; EX                               ; Extend
+_Perl_GCB; L                                ; L
+_Perl_GCB; LF                               ; LF
+_Perl_GCB; LV                               ; LV
+_Perl_GCB; LVT                              ; LVT
+_Perl_GCB; T                                ; T
+_Perl_GCB; V                                ; V
+_Perl_GCB; XX                               ; Other
 END
         );
     }
@@ -9942,7 +10264,6 @@ END
     # program generates for this block property value
     #$file->insert_lines('blk; n/a; Herited');
 
-
     # Process each line of the file ...
     while ($file->next_line) {
 
@@ -9959,6 +10280,11 @@ END
         # thus shifting the former field 0 to after them.)
         splice (@data, 0, 0, splice(@data, 1, 2)) if $property eq 'ccc';
 
+        if ($v_version le v5.0.0 && $property eq 'blk' && $data[1] =~ /-/) {
+            my $new_style = $data[1] =~ s/-/_/gr;
+            splice @data, 1, 0, $new_style;
+        }
+
         # Field 0 is a short name unless "n/a"; field 1 is the full name.  If
         # there is no short name, use the full one in element 1
         if ($data[0] eq "n/a") {
@@ -10552,7 +10878,8 @@ sub output_perl_charnames_line ($$) {
                                                             $line));
                     }
 
-                    # And process the first range, like any other.
+                    # And set things up so that the below will process this first
+                    # range, like any other.
                     $low = $this_range->start;
                     $high = $this_range->end;
                 }
@@ -10963,11 +11290,12 @@ END
         my $file = shift;
         Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
-        # Create a new property specially located that is a combination of the
+        # Create a new property specially located that is a combination of
         # various Name properties: Name, Unicode_1_Name, Named Sequences, and
-        # Name_Alias properties.  (The final duplicates elements of the
-        # first.)  A comment for it will later be constructed based on the
-        # actual properties present and used
+        # _Perl_Name_Alias properties.  (The final one duplicates elements of the
+        # first, and starting in v6.1, is the same as the 'Name_Alias
+        # property.)  A comment for the new property will later be constructed
+        # based on the actual properties present and used
         $perl_charname = Property->new('Perl_Charnames',
                        Default_Map => "",
                        Directory => File::Spec->curdir(),
@@ -12028,10 +12356,8 @@ sub filter_old_style_case_folding {
     Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
     my @fields = split /\s*;\s*/;
-    if ($fields[0] =~ /^ 013 [01] $/x) { # The two turkish fields
-        $fields[1] = 'I';
-    }
-    elsif ($fields[1] eq 'L') {
+
+    if ($fields[1] eq 'L') {
         $fields[1] = 'C';             # L => C always
     }
     elsif ($fields[1] eq 'E') {
@@ -12339,6 +12665,68 @@ sub filter_numeric_value_line {
 { # Closure
     my %unihan_properties;
 
+    sub construct_unihan {
+
+        my $file_object = shift;
+
+        return unless file_exists($file_object->file);
+
+        if ($v_version lt v4.0.0) {
+            push @cjk_properties, 'URS ; Unicode_Radical_Stroke';
+            push @cjk_property_values, split "\n", <<'END';
+# @missing: 0000..10FFFF; Unicode_Radical_Stroke; <none>
+END
+        }
+
+        if ($v_version ge v3.0.0) {
+            push @cjk_properties, split "\n", <<'END';
+cjkIRG_GSource; kIRG_GSource
+cjkIRG_JSource; kIRG_JSource
+cjkIRG_KSource; kIRG_KSource
+cjkIRG_TSource; kIRG_TSource
+cjkIRG_VSource; kIRG_VSource
+END
+        push @cjk_property_values, split "\n", <<'END';
+# @missing: 0000..10FFFF; cjkIRG_GSource; <none>
+# @missing: 0000..10FFFF; cjkIRG_JSource; <none>
+# @missing: 0000..10FFFF; cjkIRG_KSource; <none>
+# @missing: 0000..10FFFF; cjkIRG_TSource; <none>
+# @missing: 0000..10FFFF; cjkIRG_VSource; <none>
+END
+        }
+        if ($v_version ge v3.1.0) {
+            push @cjk_properties, 'cjkIRG_HSource; kIRG_HSource';
+            push @cjk_property_values, '# @missing: 0000..10FFFF; cjkIRG_HSource; <none>';
+        }
+        if ($v_version ge v3.1.1) {
+            push @cjk_properties, 'cjkIRG_KPSource; kIRG_KPSource';
+            push @cjk_property_values, '# @missing: 0000..10FFFF; cjkIRG_KPSource; <none>';
+        }
+        if ($v_version ge v3.2.0) {
+            push @cjk_properties, split "\n", <<'END';
+cjkAccountingNumeric; kAccountingNumeric
+cjkCompatibilityVariant; kCompatibilityVariant
+cjkOtherNumeric; kOtherNumeric
+cjkPrimaryNumeric; kPrimaryNumeric
+END
+            push @cjk_property_values, split "\n", <<'END';
+# @missing: 0000..10FFFF; cjkAccountingNumeric; NaN
+# @missing: 0000..10FFFF; cjkCompatibilityVariant; <code point>
+# @missing: 0000..10FFFF; cjkOtherNumeric; NaN
+# @missing: 0000..10FFFF; cjkPrimaryNumeric; NaN
+END
+        }
+        if ($v_version gt v4.0.0) {
+            push @cjk_properties, 'cjkIRG_USource; kIRG_USource';
+            push @cjk_property_values, '# @missing: 0000..10FFFF; cjkIRG_USource; <none>';
+        }
+
+        if ($v_version ge v4.1.0) {
+            push @cjk_properties, 'cjkIICore ; kIICore';
+            push @cjk_property_values, '# @missing: 0000..10FFFF; cjkIICore; <none>';
+        }
+    }
+
     sub setup_unihan {
         # Do any special setup for Unihan properties.
 
@@ -12351,16 +12739,16 @@ sub filter_numeric_value_line {
         my $iicore = property_ref('kIICore');
         if (defined $iicore) {
             $iicore->set_type($FORCED_BINARY);
-            $iicore->table("Y")->add_note("Forced to a binary property as per unicode.org UAX #38.");
+            $iicore->table("Y")->add_note("Matches any code point which has a non-null value for this property; see unicode.org UAX #38.");
 
             # Unicode doesn't include the maps for this property, so don't
             # warn that they are missing.
             $iicore->set_pre_declared_maps(0);
             $iicore->add_comment(join_lines( <<END
-This property contains enum values, but Unicode UAX #38 says it should be
-interpreted as binary, so Perl creates tables for both 1) its enum values,
-plus 2) true/false tables in which it is considered true for all code points
-that have a non-null value
+This property contains string values, but any non-empty ones are considered to
+be 'core', so Perl creates tables for both: 1) its string values, plus 2)
+tables so that \\p{kIICore} matches any code point which has a non-empty
+value for this property.
 END
             ));
         }
@@ -12439,7 +12827,7 @@ sub filter_blocks_lines {
 
     # Change hyphens and blanks in the block name field only
     $fields[1] =~ s/[ -]/_/g;
-    $fields[1] =~ s/_ ( [a-z] ) /_\u$1/g;   # Capitalize first letter of word
+    $fields[1] =~ s/_ ( [a-z] ) /_\u$1/xg;   # Capitalize first letter of word
 
     $_ = join("; ", @fields);
     return;
@@ -12657,12 +13045,22 @@ sub generate_hst {
 END
 );
 
-    # The Hangul syllables in version 1 are completely different than what came
-    # after, so just ignore them there.
+    # The Hangul syllables in version 1 are at different code points than
+    # those that came along starting in version 2, and have different names;
+    # they comprise about 60% of the code points of the later version.
+    # From my (khw) research on them (see <558493EB.4000807@att.net>), the
+    # initial set is a subset of the later version, with different English
+    # transliterations.  I did not see an easy mapping between them.  The
+    # later set includes essentially all possibilities, even ones that aren't
+    # in modern use (if they ever were), and over 96% of the new ones are type
+    # LVT.  Mathematically, the early set must also contain a preponderance of
+    # LVT values.  In lieu of doing nothing, we just set them all to LVT, and
+    # expect that this will be right most of the time, which is better than
+    # not being right at all.
     if ($v_version lt v2.0.0) {
         my $property = property_ref($file->property);
+        $file->insert_lines("3400..4DFF; LVT\n");
         push @tables_that_may_be_empty, $property->table('LV')->complete_name;
-        push @tables_that_may_be_empty, $property->table('LVT')->complete_name;
         return;
     }
 
@@ -12712,7 +13110,6 @@ sub generate_GCB {
 
     # Also from http://www.unicode.org/reports/tr29/tr29-3.html.
     foreach my $code_point ( qw{
-                                40000
                                 09BE 09D7 0B3E 0B57 0BBE 0BD7 0CC2 0CD5 0CD6
                                 0D3E 0D57 0DCF 0DDF FF9E FF9F 1D165 1D16E 1D16F
                                 }
@@ -12735,275 +13132,50 @@ sub generate_GCB {
         generate_hst($file);
     }
 
-    return;
+    main::process_generic_property_file($file);
 }
 
-sub setup_early_name_alias {
-    my $file= shift;
-    Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
-    # This has the effect of pretending that the Name_Alias property was
-    # available in all Unicode releases.  Strictly speaking, this property
-    # should not be availabe in early releases, but doing this allows
-    # charnames.pm to work on older releases without change.  Prior to v5.16
-    # it had these names hard-coded inside it.  Unicode 6.1 came along and
-    # created these names, and so they were removed from charnames.
+sub fixup_early_perl_name_alias {
 
-    my $aliases = property_ref('Name_Alias');
-    if (! defined $aliases) {
-        $aliases = Property->new('Name_Alias', Default_Map => "");
-    }
+    # Different versions of Unicode have varying support for the name synonyms
+    # below.  Just include everything.  As of 6.1, all these are correct in
+    # the Unicode-supplied file.
+
+    my $file= shift;
+    Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
-    $file->insert_lines(get_old_name_aliases());
 
-    return;
-}
+    # ALERT did not come along until 6.0, at which point it became preferred
+    # over BELL.  By inserting it last in early releases, BELL is preferred
+    # over it; and vice-vers in 6.0
+    my $type_for_bell = ($v_version lt v6.0.0)
+               ? 'correction'
+               : 'alternate';
+    $file->insert_lines(split /\n/, <<END
+0007;BELL; $type_for_bell
+000A;LINE FEED (LF);alternate
+000C;FORM FEED (FF);alternate
+000D;CARRIAGE RETURN (CR);alternate
+0085;NEXT LINE (NEL);alternate
+END
 
-sub get_old_name_aliases () {
+    );
 
-    # The Unicode_1_Name field, contains most of these names.  One would
-    # expect, given the field's name, that its values would be fixed across
-    # versions, giving the true Unicode version 1 name for the character.
-    # Sadly, this is not the case.  Actually Version 1.1.5 had no names for
-    # any of the controls; Version 2.0 introduced names for the C0 controls,
-    # and 3.0 introduced C1 names.  3.0.1 removed the name INDEX; and 3.2
-    # changed some names: it
+    # One might think that the the 'Unicode_1_Name' field, could work for most
+    # of the above names, but sadly that field varies depending on the
+    # release.  Version 1.1.5 had no names for any of the controls; Version
+    # 2.0 introduced names for the C0 controls, and 3.0 introduced C1 names.
+    # 3.0.1 removed the name INDEX; and 3.2 changed some names:
     #   changed to parenthesized versions like "NEXT LINE" to
     #       "NEXT LINE (NEL)";
     #   changed PARTIAL LINE DOWN to PARTIAL LINE FORWARD
     #   changed PARTIAL LINE UP to PARTIAL LINE BACKWARD;;
     #   changed e.g. FILE SEPARATOR to INFORMATION SEPARATOR FOUR
-    # This list contains all the names that were defined so that
-    # charnames::vianame(), etc. understand them all EVEN if this version of
-    # Unicode didn't specify them (this could be construed as a bug).
-    # mktables elsewhere gives preference to the Unicode_1_Name field over
-    # these names, so that viacode() will return the correct value for that
-    # version of Unicode, except when that version doesn't define a name,
-    # viacode() will return one anyway (this also could be construed as a
-    # bug).  But these potential "bugs" allow for the smooth working of code
-    # on earlier Unicode releases.
-
-    my @return = split /\n/, <<'END';
-0000;NULL;control
-0000;NUL;abbreviation
-0001;START OF HEADING;control
-0001;SOH;abbreviation
-0002;START OF TEXT;control
-0002;STX;abbreviation
-0003;END OF TEXT;control
-0003;ETX;abbreviation
-0004;END OF TRANSMISSION;control
-0004;EOT;abbreviation
-0005;ENQUIRY;control
-0005;ENQ;abbreviation
-0006;ACKNOWLEDGE;control
-0006;ACK;abbreviation
-0007;BELL;control
-0007;BEL;abbreviation
-0008;BACKSPACE;control
-0008;BS;abbreviation
-0009;CHARACTER TABULATION;control
-0009;HORIZONTAL TABULATION;control
-0009;HT;abbreviation
-0009;TAB;abbreviation
-000A;LINE FEED;control
-000A;LINE FEED (LF);control
-000A;NEW LINE;control
-000A;END OF LINE;control
-000A;LF;abbreviation
-000A;NL;abbreviation
-000A;EOL;abbreviation
-000B;LINE TABULATION;control
-000B;VERTICAL TABULATION;control
-000B;VT;abbreviation
-000C;FORM FEED;control
-000C;FORM FEED (FF);control
-000C;FF;abbreviation
-000D;CARRIAGE RETURN;control
-000D;CARRIAGE RETURN (CR);control
-000D;CR;abbreviation
-000E;SHIFT OUT;control
-000E;LOCKING-SHIFT ONE;control
-000E;SO;abbreviation
-000F;SHIFT IN;control
-000F;LOCKING-SHIFT ZERO;control
-000F;SI;abbreviation
-0010;DATA LINK ESCAPE;control
-0010;DLE;abbreviation
-0011;DEVICE CONTROL ONE;control
-0011;DC1;abbreviation
-0012;DEVICE CONTROL TWO;control
-0012;DC2;abbreviation
-0013;DEVICE CONTROL THREE;control
-0013;DC3;abbreviation
-0014;DEVICE CONTROL FOUR;control
-0014;DC4;abbreviation
-0015;NEGATIVE ACKNOWLEDGE;control
-0015;NAK;abbreviation
-0016;SYNCHRONOUS IDLE;control
-0016;SYN;abbreviation
-0017;END OF TRANSMISSION BLOCK;control
-0017;ETB;abbreviation
-0018;CANCEL;control
-0018;CAN;abbreviation
-0019;END OF MEDIUM;control
-0019;EOM;abbreviation
-001A;SUBSTITUTE;control
-001A;SUB;abbreviation
-001B;ESCAPE;control
-001B;ESC;abbreviation
-001C;INFORMATION SEPARATOR FOUR;control
-001C;FILE SEPARATOR;control
-001C;FS;abbreviation
-001D;INFORMATION SEPARATOR THREE;control
-001D;GROUP SEPARATOR;control
-001D;GS;abbreviation
-001E;INFORMATION SEPARATOR TWO;control
-001E;RECORD SEPARATOR;control
-001E;RS;abbreviation
-001F;INFORMATION SEPARATOR ONE;control
-001F;UNIT SEPARATOR;control
-001F;US;abbreviation
-0020;SP;abbreviation
-007F;DELETE;control
-007F;DEL;abbreviation
-0080;PADDING CHARACTER;figment
-0080;PAD;abbreviation
-0081;HIGH OCTET PRESET;figment
-0081;HOP;abbreviation
-0082;BREAK PERMITTED HERE;control
-0082;BPH;abbreviation
-0083;NO BREAK HERE;control
-0083;NBH;abbreviation
-0084;INDEX;control
-0084;IND;abbreviation
-0085;NEXT LINE;control
-0085;NEXT LINE (NEL);control
-0085;NEL;abbreviation
-0086;START OF SELECTED AREA;control
-0086;SSA;abbreviation
-0087;END OF SELECTED AREA;control
-0087;ESA;abbreviation
-0088;CHARACTER TABULATION SET;control
-0088;HORIZONTAL TABULATION SET;control
-0088;HTS;abbreviation
-0089;CHARACTER TABULATION WITH JUSTIFICATION;control
-0089;HORIZONTAL TABULATION WITH JUSTIFICATION;control
-0089;HTJ;abbreviation
-008A;LINE TABULATION SET;control
-008A;VERTICAL TABULATION SET;control
-008A;VTS;abbreviation
-008B;PARTIAL LINE FORWARD;control
-008B;PARTIAL LINE DOWN;control
-008B;PLD;abbreviation
-008C;PARTIAL LINE BACKWARD;control
-008C;PARTIAL LINE UP;control
-008C;PLU;abbreviation
-008D;REVERSE LINE FEED;control
-008D;REVERSE INDEX;control
-008D;RI;abbreviation
-008E;SINGLE SHIFT TWO;control
-008E;SINGLE-SHIFT-2;control
-008E;SS2;abbreviation
-008F;SINGLE SHIFT THREE;control
-008F;SINGLE-SHIFT-3;control
-008F;SS3;abbreviation
-0090;DEVICE CONTROL STRING;control
-0090;DCS;abbreviation
-0091;PRIVATE USE ONE;control
-0091;PRIVATE USE-1;control
-0091;PU1;abbreviation
-0092;PRIVATE USE TWO;control
-0092;PRIVATE USE-2;control
-0092;PU2;abbreviation
-0093;SET TRANSMIT STATE;control
-0093;STS;abbreviation
-0094;CANCEL CHARACTER;control
-0094;CCH;abbreviation
-0095;MESSAGE WAITING;control
-0095;MW;abbreviation
-0096;START OF GUARDED AREA;control
-0096;START OF PROTECTED AREA;control
-0096;SPA;abbreviation
-0097;END OF GUARDED AREA;control
-0097;END OF PROTECTED AREA;control
-0097;EPA;abbreviation
-0098;START OF STRING;control
-0098;SOS;abbreviation
-0099;SINGLE GRAPHIC CHARACTER INTRODUCER;figment
-0099;SGC;abbreviation
-009A;SINGLE CHARACTER INTRODUCER;control
-009A;SCI;abbreviation
-009B;CONTROL SEQUENCE INTRODUCER;control
-009B;CSI;abbreviation
-009C;STRING TERMINATOR;control
-009C;ST;abbreviation
-009D;OPERATING SYSTEM COMMAND;control
-009D;OSC;abbreviation
-009E;PRIVACY MESSAGE;control
-009E;PM;abbreviation
-009F;APPLICATION PROGRAM COMMAND;control
-009F;APC;abbreviation
-00A0;NBSP;abbreviation
-00AD;SHY;abbreviation
-200B;ZWSP;abbreviation
-200C;ZWNJ;abbreviation
-200D;ZWJ;abbreviation
-200E;LRM;abbreviation
-200F;RLM;abbreviation
-202A;LRE;abbreviation
-202B;RLE;abbreviation
-202C;PDF;abbreviation
-202D;LRO;abbreviation
-202E;RLO;abbreviation
-FEFF;BYTE ORDER MARK;alternate
-FEFF;BOM;abbreviation
-FEFF;ZWNBSP;abbreviation
-END
-
-    if ($v_version ge v3.0.0) {
-        push @return, split /\n/, <<'END';
-180B; FVS1; abbreviation
-180C; FVS2; abbreviation
-180D; FVS3; abbreviation
-180E; MVS; abbreviation
-202F; NNBSP; abbreviation
-END
-    }
-
-    if ($v_version ge v3.2.0) {
-        push @return, split /\n/, <<'END';
-034F; CGJ; abbreviation
-205F; MMSP; abbreviation
-2060; WJ; abbreviation
-END
-        # Add in VS1..VS16
-        my $cp = 0xFE00 - 1;
-        for my $i (1..16) {
-            push @return, sprintf("%04X; VS%d; abbreviation", $cp + $i, $i);
-        }
-    }
-    if ($v_version ge v4.0.0) { # Add in VS17..VS256
-        my $cp = 0xE0100 - 17;
-        for my $i (17..256) {
-            push @return, sprintf("%04X; VS%d; abbreviation", $cp + $i, $i);
-        }
-    }
-
-    # ALERT did not come along until 6.0, at which point it became preferred
-    # over BELL, and was never in the Unicode_1_Name field.  For the same
-    # reasons, that the other names are made known to all releases by this
-    # function, we make ALERT known too.  By inserting it
-    # last in early releases, BELL is preferred over it; and vice-vers in 6.0
-    my $alert = '0007; ALERT; control';
-    if ($v_version lt v6.0.0) {
-        push @return, $alert;
-    }
-    else {
-        unshift @return, $alert;
-    }
+    #
+    # All these are present in the 6.1 NameAliases.txt
 
-    return @return;
+    return;
 }
 
 sub filter_later_version_name_alias_line {
@@ -13030,14 +13202,29 @@ sub filter_later_version_name_alias_line {
 sub filter_early_version_name_alias_line {
 
     # Early versions did not have the trailing alias type field; implicitly it
-    # was 'correction'.   But our synthetic lines we add in this program do
-    # have it, so test for the type field.
-    $_ .= "; correction" if $_ !~ /;.*;/;
+    # was 'correction'.
+    $_ .= "; correction";
 
     filter_later_version_name_alias_line;
     return;
 }
 
+sub filter_all_caps_script_names {
+
+    # Some early Unicode releases had the script names in all CAPS.  This
+    # converts them to just the first letter of each word being capital.
+
+    my ($range, $script, @remainder)
+        = split /\s*;\s*/, $_, -1; # -1 => retain trailing null fields
+    my @words = split "_", $script;
+    for my $word (@words) {
+        $word =
+            ucfirst(lc($word)) if $word ne 'CJK';
+    }
+    $script = join "_", @words;
+    $_ = join ";", $range, $script, @remainder;
+}
+
 sub finish_Unicode() {
     # This routine should be called after all the Unicode files have been read
     # in.  It:
@@ -13188,72 +13375,81 @@ END
         # Add any remaining code points to the mapping, using the default for
         # missing code points.
         my $default_table;
-        if (defined (my $default_map = $property->default_map)) {
+        my $default_map = $property->default_map;
+        if ($property_type == $FORCED_BINARY) {
 
-            # Make sure there is a match table for the default
-            if (! defined ($default_table = $property->table($default_map))) {
-                $default_table = $property->add_match_table($default_map);
+            # A forced binary property creates a 'Y' table that matches all
+            # non-default values.  The actual string values are also written out
+            # as a map table.  (The default value will almost certainly be the
+            # empty string, so the pod glosses over the distinction, and just
+            # talks about empty vs non-empty.)
+            my $yes = $property->table("Y");
+            foreach my $range ($property->ranges) {
+                next if $range->value eq $default_map;
+                $yes->add_range($range->start, $range->end);
             }
+            $property->table("N")->set_complement($yes);
+        }
+        else {
+            if (defined $default_map) {
 
-            # And, if the property is binary, the default table will just
-            # be the complement of the other table.
-            if ($property_type == $BINARY) {
-                my $non_default_table;
-
-                # Find the non-default table.
-                for my $table ($property->tables) {
-                    next if $table == $default_table;
-                    $non_default_table = $table;
+                # Make sure there is a match table for the default
+                if (! defined ($default_table = $property->table($default_map)))
+                {
+                    $default_table = $property->add_match_table($default_map);
                 }
-                $default_table->set_complement($non_default_table);
-            }
-            else {
 
-                # This fills in any missing values with the default.  It's not
-                # necessary to do this with binary properties, as the default
-                # is defined completely in terms of the Y table.
-                $property->add_map(0, $MAX_WORKING_CODEPOINT,
-                                   $default_map, Replace => $NO);
-            }
-        }
+                # And, if the property is binary, the default table will just
+                # be the complement of the other table.
+                if ($property_type == $BINARY) {
+                    my $non_default_table;
 
-        # Have all we need to populate the match tables.
-        my $maps_should_be_defined = $property->pre_declared_maps;
-        foreach my $range ($property->ranges) {
-            my $map = $range->value;
-            my $table = $property->table($map);
-            if (! defined $table) {
+                    # Find the non-default table.
+                    for my $table ($property->tables) {
+                        if ($table == $default_table) {
+                            if ($v_version le v5.0.0) {
+                                $table->add_alias($_) for qw(N No F False);
+                            }
+                            next;
+                        } elsif ($v_version le v5.0.0) {
+                            $table->add_alias($_) for qw(Y Yes T True);
+                        }
+                        $non_default_table = $table;
+                    }
+                    $default_table->set_complement($non_default_table);
+                }
+                else {
 
-                # Integral and rational property values are not necessarily
-                # defined in PropValueAliases, but whether all the other ones
-                # should be depends on the property.
-                if ($maps_should_be_defined
-                    && $map !~ /^ -? \d+ ( \/ \d+ )? $/x)
-                {
-                    Carp::my_carp("Table '$property_name=$map' should have been defined.  Defining it now.")
+                    # This fills in any missing values with the default.  It's
+                    # not necessary to do this with binary properties, as the
+                    # default is defined completely in terms of the Y table.
+                    $property->add_map(0, $MAX_WORKING_CODEPOINT,
+                                    $default_map, Replace => $NO);
                 }
-                $table = $property->add_match_table($map);
             }
 
-            next if $table->complement != 0;    # Don't need to populate these
-            $table->add_range($range->start, $range->end);
-        }
+            # Have all we need to populate the match tables.
+            my $maps_should_be_defined = $property->pre_declared_maps;
+            foreach my $range ($property->ranges) {
+                my $map = $range->value;
+                my $table = $property->table($map);
+                if (! defined $table) {
 
-        # A forced binary property has additional true/false tables which
-        # should have been set up when it was forced into binary.  The false
-        # table matches exactly the same set as the property's default table.
-        # The true table matches the complement of that.  The false table is
-        # not the same as an additional set of aliases on top of the default
-        # table, so use 'set_equivalent_to'.  If it were implemented as
-        # additional aliases, various things would have to be adjusted, but
-        # especially, if the user wants to get a list of names for the table
-        # using Unicode::UCD::prop_value_aliases(), s/he should get a
-        # different set depending on whether they want the default table or
-        # the false table.
-        if ($property_type == $FORCED_BINARY) {
-            $property->table('N')->set_equivalent_to($default_table,
-                                                     Related => 1);
-            $property->table('Y')->set_complement($default_table);
+                    # Integral and rational property values are not
+                    # necessarily defined in PropValueAliases, but whether all
+                    # the other ones should be depends on the property.
+                    if ($maps_should_be_defined
+                        && $map !~ /^ -? \d+ ( \/ \d+ )? $/x)
+                    {
+                        Carp::my_carp("Table '$property_name=$map' should "
+                                    . "have been defined.  Defining it now.")
+                    }
+                    $table = $property->add_match_table($map);
+                }
+
+                next if $table->complement != 0; # Don't need to populate these
+                $table->add_range($range->start, $range->end);
+            }
         }
 
         # For Perl 5.6 compatibility, all properties matchable in regexes can
@@ -13321,8 +13517,6 @@ END
     $gc->table('Ll')->set_caseless_equivalent($LC);
     $gc->table('Lu')->set_caseless_equivalent($LC);
 
-    my $Cs = $gc->table('Cs');
-
     # Create digit and case fold tables with the original file names for
     # backwards compatibility with applications that read them directly.
     my $Digit = Property->new("Legacy_Perl_Decimal_Digit",
@@ -13408,6 +13602,26 @@ sub pre_3_dot_1_Nl () {
     return $Nl;
 }
 
+sub calculate_Assigned() {  # Calculate the gc != Cn code points; may be
+                            # called before the Cn's are completely filled.
+                            # Works on Unicodes earlier than ones that
+                            # explicitly specify Cn.
+    return if defined $Assigned;
+
+    if (! defined $gc || $gc->is_empty()) {
+        Carp::my_carp_bug("calculate_Assigned() called before $gc is populated");
+    }
+
+    $Assigned = $perl->add_match_table('Assigned',
+                                Description  => "All assigned code points",
+                                );
+    while (defined (my $range = $gc->each_range())) {
+        my $standard_value = standardize($range->value);
+        next if $standard_value eq 'cn' || $standard_value eq 'unassigned';
+        $Assigned->add_range($range->start, $range->end);
+    }
+}
+
 sub compile_perl() {
     # Create perl-defined tables.  Almost all are part of the pseudo-property
     # named 'perl' internally to this program.  Many of these are recommended
@@ -13446,16 +13660,12 @@ sub compile_perl() {
     }
 
     my $Any = $perl->add_match_table('Any',
-                                     Description  => "All Unicode code points: [\\x{0000}-\\x{10FFFF}]",
+                                     Description  => "All Unicode code points: [\\x{0000}-\\x{$MAX_UNICODE_CODEPOINT_STRING}]",
                                      );
-    $Any->add_range(0, 0x10FFFF);
+    $Any->add_range(0, $MAX_UNICODE_CODEPOINT);
     $Any->add_alias('Unicode');
 
-    # Assigned is the opposite of gc=unassigned
-    my $Assigned = $perl->add_match_table('Assigned',
-                                Description  => "All assigned code points",
-                                Initialize => ~ $gc->table('Unassigned'),
-                                );
+    calculate_Assigned();
 
     # Our internal-only property should be treated as more than just a
     # synonym; grandfather it in to the pod.
@@ -13501,32 +13711,27 @@ sub compile_perl() {
 
         # There are quite a few code points in Lower, that aren't in gc=lc,
         # and not all are in all releases.
-        foreach my $code_point (    utf8::unicode_to_native(0xAA),
-                                    utf8::unicode_to_native(0xBA),
-                                    0x02B0 .. 0x02B8,
-                                    0x02C0 .. 0x02C1,
-                                    0x02E0 .. 0x02E4,
-                                    0x0345,
-                                    0x037A,
-                                    0x1D2C .. 0x1D6A,
-                                    0x1D78,
-                                    0x1D9B .. 0x1DBF,
-                                    0x2071,
-                                    0x207F,
-                                    0x2090 .. 0x209C,
-                                    0x2170 .. 0x217F,
-                                    0x24D0 .. 0x24E9,
-                                    0x2C7C .. 0x2C7D,
-                                    0xA770,
-                                    0xA7F8 .. 0xA7F9,
-        ) {
-            # Don't include the code point unless it is assigned in this
-            # release
-            my $category = $gc->value_of(hex $code_point);
-            next if ! defined $category || $category eq 'Cn';
-
-            $Lower += $code_point;
-        }
+        my $temp = Range_List->new(Initialize => [
+                                                utf8::unicode_to_native(0xAA),
+                                                utf8::unicode_to_native(0xBA),
+                                                0x02B0 .. 0x02B8,
+                                                0x02C0 .. 0x02C1,
+                                                0x02E0 .. 0x02E4,
+                                                0x0345,
+                                                0x037A,
+                                                0x1D2C .. 0x1D6A,
+                                                0x1D78,
+                                                0x1D9B .. 0x1DBF,
+                                                0x2071,
+                                                0x207F,
+                                                0x2090 .. 0x209C,
+                                                0x2170 .. 0x217F,
+                                                0x24D0 .. 0x24E9,
+                                                0x2C7C .. 0x2C7D,
+                                                0xA770,
+                                                0xA7F8 .. 0xA7F9,
+                                ]);
+        $Lower += $temp & $Assigned;
     }
     my $Posix_Lower = $perl->add_match_table("PosixLower",
                             Description => "[a-z]",
@@ -13832,6 +14037,7 @@ sub compile_perl() {
     );
     $Space->add_alias('XPerlSpace');    # Pre-existing synonyms
     $Space->add_alias('SpacePerl');
+    $Space->add_alias('Space') if $v_version lt v4.1.0;
 
     my $Posix_space = $perl->add_match_table("PosixSpace",
                             Description => "\\t, \\n, \\cK, \\f, \\r, and ' '.  (\\cK is vertical tab)",
@@ -13847,11 +14053,18 @@ sub compile_perl() {
                             Initialize => $Cntrl & $ASCII,
                             );
 
+    my $perl_surrogate = $perl->add_match_table('_Perl_Surrogate');
+    if (defined (my $Cs = $gc->table('Cs'))) {
+        $perl_surrogate += $Cs;
+    }
+    else {
+        push @tables_that_may_be_empty, '_Perl_Surrogate';
+    }
+
     # $controls is a temporary used to construct Graph.
     my $controls = Range_List->new(Initialize => $gc->table('Unassigned')
-                                                + $gc->table('Control'));
-    # Cs not in release 1
-    $controls += $gc->table('Surrogate') if defined $gc->table('Surrogate');
+                                                + $gc->table('Control')
+                                                + $perl_surrogate);
 
     # Graph is  ~space &  ~(Cc|Cs|Cn) = ~(space + $controls)
     my $Graph = $perl->add_match_table('Graph', Full_Name => 'XPosixGraph',
@@ -13957,14 +14170,21 @@ sub compile_perl() {
     # 31f05a37c4e9c37a7263491f2fc0237d836e1a80 for a more complete description
     # of the MU issue.
     foreach my $range ($loc_problem_folds->ranges) {
-        foreach my $code_point($range->start .. $range->end) {
+        foreach my $code_point ($range->start .. $range->end) {
             my $fold_range = $cf->containing_range($code_point);
             next unless defined $fold_range;
 
+            # Skip if folds to itself
+            next if $fold_range->value eq $CODE_POINT;
+
             my @hex_folds = split " ", $fold_range->value;
-            my $start_cp = hex $hex_folds[0];
+            my $start_cp = $hex_folds[0];
+            next if $start_cp eq $CODE_POINT;
+            $start_cp = hex $start_cp;
             foreach my $i (0 .. @hex_folds - 1) {
-                my $cp = hex $hex_folds[$i];
+                my $cp = $hex_folds[$i];
+                next if $cp eq $CODE_POINT;
+                $cp = hex $cp;
                 next unless $cp > 255;    # Already have the < 256 ones
 
                 $loc_problem_folds->add_range($cp, $cp);
@@ -13978,9 +14198,13 @@ sub compile_perl() {
          Description =>
               "Code points whose fold is a string of more than one character",
     );
+    if ($v_version lt v3.0.1) {
+        push @tables_that_may_be_empty, '_Perl_Folds_To_Multi_Char';
+    }
 
     # Look through all the known folds to populate these tables.
     foreach my $range ($cf->ranges) {
+        next if $range->value eq $CODE_POINT;
         my $start = $range->start;
         my $end = $range->end;
         $any_folds->add_range($start, $end);
@@ -14190,7 +14414,7 @@ sub compile_perl() {
                                     + utf8::unicode_to_native(0xA0) # NBSP
                         );
 
-    my @composition = ('Name', 'Unicode_1_Name', 'Name_Alias');
+    my @composition = ('Name', 'Unicode_1_Name', '_Perl_Name_Alias');
 
     if (@named_sequences) {
         push @composition, 'Named_Sequence';
@@ -14201,15 +14425,15 @@ sub compile_perl() {
 
     my $alias_sentence = "";
     my %abbreviations;
-    my $alias = property_ref('Name_Alias');
-    $perl_charname->set_proxy_for('Name_Alias');
-
-    # Add each entry in Name_Alias to Perl_Charnames.  Where these go with
-    # respect to any existing entry depends on the entry type.  Corrections go
-    # before said entry, as they should be returned in preference over the
-    # existing entry.  (A correction to a correction should be later in the
-    # Name_Alias table, so it will correctly precede the erroneous correction
-    # in Perl_Charnames.)
+    my $alias = property_ref('_Perl_Name_Alias');
+    $perl_charname->set_proxy_for('_Perl_Name_Alias');
+
+    # Add each entry in _Perl_Name_Alias to Perl_Charnames.  Where these go
+    # with respect to any existing entry depends on the entry type.
+    # Corrections go before said entry, as they should be returned in
+    # preference over the existing entry.  (A correction to a correction
+    # should be later in the _Perl_Name_Alias table, so it will correctly
+    # precede the erroneous correction in Perl_Charnames.)
     #
     # Abbreviations go after everything else, so they are saved temporarily in
     # a hash for later.
@@ -14244,7 +14468,7 @@ sub compile_perl() {
         $perl_charname->add_duplicate($code_point, $value, Replace => $replace_type);
     }
     $alias_sentence = <<END;
-The Name_Alias property adds duplicate code point entries that are
+The _Perl_Name_Alias property adds duplicate code point entries that are
 alternatives to the original name.  If an addition is a corrected
 name, it will be physically first in the table.  The original (less correct,
 but still valid) name will be next; then any alternatives, in no particular
@@ -14252,8 +14476,9 @@ order; and finally any abbreviations, again in no particular order.
 END
 
     # Now add the Unicode_1 names for the controls.  The Unicode_1 names had
-    # precedence before 6.1, so should be first in the file; the other names
-    # have precedence starting in 6.1,
+    # precedence before 6.1, including the awful ones like "LINE FEED (LF)",
+    # so should be first in the file; the other names have precedence starting
+    # in 6.1,
     my $before_or_after = ($v_version lt v6.1.0)
                           ? $MULTIPLE_BEFORE
                           : $MULTIPLE_AFTER;
@@ -14283,12 +14508,6 @@ END
                                         Replace => $before_or_after);
     }
 
-    # But in this version only, the ALERT has precedence over BELL, the
-    # Unicode_1_Name that would otherwise have precedence.
-    if ($v_version eq v6.0.0) {
-        $perl_charname->add_duplicate(7, 'ALERT', Replace => $MULTIPLE_BEFORE);
-    }
-
     # Now that have everything added, add in abbreviations after
     # everything else.  Sort so results don't change between runs of this
     # program
@@ -14398,6 +14617,25 @@ END
         $unassigned->set_equivalent_to($age_default, Related => 1);
     }
 
+    my $patws = $perl->add_match_table('_Perl_PatWS',
+                                       Perl_Extension => 1,
+                                       Fate => $INTERNAL_ONLY);
+    if (defined (my $off_patws = property_ref('Pattern_White_Space'))) {
+        $patws->initialize($off_patws->table('Y'));
+    }
+    else {
+        $patws->initialize([ ord("\t"),
+                             ord("\n"),
+                             utf8::unicode_to_native(0x0B), # VT
+                             ord("\f"),
+                             ord("\r"),
+                             ord(" "),
+                             utf8::unicode_to_native(0x85), # NEL
+                             0x200E..0x200F,             # Left, Right marks
+                             0x2028..0x2029              # Line, Paragraph seps
+                           ] );
+    }
+
     # See L<perlfunc/quotemeta>
     my $quotemeta = $perl->add_match_table('_Perl_Quotemeta',
                                            Perl_Extension => 1,
@@ -14406,22 +14644,78 @@ END
                                            # Initialize to what's common in
                                            # all Unicode releases.
                                            Initialize =>
-                                                $Space
-                                                + $gc->table('Control')
+                                                  $gc->table('Control')
+                                                + $Space
+                                                + $patws
+                                                + ((~ $Word) & $ASCII)
                            );
 
-    # In early releases without the proper Unicode properties, just set to \W.
-    if (! defined (my $patsyn = property_ref('Pattern_Syntax'))
-        || ! defined (my $patws = property_ref('Pattern_White_Space'))
-        || ! defined (my $di = property_ref('Default_Ignorable_Code_Point')))
-    {
-        $quotemeta += ~ $Word;
+    if (defined (my $patsyn = property_ref('Pattern_Syntax'))) {
+        $quotemeta += $patsyn->table('Y');
     }
     else {
-        $quotemeta += $patsyn->table('Y')
-                   + $patws->table('Y')
-                   + $di->table('Y')
-                   + ((~ $Word) & $ASCII);
+        $quotemeta += ((~ $Word) & Range->new(0, 255))
+                    - utf8::unicode_to_native(0xA8)
+                    - utf8::unicode_to_native(0xAF)
+                    - utf8::unicode_to_native(0xB2)
+                    - utf8::unicode_to_native(0xB3)
+                    - utf8::unicode_to_native(0xB4)
+                    - utf8::unicode_to_native(0xB7)
+                    - utf8::unicode_to_native(0xB8)
+                    - utf8::unicode_to_native(0xB9)
+                    - utf8::unicode_to_native(0xBC)
+                    - utf8::unicode_to_native(0xBD)
+                    - utf8::unicode_to_native(0xBE);
+        $quotemeta += [ # These are above-Latin1 patsyn; hence should be the
+                        # same in all releases
+                        0x2010 .. 0x2027,
+                        0x2030 .. 0x203E,
+                        0x2041 .. 0x2053,
+                        0x2055 .. 0x205E,
+                        0x2190 .. 0x245F,
+                        0x2500 .. 0x2775,
+                        0x2794 .. 0x2BFF,
+                        0x2E00 .. 0x2E7F,
+                        0x3001 .. 0x3003,
+                        0x3008 .. 0x3020,
+                        0x3030 .. 0x3030,
+                        0xFD3E .. 0xFD3F,
+                        0xFE45 .. 0xFE46
+                      ];
+    }
+
+    if (defined (my $di = property_ref('Default_Ignorable_Code_Point'))) {
+        $quotemeta += $di->table('Y')
+    }
+    else {
+        if ($v_version ge v2.0) {
+            $quotemeta += $gc->table('Cf')
+                       +  $gc->table('Cs');
+        }
+        $quotemeta += $gc->table('Cc')
+                    - $Space;
+        my $temp = Range_List->new(Initialize => [ 0x180B .. 0x180D,
+                                                   0x2060 .. 0x206F,
+                                                   0xFE00 .. 0xFE0F,
+                                                   0xFFF0 .. 0xFFFB,
+                                                   0xE0000 .. 0xE0FFF,
+                                                  ]);
+        $quotemeta += $temp & $Assigned;
+    }
+
+    my $nchar = $perl->add_match_table('_Perl_Nchar',
+                                       Perl_Extension => 1,
+                                       Fate => $INTERNAL_ONLY);
+    if (defined (my $off_nchar = property_ref('Nchar'))) {
+        $nchar->initialize($off_nchar->table('Y'));
+    }
+    else {
+        $nchar->initialize([ 0xFFFE .. 0xFFFF ]);
+        if ($v_version ge v2.0) {   # First release with these nchars
+            for (my $i = 0x1FFFE; $i <= 0x10FFFE; $i += 0x10000) {
+                $nchar += [ $i .. $i+1 ];
+            }
+        }
     }
 
     # Finished creating all the perl properties.  All non-internal non-string
@@ -14743,14 +15037,15 @@ sub register_file_for_name($$$) {
     my $file = shift;            # The file name in the final directory.
     Carp::carp_extra_args(\@_) if main::DEBUG && @_;
 
-    trace "table=$table, file=$file, directory=@$directory_ref" if main::DEBUG && $to_trace;
+    trace "table=$table, file=$file, directory=@$directory_ref, fate=", $table->fate if main::DEBUG && $to_trace;
 
     if ($table->isa('Property')) {
         $table->set_file_path(@$directory_ref, $file);
         push @map_properties, $table;
 
         # No swash means don't do the rest of this.
-        return if $table->fate != $ORDINARY;
+        return if $table->fate != $ORDINARY
+                  && ! ($table->name =~ /^_/ && $table->fate == $INTERNAL_ONLY);
 
         # Get the path to the file
         my @path = $table->file_path;
@@ -14764,7 +15059,12 @@ sub register_file_for_name($$$) {
         # property's map table
         foreach my $alias ($table->aliases) {
             my $name = $alias->name;
-            $loose_property_to_file_of{standardize($name)} = $file;
+            if ($name =~ /^_/) {
+                $strict_property_to_file_of{lc $name} = $file;
+            }
+            else {
+                $loose_property_to_file_of{standardize($name)} = $file;
+            }
         }
 
         # And a way for utf8_heavy to find the proper key in the SwashInfo
@@ -14972,7 +15272,22 @@ sub register_file_for_name($$$) {
         # Remove interior underscores.
         (my $filename = $name) =~ s/ (?<=.) _ (?=.) //xg;
 
-        # Change any non-word character into an underscore, and truncate to 8.
+        # Convert the dot in floating point numbers to an underscore
+        $filename =~ s/\./_/ if $filename =~ / ^ \d+ \. \d+ $ /x;
+
+        my $suffix = "";
+
+        # Extract any suffix, delete any non-word character, and truncate to 3
+        # after the dot
+        if ($filename =~ m/ ( .*? ) ( \. .* ) /x) {
+            $filename = $1;
+            $suffix = $2;
+            $suffix =~ s/\W+//g;
+            substr($suffix, 4) = "" if length($suffix) > 4;
+        }
+
+        # Change any non-word character outside the suffix into an underscore,
+        # and truncate to 8.
         $filename =~ s/\W+/_/g;   # eg., "L&" -> "L_"
         substr($filename, 8) = "" if length($filename) > 8;
 
@@ -14984,7 +15299,7 @@ sub register_file_for_name($$$) {
         #     InGreekE
         #     InGreek2
         my $warned = 0;
-        while (my $num = $base_names{$path}{lc $filename}++) {
+        while (my $num = $base_names{$path}{lc "$filename$suffix"}++) {
             $num++; # so basenames with numbers start with '2', which
                     # just looks more natural.
 
@@ -15491,9 +15806,9 @@ sub make_ucd_table_pod_entries {
             $$info_ref .= $full_name;
         }
 
-        # And the full-name entry includes the short name, if different
+        # And the full-name entry includes the short name, if shorter
         if ($info_ref == \$full_info
-            && $standard_short_name ne $standard_full_name)
+            && length $standard_short_name < length $standard_full_name)
         {
             $full_info =~ s/\.\Z//;
             $full_info .= "  " if $full_info;
@@ -15517,6 +15832,17 @@ sub make_ucd_table_pod_entries {
         $full_info .= ".  " if $full_info;
         $full_info .= $more_info;
     }
+    if ($table->property->type == $FORCED_BINARY) {
+        if ($full_info) {
+            $full_info =~ s/\.\Z//;
+            $full_info .= ".  ";
+        }
+        $full_info .= "This is a combination property which has both:"
+                    . " 1) a map to various string values; and"
+                    . " 2) a map to boolean Y/N, where 'Y' means the"
+                    . " string value is non-empty.  Add the prefix 'is'"
+                    . " to the prop_invmap() call to get the latter";
+    }
 
     # These keep track if have created full and short name pod entries for the
     # property
@@ -15548,6 +15874,9 @@ sub make_ucd_table_pod_entries {
             $info = $other_info;
         }
 
+        $combination_property{$standard} = 1
+                                  if $table->property->type == $FORCED_BINARY;
+
         # Here, we have set up the two columns for this entry.  But if an
         # entry already exists for this name, we have to decide which one
         # we're going to later output.
@@ -15614,9 +15943,9 @@ sub pod_alphanumeric_sort {
     # The first few character columns are filler, plus the '\p{'; and get rid
     # of all the trailing stuff, starting with the trailing '}', so as to sort
     # on just 'Name=Value'
-    (my $a = lc $a) =~ s/^ .*? { //x;
+    (my $a = lc $a) =~ s/^ .*? \{ //x;
     $a =~ s/}.*//;
-    (my $b = lc $b) =~ s/^ .*? { //x;
+    (my $b = lc $b) =~ s/^ .*? \{ //x;
     $b =~ s/}.*//;
 
     # Determine if the two operands are both internal only or both not.
@@ -15761,6 +16090,7 @@ END
     # The sort will cause the alphabetically first properties to be added to
     # each list first, so each list will be sorted.
     foreach my $property (sort keys %why_suppressed) {
+        next unless $why_suppressed{$property};
         push @{$why_list{$why_suppressed{$property}}}, $property;
     }
 
@@ -15823,13 +16153,12 @@ END
     }
 
     # Similiarly, generate a list of files that we don't use, grouped by the
-    # reasons why.  First, create a hash whose keys are the reasons, and whose
-    # values are anonymous arrays of all the files that share that reason.
+    # reasons why (Don't output if the reason is empty).  First, create a hash
+    # whose keys are the reasons, and whose values are anonymous arrays of all
+    # the files that share that reason.
     my %grouped_by_reason;
-    foreach my $file (keys %ignored_files) {
-        push @{$grouped_by_reason{$ignored_files{$file}}}, $file;
-    }
     foreach my $file (keys %skipped_files) {
+        next unless $skipped_files{$file};
         push @{$grouped_by_reason{$skipped_files{$file}}}, $file;
     }
 
@@ -16284,6 +16613,10 @@ sub make_Heavy () {
                            = simple_dumper(\%loose_property_name_of, ' ' x 4);
     chomp $loose_property_name_of;
 
+    my $strict_property_name_of
+                           = simple_dumper(\%strict_property_name_of, ' ' x 4);
+    chomp $strict_property_name_of;
+
     my $stricter_to_file_of = simple_dumper(\%stricter_to_file_of, ' ' x 4);
     chomp $stricter_to_file_of;
 
@@ -16322,6 +16655,10 @@ sub make_Heavy () {
                         = simple_dumper(\%loose_property_to_file_of, ' ' x 4);
     chomp $loose_property_to_file_of;
 
+    my $strict_property_to_file_of
+                        = simple_dumper(\%strict_property_to_file_of, ' ' x 4);
+    chomp $strict_property_to_file_of;
+
     my $file_to_swash_name = simple_dumper(\%file_to_swash_name, ' ' x 4);
     chomp $file_to_swash_name;
 
@@ -16337,6 +16674,11 @@ $INTERNAL_ONLY_HEADER
 $loose_property_name_of
 );
 
+# Same, but strict names
+\%utf8::strict_property_name_of = (
+$strict_property_name_of
+);
+
 # Gives the definitions (in the form of inversion lists) for those properties
 # whose definitions aren't kept in files
 \@utf8::inline_definitions = (
@@ -16385,6 +16727,11 @@ $caseless_equivalent_to
 $loose_property_to_file_of
 );
 
+# Property names to mapping files
+\%utf8::strict_property_to_file_of = (
+$strict_property_to_file_of
+);
+
 # Files to the swash names within them.
 \%utf8::file_to_swash_name = (
 $file_to_swash_name
@@ -16756,8 +17103,8 @@ sub make_UCD () {
     # an element for the Hangul syllables in the appropriate place, and
     # otherwise changes the name to include the "-<code point>" suffix.
     my @algorithm_names;
-    my $done_hangul = 0;
-
+    my $done_hangul = $v_version lt v2.0.0;  # Hanguls as we know them came
+                                             # along in this version
     # Copy it linearly.
     for my $i (0 .. @code_points_ending_in_code_point - 1) {
 
@@ -16808,6 +17155,9 @@ sub make_UCD () {
     my $ambiguous_names = simple_dumper(\%ambiguous_names, ' ' x 4);
     chomp $ambiguous_names;
 
+    my $combination_property = simple_dumper(\%combination_property, ' ' x 4);
+    chomp $combination_property;
+
     my $loose_defaults = simple_dumper(\%loose_defaults, ' ' x 4);
     chomp $loose_defaults;
 
@@ -16872,6 +17222,13 @@ $ambiguous_names
 $loose_defaults
 );
 
+# The properties that are combinations, in that they have both a map table and
+# a match table.  This is actually for UCD.t, so it knows how to test for
+# these.
+\%Unicode::UCD::combination_property = (
+$combination_property
+);
+
 # All combinations of names that are suppressed.
 # This is actually for UCD.t, so it knows which properties shouldn't have
 # entries.  If it got any bigger, would probably want to put it in its own
@@ -16972,14 +17329,8 @@ sub write_all_tables() {
             # with it or not.
             my $expected_empty =
 
-                # $perl should be empty, as well as properties that we just
-                # don't do anything with
-                ($is_property
-                    && ($table == $perl
-                        || grep { $complete_name eq $_ }
-                                                    @unimplemented_properties
-                    )
-                )
+                # $perl should be empty
+                ($is_property && ($table == $perl))
 
                 # Match tables in properties we skipped populating should be
                 # empty
@@ -17045,7 +17396,7 @@ sub write_all_tables() {
                 : ($is_property)
                   ? # All these types of map tables will be full because
                     # they will have been populated with defaults
-                    ($type == $ENUM || $type == $FORCED_BINARY)
+                    ($type == $ENUM)
 
                   : # A match table should match everything if its method
                     # shows it should
@@ -17206,12 +17557,14 @@ sub write_all_tables() {
                         }
                     }
                     else {
-                        if (exists ($loose_property_name_of{$alias_standard}))
-                        {
-                            Carp::my_carp("There already is a property with the same standard name as $alias_name: $loose_property_name_of{$alias_standard}.  Old name is retained");
+                        my $hash_ref = ($alias_standard =~ /^_/)
+                                       ? \%strict_property_name_of
+                                       : \%loose_property_name_of;
+                        if (exists $hash_ref->{$alias_standard}) {
+                            Carp::my_carp("There already is a property with the same standard name as $alias_name: $hash_ref->{$alias_standard}.  Old name is retained");
                         }
                         else {
-                            $loose_property_name_of{$alias_standard}
+                            $hash_ref->{$alias_standard}
                                                 = $standard_property_name;
                         }
 
@@ -17462,7 +17815,7 @@ sub generate_tests($$$$$) {
     my @output;
     # Create a complete set of tests, with complements.
     if (defined $valid_code) {
-       push @output, <<"EOC"
+        push @output, <<"EOC"
 Expect(1, $valid_code, '\\p{$name}', $warning);
 Expect(0, $valid_code, '\\p{^$name}', $warning);
 Expect(0, $valid_code, '\\P{$name}', $warning);
@@ -17470,7 +17823,7 @@ Expect(1, $valid_code, '\\P{^$name}', $warning);
 EOC
     }
     if (defined $invalid_code) {
-       push @output, <<"EOC"
+        push @output, <<"EOC"
 Expect(0, $invalid_code, '\\p{$name}', $warning);
 Expect(1, $invalid_code, '\\p{^$name}', $warning);
 Expect(1, $invalid_code, '\\P{$name}', $warning);
@@ -17708,8 +18061,10 @@ sub make_property_test_script() {
             # Test each possible combination of the property's aliases with
             # the table's.  If this gets to be too many, could do what is done
             # in the set_final_comment() for Tables
-            my @table_aliases = $table->aliases;
-            my @property_aliases = $table->property->aliases;
+            my @table_aliases = grep { $_->status ne $INTERNAL_ALIAS } $table->aliases;
+            next unless @table_aliases;
+            my @property_aliases = grep { $_->status ne $INTERNAL_ALIAS } $table->property->aliases;
+            next unless @property_aliases;
 
             # Every property can be optionally be prefixed by 'Is_', so test
             # that those work, by creating such a new alias for each
@@ -17941,84 +18296,97 @@ END
     return;
 }
 
+# Skip reasons, so will be exact same text and hence the files with each
+# reason will get grouped together in perluniprops.
+my $Documentation = "Documentation";
+my $Indic_Skip
+            = "Provisional; for the analysis and processing of Indic scripts";
+my $Validation = "Validation Tests";
+my $Validation_Documentation = "Documentation of validation Tests";
+
 # This is a list of the input files and how to handle them.  The files are
 # processed in their order in this list.  Some reordering is possible if
-# desired, but the v0 files should be first, and the extracted before the
-# others except DAge.txt (as data in an extracted file can be over-ridden by
-# the non-extracted.  Some other files depend on data derived from an earlier
-# file, like UnicodeData requires data from Jamo, and the case changing and
-# folding requires data from Unicode.  Mostly, it is safest to order by first
-# version releases in (except the Jamo).  DAge.txt is read before the
-# extracted ones because of the rarely used feature $compare_versions.  In the
-# unlikely event that there were ever an extracted file that contained the Age
-# property information, it would have to go in front of DAge.
+# desired, but the PropertyAliases and PropValueAliases files should be first,
+# and the extracted before the others except DAge.txt (as data in an extracted
+# file can be over-ridden by the non-extracted.  Some other files depend on
+# data derived from an earlier file, like UnicodeData requires data from Jamo,
+# and the case changing and folding requires data from Unicode.  Mostly, it is
+# safest to order by first version releases in (except the Jamo).  DAge.txt is
+# read before the extracted ones because of the rarely used feature
+# $compare_versions.  In the unlikely event that there were ever an extracted
+# file that contained the Age property information, it would have to go in
+# front of DAge.
 #
 # The version strings allow the program to know whether to expect a file or
 # not, but if a file exists in the directory, it will be processed, even if it
 # is in a version earlier than expected, so you can copy files from a later
 # release into an earlier release's directory.
 my @input_file_objects = (
-    Input_file->new('PropertyAliases.txt', v0,
+    Input_file->new('PropertyAliases.txt', v3.2,
                     Handler => \&process_PropertyAliases,
-                    ),
+                    Early => [ \&substitute_PropertyAliases ],
+                    Required_Even_in_Debug_Skip => 1,
+                   ),
     Input_file->new(undef, v0,  # No file associated with this
                     Progress_Message => 'Finishing property setup',
                     Handler => \&finish_property_setup,
-                    ),
-    Input_file->new('PropValueAliases.txt', v0,
+                   ),
+    Input_file->new('PropValueAliases.txt', v3.2,
                      Handler => \&process_PropValueAliases,
+                     Early => [ \&substitute_PropValueAliases ],
                      Has_Missings_Defaults => $NOT_IGNORED,
-                     ),
+                     Required_Even_in_Debug_Skip => 1,
+                    ),
     Input_file->new('DAge.txt', v3.2.0,
                     Has_Missings_Defaults => $NOT_IGNORED,
                     Property => 'Age'
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DGeneralCategory.txt", v3.1.0,
                     Property => 'General_Category',
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DCombiningClass.txt", v3.1.0,
                     Property => 'Canonical_Combining_Class',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DNumType.txt", v3.1.0,
                     Property => 'Numeric_Type',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DEastAsianWidth.txt", v3.1.0,
                     Property => 'East_Asian_Width',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DLineBreak.txt", v3.1.0,
                     Property => 'Line_Break',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DBidiClass.txt", v3.1.1,
                     Property => 'Bidi_Class',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DDecompositionType.txt", v3.1.0,
                     Property => 'Decomposition_Type',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DBinaryProperties.txt", v3.1.0),
     Input_file->new("${EXTRACTED}DNumValues.txt", v3.1.0,
                     Property => 'Numeric_Value',
                     Each_Line_Handler => \&filter_numeric_value_line,
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new("${EXTRACTED}DJoinGroup.txt", v3.1.0,
                     Property => 'Joining_Group',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
 
     Input_file->new("${EXTRACTED}DJoinType.txt", v3.1.0,
                     Property => 'Joining_Type',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new('Jamo.txt', v2.0.0,
                     Property => 'Jamo_Short_Name',
                     Each_Line_Handler => \&filter_jamo_line,
-                    ),
+                   ),
     Input_file->new('UnicodeData.txt', v1.1.5,
                     Pre_Handler => \&setup_UnicodeData,
 
@@ -18053,7 +18421,12 @@ my @input_file_objects = (
                                             \&filter_UnicodeData_line,
                                          ],
                     EOF_Handler => \&EOF_UnicodeData,
-                    ),
+                   ),
+    Input_file->new('CJKXREF.TXT', v1.1.5,
+                    Withdrawn => v2.0.0,
+                    Skip => 'Gives the mapping of CJK code points '
+                          . 'between Unicode and various other standards',
+                   ),
     Input_file->new('ArabicShaping.txt', v2.0.0,
                     Each_Line_Handler =>
                         ($v_version lt 4.1.0)
@@ -18063,29 +18436,46 @@ my @input_file_objects = (
                     # not used by Perl
                     Properties => [ '<ignored>', 'Joining_Type', 'Joining_Group' ],
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new('Blocks.txt', v2.0.0,
                     Property => 'Block',
                     Has_Missings_Defaults => $NOT_IGNORED,
                     Each_Line_Handler => \&filter_blocks_lines
-                    ),
+                   ),
+    Input_file->new('Index.txt', v2.0.0,
+                    Skip => 'Alphabetical index of Unicode characters',
+                   ),
+    Input_file->new('NamesList.txt', v2.0.0,
+                    Skip => 'Annotated list of characters',
+                   ),
     Input_file->new('PropList.txt', v2.0.0,
                     Each_Line_Handler => (($v_version lt v3.1.0)
                                             ? \&filter_old_style_proplist
                                             : undef),
-                    ),
+                   ),
+    Input_file->new('Props.txt', v2.0.0,
+                    Withdrawn => v3.0.0,
+                    Skip => 'A subset of F<PropList.txt> (which is used instead)',
+                   ),
+    Input_file->new('ReadMe.txt', v2.0.0,
+                    Skip => $Documentation,
+                   ),
     Input_file->new('Unihan.txt', v2.0.0,
+                    Withdrawn => v5.2.0,
+                    Construction_Time_Handler => \&construct_unihan,
                     Pre_Handler => \&setup_unihan,
-                    Optional => 1,
+                    Optional => [ "",
+                                  'Unicode_Radical_Stroke'
+                                ],
                     Each_Line_Handler => \&filter_unihan_line,
-                        ),
+                   ),
     Input_file->new('SpecialCasing.txt', v2.1.8,
                     Each_Line_Handler => ($v_version eq 2.1.8)
                                          ? \&filter_2_1_8_special_casing_line
                                          : \&filter_special_casing_line,
                     Pre_Handler => \&setup_special_casing,
                     Has_Missings_Defaults => $IGNORED,
-                    ),
+                   ),
     Input_file->new(
                     'LineBreak.txt', v3.0.0,
                     Has_Missings_Defaults => $NOT_IGNORED,
@@ -18094,7 +18484,7 @@ my @input_file_objects = (
                     Each_Line_Handler => (($v_version lt v3.1.0)
                                         ? \&filter_early_ea_lb
                                         : undef),
-                    ),
+                   ),
     Input_file->new('EastAsianWidth.txt', v3.0.0,
                     Property => 'East_Asian_Width',
                     Has_Missings_Defaults => $NOT_IGNORED,
@@ -18102,10 +18492,14 @@ my @input_file_objects = (
                     Each_Line_Handler => (($v_version lt v3.1.0)
                                         ? \&filter_early_ea_lb
                                         : undef),
-                    ),
+                   ),
     Input_file->new('CompositionExclusions.txt', v3.0.0,
                     Property => 'Composition_Exclusion',
-                    ),
+                   ),
+    Input_file->new('UnicodeData.html', v3.0.0,
+                    Withdrawn => v4.0.1,
+                    Skip => $Documentation,
+                   ),
     Input_file->new('BidiMirroring.txt', v3.0.1,
                     Property => 'Bidi_Mirroring_Glyph',
                     Has_Missings_Defaults => ($v_version lt v6.2.0)
@@ -18114,12 +18508,15 @@ my @input_file_objects = (
                                               # anything to us, we will use the
                                               # null string
                                               : $IGNORED,
-
-                    ),
-    Input_file->new("NormTest.txt", v3.0.0,
-                     Handler => \&process_NormalizationsTest,
-                     Skip => ($make_norm_test_script) ? 0 : 'Validation Tests',
-                    ),
+                   ),
+    Input_file->new('NamesList.html', v3.0.0,
+                    Skip => 'Describes the format and contents of '
+                          . 'F<NamesList.txt>',
+                   ),
+    Input_file->new('UnicodeCharacterDatabase.html', v3.0.0,
+                    Withdrawn => v5.1,
+                    Skip => $Documentation,
+                   ),
     Input_file->new('CaseFolding.txt', v3.0.1,
                     Pre_Handler => \&setup_case_folding,
                     Each_Line_Handler =>
@@ -18129,105 +18526,222 @@ my @input_file_objects = (
                            \&filter_case_folding_line
                         ],
                     Has_Missings_Defaults => $IGNORED,
-                    ),
+                   ),
+    Input_file->new("NormTest.txt", v3.0.1,
+                     Handler => \&process_NormalizationsTest,
+                     Skip => ($make_norm_test_script) ? 0 : $Validation,
+                   ),
     Input_file->new('DCoreProperties.txt', v3.1.0,
                     # 5.2 changed this file
                     Has_Missings_Defaults => (($v_version ge v5.2.0)
                                             ? $NOT_IGNORED
                                             : $NO_DEFAULTS),
-                    ),
+                   ),
+    Input_file->new('DProperties.html', v3.1.0,
+                    Withdrawn => v3.2.0,
+                    Skip => $Documentation,
+                   ),
+    Input_file->new('PropList.html', v3.1.0,
+                    Withdrawn => v5.1,
+                    Skip => $Documentation,
+                   ),
     Input_file->new('Scripts.txt', v3.1.0,
                     Property => 'Script',
+                    Each_Line_Handler => (($v_version le v4.0.0)
+                                          ? \&filter_all_caps_script_names
+                                          : undef),
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new('DNormalizationProps.txt', v3.1.0,
                     Has_Missings_Defaults => $NOT_IGNORED,
                     Each_Line_Handler => (($v_version lt v4.0.1)
                                       ? \&filter_old_style_normalization_lines
                                       : undef),
-                    ),
-    Input_file->new('HangulSyllableType.txt', v0,
+                   ),
+    Input_file->new('DerivedProperties.html', v3.1.1,
+                    Withdrawn => v5.1,
+                    Skip => $Documentation,
+                   ),
+    Input_file->new('HangulSyllableType.txt', v4.0,
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    Property => 'Hangul_Syllable_Type',
-                    Pre_Handler => ($v_version lt v4.0.0)
-                                   ? \&generate_hst
-                                   : undef,
-                    ),
+                    Early => [ \&generate_hst, 'Hangul_Syllable_Type' ],
+                    Property => 'Hangul_Syllable_Type'
+                   ),
+    Input_file->new('NormalizationCorrections.txt', v3.2.0,
+                     # This documents the cumulative fixes to erroneous
+                     # normalizations in earlier Unicode versions.  Its main
+                     # purpose is so that someone running on an earlier
+                     # version can use this file to override what got
+                     # published in that earlier release.  It would be easy
+                     # for mktables to handle this file.  But all the
+                     # corrections in it should already be in the other files
+                     # for the release it is.  To get it to actually mean
+                     # something useful, someone would have to be using an
+                     # earlier Unicode release, and copy it into the directory
+                     # for that release and recomplile.  So far there has been
+                     # no demand to do that, so this hasn't been implemented.
+                    Skip => 'Documentation of corrections already '
+                          . 'incorporated into the Unicode data base',
+                   ),
+    Input_file->new('StandardizedVariants.html', v3.2.0,
+                    Skip => 'Provides a visual display of the standard '
+                          . 'variant sequences derived from '
+                          . 'F<StandardizedVariants.txt>.',
+                        # I don't know why the html came earlier than the
+                        # .txt, but both are skipped anyway, so it doesn't
+                        # matter.
+                   ),
+    Input_file->new('StandardizedVariants.txt', v4.0.0,
+                    Skip => 'Certain glyph variations for character display '
+                          . 'are standardized.  This lists the non-Unihan '
+                          . 'ones; the Unihan ones are also not used by '
+                          . 'Perl, and are in a separate Unicode data base '
+                          . 'L<http://www.unicode.org/ivd>',
+                   ),
+    Input_file->new('UCD.html', v4.0.0,
+                    Withdrawn => v5.2,
+                    Skip => $Documentation,
+                   ),
     Input_file->new("$AUXILIARY/WordBreakProperty.txt", v4.1.0,
+                    Early => [ "WBsubst.txt", '_Perl_WB', 'ALetter' ],
                     Property => 'Word_Break',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
-    Input_file->new("$AUXILIARY/GraphemeBreakProperty.txt", v0,
+                   ),
+    Input_file->new("$AUXILIARY/GraphemeBreakProperty.txt", v4.1,
+                    Early => [ \&generate_GCB, '_Perl_GCB' ],
                     Property => 'Grapheme_Cluster_Break',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    Pre_Handler => ($v_version lt v4.1.0)
-                                   ? \&generate_GCB
-                                   : undef,
-                    ),
+                   ),
     Input_file->new("$AUXILIARY/GCBTest.txt", v4.1.0,
                     Handler => \&process_GCB_test,
-                    ),
-    Input_file->new("$AUXILIARY/LBTest.txt", v4.1.0,
-                    Skip => 'Validation Tests',
-                    ),
+                   ),
+    Input_file->new("$AUXILIARY/GraphemeBreakTest.html", v4.1.0,
+                    Skip => $Validation_Documentation,
+                   ),
     Input_file->new("$AUXILIARY/SBTest.txt", v4.1.0,
                     Handler => \&process_SB_test,
-                    ),
+                   ),
+    Input_file->new("$AUXILIARY/SentenceBreakTest.html", v4.1.0,
+                    Skip => $Validation_Documentation,
+                   ),
     Input_file->new("$AUXILIARY/WBTest.txt", v4.1.0,
                     Handler => \&process_WB_test,
-                    ),
+                   ),
+    Input_file->new("$AUXILIARY/WordBreakTest.html", v4.1.0,
+                    Skip => $Validation_Documentation,
+                   ),
     Input_file->new("$AUXILIARY/SentenceBreakProperty.txt", v4.1.0,
                     Property => 'Sentence_Break',
+                    Early => [ "SBsubst.txt", '_Perl_SB', 'OLetter' ],
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
     Input_file->new('NamedSequences.txt', v4.1.0,
                     Handler => \&process_NamedSequences
-                    ),
-    Input_file->new('NameAliases.txt', v0,
+                   ),
+    Input_file->new('Unihan.html', v4.1.0,
+                    Withdrawn => v5.2,
+                    Skip => $Documentation,
+                   ),
+    Input_file->new('NameAliases.txt', v5.0,
                     Property => 'Name_Alias',
-                    Pre_Handler => ($v_version le v6.0.0)
-                                   ? \&setup_early_name_alias
-                                   : undef,
                     Each_Line_Handler => ($v_version le v6.0.0)
                                    ? \&filter_early_version_name_alias_line
                                    : \&filter_later_version_name_alias_line,
-                    ),
+                   ),
+        # NameAliases.txt came along in v5.0.  The above constructor handles
+        # this.  But until 6.1, it was lacking some information needed by core
+        # perl.  The constructor below handles that.  It is either a kludge or
+        # clever, depending on your point of view.  The 'Withdrawn' parameter
+        # indicates not to use it at all starting in 6.1 (so the above
+        # constructor applies), and the 'v6.1' parameter indicates to use the
+        # Early parameter before 6.1.  Therefore 'Early" is always used,
+        # yielding the internal-only property '_Perl_Name_Alias', which it
+        # gets from a NameAliases.txt from 6.1 or later stored in
+        # N_Asubst.txt.  In combination with the above constructor,
+        # 'Name_Alias' is publicly accessible starting with v5.0, and the
+        # better 6.1 version is accessible to perl core in all releases.
+    Input_file->new("NameAliases.txt", v6.1,
+                    Withdrawn => v6.1,
+                    Early => [ "N_Asubst.txt", '_Perl_Name_Alias', "" ],
+                    Property => 'Name_Alias',
+                    EOF_Handler => \&fixup_early_perl_name_alias,
+                    Each_Line_Handler =>
+                                       \&filter_later_version_name_alias_line,
+                   ),
+    Input_file->new('NamedSqProv.txt', v5.0.0,
+                    Skip => 'Named sequences proposed for inclusion in a '
+                          . 'later version of the Unicode Standard; if you '
+                          . 'need them now, you can append this file to '
+                          . 'F<NamedSequences.txt> and recompile perl',
+                   ),
+    Input_file->new("$AUXILIARY/LBTest.txt", v5.1.0,
+                    Skip => $Validation,
+                   ),
+    Input_file->new("$AUXILIARY/LineBreakTest.html", v5.1.0,
+                    Skip => $Validation_Documentation,
+                   ),
     Input_file->new("BidiTest.txt", v5.2.0,
-                    Skip => 'Validation Tests',
-                    ),
+                    Skip => $Validation,
+                   ),
     Input_file->new('UnihanIndicesDictionary.txt', v5.2.0,
-                    Optional => 1,
+                    Optional => "",
                     Each_Line_Handler => \&filter_unihan_line,
-                    ),
+                   ),
     Input_file->new('UnihanDataDictionaryLike.txt', v5.2.0,
-                    Optional => 1,
+                    Optional => "",
                     Each_Line_Handler => \&filter_unihan_line,
-                    ),
+                   ),
     Input_file->new('UnihanIRGSources.txt', v5.2.0,
-                    Optional => 1,
+                    Optional => [ "",
+                                  'kCompatibilityVariant',
+                                  'kIICore',
+                                  'kIRG_GSource',
+                                  'kIRG_HSource',
+                                  'kIRG_JSource',
+                                  'kIRG_KPSource',
+                                  'kIRG_MSource',
+                                  'kIRG_KSource',
+                                  'kIRG_TSource',
+                                  'kIRG_USource',
+                                  'kIRG_VSource',
+                               ],
                     Pre_Handler => \&setup_unihan,
                     Each_Line_Handler => \&filter_unihan_line,
-                    ),
+                   ),
     Input_file->new('UnihanNumericValues.txt', v5.2.0,
-                    Optional => 1,
+                    Optional => [ "",
+                                  'kAccountingNumeric',
+                                  'kOtherNumeric',
+                                  'kPrimaryNumeric',
+                                ],
                     Each_Line_Handler => \&filter_unihan_line,
-                    ),
+                   ),
     Input_file->new('UnihanOtherMappings.txt', v5.2.0,
-                    Optional => 1,
+                    Optional => "",
                     Each_Line_Handler => \&filter_unihan_line,
-                    ),
+                   ),
     Input_file->new('UnihanRadicalStrokeCounts.txt', v5.2.0,
-                    Optional => 1,
+                    Optional => [ "",
+                                  'Unicode_Radical_Stroke'
+                                ],
                     Each_Line_Handler => \&filter_unihan_line,
-                    ),
+                   ),
     Input_file->new('UnihanReadings.txt', v5.2.0,
-                    Optional => 1,
+                    Optional => "",
                     Each_Line_Handler => \&filter_unihan_line,
-                    ),
+                   ),
     Input_file->new('UnihanVariants.txt', v5.2.0,
-                    Optional => 1,
+                    Optional => "",
                     Each_Line_Handler => \&filter_unihan_line,
-                    ),
+                   ),
+    Input_file->new('CJKRadicals.txt', v5.2.0,
+                    Skip => 'Maps the kRSUnicode property values to '
+                          . 'corresponding code points',
+                   ),
+    Input_file->new('EmojiSources.txt', v6.0.0,
+                    Skip => 'Maps certain Unicode code points to their '
+                          . 'legacy Japanese cell-phone values',
+                   ),
     Input_file->new('ScriptExtensions.txt', v6.0.0,
                     Property => 'Script_Extensions',
                     Pre_Handler => \&setup_script_extensions,
@@ -18235,39 +18749,74 @@ my @input_file_objects = (
                     Has_Missings_Defaults => (($v_version le v6.0.0)
                                             ? $NO_DEFAULTS
                                             : $IGNORED),
-                    ),
-    # The two Indic files are actually available starting in v6.0.0, but their
-    # property values are missing from PropValueAliases.txt in that release,
-    # so that further work would have to be done to get them to work properly
-    # for that release.
-    Input_file->new('IndicMatraCategory.txt', v6.1.0,
+                   ),
+    # These two Indic files are actually not usable as-is until 6.1.0,
+    # because their property values are missing from PropValueAliases.txt
+    # until that release, so that further work would have to be done to get
+    # them to work properly, which isn't worth it because of them being
+    # provisional.
+    Input_file->new('IndicMatraCategory.txt', v6.0.0,
+                    Withdrawn => v8.0.0,
                     Property => 'Indic_Matra_Category',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    Skip => "Withdrawn by Unicode while still provisional",
-                    ),
-    Input_file->new('IndicSyllabicCategory.txt', v6.1.0,
+                    Skip => $Indic_Skip,
+                   ),
+    Input_file->new('IndicSyllabicCategory.txt', v6.0.0,
                     Property => 'Indic_Syllabic_Category',
                     Has_Missings_Defaults => $NOT_IGNORED,
                     Skip => (($v_version lt v8.0.0)
-                              ? "Provisional; for the analysis and processing of Indic scripts"
+                              ? $Indic_Skip
                               : 0),
-                    ),
+                   ),
+    Input_file->new('USourceData.txt', v6.2.0,
+                    Skip => 'Documentation of status and cross reference of '
+                          . 'proposals for encoding by Unicode of Unihan '
+                          . 'characters',
+                   ),
+    Input_file->new('USourceGlyphs.pdf', v6.2.0,
+                    Skip => 'Pictures of the characters in F<USourceData.txt>',
+                   ),
     Input_file->new('BidiBrackets.txt', v6.3.0,
-                    Properties => [ 'Bidi_Paired_Bracket', 'Bidi_Paired_Bracket_Type' ],
+                    Properties => [ 'Bidi_Paired_Bracket',
+                                    'Bidi_Paired_Bracket_Type'
+                                  ],
                     Has_Missings_Defaults => $NO_DEFAULTS,
-                    ),
+                   ),
     Input_file->new("BidiCharacterTest.txt", v6.3.0,
-                    Skip => 'Validation Tests',
-                    ),
+                    Skip => $Validation,
+                   ),
     Input_file->new('IndicPositionalCategory.txt', v8.0.0,
                     Property => 'Indic_Positional_Category',
                     Has_Missings_Defaults => $NOT_IGNORED,
-                    ),
+                   ),
 );
 
 # End of all the preliminaries.
 # Do it...
 
+if (@missing_early_files) {
+    print simple_fold(join_lines(<<END
+
+The compilation cannot be completed because one or more required input files,
+listed below, are missing.  This is because you are compiling Unicode version
+$string_version, which predates the existence of these file(s).  To fully
+function, perl needs the data that these files would have contained if they
+had been in this release.  To work around this, create copies of later
+versions of the missing files in the directory containing '$0'.  (Perl will
+make the necessary adjustments to the data to compensate for it not being the
+same version as is being compiled.)  The files are available from unicode.org,
+via either ftp or http.  If using http, they will be under
+www.unicode.org/versions/.  Below are listed the source file name of each
+missing file, the Unicode version to copy it from, and the name to store it
+as.  (Note that the listed source file name may not be exactly the one that
+Unicode calls it.  If you don't find it, you can look it up in 'README.perl'
+to get the correct name.)
+END
+    ));
+    print simple_fold(join_lines("\n$_")) for @missing_early_files;
+    exit 2;
+}
+
 if ($compare_versions) {
     Carp::my_carp(<<END
 Warning.  \$compare_versions is set.  Output is not suitable for production
@@ -18276,17 +18825,13 @@ END
 }
 
 # Put into %potential_files a list of all the files in the directory structure
-# that could be inputs to this program, excluding those that we should ignore.
-# Use absolute file names because it makes it easier across machine types.
-my @ignored_files_full_names = map { File::Spec->rel2abs(
-                                     internal_file_to_platform($_))
-                                } keys %ignored_files;
+# that could be inputs to this program
 File::Find::find({
     wanted=>sub {
-        return unless /\.txt$/i;  # Some platforms change the name's case
+        return unless / \. ( txt | htm l? ) $ /xi;  # Some platforms change the
+                                                    # name's case
         my $full = lc(File::Spec->rel2abs($_));
-        $potential_files{$full} = 1
-                    if ! grep { $full eq lc($_) } @ignored_files_full_names;
+        $potential_files{$full} = 1;
         return;
     }
 }, File::Spec->curdir());
@@ -18344,8 +18889,7 @@ else {
             # The paths are stored with relative names, and with '/' as the
             # delimiter; convert to absolute on this machine
             my $full = lc(File::Spec->rel2abs(internal_file_to_platform($input)));
-            $potential_files{lc $full} = 1
-                if ! grep { lc($full) eq lc($_) } @ignored_files_full_names;
+            $potential_files{lc $full} = 1;
         }
     }
 
@@ -18422,7 +18966,7 @@ my @input_files = qw(version Makefile);
 foreach my $object (@input_file_objects) {
     my $file = $object->file;
     next if ! defined $file;    # Not all objects have files
-    next if $object->optional && ! -e $file;
+    next if defined $object->skip;;
     push @input_files,  $file;
 }
 
@@ -18444,7 +18988,6 @@ foreach my $in (@input_files) {
         my ($volume, $directories, $file ) = File::Spec->splitpath($in);
         $directories =~ s;/$;;;     # Can have extraneous trailing '/'
         my @directories = File::Spec->splitdir($directories);
-        my $base = $file =~ s/\.txt$//;
         construct_filename($file, 'mutable', \@directories);
     }
 }
@@ -18593,6 +19136,16 @@ use warnings;
 my $Tests = 0;
 my $Fails = 0;
 
+# loc_tools.pl requires this function to be defined
+sub ok($@) {
+    my ($pass, @msg) = @_;
+    print "not " unless $pass;
+    print "ok ";
+    print ++$Tests;
+    print " - ", join "", @msg if @msg;
+    print "\n";
+}
+
 sub Expect($$$$) {
     my $expected = shift;
     my $ord = shift;
index 1ba73b2..51137b5 100644 (file)
@@ -404,7 +404,11 @@ sub _loose_name ($) {
                 # If didn't find it, try again with looser matching by editing
                 # out the applicable characters on the rhs and looking up
                 # again.
+                my $strict_property_and_table;
                 if (! defined $file) {
+
+                    # This isn't used unless the name begins with 'to'
+                    $strict_property_and_table = $property_and_table =~  s/^to//r;
                     $table = _loose_name($table);
                     $property_and_table = "$prefix$table";
                     print STDERR __LINE__, ": $property_and_table\n" if DEBUG;
@@ -443,61 +447,51 @@ sub _loose_name ($) {
                 ## is to use Unicode::UCD.
                 ##
                 # Only check if caller wants non-binary
-                my $retried = 0;
-                if ($minbits != 1 && $property_and_table =~ s/^to//) {{
+                if ($minbits != 1) {
+                    if ($property_and_table =~ s/^to//) {
                     # Look input up in list of properties for which we have
-                    # mapping files.
-                    if (defined ($file =
+                    # mapping files.  First do it with the strict approach
+                        if (defined ($file = $utf8::strict_property_to_file_of{
+                                                    $strict_property_and_table}))
+                        {
+                            $type = $utf8::file_to_swash_name{$file};
+                            print STDERR __LINE__, ": type set to $type\n"
+                                                                        if DEBUG;
+                            $file = "$unicore_dir/$file.pl";
+                            last GETFILE;
+                        }
+                        elsif (defined ($file =
                           $utf8::loose_property_to_file_of{$property_and_table}))
-                    {
-                        $type = $utf8::file_to_swash_name{$file};
-                        print STDERR __LINE__, ": type set to $type\n" if DEBUG;
-                        $file = "$unicore_dir/$file.pl";
-                        last GETFILE;
-                    }   # If that fails see if there is a corresponding binary
-                        # property file
-                    elsif (defined ($file =
-                                   $utf8::loose_to_file_of{$property_and_table}))
-                    {
+                        {
+                            $type = $utf8::file_to_swash_name{$file};
+                            print STDERR __LINE__, ": type set to $type\n"
+                                                                        if DEBUG;
+                            $file = "$unicore_dir/$file.pl";
+                            last GETFILE;
+                        }   # If that fails see if there is a corresponding binary
+                            # property file
+                        elsif (defined ($file =
+                                    $utf8::loose_to_file_of{$property_and_table}))
+                        {
 
-                        # Here, there is no map file for the property we are
-                        # trying to get the map of, but this is a binary
-                        # property, and there is a file for it that can easily
-                        # be translated to a mapping.
-
-                        # In the case of properties that are forced to binary,
-                        # they are a combination.  We return the actual
-                        # mapping instead of the binary.  If the input is
-                        # something like 'Tocjkkiicore', it will be found in
-                        # %loose_property_to_file_of above as => 'To/kIICore'.
-                        # But the form like ToIskiicore won't be.  To fix
-                        # this, it was easiest to do it here.  These
-                        # properties are the complements of the default
-                        # property, so there is an entry in %loose_to_file_of
-                        # that is 'iskiicore' => '!kIICore/N', If we find such
-                        # an entry, strip off things and try again, which
-                        # should find the entry in %loose_property_to_file_of.
-                        # Actual binary properties that are of this form, such
-                        # as this entry: 'ishrkt' => '!Perl/Any' will also be
-                        # retried, but won't be in %loose_property_to_file_of,
-                        # and instead the next time through, it will find
-                        # 'hrkt' => '!Perl/Any' and proceed.
-                        redo if ! $retried
-                                && $file =~ /^!/
-                                && $property_and_table =~ s/^is//;
-
-                        # This is a binary property.  Setting this here causes
-                        # it to be stored as such in the cache, so if someone
-                        # comes along later looking for just a binary, they
-                        # get it.
-                        $minbits = 1;
-
-                        # The 0+ makes sure is numeric
-                        $invert_it = 0 + $file =~ s/!//;
-                        $file = "$unicore_dir/lib/$file.pl" unless $file =~ m!^#/!;
-                        last GETFILE;
+                            # Here, there is no map file for the property we
+                            # are trying to get the map of, but this is a
+                            # binary property, and there is a file for it that
+                            # can easily be translated to a mapping, so use
+                            # that, treating this as a binary property.
+                            # Setting 'minbits' here causes it to be stored as
+                            # such in the cache, so if someone comes along
+                            # later looking for just a binary, they get it.
+                            $minbits = 1;
+
+                            # The 0+ makes sure is numeric
+                            $invert_it = 0 + $file =~ s/!//;
+                            $file = "$unicore_dir/lib/$file.pl"
+                                                         unless $file =~ m!^#/!;
+                            last GETFILE;
+                        }
                     }
-                } }
+                }
 
                 ##
                 ## If we reach this line, it's because we couldn't figure
index a36e8dc..9b0979d 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -707,7 +707,6 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
     }
     if (!setlocale_failure) {
 #       ifdef USE_LOCALE_CTYPE
-       Safefree(curctype);
        if (! (curctype =
               my_setlocale(LC_CTYPE,
                         (!done && (lang || PerlEnv_getenv("LC_CTYPE")))
@@ -717,7 +716,6 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
            curctype = savepv(curctype);
 #       endif /* USE_LOCALE_CTYPE */
 #       ifdef USE_LOCALE_COLLATE
-       Safefree(curcoll);
        if (! (curcoll =
               my_setlocale(LC_COLLATE,
                         (!done && (lang || PerlEnv_getenv("LC_COLLATE")))
@@ -727,7 +725,6 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
            curcoll = savepv(curcoll);
 #       endif /* USE_LOCALE_COLLATE */
 #       ifdef USE_LOCALE_NUMERIC
-       Safefree(curnum);
        if (! (curnum =
               my_setlocale(LC_NUMERIC,
                         (!done && (lang || PerlEnv_getenv("LC_NUMERIC")))
index 999655c..1fee334 100644 (file)
@@ -657,33 +657,13 @@ if ($ARGS{PLATFORM} eq 'netware') {
     push(@layer_syms,'PL_def_layerlist','PL_known_layers','PL_perlio');
 }
 
-if ($define{'USE_PERLIO'}) {
-    # Export the symbols that make up the PerlIO abstraction, regardless
-    # of its implementation - read from a file
-    push @syms, 'perlio.sym';
+# Export the symbols that make up the PerlIO abstraction, regardless
+# of its implementation - read from a file
+push @syms, 'perlio.sym';
 
-    # PerlIO with layers - export implementation
-    try_symbols(@layer_syms, 'perlsio_binmode');
-} else {
-       # -Uuseperlio
-       # Skip the PerlIO layer symbols - although
-       # nothing should have exported them anyway.
-       ++$skip{$_} foreach @layer_syms;
-       ++$skip{$_} foreach qw(
-                       perlsio_binmode
-                       PL_def_layerlist
-                       PL_known_layers
-                       PL_perlio
-                       PL_perlio_debug_fd
-                       PL_perlio_fd_refcnt
-                       PL_perlio_fd_refcnt_size
-                       PL_perlio_mutex
-                            );
+# PerlIO with layers - export implementation
+try_symbols(@layer_syms, 'perlsio_binmode');
 
-       # Also do NOT add abstraction symbols from $perlio_sym
-       # abstraction is done as #define to stdio
-       # Remaining remnants that _may_ be functions are handled below.
-}
 
 unless ($define{'USE_QUADMATH'}) {
   ++$skip{Perl_quadmath_format_needed};
index 05810b5..69b6b95 100644 (file)
--- a/malloc.c
+++ b/malloc.c
 #     define PERL_MAYBE_ALIVE  1
 #endif
 
+#ifndef MYMALLOC
+#  error "MYMALLOC is not defined"
+#endif
+
 #ifndef MUTEX_LOCK
 #  define MUTEX_LOCK(l)
 #endif 
index d659883..7da0068 100644 (file)
--- a/mathoms.c
+++ b/mathoms.c
@@ -1795,7 +1795,7 @@ Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
 /*
 =for apidoc Am|HV *|pad_compname_type|PADOFFSET po
 
-Looks up the type of the lexical variable at position I<po> in the
+Looks up the type of the lexical variable at position C<po> in the
 currently-compiling pad.  If the variable is typed, the stash of the
 class to which it is typed is returned.  If not, C<NULL> is returned.
 
diff --git a/mg.c b/mg.c
index b4a368d..6ec7628 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -579,7 +579,7 @@ Perl_mg_free(pTHX_ SV *sv)
 /*
 =for apidoc Am|void|mg_free_type|SV *sv|int how
 
-Remove any magic of type I<how> from the SV I<sv>.  See L</sv_magic>.
+Remove any magic of type C<how> from the SV C<sv>.  See L</sv_magic>.
 
 =cut
 */
similarity index 99%
rename from mg_names.c
rename to mg_names.inc
index 57d52db..fde6872 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- buffer-read-only: t -*-
  *
- *    mg_names.c
+ *    mg_names.inc
  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
  * This file is built by regen/mg_vtable.pl.
  * Any changes made here will be lost!
index 25d30d9..d134b8a 100644 (file)
@@ -1295,7 +1295,7 @@ XS code.
 
 2) Assigning a reference to a readonly scalar
 constant into a stash entry in order to create
-a constant subroutine (like constant.pm
+a constant subroutine (like F<constant.pm>
 does).
 
 This same method is available from pure perl
index be85adb..6aeaf9f 100644 (file)
--- a/numeric.c
+++ b/numeric.c
@@ -107,23 +107,23 @@ Perl_cast_uv(NV f)
 
 converts a string representing a binary number to numeric form.
 
-On entry I<start> and I<*len> give the string to scan, I<*flags> gives
-conversion flags, and I<result> should be NULL or a pointer to an NV.
+On entry C<start> and C<*len> give the string to scan, C<*flags> gives
+conversion flags, and C<result> should be NULL or a pointer to an NV.
 The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in I<*flags>, encountering an
+Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>, encountering an
 invalid character will also trigger a warning.
-On return I<*len> is set to the length of the scanned string,
-and I<*flags> gives output flags.
+On return C<*len> is set to the length of the scanned string,
+and C<*flags> gives output flags.
 
 If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
-and nothing is written to I<*result>.  If the value is > UV_MAX C<grok_bin>
+and nothing is written to C<*result>.  If the value is > UV_MAX C<grok_bin>
 returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to I<*result> (or the value is discarded if I<result>
+and writes the value to C<*result> (or the value is discarded if C<result>
 is NULL).
 
 The binary number may optionally be prefixed with "0b" or "b" unless
-C<PERL_SCAN_DISALLOW_PREFIX> is set in I<*flags> on entry.  If
-C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the binary
+C<PERL_SCAN_DISALLOW_PREFIX> is set in C<*flags> on entry.  If
+C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then the binary
 number may use '_' characters to separate digits.
 
 =cut
@@ -230,23 +230,23 @@ Perl_grok_bin(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
 
 converts a string representing a hex number to numeric form.
 
-On entry I<start> and I<*len_p> give the string to scan, I<*flags> gives
-conversion flags, and I<result> should be NULL or a pointer to an NV.
+On entry C<start> and C<*len_p> give the string to scan, C<*flags> gives
+conversion flags, and C<result> should be NULL or a pointer to an NV.
 The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in I<*flags>, encountering an
+Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>, encountering an
 invalid character will also trigger a warning.
-On return I<*len> is set to the length of the scanned string,
-and I<*flags> gives output flags.
+On return C<*len> is set to the length of the scanned string,
+and C<*flags> gives output flags.
 
 If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
-and nothing is written to I<*result>.  If the value is > UV_MAX C<grok_hex>
+and nothing is written to C<*result>.  If the value is > UV_MAX C<grok_hex>
 returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to I<*result> (or the value is discarded if I<result>
+and writes the value to C<*result> (or the value is discarded if C<result>
 is NULL).
 
 The hex number may optionally be prefixed with "0x" or "x" unless
-C<PERL_SCAN_DISALLOW_PREFIX> is set in I<*flags> on entry.  If
-C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the hex
+C<PERL_SCAN_DISALLOW_PREFIX> is set in C<*flags> on entry.  If
+C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then the hex
 number may use '_' characters to separate digits.
 
 =cut
@@ -351,21 +351,21 @@ Perl_grok_hex(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
 
 converts a string representing an octal number to numeric form.
 
-On entry I<start> and I<*len> give the string to scan, I<*flags> gives
-conversion flags, and I<result> should be NULL or a pointer to an NV.
+On entry C<start> and C<*len> give the string to scan, C<*flags> gives
+conversion flags, and C<result> should be NULL or a pointer to an NV.
 The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in I<*flags>, encountering an
+Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>, encountering an
 8 or 9 will also trigger a warning.
-On return I<*len> is set to the length of the scanned string,
-and I<*flags> gives output flags.
+On return C<*len> is set to the length of the scanned string,
+and C<*flags> gives output flags.
 
 If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
-and nothing is written to I<*result>.  If the value is > UV_MAX C<grok_oct>
+and nothing is written to C<*result>.  If the value is > UV_MAX C<grok_oct>
 returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to I<*result> (or the value is discarded if I<result>
+and writes the value to C<*result> (or the value is discarded if C<result>
 is NULL).
 
-If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the octal
+If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then the octal
 number may use '_' characters to separate digits.
 
 =cut
@@ -808,7 +808,7 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send)
 Recognise (or not) a number.  The type of the number is returned
 (0 if unrecognised), otherwise it is a bit-ORed combination of
 IS_NUMBER_IN_UV, IS_NUMBER_GREATER_THAN_UV_MAX, IS_NUMBER_NOT_INT,
-IS_NUMBER_NEG, IS_NUMBER_INFINITY, IS_NUMBER_NAN (defined in perl.h).
+IS_NUMBER_NEG, IS_NUMBER_INFINITY, IS_NUMBER_NAN (defined in F<perl.h>).
 
 If the value of the number can fit in a UV, it is returned in the *valuep
 IS_NUMBER_IN_UV will be set to indicate that *valuep is valid, IS_NUMBER_IN_UV
@@ -1610,7 +1610,7 @@ Perl_my_frexpl(long double x, int *e) {
 Return a non-zero integer if the sign bit on an NV is set, and 0 if
 it is not.  
 
-If Configure detects this system has a signbit() that will work with
+If F<Configure> detects this system has a signbit() that will work with
 our NVs, then we just use it via the #define in perl.h.  Otherwise,
 fall back on this implementation.  The main use of this function
 is catching -0.0.
@@ -1621,7 +1621,7 @@ function or macro that doesn't happen to work with our particular choice
 of NVs.  We shouldn't just re-#define signbit as Perl_signbit and expect
 the standard system headers to be happy.  Also, this is a no-context
 function (no pTHX_) because Perl_signbit() is usually re-#defined in
-perl.h as a simple macro call to the system's signbit().
+F<perl.h> as a simple macro call to the system's signbit().
 Users should just always call Perl_signbit().
 
 =cut
diff --git a/op.c b/op.c
index 9d3d0fa..ff2848a 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1442,7 +1442,7 @@ S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
 
 Applies a syntactic context to an op tree representing an expression.
-I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
+C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
 or C<G_VOID> to specify the context to apply.  The modified op tree
 is returned.
 
@@ -2584,7 +2584,7 @@ S_finalize_op(pTHX_ OP* o)
 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
 
 Propagate lvalue ("modifiable") context to an op and its children.
-I<type> represents the context type, roughly based on the type of op that
+C<type> represents the context type, roughly based on the type of op that
 would do the modifying, although C<local()> is represented by OP_NULL,
 because it has no op type of its own (it is signalled by a flag on
 the lvalue op).
@@ -3905,9 +3905,9 @@ Perl_block_start(pTHX_ int full)
 /*
 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
 
-Handles compile-time scope exit.  I<floor>
+Handles compile-time scope exit.  C<floor>
 is the savestack index returned by
-C<block_start>, and I<seq> is the body of the block.  Returns the block,
+C<block_start>, and C<seq> is the body of the block.  Returns the block,
 possibly modified.
 
 =cut
@@ -4455,10 +4455,10 @@ S_gen_constant_list(pTHX_ OP *o)
 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
 
 Append an item to the list of ops contained directly within a list-type
-op, returning the lengthened list.  I<first> is the list-type op,
-and I<last> is the op to append to the list.  I<optype> specifies the
-intended opcode for the list.  If I<first> is not already a list of the
-right type, it will be upgraded into one.  If either I<first> or I<last>
+op, returning the lengthened list.  C<first> is the list-type op,
+and C<last> is the op to append to the list.  C<optype> specifies the
+intended opcode for the list.  If C<first> is not already a list of the
+right type, it will be upgraded into one.  If either C<first> or C<last>
 is null, the other is returned unchanged.
 
 =cut
@@ -4488,10 +4488,10 @@ Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
 
 Concatenate the lists of ops contained directly within two list-type ops,
-returning the combined list.  I<first> and I<last> are the list-type ops
-to concatenate.  I<optype> specifies the intended opcode for the list.
-If either I<first> or I<last> is not already a list of the right type,
-it will be upgraded into one.  If either I<first> or I<last> is null,
+returning the combined list.  C<first> and C<last> are the list-type ops
+to concatenate.  C<optype> specifies the intended opcode for the list.
+If either C<first> or C<last> is not already a list of the right type,
+it will be upgraded into one.  If either C<first> or C<last> is null,
 the other is returned unchanged.
 
 =cut
@@ -4526,10 +4526,10 @@ Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
 
 Prepend an item to the list of ops contained directly within a list-type
-op, returning the lengthened list.  I<first> is the op to prepend to the
-list, and I<last> is the list-type op.  I<optype> specifies the intended
-opcode for the list.  If I<last> is not already a list of the right type,
-it will be upgraded into one.  If either I<first> or I<last> is null,
+op, returning the lengthened list.  C<first> is the op to prepend to the
+list, and C<last> is the list-type op.  C<optype> specifies the intended
+opcode for the list.  If C<last> is not already a list of the right type,
+it will be upgraded into one.  If either C<first> or C<last> is null,
 the other is returned unchanged.
 
 =cut
@@ -4563,8 +4563,8 @@ Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
 /*
 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
 
-Converts I<o> into a list op if it is not one already, and then converts it
-into the specified I<type>, calling its check function, allocating a target if
+Converts C<o> into a list op if it is not one already, and then converts it
+into the specified C<type>, calling its check function, allocating a target if
 it needs one, and folding constants.
 
 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
@@ -4664,9 +4664,9 @@ S_force_list(pTHX_ OP *o, bool nullit)
 /*
 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
 
-Constructs, checks, and returns an op of any list type.  I<type> is
-the opcode.  I<flags> gives the eight bits of C<op_flags>, except that
-C<OPf_KIDS> will be set automatically if required.  I<first> and I<last>
+Constructs, checks, and returns an op of any list type.  C<type> is
+the opcode.  C<flags> gives the eight bits of C<op_flags>, except that
+C<OPf_KIDS> will be set automatically if required.  C<first> and C<last>
 supply up to two ops to be direct children of the list op; they are
 consumed by this function and become part of the constructed op tree.
 
@@ -4722,7 +4722,7 @@ Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
 =for apidoc Am|OP *|newOP|I32 type|I32 flags
 
 Constructs, checks, and returns an op of any base type (any type that
-has no extra fields).  I<type> is the opcode.  I<flags> gives the
+has no extra fields).  C<type> is the opcode.  C<flags> gives the
 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
 of C<op_private>.
 
@@ -4761,11 +4761,11 @@ Perl_newOP(pTHX_ I32 type, I32 flags)
 /*
 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
 
-Constructs, checks, and returns an op of any unary type.  I<type> is
-the opcode.  I<flags> gives the eight bits of C<op_flags>, except that
+Constructs, checks, and returns an op of any unary type.  C<type> is
+the opcode.  C<flags> gives the eight bits of C<op_flags>, except that
 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
 bits, the eight bits of C<op_private>, except that the bit with value 1
-is automatically set.  I<first> supplies an optional op to be the direct
+is automatically set.  C<first> supplies an optional op to be the direct
 child of the unary op; it is consumed by this function and become part
 of the constructed op tree.
 
@@ -4851,10 +4851,10 @@ Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
 
 Constructs, checks, and returns an op of method type with a method name
-evaluated at runtime.  I<type> is the opcode.  I<flags> gives the eight
+evaluated at runtime.  C<type> is the opcode.  C<flags> gives the eight
 bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically,
 and, shifted up eight bits, the eight bits of C<op_private>, except that
-the bit with value 1 is automatically set.  I<dynamic_meth> supplies an
+the bit with value 1 is automatically set.  C<dynamic_meth> supplies an
 op which evaluates method name; it is consumed by this function and
 become part of the constructed op tree.
 Supported optypes: OP_METHOD.
@@ -4908,9 +4908,9 @@ Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) {
 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
 
 Constructs, checks, and returns an op of method type with a constant
-method name.  I<type> is the opcode.  I<flags> gives the eight bits of
+method name.  C<type> is the opcode.  C<flags> gives the eight bits of
 C<op_flags>, and, shifted up eight bits, the eight bits of
-C<op_private>.  I<const_meth> supplies a constant method name;
+C<op_private>.  C<const_meth> supplies a constant method name;
 it must be a shared COW string.
 Supported optypes: OP_METHOD_NAMED.
 
@@ -4926,11 +4926,11 @@ Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) {
 /*
 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
 
-Constructs, checks, and returns an op of any binary type.  I<type>
-is the opcode.  I<flags> gives the eight bits of C<op_flags>, except
+Constructs, checks, and returns an op of any binary type.  C<type>
+is the opcode.  C<flags> gives the eight bits of C<op_flags>, except
 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
 the eight bits of C<op_private>, except that the bit with value 1 or
-2 is automatically set as required.  I<first> and I<last> supply up to
+2 is automatically set as required.  C<first> and C<last> supply up to
 two ops to be the direct children of the binary op; they are consumed
 by this function and become part of the constructed op tree.
 
@@ -5161,7 +5161,7 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
                }
            }
 
-           /* now see which range will peter our first, if either. */
+           /* now see which range will peter out first, if either. */
            tdiff = tlast - tfirst;
            rdiff = rlast - rfirst;
            tcount += tdiff + 1;
@@ -5332,7 +5332,7 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
 
 Constructs, checks, and returns an op of any pattern matching type.
-I<type> is the opcode.  I<flags> gives the eight bits of C<op_flags>
+C<type> is the opcode.  C<flags> gives the eight bits of C<op_flags>
 and, shifted up eight bits, the eight bits of C<op_private>.
 
 =cut
@@ -5773,8 +5773,8 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, bool isreg, I32 floor)
 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
 
 Constructs, checks, and returns an op of any type that involves an
-embedded SV.  I<type> is the opcode.  I<flags> gives the eight bits
-of C<op_flags>.  I<sv> gives the SV to embed in the op; this function
+embedded SV.  C<type> is the opcode.  C<flags> gives the eight bits
+of C<op_flags>.  C<sv> gives the SV to embed in the op; this function
 takes ownership of one reference to it.
 
 =cut
@@ -5836,9 +5836,9 @@ Perl_newDEFSVOP(pTHX)
 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
 
 Constructs, checks, and returns an op of any type that involves a
-reference to a pad element.  I<type> is the opcode.  I<flags> gives the
+reference to a pad element.  C<type> is the opcode.  C<flags> gives the
 eight bits of C<op_flags>.  A pad slot is automatically allocated, and
-is populated with I<sv>; this function takes ownership of one reference
+is populated with C<sv>; this function takes ownership of one reference
 to it.
 
 This function only exists if Perl has been compiled to use ithreads.
@@ -5881,8 +5881,8 @@ Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
 
 Constructs, checks, and returns an op of any type that involves an
-embedded reference to a GV.  I<type> is the opcode.  I<flags> gives the
-eight bits of C<op_flags>.  I<gv> identifies the GV that the op should
+embedded reference to a GV.  C<type> is the opcode.  C<flags> gives the
+eight bits of C<op_flags>.  C<gv> identifies the GV that the op should
 reference; calling this function does not transfer ownership of any
 reference to it.
 
@@ -5905,8 +5905,8 @@ Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
 
 Constructs, checks, and returns an op of any type that involves an
-embedded C-level pointer (PV).  I<type> is the opcode.  I<flags> gives
-the eight bits of C<op_flags>.  I<pv> supplies the C-level pointer, which
+embedded C-level pointer (PV).  C<type> is the opcode.  C<flags> gives
+the eight bits of C<op_flags>.  C<pv> supplies the C-level pointer, which
 must have been allocated using C<PerlMemShared_malloc>; the memory will
 be freed when the op is destroyed.
 
@@ -6221,11 +6221,11 @@ Perl_dofile(pTHX_ OP *term, I32 force_builtin)
 
 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
 
-Constructs, checks, and returns an C<lslice> (list slice) op.  I<flags>
+Constructs, checks, and returns an C<lslice> (list slice) op.  C<flags>
 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
 be set automatically, and, shifted up eight bits, the eight bits of
 C<op_private>, except that the bit with value 1 or 2 is automatically
-set as required.  I<listval> and I<subscript> supply the parameters of
+set as required.  C<listval> and C<subscript> supply the parameters of
 the slice; they are consumed by this function and become part of the
 constructed op tree.
 
@@ -6303,149 +6303,23 @@ S_assignment_type(pTHX_ const OP *o)
     return ret;
 }
 
-/*
-  Helper function for newASSIGNOP to detect commonality between the
-  lhs and the rhs.  (It is actually called very indirectly.  newASSIGNOP
-  flags the op and the peephole optimizer calls this helper function
-  if the flag is set.)  Marks all variables with PL_generation.  If it
-  returns TRUE the assignment must be able to handle common variables.
-
-  PL_generation sorcery:
-  An assignment like ($a,$b) = ($c,$d) is easier than
-  ($a,$b) = ($c,$a), since there is no need for temporary vars.
-  To detect whether there are common vars, the global var
-  PL_generation is incremented for each assign op we compile.
-  Then, while compiling the assign op, we run through all the
-  variables on both sides of the assignment, setting a spare slot
-  in each of them to PL_generation.  If any of them already have
-  that value, we know we've got commonality.  Also, if the
-  generation number is already set to PERL_INT_MAX, then
-  the variable is involved in aliasing, so we also have
-  potential commonality in that case.  We could use a
-  single bit marker, but then we'd have to make 2 passes, first
-  to clear the flag, then to test and set it.  And that
-  wouldn't help with aliasing, either.  To find somewhere
-  to store these values, evil chicanery is done with SvUVX().
-*/
-PERL_STATIC_INLINE bool
-S_aassign_common_vars(pTHX_ OP* o)
-{
-    OP *curop;
-    for (curop = cUNOPo->op_first; curop; curop = OpSIBLING(curop)) {
-       if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
-           if (curop->op_type == OP_GV || curop->op_type == OP_GVSV
-            || curop->op_type == OP_AELEMFAST) {
-               GV *gv = cGVOPx_gv(curop);
-               if (gv == PL_defgv
-                   || (int)GvASSIGN_GENERATION(gv) == PL_generation)
-                   return TRUE;
-               GvASSIGN_GENERATION_set(gv, PL_generation);
-           }
-           else if (curop->op_type == OP_PADSV ||
-               curop->op_type == OP_PADAV ||
-               curop->op_type == OP_PADHV ||
-               curop->op_type == OP_AELEMFAST_LEX ||
-               curop->op_type == OP_PADANY)
-               {
-                 padcheck:
-                   if (PAD_COMPNAME_GEN(curop->op_targ)
-                       == (STRLEN)PL_generation
-                    || PAD_COMPNAME_GEN(curop->op_targ) == PERL_INT_MAX)
-                       return TRUE;
-                   PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
-
-               }
-           else if (curop->op_type == OP_RV2CV)
-               return TRUE;
-           else if (curop->op_type == OP_RV2SV ||
-               curop->op_type == OP_RV2AV ||
-               curop->op_type == OP_RV2HV ||
-               curop->op_type == OP_RV2GV) {
-               if (cUNOPx(curop)->op_first->op_type != OP_GV)  /* funny deref? */
-                   return TRUE;
-           }
-           else if (curop->op_type == OP_PUSHRE) {
-               GV *const gv =
-#ifdef USE_ITHREADS
-                   ((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff
-                       ? MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff))
-                       : NULL;
-#else
-                   ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
-#endif
-               if (gv) {
-                   if (gv == PL_defgv
-                       || (int)GvASSIGN_GENERATION(gv) == PL_generation)
-                       return TRUE;
-                   GvASSIGN_GENERATION_set(gv, PL_generation);
-               }
-               else if (curop->op_targ)
-                   goto padcheck;
-           }
-           else if (curop->op_type == OP_PADRANGE)
-               /* Ignore padrange; checking its siblings is sufficient. */
-               continue;
-           else
-               return TRUE;
-       }
-       else if (PL_opargs[curop->op_type] & OA_TARGLEX
-             && curop->op_private & OPpTARGET_MY)
-           goto padcheck;
-
-       if (curop->op_flags & OPf_KIDS) {
-           if (aassign_common_vars(curop))
-               return TRUE;
-       }
-    }
-    return FALSE;
-}
-
-/* This variant only handles lexical aliases.  It is called when
-   newASSIGNOP decides that we don’t have any common vars, as lexical ali-
-   ases trump that decision.  */
-PERL_STATIC_INLINE bool
-S_aassign_common_vars_aliases_only(pTHX_ OP *o)
-{
-    OP *curop;
-    for (curop = cUNOPo->op_first; curop; curop = OpSIBLING(curop)) {
-       if ((curop->op_type == OP_PADSV ||
-            curop->op_type == OP_PADAV ||
-            curop->op_type == OP_PADHV ||
-            curop->op_type == OP_AELEMFAST_LEX ||
-            curop->op_type == OP_PADANY ||
-            (  PL_opargs[curop->op_type] & OA_TARGLEX
-            && curop->op_private & OPpTARGET_MY  ))
-          && PAD_COMPNAME_GEN(curop->op_targ) == PERL_INT_MAX)
-           return TRUE;
-
-       if (curop->op_type == OP_PUSHRE && curop->op_targ
-        && PAD_COMPNAME_GEN(curop->op_targ) == PERL_INT_MAX)
-           return TRUE;
-
-       if (curop->op_flags & OPf_KIDS) {
-           if (S_aassign_common_vars_aliases_only(aTHX_ curop))
-               return TRUE;
-       }
-    }
-    return FALSE;
-}
 
 /*
 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
 
-Constructs, checks, and returns an assignment op.  I<left> and I<right>
+Constructs, checks, and returns an assignment op.  C<left> and C<right>
 supply the parameters of the assignment; they are consumed by this
 function and become part of the constructed op tree.
 
-If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
-a suitable conditional optree is constructed.  If I<optype> is the opcode
+If C<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
+a suitable conditional optree is constructed.  If C<optype> is the opcode
 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
 performs the binary operation and assigns the result to the left argument.
-Either way, if I<optype> is non-zero then I<flags> has no effect.
+Either way, if C<optype> is non-zero then C<flags> has no effect.
 
-If I<optype> is zero, then a plain scalar or list assignment is
+If C<optype> is zero, then a plain scalar or list assignment is
 constructed.  Which type of assignment it is is automatically determined.
-I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
+C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
 will be set automatically, and, shifted up eight bits, the eight bits
 of C<op_private>, except that the bit with value 1 or 2 is automatically
 set as required.
@@ -6475,7 +6349,6 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
        static const char no_list_state[] = "Initialization of state variables"
            " in list context currently forbidden";
        OP *curop;
-       bool maybe_common_vars = TRUE;
 
        if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE)
            left->op_private &= ~ OPpSLICEWARNING;
@@ -6489,47 +6362,24 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
        if (OP_TYPE_IS_OR_WAS(left, OP_LIST))
        {
            OP* lop = ((LISTOP*)left)->op_first;
-           maybe_common_vars = FALSE;
            while (lop) {
-               if (lop->op_type == OP_PADSV ||
-                   lop->op_type == OP_PADAV ||
-                   lop->op_type == OP_PADHV ||
-                   lop->op_type == OP_PADANY) {
-                   if (!(lop->op_private & OPpLVAL_INTRO))
-                       maybe_common_vars = TRUE;
-
-                   if (lop->op_private & OPpPAD_STATE) {
-                       if (left->op_private & OPpLVAL_INTRO) {
-                           /* Each variable in state($a, $b, $c) = ... */
-                       }
-                       else {
-                           /* Each state variable in
-                              (state $a, my $b, our $c, $d, undef) = ... */
-                       }
-                       yyerror(no_list_state);
-                   } else {
-                       /* Each my variable in
-                          (state $a, my $b, our $c, $d, undef) = ... */
-                   }
-               } else if (lop->op_type == OP_UNDEF ||
-                           OP_TYPE_IS_OR_WAS(lop, OP_PUSHMARK)) {
-                   /* undef may be interesting in
-                      (state $a, undef, state $c) */
-               } else {
-                   /* Other ops in the list. */
-                   maybe_common_vars = TRUE;
-               }
+               if ((lop->op_type == OP_PADSV ||
+                    lop->op_type == OP_PADAV ||
+                    lop->op_type == OP_PADHV ||
+                    lop->op_type == OP_PADANY)
+                 && (lop->op_private & OPpPAD_STATE)
+                )
+                    yyerror(no_list_state);
                lop = OpSIBLING(lop);
            }
        }
-       else if ((left->op_private & OPpLVAL_INTRO)
+       else if (  (left->op_private & OPpLVAL_INTRO)
+                && (left->op_private & OPpPAD_STATE)
                && (   left->op_type == OP_PADSV
                    || left->op_type == OP_PADAV
                    || left->op_type == OP_PADHV
-                   || left->op_type == OP_PADANY))
-       {
-           if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
-           if (left->op_private & OPpPAD_STATE) {
+                   || left->op_type == OP_PADANY)
+        ) {
                /* All single variable list context state assignments, hence
                   state ($a) = ...
                   (state $a) = ...
@@ -6541,13 +6391,6 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
                   (state %a) = ...
                */
                yyerror(no_list_state);
-           }
-       }
-
-       if (maybe_common_vars) {
-               /* The peephole optimizer will do the full check and pos-
-                  sibly turn this off.  */
-               o->op_private |= OPpASSIGN_COMMON;
        }
 
        if (right && right->op_type == OP_SPLIT
@@ -6660,13 +6503,13 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
 Constructs a state op (COP).  The state op is normally a C<nextstate> op,
 but will be a C<dbstate> op if debugging is enabled for currently-compiled
 code.  The state op is populated from C<PL_curcop> (or C<PL_compiling>).
-If I<label> is non-null, it supplies the name of a label to attach to
+If C<label> is non-null, it supplies the name of a label to attach to
 the state op; this function takes ownership of the memory pointed at by
-I<label>, and will free it.  I<flags> gives the eight bits of C<op_flags>
+C<label>, and will free it.  C<flags> gives the eight bits of C<op_flags>
 for the state op.
 
-If I<o> is null, the state op is returned.  Otherwise the state op is
-combined with I<o> into a C<lineseq> list op, which is returned.  I<o>
+If C<o> is null, the state op is returned.  Otherwise the state op is
+combined with C<o> into a C<lineseq> list op, which is returned.  C<o>
 is consumed by this function and becomes part of the returned op tree.
 
 =cut
@@ -6748,12 +6591,12 @@ Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
 /*
 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
 
-Constructs, checks, and returns a logical (flow control) op.  I<type>
-is the opcode.  I<flags> gives the eight bits of C<op_flags>, except
+Constructs, checks, and returns a logical (flow control) op.  C<type>
+is the opcode.  C<flags> gives the eight bits of C<op_flags>, except
 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
 the eight bits of C<op_private>, except that the bit with value 1 is
-automatically set.  I<first> supplies the expression controlling the
-flow, and I<other> supplies the side (alternate) chain of ops; they are
+automatically set.  C<first> supplies the expression controlling the
+flow, and C<other> supplies the side (alternate) chain of ops; they are
 consumed by this function and become part of the constructed op tree.
 
 =cut
@@ -7012,11 +6855,11 @@ S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
 
 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
-op.  I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
+op.  C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
 will be set automatically, and, shifted up eight bits, the eight bits of
 C<op_private>, except that the bit with value 1 is automatically set.
-I<first> supplies the expression selecting between the two branches,
-and I<trueop> and I<falseop> supply the branches; they are consumed by
+C<first> supplies the expression selecting between the two branches,
+and C<trueop> and C<falseop> supply the branches; they are consumed by
 this function and become part of the constructed op tree.
 
 =cut
@@ -7087,10 +6930,10 @@ Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
 
 Constructs and returns a C<range> op, with subordinate C<flip> and
-C<flop> ops.  I<flags> gives the eight bits of C<op_flags> for the
+C<flop> ops.  C<flags> gives the eight bits of C<op_flags> for the
 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
 for both the C<flip> and C<range> ops, except that the bit with value
-1 is automatically set.  I<left> and I<right> supply the expressions
+1 is automatically set.  C<left> and C<right> supply the expressions
 controlling the endpoints of the range; they are consumed by this function
 and become part of the constructed op tree.
 
@@ -7156,11 +6999,11 @@ Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
 Constructs, checks, and returns an op tree expressing a loop.  This is
 only a loop in the control flow through the op tree; it does not have
 the heavyweight loop structure that allows exiting the loop by C<last>
-and suchlike.  I<flags> gives the eight bits of C<op_flags> for the
+and suchlike.  C<flags> gives the eight bits of C<op_flags> for the
 top-level op, except that some bits will be set automatically as required.
-I<expr> supplies the expression controlling loop iteration, and I<block>
+C<expr> supplies the expression controlling loop iteration, and C<block>
 supplies the body of the loop; they are consumed by this function and
-become part of the constructed op tree.  I<debuggable> is currently
+become part of the constructed op tree.  C<debuggable> is currently
 unused and should always be 1.
 
 =cut
@@ -7254,18 +7097,18 @@ Constructs, checks, and returns an op tree expressing a C<while> loop.
 This is a heavyweight loop, with structure that allows exiting the loop
 by C<last> and suchlike.
 
-I<loop> is an optional preconstructed C<enterloop> op to use in the
+C<loop> is an optional preconstructed C<enterloop> op to use in the
 loop; if it is null then a suitable op will be constructed automatically.
-I<expr> supplies the loop's controlling expression.  I<block> supplies the
-main body of the loop, and I<cont> optionally supplies a C<continue> block
+C<expr> supplies the loop's controlling expression.  C<block> supplies the
+main body of the loop, and C<cont> optionally supplies a C<continue> block
 that operates as a second half of the body.  All of these optree inputs
 are consumed by this function and become part of the constructed op tree.
 
-I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
+C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
 op and, shifted up eight bits, the eight bits of C<op_private> for
 the C<leaveloop> op, except that (in both cases) some bits will be set
-automatically.  I<debuggable> is currently unused and should always be 1.
-I<has_my> can be supplied as true to force the
+automatically.  C<debuggable> is currently unused and should always be 1.
+C<has_my> can be supplied as true to force the
 loop body to be enclosed in its own scope.
 
 =cut
@@ -7380,15 +7223,15 @@ Constructs, checks, and returns an op tree expressing a C<foreach>
 loop (iteration through a list of values).  This is a heavyweight loop,
 with structure that allows exiting the loop by C<last> and suchlike.
 
-I<sv> optionally supplies the variable that will be aliased to each
+C<sv> optionally supplies the variable that will be aliased to each
 item in turn; if null, it defaults to C<$_> (either lexical or global).
-I<expr> supplies the list of values to iterate over.  I<block> supplies
-the main body of the loop, and I<cont> optionally supplies a C<continue>
+C<expr> supplies the list of values to iterate over.  C<block> supplies
+the main body of the loop, and C<cont> optionally supplies a C<continue>
 block that operates as a second half of the body.  All of these optree
 inputs are consumed by this function and become part of the constructed
 op tree.
 
-I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
+C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
 op and, shifted up eight bits, the eight bits of C<op_private> for
 the C<leaveloop> op, except that (in both cases) some bits will be set
 automatically.
@@ -7528,7 +7371,7 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
 
 Constructs, checks, and returns a loop-exiting op (such as C<goto>
-or C<last>).  I<type> is the opcode.  I<label> supplies the parameter
+or C<last>).  C<type> is the opcode.  C<label> supplies the parameter
 determining the target of the op; it is consumed by this function and
 becomes part of the constructed op tree.
 
@@ -7750,10 +7593,10 @@ S_looks_like_bool(pTHX_ const OP *o)
 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
 
 Constructs, checks, and returns an op tree expressing a C<given> block.
-I<cond> supplies the expression that will be locally assigned to a lexical
-variable, and I<block> supplies the body of the C<given> construct; they
+C<cond> supplies the expression that will be locally assigned to a lexical
+variable, and C<block> supplies the body of the C<given> construct; they
 are consumed by this function and become part of the constructed op tree.
-I<defsv_off> is the pad offset of the scalar lexical variable that will
+C<defsv_off> is the pad offset of the scalar lexical variable that will
 be affected.  If it is 0, the global $_ will be used.
 
 =cut
@@ -7774,9 +7617,9 @@ Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
 
 Constructs, checks, and returns an op tree expressing a C<when> block.
-I<cond> supplies the test expression, and I<block> supplies the block
+C<cond> supplies the test expression, and C<block> supplies the block
 that will be executed if the test evaluates to true; they are consumed
-by this function and become part of the constructed op tree.  I<cond>
+by this function and become part of the constructed op tree.  C<cond>
 will be interpreted DWIMically, often as a comparison against C<$_>,
 and may be null to generate a C<default> block.
 
@@ -9026,7 +8869,7 @@ Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
 /*
 =for apidoc U||newXS
 
-Used by C<xsubpp> to hook up XSUBs as Perl subs.  I<filename> needs to be
+Used by C<xsubpp> to hook up XSUBs as Perl subs.  C<filename> needs to be
 static storage, as it is used directly as CvFILE(), without a copy being made.
 
 =cut
@@ -9116,7 +8959,9 @@ Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
 
         CvGV_set(cv, gv);
         if(filename) {
-            (void)gv_fetchfile(filename);
+            /* XSUBs can't be perl lang/perl5db.pl debugged
+            if (PERLDB_LINE_OR_SAVESRC)
+                (void)gv_fetchfile(filename); */
             assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
             if (flags & XS_DYNAMIC_FILENAME) {
                 CvDYNFILE_on(cv);
@@ -10621,7 +10466,11 @@ Perl_ck_refassign(pTHX_ OP *o)
     assert (left);
     assert (left->op_type == OP_SREFGEN);
 
-    o->op_private = varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE);
+    o->op_private = 0;
+    /* we use OPpPAD_STATE in refassign to mean either of those things,
+     * and the code assumes the two flags occupy the same bit position
+     * in the various ops below */
+    assert(OPpPAD_STATE == OPpOUR_INTRO);
 
     switch (varop->op_type) {
     case OP_PADAV:
@@ -10629,12 +10478,15 @@ Perl_ck_refassign(pTHX_ OP *o)
        goto settarg;
     case OP_PADHV:
        o->op_private |= OPpLVREF_HV;
+        /* FALLTHROUGH */
     case OP_PADSV:
       settarg:
+        o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE));
        o->op_targ = varop->op_targ;
        varop->op_targ = 0;
        PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
        break;
+
     case OP_RV2AV:
        o->op_private |= OPpLVREF_AV;
        goto checkgv;
@@ -10644,6 +10496,7 @@ Perl_ck_refassign(pTHX_ OP *o)
         /* FALLTHROUGH */
     case OP_RV2SV:
       checkgv:
+        o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO));
        if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad;
       detach_and_stack:
        /* Point varop to its GV kid, detached.  */
@@ -10666,6 +10519,7 @@ Perl_ck_refassign(pTHX_ OP *o)
     }
     case OP_AELEM:
     case OP_HELEM:
+        o->op_private |= (varop->op_private & OPpLVAL_INTRO);
        o->op_private |= OPpLVREF_ELEM;
        op_null(varop);
        stacked = TRUE;
@@ -11181,7 +11035,7 @@ Perl_ck_join(pTHX_ OP *o)
 Examines an op, which is expected to identify a subroutine at runtime,
 and attempts to determine at compile time which subroutine it identifies.
 This is normally used during Perl compilation to determine whether
-a prototype can be applied to a function call.  I<cvop> is the op
+a prototype can be applied to a function call.  C<cvop> is the op
 being considered, normally an C<rv2cv> op.  A pointer to the identified
 subroutine is returned, if it could be determined statically, and a null
 pointer is returned if it was not possible to determine statically.
@@ -11195,14 +11049,14 @@ has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
 the subroutine statically: this flag is used to suppress compile-time
 magic on a subroutine call, forcing it to use default runtime behaviour.
 
-If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
+If C<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
 of a GV reference is modified.  If a GV was examined and its CV slot was
 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
 If the op is not optimised away, and the CV slot is later populated with
 a subroutine having a prototype, that flag eventually triggers the warning
 "called too early to check prototype".
 
-If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
+If C<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
 of returning a pointer to the subroutine it returns a pointer to the
 GV giving the most appropriate name for the subroutine in this context.
 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
@@ -11335,7 +11189,7 @@ the prototype.  This is the standard treatment used on a subroutine call,
 not marked with C<&>, where the callee can be identified at compile time
 and has a prototype.
 
-I<protosv> supplies the subroutine prototype to be applied to the call.
+C<protosv> supplies the subroutine prototype to be applied to the call.
 It may be a normal defined scalar, of which the string value will be used.
 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
 that has been cast to C<SV*>) which has a prototype.  The prototype
@@ -11347,7 +11201,7 @@ an unacceptable number of arguments, a valid op tree is returned anyway.
 The error is reflected in the parser state, normally resulting in a single
 exception at the top level of parsing which covers all the compilation
 errors that occurred.  In the error message, the callee is referred to
-by the name defined by the I<namegv> parameter.
+by the name defined by the C<namegv> parameter.
 
 =cut
 */
@@ -11580,7 +11434,7 @@ based on a subroutine prototype or using default list-context processing.
 This is the standard treatment used on a subroutine call, not marked
 with C<&>, where the callee can be identified at compile time.
 
-I<protosv> supplies the subroutine prototype to be applied to the call,
+C<protosv> supplies the subroutine prototype to be applied to the call,
 or indicates that there is no prototype.  It may be a normal scalar,
 in which case if it is defined then the string value will be used
 as a prototype, and if it is undefined then there is no prototype.
@@ -11594,7 +11448,7 @@ an unacceptable number of arguments, a valid op tree is returned anyway.
 The error is reflected in the parser state, normally resulting in a single
 exception at the top level of parsing which covers all the compilation
 errors that occurred.  In the error message, the callee is referred to
-by the name defined by the I<namegv> parameter.
+by the name defined by the C<namegv> parameter.
 
 =cut
 */
@@ -11709,19 +11563,19 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
 /*
 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
 
-Retrieves the function that will be used to fix up a call to I<cv>.
+Retrieves the function that will be used to fix up a call to C<cv>.
 Specifically, the function is applied to an C<entersub> op tree for a
 subroutine call, not marked with C<&>, where the callee can be identified
-at compile time as I<cv>.
+at compile time as C<cv>.
 
-The C-level function pointer is returned in I<*ckfun_p>, and an SV
-argument for it is returned in I<*ckobj_p>.  The function is intended
+The C-level function pointer is returned in C<*ckfun_p>, and an SV
+argument for it is returned in C<*ckobj_p>.  The function is intended
 to be called in this manner:
 
  entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
 
-In this call, I<entersubop> is a pointer to the C<entersub> op,
-which may be replaced by the check function, and I<namegv> is a GV
+In this call, C<entersubop> is a pointer to the C<entersub> op,
+which may be replaced by the check function, and C<namegv> is a GV
 supplying the name that should be used by the check function to refer
 to the callee of the C<entersub> op if it needs to emit any diagnostics.
 It is permitted to apply the check function in non-standard situations,
@@ -11729,7 +11583,7 @@ such as to a call to a different subroutine or to a method call.
 
 By default, the function is
 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
-and the SV parameter is I<cv> itself.  This implements standard
+and the SV parameter is C<cv> itself.  This implements standard
 prototype processing.  It can be changed, for a particular subroutine,
 by L</cv_set_call_checker>.
 
@@ -11764,13 +11618,13 @@ Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
 /*
 =for apidoc Am|void|cv_set_call_checker_flags|CV *cv|Perl_call_checker ckfun|SV *ckobj|U32 flags
 
-Sets the function that will be used to fix up a call to I<cv>.
+Sets the function that will be used to fix up a call to C<cv>.
 Specifically, the function is applied to an C<entersub> op tree for a
 subroutine call, not marked with C<&>, where the callee can be identified
-at compile time as I<cv>.
+at compile time as C<cv>.
 
-The C-level function pointer is supplied in I<ckfun>, and an SV argument
-for it is supplied in I<ckobj>.  The function should be defined like this:
+The C-level function pointer is supplied in C<ckfun>, and an SV argument
+for it is supplied in C<ckobj>.  The function should be defined like this:
 
     STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
 
@@ -11778,17 +11632,17 @@ It is intended to be called in this manner:
 
     entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
 
-In this call, I<entersubop> is a pointer to the C<entersub> op,
-which may be replaced by the check function, and I<namegv> supplies
+In this call, C<entersubop> is a pointer to the C<entersub> op,
+which may be replaced by the check function, and C<namegv> supplies
 the name that should be used by the check function to refer
 to the callee of the C<entersub> op if it needs to emit any diagnostics.
 It is permitted to apply the check function in non-standard situations,
 such as to a call to a different subroutine or to a method call.
 
-I<namegv> may not actually be a GV.  For efficiency, perl may pass a
+C<namegv> may not actually be a GV.  For efficiency, perl may pass a
 CV or other SV instead.  Whatever is passed can be used as the first
 argument to L</cv_name>.  You can force perl to pass a GV by including
-C<CALL_CHECKER_REQUIRE_GV> in the I<flags>.
+C<CALL_CHECKER_REQUIRE_GV> in the C<flags>.
 
 The current setting for a particular CV can be retrieved by
 L</cv_get_call_checker>.
@@ -12095,6 +11949,418 @@ Perl_ck_length(pTHX_ OP *o)
     return o;
 }
 
+
+
+/* 
+   ---------------------------------------------------------
+   Common vars in list assignment
+
+   There now follows some enums and static functions for detecting
+   common variables in list assignments. Here is a little essay I wrote
+   for myself when trying to get my head around this. DAPM.
+
+   ----
+
+   First some random observations:
+   
+   * If a lexical var is an alias of something else, e.g.
+       for my $x ($lex, $pkg, $a[0]) {...}
+     then the act of aliasing will increase the reference count of the SV
+   
+   * If a package var is an alias of something else, it may still have a
+     reference count of 1, depending on how the alias was created, e.g.
+     in *a = *b, $a may have a refcount of 1 since the GP is shared
+     with a single GvSV pointer to the SV. So If it's an alias of another
+     package var, then RC may be 1; if it's an alias of another scalar, e.g.
+     a lexical var or an array element, then it will have RC > 1.
+   
+   * There are many ways to create a package alias; ultimately, XS code
+     may quite legally do GvSV(gv) = SvREFCNT_inc(sv) for example, so
+     run-time tracing mechanisms are unlikely to be able to catch all cases.
+   
+   * When the LHS is all my declarations, the same vars can't appear directly
+     on the RHS, but they can indirectly via closures, aliasing and lvalue
+     subs. But those techniques all involve an increase in the lexical
+     scalar's ref count.
+   
+   * When the LHS is all lexical vars (but not necessarily my declarations),
+     it is possible for the same lexicals to appear directly on the RHS, and
+     without an increased ref count, since the stack isn't refcounted.
+     This case can be detected at compile time by scanning for common lex
+     vars with PL_generation.
+   
+   * lvalue subs defeat common var detection, but they do at least
+     return vars with a temporary ref count increment. Also, you can't
+     tell at compile time whether a sub call is lvalue.
+   
+    
+   So...
+         
+   A: There are a few circumstances where there definitely can't be any
+     commonality:
+   
+       LHS empty:  () = (...);
+       RHS empty:  (....) = ();
+       RHS contains only constants or other 'can't possibly be shared'
+           elements (e.g. ops that return PADTMPs):  (...) = (1,2, length)
+           i.e. they only contain ops not marked as dangerous, whose children
+           are also not dangerous;
+       LHS ditto;
+       LHS contains a single scalar element: e.g. ($x) = (....); because
+           after $x has been modified, it won't be used again on the RHS;
+       RHS contains a single element with no aggregate on LHS: e.g.
+           ($a,$b,$c)  = ($x); again, once $a has been modified, its value
+           won't be used again.
+   
+   B: If LHS are all 'my' lexical var declarations (or safe ops, which
+     we can ignore):
+   
+       my ($a, $b, @c) = ...;
+   
+       Due to closure and goto tricks, these vars may already have content.
+       For the same reason, an element on the RHS may be a lexical or package
+       alias of one of the vars on the left, or share common elements, for
+       example:
+   
+           my ($x,$y) = f(); # $x and $y on both sides
+           sub f : lvalue { ($x,$y) = (1,2); $y, $x }
+   
+       and
+   
+           my $ra = f();
+           my @a = @$ra;  # elements of @a on both sides
+           sub f { @a = 1..4; \@a }
+   
+   
+       First, just consider scalar vars on LHS:
+   
+           RHS is safe only if (A), or in addition,
+               * contains only lexical *scalar* vars, where neither side's
+                 lexicals have been flagged as aliases 
+   
+           If RHS is not safe, then it's always legal to check LHS vars for
+           RC==1, since the only RHS aliases will always be associated
+           with an RC bump.
+   
+           Note that in particular, RHS is not safe if:
+   
+               * it contains package scalar vars; e.g.:
+   
+                   f();
+                   my ($x, $y) = (2, $x_alias);
+                   sub f { $x = 1; *x_alias = \$x; }
+   
+               * It contains other general elements, such as flattened or
+               * spliced or single array or hash elements, e.g.
+   
+                   f();
+                   my ($x,$y) = @a; # or $a[0] or @a{@b} etc 
+   
+                   sub f {
+                       ($x, $y) = (1,2);
+                       use feature 'refaliasing';
+                       \($a[0], $a[1]) = \($y,$x);
+                   }
+   
+                 It doesn't matter if the array/hash is lexical or package.
+   
+               * it contains a function call that happens to be an lvalue
+                 sub which returns one or more of the above, e.g.
+   
+                   f();
+                   my ($x,$y) = f();
+   
+                   sub f : lvalue {
+                       ($x, $y) = (1,2);
+                       *x1 = \$x;
+                       $y, $x1;
+                   }
+   
+                   (so a sub call on the RHS should be treated the same
+                   as having a package var on the RHS).
+   
+               * any other "dangerous" thing, such an op or built-in that
+                 returns one of the above, e.g. pp_preinc
+   
+   
+           If RHS is not safe, what we can do however is at compile time flag
+           that the LHS are all my declarations, and at run time check whether
+           all the LHS have RC == 1, and if so skip the full scan.
+   
+       Now consider array and hash vars on LHS: e.g. my (...,@a) = ...;
+   
+           Here the issue is whether there can be elements of @a on the RHS
+           which will get prematurely freed when @a is cleared prior to
+           assignment. This is only a problem if the aliasing mechanism
+           is one which doesn't increase the refcount - only if RC == 1
+           will the RHS element be prematurely freed.
+   
+           Because the array/hash is being INTROed, it or its elements
+           can't directly appear on the RHS:
+   
+               my (@a) = ($a[0], @a, etc) # NOT POSSIBLE
+   
+           but can indirectly, e.g.:
+   
+               my $r = f();
+               my (@a) = @$r;
+               sub f { @a = 1..3; \@a }
+   
+           So if the RHS isn't safe as defined by (A), we must always
+           mortalise and bump the ref count of any remaining RHS elements
+           when assigning to a non-empty LHS aggregate.
+   
+           Lexical scalars on the RHS aren't safe if they've been involved in
+           aliasing, e.g.
+   
+               use feature 'refaliasing';
+   
+               f();
+               \(my $lex) = \$pkg;
+               my @a = ($lex,3); # equivalent to ($a[0],3)
+   
+               sub f {
+                   @a = (1,2);
+                   \$pkg = \$a[0];
+               }
+   
+           Similarly with lexical arrays and hashes on the RHS:
+   
+               f();
+               my @b;
+               my @a = (@b);
+   
+               sub f {
+                   @a = (1,2);
+                   \$b[0] = \$a[1];
+                   \$b[1] = \$a[0];
+               }
+   
+   
+   
+   C: As (B), but in addition the LHS may contain non-intro lexicals, e.g.
+       my $a; ($a, my $b) = (....);
+   
+       The difference between (B) and (C) is that it is now physically
+       possible for the LHS vars to appear on the RHS too, where they
+       are not reference counted; but in this case, the compile-time
+       PL_generation sweep will detect such common vars.
+   
+       So the rules for (C) differ from (B) in that if common vars are
+       detected, the runtime "test RC==1" optimisation can no longer be used,
+       and a full mark and sweep is required
+   
+   D: As (C), but in addition the LHS may contain package vars.
+   
+       Since package vars can be aliased without a corresponding refcount
+       increase, all bets are off. It's only safe if (A). E.g.
+   
+           my ($x, $y) = (1,2);
+   
+           for $x_alias ($x) {
+               ($x_alias, $y) = (3, $x); # whoops
+           }
+   
+       Ditto for LHS aggregate package vars.
+   
+   E: Any other dangerous ops on LHS, e.g.
+           (f(), $a[0], @$r) = (...);
+   
+       this is similar to (E) in that all bets are off. In addition, it's
+       impossible to determine at compile time whether the LHS
+       contains a scalar or an aggregate, e.g.
+   
+           sub f : lvalue { @a }
+           (f()) = 1..3;
+
+* ---------------------------------------------------------
+*/
+
+
+/* A set of bit flags returned by S_aassign_scan(). Each flag indicates
+ * that at least one of the things flagged was seen.
+ */
+
+enum {
+    AAS_MY_SCALAR       = 0x001, /* my $scalar */
+    AAS_MY_AGG          = 0x002, /* aggregate: my @array or my %hash */
+    AAS_LEX_SCALAR      = 0x004, /* $lexical */
+    AAS_LEX_AGG         = 0x008, /* @lexical or %lexical aggregate */
+    AAS_LEX_SCALAR_COMM = 0x010, /* $lexical seen on both sides */
+    AAS_PKG_SCALAR      = 0x020, /* $scalar (where $scalar is pkg var) */
+    AAS_PKG_AGG         = 0x040, /* package @array or %hash aggregate */
+    AAS_DANGEROUS       = 0x080, /* an op (other than the above)
+                                         that's flagged OA_DANGEROUS */
+    AAS_SAFE_SCALAR     = 0x100, /* produces at least one scalar SV that's
+                                        not in any of the categories above */
+    AAS_DEFAV           = 0x200, /* contains just a single '@_' on RHS */
+};
+
+
+
+/* helper function for S_aassign_scan().
+ * check a PAD-related op for commonality and/or set its generation number.
+ * Returns a boolean indicating whether its shared */
+
+static bool
+S_aassign_padcheck(pTHX_ OP* o, bool rhs)
+{
+    if (PAD_COMPNAME_GEN(o->op_targ) == PERL_INT_MAX)
+        /* lexical used in aliasing */
+        return TRUE;
+
+    if (rhs)
+        return cBOOL(PAD_COMPNAME_GEN(o->op_targ) == (STRLEN)PL_generation);
+    else
+        PAD_COMPNAME_GEN_set(o->op_targ, PL_generation);
+
+    return FALSE;
+}
+
+
+/*
+  Helper function for OPpASSIGN_COMMON* detection in rpeep().
+  It scans the left or right hand subtree of the aassign op, and returns a
+  set of flags indicating what sorts of things it found there.
+  'rhs' indicates whether we're scanning the LHS or RHS. If the former, we
+  set PL_generation on lexical vars; if the latter, we see if
+  PL_generation matches.
+  'top' indicates whether we're recursing or at the top level.
+  'scalars_p' is a pointer to a counter of the number of scalar SVs seen.
+  This fn will increment it by the number seen. It's not intended to
+  be an accurate count (especially as many ops can push a variable
+  number of SVs onto the stack); rather it's used as to test whether there
+  can be at most 1 SV pushed; so it's only meanings are "0, 1, many".
+*/
+
+static int
+S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
+{
+    int flags = 0;
+    bool kid_top = FALSE;
+
+    /* first, look for a solitary @_ on the RHS */
+    if (   rhs
+        && top
+        && (o->op_flags & OPf_KIDS)
+        && OP_TYPE_IS_OR_WAS(o, OP_LIST)
+    ) {
+        OP *kid = cUNOPo->op_first;
+        if (   (   kid->op_type == OP_PUSHMARK
+                || kid->op_type == OP_PADRANGE) /* ex-pushmark */
+            && ((kid = OpSIBLING(kid)))
+            && !OpHAS_SIBLING(kid)
+            && kid->op_type == OP_RV2AV
+            && !(kid->op_flags & OPf_REF)
+            && !(kid->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
+            && ((kid->op_flags & OPf_WANT) == OPf_WANT_LIST)
+            && ((kid = cUNOPx(kid)->op_first))
+            && kid->op_type == OP_GV
+            && cGVOPx_gv(kid) == PL_defgv
+        )
+            flags |= AAS_DEFAV;
+    }
+
+    switch (o->op_type) {
+    case OP_GVSV:
+        (*scalars_p)++;
+        return AAS_PKG_SCALAR;
+
+    case OP_PADAV:
+    case OP_PADHV:
+        (*scalars_p) += 2;
+        if (top && (o->op_flags & OPf_REF))
+            return (o->op_private & OPpLVAL_INTRO)
+                ? AAS_MY_AGG : AAS_LEX_AGG;
+        return AAS_DANGEROUS;
+
+    case OP_PADSV:
+        {
+            int comm = S_aassign_padcheck(aTHX_ o, rhs)
+                        ?  AAS_LEX_SCALAR_COMM : 0;
+            (*scalars_p)++;
+            return (o->op_private & OPpLVAL_INTRO)
+                ? (AAS_MY_SCALAR|comm) : (AAS_LEX_SCALAR|comm);
+        }
+
+    case OP_RV2AV:
+    case OP_RV2HV:
+        (*scalars_p) += 2;
+        if (cUNOPx(o)->op_first->op_type != OP_GV)
+            return AAS_DANGEROUS; /* @{expr}, %{expr} */
+        /* @pkg, %pkg */
+        if (top && (o->op_flags & OPf_REF))
+            return AAS_PKG_AGG;
+        return AAS_DANGEROUS;
+
+    case OP_RV2SV:
+        (*scalars_p)++;
+        if (cUNOPx(o)->op_first->op_type != OP_GV) {
+            (*scalars_p) += 2;
+            return AAS_DANGEROUS; /* ${expr} */
+        }
+        return AAS_PKG_SCALAR; /* $pkg */
+
+    case OP_SPLIT:
+        if (cLISTOPo->op_first->op_type == OP_PUSHRE) {
+            /* "@foo = split... " optimises away the aassign and stores its
+             * destination array in the OP_PUSHRE that precedes it.
+             * A flattened array is always dangerous.
+             */
+            (*scalars_p) += 2;
+            return AAS_DANGEROUS;
+        }
+        break;
+
+    case OP_UNDEF:
+    case OP_PUSHMARK:
+    case OP_STUB:
+        /* these are all no-ops; they don't push a potentially common SV
+         * onto the stack, so they are neither AAS_DANGEROUS nor
+         * AAS_SAFE_SCALAR */
+        return 0;
+
+    case OP_PADRANGE: /* Ignore padrange; checking its siblings is enough */
+        break;
+
+    case OP_NULL:
+    case OP_LIST:
+        /* these do nothing but may have children; but their children
+         * should also be treated as top-level */
+        kid_top = top;
+        break;
+
+    default:
+        if (PL_opargs[o->op_type] & OA_DANGEROUS) {
+            (*scalars_p) += 2;
+            return AAS_DANGEROUS;
+        }
+
+        if (   (PL_opargs[o->op_type] & OA_TARGLEX)
+            && (o->op_private & OPpTARGET_MY))
+        {
+            (*scalars_p)++;
+            return S_aassign_padcheck(aTHX_ o, rhs)
+                ? AAS_LEX_SCALAR_COMM : AAS_LEX_SCALAR;
+        }
+
+        /* if its an unrecognised, non-dangerous op, assume that it
+         * it the cause of at least one safe scalar */
+        (*scalars_p)++;
+        flags = AAS_SAFE_SCALAR;
+        break;
+    }
+
+    if (o->op_flags & OPf_KIDS) {
+        OP *kid;
+        for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
+            flags |= S_aassign_scan(aTHX_ kid, rhs, kid_top, scalars_p);
+    }
+    return flags;
+}
+
+
 /* Check for in place reverse and sort assignments like "@a = reverse @a"
    and modify the optree to make them work inplace */
 
@@ -13939,28 +14205,99 @@ Perl_rpeep(pTHX_ OP *o)
            }
            break;
 
-       case OP_AASSIGN:
-           /* We do the common-vars check here, rather than in newASSIGNOP
-              (as formerly), so that all lexical vars that get aliased are
-              marked as such before we do the check.  */
-           /* There can’t be common vars if the lhs is a stub.  */
-           if (OpSIBLING(cLISTOPx(cBINOPo->op_last)->op_first)
-                   == cLISTOPx(cBINOPo->op_last)->op_last
-            && cLISTOPx(cBINOPo->op_last)->op_last->op_type == OP_STUB)
-           {
-               o->op_private &=~ OPpASSIGN_COMMON;
-               break;
-           }
-           if (o->op_private & OPpASSIGN_COMMON) {
-                /* See the comment before S_aassign_common_vars concerning
-                   PL_generation sorcery.  */
-               PL_generation++;
-               if (!aassign_common_vars(o))
-                   o->op_private &=~ OPpASSIGN_COMMON;
-           }
-           else if (S_aassign_common_vars_aliases_only(aTHX_ o))
-               o->op_private |= OPpASSIGN_COMMON;
+       case OP_AASSIGN: {
+            int l, r, lr, lscalars, rscalars;
+
+            /* handle common vars detection, e.g. ($a,$b) = ($b,$a).
+               Note that we do this now rather than in newASSIGNOP(),
+               since only by now are aliased lexicals flagged as such
+
+               See the essay "Common vars in list assignment" above for
+               the full details of the rationale behind all the conditions
+               below.
+
+               PL_generation sorcery:
+               To detect whether there are common vars, the global var
+               PL_generation is incremented for each assign op we scan.
+               Then we run through all the lexical variables on the LHS,
+               of the assignment, setting a spare slot in each of them to
+               PL_generation.  Then we scan the RHS, and if any lexicals
+               already have that value, we know we've got commonality.
+               Also, if the generation number is already set to
+               PERL_INT_MAX, then the variable is involved in aliasing, so
+               we also have potential commonality in that case.
+             */
+
+            PL_generation++;
+            /* scan LHS */
+            lscalars = 0;
+            l = S_aassign_scan(aTHX_ cLISTOPo->op_last,  FALSE, 1, &lscalars);
+            /* scan RHS */
+            rscalars = 0;
+            r = S_aassign_scan(aTHX_ cLISTOPo->op_first, TRUE, 1, &rscalars);
+            lr = (l|r);
+
+
+            /* After looking for things which are *always* safe, this main
+             * if/else chain selects primarily based on the type of the
+             * LHS, gradually working its way down from the more dangerous
+             * to the more restrictive and thus safer cases */
+
+            if (   !l                      /* () = ....; */
+                || !r                      /* .... = (); */
+                || !(l & ~AAS_SAFE_SCALAR) /* (undef, pos()) = ...; */
+                || !(r & ~AAS_SAFE_SCALAR) /* ... = (1,2,length,undef); */
+                || (lscalars < 2)          /* ($x) = ... */
+            ) {
+                NOOP; /* always safe */
+            }
+            else if (l & AAS_DANGEROUS) {
+                /* always dangerous */
+                o->op_private |= OPpASSIGN_COMMON_SCALAR;
+                o->op_private |= OPpASSIGN_COMMON_AGG;
+            }
+            else if (l & (AAS_PKG_SCALAR|AAS_PKG_AGG)) {
+                /* package vars are always dangerous - too many
+                 * aliasing possibilities */
+                if (l & AAS_PKG_SCALAR)
+                    o->op_private |= OPpASSIGN_COMMON_SCALAR;
+                if (l & AAS_PKG_AGG)
+                    o->op_private |= OPpASSIGN_COMMON_AGG;
+            }
+            else if (l & ( AAS_MY_SCALAR|AAS_MY_AGG
+                          |AAS_LEX_SCALAR|AAS_LEX_AGG))
+            {
+                /* LHS contains only lexicals and safe ops */
+
+                if (l & (AAS_MY_AGG|AAS_LEX_AGG))
+                    o->op_private |= OPpASSIGN_COMMON_AGG;
+
+                if (l & (AAS_MY_SCALAR|AAS_LEX_SCALAR)) {
+                    if (lr & AAS_LEX_SCALAR_COMM)
+                        o->op_private |= OPpASSIGN_COMMON_SCALAR;
+                    else if (   !(l & AAS_LEX_SCALAR)
+                             && (r & AAS_DEFAV))
+                    {
+                        /* falsely mark
+                         *    my (...) = @_
+                         * as scalar-safe for performance reasons.
+                         * (it will still have been marked _AGG if necessary */
+                        NOOP;
+                    }
+                    else if (r  & (AAS_PKG_SCALAR|AAS_PKG_AGG|AAS_DANGEROUS))
+                        o->op_private |= OPpASSIGN_COMMON_RC1;
+                }
+            }
+
+            /* ... = ($x)
+             * may have to handle aggregate on LHS, but we can't
+             * have common scalars*/
+            if (rscalars < 2)
+                o->op_private &=
+                        ~(OPpASSIGN_COMMON_SCALAR|OPpASSIGN_COMMON_RC1);
+
            break;
+        }
 
        case OP_CUSTOM: {
            Perl_cpeep_t cpeep = 
@@ -14362,12 +14699,12 @@ hook variables.
 
 Puts a C function into the chain of check functions for a specified op
 type.  This is the preferred way to manipulate the L</PL_check> array.
-I<opcode> specifies which type of op is to be affected.  I<new_checker>
+C<opcode> specifies which type of op is to be affected.  C<new_checker>
 is a pointer to the C function that is to be added to that opcode's
-check chain, and I<old_checker_p> points to the storage location where a
+check chain, and C<old_checker_p> points to the storage location where a
 pointer to the next function in the chain will be stored.  The value of
-I<new_pointer> is written into the L</PL_check> array, while the value
-previously stored there is written to I<*old_checker_p>.
+C<new_pointer> is written into the L</PL_check> array, while the value
+previously stored there is written to C<*old_checker_p>.
 
 The function should be defined like this:
 
@@ -14377,30 +14714,30 @@ It is intended to be called in this manner:
 
     new_checker(aTHX_ op)
 
-I<old_checker_p> should be defined like this:
+C<old_checker_p> should be defined like this:
 
     static Perl_check_t old_checker_p;
 
 L</PL_check> is global to an entire process, and a module wishing to
 hook op checking may find itself invoked more than once per process,
 typically in different threads.  To handle that situation, this function
-is idempotent.  The location I<*old_checker_p> must initially (once
+is idempotent.  The location C<*old_checker_p> must initially (once
 per process) contain a null pointer.  A C variable of static duration
 (declared at file scope, typically also marked C<static> to give
 it internal linkage) will be implicitly initialised appropriately,
 if it does not have an explicit initialiser.  This function will only
-actually modify the check chain if it finds I<*old_checker_p> to be null.
+actually modify the check chain if it finds C<*old_checker_p> to be null.
 This function is also thread safe on the small scale.  It uses appropriate
 locking to avoid race conditions in accessing L</PL_check>.
 
-When this function is called, the function referenced by I<new_checker>
-must be ready to be called, except for I<*old_checker_p> being unfilled.
-In a threading situation, I<new_checker> may be called immediately,
-even before this function has returned.  I<*old_checker_p> will always
-be appropriately set before I<new_checker> is called.  If I<new_checker>
+When this function is called, the function referenced by C<new_checker>
+must be ready to be called, except for C<*old_checker_p> being unfilled.
+In a threading situation, C<new_checker> may be called immediately,
+even before this function has returned.  C<*old_checker_p> will always
+be appropriately set before C<new_checker> is called.  If C<new_checker>
 decides not to do anything special with an op that it is given (which
 is the usual case for most uses of op check hooking), it must chain the
-check function referenced by I<*old_checker_p>.
+check function referenced by C<*old_checker_p>.
 
 If you want to influence compilation of calls to a specific subroutine,
 then use L</cv_set_call_checker> rather than hooking checking of all
diff --git a/op.h b/op.h
index ed3e9a1..95a2f05 100644 (file)
--- a/op.h
+++ b/op.h
@@ -613,7 +613,7 @@ struct loop {
 Given the root of an optree, link the tree in execution order using the
 C<op_next> pointers and return the first op executed.  If this has
 already been done, it will not be redone, and C<< o->op_next >> will be
-returned.  If C<< o->op_next >> is not already set, I<o> should be at
+returned.  If C<< o->op_next >> is not already set, C<o> should be at
 least an C<UNOP>.
 
 =cut
@@ -712,30 +712,30 @@ struct block_hooks {
 Return the BHK's flags.
 
 =for apidoc mx|void *|BhkENTRY|BHK *hk|which
-Return an entry from the BHK structure.  I<which> is a preprocessor token
+Return an entry from the BHK structure.  C<which> is a preprocessor token
 indicating which entry to return.  If the appropriate flag is not set
 this will return NULL.  The type of the return value depends on which
 entry you ask for.
 
 =for apidoc Amx|void|BhkENTRY_set|BHK *hk|which|void *ptr
 Set an entry in the BHK structure, and set the flags to indicate it is
-valid.  I<which> is a preprocessing token indicating which entry to set.
-The type of I<ptr> depends on the entry.
+valid.  C<which> is a preprocessing token indicating which entry to set.
+The type of C<ptr> depends on the entry.
 
 =for apidoc Amx|void|BhkDISABLE|BHK *hk|which
 Temporarily disable an entry in this BHK structure, by clearing the
-appropriate flag.  I<which> is a preprocessor token indicating which
+appropriate flag.  C<which> is a preprocessor token indicating which
 entry to disable.
 
 =for apidoc Amx|void|BhkENABLE|BHK *hk|which
 Re-enable an entry in this BHK structure, by setting the appropriate
-flag.  I<which> is a preprocessor token indicating which entry to enable.
+flag.  C<which> is a preprocessor token indicating which entry to enable.
 This will assert (under -DDEBUGGING) if the entry doesn't contain a valid
 pointer.
 
 =for apidoc mx|void|CALL_BLOCK_HOOKS|which|arg
-Call all the registered block hooks for type I<which>.  I<which> is a
-preprocessing token; the type of I<arg> depends on I<which>.
+Call all the registered block hooks for type C<which>.  C<which> is a
+preprocessing token; the type of C<arg> depends on C<which>.
 
 =cut
 */
@@ -810,19 +810,19 @@ preprocessing token; the type of I<arg> depends on I<which>.
 Return the XOP's flags.
 
 =for apidoc Am||XopENTRY|XOP *xop|which
-Return a member of the XOP structure.  I<which> is a cpp token
+Return a member of the XOP structure.  C<which> is a cpp token
 indicating which entry to return.  If the member is not set
 this will return a default value.  The return type depends
-on I<which>.  This macro evaluates its arguments more than
+on C<which>.  This macro evaluates its arguments more than
 once.  If you are using C<Perl_custom_op_xop> to retreive a
 C<XOP *> from a C<OP *>, use the more efficient L</XopENTRYCUSTOM> instead.
 
 =for apidoc Am||XopENTRYCUSTOM|const OP *o|which
 Exactly like C<XopENTRY(XopENTRY(Perl_custom_op_xop(aTHX_ o), which)> but more
-efficient.  The I<which> parameter is identical to L</XopENTRY>.
+efficient.  The C<which> parameter is identical to L</XopENTRY>.
 
 =for apidoc Am|void|XopENTRY_set|XOP *xop|which|value
-Set a member of the XOP structure.  I<which> is a cpp token
+Set a member of the XOP structure.  C<which> is a cpp token
 indicating which entry to set.  See L<perlguts/"Custom Operators">
 for details about the available members and how
 they are used.  This macro evaluates its argument
@@ -915,7 +915,7 @@ structures it uses.  For core ops this currently gets the information out
 of PL_opargs, which does not always accurately reflect the type used.
 For custom ops the type is returned from the registration, and it is up
 to the registree to ensure it is accurate.  The value returned will be
-one of the OA_* constants from op.h.
+one of the OA_* constants from F<op.h>.
 
 =for apidoc Am|bool|OP_TYPE_IS|OP *o|Optype type
 Returns true if the given OP is not a NULL pointer
index d314035..d6fd683 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -2219,6 +2219,7 @@ END_EXTERN_C
 #define OPpSORT_INPLACE         0x08
 #define OPpTRANS_SQUASH         0x08
 #define OPpARG4_MASK            0x0f
+#define OPpASSIGN_COMMON_AGG    0x10
 #define OPpCONST_ENTERED        0x10
 #define OPpDEREF_AV             0x10
 #define OPpEVAL_COPHH           0x10
@@ -2230,6 +2231,7 @@ END_EXTERN_C
 #define OPpSORT_DESCEND         0x10
 #define OPpSUBSTR_REPL_FIRST    0x10
 #define OPpTARGET_MY            0x10
+#define OPpASSIGN_COMMON_RC1    0x20
 #define OPpDEREF_HV             0x20
 #define OPpEARLY_CV             0x20
 #define OPpEVAL_RE_REPARSING    0x20
@@ -2247,7 +2249,7 @@ END_EXTERN_C
 #define OPpLVREF_TYPE           0x30
 #define OPpALLOW_FAKE           0x40
 #define OPpASSIGN_BACKWARDS     0x40
-#define OPpASSIGN_COMMON        0x40
+#define OPpASSIGN_COMMON_SCALAR 0x40
 #define OPpCONST_BARE           0x40
 #define OPpCOREARGS_SCALARMOD   0x40
 #define OPpENTERSUB_DB          0x40
@@ -2310,8 +2312,10 @@ EXTCONST char PL_op_private_labels[] = {
     'B','O','O','L','\0',
     'B','O','O','L','?','\0',
     'B','Y','T','E','S','\0',
-    'C','O','M','M','O','N','\0',
     'C','O','M','P','L','\0',
+    'C','O','M','_','A','G','G','\0',
+    'C','O','M','_','R','C','1','\0',
+    'C','O','M','_','S','C','A','L','A','R','\0',
     'C','O','N','S','T','\0',
     'C','O','P','H','H','\0',
     'C','V','\0',
@@ -2405,8 +2409,8 @@ EXTCONST I16 PL_op_private_bitfields[] = {
     0, 8, -1,
     0, 8, -1,
     0, 8, -1,
-    4, -1, 1, 137, 2, 144, 3, 151, -1,
-    4, -1, 0, 495, 1, 26, 2, 264, 3, 83, -1,
+    4, -1, 1, 157, 2, 164, 3, 171, -1,
+    4, -1, 0, 515, 1, 26, 2, 284, 3, 103, -1,
 
 };
 
@@ -2456,8 +2460,8 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
       68, /* aassign */
        0, /* chop */
        0, /* schop */
-      71, /* chomp */
-      71, /* schomp */
+      73, /* chomp */
+      73, /* schomp */
        0, /* defined */
        0, /* undef */
        0, /* study */
@@ -2470,22 +2474,22 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* i_postinc */
        0, /* postdec */
        0, /* i_postdec */
-      73, /* pow */
-      73, /* multiply */
-      73, /* i_multiply */
-      73, /* divide */
-      73, /* i_divide */
-      73, /* modulo */
-      73, /* i_modulo */
-      75, /* repeat */
-      73, /* add */
-      73, /* i_add */
-      73, /* subtract */
-      73, /* i_subtract */
-      73, /* concat */
-      77, /* stringify */
-      73, /* left_shift */
-      73, /* right_shift */
+      75, /* pow */
+      75, /* multiply */
+      75, /* i_multiply */
+      75, /* divide */
+      75, /* i_divide */
+      75, /* modulo */
+      75, /* i_modulo */
+      77, /* repeat */
+      75, /* add */
+      75, /* i_add */
+      75, /* subtract */
+      75, /* i_subtract */
+      75, /* concat */
+      79, /* stringify */
+      75, /* left_shift */
+      75, /* right_shift */
       12, /* lt */
       12, /* i_lt */
       12, /* gt */
@@ -2510,9 +2514,9 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
       12, /* bit_and */
       12, /* bit_xor */
       12, /* bit_or */
-      73, /* nbit_and */
-      73, /* nbit_xor */
-      73, /* nbit_or */
+      75, /* nbit_and */
+      75, /* nbit_xor */
+      75, /* nbit_or */
       12, /* sbit_and */
       12, /* sbit_xor */
       12, /* sbit_or */
@@ -2520,110 +2524,110 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* i_negate */
        0, /* not */
        0, /* complement */
-      71, /* ncomplement */
-      71, /* scomplement */
+      73, /* ncomplement */
+      73, /* scomplement */
       12, /* smartmatch */
-      77, /* atan2 */
-      71, /* sin */
-      71, /* cos */
-      77, /* rand */
-      77, /* srand */
-      71, /* exp */
-      71, /* log */
-      71, /* sqrt */
-      71, /* int */
-      71, /* hex */
-      71, /* oct */
-      71, /* abs */
-      71, /* length */
-      79, /* substr */
-      82, /* vec */
-      77, /* index */
-      77, /* rindex */
+      79, /* atan2 */
+      73, /* sin */
+      73, /* cos */
+      79, /* rand */
+      79, /* srand */
+      73, /* exp */
+      73, /* log */
+      73, /* sqrt */
+      73, /* int */
+      73, /* hex */
+      73, /* oct */
+      73, /* abs */
+      73, /* length */
+      81, /* substr */
+      84, /* vec */
+      79, /* index */
+      79, /* rindex */
       49, /* sprintf */
       49, /* formline */
-      71, /* ord */
-      71, /* chr */
-      77, /* crypt */
+      73, /* ord */
+      73, /* chr */
+      79, /* crypt */
        0, /* ucfirst */
        0, /* lcfirst */
        0, /* uc */
        0, /* lc */
        0, /* quotemeta */
-      84, /* rv2av */
-      90, /* aelemfast */
-      90, /* aelemfast_lex */
-      91, /* aelem */
-      96, /* aslice */
-      99, /* kvaslice */
+      86, /* rv2av */
+      92, /* aelemfast */
+      92, /* aelemfast_lex */
+      93, /* aelem */
+      98, /* aslice */
+     101, /* kvaslice */
        0, /* aeach */
        0, /* akeys */
        0, /* avalues */
        0, /* each */
        0, /* values */
       40, /* keys */
-     100, /* delete */
-     103, /* exists */
-     105, /* rv2hv */
-      91, /* helem */
-      96, /* hslice */
-      99, /* kvhslice */
-     113, /* multideref */
+     102, /* delete */
+     105, /* exists */
+     107, /* rv2hv */
+      93, /* helem */
+      98, /* hslice */
+     101, /* kvhslice */
+     115, /* multideref */
       49, /* unpack */
       49, /* pack */
-     120, /* split */
+     122, /* split */
       49, /* join */
-     122, /* list */
+     124, /* list */
       12, /* lslice */
       49, /* anonlist */
       49, /* anonhash */
       49, /* splice */
-      77, /* push */
+      79, /* push */
        0, /* pop */
        0, /* shift */
-      77, /* unshift */
-     124, /* sort */
-     131, /* reverse */
-     133, /* grepstart */
-     133, /* grepwhile */
-     133, /* mapstart */
-     133, /* mapwhile */
+      79, /* unshift */
+     126, /* sort */
+     133, /* reverse */
+     135, /* grepstart */
+     135, /* grepwhile */
+     135, /* mapstart */
+     135, /* mapwhile */
        0, /* range */
-     135, /* flip */
-     135, /* flop */
+     137, /* flip */
+     137, /* flop */
        0, /* and */
        0, /* or */
       12, /* xor */
        0, /* dor */
-     137, /* cond_expr */
+     139, /* cond_expr */
        0, /* andassign */
        0, /* orassign */
        0, /* dorassign */
        0, /* method */
-     139, /* entersub */
-     146, /* leavesub */
-     146, /* leavesublv */
-     148, /* caller */
+     141, /* entersub */
+     148, /* leavesub */
+     148, /* leavesublv */
+     150, /* caller */
       49, /* warn */
       49, /* die */
       49, /* reset */
       -1, /* lineseq */
-     150, /* nextstate */
-     150, /* dbstate */
+     152, /* nextstate */
+     152, /* dbstate */
       -1, /* unstack */
       -1, /* enter */
-     151, /* leave */
+     153, /* leave */
       -1, /* scope */
-     153, /* enteriter */
-     157, /* iter */
+     155, /* enteriter */
+     159, /* iter */
       -1, /* enterloop */
-     158, /* leaveloop */
+     160, /* leaveloop */
       -1, /* return */
-     160, /* last */
-     160, /* next */
-     160, /* redo */
-     160, /* dump */
-     160, /* goto */
+     162, /* last */
+     162, /* next */
+     162, /* redo */
+     162, /* dump */
+     162, /* goto */
       49, /* exit */
        0, /* method_named */
        0, /* method_super */
@@ -2635,7 +2639,7 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* leavewhen */
       -1, /* break */
       -1, /* continue */
-     162, /* open */
+     164, /* open */
       49, /* close */
       49, /* pipe_op */
       49, /* fileno */
@@ -2651,7 +2655,7 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
       49, /* getc */
       49, /* read */
       49, /* enterwrite */
-     146, /* leavewrite */
+     148, /* leavewrite */
       -1, /* prtf */
       -1, /* print */
       -1, /* say */
@@ -2665,7 +2669,7 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
       49, /* truncate */
       49, /* fcntl */
       49, /* ioctl */
-      77, /* flock */
+      79, /* flock */
       49, /* send */
       49, /* recv */
       49, /* socket */
@@ -2681,45 +2685,45 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* getpeername */
        0, /* lstat */
        0, /* stat */
-     167, /* ftrread */
-     167, /* ftrwrite */
-     167, /* ftrexec */
-     167, /* fteread */
-     167, /* ftewrite */
-     167, /* fteexec */
-     172, /* ftis */
-     172, /* ftsize */
-     172, /* ftmtime */
-     172, /* ftatime */
-     172, /* ftctime */
-     172, /* ftrowned */
-     172, /* fteowned */
-     172, /* ftzero */
-     172, /* ftsock */
-     172, /* ftchr */
-     172, /* ftblk */
-     172, /* ftfile */
-     172, /* ftdir */
-     172, /* ftpipe */
-     172, /* ftsuid */
-     172, /* ftsgid */
-     172, /* ftsvtx */
-     172, /* ftlink */
-     172, /* fttty */
-     172, /* fttext */
-     172, /* ftbinary */
-      77, /* chdir */
-      77, /* chown */
-      71, /* chroot */
-      77, /* unlink */
-      77, /* chmod */
-      77, /* utime */
-      77, /* rename */
-      77, /* link */
-      77, /* symlink */
+     169, /* ftrread */
+     169, /* ftrwrite */
+     169, /* ftrexec */
+     169, /* fteread */
+     169, /* ftewrite */
+     169, /* fteexec */
+     174, /* ftis */
+     174, /* ftsize */
+     174, /* ftmtime */
+     174, /* ftatime */
+     174, /* ftctime */
+     174, /* ftrowned */
+     174, /* fteowned */
+     174, /* ftzero */
+     174, /* ftsock */
+     174, /* ftchr */
+     174, /* ftblk */
+     174, /* ftfile */
+     174, /* ftdir */
+     174, /* ftpipe */
+     174, /* ftsuid */
+     174, /* ftsgid */
+     174, /* ftsvtx */
+     174, /* ftlink */
+     174, /* fttty */
+     174, /* fttext */
+     174, /* ftbinary */
+      79, /* chdir */
+      79, /* chown */
+      73, /* chroot */
+      79, /* unlink */
+      79, /* chmod */
+      79, /* utime */
+      79, /* rename */
+      79, /* link */
+      79, /* symlink */
        0, /* readlink */
-      77, /* mkdir */
-      71, /* rmdir */
+      79, /* mkdir */
+      73, /* rmdir */
       49, /* open_dir */
        0, /* readdir */
        0, /* telldir */
@@ -2727,22 +2731,22 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* rewinddir */
        0, /* closedir */
       -1, /* fork */
-     176, /* wait */
-      77, /* waitpid */
-      77, /* system */
-      77, /* exec */
-      77, /* kill */
-     176, /* getppid */
-      77, /* getpgrp */
-      77, /* setpgrp */
-      77, /* getpriority */
-      77, /* setpriority */
-     176, /* time */
+     178, /* wait */
+      79, /* waitpid */
+      79, /* system */
+      79, /* exec */
+      79, /* kill */
+     178, /* getppid */
+      79, /* getpgrp */
+      79, /* setpgrp */
+      79, /* getpriority */
+      79, /* setpriority */
+     178, /* time */
       -1, /* tms */
        0, /* localtime */
       49, /* gmtime */
        0, /* alarm */
-      77, /* sleep */
+      79, /* sleep */
       49, /* shmget */
       49, /* shmctl */
       49, /* shmread */
@@ -2757,8 +2761,8 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* require */
        0, /* dofile */
       -1, /* hintseval */
-     177, /* entereval */
-     146, /* leaveeval */
+     179, /* entereval */
+     148, /* leaveeval */
        0, /* entertry */
       -1, /* leavetry */
        0, /* ghbyname */
@@ -2796,17 +2800,17 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* lock */
        0, /* once */
       -1, /* custom */
-     183, /* coreargs */
+     185, /* coreargs */
        3, /* runcv */
        0, /* fc */
       -1, /* padcv */
       -1, /* introcv */
       -1, /* clonecv */
-     187, /* padrange */
-     189, /* refassign */
-     195, /* lvref */
-     201, /* lvrefslice */
-     202, /* lvavref */
+     189, /* padrange */
+     191, /* refassign */
+     197, /* lvref */
+     203, /* lvrefslice */
+     204, /* lvavref */
        0, /* anonconst */
 
 };
@@ -2827,68 +2831,68 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
 
 EXTCONST U16  PL_op_private_bitdefs[] = {
     0x0003, /* scalar, prototype, refgen, srefgen, ref, readline, regcmaybe, regcreset, regcomp, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, akeys, avalues, each, values, pop, shift, range, and, or, dor, andassign, orassign, dorassign, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst */
-    0x29dc, 0x3bd9, /* pushmark */
+    0x2c5c, 0x3e59, /* pushmark */
     0x00bd, /* wantarray, runcv */
-    0x03b8, 0x1570, 0x3c8c, 0x3748, 0x2da5, /* const */
-    0x29dc, 0x2ef9, /* gvsv */
-    0x13d5, /* gv */
+    0x03b8, 0x17f0, 0x3f0c, 0x39c8, 0x3025, /* const */
+    0x2c5c, 0x3179, /* gvsv */
+    0x1655, /* gv */
     0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, seq, sne, scmp, bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, smartmatch, lslice, xor */
-    0x29dc, 0x3bd8, 0x0257, /* padsv */
-    0x29dc, 0x3bd8, 0x2acc, 0x38c9, /* padav */
-    0x29dc, 0x3bd8, 0x0534, 0x05d0, 0x2acc, 0x38c9, /* padhv */
-    0x3698, 0x3ef1, /* pushre, match, qr, subst */
-    0x29dc, 0x1758, 0x0256, 0x2acc, 0x2cc8, 0x3c84, 0x0003, /* rv2gv */
-    0x29dc, 0x2ef8, 0x0256, 0x3c84, 0x0003, /* rv2sv */
-    0x2acc, 0x0003, /* av2arylen, pos, keys */
-    0x2c3c, 0x0b98, 0x08f4, 0x028c, 0x3e48, 0x3c84, 0x0003, /* rv2cv */
+    0x2c5c, 0x3e58, 0x0257, /* padsv */
+    0x2c5c, 0x3e58, 0x2d4c, 0x3b49, /* padav */
+    0x2c5c, 0x3e58, 0x0534, 0x05d0, 0x2d4c, 0x3b49, /* padhv */
+    0x3918, 0x4171, /* pushre, match, qr, subst */
+    0x2c5c, 0x19d8, 0x0256, 0x2d4c, 0x2f48, 0x3f04, 0x0003, /* rv2gv */
+    0x2c5c, 0x3178, 0x0256, 0x3f04, 0x0003, /* rv2sv */
+    0x2d4c, 0x0003, /* av2arylen, pos, keys */
+    0x2ebc, 0x0e18, 0x0b74, 0x028c, 0x40c8, 0x3f04, 0x0003, /* rv2cv */
     0x012f, /* bless, glob, sprintf, formline, unpack, pack, join, anonlist, anonhash, splice, warn, die, reset, exit, close, pipe_op, fileno, umask, binmode, tie, dbmopen, sselect, select, getc, read, enterwrite, sysopen, sysseek, sysread, syswrite, eof, tell, seek, truncate, fcntl, ioctl, send, recv, socket, sockpair, bind, connect, listen, accept, shutdown, gsockopt, ssockopt, open_dir, seekdir, gmtime, shmget, shmctl, shmread, shmwrite, msgget, msgctl, msgsnd, msgrcv, semop, semget, semctl, ghbyaddr, gnbyaddr, gpbynumber, gsbyname, gsbyport, syscall */
-    0x30dc, 0x2ff8, 0x24b4, 0x23f0, 0x0003, /* backtick */
-    0x3698, 0x0003, /* substcont */
-    0x0c9c, 0x1dd8, 0x0834, 0x3ef0, 0x3a0c, 0x2168, 0x01e4, 0x0141, /* trans, transr */
-    0x0adc, 0x0458, 0x0067, /* sassign */
-    0x0758, 0x2acc, 0x0067, /* aassign */
-    0x3ef0, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, length, ord, chr, chroot, rmdir */
-    0x3ef0, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, concat, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */
-    0x1058, 0x0067, /* repeat */
-    0x3ef0, 0x012f, /* stringify, atan2, rand, srand, index, rindex, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */
-    0x33f0, 0x2acc, 0x00cb, /* substr */
-    0x2acc, 0x0067, /* vec */
-    0x29dc, 0x2ef8, 0x2acc, 0x38c8, 0x3c84, 0x0003, /* rv2av */
+    0x335c, 0x3278, 0x2734, 0x2670, 0x0003, /* backtick */
+    0x3918, 0x0003, /* substcont */
+    0x0f1c, 0x2058, 0x0754, 0x4170, 0x3c8c, 0x23e8, 0x01e4, 0x0141, /* trans, transr */
+    0x0d5c, 0x0458, 0x0067, /* sassign */
+    0x0a18, 0x0914, 0x0810, 0x2d4c, 0x0067, /* aassign */
+    0x4170, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, length, ord, chr, chroot, rmdir */
+    0x4170, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, concat, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */
+    0x12d8, 0x0067, /* repeat */
+    0x4170, 0x012f, /* stringify, atan2, rand, srand, index, rindex, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */
+    0x3670, 0x2d4c, 0x00cb, /* substr */
+    0x2d4c, 0x0067, /* vec */
+    0x2c5c, 0x3178, 0x2d4c, 0x3b48, 0x3f04, 0x0003, /* rv2av */
     0x01ff, /* aelemfast, aelemfast_lex */
-    0x29dc, 0x28d8, 0x0256, 0x2acc, 0x0067, /* aelem, helem */
-    0x29dc, 0x2acc, 0x38c9, /* aslice, hslice */
-    0x2acd, /* kvaslice, kvhslice */
-    0x29dc, 0x3818, 0x0003, /* delete */
-    0x3d78, 0x0003, /* exists */
-    0x29dc, 0x2ef8, 0x0534, 0x05d0, 0x2acc, 0x38c8, 0x3c84, 0x0003, /* rv2hv */
-    0x29dc, 0x28d8, 0x0d14, 0x1670, 0x2acc, 0x3c84, 0x0003, /* multideref */
-    0x223c, 0x2ef9, /* split */
-    0x29dc, 0x1e99, /* list */
-    0x3af8, 0x3194, 0x0fb0, 0x254c, 0x34e8, 0x2644, 0x2e61, /* sort */
-    0x254c, 0x0003, /* reverse */
-    0x1cc4, 0x0003, /* grepstart, grepwhile, mapstart, mapwhile */
-    0x2778, 0x0003, /* flip, flop */
-    0x29dc, 0x0003, /* cond_expr */
-    0x29dc, 0x0b98, 0x0256, 0x028c, 0x3e48, 0x3c84, 0x2301, /* entersub */
-    0x3258, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
+    0x2c5c, 0x2b58, 0x0256, 0x2d4c, 0x0067, /* aelem, helem */
+    0x2c5c, 0x2d4c, 0x3b49, /* aslice, hslice */
+    0x2d4d, /* kvaslice, kvhslice */
+    0x2c5c, 0x3a98, 0x0003, /* delete */
+    0x3ff8, 0x0003, /* exists */
+    0x2c5c, 0x3178, 0x0534, 0x05d0, 0x2d4c, 0x3b48, 0x3f04, 0x0003, /* rv2hv */
+    0x2c5c, 0x2b58, 0x0f94, 0x18f0, 0x2d4c, 0x3f04, 0x0003, /* multideref */
+    0x24bc, 0x3179, /* split */
+    0x2c5c, 0x2119, /* list */
+    0x3d78, 0x3414, 0x1230, 0x27cc, 0x3768, 0x28c4, 0x30e1, /* sort */
+    0x27cc, 0x0003, /* reverse */
+    0x1f44, 0x0003, /* grepstart, grepwhile, mapstart, mapwhile */
+    0x29f8, 0x0003, /* flip, flop */
+    0x2c5c, 0x0003, /* cond_expr */
+    0x2c5c, 0x0e18, 0x0256, 0x028c, 0x40c8, 0x3f04, 0x2581, /* entersub */
+    0x34d8, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
     0x00bc, 0x012f, /* caller */
-    0x2075, /* nextstate, dbstate */
-    0x287c, 0x3259, /* leave */
-    0x29dc, 0x2ef8, 0x0c0c, 0x3569, /* enteriter */
-    0x3569, /* iter */
-    0x287c, 0x0067, /* leaveloop */
-    0x405c, 0x0003, /* last, next, redo, dump, goto */
-    0x30dc, 0x2ff8, 0x24b4, 0x23f0, 0x012f, /* open */
-    0x1910, 0x1b6c, 0x1a28, 0x17e4, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */
-    0x1910, 0x1b6c, 0x1a28, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */
-    0x3ef1, /* wait, getppid, time */
-    0x32f4, 0x09b0, 0x068c, 0x3fc8, 0x1f84, 0x0003, /* entereval */
-    0x2b9c, 0x0018, 0x0ec4, 0x0de1, /* coreargs */
-    0x29dc, 0x019b, /* padrange */
-    0x29dc, 0x3bd8, 0x0376, 0x26cc, 0x14c8, 0x0067, /* refassign */
-    0x29dc, 0x3bd8, 0x0376, 0x26cc, 0x14c8, 0x0003, /* lvref */
-    0x29dd, /* lvrefslice */
-    0x29dc, 0x3bd8, 0x0003, /* lvavref */
+    0x22f5, /* nextstate, dbstate */
+    0x2afc, 0x34d9, /* leave */
+    0x2c5c, 0x3178, 0x0e8c, 0x37e9, /* enteriter */
+    0x37e9, /* iter */
+    0x2afc, 0x0067, /* leaveloop */
+    0x42dc, 0x0003, /* last, next, redo, dump, goto */
+    0x335c, 0x3278, 0x2734, 0x2670, 0x012f, /* open */
+    0x1b90, 0x1dec, 0x1ca8, 0x1a64, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */
+    0x1b90, 0x1dec, 0x1ca8, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */
+    0x4171, /* wait, getppid, time */
+    0x3574, 0x0c30, 0x068c, 0x4248, 0x2204, 0x0003, /* entereval */
+    0x2e1c, 0x0018, 0x1144, 0x1061, /* coreargs */
+    0x2c5c, 0x019b, /* padrange */
+    0x2c5c, 0x3e58, 0x0376, 0x294c, 0x1748, 0x0067, /* refassign */
+    0x2c5c, 0x3e58, 0x0376, 0x294c, 0x1748, 0x0003, /* lvref */
+    0x2c5d, /* lvrefslice */
+    0x2c5c, 0x3e58, 0x0003, /* lvavref */
 
 };
 
@@ -2935,7 +2939,7 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* TRANS      */ (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTARGET_MY|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
     /* TRANSR     */ (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTARGET_MY|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
     /* SASSIGN    */ (OPpARG2_MASK|OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV),
-    /* AASSIGN    */ (OPpARG2_MASK|OPpMAYBE_LVSUB|OPpASSIGN_COMMON),
+    /* AASSIGN    */ (OPpARG2_MASK|OPpMAYBE_LVSUB|OPpASSIGN_COMMON_AGG|OPpASSIGN_COMMON_RC1|OPpASSIGN_COMMON_SCALAR),
     /* CHOP       */ (OPpARG1_MASK),
     /* SCHOP      */ (OPpARG1_MASK),
     /* CHOMP      */ (OPpARG1_MASK|OPpTARGET_MY),
similarity index 99%
rename from overload.c
rename to overload.inc
index 3cf64c7..2383ef2 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- buffer-read-only: t -*-
  *
- *    overload.c
+ *    overload.inc
  *
  *    Copyright (C) 1997, 1998, 2000, 2001, 2005, 2006, 2007, 2011
  *    by Larry Wall and others
similarity index 100%
rename from packsizetables.c
rename to packsizetables.inc
diff --git a/pad.c b/pad.c
index f5ce5f5..d8cb545 100644 (file)
--- a/pad.c
+++ b/pad.c
@@ -532,10 +532,10 @@ Perl_cv_forget_slab(pTHX_ CV *cv)
 
 Allocates a place in the currently-compiling
 pad (via L<perlapi/pad_alloc>) and
-then stores a name for that entry.  I<name> is adopted and
+then stores a name for that entry.  C<name> is adopted and
 becomes the name entry; it must already contain the name
-string.  I<typestash> and I<ourstash> and the C<padadd_STATE>
-flag get added to I<name>.  None of the other
+string.  C<typestash> and C<ourstash> and the C<padadd_STATE>
+flag get added to C<name>.  None of the other
 processing of L<perlapi/pad_add_name_pvn>
 is done.  Returns the offset of the allocated pad slot.
 
@@ -580,9 +580,9 @@ variable.  Stores the name and other metadata in the name part of the
 pad, and makes preparations to manage the variable's lexical scoping.
 Returns the offset of the allocated pad slot.
 
-I<namepv>/I<namelen> specify the variable's name, including leading sigil.
-If I<typestash> is non-null, the name is for a typed lexical, and this
-identifies the type.  If I<ourstash> is non-null, it's a lexical reference
+C<namepv>/C<namelen> specify the variable's name, including leading sigil.
+If C<typestash> is non-null, the name is for a typed lexical, and this
+identifies the type.  If C<ourstash> is non-null, it's a lexical reference
 to a package variable, and this identifies the package.  The following
 flags can be OR'ed together:
 
@@ -686,7 +686,7 @@ Perl_pad_add_name_sv(pTHX_ SV *name, U32 flags, HV *typestash, HV *ourstash)
 Allocates a place in the currently-compiling pad,
 returning the offset of the allocated pad slot.
 No name is initially attached to the pad slot.
-I<tmptype> is a set of flags indicating the kind of pad entry required,
+C<tmptype> is a set of flags indicating the kind of pad entry required,
 which will be set in the value SV for the allocated pad entry:
 
     SVs_PADMY    named lexical variable ("my", "our", "state")
@@ -699,7 +699,7 @@ does not cause the SV in the pad slot to be marked read-only, but simply
 tells C<pad_alloc> that it I<will> be made read-only (by the caller), or at
 least should be treated as such.
 
-I<optype> should be an opcode indicating the type of operation that the
+C<optype> should be an opcode indicating the type of operation that the
 pad entry is to support.  This doesn't affect operational semantics,
 but is used for debugging.
 
@@ -789,12 +789,12 @@ Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype)
 Allocates a place in the currently-compiling pad (via L</pad_alloc>)
 for an anonymous function that is lexically scoped inside the
 currently-compiling function.
-The function I<func> is linked into the pad, and its C<CvOUTSIDE> link
+The function C<func> is linked into the pad, and its C<CvOUTSIDE> link
 to the outer scope is weakened to avoid a reference loop.
 
 One reference count is stolen, so you may need to do C<SvREFCNT_inc(func)>.
 
-I<optype> should be an opcode indicating the type of operation that the
+C<optype> should be an opcode indicating the type of operation that the
 pad entry is to support.  This doesn't affect operational semantics,
 but is used for debugging.
 
@@ -936,8 +936,8 @@ S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash)
 
 Given the name of a lexical variable, find its position in the
 currently-compiling pad.
-I<namepv>/I<namelen> specify the variable's name, including leading sigil.
-I<flags> is reserved and must be zero.
+C<namepv>/C<namelen> specify the variable's name, including leading sigil.
+C<flags> is reserved and must be zero.
 If it is not in the current pad but appears in the pad of any lexically
 enclosing scope, then a pseudo-entry for it is added in the current pad.
 Returns the offset in the current pad,
@@ -1382,7 +1382,7 @@ S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv,
 /*
 =for apidoc Am|SV *|pad_sv|PADOFFSET po
 
-Get the value at offset I<po> in the current (compiling or executing) pad.
+Get the value at offset C<po> in the current (compiling or executing) pad.
 Use macro PAD_SV instead of calling this function directly.
 
 =cut
@@ -1405,7 +1405,7 @@ Perl_pad_sv(pTHX_ PADOFFSET po)
 /*
 =for apidoc Am|void|pad_setsv|PADOFFSET po|SV *sv
 
-Set the value at offset I<po> in the current (compiling or executing) pad.
+Set the value at offset C<po> in the current (compiling or executing) pad.
 Use the macro PAD_SETSV() rather than calling this function directly.
 
 =cut
@@ -1667,7 +1667,7 @@ S_pad_reset(pTHX)
 
 Tidy up a pad at the end of compilation of the code to which it belongs.
 Jobs performed here are: remove most stuff from the pads of anonsub
-prototypes; give it a @_; mark temporaries as such.  I<type> indicates
+prototypes; give it a @_; mark temporaries as such.  C<type> indicates
 the kind of subroutine:
 
     padtidy_SUB        ordinary subroutine
@@ -1939,7 +1939,7 @@ S_cv_dump(pTHX_ const CV *cv, const char *title)
 /*
 =for apidoc Am|CV *|cv_clone|CV *proto
 
-Clone a CV, making a lexical closure.  I<proto> supplies the prototype
+Clone a CV, making a lexical closure.  C<proto> supplies the prototype
 of the function: its code, pad structure, and other attributes.
 The prototype is combined with a capture of outer lexicals to which the
 code refers, which are taken from the currently-executing instance of
@@ -2333,7 +2333,7 @@ An SV may be passed as a second argument.  If so, the name will be assigned
 to it and it will be returned.  Otherwise the returned SV will be a new
 mortal.
 
-If the I<flags> include CV_NAME_NOTQUAL, then the package name will not be
+If the C<flags> include CV_NAME_NOTQUAL, then the package name will not be
 included.  If the first argument is neither a CV nor a GV, this flag is
 ignored (subject to change).
 
@@ -2782,7 +2782,7 @@ Perl_padnamelist_dup(pTHX_ PADNAMELIST *srcpad, CLONE_PARAMS *param)
 /*
 =for apidoc newPADNAMEpvn
 
-Constructs and returns a new pad name.  I<s> must be a UTF8 string.  Do not
+Constructs and returns a new pad name.  C<s> must be a UTF8 string.  Do not
 use this for pad names that point to outer lexicals.  See
 L</newPADNAMEouter>.
 
@@ -2813,7 +2813,7 @@ Perl_newPADNAMEpvn(const char *s, STRLEN len)
 =for apidoc newPADNAMEouter
 
 Constructs and returns a new pad name.  Only use this function for names
-that refer to outer lexicals.  (See also L</newPADNAMEpvn>.)  I<outer> is
+that refer to outer lexicals.  (See also L</newPADNAMEpvn>.)  C<outer> is
 the outer pad name that this one mirrors.  The returned pad name has the
 PADNAMEt_OUTER flag already set.
 
diff --git a/pad.h b/pad.h
index 9e3caa6..ab46cf4 100644 (file)
--- a/pad.h
+++ b/pad.h
@@ -441,12 +441,11 @@ Assumes the slot entry is a valid C<our> lexical.
 
 =for apidoc m|STRLEN|PAD_COMPNAME_GEN|PADOFFSET po
 The generation number of the name at offset C<po> in the current
-compiling pad (lvalue).  Note that C<SvUVX> is hijacked for this purpose.
+compiling pad (lvalue).
 
 =for apidoc m|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen
 Sets the generation number of the name at offset C<po> in the current
-ling pad (lvalue) to C<gen>.  Note that C<SvUV_set> is hijacked for this purpose.
-
+ling pad (lvalue) to C<gen>.
 =cut
 
 */
index 0026313..a1b838d 100644 (file)
@@ -15,7 +15,7 @@
 
 #define PERL_REVISION  5               /* age */
 #define PERL_VERSION   23              /* epoch */
-#define PERL_SUBVERSION        1               /* generation */
+#define PERL_SUBVERSION        2               /* generation */
 
 /* The following numbers describe the earliest compatible version of
    Perl ("compatibility" here being defined as sufficient binary/API
@@ -36,7 +36,7 @@
 */
 #define PERL_API_REVISION      5
 #define PERL_API_VERSION       23
-#define PERL_API_SUBVERSION    1
+#define PERL_API_SUBVERSION    2
 /*
    XXX Note:  The selection of non-default Configure options, such
    as -Duselonglong may invalidate these settings.  Currently, Configure
diff --git a/perl.c b/perl.c
index cbb66e0..303e1f2 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -389,9 +389,9 @@ perl_construct(pTHXx)
     PL_XPosix_ptrs[_CC_VERTSPACE] = _new_invlist_C_array(VertSpace_invlist);
     PL_XPosix_ptrs[_CC_WORDCHAR] = _new_invlist_C_array(XPosixWord_invlist);
     PL_XPosix_ptrs[_CC_XDIGIT] = _new_invlist_C_array(XPosixXDigit_invlist);
-    PL_GCB_invlist = _new_invlist_C_array(Grapheme_Cluster_Break_invlist);
-    PL_SB_invlist = _new_invlist_C_array(Sentence_Break_invlist);
-    PL_WB_invlist = _new_invlist_C_array(Word_Break_invlist);
+    PL_GCB_invlist = _new_invlist_C_array(_Perl_GCB_invlist);
+    PL_SB_invlist = _new_invlist_C_array(_Perl_SB_invlist);
+    PL_WB_invlist = _new_invlist_C_array(_Perl_WB_invlist);
 
     ENTER;
 }
@@ -2664,8 +2664,22 @@ Perl_call_method(pTHX_ const char *methname, I32 flags)
 /*
 =for apidoc p||call_sv
 
-Performs a callback to the Perl sub whose name is in the SV.  See
-L<perlcall>.
+Performs a callback to the Perl sub specified by the SV.
+
+If neither the C<G_METHOD> nor C<G_METHOD_NAMED> flag is supplied, the
+SV may be any of a CV, a GV, a reference to a CV, a reference to a GV
+or C<SvPV(sv)> will be used as the name of the sub to call.
+
+If the C<G_METHOD> flag is supplied, the SV may be a reference to a CV or
+C<SvPV(sv)> will be used as the name of the method to call.
+
+If the C<G_METHOD_NAMED> flag is supplied, C<SvPV(sv)> will be used as
+the name of the method to call.
+
+Some other values are treated specially for internal use and should
+not be depended on.
+
+See L<perlcall>.
 
 =cut
 */
@@ -5066,7 +5080,7 @@ read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen)
 
 /* removes boilerplate code at the end of each boot_Module xsub */
 void
-Perl_xs_boot_epilog(pTHX_ const U32 ax)
+Perl_xs_boot_epilog(pTHX_ const I32 ax)
 {
   if (PL_unitcheckav)
        call_list(PL_scopestack_ix, PL_unitcheckav);
diff --git a/perl.h b/perl.h
index bcfeee9..7138e8a 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -4779,7 +4779,14 @@ EXTCONST  unsigned char PL_mod_latin1_uc[] = {
        192,    193,    194,    195,    196,    197,    198,    199,
        200,    201,    202,    203,    204,    205,    206,    207,
        208,    209,    210,    211,    212,    213,    214,    215,
-       216,    217,    218,    219,    220,    221,    222,    255 /*sharp s*/,        
+       216,    217,    218,    219,    220,    221,    222,
+#if    UNICODE_MAJOR_VERSION > 2                                        \
+   || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1          \
+                                  && UNICODE_DOT_DOT_VERSION >= 8)
+                                                               255 /*sharp s*/,
+#else   /* uc() is itself in early unicode */
+                                                               223,
+#endif
        224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32,
        232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32,
        240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247,
@@ -5767,6 +5774,8 @@ typedef struct am_table_short AMTS;
 #define PERLDB_SAVESRC_NOSUBS  (PL_perldb & PERLDBf_SAVESRC_NOSUBS)
 #define PERLDB_SAVESRC_INVALID (PL_perldb & PERLDBf_SAVESRC_INVALID)
 
+#define PERLDB_LINE_OR_SAVESRC (PL_perldb & (PERLDBf_LINE | PERLDBf_SAVESRC))
+
 #ifdef USE_LOCALE
 /* These locale things are all subject to change */
 /* Returns TRUE if the plain locale pragma without a parameter is in effect
@@ -6673,6 +6682,10 @@ extern void moncontrol(int);
  * This means that in this format there are 61 bits available
  * for the nan payload.
  *
+ * Note that the 32-bit x86 ABI cannot do signaling nans: the x87
+ * simply cannot preserve the bit.  You can either use the 80-bit
+ * extended precision (long double, -Duselongdouble), or use x86-64.
+ *
  * In all platforms, the payload bytes (and bits, some of them are
  * often in a partial byte) themselves can be either all zero (x86),
  * all one (sparc or mips), or a mixture: in IEEE 754 128-bit double
@@ -6788,9 +6801,9 @@ extern void moncontrol(int);
  * for the quiet/signaling */
 #define NV_NAN_QS_BIT_OFFSET \
     (8 * (NV_NAN_QS_BYTE_OFFSET) + (NV_NAN_QS_BIT_SHIFT))
-/* NV_NAN_QS_QUIET (always defined) is one if the NV_NAN_QS_QS_BIT being
- * on/one indicates quiet NaN. NV_NAN_QS_SIGNALING (also always defined)
- * is on/one if the NV_NAN_QS_BIT being one indicates signaling NaN. */
+/* NV_NAN_QS_QUIET (always defined) is true if the NV_NAN_QS_QS_BIT being
+ * on indicates quiet NaN.  NV_NAN_QS_SIGNALING (also always defined)
+ * is true if the NV_NAN_QS_BIT being on indicates signaling NaN. */
 #define NV_NAN_QS_QUIET \
     ((NV_NAN_QS_BYTE(PL_nan.u8) & NV_NAN_QS_BIT) == NV_NAN_QS_BIT)
 #define NV_NAN_QS_SIGNALING (!(NV_NAN_QS_QUIET))
index b5d5959..ae8cbc9 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -338,29 +338,6 @@ Perl_boot_core_PerlIO(pTHX)
 #endif
 
 
-#ifdef PERLIO_IS_STDIO
-
-void
-PerlIO_init(pTHX)
-{
-    PERL_UNUSED_CONTEXT;
-    /*
-     * Does nothing (yet) except force this file to be included in perl
-     * binary. That allows this file to force inclusion of other functions
-     * that may be required by loadable extensions e.g. for
-     * FileHandle::tmpfile
-     */
-}
-
-#undef PerlIO_tmpfile
-PerlIO *
-PerlIO_tmpfile(void)
-{
-    return tmpfile();
-}
-
-#else                           /* PERLIO_IS_STDIO */
-
 /*======================================================================================*/
 /*
  * Implement all the PerlIO interface ourselves.
@@ -5093,7 +5070,6 @@ Perl_PerlIO_restore_errno(pTHX_ PerlIO *f)
 #undef HAS_FSETPOS
 #undef HAS_FGETPOS
 
-#endif                          /* PERLIO_IS_STDIO */
 
 /*======================================================================================*/
 /*
index 8e700fe..1a3d480 100644 (file)
--- a/perlio.h
+++ b/perlio.h
 /*
   Interface for perl to IO functions.
   There is a hierarchy of Configure determined #define controls:
-   USE_STDIO   - forces PerlIO_xxx() to be #define-d onto stdio functions.
-                 This is used for conservative
-                 builds - "just like perl5.00X used to be".
-                 This dominates over the others.
+   USE_STDIO   - No longer available via Configure.  Formerly forced
+                 PerlIO_xxx() to be #define-d onto stdio functions.
+                 Now generates compile-time error.
 
    USE_PERLIO  - The primary Configure variable that enables PerlIO.
-                 If USE_PERLIO is _NOT_ set
-                   then USE_STDIO above will be set to be conservative.
                  PerlIO_xxx() are real functions
                  defined in perlio.c which implement extra functionality
                  required for utf8 support.
 
-   One further note - the table-of-functions scheme controlled
-   by PERL_IMPLICIT_SYS turns on USE_PERLIO so that iperlsys.h can
-   #define PerlIO_xxx() to go via the function table, without having
-   to #undef them from (say) stdio forms.
-
 */
 
-#if defined(PERL_IMPLICIT_SYS)
-#ifndef USE_PERLIO
-#ifndef NETWARE
-/* # define USE_PERLIO */
-#endif
-#endif
-#endif
-
 #ifndef USE_PERLIO
 # define USE_STDIO
 #endif
 
 #ifdef USE_STDIO
-#  ifndef PERLIO_IS_STDIO
-#      define PERLIO_IS_STDIO
-#  endif
+#  error "stdio is no longer supported as the default base layer -- use perlio."
 #endif
 
 /* --------------------  End of Configure controls ---------------------------- */
 #undef O_BINARY
 #endif
 
-#ifdef PERLIO_IS_STDIO
-/* #define PerlIO_xxxx() as equivalent stdio function */
-#include "perlsdio.h"
-#endif                         /* PERLIO_IS_STDIO */
-
 #ifndef PerlIO
 /* ----------- PerlIO implementation ---------- */
 /* PerlIO not #define-d to something else - define the implementation */
@@ -111,27 +88,24 @@ PERL_CALLCONV void PerlIO_clone(pTHX_ PerlInterpreter *proto,
 
 /* ----------- End of implementation choices  ---------- */
 
-#ifndef PERLIO_IS_STDIO
-/* Not using stdio _directly_ as PerlIO */
-
 /* We now need to determine  what happens if source trys to use stdio.
  * There are three cases based on PERLIO_NOT_STDIO which XS code
  * can set how it wants.
  */
 
-#   ifdef PERL_CORE
+#ifdef PERL_CORE
 /* Make a choice for perl core code
    - currently this is set to try and catch lingering raw stdio calls.
      This is a known issue with some non UNIX ports which still use
      "native" stdio features.
 */
-#       ifndef PERLIO_NOT_STDIO
-#           define PERLIO_NOT_STDIO 1
-#       endif
-    #else
-#   ifndef PERLIO_NOT_STDIO
-#       define PERLIO_NOT_STDIO 0
-#   endif
+#  ifndef PERLIO_NOT_STDIO
+#    define PERLIO_NOT_STDIO 1
+#  endif
+#else
+#  ifndef PERLIO_NOT_STDIO
+#    define PERLIO_NOT_STDIO 0
+#  endif
 #endif
 
 #ifdef PERLIO_NOT_STDIO
@@ -154,7 +128,6 @@ PERL_CALLCONV void PerlIO_clone(pTHX_ PerlInterpreter *proto,
  */
 #include "fakesdio.h"
 #endif                         /* ifndef PERLIO_NOT_STDIO */
-#endif                         /* PERLIO_IS_STDIO */
 
 /* ----------- fill in things that have not got #define'd  ---------- */
 
@@ -331,7 +304,7 @@ PERL_CALLCONV int PerlIO_setpos(PerlIO *, SV *);
 #ifndef PerlIO_fdupopen
 PERL_CALLCONV PerlIO *PerlIO_fdupopen(pTHX_ PerlIO *, CLONE_PARAMS *, int);
 #endif
-#if !defined(PerlIO_modestr) && !defined(PERLIO_IS_STDIO)
+#if !defined(PerlIO_modestr)
 PERL_CALLCONV char *PerlIO_modestr(PerlIO *, char *buf);
 #endif
 #ifndef PerlIO_isutf8
@@ -360,7 +333,6 @@ PERL_CALLCONV void PerlIO_debug(const char *fmt, ...)
     __attribute__format__(__printf__, 1, 2);
 typedef struct PerlIO_list_s PerlIO_list_t;
 
-
 #endif
 
 END_EXTERN_C
index 3518361..2d6b22e 100644 (file)
  *
  */
 
-#ifdef PERLIO_IS_STDIO
-
-#ifdef NETWARE
-       #include "nwstdio.h"
-#else
-
-/*
- * This file #define-s the PerlIO_xxx abstraction onto stdio functions.
- * Make this as close to original stdio as possible.
- */
-#define PerlIO                         FILE
-#define PerlIO_stderr()                        PerlSIO_stderr
-#define PerlIO_stdout()                        PerlSIO_stdout
-#define PerlIO_stdin()                 PerlSIO_stdin
-
-#define PerlIO_isutf8(f)               0
-
-#define PerlIO_printf                  PerlSIO_printf
-#define PerlIO_stdoutf                 PerlSIO_stdoutf
-#define PerlIO_vprintf(f,fmt,a)                PerlSIO_vprintf(f,fmt,a)
-#define PerlIO_write(f,buf,count)      PerlSIO_fwrite(buf,1,count,f)
-#define PerlIO_unread(f,buf,count)     (-1)
-#define PerlIO_open                    PerlSIO_fopen
-#define PerlIO_fdopen                  PerlSIO_fdopen
-#define PerlIO_reopen                  PerlSIO_freopen
-#define PerlIO_close(f)                        PerlSIO_fclose(f)
-#define PerlIO_puts(f,s)               PerlSIO_fputs(s,f)
-#define PerlIO_putc(f,c)               PerlSIO_fputc(c,f)
-#if defined(__VMS)
-     /* Unusual definition of ungetc() here to accommodate fast_sv_gets()'
-      * belief that it can mix getc/ungetc with reads from stdio buffer */
-START_EXTERN_C
-     int decc$ungetc(int __c, FILE *__stream);
-END_EXTERN_C
-#    define PerlIO_ungetc(f,c) ((c) == EOF ? EOF : \
-            ((*(f) && !((*(f))->_flag & _IONBF) && \
-            ((*(f))->_ptr > (*(f))->_base)) ? \
-            ((*(f))->_cnt++, *(--(*(f))->_ptr) = (c)) : decc$ungetc(c,f)))
-#else
-#    define PerlIO_ungetc(f,c)         PerlSIO_ungetc(c,f)
-#endif
-#define PerlIO_getc(f)         PerlSIO_fgetc(f)
-#define PerlIO_read(f,buf,count)       (SSize_t)PerlSIO_fread(buf,1,count,f)
-#define PerlIO_tell(f)         PerlSIO_ftell(f)
-#define PerlIO_eof(f)                  PerlSIO_feof(f)
-#define PerlIO_getname(f,b)            fgetname(f,b)
-#define PerlIO_error(f)                        PerlSIO_ferror(f)
-#define PerlIO_fileno(f)               PerlSIO_fileno(f)
-#define PerlIO_clearerr(f)             PerlSIO_clearerr(f)
-#define PerlIO_flush(f)                        PerlSIO_fflush(f)
-#define PerlIO_seek(f,o,w)             PerlSIO_fseek(f,o,w)
-
-#define PerlIO_rewind(f)               PerlSIO_rewind(f)
-#define PerlIO_tmpfile()               PerlSIO_tmpfile()
-
-#define PerlIO_importFILE(f,fl)                (f)
-#define PerlIO_exportFILE(f,fl)                (f)
-#define PerlIO_findFILE(f)             (f)
-#define PerlIO_releaseFILE(p,f)                ((void) 0)
-
-#ifdef HAS_SETLINEBUF
-#define PerlIO_setlinebuf(f)           PerlSIO_setlinebuf(f);
-#else
-#define PerlIO_setlinebuf(f)           PerlSIO_setvbuf(f, NULL, _IOLBF, 0);
-#endif
-
-/* Now our interface to Configure's FILE_xxx macros */
-
-#ifdef USE_STDIO_PTR
-#define PerlIO_has_cntptr(f)           1
-#define PerlIO_get_ptr(f)              PerlSIO_get_ptr(f)
-#define PerlIO_get_cnt(f)              PerlSIO_get_cnt(f)
-
-#ifdef STDIO_CNT_LVALUE
-#define PerlIO_canset_cnt(f)           1
-#define PerlIO_set_cnt(f,c)            PerlSIO_set_cnt(f,c)
-#ifdef STDIO_PTR_LVALUE
-#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
-#define PerlIO_fast_gets(f)            1
-#endif
-#endif /* STDIO_PTR_LVALUE */
-#else /* STDIO_CNT_LVALUE */
-#define PerlIO_canset_cnt(f)           0
-#define PerlIO_set_cnt(f,c)            abort()
-#endif
-
-#ifdef STDIO_PTR_LVALUE
-#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
-#define PerlIO_set_ptrcnt(f,p,c)      STMT_START {PerlSIO_set_ptr(f,p), PerlIO_set_cnt(f,c);} STMT_END
-#else
-#ifdef STDIO_PTR_LVAL_SETS_CNT
-/* assert() may pre-process to ""; potential syntax error (FILE_ptr(), ) */
-#define PerlIO_set_ptrcnt(f,p,c)      STMT_START {PerlSIO_set_ptr(f,p); assert(PerlSIO_get_cnt(f) == (c));} STMT_END
-#define PerlIO_fast_gets(f)            1
-#else
-#define PerlIO_set_ptrcnt(f,p,c)       abort()
-#endif
-#endif
-#endif
-
-#else  /* USE_STDIO_PTR */
-
-#define PerlIO_has_cntptr(f)           0
-#define PerlIO_canset_cnt(f)           0
-#define PerlIO_get_cnt(f)              (abort(),0)
-#define PerlIO_get_ptr(f)              (abort(),(void *)0)
-#define PerlIO_set_cnt(f,c)            abort()
-#define PerlIO_set_ptrcnt(f,p,c)       abort()
-
-#endif /* USE_STDIO_PTR */
-
-#ifndef PerlIO_fast_gets
-#define PerlIO_fast_gets(f)            0
-#endif
+/* Shouldn't be possible to get here, but if we did ... */
 
+#ifdef PERLIO_IS_STDIO
 
-#ifdef FILE_base
-#define PerlIO_has_base(f)             1
-#define PerlIO_get_base(f)             PerlSIO_get_base(f)
-#define PerlIO_get_bufsiz(f)           PerlSIO_get_bufsiz(f)
-#else
-#define PerlIO_has_base(f)             0
-#define PerlIO_get_base(f)             (abort(),(void *)0)
-#define PerlIO_get_bufsiz(f)           (abort(),0)
-#endif
+#  error "stdio is no longer supported as the default base layer -- use perlio."
 
-#endif /* NETWARE */
 #endif /* PERLIO_IS_STDIO */
 
 /*
index b019cc8..c76c880 100644 (file)
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/sys/lib/perl/5.23.1"         /**/
-#define PRIVLIB_EXP "/sys/lib/perl/5.23.1"             /**/
+#define PRIVLIB "/sys/lib/perl/5.23.2"         /**/
+#define PRIVLIB_EXP "/sys/lib/perl/5.23.2"             /**/
 
 /* PTRSIZE:
  *     This symbol contains the size of a pointer, so that the C preprocessor
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/sys/lib/perl/5.23.1/site_perl"               /**/
-#define SITELIB_EXP "/sys/lib/perl/5.23.1/site_perl"           /**/
-#define SITELIB_STEM "/sys/lib/perl/5.23.1/site_perl"          /**/
+#define SITELIB "/sys/lib/perl/5.23.2/site_perl"               /**/
+#define SITELIB_EXP "/sys/lib/perl/5.23.2/site_perl"           /**/
+#define SITELIB_STEM "/sys/lib/perl/5.23.2/site_perl"          /**/
 
 /* Size_t_size:
  *     This symbol holds the size of a Size_t in bytes.
index 445bee2..f6d809e 100644 (file)
@@ -32,12 +32,12 @@ alignbytes='4'
 ansi2knr=''
 aphostname='/bin/uname -n'
 api_revision='5'
-api_subversion='1'
+api_subversion='2'
 api_version='23'
-api_versionstring='5.23.1'
+api_versionstring='5.23.2'
 ar='ar'
-archlib='/sys/lib/perl5/5.23.1/386'
-archlibexp='/sys/lib/perl5/5.23.1/386'
+archlib='/sys/lib/perl5/5.23.2/386'
+archlibexp='/sys/lib/perl5/5.23.2/386'
 archname64=''
 archname='386'
 archobjs=''
@@ -790,17 +790,17 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='/sys/lib/perl/5.23.1/386'
+installarchlib='/sys/lib/perl/5.23.2/386'
 installbin='/usr/bin'
 installman1dir='/sys/man/1pub'
 installman3dir='/sys/man/2pub'
 installprefix='/usr'
 installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.23.1'
+installprivlib='/sys/lib/perl/5.23.2'
 installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.23.1/site_perl/386'
+installsitearch='/sys/lib/perl/5.23.2/site_perl/386'
 installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.23.1/site_perl'
+installsitelib='/sys/lib/perl/5.23.2/site_perl'
 installstyle='lib/perl5'
 installusrbinperl='undef'
 installvendorarch=''
@@ -925,8 +925,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/sys/lib/perl/5.23.1'
-privlibexp='/sys/lib/perl/5.23.1'
+privlib='/sys/lib/perl/5.23.2'
+privlibexp='/sys/lib/perl/5.23.2'
 procselfexe=''
 prototype='define'
 ptrsize='4'
@@ -991,13 +991,13 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0'
 sig_size='50'
 signal_t='void'
-sitearch='/sys/lib/perl/5.23.1/site_perl/386'
+sitearch='/sys/lib/perl/5.23.2/site_perl/386'
 sitearchexp='/sys/lib/perl/site_perl/386'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.23.1/site_perl'
-sitelib_stem='/sys/lib/perl/5.23.1/site_perl'
-sitelibexp='/sys/lib/perl/5.23.1/site_perl'
+sitelib='/sys/lib/perl/5.23.2/site_perl'
+sitelib_stem='/sys/lib/perl/5.23.2/site_perl'
+sitelibexp='/sys/lib/perl/5.23.2/site_perl'
 siteprefix='/usr'
 siteprefixexp='/usr'
 sizesize='4'
@@ -1030,7 +1030,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/sys/include/ape/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/sys/man/1pub'
 tail=''
 tar=''
@@ -1112,8 +1112,8 @@ vendorlib_stem=''
 vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
-version='5.23.1'
-version_patchlevel_string='version 23 subversion 1'
+version='5.23.2'
+version_patchlevel_string='version 23 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth=''
@@ -1127,9 +1127,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=23
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=23
-PERL_API_SUBVERSION=1
+PERL_API_SUBVERSION=2
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
index cf2153e..621a04c 100644 (file)
@@ -35,7 +35,7 @@ ext_xs = IO.xs Socket.xs Opcode.xs  dl_none.xs Fcntl.xs POSIX.xs
 ext_c = ${ext_xs:%.xs=%.c}
 ext_obj = ${ext_xs:%.xs=%.$O}
 
-obj = av.$O deb.$O doio.$O doop.$O dump.$O globals.$O gv.$O hv.$O locale.$O malloc.$O mathoms.$O mg.$O numeric.$O op.$O pad.$O perlapi.$O perlio.$O perly.$O pp.$O pp_ctl.$O pp_hot.$O pp_pack.$O pp_sort.$O pp_sys.$O reentr.$O regcomp.$O regexec.$O run.$O scope.$O sv.$O taint.$O toke.$O universal.$O utf8.$O util.$O
+obj = av.$O deb.$O doio.$O doop.$O dquote.$O dump.$O globals.$O gv.$O hv.$O locale.$O malloc.$O mathoms.$O mg.$O numeric.$O op.$O pad.$O perlapi.$O perlio.$O perly.$O pp.$O pp_ctl.$O pp_hot.$O pp_pack.$O pp_sort.$O pp_sys.$O reentr.$O regcomp.$O regexec.$O run.$O scope.$O sv.$O taint.$O time64.$O toke.$O universal.$O utf8.$O util.$O
 
 OBJS = perl.$O plan9.$O $obj
 
index b772368..5c50005 100644 (file)
@@ -53,7 +53,7 @@
 /roffitall
 
 # generated
-/perl5231delta.pod
+/perl5232delta.pod
 /perlapi.pod
 /perlintern.pod
 *.html
index 7e2a5e5..5428314 100644 (file)
@@ -180,6 +180,7 @@ aux c2ph h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
 
     perlhist           Perl history records
     perldelta          Perl changes since previous version
+    perl5231delta      Perl changes in version 5.23.1
     perl5230delta      Perl changes in version 5.23.0
     perl5220delta      Perl changes in version 5.22.0
     perl5202delta      Perl changes in version 5.20.2
diff --git a/pod/perl5231delta.pod b/pod/perl5231delta.pod
new file mode 100644 (file)
index 0000000..ad4c7ce
--- /dev/null
@@ -0,0 +1,317 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5231delta - what is new for perl v5.23.1
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.23.0 release and the 5.23.1
+release.
+
+If you are upgrading from an earlier release such as 5.22.0, first read
+L<perl5230delta>, which describes differences between 5.22.0 and 5.23.0.
+
+=head1 Core Enhancements
+
+=head2 Integer shift (C<< << >> and C<< >> >>) now more explicitly defined
+
+Negative shifts are reverse shifts: left shift becomes right shift,
+and right shift becomes left shift.
+
+Shifting by the number of bits in a native integer (or more) is zero,
+except when the "overshift" is right shifting a negative value under
+C<use integer>, in which case the result is -1 (arithmetic shift).
+
+Until now negative shifting and overshifting have been undefined
+because they have relied on whatever the C implementation happens
+to do.  For example, for the overshift a common C behavior is
+"modulo shift":
+
+  1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1  # Common C behavior.
+
+  # And the same for <<, while Perl now produces 0 for both.
+
+Now these behaviors are well-defined under Perl, regardless of what
+the underlying C implementation does.  Note, however, that you cannot
+escape the native integer width, you need to know how far left you
+can go.  You can use for example:
+
+  use Config;
+  my $wordbits = $Config{uvsize} * 8;  # Or $Config{uvsize} << 3.
+
+If you need a more bits on the left shift, you can use for example
+the C<bigint> pragma, or the C<Bit::Vector> module from CPAN.
+
+=head2 Postfix dereferencing is no longer experimental
+
+Using the C<postderef> and C<postderef_qq> features no longer emits a
+warning. Existing code that disables the C<experimental::postderef> warning
+category that they previously used will continue to work. The C<postderef>
+feature has no effect; all Perl code can use postfix dereferencing,
+regardless of what feature declarations are in scope. The C<5.24> feature
+bundle now includes the C<postderef_qq> feature.
+
+=head2 printf and sprintf now allow reordered precision arguments
+
+That is, C<< sprintf '|%.*2$|', 2, 3 >> now returns C<|002|>. This extends
+the existing reordering mechanism (which allows reordering for arguments
+that are used as format fields, widths, and vector separators).
+
+=head1 Incompatible Changes
+
+=head2 ASCII characters in variable names must now be all visible
+
+It was legal until now on ASCII platforms for variable names to contain
+non-graphical ASCII control characters (ordinals 0 through 31, and 127,
+which are the C0 controls and C<DELETE>).  This usage has been
+deprecated since v5.20, and as of now causes a syntax error.  The
+variables these names referred to are special, reserved by Perl for
+whatever use it may choose, now, or in the future.  Each such variable
+has an alternative way of spelling it.  Instead of the single
+non-graphic control character, a two character sequence beginning with a
+caret is used, like C<$^]> and C<${^GLOBAL_PHASE}>.  Details are at
+L<perlvar>.   It remains legal, though unwise and deprecated (raising a
+deprecation warning), to use certain non-graphic non-ASCII characters in
+variables names when not under S<C<use utf8>>.  No code should do this,
+as all such variables are reserved by Perl, and Perl doesn't currently
+define any of them (but could at any time, without notice).
+
+=head2 The C<autoderef> feature has been removed
+
+The experimental C<autoderef> feature (which allowed calling C<push>,
+C<pop>, C<shift>, C<unshift>, C<splice>, C<keys>, C<values>, and C<each> on
+a scalar argument) has been deemed unsuccessful. It has now been removed;
+trying to use the feature (or to disable the C<experimental::autoderef>
+warning it previously triggered) now yields an exception.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+The libnet distribution has been upgraded from version 3.06 to 3.07.
+
+=item *
+
+L<autodie> has been upgraded from version 2.27 to 2.29.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.32 to 1.33.
+
+=item *
+
+L<Encode> has been upgraded from version 2.73 to 2.75.
+
+=item *
+
+L<encoding> has been upgraded from version 2.15 to 2.16.
+
+=item *
+
+L<feature> has been upgraded from version 1.41 to 1.42.
+
+=item *
+
+L<File::Path> has been upgraded from version 2.09 to 2.11.
+
+=item *
+
+L<Getopt::Long> has been upgraded from version 2.46 to 2.47.
+
+=item *
+
+L<I18N::Langinfo> has been upgraded from version 0.12 to 0.13.
+
+=item *
+
+L<IPC::Open3> has been upgraded from version 1.18 to 1.19.
+
+If a Perl exception was thrown from inside this module, the exception
+C<IPC::Open3> threw to the callers of C<open3> would have an irrelevant
+message derived from C<$!> which was in an undefined state, instead of the
+C<$@> message which triggers the failure path inside C<open3>.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20150620 to 5.20150720.
+
+=item *
+
+L<Opcode> has been upgraded from version 1.32 to 1.33.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded from version 0.22 to 0.23.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.54 to 1.55.
+
+=item *
+
+L<Socket> has been upgraded from version 2.019 to 2.020.
+
+=item *
+
+L<Storable> has been upgraded from version 2.53 to 2.54.
+
+=item *
+
+L<Unicode::Collate> has been upgraded from version 1.12 to 1.14.
+
+=item *
+
+L<Unicode::Normalize> has been upgraded from version 1.18 to 1.19.
+
+=item *
+
+L<warnings> has been upgraded from version 1.32 to 1.33.
+
+=item *
+
+L<XS::Typemap> has been upgraded from version 0.13 to 0.14.
+
+=back
+
+=head1 Diagnostics
+
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages.  For the complete list of
+diagnostic messages, see L<perldiag>.
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+The C<printf> and C<sprintf> builtins are now more careful about the
+warnings they emit: argument reordering now disables the "redundant
+argument" warning in all cases; and invalid format strings are no longer
+treated as absorbing arguments (so "redundant argument" warnings can
+correctly be emitted by such code).
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item VMS
+
+=over
+
+=item *
+
+The minimum supported version of VMS is now v7.3-2, released in 2003.  As a
+side effect of this change, VAX is no longer supported as the terminal
+release of OpenVMS VAX was v7.3 in 2001.
+
+=back
+
+=back
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+C<sv_catpvf> and related functions (including C<sv_vcatpvfn_flags> when
+called with a C<va_list> rather than an array of SV pointers) have never
+handled argument reordering. Attempts to reorder arguments now yield an
+exception, rather than being silently ignored.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+A leak in the XS typemap caused one scalar to be leaked each time a C<FILE *>
+or a C<PerlIO *> was C<OUTPUT:>ed or imported to Perl, since perl 5.000. These
+particular typemap entries are thought to be extremely rarely used by XS
+modules. [perl #124181]
+
+=item *
+
+C<alarm()> and C<sleep()> will now warn if the argument is a negative number
+and return undef. Previously they would pass the negative value to the
+underlying C function which may have set up a timer with a surprising value.
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.23.1 represents approximately 4 weeks of development since Perl 5.23.0
+and contains approximately 8,400 lines of changes across 320 files from 22
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 5,000 lines of changes to 140 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.23.1:
+
+Aaron Crane, Aristotle Pagaltzis, Chas. Owens, Chris 'BinGOs' Williams, Craig
+A. Berry, Daniel Dragan, David Mitchell, Father Chrysostomos, Herbert Breunung,
+H.Merijn Brand, James E Keenan, Jarkko Hietaniemi, Karen Etheridge, Karl
+Williamson, Leon Timmermans, Matthew Horsfall, Max Maischein, Rafael
+Garcia-Suarez, Ricardo Signes, Stanislaw Pusep, Steve Hay, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles recently
+posted to the comp.lang.perl.misc newsgroup and the perl bug database at
+L<https://rt.perl.org/> .  There may also be information at
+L<http://www.perl.org/> , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug> program
+included with your release.  Be sure to trim your bug down to a tiny but
+sufficient test case.  Your bug report, along with the output of C<perl -V>,
+will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please send it
+to perl5-security-report@perl.org.  This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who will be
+able to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported.  Please only use this address for
+security issues in the Perl core, not for modules independently distributed on
+CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
index 3e3564d..bb1cb24 100644 (file)
@@ -2,88 +2,78 @@
 
 =head1 NAME
 
-perldelta - what is new for perl v5.23.1
+perldelta - what is new for perl v5.23.2
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.23.0 release and the 5.23.1
+This document describes differences between the 5.23.1 release and the 5.23.2
 release.
 
-If you are upgrading from an earlier release such as 5.22.0, first read
-L<perl5230delta>, which describes differences between 5.22.0 and 5.23.0.
+If you are upgrading from an earlier release such as 5.23.0, first read
+L<perl5231delta>, which describes differences between 5.23.0 and 5.23.1.
 
-=head1 Core Enhancements
+=head1 Incompatible Changes
 
-=head2 Integer shift (C<< << >> and C<< >> >>) now more explicitly defined
+=head2 Nested declarations are now disallowed
 
-Negative shifts are reverse shifts: left shift becomes right shift,
-and right shift becomes left shift.
+A C<my>, C<our>, or C<state> declaration is no longer allowed inside
+of another C<my>, C<our>, or C<state> declaration.
 
-Shifting by the number of bits in a native integer (or more) is zero,
-except when the "overshift" is right shifting a negative value under
-C<use integer>, in which case the result is -1 (arithmetic shift).
+For example, these are now fatal:
 
-Until now negative shifting and overshifting have been undefined
-because they have relied on whatever the C implementation happens
-to do.  For example, for the overshift a common C behavior is
-"modulo shift":
+   my ($x, my($y));
+   our (my $x);
 
-  1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1  # Common C behavior.
+L<[perl #125587]|https://rt.perl.org/Ticket/Display.html?id=125587>
 
-  # And the same for <<, while Perl now produces 0 for both.
+L<[perl #121058]|https://rt.perl.org/Ticket/Display.html?id=121058>
 
-Now these behaviors are well-defined under Perl, regardless of what
-the underlying C implementation does.  Note, however, that you cannot
-escape the native integer width, you need to know how far left you
-can go.  You can use for example:
+=head1 Deprecations
 
-  use Config;
-  my $wordbits = $Config{uvsize} * 8;  # Or $Config{uvsize} << 3.
+=head2 sysread(), syswrite(), recv() and send() are deprecated on
+:utf8 handles
 
-If you need a more bits on the left shift, you can use for example
-the C<bigint> pragma, or the C<Bit::Vector> module from CPAN.
+The sysread(), recv(), syswrite() and send() operators
+are deprecated on handles that have the C<:utf8> layer, either
+explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
 
-=head2 Postfix dereferencing is no longer experimental
+Both sysread() and recv() currently use only the C<:utf8> flag for the
+stream, ignoring the actual layers.  Since sysread() and recv() do no
+UTF-8 validation they can end up creating invalidly encoded scalars.
 
-Using the C<postderef> and C<postderef_qq> features no longer emits a
-warning. Existing code that disables the C<experimental::postderef> warning
-category that they previously used will continue to work. The C<postderef>
-feature has no effect; all Perl code can use postfix dereferencing,
-regardless of what feature declarations are in scope. The C<5.24> feature
-bundle now includes the C<postderef_qq> feature.
+Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
+ignoring any layers.  If the flag is set, both write the value UTF-8
+encoded, even if the layer is some different encoding, such as the
+example above.
 
-=head2 printf and sprintf now allow reordered precision arguments
+Ideally, all of these operators would completely ignore the C<:utf8>
+state, working only with bytes, but this would result in silently
+breaking existing code.  To avoid this a future version of perl will
+throw an exception when any of sysread(), recv(), syswrite() or send()
+are called on handle with the C<:utf8> layer.
 
-That is, C<< sprintf '|%.*2$|', 2, 3 >> now returns C<|002|>. This extends
-the existing reordering mechanism (which allows reordering for arguments
-that are used as format fields, widths, and vector separators).
+=head1 Performance Enhancements
 
-=head1 Incompatible Changes
+=over 4
+
+=item *
+
+Creating Perl debugger data structures (see L<perldebguts/"Debugger Internals">)
+for XSUBs and const subs has been removed.  This removed one glob/scalar combo
+for each unique C<.c> file that XSUBs and const subs came from.  On startup
+(C<perl -e"0">) about half a dozen glob/scalar debugger combos were created.
+Loading XS modules created more glob/scalar combos.  These things were created
+regardless if the perl debugger was being used or not, unlike for pure perl
+subs, and ignores that the perl debugger can not debug C code.
+
+=item *
 
-=head2 ASCII characters in variable names must now be all visible
-
-It was legal until now on ASCII platforms for variable names to contain
-non-graphical ASCII control characters (ordinals 0 through 31, and 127,
-which are the C0 controls and C<DELETE>).  This usage has been
-deprecated since v5.20, and as of now causes a syntax error.  The
-variables these names referred to are special, reserved by Perl for
-whatever use it may choose, now, or in the future.  Each such variable
-has an alternative way of spelling it.  Instead of the single
-non-graphic control character, a two character sequence beginning with a
-caret is used, like C<$^]> and C<${^GLOBAL_PHASE}>.  Details are at
-L<perlvar>.   It remains legal, though unwise and deprecated (raising a
-deprecation warning), to use certain non-graphic non-ASCII characters in
-variables names when not under S<C<use utf8>>.  No code should do this,
-as all such variables are reserved by Perl, and Perl doesn't currently
-define any of them (but could at any time, without notice).
-
-=head2 The C<autoderef> feature has been removed
-
-The experimental C<autoderef> feature (which allowed calling C<push>,
-C<pop>, C<shift>, C<unshift>, C<splice>, C<keys>, C<values>, and C<each> on
-a scalar argument) has been deemed unsuccessful. It has now been removed;
-trying to use the feature (or to disable the C<experimental::autoderef>
-warning it previously triggered) now yields an exception.
+Single arguments in list assign are now slightly faster:
+
+  ($x) = (...);
+  (...) = ($x);
+
+=back
 
 =head1 Modules and Pragmata
 
@@ -93,88 +83,100 @@ warning it previously triggered) now yields an exception.
 
 =item *
 
-The libnet distribution has been upgraded from version 3.06 to 3.07.
+The PathTools module collection has been upgraded from version 3.55 to
+3.56.
+
+Minor optimizations.
+L<[perl #125712]|https://rt.perl.org/Ticket/Display.html?id=125712>
 
 =item *
 
-L<autodie> has been upgraded from version 2.27 to 2.29.
+L<Attribute::Handlers> has been upgraded from version 0.97 to 0.99.
 
 =item *
 
-L<DynaLoader> has been upgraded from version 1.32 to 1.33.
+L<CPAN::Meta::YAML> has been upgraded from version 0.016 to 0.017.
 
 =item *
 
-L<Encode> has been upgraded from version 2.73 to 2.75.
+L<Encode> has been upgraded from version 2.75 to 2.76.
 
 =item *
 
-L<encoding> has been upgraded from version 2.15 to 2.16.
+L<ExtUtils::ParseXS> has been upgraded from version 3.28 to 3.29.
 
 =item *
 
-L<feature> has been upgraded from version 1.41 to 1.42.
+L<ExtUtils::Typemaps> has been upgraded from version 3.28 to 3.29.
 
 =item *
 
-L<File::Path> has been upgraded from version 2.09 to 2.11.
+L<File::Find> has been upgraded from version 1.29 to 1.30.
 
 =item *
 
-L<Getopt::Long> has been upgraded from version 2.46 to 2.47.
+L<File::Spec> has been upgraded from version 3.56 to 3.57.
 
 =item *
 
-L<I18N::Langinfo> has been upgraded from version 0.12 to 0.13.
+L<Filter::Util::Call> has been upgraded from version 1.54 to 1.55.
 
 =item *
 
-L<IPC::Open3> has been upgraded from version 1.18 to 1.19.
+L<Hash::Util> has been upgraded from version 0.18 to 0.19.
 
-If a Perl exception was thrown from inside this module, the exception
-C<IPC::Open3> threw to the callers of C<open3> would have an irrelevant
-message derived from C<$!> which was in an undefined state, instead of the
-C<$@> message which triggers the failure path inside C<open3>.
+C<unlock_hashref_recurse> and C<unlock_hash_recurse> didn't
+actually unlock parts of the data structures...
+
+...now they do.
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 5.20150620 to 5.20150720.
+L<Module::CoreList> has been upgraded from version 5.20150720 to 5.20150820.
 
 =item *
 
-L<Opcode> has been upgraded from version 1.32 to 1.33.
+L<perlfaq> has been upgraded from version 5.021009 to 5.021010.
 
 =item *
 
-L<PerlIO::scalar> has been upgraded from version 0.22 to 0.23.
+L<POSIX> has been upgraded from version 1.55 to 1.56.
 
 =item *
 
-L<POSIX> has been upgraded from version 1.54 to 1.55.
+L<Term::Cap> has been upgraded from version 1.15 to 1.17.
 
 =item *
 
-L<Socket> has been upgraded from version 2.019 to 2.020.
+L<Unicode::UCD> has been upgraded from version 0.61 to 0.62.
 
-=item *
+=back
 
-L<Storable> has been upgraded from version 2.53 to 2.54.
+=head1 Documentation
 
-=item *
+=head2 Changes to Existing Documentation
+
+=head3 L<perlpolicy>
 
-L<Unicode::Collate> has been upgraded from version 1.12 to 1.14.
+=over 4
 
 =item *
 
-L<Unicode::Normalize> has been upgraded from version 1.18 to 1.19.
+This note has been added to perlpolicy:
 
-=item *
+  While civility is required, kindness is encouraged; if you have any doubt
+  about whether you are being civil, simply ask yourself, "Am I being kind?"
+  and aspire to that.
 
-L<warnings> has been upgraded from version 1.32 to 1.33.
+=back
+
+=head3 L<perlvar>
+
+=over 4
 
 =item *
 
-L<XS::Typemap> has been upgraded from version 0.13 to 0.14.
+Use of C<$OLD_PERL_VERSION> is now discouraged.
 
 =back
 
@@ -184,38 +186,80 @@ The following additions or changes have been made to diagnostic output,
 including warnings and fatal error messages.  For the complete list of
 diagnostic messages, see L<perldiag>.
 
-=head2 Changes to Existing Diagnostics
+=head2 New Diagnostics
+
+=head3 New Errors
 
 =over 4
 
 =item *
 
-The C<printf> and C<sprintf> builtins are now more careful about the
-warnings they emit: argument reordering now disables the "redundant
-argument" warning in all cases; and invalid format strings are no longer
-treated as absorbing arguments (so "redundant argument" warnings can
-correctly be emitted by such code).
+L<Can't redeclare "%s" in "%s"|perldiag/"Can't redeclare "%s" in "%s"">
+
+(F) A "my", "our" or "state" declaration was found within another declaration,
+such as C<my ($x, my($y), $z)> or C<our (my $x)>.
 
 =back
 
-=head1 Platform Support
+=head3 New Warnings
+
+=over 4
+
+=item *
 
-=head2 Platform-Specific Notes
+L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 handles">
+
+(W deprecated) The sysread(), recv(), syswrite() and send() operators
+are deprecated on handles that have the C<:utf8> layer, either
+explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
+
+Both sysread() and recv() currently use only the C<:utf8> flag for the
+stream, ignoring the actual layers.  Since sysread() and recv() do no
+UTF-8 validation they can end up creating invalidly encoded scalars.
+
+Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
+ignoring any layers.  If the flag is set, both write the value UTF-8
+encoded, even if the layer is some different encoding, such as the
+example above.
+
+Ideally, all of these operators would completely ignore the C<:utf8>
+state, working only with bytes, but this would result in silently
+breaking existing code.  To avoid this a future version of perl will
+throw an exception when any of sysread(), recv(), syswrite() or send()
+are called on handle with the C<:utf8> layer.
+
+=back
+
+=head2 Changes to Existing Diagnostics
 
 =over 4
 
-=item VMS
+=item *
+
+The diagnostic C<< Hexadecimal float: internal error >> has been changed to
+C<< Hexadecimal float: internal error (%s) >> to include more information.
+
+=back
 
-=over
+=head1 Configuration and Compilation
+
+=over 4
 
 =item *
 
-The minimum supported version of VMS is now v7.3-2, released in 2003.  As a
-side effect of this change, VAX is no longer supported as the terminal
-release of OpenVMS VAX was v7.3 in 2001.
+F<Configure> should handle spaces in paths a little better.
 
 =back
 
+=head1 Testing
+
+=over 4
+
+=item *
+
+A new test (F<t/op/aassign.t>) has been added to test the list assignment operator
+C<OP_AASSIGN>.
+
 =back
 
 =head1 Internal Changes
@@ -224,10 +268,11 @@ release of OpenVMS VAX was v7.3 in 2001.
 
 =item *
 
-C<sv_catpvf> and related functions (including C<sv_vcatpvfn_flags> when
-called with a C<va_list> rather than an array of SV pointers) have never
-handled argument reordering. Attempts to reorder arguments now yield an
-exception, rather than being silently ignored.
+C<PL_sawalias> and C<GPf_ALIASED_SV> have been removed.
+
+=item *
+
+C<GvASSIGN_GENERATION> and C<GvASSIGN_GENERATION_set> have been removed.
 
 =back
 
@@ -237,37 +282,50 @@ exception, rather than being silently ignored.
 
 =item *
 
-A leak in the XS typemap caused one scalar to be leaked each time a C<FILE *>
-or a C<PerlIO *> was C<OUTPUT:>ed or imported to Perl, since perl 5.000. These
-particular typemap entries are thought to be extremely rarely used by XS
-modules. [perl #124181]
+Perl can again be compiled with any Unicode version.  This used to
+(mostly) work, but was lost in v5.18 through v5.20.  The property
+C<Name_Alias> did not exist prior to Unicode 5.0.  L<Unicode::UCD>
+incorrectly said it did.  This has been fixed.
+
+=item *
+
+Very large code-points (beyond Unicode) in regular expressions no
+longer cause a buffer overflow in some cases when converted to UTF-8.
+L<[perl #125826]|https://rt.perl.org/Ticket/Display.html?id=125826>
+
+=item *
+
+The integer overflow check for the range operator (...) in list
+context now correctly handles the case where the size of the range is
+larger than the address space.  This could happen on 32-bits with
+-Duse64bitint.
+L<[perl #125781]|https://rt.perl.org/Ticket/Display.html?id=125781>
 
 =item *
 
-C<alarm()> and C<sleep()> will now warn if the argument is a negative number
-and return undef. Previously they would pass the negative value to the
-underlying C function which may have set up a timer with a surprising value.
+A crash with C<< %::=(); J->${\"::"} >> has been fixed.
+L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541>
 
 =back
 
 =head1 Acknowledgements
 
-Perl 5.23.1 represents approximately 4 weeks of development since Perl 5.23.0
-and contains approximately 8,400 lines of changes across 320 files from 22
+Perl 5.23.2 represents approximately 4 weeks of development since Perl 5.23.1
+and contains approximately 22,000 lines of changes across 240 files from 23
 authors.
 
 Excluding auto-generated files, documentation and release tools, there were
-approximately 5,000 lines of changes to 140 .pm, .t, .c and .h files.
+approximately 17,000 lines of changes to 140 .pm, .t, .c and .h files.
 
 Perl continues to flourish into its third decade thanks to a vibrant community
 of users and developers. The following people are known to have contributed the
-improvements that became Perl 5.23.1:
+improvements that became Perl 5.23.2:
 
-Aaron Crane, Aristotle Pagaltzis, Chas. Owens, Chris 'BinGOs' Williams, Craig
-A. Berry, Daniel Dragan, David Mitchell, Father Chrysostomos, Herbert Breunung,
-H.Merijn Brand, James E Keenan, Jarkko Hietaniemi, Karen Etheridge, Karl
-Williamson, Leon Timmermans, Matthew Horsfall, Max Maischein, Rafael
-Garcia-Suarez, Ricardo Signes, Stanislaw Pusep, Steve Hay, Tony Cook.
+Aaron Priven, Aristotle Pagaltzis, Chris 'BinGOs' Williams, Craig A. Berry,
+Dagfinn Ilmari MannsÃ¥ker, Daniel Dragan, David Mitchell, Ed J, Father
+Chrysostomos, H.Merijn Brand, Ivan Pozdeev, James E Keenan, Jarkko Hietaniemi,
+Karen Etheridge, Karl Williamson, Ludovic E. R. Tolhurst-Cleaver, Lukas Mai,
+Matthew Horsfall, Reini Urban, Ricardo Signes, Sisyphus, Steve Hay, Tony Cook.
 
 The list above is almost certainly incomplete as it is automatically generated
 from version control history. In particular, it does not include the names of
index 0c4f199..2effeeb 100644 (file)
@@ -1217,6 +1217,11 @@ missing.  You need to figure out where your CRTL misplaced its environ
 or define F<PERL_ENV_TABLES> (see L<perlvms>) so that environ is not
 searched.
 
+=item Can't redeclare "%s" in "%s"
+
+(F) A "my", "our" or "state" declaration was found within another declaration,
+such as C<my ($x, my($y), $z)> or C<our (my $x)>.
+
 =item Can't "redo" outside a loop block
 
 (F) A "redo" statement was executed to restart the current block, but
@@ -2402,7 +2407,7 @@ than the floating point supports.
 (W overflow) The hexadecimal floating point has a smaller exponent
 than the floating point supports.
 
-=item Hexadecimal float: internal error
+=item Hexadecimal float: internal error (%s)
 
 (F) Something went horribly bad in hexadecimal float handling.
 
@@ -2619,6 +2624,27 @@ provides a list context to its subscript, which can do weird things
 if you're expecting only one subscript.  When called in list context,
 it also returns the key in addition to the value.
 
+=item %s() is deprecated on :utf8 handles
+
+(W deprecated) The sysread(), recv(), syswrite() and send() operators
+are deprecated on handles that have the C<:utf8> layer, either
+explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
+
+Both sysread() and recv() currently use only the C<:utf8> flag for the
+stream, ignoring the actual layers.  Since sysread() and recv() do no
+UTF-8 validation they can end up creating invalidly encoded scalars.
+
+Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
+ignoring any layers.  If the flag is set, both write the value UTF-8
+encoded, even if the layer is some different encoding, such as the
+example above.
+
+Ideally, all of these operators would completely ignore the C<:utf8>
+state, working only with bytes, but this would result in silently
+breaking existing code.  To avoid this a future version of perl will
+throw an exception when any of sysread(), recv(), syswrite() or send()
+are called on handle with the C<:utf8> layer.
+
 =item Insecure dependency in %s
 
 (F) You tried to do something that the tainting mechanism didn't like.
index 21df352..60d0864 100644 (file)
@@ -559,15 +559,17 @@ parser.
 The only stable usage for source filters are encryption, compression,
 or the byteloader, to translate binary code back to source code.
 
-See for example the limitations in Switch, which uses source filters,
+See for example the limitations in L<Switch>, which uses source filters,
 and thus is does not work inside a string eval, the presence of
-regexes with embedded newlines that are specified with raw /.../
-delimiters and don't have a modifier //x are indistinguishable from
-code chunks beginning with the division operator /. As a workaround
-you must use m/.../ or m?...? for such patterns. Also, the presence of
-regexes specified with raw ?...? delimiters may cause mysterious
-errors. The workaround is to use m?...? instead.  See
-http://search.cpan.org/perldoc?Switch#LIMITATIONS
+regexes with embedded newlines that are specified with raw C</.../>
+delimiters and don't have a modifier C<//x> are indistinguishable from
+code chunks beginning with the division operator C</>. As a workaround
+you must use C<m/.../> or C<m?...?> for such patterns. Also, the presence of
+regexes specified with raw C<?...?> delimiters may cause mysterious
+errors. The workaround is to use C<m?...?> instead.  See
+L<http://search.cpan.org/perldoc?Switch#LIMITATIONS>
+
+Currently the content of the C<__DATA__> block is not filtered.
 
 Currently internal buffer lengths are limited to 32-bit only.
 
@@ -582,7 +584,7 @@ Some source filters use the C<DATA> handle to read the calling program.
 When using these source filters you cannot rely on this handle, nor expect
 any particular kind of behavior when operating on it.  Filters based on
 Filter::Util::Call (and therefore Filter::Simple) do not alter the C<DATA>
-filehandle.
+filehandle, but on the other hand totally ignore the text after C<__DATA__>.
 
 =back
 
@@ -601,9 +603,11 @@ Damian Conway.
 
 Paul Marquess E<lt>Paul.Marquess@btinternet.comE<gt>
 
+Reini Urban E<lt>rurban@cpan.orgE<gt>
+
 =head1 Copyrights
 
-This article originally appeared in The Perl Journal #11, and is
-copyright 1998 The Perl Journal. It appears courtesy of Jon Orwant and
-The Perl Journal.  This document may be distributed under the same terms
-as Perl itself.
+The first version of this article originally appeared in The Perl
+Journal #11, and is copyright 1998 The Perl Journal. It appears
+courtesy of Jon Orwant and The Perl Journal.  This document may be
+distributed under the same terms as Perl itself.
index b45faf4..3eb0dbb 100644 (file)
@@ -288,7 +288,7 @@ If you want to delete your temporary branch, you may do so with:
 Assuming that you'd like to commit all the changes you've made as a
 single atomic unit, run this command:
 
-   % git commit -a
+  % git commit -a
 
 (That C<-a> tells git to add every file you've changed to this commit.
 New files aren't automatically added to your commit when you use
@@ -477,24 +477,25 @@ binary searches.
 =head2 Topic branches and rewriting history
 
 Individual committers should create topic branches under
-B<yourname>/B<some_descriptive_name>. Other committers should check
-with a topic branch's creator before making any change to it.
-
-The simplest way to create a remote topic branch that works on all
-versions of git is to push the current head as a new branch on the
-remote, then check it out locally:
-
-  $ branch="$yourname/$some_descriptive_name"
-  $ git push origin HEAD:$branch
-  $ git checkout -b $branch origin/$branch
-
-Users of git 1.7 or newer can do it in a more obvious manner:
+B<yourname>/B<some_descriptive_name>:
 
   $ branch="$yourname/$some_descriptive_name"
   $ git checkout -b $branch
+  ... do local edits, commits etc ...
   $ git push origin -u $branch
 
-If you are not the creator of B<yourname>/B<some_descriptive_name>, you
+Should you be stuck with an ancient version of git (prior to 1.7), then
+C<git push> will not have the C<-u> switch, and you have to replace the
+last step with the following sequence:
+
+  $ git push origin $branch:refs/heads/$branch
+  $ git config branch.$branch.remote origin
+  $ git config branch.$branch.merge refs/heads/$branch
+
+If you want to make changes to someone else's topic branch, you should
+check with its creator before making any change to it.
+
+You
 might sometimes find that the original author has edited the branch's
 history. There are lots of good reasons for this. Sometimes, an author
 might simply be rebasing the branch onto a newer source point.
@@ -518,37 +519,37 @@ this via the following formula (see the explanation about C<refspec>'s
 in the git push documentation for details) after you have rebased your
 branch:
 
-   # first rebase
-   $ git checkout $user/$topic
-   $ git fetch
-   $ git rebase origin/blead
+  # first rebase
+  $ git checkout $user/$topic
+  $ git fetch
+  $ git rebase origin/blead
 
-   # then "delete-and-push"
-   $ git push origin :$user/$topic
-   $ git push origin $user/$topic
+  # then "delete-and-push"
+  $ git push origin :$user/$topic
+  $ git push origin $user/$topic
 
 B<NOTE:> it is forbidden at the repository level to delete any of the
 "primary" branches. That is any branch matching
 C<m!^(blead|maint|perl)!>. Any attempt to do so will result in git
 producing an error like this:
 
-    $ git push origin :blead
-    *** It is forbidden to delete blead/maint branches in this repository
-    error: hooks/update exited with error code 1
-    error: hook declined to update refs/heads/blead
-    To ssh://perl5.git.perl.org/perl
-     ! [remote rejected] blead (hook declined)
-     error: failed to push some refs to 'ssh://perl5.git.perl.org/perl'
+  $ git push origin :blead
+  *** It is forbidden to delete blead/maint branches in this repository
+  error: hooks/update exited with error code 1
+  error: hook declined to update refs/heads/blead
+  To ssh://perl5.git.perl.org/perl
+   ! [remote rejected] blead (hook declined)
+   error: failed to push some refs to 'ssh://perl5.git.perl.org/perl'
 
 As a matter of policy we do B<not> edit the history of the blead and
 maint-* branches. If a typo (or worse) sneaks into a commit to blead or
 maint-*, we'll fix it in another commit. The only types of updates
-allowed on these branches are "fast-forward's", where all history is
+allowed on these branches are "fast-forwards", where all history is
 preserved.
 
 Annotated tags in the canonical perl.git repository will never be
 deleted or modified. Think long and hard about whether you want to push
-a local tag to perl.git before doing so. (Pushing unannotated tags is
+a local tag to perl.git before doing so. (Pushing simple tags is
 not allowed.)
 
 =head2 Grafts
index eed2b66..b979295 100644 (file)
@@ -560,6 +560,7 @@ the strings?).
 
  Ricardo   5.23.0       2015-Jun-20     The 5.23 development track
  Matthew   5.23.1       2015-Jul-20
+ Matthew   5.23.2       2015-Aug-20
 
 =head2 SELECTED RELEASE SIZES
 
index bed0695..b7ebbb1 100644 (file)
@@ -924,9 +924,9 @@ portable way to find out the home directory might be:
 In particular, this means that you shouldn't use this
 for selecting between two aggregates for assignment:
 
-    @a = @b || @c;             # this is wrong
-    @a = scalar(@b) || @c;     # really meant this
-    @a = @b ? @b : @c;         # this works fine, though
+    @a = @b || @c;            # This doesn't do the right thing
+    @a = scalar(@b) || @c;    # because it really means this.
+    @a = @b ? @b : @c;        # This works fine, though.
 
 As alternatives to C<&&> and C<||> when used for
 control flow, Perl provides the C<and> and C<or> operators (see below).
index 0f05876..44fb99f 100644 (file)
@@ -551,10 +551,14 @@ Civility is simple:  stick to the facts while avoiding demeaning remarks and
 sarcasm.  It is not enough to be factual.  You must also be civil.  Responding
 in kind to incivility is not acceptable.
 
+While civility is required, kindness is encouraged; if you have any doubt about
+whether you are being civil, simply ask yourself, "Am I being kind?" and aspire
+to that.
+
 If the list moderators tell you that you are not being civil, carefully
-consider how your words have appeared before responding in any way.  You may
-protest, but repeated protest in the face of a repeatedly reaffirmed decision
-is not acceptable.
+consider how your words have appeared before responding in any way.  Were they
+kind?  You may protest, but repeated protest in the face of a repeatedly
+reaffirmed decision is not acceptable.
 
 Unacceptable behavior will result in a public and clearly identified warning.
 Repeated unacceptable behavior will result in removal from the mailing list and
index f825754..342a596 100644 (file)
@@ -464,9 +464,12 @@ version objects) and numeric comparisons can occasionally fail; it's good
 for string literal version checks and bad for comparing to a variable
 that hasn't been sanity-checked.
 
-Mnemonic: Is this version of perl in the right bracket?
+The C<$OLD_PERL_VERSION> form was added in Perl v5.20.0 for historical
+reasons but its use is discouraged. (If your reason to use C<$]> is to
+run code on old perls then referring to it as C<$OLD_PERL_VERSION> would
+be self-defeating.)
 
-The C<$OLD_PERL_VERSION> form was added in Perl v5.20.0.
+Mnemonic: Is this version of perl in the right bracket?
 
 =item $SYSTEM_FD_MAX
 
diff --git a/pp.c b/pp.c
index f750fce..6c50ed3 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -817,14 +817,13 @@ S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
 
     s = SvPV(sv, len);
     if (chomping) {
-       char *temp_buffer = NULL;
-       SV *svrecode = NULL;
-
        if (s && len) {
+           char *temp_buffer = NULL;
+           SV *svrecode = NULL;
            s += --len;
            if (RsPARA(PL_rs)) {
                if (*s != '\n')
-                   goto nope;
+                   goto nope_free_nothing;
                ++count;
                while (len && s[-1] == '\n') {
                    --len;
@@ -848,11 +847,12 @@ S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
                        temp_buffer = (char*)bytes_from_utf8((U8*)rsptr,
                                                             &rslen, &is_utf8);
                        if (is_utf8) {
-                           /* Cannot downgrade, therefore cannot possibly match
+                           /* Cannot downgrade, therefore cannot possibly match.
+                              At this point, temp_buffer is not alloced, and
+                              is the buffer inside PL_rs, so dont free it.
                             */
                            assert (temp_buffer == rsptr);
-                           temp_buffer = NULL;
-                           goto nope;
+                           goto nope_free_sv;
                        }
                        rsptr = temp_buffer;
                    }
@@ -872,16 +872,16 @@ S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
                }
                if (rslen == 1) {
                    if (*s != *rsptr)
-                       goto nope;
+                       goto nope_free_all;
                    ++count;
                }
                else {
                    if (len < rslen - 1)
-                       goto nope;
+                       goto nope_free_all;
                    len -= rslen - 1;
                    s -= rslen - 1;
                    if (memNE(s, rsptr, rslen))
-                       goto nope;
+                       goto nope_free_all;
                    count += rs_charlen;
                }
            }
@@ -890,12 +890,13 @@ S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
            *SvEND(sv) = '\0';
            SvNIOK_off(sv);
            SvSETMAGIC(sv);
-       }
-    nope:
 
-       SvREFCNT_dec(svrecode);
-
-       Safefree(temp_buffer);
+           nope_free_all:
+           Safefree(temp_buffer);
+           nope_free_sv:
+           SvREFCNT_dec(svrecode);
+           nope_free_nothing: ;
+       }
     } else {
        if (len && (!SvPOK(sv) || SvIsCOW(sv)))
            s = SvPV_force_nomg(sv, len);
@@ -3470,7 +3471,7 @@ PP(pp_index)
           SvPV_const some lines above. We can't remove that, as we need to
           call some SvPV to trigger overloading early and find out if the
           string is UTF-8.
-          This is all getting to messy. The API isn't quite clean enough,
+          This is all getting too messy. The API isn't quite clean enough,
           because data access has side effects.
        */
        little = newSVpvn_flags(little_p, llen,
@@ -4096,6 +4097,9 @@ PP(pp_uc)
                     * just above.  
                     * Use the source to distinguish between the three cases */
 
+#if    UNICODE_MAJOR_VERSION > 2                                        \
+   || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1          \
+                                  && UNICODE_DOT_DOT_VERSION >= 8)
                    if (*s == LATIN_SMALL_LETTER_SHARP_S) {
 
                        /* uc() of this requires 2 characters, but they are
@@ -4108,6 +4112,7 @@ PP(pp_uc)
                        *d++ = 'S'; *d = 'S'; /* upper case is 'SS' */
                        continue;   /* Back to the tight loop; still in ASCII */
                    }
+#endif
 
                    /* The other two special handling characters have their
                     * upper cases outside the latin1 range, hence need to be
@@ -4401,8 +4406,14 @@ PP(pp_fc)
     const U8 *send;
     U8 *d;
     U8 tmpbuf[UTF8_MAXBYTES_CASE + 1];
+#if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
+   || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
+                                      || UNICODE_DOT_DOT_VERSION > 0)
     const bool full_folding = TRUE; /* This variable is here so we can easily
                                        move to more generality later */
+#else
+    const bool full_folding = FALSE;
+#endif
     const U8 flags = ( full_folding      ? FOLD_FLAGS_FULL   : 0 )
 #ifdef USE_LOCALE_CTYPE
                    | ( IN_LC_RUNTIME(LC_CTYPE) ? FOLD_FLAGS_LOCALE : 0 )
index e6fdcf4..50db9a8 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -1206,7 +1206,11 @@ PP(pp_flop)
                     /* The wraparound of signed integers is undefined
                      * behavior, but here we aim for count >=1, and
                      * negative count is just wrong. */
-                    if (n < 1)
+                    if (n < 1
+#if IVSIZE > Size_t_size
+                        || n > SSize_t_MAX
+#endif
+                        )
                         overflow = TRUE;
                 }
                 if (overflow)
@@ -2145,7 +2149,6 @@ PP(pp_enteriter)
        save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
        *svp = newSV(0);
        itervar = (void *)gv;
-       save_aliased_sv(gv);
     }
     else {
        SV * const sv = POPs;
@@ -3107,7 +3110,7 @@ Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
 
 3 is used for a die caught by an inner eval - continue inner loop
 
-See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
+See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
 establish a local jmpenv to handle exception traps.
 
 =cut
@@ -3517,11 +3520,7 @@ S_check_type_and_open(pTHX_ SV *name)
     }
 #endif
 
-#if !defined(PERLIO_IS_STDIO)
     retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
-#else
-    retio = PerlIO_open(p, PERL_SCRIPT_MODE);
-#endif
 #ifdef WIN32
     /* EACCES stops the INC search early in pp_require to implement
        feature RT #113422 */
@@ -4181,7 +4180,7 @@ PP(pp_entereval)
 
     /* prepare to compile string */
 
-    if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
+    if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
        save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
     else {
        /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
@@ -4198,7 +4197,7 @@ PP(pp_entereval)
 
     if (doeval(gimme, runcv, seq, saved_hh)) {
        if (was != PL_breakable_sub_gen /* Some subs defined here. */
-           ? (PERLDB_LINE || PERLDB_SAVESRC)
+           ?  PERLDB_LINE_OR_SAVESRC
            :  PERLDB_SAVESRC_NOSUBS) {
            /* Retain the filegv we created.  */
        } else if (!saved_delete) {
@@ -4210,7 +4209,7 @@ PP(pp_entereval)
        /* We have already left the scope set up earlier thanks to the LEAVE
           in doeval().  */
        if (was != PL_breakable_sub_gen /* Some subs defined here. */
-           ? (PERLDB_LINE || PERLDB_SAVESRC)
+           ?  PERLDB_LINE_OR_SAVESRC
            :  PERLDB_SAVESRC_INVALID) {
            /* Retain the filegv we created.  */
        } else if (!saved_delete) {
index 1094510..e8fd4ae 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -47,7 +47,6 @@ PP(pp_const)
 PP(pp_nextstate)
 {
     PL_curcop = (COP*)PL_op;
-    PL_sawalias = 0;
     TAINT_NOT;         /* Each statement is presumed innocent */
     PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
     FREETMPS;
@@ -63,8 +62,6 @@ PP(pp_gvsv)
        PUSHs(save_scalar(cGVOP_gv));
     else
        PUSHs(GvSVn(cGVOP_gv));
-    if (GvREFCNT(cGVOP_gv) > 1 || GvALIASED_SV(cGVOP_gv))
-       PL_sawalias = TRUE;
     RETURN;
 }
 
@@ -99,9 +96,6 @@ PP(pp_gv)
 {
     dSP;
     XPUSHs(MUTABLE_SV(cGVOP_gv));
-    if (isGV(cGVOP_gv)
-     && (GvREFCNT(cGVOP_gv) > 1 || GvALIASED_SV(cGVOP_gv)))
-       PL_sawalias = TRUE;
     RETURN;
 }
 
@@ -1003,6 +997,148 @@ S_do_oddball(pTHX_ SV **oddkey, SV **firstkey)
     }
 }
 
+
+/* Do a mark and sweep with the SVf_BREAK flag to detect elements which
+ * are common to both the LHS and RHS of an aassign, and replace them
+ * with copies. All these copies are made before the actual list assign is
+ * done.
+ *
+ * For example in ($a,$b) = ($b,$a), assigning the value of the first RHS
+ * element ($b) to the first LH element ($a), modifies $a; when the
+ * second assignment is done, the second RH element now has the wrong
+ * value. So we initially replace the RHS with ($b, mortalcopy($a)).
+ * Note that we don't need to make a mortal copy of $b.
+ *
+ * The algorithm below works by, for every RHS element, mark the
+ * corresponding LHS target element with SVf_BREAK. Then if the RHS
+ * element is found with SVf_BREAK set, it means it would have been
+ * modified, so make a copy.
+ * Note that by scanning both LHS and RHS in lockstep, we avoid
+ * unnecessary copies (like $b above) compared with a naive
+ * "mark all LHS; copy all marked RHS; unmark all LHS".
+ *
+ * If the LHS element is a 'my' declaration' and has a refcount of 1, then
+ * it can't be common and can be skipped.
+ */
+
+PERL_STATIC_INLINE void
+S_aassign_copy_common(pTHX_ SV **firstlelem, SV **lastlelem,
+        SV **firstrelem, SV **lastrelem)
+{
+    dVAR;
+    SV **relem;
+    SV **lelem;
+    SSize_t lcount = lastlelem - firstlelem + 1;
+    bool marked = FALSE; /* have we marked any LHS with SVf_BREAK ? */
+    bool const do_rc1 = cBOOL(PL_op->op_private & OPpASSIGN_COMMON_RC1);
+
+    assert(!PL_in_clean_all); /* SVf_BREAK not already in use */
+    assert(firstlelem < lastlelem); /* at least 2 LH elements */
+    assert(firstrelem < lastrelem); /* at least 2 RH elements */
+
+    /* we never have to copy the first RH element; it can't be corrupted
+     * by assigning something to the corresponding first LH element.
+     * So this scan does in a loop: mark LHS[N]; test RHS[N+1]
+     */
+    firstrelem++;
+
+    lelem = firstlelem;
+    relem = firstrelem;
+
+    for (; relem <= lastrelem; relem++) {
+        SV *svr;
+
+        /* mark next LH element */
+
+        if (--lcount >= 0) {
+            SV *svl = *lelem++;
+
+            if (UNLIKELY(!svl)) {/* skip AV alias marker */
+                assert (lelem <= lastlelem);
+                svl = *lelem++;
+                lcount--;
+            }
+
+            assert(svl);
+            if (SvTYPE(svl) == SVt_PVAV || SvTYPE(svl) == SVt_PVHV) {
+                if (!marked)
+                    return;
+                /* this LH element will consume all further args;
+                 * no need to mark any further LH elements (if any).
+                 * But we still need to scan any remaining RHS elements;
+                 * set lcount negative to distinguish from  lcount == 0,
+                 * so the loop condition continues being true
+                 */
+                lcount = -1;
+                lelem--; /* no need to unmark this element */
+            }
+            else if (!(do_rc1 && SvREFCNT(svl) == 1) && svl != &PL_sv_undef) {
+                assert(!SvIMMORTAL(svl));
+                SvFLAGS(svl) |= SVf_BREAK;
+                marked = TRUE;
+            }
+            else if (!marked) {
+                /* don't check RH element if no SVf_BREAK flags set yet */
+                if (!lcount)
+                    break;
+                continue;
+            }
+        }
+
+        /* see if corresponding RH element needs copying */
+
+        assert(marked);
+        svr = *relem;
+        assert(svr);
+
+        if (UNLIKELY(SvFLAGS(svr) & SVf_BREAK)) {
+
+            TAINT_NOT; /* Each item is independent */
+
+            /* Dear TODO test in t/op/sort.t, I love you.
+               (It's relying on a panic, not a "semi-panic" from newSVsv()
+               and then an assertion failure below.)  */
+            if (UNLIKELY(SvIS_FREED(svr))) {
+                Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
+                           (void*)svr);
+            }
+            /* avoid break flag while copying; otherwise COW etc
+             * disabled... */
+            SvFLAGS(svr) &= ~SVf_BREAK;
+            /* Not newSVsv(), as it does not allow copy-on-write,
+               resulting in wasteful copies.
+               Also, we use SV_NOSTEAL in case the SV is used more than
+               once, e.g.  (...) = (f())[0,0]
+               Where the same SV appears twice on the RHS without a ref
+               count bump.  (Although I suspect that the SV won't be
+               stealable here anyway - DAPM).
+               */
+            *relem = sv_mortalcopy_flags(svr,
+                                SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL);
+            /* ... but restore afterwards in case it's needed again,
+             * e.g. ($a,$b,$c) = (1,$a,$a)
+             */
+            SvFLAGS(svr) |= SVf_BREAK;
+        }
+
+        if (!lcount)
+            break;
+    }
+
+    if (!marked)
+        return;
+
+    /*unmark LHS */
+
+    while (lelem > firstlelem) {
+        SV * const svl = *(--lelem);
+        if (svl)
+            SvFLAGS(svl) &= ~SVf_BREAK;
+    }
+}
+
+
+
 PP(pp_aassign)
 {
     dVAR; dSP;
@@ -1021,50 +1157,40 @@ PP(pp_aassign)
     HV *hash;
     SSize_t i;
     int magic;
-    U32 lval = 0;
+    U32 lval;
 
     PL_delaymagic = DM_DELAY;          /* catch simultaneous items */
-    gimme = GIMME_V;
-    if (gimme == G_ARRAY)
-        lval = PL_op->op_flags & OPf_MOD || LVRET;
 
     /* If there's a common identifier on both sides we have to take
      * special care that assigning the identifier on the left doesn't
      * clobber a value on the right that's used later in the list.
-     * Don't bother if LHS is just an empty hash or array.
      */
 
-    if (    (PL_op->op_private & OPpASSIGN_COMMON || PL_sawalias)
-       &&  (
-              firstlelem != lastlelem
-           || ! ((sv = *firstlelem))
-           || SvMAGICAL(sv)
-           || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
-           || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
-           || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
-           )
+    if ( (PL_op->op_private & (OPpASSIGN_COMMON_SCALAR|OPpASSIGN_COMMON_RC1))
+        /* at least 2 LH and RH elements, or commonality isn't an issue */
+        && (firstlelem < lastlelem && firstrelem < lastrelem)
     ) {
-       EXTEND_MORTAL(lastrelem - firstrelem + 1);
-       for (relem = firstrelem; relem <= lastrelem; relem++) {
-           if (LIKELY((sv = *relem))) {
-               TAINT_NOT;      /* Each item is independent */
-
-               /* Dear TODO test in t/op/sort.t, I love you.
-                  (It's relying on a panic, not a "semi-panic" from newSVsv()
-                  and then an assertion failure below.)  */
-               if (UNLIKELY(SvIS_FREED(sv))) {
-                   Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
-                              (void*)sv);
-               }
-               /* Not newSVsv(), as it does not allow copy-on-write,
-                  resulting in wasteful copies.  We need a second copy of
-                  a temp here, hence the SV_NOSTEAL.  */
-               *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
-                                              |SV_NOSTEAL);
-           }
-       }
+        if (PL_op->op_private & OPpASSIGN_COMMON_RC1) {
+            /* skip the scan if all scalars have a ref count of 1 */
+            for (lelem = firstlelem; lelem <= lastlelem; lelem++) {
+                sv = *lelem;
+                if (!sv || SvREFCNT(sv) == 1)
+                    continue;
+                if (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVAV)
+                    goto do_scan;
+                break;
+            }
+        }
+        else {
+          do_scan:
+            S_aassign_copy_common(aTHX_
+                        firstlelem, lastlelem, firstrelem, lastrelem);
+        }
     }
 
+    gimme = GIMME_V;
+    lval = (gimme == G_ARRAY) ? (PL_op->op_flags & OPf_MOD || LVRET) : 0;
+
     relem = firstrelem;
     lelem = firstlelem;
     ary = NULL;
@@ -1080,36 +1206,77 @@ PP(pp_aassign)
            ASSUME(SvTYPE(sv) == SVt_PVAV);
        }
        switch (SvTYPE(sv)) {
-       case SVt_PVAV:
+       case SVt_PVAV: {
+            bool already_copied = FALSE;
            ary = MUTABLE_AV(sv);
            magic = SvMAGICAL(ary) != 0;
            ENTER;
            SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
-           av_clear(ary);
+
+            /* We need to clear ary. The is a danger that if we do this,
+             * elements on the RHS may be prematurely freed, e.g.
+             *   @a = ($a[0]);
+             * In the case of possible commonality, make a copy of each
+             * RHS SV *before* clearing the array, and add a reference
+             * from the tmps stack, so that it doesn't leak on death.
+             * Otherwise, make a copy of each RHS SV only as we're storing
+             * it into the array - that way we don't have to worry about
+             * it being leaked if we die, but don't incur the cost of
+             * mortalising everything.
+             */
+
+            if (   (PL_op->op_private & OPpASSIGN_COMMON_AGG)
+                && (relem <= lastrelem)
+                && (magic || AvFILL(ary) != -1))
+            {
+                SV **svp;
+                EXTEND_MORTAL(lastrelem - relem + 1);
+                for (svp = relem; svp <= lastrelem; svp++) {
+                    /* see comment in S_aassign_copy_common about SV_NOSTEAL */
+                    *svp = sv_mortalcopy_flags(*svp,
+                            SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL);
+                    TAINT_NOT;
+                }
+                already_copied = TRUE;
+            }
+
+            av_clear(ary);
            av_extend(ary, lastrelem - relem);
            i = 0;
            while (relem <= lastrelem) {        /* gobble up all the rest */
                SV **didstore;
-               if (LIKELY(*relem))
-                   SvGETMAGIC(*relem); /* before newSV, in case it dies */
                if (LIKELY(!alias)) {
-                   sv = newSV(0);
-                   sv_setsv_nomg(sv, *relem);
-                   *relem = sv;
+                    if (already_copied)
+                        sv = *relem;
+                    else {
+                        if (LIKELY(*relem))
+                            /* before newSV, in case it dies */
+                            SvGETMAGIC(*relem);
+                        sv = newSV(0);
+                        /* see comment in S_aassign_copy_common about
+                         * SV_NOSTEAL */
+                        sv_setsv_flags(sv, *relem,
+                                    (SV_DO_COW_SVSETSV|SV_NOSTEAL));
+                        *relem = sv;
+                    }
                }
                else {
+                    if (!already_copied)
+                        SvGETMAGIC(*relem);
                    if (!SvROK(*relem))
                        DIE(aTHX_ "Assigned value is not a reference");
                    if (SvTYPE(SvRV(*relem)) > SVt_PVLV)
                   /* diag_listed_as: Assigned value is not %s reference */
                        DIE(aTHX_
                           "Assigned value is not a SCALAR reference");
-                   if (lval)
+                   if (lval && !already_copied)
                        *relem = sv_mortalcopy(*relem);
                    /* XXX else check for weak refs?  */
                    sv = SvREFCNT_inc_simple_NN(SvRV(*relem));
                }
                relem++;
+                if (already_copied)
+                    SvREFCNT_inc_simple_NN(sv); /* undo mortal free */
                didstore = av_store(ary,i++,sv);
                if (magic) {
                    if (!didstore)
@@ -1123,12 +1290,15 @@ PP(pp_aassign)
                SvSETMAGIC(MUTABLE_SV(ary));
            LEAVE;
            break;
+        }
+
        case SVt_PVHV: {                                /* normal hash */
                SV *tmpstr;
                 int odd;
                 int duplicates = 0;
                SV** topelem = relem;
                 SV **firsthashrelem = relem;
+                bool already_copied = FALSE;
 
                hash = MUTABLE_HV(sv);
                magic = SvMAGICAL(hash) != 0;
@@ -1143,7 +1313,31 @@ PP(pp_aassign)
 
                ENTER;
                SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
+
+                /* We need to clear hash. The is a danger that if we do this,
+                 * elements on the RHS may be prematurely freed, e.g.
+                 *   %h = (foo => $h{bar});
+                 * In the case of possible commonality, make a copy of each
+                 * RHS SV *before* clearing the hash, and add a reference
+                 * from the tmps stack, so that it doesn't leak on death.
+                 */
+
+                if (   (PL_op->op_private & OPpASSIGN_COMMON_AGG)
+                    && (relem <= lastrelem)
+                    && (magic || HvUSEDKEYS(hash)))
+                {
+                    SV **svp;
+                    EXTEND_MORTAL(lastrelem - relem + 1);
+                    for (svp = relem; svp <= lastrelem; svp++) {
+                        *svp = sv_mortalcopy_flags(*svp,
+                                SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL);
+                        TAINT_NOT;
+                    }
+                    already_copied = TRUE;
+                }
+
                hv_clear(hash);
+
                while (LIKELY(relem < lastrelem+odd)) { /* gobble up all the rest */
                    HE *didstore;
                     assert(*relem);
@@ -1151,14 +1345,19 @@ PP(pp_aassign)
                       to avoid having the next op modify our rhs.  Copy
                       it also if it is gmagical, lest it make the
                       hv_store_ent call below croak, leaking the value. */
-                   sv = lval || SvGMAGICAL(*relem)
+                   sv = (lval || SvGMAGICAL(*relem)) && !already_copied
                         ? sv_mortalcopy(*relem)
                         : *relem;
                    relem++;
                     assert(*relem);
-                   SvGETMAGIC(*relem);
-                    tmpstr = newSV(0);
-                   sv_setsv_nomg(tmpstr,*relem++);     /* value */
+                    if (already_copied)
+                        tmpstr = *relem++;
+                    else {
+                        SvGETMAGIC(*relem);
+                        tmpstr = newSV(0);
+                        sv_setsv_nomg(tmpstr,*relem++);        /* value */
+                    }
+
                    if (gimme == G_ARRAY) {
                        if (hv_exists_ent(hash, sv, 0))
                            /* key overwrites an existing entry */
@@ -1171,6 +1370,8 @@ PP(pp_aassign)
                            *topelem++ = tmpstr;
                        }
                    }
+                    if (already_copied)
+                        SvREFCNT_inc_simple_NN(tmpstr); /* undo mortal free */
                    didstore = hv_store_ent(hash,sv,tmpstr,0);
                    if (magic) {
                        if (!didstore) sv_2mortal(tmpstr);
index cf1074e..8d7f1e2 100644 (file)
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -237,7 +237,7 @@ S_mul128(pTHX_ SV *sv, U8 m)
 #define PACK_SIZE_UNPREDICTABLE                0x40    /* Not a fixed size element */
 #define PACK_SIZE_MASK                 0x3F
 
-#include "packsizetables.c"
+#include "packsizetables.inc"
 
 static void
 S_reverse_copy(const char *src, char *dest, STRLEN len)
@@ -1573,7 +1573,8 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
                    U8 ch;
                    ch = SHIFT_BYTE(utf8, s, strend, datumtype);
                    auv = (auv << 7) | (ch & 0x7f);
-                   /* UTF8_IS_XXXXX not right here - using constant 0x80 */
+                    /* UTF8_IS_XXXXX not right here because this is a BER, not
+                     * UTF-8 format - using constant 0x80 */
                    if (ch < 0x80) {
                        bytes = 0;
                        mPUSHu(auv);
@@ -1766,7 +1767,18 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
                }
                while (cdouble < 0.0)
                    cdouble += anv;
-               cdouble = Perl_modf(cdouble / anv, &trouble) * anv;
+               cdouble = Perl_modf(cdouble / anv, &trouble);
+#ifdef LONGDOUBLE_DOUBLEDOUBLE
+                /* Workaround for powerpc doubledouble modfl bug:
+                 * close to 1.0L and -1.0L cdouble is 0, and trouble
+                 * is cdouble / anv. */
+                if (trouble != Perl_ceil(trouble)) {
+                  cdouble = trouble;
+                  if (cdouble >  1.0L) cdouble -= 1.0L;
+                  if (cdouble < -1.0L) cdouble += 1.0L;
+                }
+#endif
+                cdouble *= anv;
                sv = newSVnv(cdouble);
            }
            else {
index b0f7798..dc1b3ce 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -30,7 +30,6 @@
 #define PERL_IN_PP_SYS_C
 #include "perl.h"
 #include "time64.h"
-#include "time64.c"
 
 #ifdef I_SHADOW
 /* Shadow password support for solaris - pdo@cs.umd.edu
@@ -1692,6 +1691,11 @@ PP(pp_sysread)
     fd = PerlIO_fileno(IoIFP(io));
 
     if ((fp_utf8 = PerlIO_isutf8(IoIFP(io))) && !IN_BYTES) {
+        if (PL_op->op_type == OP_SYSREAD || PL_op->op_type == OP_RECV) {
+            Perl_ck_warner(aTHX_ packWARN(WARN_DEPRECATED),
+                           "%s() is deprecated on :utf8 handles",
+                           OP_DESC(PL_op));
+        }
        buffer = SvPVutf8_force(bufsv, blen);
        /* UTF-8 may not have been set if they are all low bytes */
        SvUTF8_on(bufsv);
@@ -1951,6 +1955,9 @@ PP(pp_syswrite)
     doing_utf8 = DO_UTF8(bufsv);
 
     if (PerlIO_isutf8(IoIFP(io))) {
+        Perl_ck_warner(aTHX_ packWARN(WARN_DEPRECATED),
+                       "%s() is deprecated on :utf8 handles",
+                       OP_DESC(PL_op));
        if (!SvUTF8(bufsv)) {
            /* We don't modify the original scalar.  */
            tmpbuf = bytes_to_utf8((const U8*) buffer, &blen);
@@ -4671,9 +4678,9 @@ PP(pp_gmtime)
     }
     else {
        if (PL_op->op_type == OP_LOCALTIME)
-           err = S_localtime64_r(&when, &tmbuf);
+           err = Perl_localtime64_r(&when, &tmbuf);
        else
-           err = S_gmtime64_r(&when, &tmbuf);
+           err = Perl_gmtime64_r(&when, &tmbuf);
     }
 
     if (err == NULL) {
diff --git a/proto.h b/proto.h
index 319b248..a3bd488 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -22,11 +22,9 @@ PERL_CALLCONV UV     ASCII_TO_NEED(const UV enc, const UV ch)
                        __attribute__warn_unused_result__
                        __attribute__pure__;
 
-PERL_CALLCONV int      Perl_Gv_AMupdate(pTHX_ HV* stash, bool destructing)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_Gv_AMupdate(pTHX_ HV* stash, bool destructing);
 #define PERL_ARGS_ASSERT_GV_AMUPDATE   \
        assert(stash)
-
 PERL_CALLCONV UV       NATIVE_TO_NEED(const UV enc, const UV ch)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
@@ -37,11 +35,9 @@ PERL_CALLCONV void*  Perl_Slab_Alloc(pTHX_ size_t sz)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_Slab_Free(pTHX_ void *op)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_Slab_Free(pTHX_ void *op);
 #define PERL_ARGS_ASSERT_SLAB_FREE     \
        assert(op)
-
 PERL_CALLCONV SV*      Perl__get_encoding(pTHX)
                        __attribute__pure__;
 
@@ -56,252 +52,167 @@ PERL_CALLCONV bool        Perl__is_uni_perl_idstart(pTHX_ UV c)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV bool     Perl__is_utf8_FOO(pTHX_ const U8 classnum, const U8 *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_FOO  \
        assert(p)
 
 PERL_STATIC_INLINE STRLEN      S__is_utf8_char_slow(const U8 *s, const U8 *e)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_CHAR_SLOW    \
        assert(s); assert(e)
 
 PERL_CALLCONV bool     Perl__is_utf8_idcont(pTHX_ const U8 *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_IDCONT       \
        assert(p)
 
 PERL_CALLCONV bool     Perl__is_utf8_idstart(pTHX_ const U8 *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_IDSTART      \
        assert(p)
 
 PERL_CALLCONV bool     Perl__is_utf8_mark(pTHX_ const U8 *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_MARK \
        assert(p)
 
 PERL_CALLCONV bool     Perl__is_utf8_perl_idcont(pTHX_ const U8 *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT  \
        assert(p)
 
 PERL_CALLCONV bool     Perl__is_utf8_perl_idstart(pTHX_ const U8 *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART \
        assert(p)
 
 PERL_CALLCONV bool     Perl__is_utf8_xidcont(pTHX_ const U8 *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_XIDCONT      \
        assert(p)
 
 PERL_CALLCONV bool     Perl__is_utf8_xidstart(pTHX_ const U8 *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__IS_UTF8_XIDSTART     \
        assert(p)
 
-PERL_CALLCONV UV       Perl__to_uni_fold_flags(pTHX_ UV c, U8 *p, STRLEN *lenp, U8 flags)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV UV       Perl__to_uni_fold_flags(pTHX_ UV c, U8 *p, STRLEN *lenp, U8 flags);
 #define PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS    \
        assert(p); assert(lenp)
-
-PERL_CALLCONV UV       Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV UV       Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags);
 #define PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS   \
        assert(p); assert(ustrp)
-
-PERL_CALLCONV UV       Perl__to_utf8_lower_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, bool flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV UV       Perl__to_utf8_lower_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, bool flags);
 #define PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS  \
        assert(p); assert(ustrp)
-
-PERL_CALLCONV UV       Perl__to_utf8_title_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, bool flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV UV       Perl__to_utf8_title_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, bool flags);
 #define PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS  \
        assert(p); assert(ustrp)
-
-PERL_CALLCONV UV       Perl__to_utf8_upper_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, bool flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV UV       Perl__to_utf8_upper_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, bool flags);
 #define PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS  \
        assert(p); assert(ustrp)
-
 PERL_CALLCONV void     Perl__warn_problematic_locale(void);
-PERL_CALLCONV PADOFFSET        Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags);
 #define PERL_ARGS_ASSERT_ALLOCMY       \
        assert(name)
-
-PERL_CALLCONV SV*      Perl_amagic_call(pTHX_ SV* left, SV* right, int method, int dir)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_amagic_call(pTHX_ SV* left, SV* right, int method, int dir);
 #define PERL_ARGS_ASSERT_AMAGIC_CALL   \
        assert(left); assert(right)
-
-PERL_CALLCONV SV *     Perl_amagic_deref_call(pTHX_ SV *ref, int method)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV *     Perl_amagic_deref_call(pTHX_ SV *ref, int method);
 #define PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL     \
        assert(ref)
-
 PERL_CALLCONV bool     Perl_amagic_is_enabled(pTHX_ int method);
-PERL_STATIC_INLINE void        S_append_utf8_from_native_byte(const U8 byte, U8** dest)
-                       __attribute__nonnull__(2);
+PERL_STATIC_INLINE void        S_append_utf8_from_native_byte(const U8 byte, U8** dest);
 #define PERL_ARGS_ASSERT_APPEND_UTF8_FROM_NATIVE_BYTE  \
        assert(dest)
-
-PERL_CALLCONV I32      Perl_apply(pTHX_ I32 type, SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV I32      Perl_apply(pTHX_ I32 type, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_APPLY \
        assert(mark); assert(sp)
-
-PERL_CALLCONV void     Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv, const char *attrstr, STRLEN len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv, const char *attrstr, STRLEN len);
 #define PERL_ARGS_ASSERT_APPLY_ATTRS_STRING    \
        assert(stashpv); assert(cv); assert(attrstr)
-
 PERL_CALLCONV void     Perl_atfork_lock(void);
 PERL_CALLCONV void     Perl_atfork_unlock(void);
-PERL_CALLCONV SV**     Perl_av_arylen_p(pTHX_ AV *av)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV**     Perl_av_arylen_p(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_ARYLEN_P   \
        assert(av)
-
-PERL_CALLCONV void     Perl_av_clear(pTHX_ AV *av)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_av_clear(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_CLEAR      \
        assert(av)
-
-PERL_CALLCONV void     Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val);
 #define PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH    \
        assert(avp); assert(val)
-
-PERL_CALLCONV SV**     Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV**     Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val);
 #define PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE     \
        assert(avp); assert(val)
-
-PERL_CALLCONV SV*      Perl_av_delete(pTHX_ AV *av, SSize_t key, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_av_delete(pTHX_ AV *av, SSize_t key, I32 flags);
 #define PERL_ARGS_ASSERT_AV_DELETE     \
        assert(av)
-
 PERL_CALLCONV bool     Perl_av_exists(pTHX_ AV *av, SSize_t key)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_AV_EXISTS     \
        assert(av)
 
-PERL_CALLCONV void     Perl_av_extend(pTHX_ AV *av, SSize_t key)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_av_extend(pTHX_ AV *av, SSize_t key);
 #define PERL_ARGS_ASSERT_AV_EXTEND     \
        assert(av)
-
-PERL_CALLCONV void     Perl_av_extend_guts(pTHX_ AV *av, SSize_t key, SSize_t *maxp, SV ***allocp, SV ***arrayp)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+PERL_CALLCONV void     Perl_av_extend_guts(pTHX_ AV *av, SSize_t key, SSize_t *maxp, SV ***allocp, SV ***arrayp);
 #define PERL_ARGS_ASSERT_AV_EXTEND_GUTS        \
        assert(maxp); assert(allocp); assert(arrayp)
-
 PERL_CALLCONV SV**     Perl_av_fetch(pTHX_ AV *av, SSize_t key, I32 lval)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_AV_FETCH      \
        assert(av)
 
-PERL_CALLCONV void     Perl_av_fill(pTHX_ AV *av, SSize_t fill)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_av_fill(pTHX_ AV *av, SSize_t fill);
 #define PERL_ARGS_ASSERT_AV_FILL       \
        assert(av)
-
-PERL_CALLCONV IV*      Perl_av_iter_p(pTHX_ AV *av)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV IV*      Perl_av_iter_p(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_ITER_P     \
        assert(av)
-
 PERL_CALLCONV SSize_t  Perl_av_len(pTHX_ AV *av)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_AV_LEN        \
        assert(av)
 
 PERL_CALLCONV AV*      Perl_av_make(pTHX_ SSize_t size, SV **strp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_AV_MAKE       \
        assert(strp)
 
-PERL_CALLCONV SV*      Perl_av_pop(pTHX_ AV *av)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_av_pop(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_POP        \
        assert(av)
-
-PERL_CALLCONV void     Perl_av_push(pTHX_ AV *av, SV *val)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_av_push(pTHX_ AV *av, SV *val);
 #define PERL_ARGS_ASSERT_AV_PUSH       \
        assert(av); assert(val)
-
-PERL_CALLCONV void     Perl_av_reify(pTHX_ AV *av)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_av_reify(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_REIFY      \
        assert(av)
-
 PERL_CALLCONV SV*      Perl_av_shift(pTHX_ AV *av)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_AV_SHIFT      \
        assert(av)
 
-PERL_CALLCONV SV**     Perl_av_store(pTHX_ AV *av, SSize_t key, SV *val)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV**     Perl_av_store(pTHX_ AV *av, SSize_t key, SV *val);
 #define PERL_ARGS_ASSERT_AV_STORE      \
        assert(av)
-
 /* PERL_CALLCONV SSize_t       Perl_av_tindex(pTHX_ AV *av)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 
 PERL_STATIC_INLINE SSize_t     S_av_top_index(pTHX_ AV *av)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_AV_TOP_INDEX  \
        assert(av)
 
-PERL_CALLCONV void     Perl_av_undef(pTHX_ AV *av)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_av_undef(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_UNDEF      \
        assert(av)
-
-PERL_CALLCONV void     Perl_av_unshift(pTHX_ AV *av, SSize_t num)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_av_unshift(pTHX_ AV *av, SSize_t num);
 #define PERL_ARGS_ASSERT_AV_UNSHIFT    \
        assert(av)
-
 PERL_CALLCONV OP*      Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_BIND_MATCH    \
        assert(left); assert(right)
 
@@ -314,67 +225,44 @@ PERL_CALLCONV I32 Perl_block_gimme(pTHX)
 PERL_CALLCONV int      Perl_block_start(pTHX_ int full)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_blockhook_register(pTHX_ BHK *hk)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_blockhook_register(pTHX_ BHK *hk);
 #define PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER    \
        assert(hk)
-
 PERL_CALLCONV void     Perl_boot_core_PerlIO(pTHX);
 PERL_CALLCONV void     Perl_boot_core_UNIVERSAL(pTHX);
 PERL_CALLCONV void     Perl_boot_core_mro(pTHX);
-PERL_CALLCONV int      Perl_bytes_cmp_utf8(pTHX_ const U8 *b, STRLEN blen, const U8 *u, STRLEN ulen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV int      Perl_bytes_cmp_utf8(pTHX_ const U8 *b, STRLEN blen, const U8 *u, STRLEN ulen);
 #define PERL_ARGS_ASSERT_BYTES_CMP_UTF8        \
        assert(b); assert(u)
-
-PERL_CALLCONV U8*      Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *len, bool *is_utf8)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV U8*      Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *len, bool *is_utf8);
 #define PERL_ARGS_ASSERT_BYTES_FROM_UTF8       \
        assert(s); assert(len)
-
-PERL_CALLCONV U8*      Perl_bytes_to_utf8(pTHX_ const U8 *s, STRLEN *len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV U8*      Perl_bytes_to_utf8(pTHX_ const U8 *s, STRLEN *len);
 #define PERL_ARGS_ASSERT_BYTES_TO_UTF8 \
        assert(s); assert(len)
-
-PERL_CALLCONV I32      Perl_call_argv(pTHX_ const char* sub_name, I32 flags, char** argv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV I32      Perl_call_argv(pTHX_ const char* sub_name, I32 flags, char** argv);
 #define PERL_ARGS_ASSERT_CALL_ARGV     \
        assert(sub_name); assert(argv)
-
 PERL_CALLCONV void     Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr);
-PERL_CALLCONV void     Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_call_list(pTHX_ I32 oldscope, AV *paramList);
 #define PERL_ARGS_ASSERT_CALL_LIST     \
        assert(paramList)
-
-PERL_CALLCONV I32      Perl_call_method(pTHX_ const char* methname, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_call_method(pTHX_ const char* methname, I32 flags);
 #define PERL_ARGS_ASSERT_CALL_METHOD   \
        assert(methname)
-
-PERL_CALLCONV I32      Perl_call_pv(pTHX_ const char* sub_name, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_call_pv(pTHX_ const char* sub_name, I32 flags);
 #define PERL_ARGS_ASSERT_CALL_PV       \
        assert(sub_name)
-
-PERL_CALLCONV I32      Perl_call_sv(pTHX_ SV* sv, VOL I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_call_sv(pTHX_ SV* sv, VOL I32 flags);
 #define PERL_ARGS_ASSERT_CALL_SV       \
        assert(sv)
-
 PERL_CALLCONV const PERL_CONTEXT *     Perl_caller_cx(pTHX_ I32 level, const PERL_CONTEXT **dbcxp);
 PERL_CALLCONV Malloc_t Perl_calloc(MEM_SIZE elements, MEM_SIZE size)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV bool     Perl_cando(pTHX_ Mode_t mode, bool effective, const Stat_t* statbufp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CANDO \
        assert(statbufp)
 
@@ -390,353 +278,278 @@ PERL_CALLCONV U32       Perl_cast_ulong(NV f)
 PERL_CALLCONV UV       Perl_cast_uv(NV f)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV bool     Perl_check_utf8_print(pTHX_ const U8 *s, const STRLEN len)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_check_utf8_print(pTHX_ const U8 *s, const STRLEN len);
 #define PERL_ARGS_ASSERT_CHECK_UTF8_PRINT      \
        assert(s)
-
 PERL_CALLCONV OP *     Perl_ck_anoncode(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_ANONCODE   \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_backtick(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_BACKTICK   \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_bitop(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_BITOP      \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_cmp(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_CMP        \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_concat(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_CONCAT     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_defined(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_DEFINED    \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_delete(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_DELETE     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_each(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_EACH       \
        assert(o)
 
-PERL_CALLCONV OP*      Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV OP*      Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv);
 #define PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE \
        assert(entersubop); assert(namegv); assert(protosv)
-
-PERL_CALLCONV OP*      Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP*      Perl_ck_entersub_args_list(pTHX_ OP *entersubop);
 #define PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST \
        assert(entersubop)
-
-PERL_CALLCONV OP*      Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV OP*      Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv);
 #define PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO        \
        assert(entersubop); assert(namegv); assert(protosv)
-
-PERL_CALLCONV OP*      Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV OP*      Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop, GV *namegv, SV *protosv);
 #define PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST        \
        assert(entersubop); assert(namegv); assert(protosv)
-
 PERL_CALLCONV OP *     Perl_ck_eof(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_EOF        \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_eval(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_EVAL       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_exec(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_EXEC       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_exists(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_EXISTS     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_ftst(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_FTST       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_fun(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_FUN        \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_glob(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_GLOB       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_grep(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_GREP       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_index(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_INDEX      \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_join(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_JOIN       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_length(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_LENGTH     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_lfun(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_LFUN       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_listiob(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_LISTIOB    \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_match(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_MATCH      \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_method(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_METHOD     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_null(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_NULL       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_open(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_OPEN       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_prototype(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_PROTOTYPE  \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_readline(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_READLINE   \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_refassign(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_REFASSIGN  \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_repeat(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_REPEAT     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_require(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_REQUIRE    \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_return(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_RETURN     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_rfun(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_RFUN       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_rvconst(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_RVCONST    \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_sassign(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SASSIGN    \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_select(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SELECT     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_shift(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SHIFT      \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_smartmatch(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SMARTMATCH \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_sort(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SORT       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_spair(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SPAIR      \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_split(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SPLIT      \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_stringify(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_STRINGIFY  \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_subr(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SUBR       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_substr(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SUBSTR     \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_svconst(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_SVCONST    \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_tell(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_TELL       \
        assert(o)
 
 PERL_CALLCONV OP *     Perl_ck_trunc(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CK_TRUNC      \
        assert(o)
 
 PERL_CALLCONV void     Perl_ck_warner(pTHX_ U32 err, const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_2,pTHX_3)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_CK_WARNER     \
        assert(pat)
 
 PERL_CALLCONV void     Perl_ck_warner_d(pTHX_ U32 err, const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_2,pTHX_3)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_CK_WARNER_D   \
        assert(pat)
 
 PERL_CALLCONV bool     Perl_ckwarn(pTHX_ U32 w);
 PERL_CALLCONV bool     Perl_ckwarn_d(pTHX_ U32 w);
-PERL_CALLCONV const COP*       Perl_closest_cop(pTHX_ const COP *cop, const OP *o, const OP *curop, bool opnext)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV const COP*       Perl_closest_cop(pTHX_ const COP *cop, const OP *o, const OP *curop, bool opnext);
 #define PERL_ARGS_ASSERT_CLOSEST_COP   \
        assert(cop)
-
-PERL_CALLCONV const char *     Perl_cop_fetch_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV const char *     Perl_cop_fetch_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags);
 #define PERL_ARGS_ASSERT_COP_FETCH_LABEL       \
        assert(cop)
-
-PERL_CALLCONV void     Perl_cop_store_label(pTHX_ COP *const cop, const char *label, STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_cop_store_label(pTHX_ COP *const cop, const char *label, STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_COP_STORE_LABEL       \
        assert(cop); assert(label)
-
-PERL_CALLCONV SV *     Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code, int * const opnum)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV *     Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code, int * const opnum);
 #define PERL_ARGS_ASSERT_CORE_PROTOTYPE        \
        assert(name)
-
-PERL_CALLCONV OP *     Perl_coresub_op(pTHX_ SV *const coreargssv, const int code, const int opnum)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP *     Perl_coresub_op(pTHX_ SV *const coreargssv, const int code, const int opnum);
 #define PERL_ARGS_ASSERT_CORESUB_OP    \
        assert(coreargssv)
-
 PERL_CALLCONV PERL_CONTEXT*    Perl_create_eval_scope(pTHX_ U32 flags);
 PERL_CALLCONV_NO_RET void      Perl_croak(pTHX_ const char* pat, ...)
                        __attribute__noreturn__
@@ -755,63 +568,46 @@ PERL_CALLCONV_NO_RET void Perl_croak_popstack(void)
                        __attribute__noreturn__;
 
 PERL_CALLCONV_NO_RET void      Perl_croak_sv(pTHX_ SV *baseex)
-                       __attribute__noreturn__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__noreturn__;
 #define PERL_ARGS_ASSERT_CROAK_SV      \
        assert(baseex)
 
 PERL_CALLCONV_NO_RET void      Perl_croak_xs_usage(const CV *const cv, const char *const params)
-                       __attribute__noreturn__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__noreturn__;
 #define PERL_ARGS_ASSERT_CROAK_XS_USAGE        \
        assert(cv); assert(params)
 
 PERL_CALLCONV regexp_engine const *    Perl_current_re_engine(pTHX);
 PERL_CALLCONV const char *     Perl_custom_op_desc(pTHX_ const OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CUSTOM_OP_DESC        \
        assert(o)
 
 PERL_CALLCONV XOPRETANY        Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD   \
        assert(o)
 
 PERL_CALLCONV const char *     Perl_custom_op_name(pTHX_ const OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CUSTOM_OP_NAME        \
        assert(o)
 
-PERL_CALLCONV void     Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop);
 #define PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER    \
        assert(ppaddr); assert(xop)
-
 /* PERL_CALLCONV const XOP *   Perl_custom_op_xop(pTHX_ const OP *o)
-                       __attribute__pure__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__pure__; */
 
-PERL_CALLCONV void     Perl_cv_ckproto_len_flags(pTHX_ const CV* cv, const GV* gv, const char* p, const STRLEN len, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_cv_ckproto_len_flags(pTHX_ const CV* cv, const GV* gv, const char* p, const STRLEN len, const U32 flags);
 #define PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS  \
        assert(cv)
-
-PERL_CALLCONV CV*      Perl_cv_clone(pTHX_ CV* proto)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV CV*      Perl_cv_clone(pTHX_ CV* proto);
 #define PERL_ARGS_ASSERT_CV_CLONE      \
        assert(proto)
-
-PERL_CALLCONV CV*      Perl_cv_clone_into(pTHX_ CV* proto, CV *target)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV CV*      Perl_cv_clone_into(pTHX_ CV* proto, CV *target);
 #define PERL_ARGS_ASSERT_CV_CLONE_INTO \
        assert(proto); assert(target)
-
 PERL_CALLCONV SV*      Perl_cv_const_sv(const CV *const cv)
                        __attribute__warn_unused_result__;
 
@@ -819,393 +615,243 @@ PERL_CALLCONV SV*       Perl_cv_const_sv_or_av(const CV *const cv)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV void     Perl_cv_forget_slab(pTHX_ CV *cv);
-PERL_CALLCONV void     Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p);
 #define PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER   \
        assert(cv); assert(ckfun_p); assert(ckobj_p)
-
-PERL_CALLCONV SV *     Perl_cv_name(pTHX_ CV *cv, SV *sv, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV *     Perl_cv_name(pTHX_ CV *cv, SV *sv, U32 flags);
 #define PERL_ARGS_ASSERT_CV_NAME       \
        assert(cv)
-
-PERL_CALLCONV void     Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj);
 #define PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER   \
        assert(cv); assert(ckfun); assert(ckobj)
-
-PERL_CALLCONV void     Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj, U32 flags);
 #define PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS     \
        assert(cv); assert(ckfun); assert(ckobj)
-
-PERL_CALLCONV void     Perl_cv_undef(pTHX_ CV* cv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_cv_undef(pTHX_ CV* cv);
 #define PERL_ARGS_ASSERT_CV_UNDEF      \
        assert(cv)
-
-PERL_CALLCONV void     Perl_cv_undef_flags(pTHX_ CV* cv, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_cv_undef_flags(pTHX_ CV* cv, U32 flags);
 #define PERL_ARGS_ASSERT_CV_UNDEF_FLAGS        \
        assert(cv)
-
-PERL_CALLCONV GV *     Perl_cvgv_from_hek(pTHX_ CV* cv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV GV *     Perl_cvgv_from_hek(pTHX_ CV* cv);
 #define PERL_ARGS_ASSERT_CVGV_FROM_HEK \
        assert(cv)
-
-PERL_CALLCONV void     Perl_cvgv_set(pTHX_ CV* cv, GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_cvgv_set(pTHX_ CV* cv, GV* gv);
 #define PERL_ARGS_ASSERT_CVGV_SET      \
        assert(cv)
-
-PERL_CALLCONV void     Perl_cvstash_set(pTHX_ CV* cv, HV* stash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_cvstash_set(pTHX_ CV* cv, HV* stash);
 #define PERL_ARGS_ASSERT_CVSTASH_SET   \
        assert(cv)
-
-PERL_CALLCONV void     Perl_cx_dump(pTHX_ PERL_CONTEXT* cx)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_cx_dump(pTHX_ PERL_CONTEXT* cx);
 #define PERL_ARGS_ASSERT_CX_DUMP       \
        assert(cx)
-
 PERL_CALLCONV I32      Perl_cxinc(pTHX)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV void     Perl_deb(pTHX_ const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_1,pTHX_2)
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__format__(__printf__,pTHX_1,pTHX_2);
 #define PERL_ARGS_ASSERT_DEB   \
        assert(pat)
 
 PERL_CALLCONV void     Perl_deb_stack_all(pTHX);
-PERL_CALLCONV I32      Perl_debop(pTHX_ const OP* o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_debop(pTHX_ const OP* o);
 #define PERL_ARGS_ASSERT_DEBOP \
        assert(o)
-
 PERL_CALLCONV void     Perl_debprofdump(pTHX);
 PERL_CALLCONV I32      Perl_debstack(pTHX);
 PERL_CALLCONV I32      Perl_debstackptrs(pTHX);
 PERL_CALLCONV SV *     Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DEFELEM_TARGET        \
        assert(sv)
 
 PERL_CALLCONV void     Perl_delete_eval_scope(pTHX);
-PERL_CALLCONV char*    Perl_delimcpy(char* to, const char* toend, const char* from, const char* fromend, int delim, I32* retlen)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3)
-                       __attribute__nonnull__(4)
-                       __attribute__nonnull__(6);
+PERL_CALLCONV char*    Perl_delimcpy(char* to, const char* toend, const char* from, const char* fromend, int delim, I32* retlen);
 #define PERL_ARGS_ASSERT_DELIMCPY      \
        assert(to); assert(toend); assert(from); assert(fromend); assert(retlen)
-
 PERL_CALLCONV void     Perl_despatch_signals(pTHX);
 PERL_CALLCONV_NO_RET OP*       Perl_die(pTHX_ const char* pat, ...)
                        __attribute__noreturn__
                        __attribute__format__null_ok__(__printf__,pTHX_1,pTHX_2);
 
 PERL_CALLCONV_NO_RET OP*       Perl_die_sv(pTHX_ SV *baseex)
-                       __attribute__noreturn__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__noreturn__;
 #define PERL_ARGS_ASSERT_DIE_SV        \
        assert(baseex)
 
 PERL_CALLCONV_NO_RET void      Perl_die_unwind(pTHX_ SV* msv)
-                       __attribute__noreturn__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__noreturn__;
 #define PERL_ARGS_ASSERT_DIE_UNWIND    \
        assert(msv)
 
-/* PERL_CALLCONV bool  Perl_do_aexec(pTHX_ SV* really, SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3); */
+/* PERL_CALLCONV bool  Perl_do_aexec(pTHX_ SV* really, SV** mark, SV** sp); */
 #define PERL_ARGS_ASSERT_DO_AEXEC      \
        assert(mark); assert(sp)
-
-PERL_CALLCONV bool     Perl_do_aexec5(pTHX_ SV* really, SV** mark, SV** sp, int fd, int do_report)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV bool     Perl_do_aexec5(pTHX_ SV* really, SV** mark, SV** sp, int fd, int do_report);
 #define PERL_ARGS_ASSERT_DO_AEXEC5     \
        assert(mark); assert(sp)
-
-PERL_CALLCONV int      Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode);
 #define PERL_ARGS_ASSERT_DO_BINMODE    \
        assert(fp)
-
 PERL_CALLCONV bool     Perl_do_close(pTHX_ GV* gv, bool not_implicit);
-PERL_CALLCONV void     Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full);
 #define PERL_ARGS_ASSERT_DO_DUMP_PAD   \
        assert(file)
-
-PERL_CALLCONV bool     Perl_do_eof(pTHX_ GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_do_eof(pTHX_ GV* gv);
 #define PERL_ARGS_ASSERT_DO_EOF        \
        assert(gv)
-
 PERL_CALLCONV void     Perl_do_execfree(pTHX);
-PERL_CALLCONV void     Perl_do_gv_dump(pTHX_ I32 level, PerlIO *file, const char *name, GV *sv)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_do_gv_dump(pTHX_ I32 level, PerlIO *file, const char *name, GV *sv);
 #define PERL_ARGS_ASSERT_DO_GV_DUMP    \
        assert(file); assert(name)
-
-PERL_CALLCONV void     Perl_do_gvgv_dump(pTHX_ I32 level, PerlIO *file, const char *name, GV *sv)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_do_gvgv_dump(pTHX_ I32 level, PerlIO *file, const char *name, GV *sv);
 #define PERL_ARGS_ASSERT_DO_GVGV_DUMP  \
        assert(file); assert(name)
-
-PERL_CALLCONV void     Perl_do_hv_dump(pTHX_ I32 level, PerlIO *file, const char *name, HV *sv)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_do_hv_dump(pTHX_ I32 level, PerlIO *file, const char *name, HV *sv);
 #define PERL_ARGS_ASSERT_DO_HV_DUMP    \
        assert(file); assert(name)
-
-PERL_CALLCONV void     Perl_do_join(pTHX_ SV *sv, SV *delim, SV **mark, SV **sp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV void     Perl_do_join(pTHX_ SV *sv, SV *delim, SV **mark, SV **sp);
 #define PERL_ARGS_ASSERT_DO_JOIN       \
        assert(sv); assert(delim); assert(mark); assert(sp)
-
-PERL_CALLCONV void     Perl_do_magic_dump(pTHX_ I32 level, PerlIO *file, const MAGIC *mg, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_do_magic_dump(pTHX_ I32 level, PerlIO *file, const MAGIC *mg, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim);
 #define PERL_ARGS_ASSERT_DO_MAGIC_DUMP \
        assert(file)
-
 PERL_CALLCONV I32      Perl_do_ncmp(pTHX_ SV *const left, SV *const right)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DO_NCMP       \
        assert(left); assert(right)
 
-PERL_CALLCONV void     Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o);
 #define PERL_ARGS_ASSERT_DO_OP_DUMP    \
        assert(file)
-
-/* PERL_CALLCONV bool  Perl_do_open(pTHX_ GV* gv, const char* name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO* supplied_fp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV bool  Perl_do_open(pTHX_ GV* gv, const char* name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO* supplied_fp); */
 #define PERL_ARGS_ASSERT_DO_OPEN       \
        assert(gv); assert(name)
-
-PERL_CALLCONV bool     Perl_do_open6(pTHX_ GV *gv, const char *oname, STRLEN len, PerlIO *supplied_fp, SV **svp, U32 num)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV bool     Perl_do_open6(pTHX_ GV *gv, const char *oname, STRLEN len, PerlIO *supplied_fp, SV **svp, U32 num);
 #define PERL_ARGS_ASSERT_DO_OPEN6      \
        assert(gv); assert(oname)
-
-PERL_CALLCONV bool     Perl_do_open9(pTHX_ GV *gv, const char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_8);
+PERL_CALLCONV bool     Perl_do_open9(pTHX_ GV *gv, const char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num);
 #define PERL_ARGS_ASSERT_DO_OPEN9      \
        assert(gv); assert(name); assert(svs)
-
-PERL_CALLCONV bool     Perl_do_open_raw(pTHX_ GV *gv, const char *oname, STRLEN len, int rawmode, int rawperm)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV bool     Perl_do_open_raw(pTHX_ GV *gv, const char *oname, STRLEN len, int rawmode, int rawperm);
 #define PERL_ARGS_ASSERT_DO_OPEN_RAW   \
        assert(gv); assert(oname)
-
-PERL_CALLCONV bool     Perl_do_openn(pTHX_ GV *gv, const char *oname, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV **svp, I32 num)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV bool     Perl_do_openn(pTHX_ GV *gv, const char *oname, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV **svp, I32 num);
 #define PERL_ARGS_ASSERT_DO_OPENN      \
        assert(gv); assert(oname)
-
-PERL_CALLCONV void     Perl_do_pmop_dump(pTHX_ I32 level, PerlIO *file, const PMOP *pm)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_do_pmop_dump(pTHX_ I32 level, PerlIO *file, const PMOP *pm);
 #define PERL_ARGS_ASSERT_DO_PMOP_DUMP  \
        assert(file)
-
-PERL_CALLCONV bool     Perl_do_print(pTHX_ SV* sv, PerlIO* fp)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV bool     Perl_do_print(pTHX_ SV* sv, PerlIO* fp);
 #define PERL_ARGS_ASSERT_DO_PRINT      \
        assert(fp)
-
 PERL_CALLCONV OP*      Perl_do_readline(pTHX)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV bool     Perl_do_seek(pTHX_ GV* gv, Off_t pos, int whence);
-PERL_CALLCONV void     Perl_do_sprintf(pTHX_ SV* sv, I32 len, SV** sarg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_do_sprintf(pTHX_ SV* sv, I32 len, SV** sarg);
 #define PERL_ARGS_ASSERT_DO_SPRINTF    \
        assert(sv); assert(sarg)
-
-PERL_CALLCONV void     Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim);
 #define PERL_ARGS_ASSERT_DO_SV_DUMP    \
        assert(file)
-
-PERL_CALLCONV Off_t    Perl_do_sysseek(pTHX_ GV* gv, Off_t pos, int whence)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV Off_t    Perl_do_sysseek(pTHX_ GV* gv, Off_t pos, int whence);
 #define PERL_ARGS_ASSERT_DO_SYSSEEK    \
        assert(gv)
-
 PERL_CALLCONV Off_t    Perl_do_tell(pTHX_ GV* gv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DO_TELL       \
        assert(gv)
 
-PERL_CALLCONV I32      Perl_do_trans(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_do_trans(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_DO_TRANS      \
        assert(sv)
-
-PERL_CALLCONV UV       Perl_do_vecget(pTHX_ SV* sv, SSize_t offset, int size)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV UV       Perl_do_vecget(pTHX_ SV* sv, SSize_t offset, int size);
 #define PERL_ARGS_ASSERT_DO_VECGET     \
        assert(sv)
-
-PERL_CALLCONV void     Perl_do_vecset(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_do_vecset(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_DO_VECSET     \
        assert(sv)
-
-PERL_CALLCONV void     Perl_do_vop(pTHX_ I32 optype, SV* sv, SV* left, SV* right)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV void     Perl_do_vop(pTHX_ I32 optype, SV* sv, SV* left, SV* right);
 #define PERL_ARGS_ASSERT_DO_VOP        \
        assert(sv); assert(left); assert(right)
-
-PERL_CALLCONV OP*      Perl_dofile(pTHX_ OP* term, I32 force_builtin)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP*      Perl_dofile(pTHX_ OP* term, I32 force_builtin);
 #define PERL_ARGS_ASSERT_DOFILE        \
        assert(term)
-
 PERL_CALLCONV bool     Perl_doing_taint(int argc, char** argv, char** env)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV OP *     Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP *     Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref);
 #define PERL_ARGS_ASSERT_DOREF \
        assert(o)
-
 PERL_CALLCONV void     Perl_dounwind(pTHX_ I32 cxix);
 PERL_CALLCONV I32      Perl_dowantarray(pTHX)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_drand48_init_r(perl_drand48_t *random_state, U32 seed)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void     Perl_drand48_init_r(perl_drand48_t *random_state, U32 seed);
 #define PERL_ARGS_ASSERT_DRAND48_INIT_R        \
        assert(random_state)
-
-PERL_CALLCONV double   Perl_drand48_r(perl_drand48_t *random_state)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV double   Perl_drand48_r(perl_drand48_t *random_state);
 #define PERL_ARGS_ASSERT_DRAND48_R     \
        assert(random_state)
-
 PERL_CALLCONV void     Perl_dump_all(pTHX);
 PERL_CALLCONV void     Perl_dump_all_perl(pTHX_ bool justperl);
 PERL_CALLCONV void     Perl_dump_eval(pTHX);
-PERL_CALLCONV void     Perl_dump_form(pTHX_ const GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_dump_form(pTHX_ const GV* gv);
 #define PERL_ARGS_ASSERT_DUMP_FORM     \
        assert(gv)
-
 PERL_CALLCONV void     Perl_dump_indent(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_3,pTHX_4)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__format__(__printf__,pTHX_3,pTHX_4);
 #define PERL_ARGS_ASSERT_DUMP_INDENT   \
        assert(file); assert(pat)
 
-PERL_CALLCONV void     Perl_dump_packsubs(pTHX_ const HV* stash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_dump_packsubs(pTHX_ const HV* stash);
 #define PERL_ARGS_ASSERT_DUMP_PACKSUBS \
        assert(stash)
-
-PERL_CALLCONV void     Perl_dump_packsubs_perl(pTHX_ const HV* stash, bool justperl)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_dump_packsubs_perl(pTHX_ const HV* stash, bool justperl);
 #define PERL_ARGS_ASSERT_DUMP_PACKSUBS_PERL    \
        assert(stash)
-
-PERL_CALLCONV void     Perl_dump_sub(pTHX_ const GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_dump_sub(pTHX_ const GV* gv);
 #define PERL_ARGS_ASSERT_DUMP_SUB      \
        assert(gv)
-
-PERL_CALLCONV void     Perl_dump_sub_perl(pTHX_ const GV* gv, bool justperl)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_dump_sub_perl(pTHX_ const GV* gv, bool justperl);
 #define PERL_ARGS_ASSERT_DUMP_SUB_PERL \
        assert(gv)
-
-PERL_CALLCONV void     Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args);
 #define PERL_ARGS_ASSERT_DUMP_VINDENT  \
        assert(file); assert(pat)
-
-PERL_CALLCONV void     Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv);
 #define PERL_ARGS_ASSERT_EMULATE_COP_IO        \
        assert(c); assert(sv)
-
-PERL_CALLCONV SV*      Perl_eval_pv(pTHX_ const char* p, I32 croak_on_error)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_eval_pv(pTHX_ const char* p, I32 croak_on_error);
 #define PERL_ARGS_ASSERT_EVAL_PV       \
        assert(p)
-
-PERL_CALLCONV I32      Perl_eval_sv(pTHX_ SV* sv, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_eval_sv(pTHX_ SV* sv, I32 flags);
 #define PERL_ARGS_ASSERT_EVAL_SV       \
        assert(sv)
-
-PERL_CALLCONV void     Perl_fbm_compile(pTHX_ SV* sv, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_fbm_compile(pTHX_ SV* sv, U32 flags);
 #define PERL_ARGS_ASSERT_FBM_COMPILE   \
        assert(sv)
-
 PERL_CALLCONV char*    Perl_fbm_instr(pTHX_ unsigned char* big, unsigned char* bigend, SV* littlestr, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_FBM_INSTR     \
        assert(big); assert(bigend); assert(littlestr)
 
-PERL_CALLCONV bool     Perl_feature_is_enabled(pTHX_ const char *const name, STRLEN namelen)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_feature_is_enabled(pTHX_ const char *const name, STRLEN namelen);
 #define PERL_ARGS_ASSERT_FEATURE_IS_ENABLED    \
        assert(name)
-
 PERL_CALLCONV SV*      Perl_filter_add(pTHX_ filter_t funcp, SV* datasv);
-PERL_CALLCONV void     Perl_filter_del(pTHX_ filter_t funcp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_filter_del(pTHX_ filter_t funcp);
 #define PERL_ARGS_ASSERT_FILTER_DEL    \
        assert(funcp)
-
 PERL_CALLCONV I32      Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_FILTER_READ   \
        assert(buf_sv)
 
-PERL_CALLCONV void     Perl_finalize_optree(pTHX_ OP* o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_finalize_optree(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_FINALIZE_OPTREE       \
        assert(o)
-
 PERL_CALLCONV CV *     Perl_find_lexical_cv(pTHX_ PADOFFSET off);
 PERL_CALLCONV CV*      Perl_find_runcv(pTHX_ U32 *db_seqp)
                        __attribute__warn_unused_result__;
@@ -1214,91 +860,68 @@ PERL_CALLCONV CV*        Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV SV*      Perl_find_rundefsv(pTHX);
-PERL_CALLCONV SV*      Perl_find_rundefsv2(pTHX_ CV *cv, U32 seq)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_find_rundefsv2(pTHX_ CV *cv, U32 seq);
 #define PERL_ARGS_ASSERT_FIND_RUNDEFSV2        \
        assert(cv)
-
 PERL_CALLCONV PADOFFSET        Perl_find_rundefsvoffset(pTHX)
                        __attribute__deprecated__;
 
-PERL_CALLCONV char*    Perl_find_script(pTHX_ const char *scriptname, bool dosearch, const char *const *const search_ext, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_find_script(pTHX_ const char *scriptname, bool dosearch, const char *const *const search_ext, I32 flags);
 #define PERL_ARGS_ASSERT_FIND_SCRIPT   \
        assert(scriptname)
-
 PERL_CALLCONV I32      Perl_foldEQ(const char* a, const char* b, I32 len)
-                       __attribute__pure__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_FOLDEQ        \
        assert(a); assert(b)
 
 PERL_CALLCONV I32      Perl_foldEQ_latin1(const char* a, const char* b, I32 len)
-                       __attribute__pure__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_FOLDEQ_LATIN1 \
        assert(a); assert(b)
 
 PERL_CALLCONV I32      Perl_foldEQ_locale(const char* a, const char* b, I32 len)
-                       __attribute__pure__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_FOLDEQ_LOCALE \
        assert(a); assert(b)
 
-/* PERL_CALLCONV I32   foldEQ_utf8(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_5); */
-
-PERL_CALLCONV I32      Perl_foldEQ_utf8_flags(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_5);
+/* PERL_CALLCONV I32   foldEQ_utf8(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2); */
+PERL_CALLCONV I32      Perl_foldEQ_utf8_flags(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2, U32 flags);
 #define PERL_ARGS_ASSERT_FOLDEQ_UTF8_FLAGS     \
        assert(s1); assert(s2)
-
 PERL_CALLCONV char*    Perl_form(pTHX_ const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_1,pTHX_2)
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__format__(__printf__,pTHX_1,pTHX_2);
 #define PERL_ARGS_ASSERT_FORM  \
        assert(pat)
 
+PERL_CALLCONV char*    Perl_form_short_octal_warning(pTHX_ const char * const s, const STRLEN len)
+                       __attribute__warn_unused_result__
+                       __attribute__pure__;
+#define PERL_ARGS_ASSERT_FORM_SHORT_OCTAL_WARNING      \
+       assert(s)
+
 PERL_CALLCONV void     Perl_free_tied_hv_pool(pTHX);
 PERL_CALLCONV void     Perl_free_tmps(pTHX);
-PERL_CALLCONV AV*      Perl_get_av(pTHX_ const char *name, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV AV*      Perl_get_av(pTHX_ const char *name, I32 flags);
 #define PERL_ARGS_ASSERT_GET_AV        \
        assert(name)
-
 PERL_CALLCONV void*    Perl_get_context(void)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV CV*      Perl_get_cv(pTHX_ const char* name, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV CV*      Perl_get_cv(pTHX_ const char* name, I32 flags);
 #define PERL_ARGS_ASSERT_GET_CV        \
        assert(name)
-
-PERL_CALLCONV CV*      Perl_get_cvn_flags(pTHX_ const char* name, STRLEN len, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV CV*      Perl_get_cvn_flags(pTHX_ const char* name, STRLEN len, I32 flags);
 #define PERL_ARGS_ASSERT_GET_CVN_FLAGS \
        assert(name)
-
-PERL_CALLCONV void     Perl_get_db_sub(pTHX_ SV **svp, CV *cv)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_get_db_sub(pTHX_ SV **svp, CV *cv);
 #define PERL_ARGS_ASSERT_GET_DB_SUB    \
        assert(cv)
-
-PERL_CALLCONV void     Perl_get_hash_seed(pTHX_ unsigned char * const seed_buffer)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_get_hash_seed(pTHX_ unsigned char * const seed_buffer);
 #define PERL_ARGS_ASSERT_GET_HASH_SEED \
        assert(seed_buffer)
-
-PERL_CALLCONV HV*      Perl_get_hv(pTHX_ const char *name, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV HV*      Perl_get_hv(pTHX_ const char *name, I32 flags);
 #define PERL_ARGS_ASSERT_GET_HV        \
        assert(name)
-
 PERL_CALLCONV const char*      Perl_get_no_modify(pTHX)
                        __attribute__warn_unused_result__
                        __attribute__pure__;
@@ -1320,484 +943,311 @@ PERL_CALLCONV PPADDR_t*        Perl_get_ppaddr(pTHX)
                        __attribute__pure__;
 
 PERL_CALLCONV REGEXP * Perl_get_re_arg(pTHX_ SV *sv);
-PERL_CALLCONV SV*      Perl_get_sv(pTHX_ const char *name, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_get_sv(pTHX_ const char *name, I32 flags);
 #define PERL_ARGS_ASSERT_GET_SV        \
        assert(name)
-
 PERL_CALLCONV MGVTBL*  Perl_get_vtbl(pTHX_ int vtbl_id)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV int      Perl_getcwd_sv(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_getcwd_sv(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_GETCWD_SV     \
        assert(sv)
-
 PERL_CALLCONV void     Perl_gp_free(pTHX_ GV* gv);
 PERL_CALLCONV GP*      Perl_gp_ref(pTHX_ GP* gp);
-PERL_CALLCONV bool     Perl_grok_atoUV(const char* pv, UV* valptr, const char** endptr)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+PERL_CALLCONV bool     Perl_grok_atoUV(const char* pv, UV* valptr, const char** endptr);
 #define PERL_ARGS_ASSERT_GROK_ATOUV    \
        assert(pv); assert(valptr)
-
-PERL_CALLCONV UV       Perl_grok_bin(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV UV       Perl_grok_bin(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result);
 #define PERL_ARGS_ASSERT_GROK_BIN      \
        assert(start); assert(len_p); assert(flags)
+PERL_CALLCONV char     Perl_grok_bslash_c(pTHX_ const char source, const bool output_warning)
+                       __attribute__warn_unused_result__;
 
-PERL_CALLCONV UV       Perl_grok_hex(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV bool     Perl_grok_bslash_o(pTHX_ char** s, UV* uv, const char** error_msg, const bool output_warning, const bool strict, const bool silence_non_portable, const bool utf8)
+                       __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GROK_BSLASH_O \
+       assert(s); assert(uv); assert(error_msg)
+
+PERL_CALLCONV UV       Perl_grok_hex(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result);
 #define PERL_ARGS_ASSERT_GROK_HEX      \
        assert(start); assert(len_p); assert(flags)
-
-PERL_CALLCONV int      Perl_grok_infnan(pTHX_ const char** sp, const char *send)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_grok_infnan(pTHX_ const char** sp, const char *send);
 #define PERL_ARGS_ASSERT_GROK_INFNAN   \
        assert(sp); assert(send)
-
-PERL_CALLCONV int      Perl_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep);
 #define PERL_ARGS_ASSERT_GROK_NUMBER   \
        assert(pv)
-
-PERL_CALLCONV int      Perl_grok_number_flags(pTHX_ const char *pv, STRLEN len, UV *valuep, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_grok_number_flags(pTHX_ const char *pv, STRLEN len, UV *valuep, U32 flags);
 #define PERL_ARGS_ASSERT_GROK_NUMBER_FLAGS     \
        assert(pv)
-
 PERL_CALLCONV bool     Perl_grok_numeric_radix(pTHX_ const char **sp, const char *send)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GROK_NUMERIC_RADIX    \
        assert(sp); assert(send)
 
-PERL_CALLCONV UV       Perl_grok_oct(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV UV       Perl_grok_oct(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result);
 #define PERL_ARGS_ASSERT_GROK_OCT      \
        assert(start); assert(len_p); assert(flags)
-
 /* PERL_CALLCONV GV*   Perl_gv_AVadd(pTHX_ GV *gv); */
 /* PERL_CALLCONV GV*   Perl_gv_HVadd(pTHX_ GV *gv); */
 /* PERL_CALLCONV GV*   Perl_gv_IOadd(pTHX_ GV* gv); */
 PERL_CALLCONV GV*      Perl_gv_add_by_type(pTHX_ GV *gv, svtype type);
 /* PERL_CALLCONV GV*   gv_autoload4(pTHX_ HV* stash, const char* name, STRLEN len, I32 method)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2); */
+                       __attribute__warn_unused_result__; */
 
 PERL_CALLCONV GV*      Perl_gv_autoload_pv(pTHX_ HV* stash, const char* namepv, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GV_AUTOLOAD_PV        \
        assert(namepv)
 
 PERL_CALLCONV GV*      Perl_gv_autoload_pvn(pTHX_ HV* stash, const char* name, STRLEN len, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN       \
        assert(name)
 
 PERL_CALLCONV GV*      Perl_gv_autoload_sv(pTHX_ HV* stash, SV* namesv, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GV_AUTOLOAD_SV        \
        assert(namesv)
 
-PERL_CALLCONV void     Perl_gv_check(pTHX_ HV* stash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_gv_check(pTHX_ HV* stash);
 #define PERL_ARGS_ASSERT_GV_CHECK      \
        assert(stash)
-
 PERL_CALLCONV SV*      Perl_gv_const_sv(pTHX_ GV* gv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GV_CONST_SV   \
        assert(gv)
 
 PERL_CALLCONV void     Perl_gv_dump(pTHX_ GV* gv);
-PERL_CALLCONV void     Perl_gv_efullname(pTHX_ SV* sv, const GV* gv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_gv_efullname(pTHX_ SV* sv, const GV* gv);
 #define PERL_ARGS_ASSERT_GV_EFULLNAME  \
        assert(sv); assert(gv)
-
-/* PERL_CALLCONV void  Perl_gv_efullname3(pTHX_ SV* sv, const GV* gv, const char* prefix)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV void  Perl_gv_efullname3(pTHX_ SV* sv, const GV* gv, const char* prefix); */
 #define PERL_ARGS_ASSERT_GV_EFULLNAME3 \
        assert(sv); assert(gv)
-
-PERL_CALLCONV void     Perl_gv_efullname4(pTHX_ SV* sv, const GV* gv, const char* prefix, bool keepmain)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_gv_efullname4(pTHX_ SV* sv, const GV* gv, const char* prefix, bool keepmain);
 #define PERL_ARGS_ASSERT_GV_EFULLNAME4 \
        assert(sv); assert(gv)
-
-PERL_CALLCONV GV*      Perl_gv_fetchfile(pTHX_ const char* name)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV GV*      Perl_gv_fetchfile(pTHX_ const char* name);
 #define PERL_ARGS_ASSERT_GV_FETCHFILE  \
        assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN len, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV GV*      Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN len, const U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS    \
        assert(name)
-
-/* PERL_CALLCONV GV*   gv_fetchmeth(pTHX_ HV* stash, const char* name, STRLEN len, I32 level)
-                       __attribute__nonnull__(pTHX_2); */
-
-/* PERL_CALLCONV GV*   gv_fetchmeth_autoload(pTHX_ HV* stash, const char* name, STRLEN len, I32 level)
-                       __attribute__nonnull__(pTHX_2); */
-
-PERL_CALLCONV GV*      Perl_gv_fetchmeth_pv(pTHX_ HV* stash, const char* name, I32 level, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+/* PERL_CALLCONV GV*   gv_fetchmeth(pTHX_ HV* stash, const char* name, STRLEN len, I32 level); */
+/* PERL_CALLCONV GV*   gv_fetchmeth_autoload(pTHX_ HV* stash, const char* name, STRLEN len, I32 level); */
+PERL_CALLCONV GV*      Perl_gv_fetchmeth_pv(pTHX_ HV* stash, const char* name, I32 level, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETH_PV       \
        assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmeth_pv_autoload(pTHX_ HV* stash, const char* name, I32 level, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmeth_pv_autoload(pTHX_ HV* stash, const char* name, I32 level, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD      \
        assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmeth_pvn(pTHX_ HV* stash, const char* name, STRLEN len, I32 level, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmeth_pvn(pTHX_ HV* stash, const char* name, STRLEN len, I32 level, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETH_PVN      \
        assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV* stash, const char* name, STRLEN len, I32 level, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV* stash, const char* name, STRLEN len, I32 level, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD     \
        assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmeth_sv(pTHX_ HV* stash, SV* namesv, I32 level, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmeth_sv(pTHX_ HV* stash, SV* namesv, I32 level, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETH_SV       \
        assert(namesv)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmeth_sv_autoload(pTHX_ HV* stash, SV* namesv, I32 level, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmeth_sv_autoload(pTHX_ HV* stash, SV* namesv, I32 level, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD      \
        assert(namesv)
-
-/* PERL_CALLCONV GV*   Perl_gv_fetchmethod(pTHX_ HV* stash, const char* name)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV GV*   Perl_gv_fetchmethod(pTHX_ HV* stash, const char* name); */
 #define PERL_ARGS_ASSERT_GV_FETCHMETHOD        \
        assert(stash); assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmethod_autoload(pTHX_ HV* stash, const char* name, I32 autoload)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmethod_autoload(pTHX_ HV* stash, const char* name, I32 autoload);
 #define PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD       \
        assert(stash); assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmethod_pv_flags(pTHX_ HV* stash, const char* name, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmethod_pv_flags(pTHX_ HV* stash, const char* name, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS       \
        assert(stash); assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmethod_pvn_flags(pTHX_ HV* stash, const char* name, const STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmethod_pvn_flags(pTHX_ HV* stash, const char* name, const STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS      \
        assert(stash); assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchmethod_sv_flags(pTHX_ HV* stash, SV* namesv, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV GV*      Perl_gv_fetchmethod_sv_flags(pTHX_ HV* stash, SV* namesv, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS       \
        assert(stash); assert(namesv)
-
-PERL_CALLCONV GV*      Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV GV*      Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type);
 #define PERL_ARGS_ASSERT_GV_FETCHPV    \
        assert(nambeg)
-
-PERL_CALLCONV GV*      Perl_gv_fetchpvn_flags(pTHX_ const char* name, STRLEN len, I32 flags, const svtype sv_type)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV GV*      Perl_gv_fetchpvn_flags(pTHX_ const char* name, STRLEN len, I32 flags, const svtype sv_type);
 #define PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS     \
        assert(name)
-
-PERL_CALLCONV GV*      Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV GV*      Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type);
 #define PERL_ARGS_ASSERT_GV_FETCHSV    \
        assert(name)
-
-PERL_CALLCONV void     Perl_gv_fullname(pTHX_ SV* sv, const GV* gv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_gv_fullname(pTHX_ SV* sv, const GV* gv);
 #define PERL_ARGS_ASSERT_GV_FULLNAME   \
        assert(sv); assert(gv)
-
-/* PERL_CALLCONV void  Perl_gv_fullname3(pTHX_ SV* sv, const GV* gv, const char* prefix)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV void  Perl_gv_fullname3(pTHX_ SV* sv, const GV* gv, const char* prefix); */
 #define PERL_ARGS_ASSERT_GV_FULLNAME3  \
        assert(sv); assert(gv)
-
-PERL_CALLCONV void     Perl_gv_fullname4(pTHX_ SV* sv, const GV* gv, const char* prefix, bool keepmain)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_gv_fullname4(pTHX_ SV* sv, const GV* gv, const char* prefix, bool keepmain);
 #define PERL_ARGS_ASSERT_GV_FULLNAME4  \
        assert(sv); assert(gv)
-
 PERL_CALLCONV CV*      Perl_gv_handler(pTHX_ HV* stash, I32 id)
                        __attribute__warn_unused_result__;
 
-/* PERL_CALLCONV void  gv_init(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, int multi)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3); */
-
-PERL_CALLCONV void     Perl_gv_init_pv(pTHX_ GV* gv, HV* stash, const char* name, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+/* PERL_CALLCONV void  gv_init(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, int multi); */
+PERL_CALLCONV void     Perl_gv_init_pv(pTHX_ GV* gv, HV* stash, const char* name, U32 flags);
 #define PERL_ARGS_ASSERT_GV_INIT_PV    \
        assert(gv); assert(name)
-
-PERL_CALLCONV void     Perl_gv_init_pvn(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_gv_init_pvn(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_GV_INIT_PVN   \
        assert(gv); assert(name)
-
-PERL_CALLCONV void     Perl_gv_init_sv(pTHX_ GV* gv, HV* stash, SV* namesv, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_gv_init_sv(pTHX_ GV* gv, HV* stash, SV* namesv, U32 flags);
 #define PERL_ARGS_ASSERT_GV_INIT_SV    \
        assert(gv); assert(namesv)
-
-PERL_CALLCONV void     Perl_gv_name_set(pTHX_ GV* gv, const char *name, U32 len, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_gv_name_set(pTHX_ GV* gv, const char *name, U32 len, U32 flags);
 #define PERL_ARGS_ASSERT_GV_NAME_SET   \
        assert(gv); assert(name)
-
-PERL_CALLCONV GV *     Perl_gv_override(pTHX_ const char * const name, const STRLEN len)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV GV *     Perl_gv_override(pTHX_ const char * const name, const STRLEN len);
 #define PERL_ARGS_ASSERT_GV_OVERRIDE   \
        assert(name)
-
-PERL_CALLCONV void     Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr);
 #define PERL_ARGS_ASSERT_GV_SETREF     \
        assert(dstr); assert(sstr)
-
-PERL_CALLCONV HV*      Perl_gv_stashpv(pTHX_ const char* name, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV HV*      Perl_gv_stashpv(pTHX_ const char* name, I32 flags);
 #define PERL_ARGS_ASSERT_GV_STASHPV    \
        assert(name)
-
-PERL_CALLCONV HV*      Perl_gv_stashpvn(pTHX_ const char* name, U32 namelen, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV HV*      Perl_gv_stashpvn(pTHX_ const char* name, U32 namelen, I32 flags);
 #define PERL_ARGS_ASSERT_GV_STASHPVN   \
        assert(name)
-
-PERL_CALLCONV HV*      Perl_gv_stashsv(pTHX_ SV* sv, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV HV*      Perl_gv_stashsv(pTHX_ SV* sv, I32 flags);
 #define PERL_ARGS_ASSERT_GV_STASHSV    \
        assert(sv)
-
-PERL_CALLCONV void     Perl_gv_try_downgrade(pTHX_ GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_gv_try_downgrade(pTHX_ GV* gv);
 #define PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE      \
        assert(gv)
-
-PERL_CALLCONV AV**     Perl_hv_backreferences_p(pTHX_ HV *hv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV AV**     Perl_hv_backreferences_p(pTHX_ HV *hv);
 #define PERL_ARGS_ASSERT_HV_BACKREFERENCES_P   \
        assert(hv)
-
 PERL_CALLCONV void     Perl_hv_clear(pTHX_ HV *hv);
-PERL_CALLCONV void     Perl_hv_clear_placeholders(pTHX_ HV *hv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_clear_placeholders(pTHX_ HV *hv);
 #define PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS \
        assert(hv)
-
 PERL_CALLCONV void*    Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char* key, STRLEN klen, int flags, int action, SV *val, U32 hash);
-PERL_CALLCONV void*    Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 klen_i32, const int action, SV *val, const U32 hash)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void*    Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 klen_i32, const int action, SV *val, const U32 hash);
 #define PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN     \
        assert(key)
-
 PERL_CALLCONV HV *     Perl_hv_copy_hints_hv(pTHX_ HV *const ohv)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_hv_delayfree_ent(pTHX_ HV *hv, HE *entry)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_delayfree_ent(pTHX_ HV *hv, HE *entry);
 #define PERL_ARGS_ASSERT_HV_DELAYFREE_ENT      \
        assert(hv)
-
-/* PERL_CALLCONV SV*   Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen, I32 flags)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV SV*   Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen, I32 flags); */
 #define PERL_ARGS_ASSERT_HV_DELETE     \
        assert(key)
-
-/* PERL_CALLCONV SV*   Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV SV*   Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash); */
 #define PERL_ARGS_ASSERT_HV_DELETE_ENT \
        assert(keysv)
-
 PERL_CALLCONV HE**     Perl_hv_eiter_p(pTHX_ HV *hv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_EITER_P    \
        assert(hv)
 
-PERL_CALLCONV void     Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter);
 #define PERL_ARGS_ASSERT_HV_EITER_SET  \
        assert(hv)
-
-PERL_CALLCONV void     Perl_hv_ename_add(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_hv_ename_add(pTHX_ HV *hv, const char *name, U32 len, U32 flags);
 #define PERL_ARGS_ASSERT_HV_ENAME_ADD  \
        assert(hv); assert(name)
-
-PERL_CALLCONV void     Perl_hv_ename_delete(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_hv_ename_delete(pTHX_ HV *hv, const char *name, U32 len, U32 flags);
 #define PERL_ARGS_ASSERT_HV_ENAME_DELETE       \
        assert(hv); assert(name)
-
 /* PERL_CALLCONV bool  Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_HV_EXISTS     \
        assert(key)
 
 /* PERL_CALLCONV bool  Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_HV_EXISTS_ENT \
        assert(keysv)
 
-/* PERL_CALLCONV SV**  Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen, I32 lval)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV SV**  Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen, I32 lval); */
 #define PERL_ARGS_ASSERT_HV_FETCH      \
        assert(key)
-
-/* PERL_CALLCONV HE*   Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV HE*   Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash); */
 #define PERL_ARGS_ASSERT_HV_FETCH_ENT  \
        assert(keysv)
-
-PERL_CALLCONV STRLEN   Perl_hv_fill(pTHX_ HV *const hv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV STRLEN   Perl_hv_fill(pTHX_ HV *const hv);
 #define PERL_ARGS_ASSERT_HV_FILL       \
        assert(hv)
-
-PERL_CALLCONV void     Perl_hv_free_ent(pTHX_ HV *hv, HE *entry)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_free_ent(pTHX_ HV *hv, HE *entry);
 #define PERL_ARGS_ASSERT_HV_FREE_ENT   \
        assert(hv)
-
-PERL_CALLCONV I32      Perl_hv_iterinit(pTHX_ HV *hv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_hv_iterinit(pTHX_ HV *hv);
 #define PERL_ARGS_ASSERT_HV_ITERINIT   \
        assert(hv)
-
 PERL_CALLCONV char*    Perl_hv_iterkey(pTHX_ HE* entry, I32* retlen)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_ITERKEY    \
        assert(entry); assert(retlen)
 
 PERL_CALLCONV SV*      Perl_hv_iterkeysv(pTHX_ HE* entry)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_ITERKEYSV  \
        assert(entry)
 
 /* PERL_CALLCONV HE*   Perl_hv_iternext(pTHX_ HV *hv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_HV_ITERNEXT   \
        assert(hv)
 
 PERL_CALLCONV HE*      Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS     \
        assert(hv)
 
 PERL_CALLCONV SV*      Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_ITERNEXTSV \
        assert(hv); assert(key); assert(retlen)
 
 PERL_CALLCONV SV*      Perl_hv_iterval(pTHX_ HV *hv, HE *entry)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_ITERVAL    \
        assert(hv); assert(entry)
 
-PERL_CALLCONV void     Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_ksplit(pTHX_ HV *hv, IV newmax);
 #define PERL_ARGS_ASSERT_HV_KSPLIT     \
        assert(hv)
-
-/* PERL_CALLCONV void  Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how); */
 #define PERL_ARGS_ASSERT_HV_MAGIC      \
        assert(hv)
-
-PERL_CALLCONV void     Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags);
 #define PERL_ARGS_ASSERT_HV_NAME_SET   \
        assert(hv)
-
 PERL_CALLCONV I32      Perl_hv_placeholders_get(pTHX_ const HV *hv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET   \
        assert(hv)
 
 PERL_CALLCONV SSize_t* Perl_hv_placeholders_p(pTHX_ HV *hv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P     \
        assert(hv)
 
-PERL_CALLCONV void     Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph);
 #define PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET   \
        assert(hv)
-
-PERL_CALLCONV void     Perl_hv_rand_set(pTHX_ HV *hv, U32 new_xhv_rand)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_rand_set(pTHX_ HV *hv, U32 new_xhv_rand);
 #define PERL_ARGS_ASSERT_HV_RAND_SET   \
        assert(hv)
-
 PERL_CALLCONV I32*     Perl_hv_riter_p(pTHX_ HV *hv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_RITER_P    \
        assert(hv)
 
-PERL_CALLCONV void     Perl_hv_riter_set(pTHX_ HV *hv, I32 riter)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_riter_set(pTHX_ HV *hv, I32 riter);
 #define PERL_ARGS_ASSERT_HV_RITER_SET  \
        assert(hv)
-
 PERL_CALLCONV SV*      Perl_hv_scalar(pTHX_ HV *hv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HV_SCALAR     \
        assert(hv)
 
@@ -1806,39 +1256,24 @@ PERL_CALLCONV SV*       Perl_hv_scalar(pTHX_ HV *hv)
 /* PERL_CALLCONV SV**  Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash, int flags); */
 /* PERL_CALLCONV void  hv_undef(pTHX_ HV *hv); */
 PERL_CALLCONV void     Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags);
-/* PERL_CALLCONV I32   ibcmp(pTHX_ const char* a, const char* b, I32 len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
-
-/* PERL_CALLCONV I32   ibcmp_locale(pTHX_ const char* a, const char* b, I32 len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
-
-/* PERL_CALLCONV I32   ibcmp_utf8(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_5); */
-
-PERL_CALLCONV void     Perl_init_argv_symbols(pTHX_ int argc, char **argv)
-                       __attribute__nonnull__(pTHX_2);
+/* PERL_CALLCONV I32   ibcmp(pTHX_ const char* a, const char* b, I32 len); */
+/* PERL_CALLCONV I32   ibcmp_locale(pTHX_ const char* a, const char* b, I32 len); */
+/* PERL_CALLCONV I32   ibcmp_utf8(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2); */
+PERL_CALLCONV void     Perl_init_argv_symbols(pTHX_ int argc, char **argv);
 #define PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS     \
        assert(argv)
-
 PERL_CALLCONV void     Perl_init_constants(pTHX);
 PERL_CALLCONV void     Perl_init_dbargs(pTHX);
 PERL_CALLCONV void     Perl_init_debugger(pTHX);
 PERL_CALLCONV int      Perl_init_i18nl10n(pTHX_ int printwarn);
 PERL_CALLCONV int      Perl_init_i18nl14n(pTHX_ int printwarn);
 PERL_CALLCONV void     Perl_init_stacks(pTHX);
-PERL_CALLCONV void     Perl_init_tm(pTHX_ struct tm *ptm)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_init_tm(pTHX_ struct tm *ptm);
 #define PERL_ARGS_ASSERT_INIT_TM       \
        assert(ptm)
-
 PERL_CALLCONV char*    Perl_instr(const char* big, const char* little)
                        __attribute__warn_unused_result__
-                       __attribute__pure__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_INSTR \
        assert(big); assert(little)
 
@@ -1846,34 +1281,28 @@ PERL_CALLCONV U32       Perl_intro_my(pTHX);
 PERL_CALLCONV OP*      Perl_invert(pTHX_ OP* cmd)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV bool     Perl_io_close(pTHX_ IO* io, GV *gv, bool not_implicit, bool warn_on_fail)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_io_close(pTHX_ IO* io, GV *gv, bool not_implicit, bool warn_on_fail);
 #define PERL_ARGS_ASSERT_IO_CLOSE      \
        assert(io)
-
 PERL_CALLCONV bool     Perl_isALNUM_lazy(pTHX_ const char* p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
-                       __attribute__pure__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_ISALNUM_LAZY  \
        assert(p)
 
 PERL_CALLCONV bool     Perl_isIDFIRST_lazy(pTHX_ const char* p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
-                       __attribute__pure__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_ISIDFIRST_LAZY        \
        assert(p)
 
 /* PERL_CALLCONV bool  Perl_is_ascii_string(pTHX_ const U8 *s, STRLEN len)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 
 PERL_CALLCONV bool     Perl_is_invariant_string(const U8 *s, STRLEN len)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_INVARIANT_STRING   \
        assert(s)
 
@@ -1881,10 +1310,7 @@ PERL_CALLCONV I32        Perl_is_lvalue_sub(pTHX)
                        __attribute__warn_unused_result__;
 
 PERL_STATIC_INLINE bool        S_is_safe_syscall(pTHX_ const char *pv, STRLEN len, const char *what, const char *op_name)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_SAFE_SYSCALL       \
        assert(pv); assert(what); assert(op_name)
 
@@ -2040,752 +1466,473 @@ PERL_CALLCONV bool    Perl_is_uni_xdigit_lc(pTHX_ UV c)
 
 PERL_CALLCONV bool     Perl_is_utf8_alnum(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_ALNUM \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_alnumc(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_ALNUMC        \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_alpha(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_ALPHA \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_ascii(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_ASCII \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_blank(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_BLANK \
        assert(p)
 
 PERL_CALLCONV STRLEN   Perl_is_utf8_char(const U8 *s)
-                       __attribute__deprecated__
-                       __attribute__nonnull__(1);
+                       __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_IS_UTF8_CHAR  \
        assert(s)
 
-/* PERL_CALLCONV STRLEN        Perl_is_utf8_char_buf(const U8 *buf, const U8 *buf_end)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2); */
+/* PERL_CALLCONV STRLEN        Perl_is_utf8_char_buf(const U8 *buf, const U8 *buf_end); */
 #define PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF      \
        assert(buf); assert(buf_end)
-
 PERL_CALLCONV bool     Perl_is_utf8_cntrl(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_CNTRL \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_digit(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_DIGIT \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_graph(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_GRAPH \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_idcont(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_IDCONT        \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_idfirst(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_IDFIRST       \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_lower(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_LOWER \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_mark(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_MARK  \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_perl_space(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE    \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_perl_word(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD     \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_posix_digit(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT   \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_print(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_PRINT \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_punct(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_PUNCT \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_space(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_SPACE \
        assert(p)
 
-PERL_CALLCONV bool     Perl_is_utf8_string(const U8 *s, STRLEN len)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV bool     Perl_is_utf8_string(const U8 *s, STRLEN len);
 #define PERL_ARGS_ASSERT_IS_UTF8_STRING        \
        assert(s)
-
-/* PERL_CALLCONV bool  Perl_is_utf8_string_loc(const U8 *s, STRLEN len, const U8 **ep)
-                       __attribute__nonnull__(1); */
+/* PERL_CALLCONV bool  Perl_is_utf8_string_loc(const U8 *s, STRLEN len, const U8 **ep); */
 #define PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC    \
        assert(s)
-
-PERL_CALLCONV bool     Perl_is_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV bool     Perl_is_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el);
 #define PERL_ARGS_ASSERT_IS_UTF8_STRING_LOCLEN \
        assert(s)
-
 PERL_CALLCONV bool     Perl_is_utf8_upper(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_UPPER \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_xdigit(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_XDIGIT        \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_xidcont(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_XIDCONT       \
        assert(p)
 
 PERL_CALLCONV bool     Perl_is_utf8_xidfirst(pTHX_ const U8 *p)
                        __attribute__deprecated__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST      \
        assert(p)
 
 PERL_CALLCONV bool     Perl_isinfnan(NV nv);
-PERL_CALLCONV bool     Perl_isinfnansv(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_isinfnansv(pTHX_ SV *sv);
 #define PERL_ARGS_ASSERT_ISINFNANSV    \
        assert(sv)
-
-PERL_CALLCONV OP*      Perl_jmaybe(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP*      Perl_jmaybe(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_JMAYBE        \
        assert(o)
-
 PERL_CALLCONV I32      Perl_keyword(pTHX_ const char *name, I32 len, bool all_keywords)
-                       __attribute__pure__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_KEYWORD       \
        assert(name)
 
-PERL_CALLCONV int      Perl_keyword_plugin_standard(pTHX_ char* keyword_ptr, STRLEN keyword_len, OP** op_ptr)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV int      Perl_keyword_plugin_standard(pTHX_ char* keyword_ptr, STRLEN keyword_len, OP** op_ptr);
 #define PERL_ARGS_ASSERT_KEYWORD_PLUGIN_STANDARD       \
        assert(keyword_ptr); assert(op_ptr)
-
 PERL_CALLCONV void     Perl_leave_scope(pTHX_ I32 base);
 PERL_CALLCONV bool     Perl_lex_bufutf8(pTHX);
-PERL_CALLCONV void     Perl_lex_discard_to(pTHX_ char* ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_lex_discard_to(pTHX_ char* ptr);
 #define PERL_ARGS_ASSERT_LEX_DISCARD_TO        \
        assert(ptr)
-
 PERL_CALLCONV char*    Perl_lex_grow_linestr(pTHX_ STRLEN len);
 PERL_CALLCONV bool     Perl_lex_next_chunk(pTHX_ U32 flags);
 PERL_CALLCONV I32      Perl_lex_peek_unichar(pTHX_ U32 flags);
 PERL_CALLCONV void     Perl_lex_read_space(pTHX_ U32 flags);
-PERL_CALLCONV void     Perl_lex_read_to(pTHX_ char* ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_lex_read_to(pTHX_ char* ptr);
 #define PERL_ARGS_ASSERT_LEX_READ_TO   \
        assert(ptr)
-
 PERL_CALLCONV I32      Perl_lex_read_unichar(pTHX_ U32 flags);
 PERL_CALLCONV void     Perl_lex_start(pTHX_ SV* line, PerlIO *rsfp, U32 flags);
-PERL_CALLCONV void     Perl_lex_stuff_pv(pTHX_ const char* pv, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_lex_stuff_pv(pTHX_ const char* pv, U32 flags);
 #define PERL_ARGS_ASSERT_LEX_STUFF_PV  \
        assert(pv)
-
-PERL_CALLCONV void     Perl_lex_stuff_pvn(pTHX_ const char* pv, STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_lex_stuff_pvn(pTHX_ const char* pv, STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_LEX_STUFF_PVN \
        assert(pv)
-
-PERL_CALLCONV void     Perl_lex_stuff_sv(pTHX_ SV* sv, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_lex_stuff_sv(pTHX_ SV* sv, U32 flags);
 #define PERL_ARGS_ASSERT_LEX_STUFF_SV  \
        assert(sv)
-
-PERL_CALLCONV void     Perl_lex_unstuff(pTHX_ char* ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_lex_unstuff(pTHX_ char* ptr);
 #define PERL_ARGS_ASSERT_LEX_UNSTUFF   \
        assert(ptr)
-
 PERL_CALLCONV OP*      Perl_list(pTHX_ OP* o);
-PERL_CALLCONV void     Perl_load_module(pTHX_ U32 flags, SV* name, SV* ver, ...)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_load_module(pTHX_ U32 flags, SV* name, SV* ver, ...);
 #define PERL_ARGS_ASSERT_LOAD_MODULE   \
        assert(name)
-
-PERL_CALLCONV OP*      Perl_localize(pTHX_ OP *o, I32 lex)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP*      Perl_localize(pTHX_ OP *o, I32 lex);
 #define PERL_ARGS_ASSERT_LOCALIZE      \
        assert(o)
-
 PERL_CALLCONV I32      Perl_looks_like_number(pTHX_ SV *const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER     \
        assert(sv)
 
-PERL_CALLCONV int      Perl_magic_clear_all_env(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_clear_all_env(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV   \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_cleararylen_p(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_cleararylen_p(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P   \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_clearenv(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_clearenv(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_CLEARENV        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_clearhint(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_clearhint(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_CLEARHINT       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_clearhints(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_clearhints(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_CLEARHINTS      \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_clearisa(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_clearisa(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_CLEARISA        \
        assert(mg)
-
-PERL_CALLCONV int      Perl_magic_clearpack(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_clearpack(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_CLEARPACK       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_clearsig(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_clearsig(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_CLEARSIG        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_copycallchecker(pTHX_ SV* sv, MAGIC *mg, SV *nsv, const char *name, I32 namlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV int      Perl_magic_copycallchecker(pTHX_ SV* sv, MAGIC *mg, SV *nsv, const char *name, I32 namlen);
 #define PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER \
        assert(sv); assert(mg); assert(nsv)
-
 PERL_CALLCONV void     Perl_magic_dump(pTHX_ const MAGIC *mg);
-PERL_CALLCONV int      Perl_magic_existspack(pTHX_ SV* sv, const MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_existspack(pTHX_ SV* sv, const MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_EXISTSPACK      \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_freearylen_p(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_freearylen_p(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P    \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_freeovrld(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_freeovrld(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_FREEOVRLD       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_get(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_get(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GET     \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getarylen(pTHX_ SV* sv, const MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getarylen(pTHX_ SV* sv, const MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETARYLEN       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getdebugvar(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getdebugvar(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETDEBUGVAR     \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getdefelem(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getdefelem(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETDEFELEM      \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getnkeys(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getnkeys(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETNKEYS        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getpack(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getpack(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETPACK \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getpos(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getpos(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETPOS  \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getsig(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getsig(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETSIG  \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getsubstr(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getsubstr(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETSUBSTR       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_gettaint(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_gettaint(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETTAINT        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getuvar(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getuvar(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETUVAR \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_getvec(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_getvec(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GETVEC  \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg);
 #define PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS    \
        assert(sv); assert(mg)
-
-PERL_CALLCONV SV*      Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags, U32 argc, ...)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV SV*      Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags, U32 argc, ...);
 #define PERL_ARGS_ASSERT_MAGIC_METHCALL        \
        assert(sv); assert(mg); assert(meth)
-
-PERL_CALLCONV int      Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV int      Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key);
 #define PERL_ARGS_ASSERT_MAGIC_NEXTPACK        \
        assert(sv); assert(mg); assert(key)
-
-PERL_CALLCONV U32      Perl_magic_regdata_cnt(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV U32      Perl_magic_regdata_cnt(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT     \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_regdatum_get(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_regdatum_get(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET    \
        assert(sv); assert(mg)
-
-PERL_CALLCONV SV*      Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg);
 #define PERL_ARGS_ASSERT_MAGIC_SCALARPACK      \
        assert(hv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_set(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_set(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SET     \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_set_all_env(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_set_all_env(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV     \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setarylen(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setarylen(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETARYLEN       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setdbline(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setdbline(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETDBLINE       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setdebugvar(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setdebugvar(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETDEBUGVAR     \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setdefelem(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setdefelem(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETDEFELEM      \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setenv(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setenv(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETENV  \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_sethint(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_sethint(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETHINT \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setisa(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setisa(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETISA  \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setlvref(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setlvref(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETLVREF        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setmglob(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setmglob(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETMGLOB        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setnkeys(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setnkeys(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETNKEYS        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setpack(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setpack(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETPACK \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setpos(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setpos(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETPOS  \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setregexp(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setregexp(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETREGEXP       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setsig(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setsig(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETSIG  \
        assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setsubstr(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setsubstr(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETSUBSTR       \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_settaint(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_settaint(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETTAINT        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setutf8(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setutf8(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETUTF8 \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setuvar(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setuvar(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETUVAR \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_setvec(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setvec(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETVEC  \
        assert(sv); assert(mg)
-
-PERL_CALLCONV U32      Perl_magic_sizepack(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV U32      Perl_magic_sizepack(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SIZEPACK        \
        assert(sv); assert(mg)
-
-PERL_CALLCONV int      Perl_magic_wipepack(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_wipepack(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_WIPEPACK        \
        assert(sv); assert(mg)
-
 PERL_CALLCONV Malloc_t Perl_malloc(MEM_SIZE nbytes)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV I32 *    Perl_markstack_grow(pTHX);
 PERL_CALLCONV SV*      Perl_mess(pTHX_ const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_1,pTHX_2)
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__format__(__printf__,pTHX_1,pTHX_2);
 #define PERL_ARGS_ASSERT_MESS  \
        assert(pat)
 
-PERL_CALLCONV SV*      Perl_mess_sv(pTHX_ SV* basemsg, bool consume)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_mess_sv(pTHX_ SV* basemsg, bool consume);
 #define PERL_ARGS_ASSERT_MESS_SV       \
        assert(basemsg)
-
 PERL_CALLCONV Free_t   Perl_mfree(Malloc_t where);
-PERL_CALLCONV int      Perl_mg_clear(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_mg_clear(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_MG_CLEAR      \
        assert(sv)
-
-PERL_CALLCONV int      Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen);
 #define PERL_ARGS_ASSERT_MG_COPY       \
        assert(sv); assert(nsv)
-
 PERL_CALLCONV MAGIC*   Perl_mg_find(const SV* sv, int type)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV MAGIC*   Perl_mg_find_mglob(pTHX_ SV* sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_MG_FIND_MGLOB \
        assert(sv)
 
 PERL_CALLCONV MAGIC*   Perl_mg_findext(const SV* sv, int type, const MGVTBL *vtbl)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV int      Perl_mg_free(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_mg_free(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_MG_FREE       \
        assert(sv)
-
-PERL_CALLCONV void     Perl_mg_free_type(pTHX_ SV* sv, int how)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_mg_free_type(pTHX_ SV* sv, int how);
 #define PERL_ARGS_ASSERT_MG_FREE_TYPE  \
        assert(sv)
-
-PERL_CALLCONV int      Perl_mg_get(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_mg_get(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_MG_GET        \
        assert(sv)
-
 PERL_CALLCONV U32      Perl_mg_length(pTHX_ SV* sv)
-                       __attribute__deprecated__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_MG_LENGTH     \
        assert(sv)
 
-PERL_CALLCONV void     Perl_mg_localize(pTHX_ SV* sv, SV* nsv, bool setmagic)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_mg_localize(pTHX_ SV* sv, SV* nsv, bool setmagic);
 #define PERL_ARGS_ASSERT_MG_LOCALIZE   \
        assert(sv); assert(nsv)
-
-PERL_CALLCONV void     Perl_mg_magical(SV* sv)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void     Perl_mg_magical(SV* sv);
 #define PERL_ARGS_ASSERT_MG_MAGICAL    \
        assert(sv)
-
-PERL_CALLCONV int      Perl_mg_set(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_mg_set(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_MG_SET        \
        assert(sv)
-
-PERL_CALLCONV I32      Perl_mg_size(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_mg_size(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_MG_SIZE       \
        assert(sv)
-
-PERL_CALLCONV void     Perl_mini_mktime(struct tm *ptm)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void     Perl_mini_mktime(struct tm *ptm);
 #define PERL_ARGS_ASSERT_MINI_MKTIME   \
        assert(ptm)
-
 PERL_CALLCONV int      Perl_mode_from_discipline(pTHX_ const char* s, STRLEN len);
 PERL_CALLCONV void *   Perl_more_bodies(pTHX_ const svtype sv_type, const size_t body_size, const size_t arena_size);
-PERL_CALLCONV const char*      Perl_moreswitches(pTHX_ const char* s)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV const char*      Perl_moreswitches(pTHX_ const char* s);
 #define PERL_ARGS_ASSERT_MORESWITCHES  \
        assert(s)
-
-PERL_CALLCONV const struct mro_alg *   Perl_mro_get_from_name(pTHX_ SV *name)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV const struct mro_alg *   Perl_mro_get_from_name(pTHX_ SV *name);
 #define PERL_ARGS_ASSERT_MRO_GET_FROM_NAME     \
        assert(name)
-
-PERL_CALLCONV AV*      Perl_mro_get_linear_isa(pTHX_ HV* stash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV AV*      Perl_mro_get_linear_isa(pTHX_ HV* stash);
 #define PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA    \
        assert(stash)
-
-PERL_CALLCONV SV*      Perl_mro_get_private_data(pTHX_ struct mro_meta *const smeta, const struct mro_alg *const which)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_mro_get_private_data(pTHX_ struct mro_meta *const smeta, const struct mro_alg *const which);
 #define PERL_ARGS_ASSERT_MRO_GET_PRIVATE_DATA  \
        assert(smeta); assert(which)
-
-PERL_CALLCONV void     Perl_mro_isa_changed_in(pTHX_ HV* stash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_mro_isa_changed_in(pTHX_ HV* stash);
 #define PERL_ARGS_ASSERT_MRO_ISA_CHANGED_IN    \
        assert(stash)
-
-PERL_CALLCONV struct mro_meta* Perl_mro_meta_init(pTHX_ HV* stash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV struct mro_meta* Perl_mro_meta_init(pTHX_ HV* stash);
 #define PERL_ARGS_ASSERT_MRO_META_INIT \
        assert(stash)
-
-PERL_CALLCONV void     Perl_mro_method_changed_in(pTHX_ HV* stash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_mro_method_changed_in(pTHX_ HV* stash);
 #define PERL_ARGS_ASSERT_MRO_METHOD_CHANGED_IN \
        assert(stash)
-
-PERL_CALLCONV void     Perl_mro_package_moved(pTHX_ HV * const stash, HV * const oldstash, const GV * const gv, U32 flags)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_mro_package_moved(pTHX_ HV * const stash, HV * const oldstash, const GV * const gv, U32 flags);
 #define PERL_ARGS_ASSERT_MRO_PACKAGE_MOVED     \
        assert(gv)
-
-PERL_CALLCONV void     Perl_mro_register(pTHX_ const struct mro_alg *mro)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_mro_register(pTHX_ const struct mro_alg *mro);
 #define PERL_ARGS_ASSERT_MRO_REGISTER  \
        assert(mro)
-
-PERL_CALLCONV void     Perl_mro_set_mro(pTHX_ struct mro_meta *const meta, SV *const name)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_mro_set_mro(pTHX_ struct mro_meta *const meta, SV *const name);
 #define PERL_ARGS_ASSERT_MRO_SET_MRO   \
        assert(meta); assert(name)
-
-PERL_CALLCONV SV*      Perl_mro_set_private_data(pTHX_ struct mro_meta *const smeta, const struct mro_alg *const which, SV *const data)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV SV*      Perl_mro_set_private_data(pTHX_ struct mro_meta *const smeta, const struct mro_alg *const which, SV *const data);
 #define PERL_ARGS_ASSERT_MRO_SET_PRIVATE_DATA  \
        assert(smeta); assert(which); assert(data)
-
-PERL_CALLCONV SV*      Perl_multideref_stringify(pTHX_ const OP* o, CV *cv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_multideref_stringify(pTHX_ const OP* o, CV *cv);
 #define PERL_ARGS_ASSERT_MULTIDEREF_STRINGIFY  \
        assert(o)
-
-PERL_CALLCONV NV       Perl_my_atof(pTHX_ const char *s)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV NV       Perl_my_atof(pTHX_ const char *s);
 #define PERL_ARGS_ASSERT_MY_ATOF       \
        assert(s)
-
-PERL_CALLCONV char*    Perl_my_atof2(pTHX_ const char *s, NV* value)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_my_atof2(pTHX_ const char *s, NV* value);
 #define PERL_ARGS_ASSERT_MY_ATOF2      \
        assert(s); assert(value)
-
-PERL_CALLCONV OP *     Perl_my_attrs(pTHX_ OP *o, OP *attrs)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP *     Perl_my_attrs(pTHX_ OP *o, OP *attrs);
 #define PERL_ARGS_ASSERT_MY_ATTRS      \
        assert(o)
-
 PERL_CALLCONV void     Perl_my_clearenv(pTHX);
 PERL_CALLCONV int      Perl_my_dirfd(DIR* dir);
 PERL_CALLCONV_NO_RET void      Perl_my_exit(pTHX_ U32 status)
@@ -2798,17 +1945,12 @@ PERL_CALLCONV I32       Perl_my_fflush_all(pTHX);
 PERL_CALLCONV Pid_t    Perl_my_fork(void);
 /* PERL_CALLCONV I32   Perl_my_lstat(pTHX); */
 PERL_CALLCONV I32      Perl_my_lstat_flags(pTHX_ const U32 flags);
-PERL_CALLCONV PerlIO*  Perl_my_popen_list(pTHX_ const char* mode, int n, SV ** args)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV PerlIO*  Perl_my_popen_list(pTHX_ const char* mode, int n, SV ** args);
 #define PERL_ARGS_ASSERT_MY_POPEN_LIST \
        assert(mode); assert(args)
-
 PERL_CALLCONV void     Perl_my_setenv(pTHX_ const char* nam, const char* val);
 PERL_CALLCONV int      Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
-                       __attribute__format__(__printf__,3,4)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(3);
+                       __attribute__format__(__printf__,3,4);
 #define PERL_ARGS_ASSERT_MY_SNPRINTF   \
        assert(buffer); assert(format)
 
@@ -2817,18 +1959,14 @@ PERL_CALLCONV int       Perl_my_socketpair(int family, int type, int protocol, int fd[
 PERL_CALLCONV I32      Perl_my_stat_flags(pTHX_ const U32 flags);
 PERL_CALLCONV char*    Perl_my_strerror(pTHX_ const int errnum);
 PERL_CALLCONV char *   Perl_my_strftime(pTHX_ const char *fmt, int sec, int min, int hour, int mday, int mon, int year, int wday, int yday, int isdst)
-                       __attribute__format__(__strftime__,pTHX_1,0)
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__format__(__strftime__,pTHX_1,0);
 #define PERL_ARGS_ASSERT_MY_STRFTIME   \
        assert(fmt)
 
 PERL_CALLCONV void     Perl_my_unexec(pTHX);
-PERL_CALLCONV int      Perl_my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(3);
+PERL_CALLCONV int      Perl_my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap);
 #define PERL_ARGS_ASSERT_MY_VSNPRINTF  \
        assert(buffer); assert(format)
-
 PERL_CALLCONV OP*      Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block);
 PERL_CALLCONV OP*      Perl_newANONHASH(pTHX_ OP* o)
                        __attribute__malloc__
@@ -2850,8 +1988,7 @@ PERL_CALLCONV CV* Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs
 
 PERL_CALLCONV OP*      Perl_newAVREF(pTHX_ OP* o)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWAVREF      \
        assert(o)
 
@@ -2861,8 +1998,7 @@ PERL_CALLCONV OP* Perl_newBINOP(pTHX_ I32 type, I32 flags, OP* first, OP* last)
 
 PERL_CALLCONV OP*      Perl_newCONDOP(pTHX_ I32 flags, OP* first, OP* trueop, OP* falseop)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWCONDOP     \
        assert(first)
 
@@ -2878,28 +2014,22 @@ PERL_CALLCONV OP*       Perl_newDEFSVOP(pTHX)
 PERL_CALLCONV void     Perl_newFORM(pTHX_ I32 floor, OP* o, OP* block);
 PERL_CALLCONV OP*      Perl_newFOROP(pTHX_ I32 flags, OP* sv, OP* expr, OP* block, OP* cont)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWFOROP      \
        assert(expr)
 
 PERL_CALLCONV OP*      Perl_newGIVENOP(pTHX_ OP* cond, OP* block, PADOFFSET defsv_off)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWGIVENOP    \
        assert(cond); assert(block)
 
-PERL_CALLCONV GP *     Perl_newGP(pTHX_ GV *const gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV GP *     Perl_newGP(pTHX_ GV *const gv);
 #define PERL_ARGS_ASSERT_NEWGP \
        assert(gv)
-
 PERL_CALLCONV OP*      Perl_newGVOP(pTHX_ I32 type, I32 flags, GV* gv)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWGVOP       \
        assert(gv)
 
@@ -2907,13 +2037,10 @@ PERL_CALLCONV OP*       Perl_newGVREF(pTHX_ I32 type, OP* o)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-/* PERL_CALLCONV GV*   newGVgen(pTHX_ const char* pack)
-                       __attribute__nonnull__(pTHX_1); */
-
+/* PERL_CALLCONV GV*   newGVgen(pTHX_ const char* pack); */
 PERL_CALLCONV GV*      Perl_newGVgen_flags(pTHX_ const char* pack, U32 flags)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWGVGEN_FLAGS        \
        assert(pack)
 
@@ -2922,8 +2049,7 @@ PERL_CALLCONV GV* Perl_newGVgen_flags(pTHX_ const char* pack, U32 flags)
 
 PERL_CALLCONV OP*      Perl_newHVREF(pTHX_ OP* o)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWHVREF      \
        assert(o)
 
@@ -2941,16 +2067,13 @@ PERL_CALLCONV OP*       Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP* first, OP* last)
 
 PERL_CALLCONV OP*      Perl_newLOGOP(pTHX_ I32 optype, I32 flags, OP *first, OP *other)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWLOGOP      \
        assert(first); assert(other)
 
 PERL_CALLCONV OP*      Perl_newLOOPEX(pTHX_ I32 type, OP* label)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWLOOPEX     \
        assert(label)
 
@@ -2960,23 +2083,19 @@ PERL_CALLCONV OP*       Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP* expr, OP*
 
 PERL_CALLCONV OP*      Perl_newMETHOP(pTHX_ I32 type, I32 flags, OP* dynamic_meth)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWMETHOP     \
        assert(dynamic_meth)
 
 PERL_CALLCONV OP*      Perl_newMETHOP_named(pTHX_ I32 type, I32 flags, SV* const_meth)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWMETHOP_NAMED       \
        assert(const_meth)
 
-PERL_CALLCONV CV *     Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV CV *     Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block);
 #define PERL_ARGS_ASSERT_NEWMYSUB      \
        assert(o)
-
 PERL_CALLCONV OP*      Perl_newNULLLIST(pTHX)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
@@ -2991,15 +2110,13 @@ PERL_CALLCONV PADNAMELIST *     Perl_newPADNAMELIST(size_t max)
 
 PERL_CALLCONV PADNAME *        Perl_newPADNAMEouter(PADNAME *outer)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWPADNAMEOUTER       \
        assert(outer)
 
 PERL_CALLCONV PADNAME *        Perl_newPADNAMEpvn(const char *s, STRLEN len)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWPADNAMEPVN \
        assert(s)
 
@@ -3007,34 +2124,28 @@ PERL_CALLCONV OP*       Perl_newPMOP(pTHX_ I32 type, I32 flags)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_newPROG(pTHX_ OP* o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_newPROG(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_NEWPROG       \
        assert(o)
-
 PERL_CALLCONV OP*      Perl_newPVOP(pTHX_ I32 type, I32 flags, char* pv)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV OP*      Perl_newRANGE(pTHX_ I32 flags, OP* left, OP* right)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWRANGE      \
        assert(left); assert(right)
 
 PERL_CALLCONV SV*      Perl_newRV(pTHX_ SV *const sv)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWRV \
        assert(sv)
 
 PERL_CALLCONV SV*      Perl_newRV_noinc(pTHX_ SV *const tmpRef)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWRV_NOINC   \
        assert(tmpRef)
 
@@ -3046,11 +2157,9 @@ PERL_CALLCONV OP*        Perl_newSTATEOP(pTHX_ I32 flags, char* label, OP* o)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV CV*      Perl_newSTUB(pTHX_ GV *gv, bool fake)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV CV*      Perl_newSTUB(pTHX_ GV *gv, bool fake);
 #define PERL_ARGS_ASSERT_NEWSTUB       \
        assert(gv)
-
 /* PERL_CALLCONV CV*   Perl_newSUB(pTHX_ I32 floor, OP* o, OP* proto, OP* block); */
 PERL_CALLCONV SV*      Perl_newSV(pTHX_ const STRLEN len)
                        __attribute__malloc__
@@ -3058,15 +2167,13 @@ PERL_CALLCONV SV*       Perl_newSV(pTHX_ const STRLEN len)
 
 PERL_CALLCONV OP*      Perl_newSVOP(pTHX_ I32 type, I32 flags, SV* sv)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWSVOP       \
        assert(sv)
 
 PERL_CALLCONV OP*      Perl_newSVREF(pTHX_ OP* o)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWSVREF      \
        assert(o)
 
@@ -3076,8 +2183,7 @@ PERL_CALLCONV SV* Perl_newSV_type(pTHX_ const svtype type)
 
 PERL_CALLCONV SV*      Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWSVAVDEFELEM        \
        assert(av)
 
@@ -3104,8 +2210,7 @@ PERL_CALLCONV SV* Perl_newSVpv_share(pTHX_ const char* s, U32 hash)
 PERL_CALLCONV SV*      Perl_newSVpvf(pTHX_ const char *const pat, ...)
                        __attribute__malloc__
                        __attribute__warn_unused_result__
-                       __attribute__format__(__printf__,pTHX_1,pTHX_2)
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__format__(__printf__,pTHX_1,pTHX_2);
 #define PERL_ARGS_ASSERT_NEWSVPVF      \
        assert(pat)
 
@@ -3121,11 +2226,9 @@ PERL_CALLCONV SV*        Perl_newSVpvn_share(pTHX_ const char* s, I32 len, U32 hash)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV SV*      Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_newSVrv(pTHX_ SV *const rv, const char *const classname);
 #define PERL_ARGS_ASSERT_NEWSVRV       \
        assert(rv)
-
 PERL_CALLCONV SV*      Perl_newSVsv(pTHX_ SV *const old)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
@@ -3144,8 +2247,7 @@ PERL_CALLCONV OP* Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP* first, UNOP_AU
 
 PERL_CALLCONV OP*      Perl_newWHENOP(pTHX_ OP* cond, OP* block)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWWHENOP     \
        assert(block)
 
@@ -3153,245 +2255,162 @@ PERL_CALLCONV OP*     Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP* loop, O
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV CV*      Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV CV*      Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename);
 #define PERL_ARGS_ASSERT_NEWXS \
        assert(subaddr); assert(filename)
-
-PERL_CALLCONV CV *     Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV CV *     Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr);
 #define PERL_ARGS_ASSERT_NEWXS_DEFFILE \
        assert(name); assert(subaddr)
-
-PERL_CALLCONV CV *     Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr, const char *const filename, const char *const proto, U32 flags)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV CV *     Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr, const char *const filename, const char *const proto, U32 flags);
 #define PERL_ARGS_ASSERT_NEWXS_FLAGS   \
        assert(subaddr); assert(filename)
-
-PERL_CALLCONV CV *     Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, XSUBADDR_t subaddr, const char *const filename, const char *const proto, SV **const_svp, U32 flags)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV CV *     Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, XSUBADDR_t subaddr, const char *const filename, const char *const proto, SV **const_svp, U32 flags);
 #define PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS       \
        assert(subaddr)
-
 PERL_CALLCONV void     Perl_new_collate(pTHX_ const char* newcoll);
-PERL_CALLCONV void     Perl_new_ctype(pTHX_ const char* newctype)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_new_ctype(pTHX_ const char* newctype);
 #define PERL_ARGS_ASSERT_NEW_CTYPE     \
        assert(newctype)
-
 PERL_CALLCONV void     Perl_new_numeric(pTHX_ const char* newcoll);
 PERL_CALLCONV PERL_SI* Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV SV*      Perl_new_version(pTHX_ SV *ver)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_new_version(pTHX_ SV *ver);
 #define PERL_ARGS_ASSERT_NEW_VERSION   \
        assert(ver)
-
 PERL_CALLCONV STRLEN * Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const char *const bits, STRLEN size)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEW_WARNINGS_BITFIELD \
        assert(bits)
 
-PERL_CALLCONV PerlIO*  Perl_nextargv(pTHX_ GV* gv, bool nomagicopen)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PerlIO*  Perl_nextargv(pTHX_ GV* gv, bool nomagicopen);
 #define PERL_ARGS_ASSERT_NEXTARGV      \
        assert(gv)
-
 PERL_CALLCONV char*    Perl_ninstr(const char* big, const char* bigend, const char* little, const char* lend)
-                       __attribute__pure__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3)
-                       __attribute__nonnull__(4);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_NINSTR        \
        assert(big); assert(bigend); assert(little); assert(lend)
 
 PERL_CALLCONV_NO_RET void      Perl_noperl_die(const char* pat, ...)
                        __attribute__noreturn__
-                       __attribute__format__(__printf__,1,2)
-                       __attribute__nonnull__(1);
+                       __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_NOPERL_DIE    \
        assert(pat)
 
 PERL_CALLCONV int      Perl_nothreadhook(pTHX);
 PERL_CALLCONV OP*      Perl_oopsAV(pTHX_ OP* o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_OOPSAV        \
        assert(o)
 
 PERL_CALLCONV OP*      Perl_oopsHV(pTHX_ OP* o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_OOPSHV        \
        assert(o)
 
 PERL_CALLCONV OP*      Perl_op_append_elem(pTHX_ I32 optype, OP* first, OP* last);
 PERL_CALLCONV OP*      Perl_op_append_list(pTHX_ I32 optype, OP* first, OP* last);
-PERL_CALLCONV void     Perl_op_clear(pTHX_ OP* o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_op_clear(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_OP_CLEAR      \
        assert(o)
-
-PERL_CALLCONV OP*      Perl_op_contextualize(pTHX_ OP* o, I32 context)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP*      Perl_op_contextualize(pTHX_ OP* o, I32 context);
 #define PERL_ARGS_ASSERT_OP_CONTEXTUALIZE      \
        assert(o)
-
 PERL_CALLCONV OP*      Perl_op_convert_list(pTHX_ I32 optype, I32 flags, OP* o)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_op_dump(pTHX_ const OP *o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_op_dump(pTHX_ const OP *o);
 #define PERL_ARGS_ASSERT_OP_DUMP       \
        assert(o)
-
 PERL_CALLCONV void     Perl_op_free(pTHX_ OP* arg);
-PERL_CALLCONV OP*      Perl_op_linklist(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP*      Perl_op_linklist(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_OP_LINKLIST   \
        assert(o)
-
 /* PERL_CALLCONV OP*   op_lvalue(pTHX_ OP* o, I32 type); */
 PERL_CALLCONV OP*      Perl_op_lvalue_flags(pTHX_ OP* o, I32 type, U32 flags);
-PERL_CALLCONV void     Perl_op_null(pTHX_ OP* o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_op_null(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_OP_NULL       \
        assert(o)
-
 PERL_CALLCONV OP*      Perl_op_prepend_elem(pTHX_ I32 optype, OP* first, OP* last);
 PERL_CALLCONV void     Perl_op_refcnt_lock(pTHX);
 PERL_CALLCONV void     Perl_op_refcnt_unlock(pTHX);
 PERL_CALLCONV OP*      Perl_op_scope(pTHX_ OP* o);
 PERL_CALLCONV OP*      Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert);
 PERL_CALLCONV OP*      Perl_op_unscope(pTHX_ OP* o);
-PERL_CALLCONV void     Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5)
-                       __attribute__nonnull__(pTHX_6);
+PERL_CALLCONV void     Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags);
 #define PERL_ARGS_ASSERT_PACK_CAT      \
        assert(cat); assert(pat); assert(patend); assert(beglist); assert(endlist); assert(next_in_list)
-
-PERL_CALLCONV void     Perl_package(pTHX_ OP* o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_package(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_PACKAGE       \
        assert(o)
-
-PERL_CALLCONV void     Perl_package_version(pTHX_ OP* v)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_package_version(pTHX_ OP* v);
 #define PERL_ARGS_ASSERT_PACKAGE_VERSION       \
        assert(v)
-
-PERL_CALLCONV void     Perl_packlist(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+PERL_CALLCONV void     Perl_packlist(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist);
 #define PERL_ARGS_ASSERT_PACKLIST      \
        assert(cat); assert(pat); assert(patend); assert(beglist); assert(endlist)
-
-PERL_CALLCONV PADOFFSET        Perl_pad_add_anon(pTHX_ CV* func, I32 optype)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_pad_add_anon(pTHX_ CV* func, I32 optype);
 #define PERL_ARGS_ASSERT_PAD_ADD_ANON  \
        assert(func)
-
-PERL_CALLCONV PADOFFSET        Perl_pad_add_name_pv(pTHX_ const char *name, const U32 flags, HV *typestash, HV *ourstash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_pad_add_name_pv(pTHX_ const char *name, const U32 flags, HV *typestash, HV *ourstash);
 #define PERL_ARGS_ASSERT_PAD_ADD_NAME_PV       \
        assert(name)
-
-PERL_CALLCONV PADOFFSET        Perl_pad_add_name_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags, HV *typestash, HV *ourstash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_pad_add_name_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags, HV *typestash, HV *ourstash);
 #define PERL_ARGS_ASSERT_PAD_ADD_NAME_PVN      \
        assert(namepv)
-
-PERL_CALLCONV PADOFFSET        Perl_pad_add_name_sv(pTHX_ SV *name, U32 flags, HV *typestash, HV *ourstash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_pad_add_name_sv(pTHX_ SV *name, U32 flags, HV *typestash, HV *ourstash);
 #define PERL_ARGS_ASSERT_PAD_ADD_NAME_SV       \
        assert(name)
-
-PERL_CALLCONV void     Perl_pad_add_weakref(pTHX_ CV* func)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_pad_add_weakref(pTHX_ CV* func);
 #define PERL_ARGS_ASSERT_PAD_ADD_WEAKREF       \
        assert(func)
-
 PERL_CALLCONV PADOFFSET        Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype);
 PERL_CALLCONV void     Perl_pad_block_start(pTHX_ int full);
 PERL_CALLCONV HV*      Perl_pad_compname_type(pTHX_ const PADOFFSET po)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV PADOFFSET        Perl_pad_findmy_pv(pTHX_ const char* name, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_pad_findmy_pv(pTHX_ const char* name, U32 flags);
 #define PERL_ARGS_ASSERT_PAD_FINDMY_PV \
        assert(name)
-
-PERL_CALLCONV PADOFFSET        Perl_pad_findmy_pvn(pTHX_ const char* namepv, STRLEN namelen, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_pad_findmy_pvn(pTHX_ const char* namepv, STRLEN namelen, U32 flags);
 #define PERL_ARGS_ASSERT_PAD_FINDMY_PVN        \
        assert(namepv)
-
-PERL_CALLCONV PADOFFSET        Perl_pad_findmy_sv(pTHX_ SV* name, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_pad_findmy_sv(pTHX_ SV* name, U32 flags);
 #define PERL_ARGS_ASSERT_PAD_FINDMY_SV \
        assert(name)
-
-PERL_CALLCONV void     Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv);
 #define PERL_ARGS_ASSERT_PAD_FIXUP_INNER_ANONS \
        assert(padlist); assert(old_cv); assert(new_cv)
-
 PERL_CALLCONV void     Perl_pad_free(pTHX_ PADOFFSET po);
 PERL_CALLCONV OP *     Perl_pad_leavemy(pTHX);
 PERL_CALLCONV PADLIST* Perl_pad_new(pTHX_ int flags)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_pad_push(pTHX_ PADLIST *padlist, int depth)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_pad_push(pTHX_ PADLIST *padlist, int depth);
 #define PERL_ARGS_ASSERT_PAD_PUSH      \
        assert(padlist)
-
 PERL_CALLCONV void     Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust);
 PERL_CALLCONV void     Perl_pad_tidy(pTHX_ padtidy_type type);
-PERL_CALLCONV PAD **   Perl_padlist_store(pTHX_ PADLIST *padlist, I32 key, PAD *val)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PAD **   Perl_padlist_store(pTHX_ PADLIST *padlist, I32 key, PAD *val);
 #define PERL_ARGS_ASSERT_PADLIST_STORE \
        assert(padlist)
-
-PERL_CALLCONV void     Perl_padname_free(pTHX_ PADNAME *pn)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_padname_free(pTHX_ PADNAME *pn);
 #define PERL_ARGS_ASSERT_PADNAME_FREE  \
        assert(pn)
-
 PERL_CALLCONV PADNAME *        Perl_padnamelist_fetch(PADNAMELIST *pnl, SSize_t key)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_PADNAMELIST_FETCH     \
        assert(pnl)
 
-PERL_CALLCONV void     Perl_padnamelist_free(pTHX_ PADNAMELIST *pnl)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_padnamelist_free(pTHX_ PADNAMELIST *pnl);
 #define PERL_ARGS_ASSERT_PADNAMELIST_FREE      \
        assert(pnl)
-
-PERL_CALLCONV PADNAME **       Perl_padnamelist_store(pTHX_ PADNAMELIST *pnl, SSize_t key, PADNAME *val)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADNAME **       Perl_padnamelist_store(pTHX_ PADNAMELIST *pnl, SSize_t key, PADNAME *val);
 #define PERL_ARGS_ASSERT_PADNAMELIST_STORE     \
        assert(pnl)
-
 PERL_CALLCONV OP*      Perl_parse_arithexpr(pTHX_ U32 flags);
 PERL_CALLCONV OP*      Perl_parse_barestmt(pTHX_ U32 flags);
 PERL_CALLCONV OP*      Perl_parse_block(pTHX_ U32 flags);
@@ -3404,87 +2423,55 @@ PERL_CALLCONV OP *      Perl_parse_subsignature(pTHX)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV OP*      Perl_parse_termexpr(pTHX_ U32 flags);
-PERL_CALLCONV U32      Perl_parse_unicode_opts(pTHX_ const char **popt)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV U32      Perl_parse_unicode_opts(pTHX_ const char **popt);
 #define PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS    \
        assert(popt)
-
-PERL_CALLCONV void     Perl_parser_free(pTHX_ const yy_parser *parser)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_parser_free(pTHX_ const yy_parser *parser);
 #define PERL_ARGS_ASSERT_PARSER_FREE   \
        assert(parser)
-
 PERL_CALLCONV void     Perl_peep(pTHX_ OP* o);
 PERL_CALLCONV PerlInterpreter* perl_alloc(void);
-PERL_CALLCONV void     perl_construct(PerlInterpreter *my_perl)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void     perl_construct(PerlInterpreter *my_perl);
 #define PERL_ARGS_ASSERT_PERL_CONSTRUCT        \
        assert(my_perl)
-
-PERL_CALLCONV int      perl_destruct(PerlInterpreter *my_perl)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV int      perl_destruct(PerlInterpreter *my_perl);
 #define PERL_ARGS_ASSERT_PERL_DESTRUCT \
        assert(my_perl)
-
-PERL_CALLCONV void     perl_free(PerlInterpreter *my_perl)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void     perl_free(PerlInterpreter *my_perl);
 #define PERL_ARGS_ASSERT_PERL_FREE     \
        assert(my_perl)
-
-PERL_CALLCONV int      perl_parse(PerlInterpreter *my_perl, XSINIT_t xsinit, int argc, char** argv, char** env)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV int      perl_parse(PerlInterpreter *my_perl, XSINIT_t xsinit, int argc, char** argv, char** env);
 #define PERL_ARGS_ASSERT_PERL_PARSE    \
        assert(my_perl)
-
-PERL_CALLCONV int      perl_run(PerlInterpreter *my_perl)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV int      perl_run(PerlInterpreter *my_perl);
 #define PERL_ARGS_ASSERT_PERL_RUN      \
        assert(my_perl)
-
 PERL_CALLCONV void     Perl_pmop_dump(pTHX_ PMOP* pm);
-PERL_CALLCONV OP*      Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, bool isreg, I32 floor)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV OP*      Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, bool isreg, I32 floor);
 #define PERL_ARGS_ASSERT_PMRUNTIME     \
        assert(o); assert(expr)
-
 PERL_CALLCONV void     Perl_pop_scope(pTHX);
-PERL_CALLCONV void     Perl_populate_isa(pTHX_ const char *name, STRLEN len, ...)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_populate_isa(pTHX_ const char *name, STRLEN len, ...);
 #define PERL_ARGS_ASSERT_POPULATE_ISA  \
        assert(name)
-
-PERL_CALLCONV REGEXP*  Perl_pregcomp(pTHX_ SV * const pattern, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV REGEXP*  Perl_pregcomp(pTHX_ SV * const pattern, const U32 flags);
 #define PERL_ARGS_ASSERT_PREGCOMP      \
        assert(pattern)
-
-PERL_CALLCONV I32      Perl_pregexec(pTHX_ REGEXP * const prog, char* stringarg, char* strend, char* strbeg, SSize_t minend, SV* screamer, U32 nosave)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_6);
+PERL_CALLCONV I32      Perl_pregexec(pTHX_ REGEXP * const prog, char* stringarg, char* strend, char* strbeg, SSize_t minend, SV* screamer, U32 nosave);
 #define PERL_ARGS_ASSERT_PREGEXEC      \
        assert(prog); assert(stringarg); assert(strend); assert(strbeg); assert(screamer)
-
 PERL_CALLCONV void     Perl_pregfree(pTHX_ REGEXP* r);
-PERL_CALLCONV void     Perl_pregfree2(pTHX_ REGEXP *rx)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_pregfree2(pTHX_ REGEXP *rx);
 #define PERL_ARGS_ASSERT_PREGFREE2     \
        assert(rx)
-
-PERL_CALLCONV const char*      Perl_prescan_version(pTHX_ const char *s, bool strict, const char** errstr, bool *sqv, int *ssaw_decimal, int *swidth, bool *salpha)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV const char*      Perl_prescan_version(pTHX_ const char *s, bool strict, const char** errstr, bool *sqv, int *ssaw_decimal, int *swidth, bool *salpha);
 #define PERL_ARGS_ASSERT_PRESCAN_VERSION       \
        assert(s)
-
 PERL_CALLCONV void     Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
                        __attribute__deprecated__;
 
 PERL_CALLCONV void*    Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_PTR_TABLE_FETCH       \
        assert(tbl)
 
@@ -3493,256 +2480,156 @@ PERL_CALLCONV PTR_TBL_t*      Perl_ptr_table_new(pTHX)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl);
 #define PERL_ARGS_ASSERT_PTR_TABLE_SPLIT       \
        assert(tbl)
-
-PERL_CALLCONV void     Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv);
 #define PERL_ARGS_ASSERT_PTR_TABLE_STORE       \
        assert(tbl); assert(newsv)
-
 PERL_CALLCONV void     Perl_push_scope(pTHX);
-PERL_CALLCONV char*    Perl_pv_display(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_pv_display(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim);
 #define PERL_ARGS_ASSERT_PV_DISPLAY    \
        assert(dsv); assert(pv)
-
-PERL_CALLCONV char*    Perl_pv_escape(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_pv_escape(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
 #define PERL_ARGS_ASSERT_PV_ESCAPE     \
        assert(str)
-
-PERL_CALLCONV char*    Perl_pv_pretty(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_pv_pretty(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
 #define PERL_ARGS_ASSERT_PV_PRETTY     \
        assert(dsv); assert(str)
-
-PERL_CALLCONV char*    Perl_pv_uni_display(pTHX_ SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_pv_uni_display(pTHX_ SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim, UV flags);
 #define PERL_ARGS_ASSERT_PV_UNI_DISPLAY        \
        assert(dsv); assert(spv)
-
-PERL_CALLCONV void     Perl_qerror(pTHX_ SV* err)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_qerror(pTHX_ SV* err);
 #define PERL_ARGS_ASSERT_QERROR        \
        assert(err)
-
-PERL_CALLCONV REGEXP*  Perl_re_compile(pTHX_ SV * const pattern, U32 orig_rx_flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV REGEXP*  Perl_re_compile(pTHX_ SV * const pattern, U32 orig_rx_flags);
 #define PERL_ARGS_ASSERT_RE_COMPILE    \
        assert(pattern)
-
-PERL_CALLCONV char*    Perl_re_intuit_start(pTHX_ REGEXP * const rx, SV* sv, const char* const strbeg, char* strpos, char* strend, const U32 flags, re_scream_pos_data *data)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+PERL_CALLCONV char*    Perl_re_intuit_start(pTHX_ REGEXP * const rx, SV* sv, const char* const strbeg, char* strpos, char* strend, const U32 flags, re_scream_pos_data *data);
 #define PERL_ARGS_ASSERT_RE_INTUIT_START       \
        assert(rx); assert(strbeg); assert(strpos); assert(strend)
-
-PERL_CALLCONV SV*      Perl_re_intuit_string(pTHX_ REGEXP  *const r)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_re_intuit_string(pTHX_ REGEXP  *const r);
 #define PERL_ARGS_ASSERT_RE_INTUIT_STRING      \
        assert(r)
-
-PERL_CALLCONV REGEXP*  Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, OP *expr, const regexp_engine* eng, REGEXP *old_re, bool *is_bare_re, U32 rx_flags, U32 pm_flags)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV REGEXP*  Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, OP *expr, const regexp_engine* eng, REGEXP *old_re, bool *is_bare_re, U32 rx_flags, U32 pm_flags);
 #define PERL_ARGS_ASSERT_RE_OP_COMPILE \
        assert(eng)
-
 PERL_CALLCONV Malloc_t Perl_realloc(Malloc_t where, MEM_SIZE nbytes)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV void     Perl_reentrant_free(pTHX);
 PERL_CALLCONV void     Perl_reentrant_init(pTHX);
-PERL_CALLCONV void*    Perl_reentrant_retry(const char *f, ...)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void*    Perl_reentrant_retry(const char *f, ...);
 #define PERL_ARGS_ASSERT_REENTRANT_RETRY       \
        assert(f)
-
 PERL_CALLCONV void     Perl_reentrant_size(pTHX);
 /* PERL_CALLCONV OP*   Perl_ref(pTHX_ OP* o, I32 type); */
 PERL_CALLCONV HV *     Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *c, U32 flags);
-PERL_CALLCONV SV *     Perl_refcounted_he_fetch_pv(pTHX_ const struct refcounted_he *chain, const char *key, U32 hash, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV *     Perl_refcounted_he_fetch_pv(pTHX_ const struct refcounted_he *chain, const char *key, U32 hash, U32 flags);
 #define PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV        \
        assert(key)
-
-PERL_CALLCONV SV *     Perl_refcounted_he_fetch_pvn(pTHX_ const struct refcounted_he *chain, const char *keypv, STRLEN keylen, U32 hash, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV *     Perl_refcounted_he_fetch_pvn(pTHX_ const struct refcounted_he *chain, const char *keypv, STRLEN keylen, U32 hash, U32 flags);
 #define PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN       \
        assert(keypv)
-
-PERL_CALLCONV SV *     Perl_refcounted_he_fetch_sv(pTHX_ const struct refcounted_he *chain, SV *key, U32 hash, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV *     Perl_refcounted_he_fetch_sv(pTHX_ const struct refcounted_he *chain, SV *key, U32 hash, U32 flags);
 #define PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV        \
        assert(key)
-
 PERL_CALLCONV void     Perl_refcounted_he_free(pTHX_ struct refcounted_he *he);
 PERL_CALLCONV struct refcounted_he *   Perl_refcounted_he_inc(pTHX_ struct refcounted_he *he);
-PERL_CALLCONV struct refcounted_he *   Perl_refcounted_he_new_pv(pTHX_ struct refcounted_he *parent, const char *key, U32 hash, SV *value, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV struct refcounted_he *   Perl_refcounted_he_new_pv(pTHX_ struct refcounted_he *parent, const char *key, U32 hash, SV *value, U32 flags);
 #define PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV  \
        assert(key)
-
-PERL_CALLCONV struct refcounted_he *   Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent, const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV struct refcounted_he *   Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent, const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags);
 #define PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PVN \
        assert(keypv)
-
-PERL_CALLCONV struct refcounted_he *   Perl_refcounted_he_new_sv(pTHX_ struct refcounted_he *parent, SV *key, U32 hash, SV *value, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV struct refcounted_he *   Perl_refcounted_he_new_sv(pTHX_ struct refcounted_he *parent, SV *key, U32 hash, SV *value, U32 flags);
 #define PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_SV  \
        assert(key)
-
-PERL_CALLCONV SV*      Perl_reg_named_buff(pTHX_ REGEXP * const rx, SV * const key, SV * const value, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_reg_named_buff(pTHX_ REGEXP * const rx, SV * const key, SV * const value, const U32 flags);
 #define PERL_ARGS_ASSERT_REG_NAMED_BUFF        \
        assert(rx)
-
-PERL_CALLCONV SV*      Perl_reg_named_buff_all(pTHX_ REGEXP * const rx, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_reg_named_buff_all(pTHX_ REGEXP * const rx, const U32 flags);
 #define PERL_ARGS_ASSERT_REG_NAMED_BUFF_ALL    \
        assert(rx)
-
-PERL_CALLCONV bool     Perl_reg_named_buff_exists(pTHX_ REGEXP * const rx, SV * const key, const U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV bool     Perl_reg_named_buff_exists(pTHX_ REGEXP * const rx, SV * const key, const U32 flags);
 #define PERL_ARGS_ASSERT_REG_NAMED_BUFF_EXISTS \
        assert(rx); assert(key)
-
-PERL_CALLCONV SV*      Perl_reg_named_buff_fetch(pTHX_ REGEXP * const rx, SV * const namesv, const U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_reg_named_buff_fetch(pTHX_ REGEXP * const rx, SV * const namesv, const U32 flags);
 #define PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH  \
        assert(rx); assert(namesv)
-
-PERL_CALLCONV SV*      Perl_reg_named_buff_firstkey(pTHX_ REGEXP * const rx, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_reg_named_buff_firstkey(pTHX_ REGEXP * const rx, const U32 flags);
 #define PERL_ARGS_ASSERT_REG_NAMED_BUFF_FIRSTKEY       \
        assert(rx)
-
-PERL_CALLCONV SV*      Perl_reg_named_buff_iter(pTHX_ REGEXP * const rx, const SV * const lastkey, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_reg_named_buff_iter(pTHX_ REGEXP * const rx, const SV * const lastkey, const U32 flags);
 #define PERL_ARGS_ASSERT_REG_NAMED_BUFF_ITER   \
        assert(rx)
-
-PERL_CALLCONV SV*      Perl_reg_named_buff_nextkey(pTHX_ REGEXP * const rx, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_reg_named_buff_nextkey(pTHX_ REGEXP * const rx, const U32 flags);
 #define PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY        \
        assert(rx)
-
-PERL_CALLCONV SV*      Perl_reg_named_buff_scalar(pTHX_ REGEXP * const rx, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_reg_named_buff_scalar(pTHX_ REGEXP * const rx, const U32 flags);
 #define PERL_ARGS_ASSERT_REG_NAMED_BUFF_SCALAR \
        assert(rx)
-
-PERL_CALLCONV void     Perl_reg_numbered_buff_fetch(pTHX_ REGEXP * const rx, const I32 paren, SV * const sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_reg_numbered_buff_fetch(pTHX_ REGEXP * const rx, const I32 paren, SV * const sv);
 #define PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_FETCH       \
        assert(rx)
-
-PERL_CALLCONV I32      Perl_reg_numbered_buff_length(pTHX_ REGEXP * const rx, const SV * const sv, const I32 paren)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV I32      Perl_reg_numbered_buff_length(pTHX_ REGEXP * const rx, const SV * const sv, const I32 paren);
 #define PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_LENGTH      \
        assert(rx); assert(sv)
-
-PERL_CALLCONV void     Perl_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren, SV const * const value)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren, SV const * const value);
 #define PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_STORE       \
        assert(rx)
-
-PERL_CALLCONV SV*      Perl_reg_qr_package(pTHX_ REGEXP * const rx)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_reg_qr_package(pTHX_ REGEXP * const rx);
 #define PERL_ARGS_ASSERT_REG_QR_PACKAGE        \
        assert(rx)
-
-PERL_CALLCONV REGEXP*  Perl_reg_temp_copy(pTHX_ REGEXP* ret_x, REGEXP* rx)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV REGEXP*  Perl_reg_temp_copy(pTHX_ REGEXP* ret_x, REGEXP* rx);
 #define PERL_ARGS_ASSERT_REG_TEMP_COPY \
        assert(rx)
-
-PERL_CALLCONV SV*      Perl_regclass_swash(pTHX_ const regexp *prog, const struct regnode *node, bool doinit, SV **listsvp, SV **altsvp)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_regclass_swash(pTHX_ const regexp *prog, const struct regnode *node, bool doinit, SV **listsvp, SV **altsvp);
 #define PERL_ARGS_ASSERT_REGCLASS_SWASH        \
        assert(node)
-
-PERL_CALLCONV void     Perl_regdump(pTHX_ const regexp* r)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_regdump(pTHX_ const regexp* r);
 #define PERL_ARGS_ASSERT_REGDUMP       \
        assert(r)
-
-PERL_CALLCONV I32      Perl_regexec_flags(pTHX_ REGEXP *const rx, char *stringarg, char *strend, char *strbeg, SSize_t minend, SV *sv, void *data, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_6);
+PERL_CALLCONV I32      Perl_regexec_flags(pTHX_ REGEXP *const rx, char *stringarg, char *strend, char *strbeg, SSize_t minend, SV *sv, void *data, U32 flags);
 #define PERL_ARGS_ASSERT_REGEXEC_FLAGS \
        assert(rx); assert(stringarg); assert(strend); assert(strbeg); assert(sv)
-
-PERL_CALLCONV void     Perl_regfree_internal(pTHX_ REGEXP *const rx)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_regfree_internal(pTHX_ REGEXP *const rx);
 #define PERL_ARGS_ASSERT_REGFREE_INTERNAL      \
        assert(rx)
-
 PERL_CALLCONV void     Perl_reginitcolors(pTHX);
 PERL_CALLCONV regnode* Perl_regnext(pTHX_ regnode* p)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_repeatcpy(char* to, const char* from, I32 len, IV count)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+PERL_CALLCONV void     Perl_repeatcpy(char* to, const char* from, I32 len, IV count);
 #define PERL_ARGS_ASSERT_REPEATCPY     \
        assert(to); assert(from)
-
 PERL_CALLCONV void     Perl_report_evil_fh(pTHX_ const GV *gv);
 PERL_CALLCONV void     Perl_report_uninit(pTHX_ const SV *uninit_sv);
 PERL_CALLCONV void     Perl_report_wrongway_fh(pTHX_ const GV *gv, const char have);
-PERL_CALLCONV void     Perl_require_pv(pTHX_ const char* pv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_require_pv(pTHX_ const char* pv);
 #define PERL_ARGS_ASSERT_REQUIRE_PV    \
        assert(pv)
-
 PERL_CALLCONV char*    Perl_rninstr(const char* big, const char* bigend, const char* little, const char* lend)
-                       __attribute__pure__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3)
-                       __attribute__nonnull__(4);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_RNINSTR       \
        assert(big); assert(bigend); assert(little); assert(lend)
 
 PERL_CALLCONV void     Perl_rpeep(pTHX_ OP* o);
 PERL_CALLCONV Sighandler_t     Perl_rsignal(pTHX_ int i, Sighandler_t t);
 PERL_CALLCONV int      Perl_rsignal_restore(pTHX_ int i, Sigsave_t* t);
-PERL_CALLCONV int      Perl_rsignal_save(pTHX_ int i, Sighandler_t t1, Sigsave_t* save)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV int      Perl_rsignal_save(pTHX_ int i, Sighandler_t t1, Sigsave_t* save);
 #define PERL_ARGS_ASSERT_RSIGNAL_SAVE  \
        assert(save)
-
 PERL_CALLCONV Sighandler_t     Perl_rsignal_state(pTHX_ int i);
 PERL_CALLCONV int      Perl_runops_debug(pTHX);
 PERL_CALLCONV int      Perl_runops_standard(pTHX);
-PERL_CALLCONV CV*      Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV CV*      Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags);
 #define PERL_ARGS_ASSERT_RV2CV_OP_CV   \
        assert(cvop)
-
-PERL_CALLCONV void     Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx);
 #define PERL_ARGS_ASSERT_RXRES_SAVE    \
        assert(rsp); assert(rx)
-
 PERL_CALLCONV Malloc_t Perl_safesyscalloc(MEM_SIZE elements, MEM_SIZE size)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
@@ -3756,202 +2643,119 @@ PERL_CALLCONV Malloc_t        Perl_safesysrealloc(Malloc_t where, MEM_SIZE nbytes)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_save_I16(pTHX_ I16* intp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_I16(pTHX_ I16* intp);
 #define PERL_ARGS_ASSERT_SAVE_I16      \
        assert(intp)
-
-PERL_CALLCONV void     Perl_save_I32(pTHX_ I32* intp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_I32(pTHX_ I32* intp);
 #define PERL_ARGS_ASSERT_SAVE_I32      \
        assert(intp)
-
-PERL_CALLCONV void     Perl_save_I8(pTHX_ I8* bytep)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_I8(pTHX_ I8* bytep);
 #define PERL_ARGS_ASSERT_SAVE_I8       \
        assert(bytep)
-
-PERL_CALLCONV void     Perl_save_adelete(pTHX_ AV *av, SSize_t key)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_adelete(pTHX_ AV *av, SSize_t key);
 #define PERL_ARGS_ASSERT_SAVE_ADELETE  \
        assert(av)
-
-/* PERL_CALLCONV void  Perl_save_aelem(pTHX_ AV* av, SSize_t idx, SV **sptr)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3); */
-
-PERL_CALLCONV void     Perl_save_aelem_flags(pTHX_ AV* av, SSize_t idx, SV **sptr, const U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+/* PERL_CALLCONV void  Perl_save_aelem(pTHX_ AV* av, SSize_t idx, SV **sptr); */
+PERL_CALLCONV void     Perl_save_aelem_flags(pTHX_ AV* av, SSize_t idx, SV **sptr, const U32 flags);
 #define PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS      \
        assert(av); assert(sptr)
-
-PERL_CALLCONV void     Perl_save_aliased_sv(pTHX_ GV* gv)
-                       __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_SAVE_ALIASED_SV       \
-       assert(gv)
-
 PERL_CALLCONV I32      Perl_save_alloc(pTHX_ I32 size, I32 pad);
-PERL_CALLCONV void     Perl_save_aptr(pTHX_ AV** aptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_aptr(pTHX_ AV** aptr);
 #define PERL_ARGS_ASSERT_SAVE_APTR     \
        assert(aptr)
-
-PERL_CALLCONV AV*      Perl_save_ary(pTHX_ GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV AV*      Perl_save_ary(pTHX_ GV* gv);
 #define PERL_ARGS_ASSERT_SAVE_ARY      \
        assert(gv)
-
-PERL_CALLCONV void     Perl_save_bool(pTHX_ bool* boolp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_bool(pTHX_ bool* boolp);
 #define PERL_ARGS_ASSERT_SAVE_BOOL     \
        assert(boolp)
-
-PERL_CALLCONV void     Perl_save_clearsv(pTHX_ SV** svp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_clearsv(pTHX_ SV** svp);
 #define PERL_ARGS_ASSERT_SAVE_CLEARSV  \
        assert(svp)
-
-PERL_CALLCONV void     Perl_save_delete(pTHX_ HV *hv, char *key, I32 klen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_save_delete(pTHX_ HV *hv, char *key, I32 klen);
 #define PERL_ARGS_ASSERT_SAVE_DELETE   \
        assert(hv); assert(key)
-
-PERL_CALLCONV void     Perl_save_destructor(pTHX_ DESTRUCTORFUNC_NOCONTEXT_t f, void* p)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_save_destructor(pTHX_ DESTRUCTORFUNC_NOCONTEXT_t f, void* p);
 #define PERL_ARGS_ASSERT_SAVE_DESTRUCTOR       \
        assert(p)
-
 PERL_CALLCONV void     Perl_save_destructor_x(pTHX_ DESTRUCTORFUNC_t f, void* p);
 /* PERL_CALLCONV void  Perl_save_freeop(pTHX_ OP* o); */
 /* PERL_CALLCONV void  Perl_save_freepv(pTHX_ char* pv); */
 /* PERL_CALLCONV void  Perl_save_freesv(pTHX_ SV* sv); */
-PERL_CALLCONV void     Perl_save_generic_pvref(pTHX_ char** str)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_generic_pvref(pTHX_ char** str);
 #define PERL_ARGS_ASSERT_SAVE_GENERIC_PVREF    \
        assert(str)
-
-PERL_CALLCONV void     Perl_save_generic_svref(pTHX_ SV** sptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_generic_svref(pTHX_ SV** sptr);
 #define PERL_ARGS_ASSERT_SAVE_GENERIC_SVREF    \
        assert(sptr)
-
-PERL_CALLCONV void     Perl_save_gp(pTHX_ GV* gv, I32 empty)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_gp(pTHX_ GV* gv, I32 empty);
 #define PERL_ARGS_ASSERT_SAVE_GP       \
        assert(gv)
-
-PERL_CALLCONV HV*      Perl_save_hash(pTHX_ GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV HV*      Perl_save_hash(pTHX_ GV* gv);
 #define PERL_ARGS_ASSERT_SAVE_HASH     \
        assert(gv)
-
-PERL_CALLCONV void     Perl_save_hdelete(pTHX_ HV *hv, SV *keysv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_save_hdelete(pTHX_ HV *hv, SV *keysv);
 #define PERL_ARGS_ASSERT_SAVE_HDELETE  \
        assert(hv); assert(keysv)
-
-/* PERL_CALLCONV void  Perl_save_helem(pTHX_ HV *hv, SV *key, SV **sptr)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3); */
-
-PERL_CALLCONV void     Perl_save_helem_flags(pTHX_ HV *hv, SV *key, SV **sptr, const U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+/* PERL_CALLCONV void  Perl_save_helem(pTHX_ HV *hv, SV *key, SV **sptr); */
+PERL_CALLCONV void     Perl_save_helem_flags(pTHX_ HV *hv, SV *key, SV **sptr, const U32 flags);
 #define PERL_ARGS_ASSERT_SAVE_HELEM_FLAGS      \
        assert(hv); assert(key); assert(sptr)
-
 PERL_CALLCONV void     Perl_save_hints(pTHX);
-PERL_CALLCONV void     Perl_save_hptr(pTHX_ HV** hptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_hptr(pTHX_ HV** hptr);
 #define PERL_ARGS_ASSERT_SAVE_HPTR     \
        assert(hptr)
-
-PERL_CALLCONV void     Perl_save_int(pTHX_ int* intp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_int(pTHX_ int* intp);
 #define PERL_ARGS_ASSERT_SAVE_INT      \
        assert(intp)
-
-PERL_CALLCONV void     Perl_save_item(pTHX_ SV* item)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_item(pTHX_ SV* item);
 #define PERL_ARGS_ASSERT_SAVE_ITEM     \
        assert(item)
-
-PERL_CALLCONV void     Perl_save_iv(pTHX_ IV *ivp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_iv(pTHX_ IV *ivp);
 #define PERL_ARGS_ASSERT_SAVE_IV       \
        assert(ivp)
-
-PERL_CALLCONV void     Perl_save_list(pTHX_ SV** sarg, I32 maxsarg)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_list(pTHX_ SV** sarg, I32 maxsarg);
 #define PERL_ARGS_ASSERT_SAVE_LIST     \
        assert(sarg)
-
-PERL_CALLCONV void     Perl_save_long(pTHX_ long* longp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_long(pTHX_ long* longp);
 #define PERL_ARGS_ASSERT_SAVE_LONG     \
        assert(longp)
-
-/* PERL_CALLCONV void  Perl_save_mortalizesv(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_save_mortalizesv(pTHX_ SV* sv); */
 #define PERL_ARGS_ASSERT_SAVE_MORTALIZESV      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_save_nogv(pTHX_ GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_nogv(pTHX_ GV* gv);
 #define PERL_ARGS_ASSERT_SAVE_NOGV     \
        assert(gv)
-
 /* PERL_CALLCONV void  Perl_save_op(pTHX); */
 PERL_CALLCONV void     Perl_save_padsv_and_mortalize(pTHX_ PADOFFSET off);
-PERL_CALLCONV void     Perl_save_pptr(pTHX_ char** pptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_pptr(pTHX_ char** pptr);
 #define PERL_ARGS_ASSERT_SAVE_PPTR     \
        assert(pptr)
-
 PERL_CALLCONV void     Perl_save_pushi32ptr(pTHX_ const I32 i, void *const ptr, const int type);
 PERL_CALLCONV void     Perl_save_pushptr(pTHX_ void *const ptr, const int type);
 PERL_CALLCONV void     Perl_save_pushptrptr(pTHX_ void *const ptr1, void *const ptr2, const int type);
 PERL_CALLCONV void     Perl_save_re_context(pTHX);
-PERL_CALLCONV SV*      Perl_save_scalar(pTHX_ GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_save_scalar(pTHX_ GV* gv);
 #define PERL_ARGS_ASSERT_SAVE_SCALAR   \
        assert(gv)
-
-PERL_CALLCONV void     Perl_save_set_svflags(pTHX_ SV *sv, U32 mask, U32 val)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_set_svflags(pTHX_ SV *sv, U32 mask, U32 val);
 #define PERL_ARGS_ASSERT_SAVE_SET_SVFLAGS      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_save_shared_pvref(pTHX_ char** str)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_shared_pvref(pTHX_ char** str);
 #define PERL_ARGS_ASSERT_SAVE_SHARED_PVREF     \
        assert(str)
-
-PERL_CALLCONV void     Perl_save_sptr(pTHX_ SV** sptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_sptr(pTHX_ SV** sptr);
 #define PERL_ARGS_ASSERT_SAVE_SPTR     \
        assert(sptr)
-
-PERL_CALLCONV void     Perl_save_strlen(pTHX_ STRLEN* ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_strlen(pTHX_ STRLEN* ptr);
 #define PERL_ARGS_ASSERT_SAVE_STRLEN   \
        assert(ptr)
-
-PERL_CALLCONV SV*      Perl_save_svref(pTHX_ SV** sptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_save_svref(pTHX_ SV** sptr);
 #define PERL_ARGS_ASSERT_SAVE_SVREF    \
        assert(sptr)
-
-PERL_CALLCONV void     Perl_save_vptr(pTHX_ void *ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_save_vptr(pTHX_ void *ptr);
 #define PERL_ARGS_ASSERT_SAVE_VPTR     \
        assert(ptr)
-
 PERL_CALLCONV char*    Perl_savepv(pTHX_ const char* pv)
                        __attribute__malloc__
                        __attribute__warn_unused_result__;
@@ -3970,8 +2774,7 @@ PERL_CALLCONV char*       Perl_savesharedpvn(pTHX_ const char *const pv, const STRLEN
 
 PERL_CALLCONV char*    Perl_savesharedsvpv(pTHX_ SV *sv)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SAVESHAREDSVPV        \
        assert(sv)
 
@@ -3979,465 +2782,291 @@ PERL_CALLCONV void    Perl_savestack_grow(pTHX);
 PERL_CALLCONV void     Perl_savestack_grow_cnt(pTHX_ I32 need);
 PERL_CALLCONV char*    Perl_savesvpv(pTHX_ SV* sv)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SAVESVPV      \
        assert(sv)
 
 PERL_CALLCONV OP*      Perl_sawparens(pTHX_ OP* o);
 PERL_CALLCONV OP*      Perl_scalar(pTHX_ OP* o);
-PERL_CALLCONV OP*      Perl_scalarvoid(pTHX_ OP* o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV OP*      Perl_scalarvoid(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_SCALARVOID    \
        assert(o)
-
-PERL_CALLCONV NV       Perl_scan_bin(pTHX_ const char* start, STRLEN len, STRLEN* retlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV NV       Perl_scan_bin(pTHX_ const char* start, STRLEN len, STRLEN* retlen);
 #define PERL_ARGS_ASSERT_SCAN_BIN      \
        assert(start); assert(retlen)
-
-PERL_CALLCONV NV       Perl_scan_hex(pTHX_ const char* start, STRLEN len, STRLEN* retlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV NV       Perl_scan_hex(pTHX_ const char* start, STRLEN len, STRLEN* retlen);
 #define PERL_ARGS_ASSERT_SCAN_HEX      \
        assert(start); assert(retlen)
-
-PERL_CALLCONV char*    Perl_scan_num(pTHX_ const char* s, YYSTYPE *lvalp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_scan_num(pTHX_ const char* s, YYSTYPE *lvalp);
 #define PERL_ARGS_ASSERT_SCAN_NUM      \
        assert(s); assert(lvalp)
-
-PERL_CALLCONV NV       Perl_scan_oct(pTHX_ const char* start, STRLEN len, STRLEN* retlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV NV       Perl_scan_oct(pTHX_ const char* start, STRLEN len, STRLEN* retlen);
 #define PERL_ARGS_ASSERT_SCAN_OCT      \
        assert(start); assert(retlen)
-
-PERL_CALLCONV const char*      Perl_scan_version(pTHX_ const char *s, SV *rv, bool qv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV const char*      Perl_scan_version(pTHX_ const char *s, SV *rv, bool qv);
 #define PERL_ARGS_ASSERT_SCAN_VERSION  \
        assert(s); assert(rv)
-
-PERL_CALLCONV char*    Perl_scan_vstring(pTHX_ const char *s, const char *const e, SV *sv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV char*    Perl_scan_vstring(pTHX_ const char *s, const char *const e, SV *sv);
 #define PERL_ARGS_ASSERT_SCAN_VSTRING  \
        assert(s); assert(e); assert(sv)
-
 PERL_CALLCONV U32      Perl_seed(pTHX);
 PERL_CALLCONV void     Perl_set_caret_X(pTHX);
-PERL_CALLCONV void     Perl_set_context(void *t)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void     Perl_set_context(void *t);
 #define PERL_ARGS_ASSERT_SET_CONTEXT   \
        assert(t)
-
 PERL_CALLCONV void     Perl_set_numeric_local(pTHX);
 PERL_CALLCONV void     Perl_set_numeric_radix(pTHX);
 PERL_CALLCONV void     Perl_set_numeric_standard(pTHX);
-PERL_CALLCONV void     Perl_setdefout(pTHX_ GV* gv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_setdefout(pTHX_ GV* gv);
 #define PERL_ARGS_ASSERT_SETDEFOUT     \
        assert(gv)
-
-PERL_CALLCONV HEK*     Perl_share_hek(pTHX_ const char* str, I32 len, U32 hash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV HEK*     Perl_share_hek(pTHX_ const char* str, I32 len, U32 hash);
 #define PERL_ARGS_ASSERT_SHARE_HEK     \
        assert(str)
-
-PERL_CALLCONV void     Perl_sortsv(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t cmp)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_sortsv(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t cmp);
 #define PERL_ARGS_ASSERT_SORTSV        \
        assert(cmp)
-
-PERL_CALLCONV void     Perl_sortsv_flags(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t cmp, U32 flags)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_sortsv_flags(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t cmp, U32 flags);
 #define PERL_ARGS_ASSERT_SORTSV_FLAGS  \
        assert(cmp)
-
-PERL_CALLCONV SV**     Perl_stack_grow(pTHX_ SV** sp, SV** p, SSize_t n)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV**     Perl_stack_grow(pTHX_ SV** sp, SV** p, SSize_t n);
 #define PERL_ARGS_ASSERT_STACK_GROW    \
        assert(sp); assert(p)
-
-PERL_CALLCONV PerlIO*  Perl_start_glob(pTHX_ SV *tmpglob, IO *io)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV PerlIO*  Perl_start_glob(pTHX_ SV *tmpglob, IO *io);
 #define PERL_ARGS_ASSERT_START_GLOB    \
        assert(tmpglob); assert(io)
-
 PERL_CALLCONV I32      Perl_start_subparse(pTHX_ I32 is_format, U32 flags);
 PERL_CALLCONV NV       Perl_str_to_version(pTHX_ SV *sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_STR_TO_VERSION        \
        assert(sv)
 
-PERL_CALLCONV void     Perl_sub_crush_depth(pTHX_ CV* cv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sub_crush_depth(pTHX_ CV* cv);
 #define PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH       \
        assert(cv)
-
-/* PERL_CALLCONV bool  sv_2bool(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1); */
-
-PERL_CALLCONV bool     Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+/* PERL_CALLCONV bool  sv_2bool(pTHX_ SV *const sv); */
+PERL_CALLCONV bool     Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags);
 #define PERL_ARGS_ASSERT_SV_2BOOL_FLAGS        \
        assert(sv)
-
-PERL_CALLCONV CV*      Perl_sv_2cv(pTHX_ SV* sv, HV **const st, GV **const gvp, const I32 lref)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV CV*      Perl_sv_2cv(pTHX_ SV* sv, HV **const st, GV **const gvp, const I32 lref);
 #define PERL_ARGS_ASSERT_SV_2CV        \
        assert(st); assert(gvp)
-
-PERL_CALLCONV IO*      Perl_sv_2io(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV IO*      Perl_sv_2io(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_2IO        \
        assert(sv)
-
-/* PERL_CALLCONV IV    Perl_sv_2iv(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV IV    Perl_sv_2iv(pTHX_ SV *sv); */
 #define PERL_ARGS_ASSERT_SV_2IV        \
        assert(sv)
-
-PERL_CALLCONV IV       Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV IV       Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_2IV_FLAGS  \
        assert(sv)
-
 PERL_CALLCONV SV*      Perl_sv_2mortal(pTHX_ SV *const sv);
-PERL_CALLCONV SV*      Perl_sv_2num(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_sv_2num(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_2NUM       \
        assert(sv)
-
-PERL_CALLCONV NV       Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV NV       Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_2NV_FLAGS  \
        assert(sv)
-
-/* PERL_CALLCONV char* Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV char* Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp); */
 #define PERL_ARGS_ASSERT_SV_2PV        \
        assert(sv)
-
-PERL_CALLCONV char*    Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_2PV_FLAGS  \
        assert(sv)
-
 /* PERL_CALLCONV char* Perl_sv_2pv_nolen(pTHX_ SV* sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_SV_2PV_NOLEN  \
        assert(sv)
 
-PERL_CALLCONV char*    Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp);
 #define PERL_ARGS_ASSERT_SV_2PVBYTE    \
        assert(sv)
-
 /* PERL_CALLCONV char* Perl_sv_2pvbyte_nolen(pTHX_ SV* sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN      \
        assert(sv)
 
-PERL_CALLCONV char*    Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp);
 #define PERL_ARGS_ASSERT_SV_2PVUTF8    \
        assert(sv)
-
 /* PERL_CALLCONV char* Perl_sv_2pvutf8_nolen(pTHX_ SV* sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN      \
        assert(sv)
 
-/* PERL_CALLCONV UV    Perl_sv_2uv(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV UV    Perl_sv_2uv(pTHX_ SV *sv); */
 #define PERL_ARGS_ASSERT_SV_2UV        \
        assert(sv)
-
-PERL_CALLCONV UV       Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV UV       Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_2UV_FLAGS  \
        assert(sv)
-
-PERL_CALLCONV int      Perl_sv_backoff(SV *const sv)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV int      Perl_sv_backoff(SV *const sv);
 #define PERL_ARGS_ASSERT_SV_BACKOFF    \
        assert(sv)
-
-PERL_CALLCONV SV*      Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_sv_bless(pTHX_ SV *const sv, HV *const stash);
 #define PERL_ARGS_ASSERT_SV_BLESS      \
        assert(sv); assert(stash)
-
-PERL_CALLCONV bool     Perl_sv_cat_decode(pTHX_ SV* dsv, SV *encoding, SV *ssv, int *offset, char* tstr, int tlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+PERL_CALLCONV bool     Perl_sv_cat_decode(pTHX_ SV* dsv, SV *encoding, SV *ssv, int *offset, char* tstr, int tlen);
 #define PERL_ARGS_ASSERT_SV_CAT_DECODE \
        assert(dsv); assert(encoding); assert(ssv); assert(offset); assert(tstr)
-
-PERL_CALLCONV void     Perl_sv_catpv(pTHX_ SV *const sv, const char* ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_catpv(pTHX_ SV *const sv, const char* ptr);
 #define PERL_ARGS_ASSERT_SV_CATPV      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_CATPV_FLAGS        \
        assert(dstr); assert(sstr)
-
-PERL_CALLCONV void     Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr);
 #define PERL_ARGS_ASSERT_SV_CATPV_MG   \
        assert(sv)
-
 PERL_CALLCONV void     Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
-                       __attribute__format__(__printf__,pTHX_2,pTHX_3)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_SV_CATPVF     \
        assert(sv); assert(pat)
 
 PERL_CALLCONV void     Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
-                       __attribute__format__(__printf__,pTHX_2,pTHX_3)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_SV_CATPVF_MG  \
        assert(sv); assert(pat)
 
-/* PERL_CALLCONV void  Perl_sv_catpvn(pTHX_ SV *dsv, const char *sstr, STRLEN len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV void  Perl_sv_catpvn(pTHX_ SV *dsv, const char *sstr, STRLEN len); */
 #define PERL_ARGS_ASSERT_SV_CATPVN     \
        assert(dsv); assert(sstr)
-
-PERL_CALLCONV void     Perl_sv_catpvn_flags(pTHX_ SV *const dstr, const char *sstr, const STRLEN len, const I32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_catpvn_flags(pTHX_ SV *const dstr, const char *sstr, const STRLEN len, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_CATPVN_FLAGS       \
        assert(dstr); assert(sstr)
-
-/* PERL_CALLCONV void  Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV void  Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len); */
 #define PERL_ARGS_ASSERT_SV_CATPVN_MG  \
        assert(sv); assert(ptr)
-
-/* PERL_CALLCONV void  Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr); */
 #define PERL_ARGS_ASSERT_SV_CATSV      \
        assert(dstr)
-
-PERL_CALLCONV void     Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_CATSV_FLAGS        \
        assert(dsv)
-
-/* PERL_CALLCONV void  Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *ssv)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *ssv); */
 #define PERL_ARGS_ASSERT_SV_CATSV_MG   \
        assert(dsv)
-
-PERL_CALLCONV void     Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr);
 #define PERL_ARGS_ASSERT_SV_CHOP       \
        assert(sv)
-
 PERL_CALLCONV I32      Perl_sv_clean_all(pTHX);
 PERL_CALLCONV void     Perl_sv_clean_objs(pTHX);
-PERL_CALLCONV void     Perl_sv_clear(pTHX_ SV *const orig_sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_clear(pTHX_ SV *const orig_sv);
 #define PERL_ARGS_ASSERT_SV_CLEAR      \
        assert(orig_sv)
-
 PERL_CALLCONV I32      Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2);
 PERL_CALLCONV I32      Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2, const U32 flags);
 PERL_CALLCONV I32      Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2);
 PERL_CALLCONV I32      Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2, const U32 flags);
-/* PERL_CALLCONV void  Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV void  Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv); */
 #define PERL_ARGS_ASSERT_SV_COPYPV     \
        assert(dsv); assert(ssv)
-
-PERL_CALLCONV void     Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_COPYPV_FLAGS       \
        assert(dsv); assert(ssv)
-
-/* PERL_CALLCONV void  Perl_sv_copypv_nomg(pTHX_ SV *const dsv, SV *const ssv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
-
+/* PERL_CALLCONV void  Perl_sv_copypv_nomg(pTHX_ SV *const dsv, SV *const ssv); */
 PERL_CALLCONV void     Perl_sv_dec(pTHX_ SV *const sv);
 PERL_CALLCONV void     Perl_sv_dec_nomg(pTHX_ SV *const sv);
-PERL_CALLCONV void     Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv);
 #define PERL_ARGS_ASSERT_SV_DEL_BACKREF        \
        assert(tsv); assert(sv)
-
 PERL_CALLCONV bool     Perl_sv_derived_from(pTHX_ SV* sv, const char *const name)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DERIVED_FROM       \
        assert(sv); assert(name)
 
 PERL_CALLCONV bool     Perl_sv_derived_from_pv(pTHX_ SV* sv, const char *const name, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DERIVED_FROM_PV    \
        assert(sv); assert(name)
 
 PERL_CALLCONV bool     Perl_sv_derived_from_pvn(pTHX_ SV* sv, const char *const name, const STRLEN len, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DERIVED_FROM_PVN   \
        assert(sv); assert(name)
 
 PERL_CALLCONV bool     Perl_sv_derived_from_sv(pTHX_ SV* sv, SV *namesv, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DERIVED_FROM_SV    \
        assert(sv); assert(namesv)
 
 PERL_CALLCONV bool     Perl_sv_destroyable(pTHX_ SV *sv);
 PERL_CALLCONV bool     Perl_sv_does(pTHX_ SV* sv, const char *const name)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DOES       \
        assert(sv); assert(name)
 
 PERL_CALLCONV bool     Perl_sv_does_pv(pTHX_ SV* sv, const char *const name, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DOES_PV    \
        assert(sv); assert(name)
 
 PERL_CALLCONV bool     Perl_sv_does_pvn(pTHX_ SV* sv, const char *const name, const STRLEN len, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DOES_PVN   \
        assert(sv); assert(name)
 
 PERL_CALLCONV bool     Perl_sv_does_sv(pTHX_ SV* sv, SV* namesv, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DOES_SV    \
        assert(sv); assert(namesv)
 
-PERL_CALLCONV void     Perl_sv_dump(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_dump(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_SV_DUMP       \
        assert(sv)
-
 /* PERL_CALLCONV I32   sv_eq(pTHX_ SV* sv1, SV* sv2); */
 PERL_CALLCONV I32      Perl_sv_eq_flags(pTHX_ SV* sv1, SV* sv2, const U32 flags);
-/* PERL_CALLCONV void  Perl_sv_force_normal(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_sv_force_normal(pTHX_ SV *sv); */
 #define PERL_ARGS_ASSERT_SV_FORCE_NORMAL       \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags);
 #define PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS \
        assert(sv)
-
 PERL_CALLCONV void     Perl_sv_free(pTHX_ SV *const sv);
-PERL_CALLCONV void     Perl_sv_free2(pTHX_ SV *const sv, const U32 refcnt)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_free2(pTHX_ SV *const sv, const U32 refcnt);
 #define PERL_ARGS_ASSERT_SV_FREE2      \
        assert(sv)
-
 PERL_CALLCONV void     Perl_sv_free_arenas(pTHX);
 PERL_CALLCONV SV*      Perl_sv_get_backrefs(SV *const sv)
-                       __attribute__pure__
-                       __attribute__nonnull__(1);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_SV_GET_BACKREFS       \
        assert(sv)
 
-PERL_CALLCONV char*    Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append);
 #define PERL_ARGS_ASSERT_SV_GETS       \
        assert(sv); assert(fp)
-
-PERL_CALLCONV char*    Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen);
 #define PERL_ARGS_ASSERT_SV_GROW       \
        assert(sv)
-
 PERL_CALLCONV void     Perl_sv_inc(pTHX_ SV *const sv);
 PERL_CALLCONV void     Perl_sv_inc_nomg(pTHX_ SV *const sv);
-/* PERL_CALLCONV void  Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_4); */
+/* PERL_CALLCONV void  Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen); */
 #define PERL_ARGS_ASSERT_SV_INSERT     \
        assert(bigstr); assert(little)
-
-PERL_CALLCONV void     Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV void     Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags);
 #define PERL_ARGS_ASSERT_SV_INSERT_FLAGS       \
        assert(bigstr); assert(little)
-
-PERL_CALLCONV int      Perl_sv_isa(pTHX_ SV* sv, const char *const name)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_sv_isa(pTHX_ SV* sv, const char *const name);
 #define PERL_ARGS_ASSERT_SV_ISA        \
        assert(name)
-
 PERL_CALLCONV int      Perl_sv_isobject(pTHX_ SV* sv);
-PERL_CALLCONV IV       Perl_sv_iv(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV IV       Perl_sv_iv(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_SV_IV \
        assert(sv)
-
 PERL_CALLCONV STRLEN   Perl_sv_len(pTHX_ SV *const sv);
 PERL_CALLCONV STRLEN   Perl_sv_len_utf8(pTHX_ SV *const sv);
-PERL_CALLCONV STRLEN   Perl_sv_len_utf8_nomg(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV STRLEN   Perl_sv_len_utf8_nomg(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how, const char *const name, const I32 namlen)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how, const char *const name, const I32 namlen);
 #define PERL_ARGS_ASSERT_SV_MAGIC      \
        assert(sv)
-
-PERL_CALLCONV MAGIC *  Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, const MGVTBL *const vtbl, const char *const name, const I32 namlen)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV MAGIC *  Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, const MGVTBL *const vtbl, const char *const name, const I32 namlen);
 #define PERL_ARGS_ASSERT_SV_MAGICEXT   \
        assert(sv)
-
-PERL_CALLCONV MAGIC *  Perl_sv_magicext_mglob(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV MAGIC *  Perl_sv_magicext_mglob(pTHX_ SV *sv);
 #define PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB     \
        assert(sv)
-
 /* PERL_CALLCONV SV*   Perl_sv_mortalcopy(pTHX_ SV *const oldsv)
                        __attribute__malloc__
                        __attribute__warn_unused_result__; */
@@ -4452,821 +3081,502 @@ PERL_CALLCONV SV*     Perl_sv_newmortal(pTHX)
 PERL_CALLCONV SV*      Perl_sv_newref(pTHX_ SV *const sv);
 /* PERL_CALLCONV void  Perl_sv_nolocking(pTHX_ SV *sv); */
 PERL_CALLCONV void     Perl_sv_nosharing(pTHX_ SV *sv);
-PERL_CALLCONV NV       Perl_sv_nv(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV NV       Perl_sv_nv(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_SV_NV \
        assert(sv)
-
-PERL_STATIC_INLINE bool        S_sv_only_taint_gmagic(SV *sv)
-                       __attribute__nonnull__(1);
+PERL_STATIC_INLINE bool        S_sv_only_taint_gmagic(SV *sv);
 #define PERL_ARGS_ASSERT_SV_ONLY_TAINT_GMAGIC  \
        assert(sv)
-
 PERL_CALLCONV char*    Perl_sv_peek(pTHX_ SV* sv);
-PERL_CALLCONV void     Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp);
 #define PERL_ARGS_ASSERT_SV_POS_B2U    \
        assert(offsetp)
-
-PERL_CALLCONV STRLEN   Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV STRLEN   Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags);
 #define PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp);
 #define PERL_ARGS_ASSERT_SV_POS_U2B    \
        assert(offsetp)
-
-PERL_CALLCONV STRLEN   Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV STRLEN   Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp, U32 flags);
 #define PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS      \
        assert(sv)
-
 /* PERL_CALLCONV char* Perl_sv_pv(pTHX_ SV *sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_SV_PV \
        assert(sv)
 
 /* PERL_CALLCONV char* Perl_sv_pvbyte(pTHX_ SV *sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_SV_PVBYTE     \
        assert(sv)
 
-PERL_CALLCONV char*    Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp);
 #define PERL_ARGS_ASSERT_SV_PVBYTEN    \
        assert(sv); assert(lp)
-
-PERL_CALLCONV char*    Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp);
 #define PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE      \
        assert(sv)
-
-PERL_CALLCONV char*    Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp);
 #define PERL_ARGS_ASSERT_SV_PVN        \
        assert(sv); assert(lp)
-
-/* PERL_CALLCONV char* Perl_sv_pvn_force(pTHX_ SV* sv, STRLEN* lp)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV char* Perl_sv_pvn_force(pTHX_ SV* sv, STRLEN* lp); */
 #define PERL_ARGS_ASSERT_SV_PVN_FORCE  \
        assert(sv)
-
-PERL_CALLCONV char*    Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS    \
        assert(sv)
-
-PERL_CALLCONV char*    Perl_sv_pvn_nomg(pTHX_ SV* sv, STRLEN* lp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_sv_pvn_nomg(pTHX_ SV* sv, STRLEN* lp);
 #define PERL_ARGS_ASSERT_SV_PVN_NOMG   \
        assert(sv)
-
 /* PERL_CALLCONV char* Perl_sv_pvutf8(pTHX_ SV *sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1); */
+                       __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_SV_PVUTF8     \
        assert(sv)
 
-PERL_CALLCONV char*    Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp);
 #define PERL_ARGS_ASSERT_SV_PVUTF8N    \
        assert(sv); assert(lp)
-
-PERL_CALLCONV char*    Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp);
 #define PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE      \
        assert(sv)
-
-PERL_CALLCONV char*    Perl_sv_recode_to_utf8(pTHX_ SV* sv, SV *encoding)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_sv_recode_to_utf8(pTHX_ SV* sv, SV *encoding);
 #define PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8     \
        assert(sv); assert(encoding)
-
-PERL_CALLCONV SV*      Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob);
 #define PERL_ARGS_ASSERT_SV_REF        \
        assert(sv)
-
 PERL_CALLCONV const char*      Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_REFTYPE    \
        assert(sv)
 
-PERL_CALLCONV void     Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv);
 #define PERL_ARGS_ASSERT_SV_REPLACE    \
        assert(sv); assert(nsv)
-
 PERL_CALLCONV void     Perl_sv_report_used(pTHX);
-PERL_CALLCONV void     Perl_sv_reset(pTHX_ const char* s, HV *const stash)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_reset(pTHX_ const char* s, HV *const stash);
 #define PERL_ARGS_ASSERT_SV_RESET      \
        assert(s)
-
 PERL_CALLCONV void     Perl_sv_resetpvn(pTHX_ const char* s, STRLEN len, HV *const stash);
-PERL_CALLCONV SV*      Perl_sv_rvweaken(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_sv_rvweaken(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_RVWEAKEN   \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek);
 #define PERL_ARGS_ASSERT_SV_SETHEK     \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setiv(pTHX_ SV *const sv, const IV num)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setiv(pTHX_ SV *const sv, const IV num);
 #define PERL_ARGS_ASSERT_SV_SETIV      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i);
 #define PERL_ARGS_ASSERT_SV_SETIV_MG   \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setnv(pTHX_ SV *const sv, const NV num);
 #define PERL_ARGS_ASSERT_SV_SETNV      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num);
 #define PERL_ARGS_ASSERT_SV_SETNV_MG   \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr);
 #define PERL_ARGS_ASSERT_SV_SETPV      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr);
 #define PERL_ARGS_ASSERT_SV_SETPV_MG   \
        assert(sv)
-
 PERL_CALLCONV void     Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
-                       __attribute__format__(__printf__,pTHX_2,pTHX_3)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_SV_SETPVF     \
        assert(sv); assert(pat)
 
 PERL_CALLCONV void     Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
-                       __attribute__format__(__printf__,pTHX_2,pTHX_3)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_SV_SETPVF_MG  \
        assert(sv); assert(pat)
 
-PERL_CALLCONV void     Perl_sv_setpviv(pTHX_ SV *const sv, const IV num)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setpviv(pTHX_ SV *const sv, const IV num);
 #define PERL_ARGS_ASSERT_SV_SETPVIV    \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv);
 #define PERL_ARGS_ASSERT_SV_SETPVIV_MG \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len);
 #define PERL_ARGS_ASSERT_SV_SETPVN     \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len);
 #define PERL_ARGS_ASSERT_SV_SETPVN_MG  \
        assert(sv); assert(ptr)
-
-PERL_CALLCONV SV*      Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv);
 #define PERL_ARGS_ASSERT_SV_SETREF_IV  \
        assert(rv)
-
-PERL_CALLCONV SV*      Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv);
 #define PERL_ARGS_ASSERT_SV_SETREF_NV  \
        assert(rv)
-
-PERL_CALLCONV SV*      Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv);
 #define PERL_ARGS_ASSERT_SV_SETREF_PV  \
        assert(rv)
-
-PERL_CALLCONV SV*      Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname, const char *const pv, const STRLEN n)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV SV*      Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname, const char *const pv, const STRLEN n);
 #define PERL_ARGS_ASSERT_SV_SETREF_PVN \
        assert(rv); assert(pv)
-
-PERL_CALLCONV SV*      Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv);
 #define PERL_ARGS_ASSERT_SV_SETREF_UV  \
        assert(rv)
-
-/* PERL_CALLCONV void  Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr); */
 #define PERL_ARGS_ASSERT_SV_SETSV      \
        assert(dstr)
-
-PERL_CALLCONV void     Perl_sv_setsv_flags(pTHX_ SV *dstr, SV *sstr, const I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setsv_flags(pTHX_ SV *dstr, SV *sstr, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_SETSV_FLAGS        \
        assert(dstr)
-
-PERL_CALLCONV void     Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr);
 #define PERL_ARGS_ASSERT_SV_SETSV_MG   \
        assert(dstr)
-
-PERL_CALLCONV void     Perl_sv_setuv(pTHX_ SV *const sv, const UV num)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setuv(pTHX_ SV *const sv, const UV num);
 #define PERL_ARGS_ASSERT_SV_SETUV      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u);
 #define PERL_ARGS_ASSERT_SV_SETUV_MG   \
        assert(sv)
-
-/* PERL_CALLCONV void  Perl_sv_taint(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_sv_taint(pTHX_ SV* sv); */
 #define PERL_ARGS_ASSERT_SV_TAINT      \
        assert(sv)
-
 PERL_CALLCONV bool     Perl_sv_tainted(pTHX_ SV *const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_TAINTED    \
        assert(sv)
 
 PERL_CALLCONV I32      Perl_sv_true(pTHX_ SV *const sv);
 PERL_CALLCONV char*    Perl_sv_uni_display(pTHX_ SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_UNI_DISPLAY        \
        assert(dsv); assert(ssv)
 
-PERL_CALLCONV int      Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_sv_unmagic(pTHX_ SV *const sv, const int type);
 #define PERL_ARGS_ASSERT_SV_UNMAGIC    \
        assert(sv)
-
-PERL_CALLCONV int      Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl);
 #define PERL_ARGS_ASSERT_SV_UNMAGICEXT \
        assert(sv)
-
-/* PERL_CALLCONV void  Perl_sv_unref(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_sv_unref(pTHX_ SV* sv); */
 #define PERL_ARGS_ASSERT_SV_UNREF      \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags);
 #define PERL_ARGS_ASSERT_SV_UNREF_FLAGS        \
        assert(ref)
-
-PERL_CALLCONV void     Perl_sv_untaint(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_untaint(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_UNTAINT    \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type);
 #define PERL_ARGS_ASSERT_SV_UPGRADE    \
        assert(sv)
-
-/* PERL_CALLCONV void  Perl_sv_usepvn(pTHX_ SV* sv, char* ptr, STRLEN len)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_sv_usepvn(pTHX_ SV* sv, char* ptr, STRLEN len); */
 #define PERL_ARGS_ASSERT_SV_USEPVN     \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_usepvn_flags(pTHX_ SV *const sv, char* ptr, const STRLEN len, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_usepvn_flags(pTHX_ SV *const sv, char* ptr, const STRLEN len, const U32 flags);
 #define PERL_ARGS_ASSERT_SV_USEPVN_FLAGS       \
        assert(sv)
-
-/* PERL_CALLCONV void  Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV void  Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len); */
 #define PERL_ARGS_ASSERT_SV_USEPVN_MG  \
        assert(sv)
-
-PERL_CALLCONV bool     Perl_sv_utf8_decode(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_sv_utf8_decode(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_UTF8_DECODE        \
        assert(sv)
-
-PERL_CALLCONV bool     Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok);
 #define PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE     \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_utf8_encode(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_utf8_encode(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_UTF8_ENCODE        \
        assert(sv)
-
-/* PERL_CALLCONV STRLEN        Perl_sv_utf8_upgrade(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1); */
+/* PERL_CALLCONV STRLEN        Perl_sv_utf8_upgrade(pTHX_ SV *sv); */
 #define PERL_ARGS_ASSERT_SV_UTF8_UPGRADE       \
        assert(sv)
-
-/* PERL_CALLCONV STRLEN        Perl_sv_utf8_upgrade_flags(pTHX_ SV *const sv, const I32 flags)
-                       __attribute__nonnull__(pTHX_1); */
-
-PERL_CALLCONV STRLEN   Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
-                       __attribute__nonnull__(pTHX_1);
+/* PERL_CALLCONV STRLEN        Perl_sv_utf8_upgrade_flags(pTHX_ SV *const sv, const I32 flags); */
+PERL_CALLCONV STRLEN   Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra);
 #define PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW    \
        assert(sv)
-
-/* PERL_CALLCONV STRLEN        sv_utf8_upgrade_nomg(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1); */
-
-PERL_CALLCONV UV       Perl_sv_uv(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+/* PERL_CALLCONV STRLEN        sv_utf8_upgrade_nomg(pTHX_ SV *sv); */
+PERL_CALLCONV UV       Perl_sv_uv(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_SV_UV \
        assert(sv)
-
-PERL_CALLCONV void     Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args);
 #define PERL_ARGS_ASSERT_SV_VCATPVF    \
        assert(sv); assert(pat)
-
-PERL_CALLCONV void     Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args);
 #define PERL_ARGS_ASSERT_SV_VCATPVF_MG \
        assert(sv); assert(pat)
-
-PERL_CALLCONV void     Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted);
 #define PERL_ARGS_ASSERT_SV_VCATPVFN   \
        assert(sv); assert(pat)
-
-PERL_CALLCONV void     Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted, const U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted, const U32 flags);
 #define PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS     \
        assert(sv); assert(pat)
-
-PERL_CALLCONV void     Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args);
 #define PERL_ARGS_ASSERT_SV_VSETPVF    \
        assert(sv); assert(pat)
-
-PERL_CALLCONV void     Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args);
 #define PERL_ARGS_ASSERT_SV_VSETPVF_MG \
        assert(sv); assert(pat)
-
-PERL_CALLCONV void     Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted);
 #define PERL_ARGS_ASSERT_SV_VSETPVFN   \
        assert(sv); assert(pat)
-
-PERL_CALLCONV UV       Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV UV       Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8);
 #define PERL_ARGS_ASSERT_SWASH_FETCH   \
        assert(swash); assert(ptr)
-
 PERL_CALLCONV SV*      Perl_swash_init(pTHX_ const char* pkg, const char* name, SV* listsv, I32 minbits, I32 none)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SWASH_INIT    \
        assert(pkg); assert(name); assert(listsv)
 
 PERL_CALLCONV void     Perl_sync_locale(pTHX);
-PERL_CALLCONV void     Perl_sys_init(int* argc, char*** argv)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+PERL_CALLCONV void     Perl_sys_init(int* argc, char*** argv);
 #define PERL_ARGS_ASSERT_SYS_INIT      \
        assert(argc); assert(argv)
-
-PERL_CALLCONV void     Perl_sys_init3(int* argc, char*** argv, char*** env)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3);
+PERL_CALLCONV void     Perl_sys_init3(int* argc, char*** argv, char*** env);
 #define PERL_ARGS_ASSERT_SYS_INIT3     \
        assert(argc); assert(argv); assert(env)
-
 PERL_CALLCONV void     Perl_sys_term(void);
 PERL_CALLCONV void     Perl_taint_env(pTHX);
-PERL_CALLCONV void     Perl_taint_proper(pTHX_ const char* f, const char *const s)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_taint_proper(pTHX_ const char* f, const char *const s);
 #define PERL_ARGS_ASSERT_TAINT_PROPER  \
        assert(s)
-
-PERL_CALLCONV OP *     Perl_tied_method(pTHX_ SV *methname, SV **sp, SV *const sv, const MAGIC *const mg, const U32 flags, U32 argc, ...)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV OP *     Perl_tied_method(pTHX_ SV *methname, SV **sp, SV *const sv, const MAGIC *const mg, const U32 flags, U32 argc, ...);
 #define PERL_ARGS_ASSERT_TIED_METHOD   \
        assert(methname); assert(sp); assert(sv); assert(mg)
-
 PERL_CALLCONV SSize_t  Perl_tmps_grow_p(pTHX_ SSize_t ix);
-/* PERL_CALLCONV UV    Perl_to_uni_fold(pTHX_ UV c, U8 *p, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3); */
-
-PERL_CALLCONV UV       Perl_to_uni_lower(pTHX_ UV c, U8 *p, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+/* PERL_CALLCONV UV    Perl_to_uni_fold(pTHX_ UV c, U8 *p, STRLEN *lenp); */
+PERL_CALLCONV UV       Perl_to_uni_lower(pTHX_ UV c, U8 *p, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_TO_UNI_LOWER  \
        assert(p); assert(lenp)
-
 PERL_CALLCONV U32      Perl_to_uni_lower_lc(pTHX_ U32 c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
 
-PERL_CALLCONV UV       Perl_to_uni_title(pTHX_ UV c, U8 *p, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV UV       Perl_to_uni_title(pTHX_ UV c, U8 *p, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_TO_UNI_TITLE  \
        assert(p); assert(lenp)
-
 PERL_CALLCONV U32      Perl_to_uni_title_lc(pTHX_ U32 c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
 
-PERL_CALLCONV UV       Perl_to_uni_upper(pTHX_ UV c, U8 *p, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV UV       Perl_to_uni_upper(pTHX_ UV c, U8 *p, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_TO_UNI_UPPER  \
        assert(p); assert(lenp)
-
 PERL_CALLCONV U32      Perl_to_uni_upper_lc(pTHX_ U32 c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
 
-PERL_CALLCONV UV       Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, const char *normal, const char *special)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+PERL_CALLCONV UV       Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, const char *normal, const char *special);
 #define PERL_ARGS_ASSERT_TO_UTF8_CASE  \
        assert(p); assert(ustrp); assert(swashp); assert(normal)
-
-/* PERL_CALLCONV UV    Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV UV    Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp); */
 #define PERL_ARGS_ASSERT_TO_UTF8_FOLD  \
        assert(p); assert(ustrp)
-
-/* PERL_CALLCONV UV    Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV UV    Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp); */
 #define PERL_ARGS_ASSERT_TO_UTF8_LOWER \
        assert(p); assert(ustrp)
-
-/* PERL_CALLCONV UV    Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV UV    Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp); */
 #define PERL_ARGS_ASSERT_TO_UTF8_TITLE \
        assert(p); assert(ustrp)
-
-/* PERL_CALLCONV UV    Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
+/* PERL_CALLCONV UV    Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp); */
 #define PERL_ARGS_ASSERT_TO_UTF8_UPPER \
        assert(p); assert(ustrp)
-
 PERL_CALLCONV bool     Perl_try_amagic_bin(pTHX_ int method, int flags);
 PERL_CALLCONV bool     Perl_try_amagic_un(pTHX_ int method, int flags);
-PERL_CALLCONV I32      Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, const char *strbeg, const char *strend, char **new_s, I32 ocnt, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_5);
+PERL_CALLCONV I32      Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, const char *strbeg, const char *strend, char **new_s, I32 ocnt, U32 flags);
 #define PERL_ARGS_ASSERT_UNPACK_STR    \
        assert(pat); assert(patend); assert(s); assert(strend)
-
-PERL_CALLCONV I32      Perl_unpackstring(pTHX_ const char *pat, const char *patend, const char *s, const char *strend, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV I32      Perl_unpackstring(pTHX_ const char *pat, const char *patend, const char *s, const char *strend, U32 flags);
 #define PERL_ARGS_ASSERT_UNPACKSTRING  \
        assert(pat); assert(patend); assert(s); assert(strend)
-
 PERL_CALLCONV void     Perl_unshare_hek(pTHX_ HEK* hek);
 PERL_CALLCONV void     Perl_unsharepvn(pTHX_ const char* sv, I32 len, U32 hash);
-PERL_CALLCONV SV*      Perl_upg_version(pTHX_ SV *ver, bool qv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_upg_version(pTHX_ SV *ver, bool qv);
 #define PERL_ARGS_ASSERT_UPG_VERSION   \
        assert(ver)
-
-PERL_CALLCONV U8*      Perl_utf16_to_utf8(pTHX_ U8* p, U8 *d, I32 bytelen, I32 *newlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV U8*      Perl_utf16_to_utf8(pTHX_ U8* p, U8 *d, I32 bytelen, I32 *newlen);
 #define PERL_ARGS_ASSERT_UTF16_TO_UTF8 \
        assert(p); assert(d); assert(newlen)
-
-PERL_CALLCONV U8*      Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8 *d, I32 bytelen, I32 *newlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV U8*      Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8 *d, I32 bytelen, I32 *newlen);
 #define PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED        \
        assert(p); assert(d); assert(newlen)
-
 PERL_CALLCONV IV       Perl_utf8_distance(pTHX_ const U8 *a, const U8 *b)
                        __attribute__warn_unused_result__
-                       __attribute__pure__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_UTF8_DISTANCE \
        assert(a); assert(b)
 
 PERL_CALLCONV U8*      Perl_utf8_hop(const U8 *s, I32 off)
                        __attribute__warn_unused_result__
-                       __attribute__pure__
-                       __attribute__nonnull__(1);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_UTF8_HOP      \
        assert(s)
 
 PERL_CALLCONV STRLEN   Perl_utf8_length(pTHX_ const U8* s, const U8 *e)
                        __attribute__warn_unused_result__
-                       __attribute__pure__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_UTF8_LENGTH   \
        assert(s); assert(e)
 
-PERL_CALLCONV U8*      Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV U8*      Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *len);
 #define PERL_ARGS_ASSERT_UTF8_TO_BYTES \
        assert(s); assert(len)
-
 PERL_CALLCONV UV       Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
-                       __attribute__deprecated__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_UTF8_TO_UVCHR \
        assert(s)
 
-/* PERL_CALLCONV UV    utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
-
+/* PERL_CALLCONV UV    utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen); */
 PERL_CALLCONV UV       Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
-                       __attribute__deprecated__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_UTF8_TO_UVUNI \
        assert(s)
 
 PERL_CALLCONV UV       Perl_utf8_to_uvuni_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
-                       __attribute__deprecated__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF     \
        assert(s); assert(send)
 
-PERL_CALLCONV UV       Perl_utf8n_to_uvchr(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV UV       Perl_utf8n_to_uvchr(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags);
 #define PERL_ARGS_ASSERT_UTF8N_TO_UVCHR        \
        assert(s)
-
-PERL_CALLCONV UV       Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV UV       Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags);
 #define PERL_ARGS_ASSERT_UTF8N_TO_UVUNI        \
        assert(s)
-
-PERL_CALLCONV void     Perl_utilize(pTHX_ int aver, I32 floor, OP* version, OP* idop, OP* arg)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV void     Perl_utilize(pTHX_ int aver, I32 floor, OP* version, OP* idop, OP* arg);
 #define PERL_ARGS_ASSERT_UTILIZE       \
        assert(idop)
-
-/* PERL_CALLCONV U8*   uvchr_to_utf8(pTHX_ U8 *d, UV uv)
-                       __attribute__nonnull__(pTHX_1); */
-
-/* PERL_CALLCONV U8*   uvchr_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
-                       __attribute__nonnull__(pTHX_1); */
-
-PERL_CALLCONV U8*      Perl_uvoffuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
-                       __attribute__nonnull__(pTHX_1);
+/* PERL_CALLCONV U8*   uvchr_to_utf8(pTHX_ U8 *d, UV uv); */
+/* PERL_CALLCONV U8*   uvchr_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags); */
+PERL_CALLCONV U8*      Perl_uvoffuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags);
 #define PERL_ARGS_ASSERT_UVOFFUNI_TO_UTF8_FLAGS        \
        assert(d)
-
-PERL_CALLCONV U8*      Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV U8*      Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv);
 #define PERL_ARGS_ASSERT_UVUNI_TO_UTF8 \
        assert(d)
-
-PERL_CALLCONV U8*      Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV U8*      Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags);
 #define PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS   \
        assert(d)
-
-PERL_CALLCONV UV       Perl_valid_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV UV       Perl_valid_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen);
 #define PERL_ARGS_ASSERT_VALID_UTF8_TO_UVCHR   \
        assert(s)
-
 PERL_CALLCONV UV       Perl_valid_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
-                       __attribute__deprecated__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI   \
        assert(s)
 
-PERL_CALLCONV bool     Perl_validate_proto(pTHX_ SV *name, SV *proto, bool warn)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_validate_proto(pTHX_ SV *name, SV *proto, bool warn);
 #define PERL_ARGS_ASSERT_VALIDATE_PROTO        \
        assert(name)
-
-PERL_CALLCONV int      Perl_vcmp(pTHX_ SV *lhv, SV *rhv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_vcmp(pTHX_ SV *lhv, SV *rhv);
 #define PERL_ARGS_ASSERT_VCMP  \
        assert(lhv); assert(rhv)
-
 PERL_CALLCONV_NO_RET void      Perl_vcroak(pTHX_ const char* pat, va_list* args)
                        __attribute__noreturn__;
 
-PERL_CALLCONV void     Perl_vdeb(pTHX_ const char* pat, va_list* args)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_vdeb(pTHX_ const char* pat, va_list* args);
 #define PERL_ARGS_ASSERT_VDEB  \
        assert(pat)
-
-PERL_CALLCONV char*    Perl_vform(pTHX_ const char* pat, va_list* args)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV char*    Perl_vform(pTHX_ const char* pat, va_list* args);
 #define PERL_ARGS_ASSERT_VFORM \
        assert(pat)
-
-PERL_CALLCONV void     Perl_vivify_defelem(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_vivify_defelem(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_VIVIFY_DEFELEM        \
        assert(sv)
-
 PERL_CALLCONV SV*      Perl_vivify_ref(pTHX_ SV* sv, U32 to_what)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_VIVIFY_REF    \
        assert(sv)
 
-PERL_CALLCONV void     Perl_vload_module(pTHX_ U32 flags, SV* name, SV* ver, va_list* args)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_vload_module(pTHX_ U32 flags, SV* name, SV* ver, va_list* args);
 #define PERL_ARGS_ASSERT_VLOAD_MODULE  \
        assert(name)
-
-PERL_CALLCONV SV*      Perl_vmess(pTHX_ const char* pat, va_list* args)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_vmess(pTHX_ const char* pat, va_list* args);
 #define PERL_ARGS_ASSERT_VMESS \
        assert(pat)
-
 PERL_CALLCONV SV*      Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_VNEWSVPVF     \
        assert(pat)
 
-PERL_CALLCONV SV*      Perl_vnormal(pTHX_ SV *vs)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_vnormal(pTHX_ SV *vs);
 #define PERL_ARGS_ASSERT_VNORMAL       \
        assert(vs)
-
-PERL_CALLCONV SV*      Perl_vnumify(pTHX_ SV *vs)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_vnumify(pTHX_ SV *vs);
 #define PERL_ARGS_ASSERT_VNUMIFY       \
        assert(vs)
-
-PERL_CALLCONV SV*      Perl_vstringify(pTHX_ SV *vs)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_vstringify(pTHX_ SV *vs);
 #define PERL_ARGS_ASSERT_VSTRINGIFY    \
        assert(vs)
-
-PERL_CALLCONV SV*      Perl_vverify(pTHX_ SV *vs)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_vverify(pTHX_ SV *vs);
 #define PERL_ARGS_ASSERT_VVERIFY       \
        assert(vs)
-
-PERL_CALLCONV void     Perl_vwarn(pTHX_ const char* pat, va_list* args)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_vwarn(pTHX_ const char* pat, va_list* args);
 #define PERL_ARGS_ASSERT_VWARN \
        assert(pat)
-
-PERL_CALLCONV void     Perl_vwarner(pTHX_ U32 err, const char* pat, va_list* args)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_vwarner(pTHX_ U32 err, const char* pat, va_list* args);
 #define PERL_ARGS_ASSERT_VWARNER       \
        assert(pat)
-
-PERL_CALLCONV I32      Perl_wait4pid(pTHX_ Pid_t pid, int* statusp, int flags)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV I32      Perl_wait4pid(pTHX_ Pid_t pid, int* statusp, int flags);
 #define PERL_ARGS_ASSERT_WAIT4PID      \
        assert(statusp)
-
 PERL_CALLCONV void     Perl_warn(pTHX_ const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_1,pTHX_2)
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__format__(__printf__,pTHX_1,pTHX_2);
 #define PERL_ARGS_ASSERT_WARN  \
        assert(pat)
 
-PERL_CALLCONV void     Perl_warn_sv(pTHX_ SV *baseex)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_warn_sv(pTHX_ SV *baseex);
 #define PERL_ARGS_ASSERT_WARN_SV       \
        assert(baseex)
-
 PERL_CALLCONV void     Perl_warner(pTHX_ U32 err, const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_2,pTHX_3)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_WARNER        \
        assert(pat)
 
 PERL_CALLCONV I32      Perl_was_lvalue_sub(pTHX)
                        __attribute__warn_unused_result__;
 
-PERL_CALLCONV void     Perl_watch(pTHX_ char** addr)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_watch(pTHX_ char** addr);
 #define PERL_ARGS_ASSERT_WATCH \
        assert(addr)
-
-/* PERL_CALLCONV I32   whichsig(pTHX_ const char* sig)
-                       __attribute__nonnull__(pTHX_1); */
-
-PERL_CALLCONV I32      Perl_whichsig_pv(pTHX_ const char* sig)
-                       __attribute__nonnull__(pTHX_1);
+/* PERL_CALLCONV I32   whichsig(pTHX_ const char* sig); */
+PERL_CALLCONV I32      Perl_whichsig_pv(pTHX_ const char* sig);
 #define PERL_ARGS_ASSERT_WHICHSIG_PV   \
        assert(sig)
-
-PERL_CALLCONV I32      Perl_whichsig_pvn(pTHX_ const char* sig, STRLEN len)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_whichsig_pvn(pTHX_ const char* sig, STRLEN len);
 #define PERL_ARGS_ASSERT_WHICHSIG_PVN  \
        assert(sig)
-
-PERL_CALLCONV I32      Perl_whichsig_sv(pTHX_ SV* sigsv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_whichsig_sv(pTHX_ SV* sigsv);
 #define PERL_ARGS_ASSERT_WHICHSIG_SV   \
        assert(sigsv)
-
-PERL_CALLCONV void     Perl_wrap_op_checker(pTHX_ Optype opcode, Perl_check_t new_checker, Perl_check_t *old_checker_p)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_wrap_op_checker(pTHX_ Optype opcode, Perl_check_t new_checker, Perl_check_t *old_checker_p);
 #define PERL_ARGS_ASSERT_WRAP_OP_CHECKER       \
        assert(new_checker); assert(old_checker_p)
-
-PERL_CALLCONV void     Perl_write_to_stderr(pTHX_ SV* msv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_write_to_stderr(pTHX_ SV* msv);
 #define PERL_ARGS_ASSERT_WRITE_TO_STDERR       \
        assert(msv)
-
-PERL_CALLCONV void     Perl_xs_boot_epilog(pTHX_ const U32 ax);
-PERL_CALLCONV I32      Perl_xs_handshake(const U32 key, void * v_my_perl, const char * file, ...)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3);
+PERL_CALLCONV void     Perl_xs_boot_epilog(pTHX_ const I32 ax);
+PERL_CALLCONV I32      Perl_xs_handshake(const U32 key, void * v_my_perl, const char * file, ...);
 #define PERL_ARGS_ASSERT_XS_HANDSHAKE  \
        assert(v_my_perl); assert(file)
-
-PERL_CALLCONV int      Perl_yyerror(pTHX_ const char *const s)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_yyerror(pTHX_ const char *const s);
 #define PERL_ARGS_ASSERT_YYERROR       \
        assert(s)
-
-PERL_CALLCONV int      Perl_yyerror_pv(pTHX_ const char *const s, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_yyerror_pv(pTHX_ const char *const s, U32 flags);
 #define PERL_ARGS_ASSERT_YYERROR_PV    \
        assert(s)
-
-PERL_CALLCONV int      Perl_yyerror_pvn(pTHX_ const char *const s, STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_yyerror_pvn(pTHX_ const char *const s, STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_YYERROR_PVN   \
        assert(s)
-
 PERL_CALLCONV int      Perl_yylex(pTHX);
 PERL_CALLCONV int      Perl_yyparse(pTHX_ int gramtype);
 PERL_CALLCONV void     Perl_yyunlex(pTHX);
 #if !(defined(DEBUGGING))
 #  if !defined(NV_PRESERVES_UV)
 #    if defined(PERL_IN_SV_C)
-STATIC int     S_sv_2iuv_non_preserve(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC int     S_sv_2iuv_non_preserve(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE  \
        assert(sv)
-
 #    endif
 #  endif
 #endif
@@ -5278,19 +3588,15 @@ PERL_CALLCONV Signal_t  Perl_sighandler(int sig);
 PERL_CALLCONV void     Perl_sv_nounlocking(pTHX_ SV *sv);
 #endif
 #if !(defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION))
-PERL_CALLCONV bool     Perl_do_exec(pTHX_ const char* cmd)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_do_exec(pTHX_ const char* cmd);
 #define PERL_ARGS_ASSERT_DO_EXEC       \
        assert(cmd)
-
 #endif
 #if !(defined(PERL_GLOBAL_STRUCT_PRIVATE))
 #  if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV void*    Perl_my_cxt_init(pTHX_ int *index, size_t size)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void*    Perl_my_cxt_init(pTHX_ int *index, size_t size);
 #define PERL_ARGS_ASSERT_MY_CXT_INIT   \
        assert(index)
-
 #  endif
 #endif
 #if !(defined(WIN32))
@@ -5300,62 +3606,46 @@ PERL_CALLCONV void*     Perl_my_cxt_init(pTHX_ int *index, size_t size)
 #endif
 #if !(defined(_MSC_VER))
 PERL_CALLCONV_NO_RET int       Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__noreturn__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__noreturn__;
 #define PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET    \
        assert(sv); assert(mg)
 
 #endif
 #if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-PERL_CALLCONV char*    Perl_my_bzero(char* loc, I32 len)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV char*    Perl_my_bzero(char* loc, I32 len);
 #define PERL_ARGS_ASSERT_MY_BZERO      \
        assert(loc)
-
 #endif
 #if !defined(HAS_GETENV_LEN)
-PERL_CALLCONV char*    Perl_getenv_len(pTHX_ const char *env_elem, unsigned long *len)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV char*    Perl_getenv_len(pTHX_ const char *env_elem, unsigned long *len);
 #define PERL_ARGS_ASSERT_GETENV_LEN    \
        assert(env_elem); assert(len)
-
 #endif
 #if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
 PERL_CALLCONV I32      Perl_my_memcmp(const char* s1, const char* s2, I32 len)
-                       __attribute__pure__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_MY_MEMCMP     \
        assert(s1); assert(s2)
 
 #endif
 #if !defined(HAS_MEMSET)
-PERL_CALLCONV void*    Perl_my_memset(char* loc, I32 ch, I32 len)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void*    Perl_my_memset(char* loc, I32 ch, I32 len);
 #define PERL_ARGS_ASSERT_MY_MEMSET     \
        assert(loc)
-
 #endif
 #if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
 #  if defined(PERL_IN_PP_SYS_C)
 STATIC int     S_dooneliner(pTHX_ const char *cmd, const char *filename)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DOONELINER    \
        assert(cmd); assert(filename)
 
 #  endif
 #endif
 #if !defined(HAS_RENAME)
-PERL_CALLCONV I32      Perl_same_dirent(pTHX_ const char* a, const char* b)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV I32      Perl_same_dirent(pTHX_ const char* a, const char* b);
 #define PERL_ARGS_ASSERT_SAME_DIRENT   \
        assert(a); assert(b)
-
 #endif
 #if !defined(HAS_SIGNBIT)
 PERL_CALLCONV int      Perl_signbit(NV f)
@@ -5376,19 +3666,16 @@ PERL_CALLCONV I32       Perl_my_chsize(pTHX_ int fd, Off_t length)
 #if !defined(NV_PRESERVES_UV)
 #  if defined(DEBUGGING)
 #    if defined(PERL_IN_SV_C)
-STATIC int     S_sv_2iuv_non_preserve(pTHX_ SV *const sv, I32 numtype)
-                       __attribute__nonnull__(pTHX_1);
+STATIC int     S_sv_2iuv_non_preserve(pTHX_ SV *const sv, I32 numtype);
 #define PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE  \
        assert(sv)
-
 #    endif
 #  endif
 #endif
 #if !defined(PERL_DISABLE_PMC)
 #  if defined(PERL_IN_PP_CTL_C)
 STATIC PerlIO *        S_doopen_pm(pTHX_ SV *name)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DOOPEN_PM     \
        assert(name)
 
@@ -5397,85 +3684,62 @@ STATIC PerlIO * S_doopen_pm(pTHX_ SV *name)
 #if !defined(PERL_EXT_RE_BUILD)
 #  if defined(PERL_IN_REGCOMP_C)
 PERL_STATIC_INLINE IV* S_get_invlist_previous_index_addr(SV* invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GET_INVLIST_PREVIOUS_INDEX_ADDR       \
        assert(invlist)
 
 PERL_STATIC_INLINE bool        S_invlist_is_iterating(SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_INVLIST_IS_ITERATING  \
        assert(invlist)
 
 PERL_STATIC_INLINE IV  S_invlist_previous_index(SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_INVLIST_PREVIOUS_INDEX        \
        assert(invlist)
 
-PERL_STATIC_INLINE void        S_invlist_set_previous_index(SV* const invlist, const IV index)
-                       __attribute__nonnull__(1);
+PERL_STATIC_INLINE void        S_invlist_set_previous_index(SV* const invlist, const IV index);
 #define PERL_ARGS_ASSERT_INVLIST_SET_PREVIOUS_INDEX    \
        assert(invlist)
-
-PERL_STATIC_INLINE void        S_invlist_trim(SV* const invlist)
-                       __attribute__nonnull__(1);
+PERL_STATIC_INLINE void        S_invlist_trim(SV* const invlist);
 #define PERL_ARGS_ASSERT_INVLIST_TRIM  \
        assert(invlist)
-
 #  endif
 #endif
 #if !defined(PERL_IMPLICIT_SYS)
 PERL_CALLCONV I32      Perl_my_pclose(pTHX_ PerlIO* ptr);
-PERL_CALLCONV PerlIO*  Perl_my_popen(pTHX_ const char* cmd, const char* mode)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV PerlIO*  Perl_my_popen(pTHX_ const char* cmd, const char* mode);
 #define PERL_ARGS_ASSERT_MY_POPEN      \
        assert(cmd); assert(mode)
-
 #endif
 #if !defined(PERL_IS_MINIPERL)
 #  if defined(PERL_IN_PERL_C)
-STATIC SV *    S_incpush_if_exists(pTHX_ AV *const av, SV *dir, SV *const stem)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC SV *    S_incpush_if_exists(pTHX_ AV *const av, SV *dir, SV *const stem);
 #define PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS     \
        assert(av); assert(dir); assert(stem)
-
 #  endif
 #endif
 #if !defined(PERL_NO_UTF16_FILTER)
 #  if defined(PERL_IN_TOKE_C)
-STATIC U8*     S_add_utf16_textfilter(pTHX_ U8 *const s, bool reversed)
-                       __attribute__nonnull__(pTHX_1);
+STATIC U8*     S_add_utf16_textfilter(pTHX_ U8 *const s, bool reversed);
 #define PERL_ARGS_ASSERT_ADD_UTF16_TEXTFILTER  \
        assert(s)
-
-STATIC I32     S_utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen);
 #define PERL_ARGS_ASSERT_UTF16_TEXTFILTER      \
        assert(sv)
-
 #  endif
 #endif
 #if !defined(SETUID_SCRIPTS_ARE_SECURE_NOW)
 #  if defined(PERL_IN_PERL_C)
-STATIC void    S_validate_suid(pTHX_ PerlIO *rsfp)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_validate_suid(pTHX_ PerlIO *rsfp);
 #define PERL_ARGS_ASSERT_VALIDATE_SUID \
        assert(rsfp)
-
 #  endif
 #endif
 #if !defined(SPRINTF_RETURNS_STRLEN)
-PERL_CALLCONV int      Perl_my_sprintf(char *buffer, const char *pat, ...)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+PERL_CALLCONV int      Perl_my_sprintf(char *buffer, const char *pat, ...);
 #define PERL_ARGS_ASSERT_MY_SPRINTF    \
        assert(buffer); assert(pat)
-
 #endif
 #if !defined(USE_QUADMATH)
 #  if defined(PERL_IN_NUMERIC_C)
@@ -5483,189 +3747,112 @@ STATIC NV     S_mulexp10(NV value, I32 exponent);
 #  endif
 #endif
 #if !defined(WIN32)
-PERL_CALLCONV bool     Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report);
 #define PERL_ARGS_ASSERT_DO_EXEC3      \
        assert(incmd)
-
 #endif
 #if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY))
-PERL_CALLCONV char*    Perl_my_bcopy(const char* from, char* to, I32 len)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+PERL_CALLCONV char*    Perl_my_bcopy(const char* from, char* to, I32 len);
 #define PERL_ARGS_ASSERT_MY_BCOPY      \
        assert(from); assert(to)
-
 #endif
 #if defined(DEBUGGING)
 PERL_CALLCONV int      Perl_get_debug_opts(pTHX_ const char **s, bool givehelp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GET_DEBUG_OPTS        \
        assert(s)
 
-PERL_CALLCONV void     Perl_hv_assert(pTHX_ HV *hv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_assert(pTHX_ HV *hv);
 #define PERL_ARGS_ASSERT_HV_ASSERT     \
        assert(hv)
-
-PERL_CALLCONV void     Perl_pad_setsv(pTHX_ PADOFFSET po, SV* sv)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_pad_setsv(pTHX_ PADOFFSET po, SV* sv);
 #define PERL_ARGS_ASSERT_PAD_SETSV     \
        assert(sv)
-
 PERL_CALLCONV SV*      Perl_pad_sv(pTHX_ PADOFFSET po);
-PERL_CALLCONV void     Perl_set_padlist(CV * cv, PADLIST * padlist)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void     Perl_set_padlist(CV * cv, PADLIST * padlist);
 #define PERL_ARGS_ASSERT_SET_PADLIST   \
        assert(cv)
-
 #  if defined(PERL_IN_PAD_C)
-STATIC void    S_cv_dump(pTHX_ const CV *cv, const char *title)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_cv_dump(pTHX_ const CV *cv, const char *title);
 #define PERL_ARGS_ASSERT_CV_DUMP       \
        assert(cv); assert(title)
-
 #  endif
 #  if defined(PERL_IN_REGCOMP_C)
-STATIC void    S_dump_trie(pTHX_ const struct _reg_trie_data *trie, HV* widecharmap, AV *revcharmap, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_dump_trie(pTHX_ const struct _reg_trie_data *trie, HV* widecharmap, AV *revcharmap, U32 depth);
 #define PERL_ARGS_ASSERT_DUMP_TRIE     \
        assert(trie); assert(revcharmap)
-
-STATIC void    S_dump_trie_interim_list(pTHX_ const struct _reg_trie_data *trie, HV* widecharmap, AV *revcharmap, U32 next_alloc, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_dump_trie_interim_list(pTHX_ const struct _reg_trie_data *trie, HV* widecharmap, AV *revcharmap, U32 next_alloc, U32 depth);
 #define PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST        \
        assert(trie); assert(revcharmap)
-
-STATIC void    S_dump_trie_interim_table(pTHX_ const struct _reg_trie_data *trie, HV* widecharmap, AV *revcharmap, U32 next_alloc, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_dump_trie_interim_table(pTHX_ const struct _reg_trie_data *trie, HV* widecharmap, AV *revcharmap, U32 next_alloc, U32 depth);
 #define PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE       \
        assert(trie); assert(revcharmap)
-
-STATIC const regnode*  S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node, const regnode *last, const regnode *plast, SV* sv, I32 indent, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_6);
+STATIC const regnode*  S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node, const regnode *last, const regnode *plast, SV* sv, I32 indent, U32 depth);
 #define PERL_ARGS_ASSERT_DUMPUNTIL     \
        assert(r); assert(start); assert(node); assert(sv)
-
-STATIC bool    S_put_charclass_bitmap_innards(pTHX_ SV* sv, char* bitmap, SV** bitmap_invlist)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC bool    S_put_charclass_bitmap_innards(pTHX_ SV* sv, char* bitmap, SV** bitmap_invlist);
 #define PERL_ARGS_ASSERT_PUT_CHARCLASS_BITMAP_INNARDS  \
        assert(sv); assert(bitmap)
-
-STATIC void    S_put_code_point(pTHX_ SV* sv, UV c)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_put_code_point(pTHX_ SV* sv, UV c);
 #define PERL_ARGS_ASSERT_PUT_CODE_POINT        \
        assert(sv)
-
-STATIC void    S_put_range(pTHX_ SV* sv, UV start, const UV end, const bool allow_literals)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_put_range(pTHX_ SV* sv, UV start, const UV end, const bool allow_literals);
 #define PERL_ARGS_ASSERT_PUT_RANGE     \
        assert(sv)
-
 STATIC void    S_regdump_extflags(pTHX_ const char *lead, const U32 flags);
 STATIC void    S_regdump_intflags(pTHX_ const char *lead, const U32 flags);
-STATIC U8      S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode *p, const regnode *val, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC U8      S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode *p, const regnode *val, U32 depth);
 #define PERL_ARGS_ASSERT_REGTAIL_STUDY \
        assert(pRExC_state); assert(p); assert(val)
-
 #  endif
 #  if defined(PERL_IN_REGEXEC_C)
-STATIC void    S_debug_start_match(pTHX_ const REGEXP *prog, const bool do_utf8, const char *start, const char *end, const char *blurb)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+STATIC void    S_debug_start_match(pTHX_ const REGEXP *prog, const bool do_utf8, const char *start, const char *end, const char *blurb);
 #define PERL_ARGS_ASSERT_DEBUG_START_MATCH     \
        assert(prog); assert(start); assert(end); assert(blurb)
-
-STATIC void    S_dump_exec_pos(pTHX_ const char *locinput, const regnode *scan, const char *loc_regeol, const char *loc_bostr, const char *loc_reg_starttry, const bool do_utf8)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+STATIC void    S_dump_exec_pos(pTHX_ const char *locinput, const regnode *scan, const char *loc_regeol, const char *loc_bostr, const char *loc_reg_starttry, const bool do_utf8);
 #define PERL_ARGS_ASSERT_DUMP_EXEC_POS \
        assert(locinput); assert(scan); assert(loc_regeol); assert(loc_bostr); assert(loc_reg_starttry)
-
 #  endif
 #  if defined(PERL_IN_SV_C)
-STATIC void    S_del_sv(pTHX_ SV *p)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_del_sv(pTHX_ SV *p);
 #define PERL_ARGS_ASSERT_DEL_SV        \
        assert(p)
-
 #  endif
 #  if defined(PERL_IN_TOKE_C)
 STATIC void    S_printbuf(pTHX_ const char *const fmt, const char *const s)
-                       __attribute__format__(__printf__,pTHX_1,0)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__format__(__printf__,pTHX_1,0);
 #define PERL_ARGS_ASSERT_PRINTBUF      \
        assert(fmt); assert(s)
 
-STATIC int     S_tokereport(pTHX_ I32 rv, const YYSTYPE* lvalp)
-                       __attribute__nonnull__(pTHX_2);
+STATIC int     S_tokereport(pTHX_ I32 rv, const YYSTYPE* lvalp);
 #define PERL_ARGS_ASSERT_TOKEREPORT    \
        assert(lvalp)
-
 #  endif
 #endif
 #if defined(DEBUG_LEAKING_SCALARS_FORK_DUMP)
-PERL_CALLCONV void     Perl_dump_sv_child(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_dump_sv_child(pTHX_ SV *sv);
 #define PERL_ARGS_ASSERT_DUMP_SV_CHILD \
        assert(sv)
-
 #endif
 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-PERL_CALLCONV I32      Perl_do_ipcctl(pTHX_ I32 optype, SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV I32      Perl_do_ipcctl(pTHX_ I32 optype, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_IPCCTL     \
        assert(mark); assert(sp)
-
-PERL_CALLCONV I32      Perl_do_ipcget(pTHX_ I32 optype, SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV I32      Perl_do_ipcget(pTHX_ I32 optype, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_IPCGET     \
        assert(mark); assert(sp)
-
-PERL_CALLCONV I32      Perl_do_msgrcv(pTHX_ SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV I32      Perl_do_msgrcv(pTHX_ SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_MSGRCV     \
        assert(mark); assert(sp)
-
-PERL_CALLCONV I32      Perl_do_msgsnd(pTHX_ SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV I32      Perl_do_msgsnd(pTHX_ SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_MSGSND     \
        assert(mark); assert(sp)
-
-PERL_CALLCONV I32      Perl_do_semop(pTHX_ SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV I32      Perl_do_semop(pTHX_ SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_SEMOP      \
        assert(mark); assert(sp)
-
-PERL_CALLCONV I32      Perl_do_shmio(pTHX_ I32 optype, SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV I32      Perl_do_shmio(pTHX_ I32 optype, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_SHMIO      \
        assert(mark); assert(sp)
-
 #endif
 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
 PERL_CALLCONV Signal_t Perl_csighandler(int sig, siginfo_t *info, void *uap);
@@ -5675,31 +3862,23 @@ PERL_CALLCONV Signal_t  Perl_sighandler(int sig, siginfo_t *info, void *uap);
 PERL_CALLCONV void     Perl_sys_intern_clear(pTHX);
 PERL_CALLCONV void     Perl_sys_intern_init(pTHX);
 #  if defined(USE_ITHREADS)
-PERL_CALLCONV void     Perl_sys_intern_dup(pTHX_ struct interp_intern* src, struct interp_intern* dst)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sys_intern_dup(pTHX_ struct interp_intern* src, struct interp_intern* dst);
 #define PERL_ARGS_ASSERT_SYS_INTERN_DUP        \
        assert(src); assert(dst)
-
 #  endif
 #endif
 #if defined(MYMALLOC)
-PERL_CALLCONV void     Perl_dump_mstats(pTHX_ const char* s)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_dump_mstats(pTHX_ const char* s);
 #define PERL_ARGS_ASSERT_DUMP_MSTATS   \
        assert(s)
-
-PERL_CALLCONV int      Perl_get_mstats(pTHX_ perl_mstats_t *buf, int buflen, int level)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_get_mstats(pTHX_ perl_mstats_t *buf, int buflen, int level);
 #define PERL_ARGS_ASSERT_GET_MSTATS    \
        assert(buf)
-
 PERL_CALLCONV MEM_SIZE Perl_malloc_good_size(size_t nbytes)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV MEM_SIZE Perl_malloced_size(void *p)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_MALLOCED_SIZE \
        assert(p)
 
@@ -5708,122 +3887,87 @@ PERL_CALLCONV MEM_SIZE Perl_malloced_size(void *p)
 /* PERL_CALLCONV void  Perl_sv_nounlocking(pTHX_ SV *sv); */
 #endif
 #if defined(PERL_ANY_COW)
-PERL_CALLCONV SV*      Perl_sv_setsv_cow(pTHX_ SV* dstr, SV* sstr)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_sv_setsv_cow(pTHX_ SV* dstr, SV* sstr);
 #define PERL_ARGS_ASSERT_SV_SETSV_COW  \
        assert(sstr)
-
 #endif
 #if defined(PERL_CORE)
-PERL_CALLCONV void     Perl_opslab_force_free(pTHX_ OPSLAB *slab)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_opslab_force_free(pTHX_ OPSLAB *slab);
 #define PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE     \
        assert(slab)
-
-PERL_CALLCONV void     Perl_opslab_free(pTHX_ OPSLAB *slab)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_opslab_free(pTHX_ OPSLAB *slab);
 #define PERL_ARGS_ASSERT_OPSLAB_FREE   \
        assert(slab)
-
-PERL_CALLCONV void     Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_opslab_free_nopad(pTHX_ OPSLAB *slab);
 #define PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD     \
        assert(slab)
-
-PERL_CALLCONV void     Perl_parser_free_nexttoke_ops(pTHX_ yy_parser *parser, OPSLAB *slab)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_parser_free_nexttoke_ops(pTHX_ yy_parser *parser, OPSLAB *slab);
 #define PERL_ARGS_ASSERT_PARSER_FREE_NEXTTOKE_OPS      \
        assert(parser); assert(slab)
-
 PERL_STATIC_INLINE bool        S_should_warn_nl(const char *pv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SHOULD_WARN_NL        \
        assert(pv)
 
 #  if defined(PERL_DEBUG_READONLY_OPS)
-PERL_CALLCONV void     Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_Slab_to_ro(pTHX_ OPSLAB *slab);
 #define PERL_ARGS_ASSERT_SLAB_TO_RO    \
        assert(slab)
-
-PERL_CALLCONV void     Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_Slab_to_rw(pTHX_ OPSLAB *const slab);
 #define PERL_ARGS_ASSERT_SLAB_TO_RW    \
        assert(slab)
-
 #  endif
 #endif
 #if defined(PERL_CORE) || defined (PERL_EXT)
-PERL_STATIC_INLINE STRLEN      S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_STATIC_INLINE STRLEN      S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_SV_OR_PV_POS_U2B      \
        assert(sv); assert(pv)
-
 #endif
 #if defined(PERL_CR_FILTER)
 #  if defined(PERL_IN_TOKE_C)
 STATIC I32     S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen);
-STATIC void    S_strip_return(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_strip_return(pTHX_ SV *sv);
 #define PERL_ARGS_ASSERT_STRIP_RETURN  \
        assert(sv)
-
 #  endif
 #endif
 #if defined(PERL_DEBUG_READONLY_COW)
-PERL_CALLCONV void     Perl_sv_buf_to_ro(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_buf_to_ro(pTHX_ SV *sv);
 #define PERL_ARGS_ASSERT_SV_BUF_TO_RO  \
        assert(sv)
-
 #  if defined(PERL_IN_SV_C)
-STATIC void    S_sv_buf_to_rw(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_sv_buf_to_rw(pTHX_ SV *sv);
 #define PERL_ARGS_ASSERT_SV_BUF_TO_RW  \
        assert(sv)
-
 #  endif
 #endif
 #if defined(PERL_DEBUG_READONLY_OPS)
-PERL_CALLCONV PADOFFSET        Perl_op_refcnt_dec(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_op_refcnt_dec(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_OP_REFCNT_DEC \
        assert(o)
-
 PERL_CALLCONV OP *     Perl_op_refcnt_inc(pTHX_ OP *o);
 #endif
 #if defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION)
-/* PERL_CALLCONV bool  Perl_do_exec(pTHX_ const char* cmd)
-                       __attribute__nonnull__(pTHX_1); */
-
+/* PERL_CALLCONV bool  Perl_do_exec(pTHX_ const char* cmd); */
 #endif
 #if defined(PERL_DONT_CREATE_GVSV)
 /* PERL_CALLCONV GV*   Perl_gv_SVadd(pTHX_ GV *gv); */
 #endif
 #if defined(PERL_GLOBAL_STRUCT)
 PERL_CALLCONV struct perl_vars *       Perl_GetVars(pTHX);
-PERL_CALLCONV void     Perl_free_global_struct(pTHX_ struct perl_vars *plvarsp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_free_global_struct(pTHX_ struct perl_vars *plvarsp);
 #define PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT    \
        assert(plvarsp)
-
 PERL_CALLCONV struct perl_vars*        Perl_init_global_struct(pTHX);
 #endif
 #if defined(PERL_GLOBAL_STRUCT_PRIVATE)
 #  if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV int      Perl_my_cxt_index(pTHX_ const char *my_cxt_key)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_my_cxt_index(pTHX_ const char *my_cxt_key);
 #define PERL_ARGS_ASSERT_MY_CXT_INDEX  \
        assert(my_cxt_key)
-
-PERL_CALLCONV void*    Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void*    Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size);
 #define PERL_ARGS_ASSERT_MY_CXT_INIT   \
        assert(my_cxt_key)
-
 #  endif
 #endif
 #if defined(PERL_IMPLICIT_CONTEXT)
@@ -5832,8 +3976,7 @@ PERL_CALLCONV_NO_RET void Perl_croak_nocontext(const char* pat, ...)
                        __attribute__format__null_ok__(__printf__,1,2);
 
 PERL_CALLCONV void     Perl_deb_nocontext(const char* pat, ...)
-                       __attribute__format__(__printf__,1,2)
-                       __attribute__nonnull__(1);
+                       __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_DEB_NOCONTEXT \
        assert(pat)
 
@@ -5842,326 +3985,206 @@ PERL_CALLCONV_NO_RET OP*      Perl_die_nocontext(const char* pat, ...)
                        __attribute__format__null_ok__(__printf__,1,2);
 
 PERL_CALLCONV char*    Perl_form_nocontext(const char* pat, ...)
-                       __attribute__format__(__printf__,1,2)
-                       __attribute__nonnull__(1);
+                       __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_FORM_NOCONTEXT        \
        assert(pat)
 
 PERL_CALLCONV int      Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
-                       __attribute__format__(__printf__,2,3)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__format__(__printf__,2,3);
 #define PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT     \
        assert(stream); assert(format)
 
-PERL_CALLCONV void     Perl_load_module_nocontext(U32 flags, SV* name, SV* ver, ...)
-                       __attribute__nonnull__(2);
+PERL_CALLCONV void     Perl_load_module_nocontext(U32 flags, SV* name, SV* ver, ...);
 #define PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT \
        assert(name)
-
 PERL_CALLCONV SV*      Perl_mess_nocontext(const char* pat, ...)
-                       __attribute__format__(__printf__,1,2)
-                       __attribute__nonnull__(1);
+                       __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_MESS_NOCONTEXT        \
        assert(pat)
 
 PERL_CALLCONV SV*      Perl_newSVpvf_nocontext(const char *const pat, ...)
-                       __attribute__format__(__printf__,1,2)
-                       __attribute__nonnull__(1);
+                       __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT    \
        assert(pat)
 
 PERL_CALLCONV int      Perl_printf_nocontext(const char *format, ...)
-                       __attribute__format__(__printf__,1,2)
-                       __attribute__nonnull__(1);
+                       __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_PRINTF_NOCONTEXT      \
        assert(format)
 
 PERL_CALLCONV void     Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
-                       __attribute__format__(__printf__,2,3)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__format__(__printf__,2,3);
 #define PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT        \
        assert(sv); assert(pat)
 
 PERL_CALLCONV void     Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
-                       __attribute__format__(__printf__,2,3)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__format__(__printf__,2,3);
 #define PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT   \
        assert(sv); assert(pat)
 
 PERL_CALLCONV void     Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
-                       __attribute__format__(__printf__,2,3)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__format__(__printf__,2,3);
 #define PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT        \
        assert(sv); assert(pat)
 
 PERL_CALLCONV void     Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
-                       __attribute__format__(__printf__,2,3)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__format__(__printf__,2,3);
 #define PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT   \
        assert(sv); assert(pat)
 
 PERL_CALLCONV void     Perl_warn_nocontext(const char* pat, ...)
-                       __attribute__format__(__printf__,1,2)
-                       __attribute__nonnull__(1);
+                       __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_WARN_NOCONTEXT        \
        assert(pat)
 
 PERL_CALLCONV void     Perl_warner_nocontext(U32 err, const char* pat, ...)
-                       __attribute__format__(__printf__,2,3)
-                       __attribute__nonnull__(2);
+                       __attribute__format__(__printf__,2,3);
 #define PERL_ARGS_ASSERT_WARNER_NOCONTEXT      \
        assert(pat)
 
 #endif
 #if defined(PERL_IMPLICIT_SYS)
-PERL_CALLCONV PerlInterpreter* perl_alloc_using(struct IPerlMem *ipM, struct IPerlMem *ipMS, struct IPerlMem *ipMP, struct IPerlEnv *ipE, struct IPerlStdIO *ipStd, struct IPerlLIO *ipLIO, struct IPerlDir *ipD, struct IPerlSock *ipS, struct IPerlProc *ipP)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3)
-                       __attribute__nonnull__(4)
-                       __attribute__nonnull__(5)
-                       __attribute__nonnull__(6)
-                       __attribute__nonnull__(7)
-                       __attribute__nonnull__(8)
-                       __attribute__nonnull__(9);
+PERL_CALLCONV PerlInterpreter* perl_alloc_using(struct IPerlMem *ipM, struct IPerlMem *ipMS, struct IPerlMem *ipMP, struct IPerlEnv *ipE, struct IPerlStdIO *ipStd, struct IPerlLIO *ipLIO, struct IPerlDir *ipD, struct IPerlSock *ipS, struct IPerlProc *ipP);
 #define PERL_ARGS_ASSERT_PERL_ALLOC_USING      \
        assert(ipM); assert(ipMS); assert(ipMP); assert(ipE); assert(ipStd); assert(ipLIO); assert(ipD); assert(ipS); assert(ipP)
-
 #  if defined(USE_ITHREADS)
-PERL_CALLCONV PerlInterpreter* perl_clone_using(PerlInterpreter *proto_perl, UV flags, struct IPerlMem* ipM, struct IPerlMem* ipMS, struct IPerlMem* ipMP, struct IPerlEnv* ipE, struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO, struct IPerlDir* ipD, struct IPerlSock* ipS, struct IPerlProc* ipP)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(3)
-                       __attribute__nonnull__(4)
-                       __attribute__nonnull__(5)
-                       __attribute__nonnull__(6)
-                       __attribute__nonnull__(7)
-                       __attribute__nonnull__(8)
-                       __attribute__nonnull__(9)
-                       __attribute__nonnull__(10)
-                       __attribute__nonnull__(11);
+PERL_CALLCONV PerlInterpreter* perl_clone_using(PerlInterpreter *proto_perl, UV flags, struct IPerlMem* ipM, struct IPerlMem* ipMS, struct IPerlMem* ipMP, struct IPerlEnv* ipE, struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO, struct IPerlDir* ipD, struct IPerlSock* ipS, struct IPerlProc* ipP);
 #define PERL_ARGS_ASSERT_PERL_CLONE_USING      \
        assert(proto_perl); assert(ipM); assert(ipMS); assert(ipMP); assert(ipE); assert(ipStd); assert(ipLIO); assert(ipD); assert(ipS); assert(ipP)
-
 #  endif
 #endif
 #if defined(PERL_IN_AV_C)
-STATIC MAGIC*  S_get_aux_mg(pTHX_ AV *av)
-                       __attribute__nonnull__(pTHX_1);
+STATIC MAGIC*  S_get_aux_mg(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_GET_AUX_MG    \
        assert(av)
-
 #endif
 #if defined(PERL_IN_DEB_C)
-STATIC void    S_deb_stack_n(pTHX_ SV** stack_base, I32 stack_min, I32 stack_max, I32 mark_min, I32 mark_max)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_deb_stack_n(pTHX_ SV** stack_base, I32 stack_min, I32 stack_max, I32 mark_min, I32 mark_max);
 #define PERL_ARGS_ASSERT_DEB_STACK_N   \
        assert(stack_base)
-
 #endif
 #if defined(PERL_IN_DOIO_C)
-STATIC void    S_exec_failed(pTHX_ const char *cmd, int fd, int do_report)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_exec_failed(pTHX_ const char *cmd, int fd, int do_report);
 #define PERL_ARGS_ASSERT_EXEC_FAILED   \
        assert(cmd)
-
 STATIC bool    S_ingroup(pTHX_ Gid_t testgid, bool effective)
                        __attribute__warn_unused_result__;
 
-STATIC bool    S_openn_cleanup(pTHX_ GV *gv, IO *io, PerlIO *fp, char *mode, const char *oname, PerlIO *saveifp, PerlIO *saveofp, int savefd, char savetype, int writing, bool was_fdopen, const char *type)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+STATIC bool    S_openn_cleanup(pTHX_ GV *gv, IO *io, PerlIO *fp, char *mode, const char *oname, PerlIO *saveifp, PerlIO *saveofp, int savefd, char savetype, int writing, bool was_fdopen, const char *type);
 #define PERL_ARGS_ASSERT_OPENN_CLEANUP \
        assert(gv); assert(io); assert(mode); assert(oname)
-
-STATIC IO *    S_openn_setup(pTHX_ GV *gv, char *mode, PerlIO **saveifp, PerlIO **saveofp, int *savefd, char *savetype)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5)
-                       __attribute__nonnull__(pTHX_6);
+STATIC IO *    S_openn_setup(pTHX_ GV *gv, char *mode, PerlIO **saveifp, PerlIO **saveofp, int *savefd, char *savetype);
 #define PERL_ARGS_ASSERT_OPENN_SETUP   \
        assert(gv); assert(mode); assert(saveifp); assert(saveofp); assert(savefd); assert(savetype)
-
 #endif
 #if defined(PERL_IN_DOOP_C)
 STATIC I32     S_do_trans_complex(pTHX_ SV * const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DO_TRANS_COMPLEX      \
        assert(sv)
 
 STATIC I32     S_do_trans_complex_utf8(pTHX_ SV * const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8 \
        assert(sv)
 
 STATIC I32     S_do_trans_count(pTHX_ SV * const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DO_TRANS_COUNT        \
        assert(sv)
 
 STATIC I32     S_do_trans_count_utf8(pTHX_ SV * const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8   \
        assert(sv)
 
 STATIC I32     S_do_trans_simple(pTHX_ SV * const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE       \
        assert(sv)
 
 STATIC I32     S_do_trans_simple_utf8(pTHX_ SV * const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8  \
        assert(sv)
 
 #endif
 #if defined(PERL_IN_DUMP_C)
 STATIC CV*     S_deb_curcv(pTHX_ I32 ix);
-STATIC void    S_debprof(pTHX_ const OP *o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_debprof(pTHX_ const OP *o);
 #define PERL_ARGS_ASSERT_DEBPROF       \
        assert(o)
-
-STATIC SV*     S_pm_description(pTHX_ const PMOP *pm)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV*     S_pm_description(pTHX_ const PMOP *pm);
 #define PERL_ARGS_ASSERT_PM_DESCRIPTION        \
        assert(pm)
-
 STATIC UV      S_sequence_num(pTHX_ const OP *o);
 #endif
 #if defined(PERL_IN_DUMP_C) || defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_SCOPE_C)
-PERL_CALLCONV void     Perl_hv_kill_backrefs(pTHX_ HV *hv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_hv_kill_backrefs(pTHX_ HV *hv);
 #define PERL_ARGS_ASSERT_HV_KILL_BACKREFS      \
        assert(hv)
-
 #endif
 #if defined(PERL_IN_GV_C)
-STATIC bool    S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len, const U32 is_utf8, const I32 add, const svtype sv_type)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC bool    S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len, const U32 is_utf8, const I32 add, const svtype sv_type);
 #define PERL_ARGS_ASSERT_FIND_DEFAULT_STASH    \
        assert(stash); assert(name)
-
 PERL_STATIC_INLINE GV* S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len, I32 level, U32 flags);
-STATIC void    S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type);
 #define PERL_ARGS_ASSERT_GV_INIT_SVTYPE        \
        assert(gv)
-
-STATIC bool    S_gv_is_in_main(pTHX_ const char *name, STRLEN len, const U32 is_utf8)
-                       __attribute__nonnull__(pTHX_1);
+STATIC bool    S_gv_is_in_main(pTHX_ const char *name, STRLEN len, const U32 is_utf8);
 #define PERL_ARGS_ASSERT_GV_IS_IN_MAIN \
        assert(name)
-
-STATIC bool    S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, bool addmg, const svtype sv_type)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC bool    S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, bool addmg, const svtype sv_type);
 #define PERL_ARGS_ASSERT_GV_MAGICALIZE \
        assert(gv); assert(stash); assert(name)
-
-STATIC void    S_gv_magicalize_isa(pTHX_ GV *gv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_gv_magicalize_isa(pTHX_ GV *gv);
 #define PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA     \
        assert(gv)
-
-PERL_STATIC_INLINE HV* S_gv_stashpvn_internal(pTHX_ const char* name, U32 namelen, I32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE HV* S_gv_stashpvn_internal(pTHX_ const char* name, U32 namelen, I32 flags);
 #define PERL_ARGS_ASSERT_GV_STASHPVN_INTERNAL  \
        assert(name)
-
 PERL_STATIC_INLINE HV* S_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char* name, U32 namelen, I32 flags);
-STATIC void    S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type);
 #define PERL_ARGS_ASSERT_MAYBE_MULTIMAGIC_GV   \
        assert(gv); assert(name)
-
-STATIC bool    S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name, STRLEN *len, const char *nambeg, STRLEN full_len, const U32 is_utf8, const I32 add)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+STATIC bool    S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name, STRLEN *len, const char *nambeg, STRLEN full_len, const U32 is_utf8, const I32 add);
 #define PERL_ARGS_ASSERT_PARSE_GV_STASH_NAME   \
        assert(stash); assert(gv); assert(name); assert(len); assert(nambeg)
-
-STATIC HV*     S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv, const U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+STATIC HV*     S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv, const U32 flags);
 #define PERL_ARGS_ASSERT_REQUIRE_TIE_MOD       \
        assert(gv); assert(varpv); assert(namesv); assert(methpv)
-
 #endif
 #if defined(PERL_IN_GV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
-PERL_CALLCONV void     Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv);
 #define PERL_ARGS_ASSERT_SV_ADD_BACKREF        \
        assert(tsv); assert(sv)
-
 #endif
 #if defined(PERL_IN_HV_C)
-STATIC void    S_clear_placeholders(pTHX_ HV *hv, U32 items)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_clear_placeholders(pTHX_ HV *hv, U32 items);
 #define PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS    \
        assert(hv)
-
-STATIC void    S_hfreeentries(pTHX_ HV *hv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_hfreeentries(pTHX_ HV *hv);
 #define PERL_ARGS_ASSERT_HFREEENTRIES  \
        assert(hv)
-
-STATIC void    S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize);
 #define PERL_ARGS_ASSERT_HSPLIT        \
        assert(hv)
-
-STATIC struct xpvhv_aux*       S_hv_auxinit(pTHX_ HV *hv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC struct xpvhv_aux*       S_hv_auxinit(pTHX_ HV *hv);
 #define PERL_ARGS_ASSERT_HV_AUXINIT    \
        assert(hv)
-
-STATIC struct xpvhv_aux*       S_hv_auxinit_internal(struct xpvhv_aux *iter)
-                       __attribute__nonnull__(1);
+STATIC struct xpvhv_aux*       S_hv_auxinit_internal(struct xpvhv_aux *iter);
 #define PERL_ARGS_ASSERT_HV_AUXINIT_INTERNAL   \
        assert(iter)
-
 STATIC SV*     S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, int k_flags, I32 d_flags, U32 hash);
-STATIC SV*     S_hv_free_ent_ret(pTHX_ HV *hv, HE *entry)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC SV*     S_hv_free_ent_ret(pTHX_ HV *hv, HE *entry);
 #define PERL_ARGS_ASSERT_HV_FREE_ENT_RET       \
        assert(hv); assert(entry)
-
-STATIC void    S_hv_magic_check(HV *hv, bool *needs_copy, bool *needs_store)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3);
+STATIC void    S_hv_magic_check(HV *hv, bool *needs_copy, bool *needs_store);
 #define PERL_ARGS_ASSERT_HV_MAGIC_CHECK        \
        assert(hv); assert(needs_copy); assert(needs_store)
-
 PERL_STATIC_NO_RET void        S_hv_notallowed(pTHX_ int flags, const char *key, I32 klen, const char *msg)
-                       __attribute__noreturn__
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__noreturn__;
 #define PERL_ARGS_ASSERT_HV_NOTALLOWED \
        assert(key); assert(msg)
 
@@ -6170,360 +4193,227 @@ STATIC HE*    S_new_he(pTHX)
                        __attribute__warn_unused_result__;
 
 PERL_STATIC_INLINE U32 S_ptr_hash(PTRV u);
-STATIC SV *    S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV *    S_refcounted_he_value(pTHX_ const struct refcounted_he *he);
 #define PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE   \
        assert(he)
-
 STATIC HEK*    S_save_hek_flags(const char *str, I32 len, U32 hash, int flags)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SAVE_HEK_FLAGS        \
        assert(str)
 
 STATIC HEK*    S_share_hek_flags(pTHX_ const char *str, I32 len, U32 hash, int flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SHARE_HEK_FLAGS       \
        assert(str)
 
 STATIC void    S_unshare_hek_or_pvn(pTHX_ const HEK* hek, const char* str, I32 len, U32 hash);
 #endif
 #if defined(PERL_IN_HV_C) || defined(PERL_IN_MG_C) || defined(PERL_IN_SV_C)
-PERL_CALLCONV void     Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av);
 #define PERL_ARGS_ASSERT_SV_KILL_BACKREFS      \
        assert(sv)
-
 #endif
 #if defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C)
-PERL_CALLCONV SV*      Perl_hfree_next_entry(pTHX_ HV *hv, STRLEN *indexp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl_hfree_next_entry(pTHX_ HV *hv, STRLEN *indexp);
 #define PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY      \
        assert(hv); assert(indexp)
-
 #endif
 #if defined(PERL_IN_MALLOC_C)
-STATIC int     S_adjust_size_and_find_bucket(size_t *nbytes_p)
-                       __attribute__nonnull__(1);
+STATIC int     S_adjust_size_and_find_bucket(size_t *nbytes_p);
 #define PERL_ARGS_ASSERT_ADJUST_SIZE_AND_FIND_BUCKET   \
        assert(nbytes_p)
-
 #endif
 #if defined(PERL_IN_MG_C)
-STATIC void    S_fixup_errno_string(pTHX_ SV* sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_fixup_errno_string(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_FIXUP_ERRNO_STRING    \
        assert(sv)
-
-STATIC SV*     S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags, int n, SV *val)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC SV*     S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags, int n, SV *val);
 #define PERL_ARGS_ASSERT_MAGIC_METHCALL1       \
        assert(sv); assert(mg); assert(meth)
-
-STATIC int     S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC int     S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth);
 #define PERL_ARGS_ASSERT_MAGIC_METHPACK        \
        assert(sv); assert(mg); assert(meth)
-
 STATIC void    S_restore_magic(pTHX_ const void *p);
-STATIC void    S_save_magic_flags(pTHX_ I32 mgs_ix, SV *sv, U32 flags)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_save_magic_flags(pTHX_ I32 mgs_ix, SV *sv, U32 flags);
 #define PERL_ARGS_ASSERT_SAVE_MAGIC_FLAGS      \
        assert(sv)
-
 STATIC void    S_unwind_handler_stack(pTHX_ const void *p);
 #endif
 #if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C)
-PERL_CALLCONV bool     Perl_translate_substr_offsets(STRLEN curlen, IV pos1_iv, bool pos1_is_uv, IV len_iv, bool len_is_uv, STRLEN *posp, STRLEN *lenp)
-                       __attribute__nonnull__(6)
-                       __attribute__nonnull__(7);
+PERL_CALLCONV bool     Perl_translate_substr_offsets(STRLEN curlen, IV pos1_iv, bool pos1_is_uv, IV len_iv, bool len_is_uv, STRLEN *posp, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS      \
        assert(posp); assert(lenp)
-
 #endif
 #if defined(PERL_IN_MRO_C)
-STATIC void    S_mro_clean_isarev(pTHX_ HV * const isa, const char * const name, const STRLEN len, HV * const exceptions, U32 hash, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_mro_clean_isarev(pTHX_ HV * const isa, const char * const name, const STRLEN len, HV * const exceptions, U32 hash, U32 flags);
 #define PERL_ARGS_ASSERT_MRO_CLEAN_ISAREV      \
        assert(isa); assert(name)
-
-STATIC void    S_mro_gather_and_rename(pTHX_ HV * const stashes, HV * const seen_stashes, HV *stash, HV *oldstash, SV *namesv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_5);
+STATIC void    S_mro_gather_and_rename(pTHX_ HV * const stashes, HV * const seen_stashes, HV *stash, HV *oldstash, SV *namesv);
 #define PERL_ARGS_ASSERT_MRO_GATHER_AND_RENAME \
        assert(stashes); assert(seen_stashes); assert(namesv)
-
-STATIC AV*     S_mro_get_linear_isa_dfs(pTHX_ HV* stash, U32 level)
-                       __attribute__nonnull__(pTHX_1);
+STATIC AV*     S_mro_get_linear_isa_dfs(pTHX_ HV* stash, U32 level);
 #define PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA_DFS        \
        assert(stash)
-
 #endif
 #if defined(PERL_IN_OP_C)
-PERL_STATIC_INLINE bool        S_aassign_common_vars(pTHX_ OP* o);
-STATIC void    S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs);
 #define PERL_ARGS_ASSERT_APPLY_ATTRS   \
        assert(stash); assert(target)
-
-STATIC void    S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4);
+STATIC void    S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp);
 #define PERL_ARGS_ASSERT_APPLY_ATTRS_MY        \
        assert(stash); assert(target); assert(imopsp)
-
 STATIC I32     S_assignment_type(pTHX_ const OP *o)
                        __attribute__warn_unused_result__;
 
-STATIC void    S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+STATIC void    S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t);
 #define PERL_ARGS_ASSERT_BAD_TYPE_GV   \
        assert(gv); assert(kid); assert(t)
-
-STATIC void    S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+STATIC void    S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid);
 #define PERL_ARGS_ASSERT_BAD_TYPE_PV   \
        assert(t); assert(o); assert(kid)
-
-STATIC void    S_clear_special_blocks(pTHX_ const char *const fullname, GV *const gv, CV *const cv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_clear_special_blocks(pTHX_ const char *const fullname, GV *const gv, CV *const cv);
 #define PERL_ARGS_ASSERT_CLEAR_SPECIAL_BLOCKS  \
        assert(fullname); assert(gv); assert(cv)
-
-STATIC void    S_cop_free(pTHX_ COP *cop)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_cop_free(pTHX_ COP *cop);
 #define PERL_ARGS_ASSERT_COP_FREE      \
        assert(cop)
-
-STATIC OP *    S_dup_attrlist(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC OP *    S_dup_attrlist(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_DUP_ATTRLIST  \
        assert(o)
-
-STATIC void    S_finalize_op(pTHX_ OP* o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_finalize_op(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_FINALIZE_OP   \
        assert(o)
-
-STATIC void    S_find_and_forget_pmops(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_find_and_forget_pmops(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS \
        assert(o)
-
-STATIC OP*     S_fold_constants(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC OP*     S_fold_constants(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_FOLD_CONSTANTS        \
        assert(o)
-
 STATIC OP*     S_force_list(pTHX_ OP* arg, bool nullit);
-STATIC void    S_forget_pmop(pTHX_ PMOP *const o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_forget_pmop(pTHX_ PMOP *const o);
 #define PERL_ARGS_ASSERT_FORGET_PMOP   \
        assert(o)
-
 STATIC OP*     S_gen_constant_list(pTHX_ OP* o);
-STATIC void    S_inplace_aassign(pTHX_ OP* o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_inplace_aassign(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_INPLACE_AASSIGN       \
        assert(o)
-
 STATIC bool    S_is_handle_constructor(const OP *o, I32 numargs)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR \
        assert(o)
 
 STATIC OP*     S_listkids(pTHX_ OP* o);
-STATIC bool    S_looks_like_bool(pTHX_ const OP* o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC bool    S_looks_like_bool(pTHX_ const OP* o);
 #define PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL       \
        assert(o)
-
 STATIC OP*     S_modkids(pTHX_ OP *o, I32 type);
-STATIC void    S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV *name)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV *name);
 #define PERL_ARGS_ASSERT_MOVE_PROTO_ATTR       \
        assert(proto); assert(attrs); assert(name)
-
-STATIC OP *    S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
-                       __attribute__nonnull__(pTHX_3);
+STATIC OP *    S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp);
 #define PERL_ARGS_ASSERT_MY_KID        \
        assert(imopsp)
-
-STATIC OP*     S_newGIVWHENOP(pTHX_ OP* cond, OP *block, I32 enter_opcode, I32 leave_opcode, PADOFFSET entertarg)
-                       __attribute__nonnull__(pTHX_2);
+STATIC OP*     S_newGIVWHENOP(pTHX_ OP* cond, OP *block, I32 enter_opcode, I32 leave_opcode, PADOFFSET entertarg);
 #define PERL_ARGS_ASSERT_NEWGIVWHENOP  \
        assert(block)
-
 PERL_STATIC_INLINE OP* S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth);
 STATIC OP*     S_new_logop(pTHX_ I32 type, I32 flags, OP **firstp, OP **otherp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEW_LOGOP     \
        assert(firstp); assert(otherp)
 
-STATIC void    S_no_bareword_allowed(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_no_bareword_allowed(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED   \
        assert(o)
-
 STATIC OP*     S_no_fh_allowed(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NO_FH_ALLOWED \
        assert(o)
 
-PERL_STATIC_INLINE OP* S_op_integerize(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE OP* S_op_integerize(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_OP_INTEGERIZE \
        assert(o)
-
-PERL_STATIC_INLINE OP* S_op_std_init(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE OP* S_op_std_init(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_OP_STD_INIT   \
        assert(o)
-
-STATIC OP*     S_pmtrans(pTHX_ OP* o, OP* expr, OP* repl)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC OP*     S_pmtrans(pTHX_ OP* o, OP* expr, OP* repl);
 #define PERL_ARGS_ASSERT_PMTRANS       \
        assert(o); assert(expr); assert(repl)
-
-STATIC bool    S_process_special_blocks(pTHX_ I32 floor, const char *const fullname, GV *const gv, CV *const cv)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+STATIC bool    S_process_special_blocks(pTHX_ I32 floor, const char *const fullname, GV *const gv, CV *const cv);
 #define PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS        \
        assert(fullname); assert(gv); assert(cv)
-
 STATIC OP*     S_ref_array_or_hash(pTHX_ OP* cond);
 STATIC OP*     S_refkids(pTHX_ OP* o, I32 type);
 STATIC bool    S_scalar_mod_type(const OP *o, I32 type)
                        __attribute__warn_unused_result__;
 
-STATIC OP*     S_scalarboolean(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC OP*     S_scalarboolean(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_SCALARBOOLEAN \
        assert(o)
-
 STATIC OP*     S_scalarkids(pTHX_ OP* o);
 STATIC OP*     S_scalarseq(pTHX_ OP* o);
 STATIC OP*     S_search_const(pTHX_ OP *o)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SEARCH_CONST  \
        assert(o)
 
-STATIC void    S_simplify_sort(pTHX_ OP *o)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_simplify_sort(pTHX_ OP *o);
 #define PERL_ARGS_ASSERT_SIMPLIFY_SORT \
        assert(o)
-
 STATIC OP*     S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV  \
        assert(o); assert(name)
 
-STATIC OP*     S_too_many_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC OP*     S_too_many_arguments_pv(pTHX_ OP *o, const char* name, U32 flags);
 #define PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV \
        assert(o); assert(name)
-
 #  if defined(USE_ITHREADS)
-PERL_STATIC_INLINE void        S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_STATIC_INLINE void        S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp);
 #define PERL_ARGS_ASSERT_OP_RELOCATE_SV        \
        assert(svp); assert(targp)
-
 #  endif
 #endif
 #if defined(PERL_IN_OP_C) || defined(PERL_IN_SV_C)
-PERL_CALLCONV void     Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv, SV * const *new_const_svp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv, SV * const *new_const_svp);
 #define PERL_ARGS_ASSERT_REPORT_REDEFINED_CV   \
        assert(name); assert(old_cv)
-
 #endif
 #if defined(PERL_IN_PAD_C)
-STATIC PADOFFSET       S_pad_alloc_name(pTHX_ PADNAME *name, U32 flags, HV *typestash, HV *ourstash)
-                       __attribute__nonnull__(pTHX_1);
+STATIC PADOFFSET       S_pad_alloc_name(pTHX_ PADNAME *name, U32 flags, HV *typestash, HV *ourstash);
 #define PERL_ARGS_ASSERT_PAD_ALLOC_NAME        \
        assert(name)
-
-STATIC void    S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash);
 #define PERL_ARGS_ASSERT_PAD_CHECK_DUP \
        assert(name)
-
-STATIC PADOFFSET       S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv, U32 seq, int warn, SV** out_capture, PADNAME** out_name, int *out_flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_8)
-                       __attribute__nonnull__(pTHX_9);
+STATIC PADOFFSET       S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv, U32 seq, int warn, SV** out_capture, PADNAME** out_name, int *out_flags);
 #define PERL_ARGS_ASSERT_PAD_FINDLEX   \
        assert(namepv); assert(cv); assert(out_name); assert(out_flags)
-
 STATIC void    S_pad_reset(pTHX);
 #endif
 #if defined(PERL_IN_PERL_C)
-STATIC void    S_find_beginning(pTHX_ SV* linestr_sv, PerlIO *rsfp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_find_beginning(pTHX_ SV* linestr_sv, PerlIO *rsfp);
 #define PERL_ARGS_ASSERT_FIND_BEGINNING        \
        assert(linestr_sv); assert(rsfp)
-
 STATIC void    S_forbid_setid(pTHX_ const char flag, const bool suidscript);
-STATIC void    S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_INCPUSH       \
        assert(dir)
-
-STATIC void    S_incpush_use_sep(pTHX_ const char *p, STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_incpush_use_sep(pTHX_ const char *p, STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_INCPUSH_USE_SEP       \
        assert(p)
-
 STATIC void    S_init_ids(pTHX);
 STATIC void    S_init_interp(pTHX);
 STATIC void    S_init_main_stash(pTHX);
 STATIC void    S_init_perllib(pTHX);
-STATIC void    S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env);
 #define PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS \
        assert(argv)
-
 STATIC void    S_init_predump_symbols(pTHX);
-STATIC SV*     S_mayberelocate(pTHX_ const char *const dir, STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV*     S_mayberelocate(pTHX_ const char *const dir, STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_MAYBERELOCATE \
        assert(dir)
-
 PERL_STATIC_NO_RET void        S_minus_v(pTHX)
                        __attribute__noreturn__;
 
@@ -6531,12 +4421,9 @@ PERL_STATIC_NO_RET void  S_my_exit_jump(pTHX)
                        __attribute__noreturn__;
 
 STATIC void    S_nuke_stacks(pTHX);
-STATIC PerlIO *        S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+STATIC PerlIO *        S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript);
 #define PERL_ARGS_ASSERT_OPEN_SCRIPT   \
        assert(scriptname); assert(suidscript)
-
 STATIC void*   S_parse_body(pTHX_ char **env, XSINIT_t xsinit);
 PERL_STATIC_NO_RET void        S_run_body(pTHX_ I32 oldscope)
                        __attribute__noreturn__;
@@ -6546,61 +4433,45 @@ PERL_STATIC_NO_RET void S_usage(pTHX)
 
 #endif
 #if defined(PERL_IN_PP_C)
-STATIC size_t  S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC size_t  S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping);
 #define PERL_ARGS_ASSERT_DO_CHOMP      \
        assert(retval); assert(sv)
-
 STATIC OP*     S_do_delete_local(pTHX);
 STATIC SV*     S_refto(pTHX_ SV* sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REFTO \
        assert(sv)
 
 #endif
 #if defined(PERL_IN_PP_C) || defined(PERL_IN_PP_HOT_C)
 PERL_CALLCONV GV*      Perl_softref2xv(pTHX_ SV *const sv, const char *const what, const svtype type, SV ***spp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SOFTREF2XV    \
        assert(sv); assert(what); assert(spp)
 
 #endif
 #if defined(PERL_IN_PP_CTL_C)
 STATIC PerlIO *        S_check_type_and_open(pTHX_ SV *name)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN   \
        assert(name)
 
-STATIC void    S_destroy_matcher(pTHX_ PMOP* matcher)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_destroy_matcher(pTHX_ PMOP* matcher);
 #define PERL_ARGS_ASSERT_DESTROY_MATCHER       \
        assert(matcher)
-
 STATIC OP*     S_do_smartmatch(pTHX_ HV* seen_this, HV* seen_other, const bool copied);
 STATIC OP*     S_docatch(pTHX_ OP *o)
                        __attribute__warn_unused_result__;
 
 STATIC bool    S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV* hh);
 STATIC OP*     S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_5)
-                       __attribute__nonnull__(pTHX_6);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DOFINDLABEL   \
        assert(o); assert(label); assert(opstack); assert(oplimit)
 
-STATIC MAGIC * S_doparseform(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC MAGIC * S_doparseform(pTHX_ SV *sv);
 #define PERL_ARGS_ASSERT_DOPARSEFORM   \
        assert(sv)
-
 STATIC I32     S_dopoptoeval(pTHX_ I32 startingblock)
                        __attribute__warn_unused_result__;
 
@@ -6608,8 +4479,7 @@ STATIC I32        S_dopoptogiven(pTHX_ I32 startingblock)
                        __attribute__warn_unused_result__;
 
 STATIC I32     S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DOPOPTOLABEL  \
        assert(label)
 
@@ -6617,31 +4487,23 @@ STATIC I32      S_dopoptoloop(pTHX_ I32 startingblock)
                        __attribute__warn_unused_result__;
 
 STATIC I32     S_dopoptosub_at(pTHX_ const PERL_CONTEXT* cxstk, I32 startingblock)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DOPOPTOSUB_AT \
        assert(cxstk)
 
 STATIC I32     S_dopoptowhen(pTHX_ I32 startingblock)
                        __attribute__warn_unused_result__;
 
-STATIC SV **   S_leave_common(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags, bool lvalue)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC SV **   S_leave_common(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags, bool lvalue);
 #define PERL_ARGS_ASSERT_LEAVE_COMMON  \
        assert(newsp); assert(sp); assert(mark)
-
 STATIC PMOP*   S_make_matcher(pTHX_ REGEXP* re)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_MAKE_MATCHER  \
        assert(re)
 
 STATIC bool    S_matcher_matches_sv(pTHX_ PMOP* matcher, SV* sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_MATCHER_MATCHES_SV    \
        assert(matcher); assert(sv)
 
@@ -6649,699 +4511,416 @@ STATIC bool   S_num_overflow(NV value, I32 fldsize, I32 frcsize)
                        __attribute__warn_unused_result__;
 
 PERL_STATIC_INLINE bool        S_path_is_searchable(const char *name)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE    \
        assert(name)
 
 STATIC I32     S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_RUN_USER_FILTER       \
        assert(buf_sv)
 
-STATIC void    S_rxres_free(pTHX_ void** rsp)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_rxres_free(pTHX_ void** rsp);
 #define PERL_ARGS_ASSERT_RXRES_FREE    \
        assert(rsp)
-
-STATIC void    S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_rxres_restore(pTHX_ void **rsp, REGEXP *rx);
 #define PERL_ARGS_ASSERT_RXRES_RESTORE \
        assert(rsp); assert(rx)
-
-STATIC void    S_save_lines(pTHX_ AV *array, SV *sv)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_save_lines(pTHX_ AV *array, SV *sv);
 #define PERL_ARGS_ASSERT_SAVE_LINES    \
        assert(sv)
-
 #endif
 #if defined(PERL_IN_PP_HOT_C)
-STATIC void    S_do_oddball(pTHX_ SV **oddkey, SV **firstkey)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_do_oddball(pTHX_ SV **oddkey, SV **firstkey);
 #define PERL_ARGS_ASSERT_DO_ODDBALL    \
        assert(oddkey); assert(firstkey)
-
-PERL_STATIC_INLINE HV* S_opmethod_stash(pTHX_ SV* meth)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE HV* S_opmethod_stash(pTHX_ SV* meth);
 #define PERL_ARGS_ASSERT_OPMETHOD_STASH        \
        assert(meth)
-
 #endif
 #if defined(PERL_IN_PP_PACK_C)
-STATIC int     S_div128(pTHX_ SV *pnum, bool *done)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC int     S_div128(pTHX_ SV *pnum, bool *done);
 #define PERL_ARGS_ASSERT_DIV128        \
        assert(pnum); assert(done)
-
-STATIC char    S_first_symbol(const char *pat, const char *patend)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+STATIC char    S_first_symbol(const char *pat, const char *patend);
 #define PERL_ARGS_ASSERT_FIRST_SYMBOL  \
        assert(pat); assert(patend)
-
 STATIC const char *    S_get_num(pTHX_ const char *patptr, I32 *lenptr)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GET_NUM       \
        assert(patptr); assert(lenptr)
 
-STATIC const char *    S_group_end(pTHX_ const char *patptr, const char *patend, char ender)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC const char *    S_group_end(pTHX_ const char *patptr, const char *patend, char ender);
 #define PERL_ARGS_ASSERT_GROUP_END     \
        assert(patptr); assert(patend)
-
 STATIC SV*     S_is_an_int(pTHX_ const char *s, STRLEN l)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_AN_INT     \
        assert(s)
 
-STATIC I32     S_measure_struct(pTHX_ struct tempsym* symptr)
-                       __attribute__nonnull__(pTHX_1);
+STATIC I32     S_measure_struct(pTHX_ struct tempsym* symptr);
 #define PERL_ARGS_ASSERT_MEASURE_STRUCT        \
        assert(symptr)
-
-STATIC SV*     S_mul128(pTHX_ SV *sv, U8 m)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV*     S_mul128(pTHX_ SV *sv, U8 m);
 #define PERL_ARGS_ASSERT_MUL128        \
        assert(sv)
-
 STATIC char *  S_my_bytes_to_utf8(const U8 *start, STRLEN len, char *dest, const bool needs_swap)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_MY_BYTES_TO_UTF8      \
        assert(start); assert(dest)
 
-STATIC bool    S_need_utf8(const char *pat, const char *patend)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+STATIC bool    S_need_utf8(const char *pat, const char *patend);
 #define PERL_ARGS_ASSERT_NEED_UTF8     \
        assert(pat); assert(patend)
-
-STATIC bool    S_next_symbol(pTHX_ struct tempsym* symptr)
-                       __attribute__nonnull__(pTHX_1);
+STATIC bool    S_next_symbol(pTHX_ struct tempsym* symptr);
 #define PERL_ARGS_ASSERT_NEXT_SYMBOL   \
        assert(symptr)
-
-STATIC SV **   S_pack_rec(pTHX_ SV *cat, struct tempsym* symptr, SV **beglist, SV **endlist)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+STATIC SV **   S_pack_rec(pTHX_ SV *cat, struct tempsym* symptr, SV **beglist, SV **endlist);
 #define PERL_ARGS_ASSERT_PACK_REC      \
        assert(cat); assert(symptr); assert(beglist); assert(endlist)
-
 STATIC char *  S_sv_exp_grow(pTHX_ SV *sv, STRLEN needed)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_EXP_GROW   \
        assert(sv)
 
-STATIC I32     S_unpack_rec(pTHX_ struct tempsym* symptr, const char *s, const char *strbeg, const char *strend, const char **new_s)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+STATIC I32     S_unpack_rec(pTHX_ struct tempsym* symptr, const char *s, const char *strbeg, const char *strend, const char **new_s);
 #define PERL_ARGS_ASSERT_UNPACK_REC    \
        assert(symptr); assert(s); assert(strbeg); assert(strend)
-
 #endif
 #if defined(PERL_IN_PP_SORT_C)
-STATIC I32     S_amagic_cmp(pTHX_ SV *const str1, SV *const str2)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_amagic_cmp(pTHX_ SV *const str1, SV *const str2);
 #define PERL_ARGS_ASSERT_AMAGIC_CMP    \
        assert(str1); assert(str2)
-
-STATIC I32     S_amagic_i_ncmp(pTHX_ SV *const a, SV *const b)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_amagic_i_ncmp(pTHX_ SV *const a, SV *const b);
 #define PERL_ARGS_ASSERT_AMAGIC_I_NCMP \
        assert(a); assert(b)
-
-STATIC I32     S_amagic_ncmp(pTHX_ SV *const a, SV *const b)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_amagic_ncmp(pTHX_ SV *const a, SV *const b);
 #define PERL_ARGS_ASSERT_AMAGIC_NCMP   \
        assert(a); assert(b)
-
-STATIC void    S_qsortsvu(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t compare)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_qsortsvu(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t compare);
 #define PERL_ARGS_ASSERT_QSORTSVU      \
        assert(compare)
-
-STATIC I32     S_sortcv(pTHX_ SV *const a, SV *const b)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_sortcv(pTHX_ SV *const a, SV *const b);
 #define PERL_ARGS_ASSERT_SORTCV        \
        assert(a); assert(b)
-
-STATIC I32     S_sortcv_stacked(pTHX_ SV *const a, SV *const b)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_sortcv_stacked(pTHX_ SV *const a, SV *const b);
 #define PERL_ARGS_ASSERT_SORTCV_STACKED        \
        assert(a); assert(b)
-
-STATIC I32     S_sortcv_xsub(pTHX_ SV *const a, SV *const b)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_sortcv_xsub(pTHX_ SV *const a, SV *const b);
 #define PERL_ARGS_ASSERT_SORTCV_XSUB   \
        assert(a); assert(b)
-
-STATIC I32     S_sv_i_ncmp(pTHX_ SV *const a, SV *const b)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_sv_i_ncmp(pTHX_ SV *const a, SV *const b);
 #define PERL_ARGS_ASSERT_SV_I_NCMP     \
        assert(a); assert(b)
-
-STATIC I32     S_sv_ncmp(pTHX_ SV *const a, SV *const b)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_sv_ncmp(pTHX_ SV *const a, SV *const b);
 #define PERL_ARGS_ASSERT_SV_NCMP       \
        assert(a); assert(b)
-
 #  if defined(USE_LOCALE_COLLATE)
-STATIC I32     S_amagic_cmp_locale(pTHX_ SV *const str1, SV *const str2)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_amagic_cmp_locale(pTHX_ SV *const str1, SV *const str2);
 #define PERL_ARGS_ASSERT_AMAGIC_CMP_LOCALE     \
        assert(str1); assert(str2)
-
 #  endif
 #endif
 #if defined(PERL_IN_PP_SYS_C)
-STATIC OP*     S_doform(pTHX_ CV *cv, GV *gv, OP *retop)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC OP*     S_doform(pTHX_ CV *cv, GV *gv, OP *retop);
 #define PERL_ARGS_ASSERT_DOFORM        \
        assert(cv); assert(gv)
-
-STATIC SV *    S_space_join_names_mortal(pTHX_ char *const *array)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV *    S_space_join_names_mortal(pTHX_ char *const *array);
 #define PERL_ARGS_ASSERT_SPACE_JOIN_NAMES_MORTAL       \
        assert(array)
-
 #endif
 #if defined(PERL_IN_REGCOMP_C)
-STATIC void    S__append_range_to_invlist(pTHX_ SV* const invlist, const UV start, const UV end)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S__append_range_to_invlist(pTHX_ SV* const invlist, const UV start, const UV end);
 #define PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST      \
        assert(invlist)
-
 PERL_STATIC_INLINE UV* S__invlist_array_init(SV* const invlist, const bool will_have_0)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT   \
        assert(invlist)
 
 STATIC SV*     S__make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__MAKE_EXACTF_INVLIST  \
        assert(pRExC_state); assert(node)
 
-STATIC void    S_add_above_Latin1_folds(pTHX_ RExC_state_t *pRExC_state, const U8 cp, SV** invlist)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_add_above_Latin1_folds(pTHX_ RExC_state_t *pRExC_state, const U8 cp, SV** invlist);
 #define PERL_ARGS_ASSERT_ADD_ABOVE_LATIN1_FOLDS        \
        assert(pRExC_state); assert(invlist)
-
 PERL_STATIC_INLINE SV* S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp)
                        __attribute__warn_unused_result__;
 
 STATIC U32     S_add_data(RExC_state_t* const pRExC_state, const char* const s, const U32 n)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ADD_DATA      \
        assert(pRExC_state); assert(s)
 
-STATIC AV*     S_add_multi_match(pTHX_ AV* multi_char_matches, SV* multi_string, const STRLEN cp_count)
-                       __attribute__nonnull__(pTHX_2);
+STATIC AV*     S_add_multi_match(pTHX_ AV* multi_char_matches, SV* multi_string, const STRLEN cp_count);
 #define PERL_ARGS_ASSERT_ADD_MULTI_MATCH       \
        assert(multi_string)
-
-PERL_STATIC_INLINE void        S_alloc_maybe_populate_EXACT(pTHX_ RExC_state_t *pRExC_state, regnode *node, I32 *flagp, STRLEN len, UV code_point, bool downgradable)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_STATIC_INLINE void        S_alloc_maybe_populate_EXACT(pTHX_ RExC_state_t *pRExC_state, regnode *node, I32 *flagp, STRLEN len, UV code_point, bool downgradable);
 #define PERL_ARGS_ASSERT_ALLOC_MAYBE_POPULATE_EXACT    \
        assert(pRExC_state); assert(node); assert(flagp)
-
 STATIC const char *    S_cntrl_to_mnemonic(const U8 c)
                        __attribute__pure__;
 
-PERL_STATIC_INLINE U8  S_compute_EXACTish(RExC_state_t *pRExC_state)
-                       __attribute__nonnull__(1);
+PERL_STATIC_INLINE U8  S_compute_EXACTish(RExC_state_t *pRExC_state);
 #define PERL_ARGS_ASSERT_COMPUTE_EXACTISH      \
        assert(pRExC_state)
-
-STATIC regnode *       S_construct_ahocorasick_from_trie(pTHX_ RExC_state_t *pRExC_state, regnode *source, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC regnode *       S_construct_ahocorasick_from_trie(pTHX_ RExC_state_t *pRExC_state, regnode *source, U32 depth);
 #define PERL_ARGS_ASSERT_CONSTRUCT_AHOCORASICK_FROM_TRIE       \
        assert(pRExC_state); assert(source)
-
-STATIC bool    S_could_it_be_a_POSIX_class(RExC_state_t *pRExC_state)
-                       __attribute__nonnull__(1);
+STATIC bool    S_could_it_be_a_POSIX_class(RExC_state_t *pRExC_state);
 #define PERL_ARGS_ASSERT_COULD_IT_BE_A_POSIX_CLASS     \
        assert(pRExC_state)
-
-STATIC SV*     S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state, const regnode_charclass* const node)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC SV*     S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state, const regnode_charclass* const node);
 #define PERL_ARGS_ASSERT_GET_ANYOF_CP_LIST_FOR_SSC     \
        assert(pRExC_state); assert(node)
-
 PERL_STATIC_INLINE STRLEN*     S_get_invlist_iter_addr(SV* invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR \
        assert(invlist)
 
-STATIC bool    S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state, regnode** nodep, UV *code_point_p, int* cp_count, I32 *flagp, const U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_5);
+STATIC bool    S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state, regnode** nodep, UV *code_point_p, int* cp_count, I32 *flagp, const U32 depth);
 #define PERL_ARGS_ASSERT_GROK_BSLASH_N \
        assert(pRExC_state); assert(flagp)
-
-STATIC regnode*        S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV ** return_invlist, I32 *flagp, U32 depth, char * const oregcomp_parse)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_5);
+STATIC regnode*        S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV ** return_invlist, I32 *flagp, U32 depth, char * const oregcomp_parse);
 #define PERL_ARGS_ASSERT_HANDLE_REGEX_SETS     \
        assert(pRExC_state); assert(flagp); assert(oregcomp_parse)
-
 PERL_STATIC_INLINE SV* S_invlist_clone(pTHX_ SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_INVLIST_CLONE \
        assert(invlist)
 
-STATIC void    S_invlist_extend(pTHX_ SV* const invlist, const UV len)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_invlist_extend(pTHX_ SV* const invlist, const UV len);
 #define PERL_ARGS_ASSERT_INVLIST_EXTEND        \
        assert(invlist)
-
 PERL_STATIC_INLINE UV  S_invlist_highest(SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_INVLIST_HIGHEST       \
        assert(invlist)
 
-PERL_STATIC_INLINE void        S_invlist_iterfinish(SV* invlist)
-                       __attribute__nonnull__(1);
+PERL_STATIC_INLINE void        S_invlist_iterfinish(SV* invlist);
 #define PERL_ARGS_ASSERT_INVLIST_ITERFINISH    \
        assert(invlist)
-
-PERL_STATIC_INLINE void        S_invlist_iterinit(SV* invlist)
-                       __attribute__nonnull__(1);
+PERL_STATIC_INLINE void        S_invlist_iterinit(SV* invlist);
 #define PERL_ARGS_ASSERT_INVLIST_ITERINIT      \
        assert(invlist)
-
 STATIC bool    S_invlist_iternext(SV* invlist, UV* start, UV* end)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_INVLIST_ITERNEXT      \
        assert(invlist); assert(start); assert(end)
 
 PERL_STATIC_INLINE UV  S_invlist_max(SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_INVLIST_MAX   \
        assert(invlist)
 
-PERL_STATIC_INLINE void        S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE void        S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset);
 #define PERL_ARGS_ASSERT_INVLIST_SET_LEN       \
        assert(invlist)
-
-STATIC bool    S_is_ssc_worth_it(const RExC_state_t * pRExC_state, const regnode_ssc * ssc)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+STATIC bool    S_is_ssc_worth_it(const RExC_state_t * pRExC_state, const regnode_ssc * ssc);
 #define PERL_ARGS_ASSERT_IS_SSC_WORTH_IT       \
        assert(pRExC_state); assert(ssc)
-
-STATIC U32     S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan, UV *min_subtract, bool *unfolded_multi_char, U32 flags, regnode *val, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+STATIC U32     S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan, UV *min_subtract, bool *unfolded_multi_char, U32 flags, regnode *val, U32 depth);
 #define PERL_ARGS_ASSERT_JOIN_EXACT    \
        assert(pRExC_state); assert(scan); assert(min_subtract); assert(unfolded_multi_char)
-
-STATIC I32     S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *first, regnode *last, regnode *tail, U32 word_count, U32 flags, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+STATIC I32     S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *first, regnode *last, regnode *tail, U32 word_count, U32 flags, U32 depth);
 #define PERL_ARGS_ASSERT_MAKE_TRIE     \
        assert(pRExC_state); assert(startbranch); assert(first); assert(last); assert(tail)
-
-STATIC char *  S_nextchar(pTHX_ RExC_state_t *pRExC_state)
-                       __attribute__nonnull__(pTHX_1);
+STATIC char *  S_nextchar(pTHX_ RExC_state_t *pRExC_state);
 #define PERL_ARGS_ASSERT_NEXTCHAR      \
        assert(pRExC_state)
-
-STATIC void    S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state);
 #define PERL_ARGS_ASSERT_PARSE_LPAREN_QUESTION_FLAGS   \
        assert(pRExC_state)
-
-STATIC void    S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr);
 #define PERL_ARGS_ASSERT_POPULATE_ANYOF_FROM_INVLIST   \
        assert(node); assert(invlist_ptr)
-
 PERL_STATIC_NO_RET void        S_re_croak2(pTHX_ bool utf8, const char* pat1, const char* pat2, ...)
-                       __attribute__noreturn__
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__noreturn__;
 #define PERL_ARGS_ASSERT_RE_CROAK2     \
        assert(pat1); assert(pat2)
 
-STATIC regnode*        S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+STATIC regnode*        S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth);
 #define PERL_ARGS_ASSERT_REG   \
        assert(pRExC_state); assert(flagp)
-
-STATIC regnode*        S_reg2Lanode(pTHX_ RExC_state_t *pRExC_state, const U8 op, const U32 arg1, const I32 arg2)
-                       __attribute__nonnull__(pTHX_1);
+STATIC regnode*        S_reg2Lanode(pTHX_ RExC_state_t *pRExC_state, const U8 op, const U32 arg1, const I32 arg2);
 #define PERL_ARGS_ASSERT_REG2LANODE    \
        assert(pRExC_state)
-
-STATIC regnode*        S_reg_node(pTHX_ RExC_state_t *pRExC_state, U8 op)
-                       __attribute__nonnull__(pTHX_1);
+STATIC regnode*        S_reg_node(pTHX_ RExC_state_t *pRExC_state, U8 op);
 #define PERL_ARGS_ASSERT_REG_NODE      \
        assert(pRExC_state)
-
-STATIC UV      S_reg_recode(pTHX_ const char value, SV **encp)
-                       __attribute__nonnull__(pTHX_2);
+STATIC UV      S_reg_recode(pTHX_ const char value, SV **encp);
 #define PERL_ARGS_ASSERT_REG_RECODE    \
        assert(encp)
-
-STATIC SV *    S_reg_scan_name(pTHX_ RExC_state_t *pRExC_state, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV *    S_reg_scan_name(pTHX_ RExC_state_t *pRExC_state, U32 flags);
 #define PERL_ARGS_ASSERT_REG_SCAN_NAME \
        assert(pRExC_state)
-
-PERL_STATIC_INLINE char *      S_reg_skipcomment(RExC_state_t *pRExC_state, char * p)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+PERL_STATIC_INLINE char *      S_reg_skipcomment(RExC_state_t *pRExC_state, char * p);
 #define PERL_ARGS_ASSERT_REG_SKIPCOMMENT       \
        assert(pRExC_state); assert(p)
-
-STATIC regnode*        S_reganode(pTHX_ RExC_state_t *pRExC_state, U8 op, U32 arg)
-                       __attribute__nonnull__(pTHX_1);
+STATIC regnode*        S_reganode(pTHX_ RExC_state_t *pRExC_state, U8 op, U32 arg);
 #define PERL_ARGS_ASSERT_REGANODE      \
        assert(pRExC_state)
-
-STATIC regnode*        S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC regnode*        S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth);
 #define PERL_ARGS_ASSERT_REGATOM       \
        assert(pRExC_state); assert(flagp)
-
-STATIC regnode*        S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC regnode*        S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth);
 #define PERL_ARGS_ASSERT_REGBRANCH     \
        assert(pRExC_state); assert(flagp)
-
-STATIC regnode*        S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth, const bool stop_at_1, bool allow_multi_fold, const bool silence_non_portable, const bool strict, SV** ret_invlist)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC regnode*        S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth, const bool stop_at_1, bool allow_multi_fold, const bool silence_non_portable, const bool strict, SV** ret_invlist);
 #define PERL_ARGS_ASSERT_REGCLASS      \
        assert(pRExC_state); assert(flagp)
-
 STATIC unsigned int    S_regex_set_precedence(const U8 my_operator)
                        __attribute__pure__;
 
-STATIC void    S_reginsert(pTHX_ RExC_state_t *pRExC_state, U8 op, regnode *opnd, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_reginsert(pTHX_ RExC_state_t *pRExC_state, U8 op, regnode *opnd, U32 depth);
 #define PERL_ARGS_ASSERT_REGINSERT     \
        assert(pRExC_state); assert(opnd)
-
-STATIC regnode*        S_regnode_guts(pTHX_ RExC_state_t *pRExC_state, const U8 op, const STRLEN extra_len, const char* const name)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_4);
+STATIC regnode*        S_regnode_guts(pTHX_ RExC_state_t *pRExC_state, const U8 op, const STRLEN extra_len, const char* const name);
 #define PERL_ARGS_ASSERT_REGNODE_GUTS  \
        assert(pRExC_state); assert(name)
-
 STATIC char *  S_regpatws(RExC_state_t *pRExC_state, char *p, const bool recognize_comment)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGPATWS      \
        assert(pRExC_state); assert(p)
 
-STATIC regnode*        S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC regnode*        S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth);
 #define PERL_ARGS_ASSERT_REGPIECE      \
        assert(pRExC_state); assert(flagp)
-
-PERL_STATIC_INLINE I32 S_regpposixcc(pTHX_ RExC_state_t *pRExC_state, I32 value, const bool strict)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE I32 S_regpposixcc(pTHX_ RExC_state_t *pRExC_state, I32 value, const bool strict);
 #define PERL_ARGS_ASSERT_REGPPOSIXCC   \
        assert(pRExC_state)
-
-STATIC void    S_regtail(pTHX_ RExC_state_t *pRExC_state, regnode *p, const regnode *val, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_regtail(pTHX_ RExC_state_t *pRExC_state, regnode *p, const regnode *val, U32 depth);
 #define PERL_ARGS_ASSERT_REGTAIL       \
        assert(pRExC_state); assert(p); assert(val)
-
-STATIC void    S_scan_commit(pTHX_ const RExC_state_t *pRExC_state, struct scan_data_t *data, SSize_t *minlenp, int is_inf)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_scan_commit(pTHX_ const RExC_state_t *pRExC_state, struct scan_data_t *data, SSize_t *minlenp, int is_inf);
 #define PERL_ARGS_ASSERT_SCAN_COMMIT   \
        assert(pRExC_state); assert(data); assert(minlenp)
-
-STATIC void    S_set_ANYOF_arg(pTHX_ RExC_state_t* const pRExC_state, regnode* const node, SV* const cp_list, SV* const runtime_defns, SV* const only_utf8_locale_list, SV* const swash, const bool has_user_defined_property)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_set_ANYOF_arg(pTHX_ RExC_state_t* const pRExC_state, regnode* const node, SV* const cp_list, SV* const runtime_defns, SV* const only_utf8_locale_list, SV* const swash, const bool has_user_defined_property);
 #define PERL_ARGS_ASSERT_SET_ANYOF_ARG \
        assert(pRExC_state); assert(node)
-
-PERL_STATIC_INLINE void        S_ssc_add_range(pTHX_ regnode_ssc *ssc, UV const start, UV const end)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE void        S_ssc_add_range(pTHX_ regnode_ssc *ssc, UV const start, UV const end);
 #define PERL_ARGS_ASSERT_SSC_ADD_RANGE \
        assert(ssc)
-
-STATIC void    S_ssc_and(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc, const regnode_charclass *and_with)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_ssc_and(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc, const regnode_charclass *and_with);
 #define PERL_ARGS_ASSERT_SSC_AND       \
        assert(pRExC_state); assert(ssc); assert(and_with)
-
-STATIC void    S_ssc_anything(pTHX_ regnode_ssc *ssc)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_ssc_anything(pTHX_ regnode_ssc *ssc);
 #define PERL_ARGS_ASSERT_SSC_ANYTHING  \
        assert(ssc)
-
-PERL_STATIC_INLINE void        S_ssc_clear_locale(regnode_ssc *ssc)
-                       __attribute__nonnull__(1);
+PERL_STATIC_INLINE void        S_ssc_clear_locale(regnode_ssc *ssc);
 #define PERL_ARGS_ASSERT_SSC_CLEAR_LOCALE      \
        assert(ssc)
-
-PERL_STATIC_INLINE void        S_ssc_cp_and(pTHX_ regnode_ssc *ssc, UV const cp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE void        S_ssc_cp_and(pTHX_ regnode_ssc *ssc, UV const cp);
 #define PERL_ARGS_ASSERT_SSC_CP_AND    \
        assert(ssc)
-
-STATIC void    S_ssc_finalize(pTHX_ RExC_state_t *pRExC_state, regnode_ssc *ssc)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_ssc_finalize(pTHX_ RExC_state_t *pRExC_state, regnode_ssc *ssc);
 #define PERL_ARGS_ASSERT_SSC_FINALIZE  \
        assert(pRExC_state); assert(ssc)
-
-STATIC void    S_ssc_init(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_ssc_init(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc);
 #define PERL_ARGS_ASSERT_SSC_INIT      \
        assert(pRExC_state); assert(ssc)
-
-PERL_STATIC_INLINE void        S_ssc_intersection(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_STATIC_INLINE void        S_ssc_intersection(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd);
 #define PERL_ARGS_ASSERT_SSC_INTERSECTION      \
        assert(ssc); assert(invlist)
-
 STATIC int     S_ssc_is_anything(const regnode_ssc *ssc)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SSC_IS_ANYTHING       \
        assert(ssc)
 
 STATIC int     S_ssc_is_cp_posixl_init(const RExC_state_t *pRExC_state, const regnode_ssc *ssc)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SSC_IS_CP_POSIXL_INIT \
        assert(pRExC_state); assert(ssc)
 
-STATIC void    S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc, const regnode_charclass *or_with)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc, const regnode_charclass *or_with);
 #define PERL_ARGS_ASSERT_SSC_OR        \
        assert(pRExC_state); assert(ssc); assert(or_with)
-
-PERL_STATIC_INLINE void        S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_STATIC_INLINE void        S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd);
 #define PERL_ARGS_ASSERT_SSC_UNION     \
        assert(ssc); assert(invlist)
-
-STATIC SSize_t S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+STATIC SSize_t S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth);
 #define PERL_ARGS_ASSERT_STUDY_CHUNK   \
        assert(pRExC_state); assert(scanp); assert(minlenp); assert(deltap); assert(last)
-
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C)
-PERL_CALLCONV void     Perl__invlist_dump(pTHX_ PerlIO *file, I32 level, const char* const indent, SV* const invlist)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+PERL_CALLCONV void     Perl__invlist_dump(pTHX_ PerlIO *file, I32 level, const char* const indent, SV* const invlist);
 #define PERL_ARGS_ASSERT__INVLIST_DUMP \
        assert(file); assert(indent); assert(invlist)
-
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
 PERL_CALLCONV SV*      Perl__new_invlist_C_array(pTHX_ const UV* const list)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY  \
        assert(list)
 
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-PERL_CALLCONV SV*      Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog, const struct regnode *node, bool doinit, SV **listsvp, SV **lonly_utf8_locale, SV *exclude_list)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SV*      Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog, const struct regnode *node, bool doinit, SV **listsvp, SV **lonly_utf8_locale, SV *exclude_list);
 #define PERL_ARGS_ASSERT__GET_REGCLASS_NONBITMAP_DATA  \
        assert(node)
-
 PERL_CALLCONV void     Perl__load_PL_utf8_foldclosures(pTHX);
-PERL_CALLCONV void     Perl_regprop(pTHX_ const regexp *prog, SV* sv, const regnode* o, const regmatch_info *reginfo, const RExC_state_t *pRExC_state)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_regprop(pTHX_ const regexp *prog, SV* sv, const regnode* o, const regmatch_info *reginfo, const RExC_state_t *pRExC_state);
 #define PERL_ARGS_ASSERT_REGPROP       \
        assert(sv); assert(o)
-
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
 PERL_CALLCONV SV*      Perl__get_swash_invlist(pTHX_ SV* const swash)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__GET_SWASH_INVLIST    \
        assert(swash)
 
 PERL_STATIC_INLINE bool        S__invlist_contains_cp(SV* const invlist, const UV cp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__INVLIST_CONTAINS_CP  \
        assert(invlist)
 
 PERL_CALLCONV SV*      Perl__invlist_contents(pTHX_ SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__INVLIST_CONTENTS     \
        assert(invlist)
 
 PERL_STATIC_INLINE UV  S__invlist_len(SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__INVLIST_LEN  \
        assert(invlist)
 
 PERL_CALLCONV IV       Perl__invlist_search(SV* const invlist, const UV cp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__INVLIST_SEARCH       \
        assert(invlist)
 
 PERL_CALLCONV HV*      Perl__swash_inversion_hash(pTHX_ SV* const swash)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__SWASH_INVERSION_HASH \
        assert(swash)
 
 PERL_STATIC_INLINE bool*       S_get_invlist_offset_addr(SV* invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GET_INVLIST_OFFSET_ADDR       \
        assert(invlist)
 
 PERL_STATIC_INLINE UV* S_invlist_array(SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_INVLIST_ARRAY \
        assert(invlist)
 
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_TOKE_C)
-PERL_CALLCONV SV*      Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV* listsv, I32 minbits, I32 none, SV* invlist, U8* const flags_p)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV SV*      Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV* listsv, I32 minbits, I32 none, SV* invlist, U8* const flags_p);
 #define PERL_ARGS_ASSERT__CORE_SWASH_INIT      \
        assert(pkg); assert(name); assert(listsv)
-
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-STATIC char*   S_form_short_octal_warning(pTHX_ const char * const s, const STRLEN len)
-                       __attribute__warn_unused_result__
-                       __attribute__pure__
-                       __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_FORM_SHORT_OCTAL_WARNING      \
-       assert(s)
-
-STATIC char    S_grok_bslash_c(pTHX_ const char source, const bool output_warning)
-                       __attribute__warn_unused_result__;
-
-STATIC bool    S_grok_bslash_o(pTHX_ char** s, UV* uv, const char** error_msg, const bool output_warning, const bool strict, const bool silence_non_portable, const bool utf8)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
-#define PERL_ARGS_ASSERT_GROK_BSLASH_O \
-       assert(s); assert(uv); assert(error_msg)
-
 PERL_STATIC_INLINE bool        S_grok_bslash_x(pTHX_ char** s, UV* uv, const char** error_msg, const bool output_warning, const bool strict, const bool silence_non_portable, const bool utf8)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GROK_BSLASH_X \
        assert(s); assert(uv); assert(error_msg)
 
 PERL_STATIC_INLINE I32 S_regcurly(const char *s)
                        __attribute__warn_unused_result__
-                       __attribute__pure__
-                       __attribute__nonnull__(1);
+                       __attribute__pure__;
 #define PERL_ARGS_ASSERT_REGCURLY      \
        assert(s)
 
@@ -7350,95 +4929,58 @@ PERL_STATIC_INLINE I32  S_regcurly(const char *s)
 PERL_CALLCONV SV*      Perl__add_range_to_invlist(pTHX_ SV* invlist, const UV start, const UV end)
                        __attribute__warn_unused_result__;
 
-/* PERL_CALLCONV void  _invlist_intersection(pTHX_ SV* const a, SV* const b, SV** i)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3); */
-
-PERL_CALLCONV void     Perl__invlist_intersection_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, const bool complement_b, SV** i)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4);
+/* PERL_CALLCONV void  _invlist_intersection(pTHX_ SV* const a, SV* const b, SV** i); */
+PERL_CALLCONV void     Perl__invlist_intersection_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, const bool complement_b, SV** i);
 #define PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND    \
        assert(b); assert(i)
-
-PERL_CALLCONV void     Perl__invlist_invert(pTHX_ SV* const invlist)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV void     Perl__invlist_invert(pTHX_ SV* const invlist);
 #define PERL_ARGS_ASSERT__INVLIST_INVERT       \
        assert(invlist)
-
-PERL_CALLCONV void     Perl__invlist_populate_swatch(SV* const invlist, const UV start, const UV end, U8* swatch)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(4);
+PERL_CALLCONV void     Perl__invlist_populate_swatch(SV* const invlist, const UV start, const UV end, U8* swatch);
 #define PERL_ARGS_ASSERT__INVLIST_POPULATE_SWATCH      \
        assert(invlist); assert(swatch)
-
-/* PERL_CALLCONV void  _invlist_subtract(pTHX_ SV* const a, SV* const b, SV** result)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3); */
-
-/* PERL_CALLCONV void  _invlist_union(pTHX_ SV* const a, SV* const b, SV** output)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3); */
-
-PERL_CALLCONV void     Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, const bool complement_b, SV** output)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4);
+/* PERL_CALLCONV void  _invlist_subtract(pTHX_ SV* const a, SV* const b, SV** result); */
+/* PERL_CALLCONV void  _invlist_union(pTHX_ SV* const a, SV* const b, SV** output); */
+PERL_CALLCONV void     Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, const bool complement_b, SV** output);
 #define PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND   \
        assert(b); assert(output)
-
 PERL_CALLCONV SV*      Perl__new_invlist(pTHX_ IV initial_size)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV SV*      Perl__setup_canned_invlist(pTHX_ const STRLEN size, const UV element0, UV** other_elements_ptr)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__SETUP_CANNED_INVLIST \
        assert(other_elements_ptr)
 
 PERL_CALLCONV SV*      Perl__swash_to_invlist(pTHX_ SV* const swash)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT__SWASH_TO_INVLIST     \
        assert(swash)
 
 #endif
 #if defined(PERL_IN_REGEXEC_C)
 STATIC SB_enum S_advance_one_SB(pTHX_ U8 ** curpos, const U8 * const strend, const bool utf8_target)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ADVANCE_ONE_SB        \
        assert(curpos); assert(strend)
 
 STATIC WB_enum S_advance_one_WB(pTHX_ U8 ** curpos, const U8 * const strend, const bool utf8_target)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ADVANCE_ONE_WB        \
        assert(curpos); assert(strend)
 
 STATIC SB_enum S_backup_one_SB(pTHX_ const U8 * const strbeg, U8 ** curpos, const bool utf8_target)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_BACKUP_ONE_SB \
        assert(strbeg); assert(curpos)
 
 STATIC WB_enum S_backup_one_WB(pTHX_ WB_enum * previous, const U8 * const strbeg, U8 ** curpos, const bool utf8_target)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_BACKUP_ONE_WB \
        assert(previous); assert(strbeg); assert(curpos)
 
 STATIC char*   S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s, const char *strend, regmatch_info *reginfo)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_FIND_BYCLASS  \
        assert(prog); assert(c); assert(s); assert(strend)
 
@@ -7446,8 +4988,7 @@ STATIC bool       S_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
                        __attribute__warn_unused_result__;
 
 STATIC bool    S_isFOO_utf8_lc(pTHX_ const U8 classnum, const U8* character)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ISFOO_UTF8_LC \
        assert(character)
 
@@ -7455,279 +4996,169 @@ STATIC bool   S_isGCB(const GCB_enum before, const GCB_enum after)
                        __attribute__warn_unused_result__;
 
 STATIC bool    S_isSB(pTHX_ SB_enum before, SB_enum after, const U8 * const strbeg, const U8 * const curpos, const U8 * const strend, const bool utf8_target)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ISSB  \
        assert(strbeg); assert(curpos); assert(strend)
 
 STATIC bool    S_isWB(pTHX_ WB_enum previous, WB_enum before, WB_enum after, const U8 * const strbeg, const U8 * const curpos, const U8 * const strend, const bool utf8_target)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5)
-                       __attribute__nonnull__(pTHX_6);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ISWB  \
        assert(strbeg); assert(curpos); assert(strend)
 
 STATIC I32     S_reg_check_named_buff_matched(const regexp *rex, const regnode *scan)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REG_CHECK_NAMED_BUFF_MATCHED  \
        assert(rex); assert(scan)
 
-STATIC void    S_regcppop(pTHX_ regexp *rex, U32 *maxopenparen_p)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_regcppop(pTHX_ regexp *rex, U32 *maxopenparen_p);
 #define PERL_ARGS_ASSERT_REGCPPOP      \
        assert(rex); assert(maxopenparen_p)
-
-STATIC CHECKPOINT      S_regcppush(pTHX_ const regexp *rex, I32 parenfloor, U32 maxopenparen)
-                       __attribute__nonnull__(pTHX_1);
+STATIC CHECKPOINT      S_regcppush(pTHX_ const regexp *rex, I32 parenfloor, U32 maxopenparen);
 #define PERL_ARGS_ASSERT_REGCPPUSH     \
        assert(rex)
-
 STATIC U8*     S_reghop3(U8 *s, SSize_t off, const U8 *lim)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGHOP3       \
        assert(s); assert(lim)
 
 STATIC U8*     S_reghop4(U8 *s, SSize_t off, const U8 *llim, const U8 *rlim)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(3)
-                       __attribute__nonnull__(4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGHOP4       \
        assert(s); assert(llim); assert(rlim)
 
 STATIC U8*     S_reghopmaybe3(U8 *s, SSize_t off, const U8 *lim)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGHOPMAYBE3  \
        assert(s); assert(lim)
 
 STATIC bool    S_reginclass(pTHX_ regexp * const prog, const regnode * const n, const U8 * const p, const U8 * const p_end, bool const utf8_target)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGINCLASS    \
        assert(n); assert(p); assert(p_end)
 
 STATIC SSize_t S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGMATCH      \
        assert(reginfo); assert(startpos); assert(prog)
 
 STATIC I32     S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p, regmatch_info *const reginfo, I32 max, int depth)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGREPEAT     \
        assert(prog); assert(startposp); assert(p); assert(reginfo)
 
 STATIC I32     S_regtry(pTHX_ regmatch_info *reginfo, char **startposp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGTRY        \
        assert(reginfo); assert(startposp)
 
-STATIC bool    S_to_byte_substr(pTHX_ regexp * prog)
-                       __attribute__nonnull__(pTHX_1);
+STATIC bool    S_to_byte_substr(pTHX_ regexp * prog);
 #define PERL_ARGS_ASSERT_TO_BYTE_SUBSTR        \
        assert(prog)
-
-STATIC void    S_to_utf8_substr(pTHX_ regexp * prog)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_to_utf8_substr(pTHX_ regexp * prog);
 #define PERL_ARGS_ASSERT_TO_UTF8_SUBSTR        \
        assert(prog)
-
 #endif
 #if defined(PERL_IN_SCOPE_C)
 STATIC void    S_save_pushptri32ptr(pTHX_ void *const ptr1, const I32 i, void *const ptr2, const int type);
-STATIC SV*     S_save_scalar_at(pTHX_ SV **sptr, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV*     S_save_scalar_at(pTHX_ SV **sptr, const U32 flags);
 #define PERL_ARGS_ASSERT_SAVE_SCALAR_AT        \
        assert(sptr)
-
 #endif
 #if defined(PERL_IN_SV_C)
-STATIC char *  S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3);
+STATIC char *  S_F0convert(NV nv, char *const endbuf, STRLEN *const len);
 #define PERL_ARGS_ASSERT_F0CONVERT     \
        assert(endbuf); assert(len)
-
-STATIC void    S_anonymise_cv_maybe(pTHX_ GV *gv, CV *cv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_anonymise_cv_maybe(pTHX_ GV *gv, CV *cv);
 #define PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE    \
        assert(gv); assert(cv)
-
-STATIC void    S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache, STRLEN real, SV *const sv)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_4);
+STATIC void    S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache, STRLEN real, SV *const sv);
 #define PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT    \
        assert(func); assert(sv)
-
-STATIC bool    S_curse(pTHX_ SV * const sv, const bool check_refcnt)
-                       __attribute__nonnull__(pTHX_1);
+STATIC bool    S_curse(pTHX_ SV * const sv, const bool check_refcnt);
 #define PERL_ARGS_ASSERT_CURSE \
        assert(sv)
-
 STATIC I32     S_expect_number(pTHX_ char **const pattern)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_EXPECT_NUMBER \
        assert(pattern)
 
-STATIC I32     S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
-                       __attribute__nonnull__(pTHX_2);
+STATIC I32     S_find_array_subscript(pTHX_ const AV *const av, const SV *const val);
 #define PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT  \
        assert(val)
-
-STATIC SV *    S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
-                       __attribute__nonnull__(pTHX_2);
+STATIC SV *    S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val);
 #define PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT   \
        assert(val)
-
-STATIC SV*     S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv, bool match, const char **desc_p)
-                       __attribute__nonnull__(pTHX_4);
+STATIC SV*     S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv, bool match, const char **desc_p);
 #define PERL_ARGS_ASSERT_FIND_UNINIT_VAR       \
        assert(desc_p)
-
-STATIC bool    S_glob_2number(pTHX_ GV* const gv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC bool    S_glob_2number(pTHX_ GV* const gv);
 #define PERL_ARGS_ASSERT_GLOB_2NUMBER  \
        assert(gv)
-
-STATIC void    S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype);
 #define PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB      \
        assert(dstr); assert(sstr)
-
 STATIC SV *    S_more_sv(pTHX);
-STATIC void    S_not_a_number(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_not_a_number(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_NOT_A_NUMBER  \
        assert(sv)
-
-STATIC void    S_not_incrementable(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_not_incrementable(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_NOT_INCREMENTABLE     \
        assert(sv)
-
 STATIC PTR_TBL_ENT_t * S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_PTR_TABLE_FIND        \
        assert(tbl)
 
-STATIC bool    S_sv_2iuv_common(pTHX_ SV *const sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC bool    S_sv_2iuv_common(pTHX_ SV *const sv);
 #define PERL_ARGS_ASSERT_SV_2IUV_COMMON        \
        assert(sv)
-
-STATIC void    S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags);
 #define PERL_ARGS_ASSERT_SV_ADD_ARENA  \
        assert(ptr)
-
-STATIC const char *    S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC const char *    S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size);
 #define PERL_ARGS_ASSERT_SV_DISPLAY    \
        assert(sv); assert(tmpbuf)
-
-STATIC STRLEN  S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target, const U8 *end, STRLEN endu)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC STRLEN  S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target, const U8 *end, STRLEN endu);
 #define PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY     \
        assert(s); assert(target); assert(end)
-
-STATIC STRLEN  S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start, const U8 *const send, STRLEN uoffset, STRLEN uoffset0, STRLEN boffset0)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+STATIC STRLEN  S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start, const U8 *const send, STRLEN uoffset, STRLEN uoffset0, STRLEN boffset0);
 #define PERL_ARGS_ASSERT_SV_POS_U2B_CACHED     \
        assert(sv); assert(mgp); assert(start); assert(send)
-
-STATIC STRLEN  S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send, STRLEN *const uoffset, bool *const at_end)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2)
-                       __attribute__nonnull__(3)
-                       __attribute__nonnull__(4);
+STATIC STRLEN  S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send, STRLEN *const uoffset, bool *const at_end);
 #define PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS   \
        assert(start); assert(send); assert(uoffset); assert(at_end)
-
-STATIC STRLEN  S_sv_pos_u2b_midway(const U8 *const start, const U8 *send, STRLEN uoffset, const STRLEN uend)
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+STATIC STRLEN  S_sv_pos_u2b_midway(const U8 *const start, const U8 *send, STRLEN uoffset, const STRLEN uend);
 #define PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY     \
        assert(start); assert(send)
-
-PERL_STATIC_INLINE void        S_sv_unglob(pTHX_ SV *const sv, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+PERL_STATIC_INLINE void        S_sv_unglob(pTHX_ SV *const sv, U32 flags);
 #define PERL_ARGS_ASSERT_SV_UNGLOB     \
        assert(sv)
-
 STATIC char *  S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(5);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_UIV_2BUF      \
        assert(buf); assert(peob)
 
-STATIC void    S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN ulen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN ulen);
 #define PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE      \
        assert(sv); assert(mgp)
-
-STATIC void    S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte, const STRLEN utf8, const STRLEN blen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC void    S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte, const STRLEN utf8, const STRLEN blen);
 #define PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE      \
        assert(sv); assert(mgp)
-
-STATIC I32     S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
-                       __attribute__nonnull__(pTHX_1);
+STATIC I32     S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask);
 #define PERL_ARGS_ASSERT_VISIT \
        assert(f)
-
 #  if defined(USE_ITHREADS)
 STATIC SV*     S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DUP_COMMON \
        assert(sstr); assert(param)
 
-STATIC SV **   S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest, SSize_t items, CLONE_PARAMS *const param)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_4);
+STATIC SV **   S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest, SSize_t items, CLONE_PARAMS *const param);
 #define PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE   \
        assert(source); assert(dest); assert(param)
-
-STATIC void    S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced);
 #define PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK     \
        assert(unreferenced)
-
 #  endif
 #endif
 #if defined(PERL_IN_SV_C) || defined (PERL_IN_OP_C)
@@ -7738,161 +5169,112 @@ PERL_CALLCONV SV *    Perl_varname(pTHX_ const GV *const gv, const char gvtype, PAD
 #if defined(PERL_IN_TOKE_C)
 STATIC int     S_ao(pTHX_ int toketype);
 STATIC void    S_check_uni(pTHX);
-STATIC void    S_checkcomma(pTHX_ const char *s, const char *name, const char *what)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_checkcomma(pTHX_ const char *s, const char *name, const char *what);
 #define PERL_ARGS_ASSERT_CHECKCOMMA    \
        assert(s); assert(name); assert(what)
-
 STATIC int     S_deprecate_commaless_var_list(pTHX);
 STATIC char *  S_filter_gets(pTHX_ SV *sv, STRLEN append)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_FILTER_GETS   \
        assert(sv)
 
 STATIC HV *    S_find_in_my_stash(pTHX_ const char *pkgname, STRLEN len)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_FIND_IN_MY_STASH      \
        assert(pkgname)
 
-STATIC void    S_force_ident(pTHX_ const char *s, int kind)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_force_ident(pTHX_ const char *s, int kind);
 #define PERL_ARGS_ASSERT_FORCE_IDENT   \
        assert(s)
-
 STATIC void    S_force_ident_maybe_lex(pTHX_ char pit);
 STATIC void    S_force_next(pTHX_ I32 type);
-STATIC char*   S_force_strict_version(pTHX_ char *s)
-                       __attribute__nonnull__(pTHX_1);
+STATIC char*   S_force_strict_version(pTHX_ char *s);
 #define PERL_ARGS_ASSERT_FORCE_STRICT_VERSION  \
        assert(s)
-
-STATIC char*   S_force_version(pTHX_ char *s, int guessing)
-                       __attribute__nonnull__(pTHX_1);
+STATIC char*   S_force_version(pTHX_ char *s, int guessing);
 #define PERL_ARGS_ASSERT_FORCE_VERSION \
        assert(s)
-
-STATIC char*   S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack)
-                       __attribute__nonnull__(pTHX_1);
+STATIC char*   S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack);
 #define PERL_ARGS_ASSERT_FORCE_WORD    \
        assert(start)
-
 PERL_STATIC_INLINE SV* S_get_and_check_backslash_N_name(pTHX_ const char* s, const char* const e)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GET_AND_CHECK_BACKSLASH_N_NAME        \
        assert(s); assert(e)
 
-STATIC void    S_incline(pTHX_ const char *s)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_incline(pTHX_ const char *s);
 #define PERL_ARGS_ASSERT_INCLINE       \
        assert(s)
-
-STATIC int     S_intuit_method(pTHX_ char *s, SV *ioname, CV *cv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC int     S_intuit_method(pTHX_ char *s, SV *ioname, CV *cv);
 #define PERL_ARGS_ASSERT_INTUIT_METHOD \
        assert(s)
-
-STATIC int     S_intuit_more(pTHX_ char *s)
-                       __attribute__nonnull__(pTHX_1);
+STATIC int     S_intuit_more(pTHX_ char *s);
 #define PERL_ARGS_ASSERT_INTUIT_MORE   \
        assert(s)
-
-STATIC I32     S_lop(pTHX_ I32 f, int x, char *s)
-                       __attribute__nonnull__(pTHX_3);
+STATIC I32     S_lop(pTHX_ I32 f, int x, char *s);
 #define PERL_ARGS_ASSERT_LOP   \
        assert(s)
-
 PERL_STATIC_NO_RET void        S_missingterm(pTHX_ char *s)
                        __attribute__noreturn__;
 
-STATIC SV*     S_new_constant(pTHX_ const char *s, STRLEN len, const char *key, STRLEN keylen, SV *sv, SV *pv, const char *type, STRLEN typelen)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_5);
+STATIC SV*     S_new_constant(pTHX_ const char *s, STRLEN len, const char *key, STRLEN keylen, SV *sv, SV *pv, const char *type, STRLEN typelen);
 #define PERL_ARGS_ASSERT_NEW_CONSTANT  \
        assert(key); assert(sv)
-
-STATIC void    S_no_op(pTHX_ const char *const what, char *s)
-                       __attribute__nonnull__(pTHX_1);
+STATIC void    S_no_op(pTHX_ const char *const what, char *s);
 #define PERL_ARGS_ASSERT_NO_OP \
        assert(what)
-
-STATIC void    S_parse_ident(pTHX_ char **s, char **d, char * const e, int allow_package, bool is_utf8)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_parse_ident(pTHX_ char **s, char **d, char * const e, int allow_package, bool is_utf8);
 #define PERL_ARGS_ASSERT_PARSE_IDENT   \
        assert(s); assert(d); assert(e)
-
 STATIC int     S_pending_ident(pTHX);
 STATIC char*   S_scan_const(pTHX_ char *start)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SCAN_CONST    \
        assert(start)
 
 STATIC char*   S_scan_formline(pTHX_ char *s)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SCAN_FORMLINE \
        assert(s)
 
 STATIC char*   S_scan_heredoc(pTHX_ char *s)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SCAN_HEREDOC  \
        assert(s)
 
-STATIC char*   S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC char*   S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni);
 #define PERL_ARGS_ASSERT_SCAN_IDENT    \
        assert(s); assert(dest)
-
 STATIC char*   S_scan_inputsymbol(pTHX_ char *start)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SCAN_INPUTSYMBOL      \
        assert(start)
 
 STATIC char*   S_scan_pat(pTHX_ char *start, I32 type)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SCAN_PAT      \
        assert(start)
 
 STATIC char*   S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims, int re_reparse, char **delimp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SCAN_STR      \
        assert(start)
 
 STATIC char*   S_scan_subst(pTHX_ char *start)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SCAN_SUBST    \
        assert(start)
 
 STATIC char*   S_scan_trans(pTHX_ char *start)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SCAN_TRANS    \
        assert(start)
 
-STATIC char*   S_scan_word(pTHX_ char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_5);
+STATIC char*   S_scan_word(pTHX_ char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp);
 #define PERL_ARGS_ASSERT_SCAN_WORD     \
        assert(s); assert(dest); assert(slp)
-
 STATIC char*   S_skipspace_flags(pTHX_ char *s, U32 flags)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SKIPSPACE_FLAGS       \
        assert(s)
 
@@ -7906,68 +5288,46 @@ STATIC I32      S_sublex_start(pTHX)
                        __attribute__warn_unused_result__;
 
 STATIC char*   S_swallow_bom(pTHX_ U8 *s)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SWALLOW_BOM   \
        assert(s)
 
 STATIC char *  S_tokenize_use(pTHX_ int is_use, char *s)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_TOKENIZE_USE  \
        assert(s)
 
-STATIC SV*     S_tokeq(pTHX_ SV *sv)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV*     S_tokeq(pTHX_ SV *sv);
 #define PERL_ARGS_ASSERT_TOKEQ \
        assert(sv)
-
 STATIC void    S_update_debugger_info(pTHX_ SV *orig_sv, const char *const buf, STRLEN len);
-STATIC int     S_yywarn(pTHX_ const char *const s, U32 flags)
-                       __attribute__nonnull__(pTHX_1);
+STATIC int     S_yywarn(pTHX_ const char *const s, U32 flags);
 #define PERL_ARGS_ASSERT_YYWARN        \
        assert(s)
-
 #endif
 #if defined(PERL_IN_UNIVERSAL_C)
-STATIC bool    S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+STATIC bool    S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags);
 #define PERL_ARGS_ASSERT_ISA_LOOKUP    \
        assert(stash); assert(name)
-
 #endif
 #if defined(PERL_IN_UTF8_C)
 STATIC UV      S_check_locale_boundary_crossing(pTHX_ const U8* const p, const UV result, U8* const ustrp, STRLEN *lenp)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING        \
        assert(p); assert(ustrp); assert(lenp)
 
 PERL_STATIC_INLINE bool        S_is_utf8_common(pTHX_ const U8 *const p, SV **swash, const char * const swashname, SV* const invlist)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_COMMON        \
        assert(p); assert(swash); assert(swashname)
 
 STATIC U8*     S_swash_scan_list_line(pTHX_ U8* l, U8* const lend, UV* min, UV* max, UV* val, const bool wants_value, const U8* const typestr)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4)
-                       __attribute__nonnull__(pTHX_5)
-                       __attribute__nonnull__(pTHX_7);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SWASH_SCAN_LIST_LINE  \
        assert(l); assert(lend); assert(min); assert(max); assert(val); assert(typestr)
 
 STATIC SV*     S_swatch_get(pTHX_ SV* swash, UV start, UV span)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SWATCH_GET    \
        assert(swash)
 
@@ -7976,227 +5336,160 @@ STATIC U8     S_to_lower_latin1(const U8 c, U8 *p, STRLEN *lenp)
 
 #endif
 #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
-PERL_CALLCONV UV       Perl__to_upper_title_latin1(pTHX_ const U8 c, U8 *p, STRLEN *lenp, const char S_or_s)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV UV       Perl__to_upper_title_latin1(pTHX_ const U8 c, U8 *p, STRLEN *lenp, const char S_or_s);
 #define PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1        \
        assert(p); assert(lenp)
-
 #endif
 #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-PERL_CALLCONV UV       Perl__to_fold_latin1(pTHX_ const U8 c, U8 *p, STRLEN *lenp, const unsigned int flags)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV UV       Perl__to_fold_latin1(pTHX_ const U8 c, U8 *p, STRLEN *lenp, const unsigned int flags);
 #define PERL_ARGS_ASSERT__TO_FOLD_LATIN1       \
        assert(p); assert(lenp)
-
 #endif
 #if defined(PERL_IN_UTIL_C)
 STATIC bool    S_ckwarn_common(pTHX_ U32 w);
 STATIC bool    S_invoke_exception_hook(pTHX_ SV *ex, bool warn);
 STATIC SV*     S_mess_alloc(pTHX);
-STATIC SV *    S_with_queued_errors(pTHX_ SV *ex)
-                       __attribute__nonnull__(pTHX_1);
+STATIC SV *    S_with_queued_errors(pTHX_ SV *ex);
 #define PERL_ARGS_ASSERT_WITH_QUEUED_ERRORS    \
        assert(ex)
-
-STATIC void    S_xs_version_bootcheck(pTHX_ U32 items, U32 ax, const char *xs_p, STRLEN xs_len)
-                       __attribute__nonnull__(pTHX_3);
+STATIC void    S_xs_version_bootcheck(pTHX_ U32 items, U32 ax, const char *xs_p, STRLEN xs_len);
 #define PERL_ARGS_ASSERT_XS_VERSION_BOOTCHECK  \
        assert(xs_p)
-
 #  if defined(PERL_MEM_LOG) && !defined(PERL_MEM_LOG_NOIMPL)
-STATIC void    S_mem_log_common(enum mem_log_type mlt, const UV n, const UV typesize, const char *type_name, const SV *sv, Malloc_t oldalloc, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname)
-                       __attribute__nonnull__(4)
-                       __attribute__nonnull__(8)
-                       __attribute__nonnull__(10);
+STATIC void    S_mem_log_common(enum mem_log_type mlt, const UV n, const UV typesize, const char *type_name, const SV *sv, Malloc_t oldalloc, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname);
 #define PERL_ARGS_ASSERT_MEM_LOG_COMMON        \
        assert(type_name); assert(filename); assert(funcname)
-
 #  endif
 #endif
 #if defined(PERL_OP_PARENT)
-PERL_CALLCONV OP*      Perl_op_parent(OP *o)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV OP*      Perl_op_parent(OP *o);
 #define PERL_ARGS_ASSERT_OP_PARENT     \
        assert(o)
-
 #endif
 #if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
 STATIC void    S_pidgone(pTHX_ Pid_t pid, int status);
 #endif
 #if defined(UNLINK_ALL_VERSIONS)
-PERL_CALLCONV I32      Perl_unlnk(pTHX_ const char* f)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV I32      Perl_unlnk(pTHX_ const char* f);
 #define PERL_ARGS_ASSERT_UNLNK \
        assert(f)
-
 #endif
 #if defined(USE_C_BACKTRACE)
-PERL_CALLCONV bool     Perl_dump_c_backtrace(pTHX_ PerlIO* fp, int max_depth, int skip)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV bool     Perl_dump_c_backtrace(pTHX_ PerlIO* fp, int max_depth, int skip);
 #define PERL_ARGS_ASSERT_DUMP_C_BACKTRACE      \
        assert(fp)
-
-/* PERL_CALLCONV void  free_c_backtrace(pTHX_ Perl_c_backtrace* bt)
-                       __attribute__nonnull__(pTHX_1); */
-
+/* PERL_CALLCONV void  free_c_backtrace(pTHX_ Perl_c_backtrace* bt); */
 PERL_CALLCONV Perl_c_backtrace*        Perl_get_c_backtrace(pTHX_ int max_depth, int skip);
 PERL_CALLCONV SV*      Perl_get_c_backtrace_dump(pTHX_ int max_depth, int skip);
 #endif
 #if defined(USE_ITHREADS)
-PERL_CALLCONV PADOFFSET        Perl_alloccopstash(pTHX_ HV *hv)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV PADOFFSET        Perl_alloccopstash(pTHX_ HV *hv);
 #define PERL_ARGS_ASSERT_ALLOCCOPSTASH \
        assert(hv)
-
 PERL_CALLCONV void*    Perl_any_dup(pTHX_ void* v, const PerlInterpreter* proto_perl)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ANY_DUP       \
        assert(proto_perl)
 
-PERL_CALLCONV void     Perl_clone_params_del(CLONE_PARAMS *param)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV void     Perl_clone_params_del(CLONE_PARAMS *param);
 #define PERL_ARGS_ASSERT_CLONE_PARAMS_DEL      \
        assert(param)
-
 PERL_CALLCONV CLONE_PARAMS *   Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(1)
-                       __attribute__nonnull__(2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CLONE_PARAMS_NEW      \
        assert(from); assert(to)
 
 PERL_CALLCONV PERL_CONTEXT*    Perl_cx_dup(pTHX_ PERL_CONTEXT* cx, I32 ix, I32 max, CLONE_PARAMS* param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CX_DUP        \
        assert(param)
 
 PERL_CALLCONV DIR*     Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_DIRP_DUP      \
        assert(param)
 
-PERL_CALLCONV PerlIO*  Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV PerlIO*  Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param);
 #define PERL_ARGS_ASSERT_FP_DUP        \
        assert(param)
-
 PERL_CALLCONV GP*      Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GP_DUP        \
        assert(param)
 
 PERL_CALLCONV HE*      Perl_he_dup(pTHX_ const HE* e, bool shared, CLONE_PARAMS* param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HE_DUP        \
        assert(param)
 
 PERL_CALLCONV HEK*     Perl_hek_dup(pTHX_ HEK* e, CLONE_PARAMS* param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_HEK_DUP       \
        assert(param)
 
 PERL_CALLCONV MAGIC*   Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_MG_DUP        \
        assert(param)
 
-PERL_CALLCONV struct mro_meta* Perl_mro_meta_dup(pTHX_ struct mro_meta* smeta, CLONE_PARAMS* param)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV struct mro_meta* Perl_mro_meta_dup(pTHX_ struct mro_meta* smeta, CLONE_PARAMS* param);
 #define PERL_ARGS_ASSERT_MRO_META_DUP  \
        assert(smeta); assert(param)
-
 PERL_CALLCONV OP*      Perl_newPADOP(pTHX_ I32 type, I32 flags, SV* sv)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_3);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWPADOP      \
        assert(sv)
 
 PERL_CALLCONV PADLIST *        Perl_padlist_dup(pTHX_ PADLIST *srcpad, CLONE_PARAMS *param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_PADLIST_DUP   \
        assert(srcpad); assert(param)
 
 PERL_CALLCONV PADNAME *        Perl_padname_dup(pTHX_ PADNAME *src, CLONE_PARAMS *param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_PADNAME_DUP   \
        assert(src); assert(param)
 
 PERL_CALLCONV PADNAMELIST *    Perl_padnamelist_dup(pTHX_ PADNAMELIST *srcpad, CLONE_PARAMS *param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_PADNAMELIST_DUP       \
        assert(srcpad); assert(param)
 
-PERL_CALLCONV yy_parser*       Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV yy_parser*       Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param);
 #define PERL_ARGS_ASSERT_PARSER_DUP    \
        assert(param)
-
-PERL_CALLCONV PerlInterpreter* perl_clone(PerlInterpreter *proto_perl, UV flags)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV PerlInterpreter* perl_clone(PerlInterpreter *proto_perl, UV flags);
 #define PERL_ARGS_ASSERT_PERL_CLONE    \
        assert(proto_perl)
-
-PERL_CALLCONV void     Perl_re_dup_guts(pTHX_ const REGEXP *sstr, REGEXP *dstr, CLONE_PARAMS* param)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_re_dup_guts(pTHX_ const REGEXP *sstr, REGEXP *dstr, CLONE_PARAMS* param);
 #define PERL_ARGS_ASSERT_RE_DUP_GUTS   \
        assert(sstr); assert(dstr); assert(param)
-
-PERL_CALLCONV void*    Perl_regdupe_internal(pTHX_ REGEXP * const r, CLONE_PARAMS* param)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void*    Perl_regdupe_internal(pTHX_ REGEXP * const r, CLONE_PARAMS* param);
 #define PERL_ARGS_ASSERT_REGDUPE_INTERNAL      \
        assert(r); assert(param)
-
-PERL_CALLCONV void     Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV void     Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param);
 #define PERL_ARGS_ASSERT_RVPV_DUP      \
        assert(dstr); assert(sstr); assert(param)
-
 PERL_CALLCONV PERL_SI* Perl_si_dup(pTHX_ PERL_SI* si, CLONE_PARAMS* param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SI_DUP        \
        assert(param)
 
 PERL_CALLCONV ANY*     Perl_ss_dup(pTHX_ PerlInterpreter* proto_perl, CLONE_PARAMS* param)
                        __attribute__malloc__
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SS_DUP        \
        assert(proto_perl); assert(param)
 
 PERL_CALLCONV SV*      Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DUP        \
        assert(param)
 
 PERL_CALLCONV SV*      Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
-                       __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DUP_INC    \
        assert(param)
 
@@ -8205,35 +5498,21 @@ PERL_CALLCONV SV*       Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *cons
 PERL_CALLCONV bool     Perl__is_cur_LC_category_utf8(pTHX_ int category);
 #endif
 #if defined(USE_LOCALE) && defined(PERL_IN_LOCALE_C)
-STATIC char*   S_stdize_locale(pTHX_ char* locs)
-                       __attribute__nonnull__(pTHX_1);
+STATIC char*   S_stdize_locale(pTHX_ char* locs);
 #define PERL_ARGS_ASSERT_STDIZE_LOCALE \
        assert(locs)
-
 #endif
 #if defined(USE_LOCALE_COLLATE)
-PERL_CALLCONV int      Perl_magic_setcollxfrm(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_setcollxfrm(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM     \
        assert(sv); assert(mg)
-
-PERL_CALLCONV char*    Perl_mem_collxfrm(pTHX_ const char* s, STRLEN len, STRLEN* xlen)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV char*    Perl_mem_collxfrm(pTHX_ const char* s, STRLEN len, STRLEN* xlen);
 #define PERL_ARGS_ASSERT_MEM_COLLXFRM  \
        assert(s); assert(xlen)
-
-/* PERL_CALLCONV char* sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2); */
-
-PERL_CALLCONV char*    Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, I32 const flags)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+/* PERL_CALLCONV char* sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp); */
+PERL_CALLCONV char*    Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, I32 const flags);
 #define PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS     \
        assert(sv); assert(nxp)
-
 #endif
 #if defined(USE_PERLIO)
 PERL_CALLCONV void     Perl_PerlIO_clearerr(pTHX_ PerlIO *f);
@@ -8251,11 +5530,9 @@ PERL_CALLCONV SSize_t    Perl_PerlIO_get_cnt(pTHX_ PerlIO *f)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV STDCHAR *        Perl_PerlIO_get_ptr(pTHX_ PerlIO *f);
-PERL_CALLCONV SSize_t  Perl_PerlIO_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SSize_t  Perl_PerlIO_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
 #define PERL_ARGS_ASSERT_PERLIO_READ   \
        assert(vbuf)
-
 PERL_CALLCONV void     Perl_PerlIO_restore_errno(pTHX_ PerlIO *f);
 PERL_CALLCONV void     Perl_PerlIO_save_errno(pTHX_ PerlIO *f);
 PERL_CALLCONV int      Perl_PerlIO_seek(pTHX_ PerlIO *f, Off_t offset, int whence);
@@ -8272,65 +5549,46 @@ PERL_CALLCONV PerlIO *  Perl_PerlIO_stdout(pTHX)
                        __attribute__warn_unused_result__;
 
 PERL_CALLCONV Off_t    Perl_PerlIO_tell(pTHX_ PerlIO *f);
-PERL_CALLCONV SSize_t  Perl_PerlIO_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SSize_t  Perl_PerlIO_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
 #define PERL_ARGS_ASSERT_PERLIO_UNREAD \
        assert(vbuf)
-
-PERL_CALLCONV SSize_t  Perl_PerlIO_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV SSize_t  Perl_PerlIO_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
 #define PERL_ARGS_ASSERT_PERLIO_WRITE  \
        assert(vbuf)
-
 #endif
 #if defined(USE_QUADMATH)
-PERL_CALLCONV bool     Perl_quadmath_format_needed(const char* format)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV bool     Perl_quadmath_format_needed(const char* format);
 #define PERL_ARGS_ASSERT_QUADMATH_FORMAT_NEEDED        \
        assert(format)
-
-PERL_CALLCONV const char*      Perl_quadmath_format_single(const char* format)
-                       __attribute__nonnull__(1);
+PERL_CALLCONV const char*      Perl_quadmath_format_single(const char* format);
 #define PERL_ARGS_ASSERT_QUADMATH_FORMAT_SINGLE        \
        assert(format)
-
 #endif
 #if defined(WIN32)
 PERL_CALLCONV char*    Perl_my_setlocale(pTHX_ int category, const char* locale)
                        __attribute__pure__;
 
 PERL_CALLCONV_NO_RET void      win32_croak_not_implemented(const char * fname)
-                       __attribute__noreturn__
-                       __attribute__nonnull__(1);
+                       __attribute__noreturn__;
 #define PERL_ARGS_ASSERT_WIN32_CROAK_NOT_IMPLEMENTED   \
        assert(fname)
 
 #endif
 #if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
-PERL_CALLCONV int      Perl_do_aspawn(pTHX_ SV* really, SV** mark, SV** sp)
-                       __attribute__nonnull__(pTHX_2)
-                       __attribute__nonnull__(pTHX_3);
+PERL_CALLCONV int      Perl_do_aspawn(pTHX_ SV* really, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_ASPAWN     \
        assert(mark); assert(sp)
-
-PERL_CALLCONV int      Perl_do_spawn(pTHX_ char* cmd)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_do_spawn(pTHX_ char* cmd);
 #define PERL_ARGS_ASSERT_DO_SPAWN      \
        assert(cmd)
-
-PERL_CALLCONV int      Perl_do_spawn_nowait(pTHX_ char* cmd)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV int      Perl_do_spawn_nowait(pTHX_ char* cmd);
 #define PERL_ARGS_ASSERT_DO_SPAWN_NOWAIT       \
        assert(cmd)
-
 #endif
 #if defined(_MSC_VER)
-PERL_CALLCONV int      Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV int      Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET    \
        assert(sv); assert(mg)
-
 #endif
 #ifdef PERL_CORE
 #  include "pp_proto.h"
index c59ea78..f4b6298 100644 (file)
 /*
        NONCHAR: Non character code points
 
-       \p{Nchar}
+       \p{_Perl_Nchar}
 */
 /*** GENERATED CODE ***/
 #define is_NONCHAR_utf8(s)                                                  \
 /*
        SURROGATE: Surrogate characters
 
-       \p{Gc=Cs}
+       \p{_Perl_Surrogate}
 */
 /*** GENERATED CODE ***/
 #define is_SURROGATE_utf8(s)                                                \
 /*
        PATWS: pattern white space
 
-       \p{PatWS}
+       \p{_Perl_PatWS}
 */
 /*** GENERATED CODE ***/
 #define is_PATWS_safe(s,e,is_utf8)                                          \
 /*
        NONCHAR: Non character code points
 
-       \p{Nchar}
+       \p{_Perl_Nchar}
 */
 /*** GENERATED CODE ***/
 #define is_NONCHAR_utf8(s)                                                  \
 /*
        SURROGATE: Surrogate characters
 
-       \p{Gc=Cs}
+       \p{_Perl_Surrogate}
 */
 /*** GENERATED CODE ***/
 #define is_SURROGATE_utf8(s)                                                \
 /*
        PATWS: pattern white space
 
-       \p{PatWS}
+       \p{_Perl_PatWS}
 */
 /*** GENERATED CODE ***/
 #define is_PATWS_safe(s,e,is_utf8)                                          \
 /*
        NONCHAR: Non character code points
 
-       \p{Nchar}
+       \p{_Perl_Nchar}
 */
 /*** GENERATED CODE ***/
 #define is_NONCHAR_utf8(s)                                                  \
 /*
        SURROGATE: Surrogate characters
 
-       \p{Gc=Cs}
+       \p{_Perl_Surrogate}
 */
 /*** GENERATED CODE ***/
 #define is_SURROGATE_utf8(s)                                                \
 /*
        PATWS: pattern white space
 
-       \p{PatWS}
+       \p{_Perl_PatWS}
 */
 /*** GENERATED CODE ***/
 #define is_PATWS_safe(s,e,is_utf8)                                          \
 /*
        NONCHAR: Non character code points
 
-       \p{Nchar}
+       \p{_Perl_Nchar}
 */
 /*** GENERATED CODE ***/
 #define is_NONCHAR_utf8(s)                                                  \
 /*
        SURROGATE: Surrogate characters
 
-       \p{Gc=Cs}
+       \p{_Perl_Surrogate}
 */
 /*** GENERATED CODE ***/
 #define is_SURROGATE_utf8(s)                                                \
 /*
        PATWS: pattern white space
 
-       \p{PatWS}
+       \p{_Perl_PatWS}
 */
 /*** GENERATED CODE ***/
 #define is_PATWS_safe(s,e,is_utf8)                                          \
 #endif /* H_REGCHARCLASS */
 
 /* Generated from:
- * 083180df694deb1fc173361406c1a75619fb8376403db3a76dc585c1e3951eca lib/Unicode/UCD.pm
+ * 0bca60a25eb4ccf2e04f50446db5f882322f50a9c61dc57bb806ccfc9b2e26a4 lib/Unicode/UCD.pm
  * ae98bec7e4f0564758eed81eca5015481ba32581f8a735a825b71b3bba714450 lib/unicore/ArabicShaping.txt
  * 1687fe5994eb7e5c0dab8503fc2a1b3b479d91af9d3b8055941c9bd791f7d0b5 lib/unicore/BidiBrackets.txt
  * 350d1302116194b0b21def287434b55c5088098fbc726e879f7420a391965643 lib/unicore/BidiMirroring.txt
  * 1a0687fb9c6c4567e853913549df0944fe40821279a3e9cdaa6ab8679bc286fd lib/unicore/extracted/DLineBreak.txt
  * 40bcfed3ca727c19e1331f6c33806231d5f7eeeabd2e6a9e06a3740c85d0c250 lib/unicore/extracted/DNumType.txt
  * a18d502bad39d527ac5586d7bc93e29f565859e3bcc24ada627eff606d6f5fed lib/unicore/extracted/DNumValues.txt
- * c9326eab8d7861c3543963e555d5b927348f4467c93071db23154dece7619654 lib/unicore/mktables
+ * ad739a46951b5f46396074b0682a2cfeed24b633a742a8e1aa0e337f69ef8b1c lib/unicore/mktables
  * 462c9aaa608fb2014cd9649af1c5c009485c60b9c8b15b89401fdc10cf6161c6 lib/unicore/version
  * c6884f4d629f04d1316f3476cb1050b6a1b98ca30c903262955d4eae337c6b1e regen/charset_translations.pl
- * 5e47f645eac3a918246254e19c06b604c8ea088cf62da5be84dcb953ef2bf16c regen/regcharclass.pl
- * 206b60035ff0cec9f7d1701937ecf9226a943faa42dfc4827c37306be64ff18e regen/regcharclass_multi_char_folds.pl
+ * d9c04ac46bdd81bb3e26519f2b8eb6242cb12337205add3f7cf092b0c58dccc4 regen/regcharclass.pl
+ * 393f8d882713a3ba227351ad0f00ea4839fda74fcf77dcd1cdf31519925adba5 regen/regcharclass_multi_char_folds.pl
  * ex: set ro: */
index 3e6ac62..4719d12 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -86,8 +86,8 @@ EXTERN_C const struct regexp_engine my_reg_engine;
 #  include "regcomp.h"
 #endif
 
-#include "dquote_static.c"
-#include "inline_invlist.c"
+#include "dquote_inline.h"
+#include "invlist_inline.h"
 #include "unicode_constants.h"
 
 #define HAS_NONLATIN1_FOLD_CLOSURE(i) \
@@ -2001,7 +2001,7 @@ is the recommended Unicode-aware way of saying
 #define TRIE_STORE_REVCHAR(val)                                            \
     STMT_START {                                                           \
        if (UTF) {                                                         \
-            SV *zlopp = newSV(7); /* XXX: optimize me */                   \
+            SV *zlopp = newSV(UTF8_MAXBYTES);                             \
            unsigned char *flrbbbbb = (unsigned char *) SvPVX(zlopp);      \
             unsigned const char *const kapow = uvchr_to_utf8(flrbbbbb, val); \
            SvCUR_set(zlopp, kapow - flrbbbbb);                            \
@@ -3652,6 +3652,9 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
              * this function, we need to flag any occurrences of the sharp s.
              * This character forbids trie formation (because of added
              * complexity) */
+#if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
+   || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
+                                      || UNICODE_DOT_DOT_VERSION > 0)
            while (s < s_end) {
                 if (*s == LATIN_SMALL_LETTER_SHARP_S) {
                     OP(scan) = EXACTFA_NO_TRIE;
@@ -3659,7 +3662,6 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
                     break;
                 }
                 s++;
-                continue;
             }
         }
        else {
@@ -3705,6 +3707,7 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
                 *min_subtract += len - 1;
                 s += len;
            }
+#endif
        }
     }
 
@@ -6754,7 +6757,8 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
        for (n = 0; n < pRExC_state->num_code_blocks; n++)
            if (pRExC_state->code_blocks[n].src_regex)
                SAVEFREESV(pRExC_state->code_blocks[n].src_regex);
-       SAVEFREEPV(pRExC_state->code_blocks);
+       if(pRExC_state->code_blocks)
+           SAVEFREEPV(pRExC_state->code_blocks); /* often null */
     }
 
     {
@@ -7981,7 +7985,7 @@ S_reg_scan_name(pTHX_ RExC_state_t *pRExC_state, U32 flags)
  * Some of the methods should always be private to the implementation, and some
  * should eventually be made public */
 
-/* The header definitions are in F<inline_invlist.c> */
+/* The header definitions are in F<invlist_inline.h> */
 
 PERL_STATIC_INLINE UV*
 S__invlist_array_init(SV* const invlist, const bool will_have_0)
@@ -8998,7 +9002,13 @@ Perl__add_range_to_invlist(pTHX_ SV* invlist, const UV start, const UV end)
     }
 
     /* Here, can't just append things, create and return a new inversion list
-     * which is the union of this range and the existing inversion list */
+     * which is the union of this range and the existing inversion list.  (If
+     * the new range is well-behaved wrt to the old one, we could just insert
+     * it, doing a Move() down on the tail of the old one (potentially growing
+     * it first).  But to determine that means we would have the extra
+     * (possibly throw-away) work of first finding where the new one goes and
+     * whether it disrupts (splits) an existing range, so it doesn't appear to
+     * me (khw) that it's worth it) */
     range_invlist = _new_invlist(2);
     _append_range_to_invlist(range_invlist, start, end);
 
@@ -11499,8 +11509,13 @@ S_alloc_maybe_populate_EXACT(pTHX_ RExC_state_t *pRExC_state,
             *character = (U8) code_point;
             len = 1;
         } /* Else is folded non-UTF8 */
+#if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
+   || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
+                                      || UNICODE_DOT_DOT_VERSION > 0)
         else if (LIKELY(code_point != LATIN_SMALL_LETTER_SHARP_S)) {
-
+#else
+        else if (1) {
+#endif
             /* We don't fold any non-UTF8 except possibly the Sharp s  (see
              * comments at join_exact()); */
             *character = (U8) code_point;
@@ -11544,9 +11559,13 @@ S_alloc_maybe_populate_EXACT(pTHX_ RExC_state_t *pRExC_state,
     /* A single character node is SIMPLE, except for the special-cased SHARP S
      * under /di. */
     if ((len == 1 || (UTF && len == UNISKIP(code_point)))
-        && (code_point != LATIN_SMALL_LETTER_SHARP_S
-            || ! FOLD || ! DEPENDS_SEMANTICS))
-    {
+#if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
+   || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
+                                      || UNICODE_DOT_DOT_VERSION > 0)
+        && ( code_point != LATIN_SMALL_LETTER_SHARP_S
+            || ! FOLD || ! DEPENDS_SEMANTICS)
+#endif
+    ) {
         *flagp |= SIMPLE;
     }
 
@@ -12644,11 +12663,15 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
                 }
                 else /* A regular FOLD code point */
                     if (! ( UTF
+#if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
+   || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
+                                      || UNICODE_DOT_DOT_VERSION > 0)
                         /* See comments for join_exact() as to why we fold this
                          * non-UTF at compile time */
                         || (node_type == EXACTFU
-                            && ender == LATIN_SMALL_LETTER_SHARP_S)))
-                {
+                            && ender == LATIN_SMALL_LETTER_SHARP_S)
+#endif
+                )) {
                     /* Here, are folding and are not UTF-8 encoded; therefore
                      * the character must be in the range 0-255, and is not /l
                      * (Not /l because we already handled these under /l in
@@ -12661,11 +12684,15 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
                          * 'ss' */
                         if (maybe_exactfu
                             && (PL_fold[ender] != PL_fold_latin1[ender]
+#if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
+   || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
+                                      || UNICODE_DOT_DOT_VERSION > 0)
                                 || ender == LATIN_SMALL_LETTER_SHARP_S
                                 || (len > 0
                                    && isALPHA_FOLD_EQ(ender, 's')
-                                   && isALPHA_FOLD_EQ(*(s-1), 's'))))
-                        {
+                                   && isALPHA_FOLD_EQ(*(s-1), 's'))
+#endif
+                        )) {
                             maybe_exactfu = FALSE;
                         }
                     }
@@ -14008,9 +14035,30 @@ S_add_above_Latin1_folds(pTHX_ RExC_state_t *pRExC_state, const U8 cp, SV** invl
           *invlist = add_cp_to_invlist(*invlist,
                                         LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS);
             break;
+
+#ifdef LATIN_CAPITAL_LETTER_SHARP_S /* not defined in early Unicode releases */
+
         case LATIN_SMALL_LETTER_SHARP_S:
           *invlist = add_cp_to_invlist(*invlist, LATIN_CAPITAL_LETTER_SHARP_S);
             break;
+
+#endif
+
+#if    UNICODE_MAJOR_VERSION < 3                                        \
+   || (UNICODE_MAJOR_VERSION == 3 && UNICODE_DOT_VERSION == 0)
+
+        /* In 3.0 and earlier, U+0130 folded simply to 'i'; and in 3.0.1 so did
+         * U+0131.  */
+        case 'i':
+        case 'I':
+          *invlist =
+             add_cp_to_invlist(*invlist, LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE);
+#   if UNICODE_DOT_DOT_VERSION == 1
+          *invlist = add_cp_to_invlist(*invlist, LATIN_SMALL_LETTER_DOTLESS_I);
+#   endif
+            break;
+#endif
+
         default:
             /* Use deprecated warning to increase the chances of this being
              * output */
@@ -14203,6 +14251,12 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
 
     DEBUG_PARSE("clas");
 
+#if UNICODE_MAJOR_VERSION < 3 /* no multifolds in early Unicode */      \
+    || (UNICODE_MAJOR_VERSION == 3 && UNICODE_DOT_VERSION == 0          \
+                                   && UNICODE_DOT_DOT_VERSION == 0)
+    allow_multi_folds = FALSE;
+#endif
+
     /* Assume we are going to generate an ANYOF node. */
     ret = reganode(pRExC_state,
                    (LOC)
index 07438de..3db9c41 100755 (executable)
@@ -206,10 +206,6 @@ my ($embed, $core, $ext, $api) = setup_embed();
                                    $prefix, $pat, $args;
            }
        }
-       if ( @nonnull ) {
-           my @pos = map { $has_context ? "pTHX_$_" : $_ } @nonnull;
-           push @attrs, map { sprintf( "__attribute__nonnull__(%s)", $_ ) } @pos;
-       }
        if ( @attrs ) {
            $ret .= "\n";
            $ret .= join( "\n", map { "\t\t\t$_" } @attrs );
index 742eb6f..7a03dcd 100644 (file)
@@ -70,7 +70,7 @@ my %asciimap  = map {chr $_, chr $_} 0..255;
 # will work; just choose one
 my %ebcdicmap = map {chr $_, Encode::encode("posix-bc", chr $_)} 0..255;
 
-my $fh = open_new('packsizetables.c', '>', { by => $0, from => 'its data'});
+my $fh = open_new('packsizetables.inc', '>', { by => $0, from => 'its data'});
 
 print $fh <<"EOC";
 #if TYPE_IS_SHRIEKING != 0x100
index 46dce97..a05a7d4 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Regenerate (overwriting only if changed):
 #
-#    mg_names.c
+#    mg_names.inc
 #    mg_raw.h
 #    mg_vtable.h
 #    pod/perlguts.pod
@@ -155,7 +155,7 @@ my %sig =
 my ($vt, $raw, $names) = map {
     open_new($_, '>',
             { by => 'regen/mg_vtable.pl', file => $_, style => '*' });
-} 'mg_vtable.h', 'mg_raw.h', 'mg_names.c';
+} 'mg_vtable.h', 'mg_raw.h', 'mg_names.inc';
 my $guts = open_new("pod/perlguts.pod", ">");
 
 print $vt <<'EOH';
index 4b46bd0..86f3162 100644 (file)
@@ -51,6 +51,7 @@ my @properties = qw(
 
 # Read in the case fold mappings.
 my %folded_closure;
+my %simple_folded_closure;
 my @hex_non_final_folds;
 my @non_latin1_simple_folds;
 my @folds;
@@ -118,8 +119,14 @@ BEGIN { # Have to do this at compile time because using user-defined \p{property
         for my $i (0 .. @folded - 1) {
             my $hex_fold = $folded[$i];
             my $fold = hex $hex_fold;
-            push @{$folded_closure{$fold}}, $from if $fold < 256;
-            push @{$folded_closure{$from}}, $fold if $from < 256;
+            if ($fold < 256) {
+                push @{$folded_closure{$fold}}, $from;
+                push @{$simple_folded_closure{$fold}}, $from if $fold_type ne 'F';
+            }
+            if ($from < 256) {
+                push @{$folded_closure{$from}}, $fold;
+                push @{$simple_folded_closure{$from}}, $fold if $fold_type ne 'F';
+            }
 
             if (($fold_type eq 'C' || $fold_type eq 'S')
                 && ($fold < 256 != $from < 256))
@@ -153,11 +160,16 @@ BEGIN { # Have to do this at compile time because using user-defined \p{property
             push @{$folded_closure{$from}}, @{$folded_closure{$folded}};
         }
     }
+    foreach my $folded (keys %simple_folded_closure) {
+        foreach my $from (grep { $_ < 256 } @{$simple_folded_closure{$folded}}) {
+            push @{$simple_folded_closure{$from}}, @{$simple_folded_closure{$folded}};
+        }
+    }
 
     # We have the single-character folds that cross the 255/256, like KELVIN
     # SIGN => 'k', but we need the closure, so add like 'K' to it
     foreach my $folded (@non_latin1_simple_folds) {
-        foreach my $fold (@{$folded_closure{$folded}}) {
+        foreach my $fold (@{$simple_folded_closure{$folded}}) {
             if ($fold < 256 && ! grep { $fold == $_ } @non_latin1_simple_folds) {
                 push @non_latin1_simple_folds, $fold;
             }
@@ -217,12 +229,18 @@ for my $ord (0..255) {
         } elsif ($name eq 'SPACE') {;
             $re = qr/\p{XPerlSpace}/;
         } elsif ($name eq 'IDFIRST') {
-            $re = qr/[_\p{Alpha}]/;
+            $re = qr/[_\p{XPosixAlpha}]/;
         } elsif ($name eq 'WORDCHAR') {
             $re = qr/\p{XPosixWord}/;
+        } elsif ($name eq 'LOWER') {
+            $re = qr/\p{XPosixLower}/;
+        } elsif ($name eq 'UPPER') {
+            $re = qr/\p{XPosixUpper}/;
         } elsif ($name eq 'ALPHANUMERIC') {
             # Like \w, but no underscore
             $re = qr/\p{Alnum}/;
+        } elsif ($name eq 'ALPHA') {
+            $re = qr/\p{XPosixAlpha}/;
         } elsif ($name eq 'QUOTEMETA') {
             $re = qr/\p{_Perl_Quotemeta}/;
         } elsif ($name eq 'NONLATIN1_FOLD') {
@@ -241,7 +259,7 @@ for my $ord (0..255) {
             use Carp;
             carp $@ if ! defined $re;
         }
-        #print "$ord, $name $property, $re\n";
+        #print STDERR __LINE__, ": $ord, $name $property, $re\n";
         if ($char =~ $re) {  # Add this property if matches
             $bits[$ord] .= '|' if $bits[$ord];
             $bits[$ord] .= "(1U<<_CC_$property)";
@@ -295,10 +313,11 @@ foreach my $charset (get_supported_code_pages()) {
         }
         else {
             use Unicode::UCD qw(prop_invmap);
-            my ($list_ref, $map_ref, $format) = prop_invmap("Name_Alias");
+            my ($list_ref, $map_ref, $format)
+                   = prop_invmap("_Perl_Name_Alias", '_perl_core_internal_ok');
             if ($format !~ /^s/) {
                 use Carp;
-                carp "Unexpected format '$format' for 'Name_Alias";
+                carp "Unexpected format '$format' for '_Perl_Name_Alias";
                 last;
             }
             my $which = Unicode::UCD::search_invlist($list_ref, $ord);
@@ -324,6 +343,8 @@ foreach my $charset (get_supported_code_pages()) {
                     ? sprintf "/* U+%02X %s */ %s,\n", $ord, $name, $bits[$ord]
                     : sprintf "/* 0x%02X U+%02X %s */ %s,\n", $index, $ord, $name, $bits[$ord];
     }
+    $out[-1] =~ s/,$//;     # No trailing comma in the final entry
+
     print $out_fh join "", @out;
     print $out_fh "\n" . get_conditional_compile_line_end();
 }
index 42f5b1c..bc27d0f 100644 (file)
@@ -176,15 +176,14 @@ sub output_invlist ($$;$) {
     my $charset = shift // "";  # name of character set for comment
 
     die "No inversion list for $name" unless defined $invlist
-                                             && ref $invlist eq 'ARRAY'
-                                             && @$invlist;
+                                             && ref $invlist eq 'ARRAY';
 
     # Output the inversion list $invlist using the name $name for it.
     # It is output in the exact internal form for inversion lists.
 
     # Is the last element of the header 0, or 1 ?
     my $zero_or_one = 0;
-    if ($invlist->[0] != 0) {
+    if (@$invlist && $invlist->[0] != 0) {
         unshift @$invlist, 0;
         $zero_or_one = 1;
     }
@@ -235,8 +234,8 @@ sub output_invmap ($$$$$$$) {
     my $name_prefix;
 
     if ($input_format eq 's') {
-        $prop_name = (prop_aliases($prop_name))[1]; # Get full name
-        my $short_name = (prop_aliases($prop_name))[0];
+        $prop_name = (prop_aliases($prop_name))[1] // $prop_name =~ s/^_Perl_//r; # Get full name
+        my $short_name = (prop_aliases($prop_name))[0] // $prop_name;
             my @enums = prop_values($prop_name);
             if (! @enums) {
                 die "Only enum properties are currently handled; '$prop_name' isn't one";
@@ -267,7 +266,8 @@ sub output_invmap ($$$$$$$) {
                 # Assign a value to each element of the enum.  The default
                 # value always gets 0; the others are arbitrarily assigned.
                 my $enum_val = 0;
-                $default = prop_value_aliases($prop_name, $default);
+                my $canonical_default = prop_value_aliases($prop_name, $default);
+                $default = $canonical_default if defined $canonical_default;
                 $enums{$default} = $enum_val++;
                 for my $enum (@enums) {
                     $enums{$enum} = $enum_val++ unless exists $enums{$enum};
@@ -315,7 +315,9 @@ sub output_invmap ($$$$$$$) {
     # The main body are the scalars passed in to this routine.
     for my $i (0 .. $count - 1) {
         my $element = $invmap->[$i];
-        $element = $name_prefix . prop_value_aliases($prop_name, $element);
+        my $full_element_name = prop_value_aliases($prop_name, $element);
+        $element = $full_element_name if defined $full_element_name;
+        $element = $name_prefix . $element;
         print $out_fh "\t$element";
         print $out_fh "," if $i < $count - 1;
         print $out_fh  "\n";
@@ -353,7 +355,8 @@ sub mk_invlist_from_sorted_cp_list {
 my ($cp_ref, $folds_ref, $format) = prop_invmap("Case_Folding");
 die "Could not find inversion map for Case_Folding" unless defined $format;
 die "Incorrect format '$format' for Case_Folding inversion map"
-                                                    unless $format eq 'al';
+                                                    unless $format eq 'al'
+                                                           || $format eq 'a';
 my @has_multi_char_fold;
 my @is_non_final_fold;
 
@@ -447,9 +450,9 @@ for my $charset (get_supported_code_pages()) {
                              &UpperLatin1
                              _Perl_IDStart
                              _Perl_IDCont
-                             Grapheme_Cluster_Break,EDGE
-                             Word_Break,EDGE,UNKNOWN
-                             Sentence_Break,EDGE
+                             _Perl_GCB,EDGE
+                             _Perl_WB,EDGE,UNKNOWN
+                             _Perl_SB,EDGE
                            )
     ) {
 
@@ -489,20 +492,37 @@ for my $charset (get_supported_code_pages()) {
         else {
             @invlist = prop_invlist($lookup_prop, '_perl_core_internal_ok');
             if (! @invlist) {
-                my ($list_ref, $map_ref, $format, $default);
 
-                ($list_ref, $map_ref, $format, $default)
+                # If couldn't find a non-empty inversion list, see if it is
+                # instead an inversion map
+                my ($list_ref, $map_ref, $format, $default)
                           = prop_invmap($lookup_prop, '_perl_core_internal_ok');
-                die "Could not find inversion list for '$lookup_prop'" unless $list_ref;
-                @invlist = @$list_ref;
-                @invmap = @$map_ref;
-                $map_format = $format;
-                $map_default = $default;
-                $maps_to_code_point = $map_format =~ /x/;
-                $to_adjust = $map_format =~ /a/;
+                if (! $list_ref) {
+                    # An empty return here could mean an unknown property, or
+                    # merely that the original inversion list is empty.  Call
+                    # in scalar context to differentiate
+                    my $count = prop_invlist($lookup_prop,
+                                             '_perl_core_internal_ok');
+                    die "Could not find inversion list for '$lookup_prop'"
+                                                          unless defined $count;
+                }
+                else {
+                    @invlist = @$list_ref;
+                    @invmap = @$map_ref;
+                    $map_format = $format;
+                    $map_default = $default;
+                    $maps_to_code_point = $map_format =~ /x/;
+                    $to_adjust = $map_format =~ /a/;
+                }
             }
         }
-        die "Could not find inversion list for '$lookup_prop'" unless @invlist;
+
+
+        # Short-circuit an empty inversion list.
+        if (! @invlist) {
+            output_invlist($prop_name, \@invlist, $charset);
+            next;
+        }
 
         # Re-order the Unicode code points to native ones for this platform.
         # This is only needed for code points below 256, because native code
index bcc1c21..51e01b6 100644 (file)
@@ -477,14 +477,32 @@ addbits($_, 7 => qw(OPpPV_IS_UTF8 UTF)) for qw(last redo next goto dump);
 
 
 
+# note that for refassign, this bit can mean either OPpPAD_STATE or
+# OPpOUR_INTRO depending on the type of the LH child, .e.g.
+#   \our   $foo = ...
+#   \state $foo = ...
+
 addbits($_, 6 => qw(OPpPAD_STATE STATE))  for qw(padav padhv padsv lvavref
                                                  lvref refassign pushmark);
 
+# NB: both sassign and aassign use the 'OPpASSIGN' naming convention
+# for their private flags
+
+# there *may* be common scalar items on both sides of a list assign:
+# run-time checking will be needed.
+addbits('aassign', 6 => qw(OPpASSIGN_COMMON_SCALAR COM_SCALAR));
+#
+# as above, but it's possible to check for non-commonality with just
+# a SvREFCNT(lhs) == 1 test for each lhs element
+addbits('aassign', 5 => qw(OPpASSIGN_COMMON_RC1 COM_RC1));
 
+# run-time checking is required for an aggregate on the LHS
+addbits('aassign', 4 => qw(OPpASSIGN_COMMON_AGG COM_AGG));
 
-addbits('aassign', 6 => qw(OPpASSIGN_COMMON COMMON));
 
 
+# NB: both sassign and aassign use the 'OPpASSIGN' naming convention
+# for their private flags
 
 addbits('sassign',
     6 => qw(OPpASSIGN_BACKWARDS BKWARD), # Left & right switched
@@ -735,6 +753,7 @@ addbits($_,
                              3   OPpLVREF_CV   CV
                          )],
          },
+   #6 => qw(OPpPAD_STATE STATE),
    #7 => qw(OPpLVAL_INTRO LVINTRO),
 ) for 'refassign', 'lvref';
 
index 165e1c1..c95ab2d 100644 (file)
@@ -3,7 +3,7 @@
 # Regenerate (overwriting only if changed):
 #
 #    overload.h
-#    overload.c
+#    overload.inc
 #    lib/overload/numbers.pm
 #
 # from information stored in the DATA section of this file.
@@ -34,7 +34,7 @@ my ($c, $h) = map {
     open_new($_, '>',
             { by => 'regen/overload.pl', file => $_, style => '*',
               copyright => [1997, 1998, 2000, 2001, 2005 .. 2007, 2011] });
-} 'overload.c', 'overload.h';
+} 'overload.inc', 'overload.h';
 
 mkdir("lib/overload", 0777) unless -d 'lib/overload';
 my $p = open_new('lib/overload/numbers.pm', '>',
index 184437e..9115eaf 100755 (executable)
@@ -610,6 +610,8 @@ sub length_optree {
 
     my $else= ( $opt{else} ||= 0 );
 
+    return $else if $self->{count} == 0;
+
     my $method = $type =~ /generic/ ? 'generic_optree' : 'optree';
     if ($method eq 'optree' && scalar keys %{$self->{size}{$type}} == 1) {
 
@@ -1629,11 +1631,11 @@ REPLACEMENT: Unicode REPLACEMENT CHARACTER
 
 NONCHAR: Non character code points
 => UTF8 :fast
-\p{Nchar}
+\p{_Perl_Nchar}
 
 SURROGATE: Surrogate characters
 => UTF8 :fast
-\p{Gc=Cs}
+\p{_Perl_Surrogate}
 
 # This program was run with this enabled, and the results copied to utf8.h;
 # then this was commented out because it takes so long to figure out these 2
@@ -1695,4 +1697,4 @@ PROBLEMATIC_LOCALE_FOLDEDS_START : The first folded character of folds which are
 
 PATWS: pattern white space
 => generic cp : safe
-\p{PatWS}
+\p{_Perl_PatWS}
index dfc8f9f..5ea9d33 100644 (file)
@@ -63,6 +63,8 @@ sub multi_char_folds ($) {
                             # multi-char folds; false if just the ones that
                             # are all ascii
 
+    return () if pack("C*", split /\./, Unicode::UCD::UnicodeVersion()) lt v3.0.1;
+
     my ($cp_ref, $folds_ref, $format) = prop_invmap("Case_Folding");
     die "Could not find inversion map for Case_Folding" unless defined $format;
     die "Incorrect format '$format' for Case_Folding inversion map"
index 81069fa..184d86b 100644 (file)
@@ -37,7 +37,7 @@ sub open_new {
     my ($final_name, $mode, $header, $force) = @_;
     my $name = $final_name . '-new';
     my $lang = $final_name =~ /\.pod$/ ? 'Pod' :
-       $final_name =~ /\.(?:c|h|tab|act)$/ ? 'C' : 'Perl';
+       $final_name =~ /\.(?:c|h|inc|tab|act)$/ ? 'C' : 'Perl';
     if ($force && -e $final_name) {
         chmod 0777, $name if $Needs_Write;
         CORE::unlink $final_name
index 936c1a8..5004e1d 100644 (file)
@@ -3,6 +3,7 @@ use strict;
 use warnings;
 require 'regen/regen_lib.pl';
 require 'regen/charset_translations.pl';
+use Unicode::UCD;
 use charnames qw(:loose);
 
 my $out_fh = open_new('unicode_constants.h', '>',
@@ -14,10 +15,11 @@ print $out_fh <<END;
 #ifndef H_UNICODE_CONSTANTS   /* Guard against nested #includes */
 #define H_UNICODE_CONSTANTS   1
 
-/* This file contains #defines for various Unicode code points.  The values
- * the macros expand to are the native Unicode code point, or all or portions
- * of the UTF-8 encoding for the code point.  In the former case, the macro
- * name has the suffix "_NATIVE"; otherwise, the suffix "_UTF8".
+/* This file contains #defines for the version of Unicode being used and
+ * various Unicode code points.  The values the code point macros expand to
+ * are the native Unicode code point, or all or portions of the UTF-8 encoding
+ * for the code point.  In the former case, the macro name has the suffix
+ * "_NATIVE"; otherwise, the suffix "_UTF8".
  *
  * The macros that have the suffix "_UTF8" may have further suffixes, as
  * follows:
@@ -28,34 +30,18 @@ print $out_fh <<END;
 
 END
 
-# The data are at the end of this file.  A blank line is output as-is.
-# Comments (lines whose first non-blank is a '#') are converted to C-style,
-# though empty comments are converted to blank lines.  Otherwise, each line
-# represents one #define, and begins with either a Unicode character name with
-# the blanks and dashes in it squeezed out or replaced by underscores; or it
-# may be a hexadecimal Unicode code point of the form U+xxxx.  In the latter
-# case, the name will be looked-up to use as the name of the macro.  In either
-# case, the macro name will have suffixes as listed above, and all blanks and
-# dashes will be replaced by underscores.
-#
-# Each line may optionally have one of the following flags on it, separated by
-# white space from the initial token.
-#   string  indicates that the output is to be of the string form
-#           described in the comments above that are placed in the file.
-#   string_skip_ifundef  is the same as 'string', but instead of dying if the
-#           code point doesn't exist, the line is just skipped: no output is
-#           generated for it
-#   first   indicates that the output is to be of the FIRST_BYTE form.
-#   tail    indicates that the output is of the _TAIL form.
-#   native  indicates that the output is the code point, converted to the
-#           platform's native character set if applicable
-#
-# If the code point has no official name, the desired name may be appended
-# after the flag, which will be ignored if there is an official name.
-#
-# This program is used to make it convenient to create compile time constants
-# of UTF-8, and to generate proper EBCDIC as well as ASCII without manually
-# having to figure things out.
+my $version = Unicode::UCD::UnicodeVersion();
+my ($major, $dot, $dotdot) = $version =~ / (.*?) \. (.*?) (?: \. (.*) )? $ /x;
+$dotdot = 0 unless defined $dotdot;
+
+print $out_fh <<END;
+#define UNICODE_MAJOR_VERSION   $major
+#define UNICODE_DOT_VERSION     $dot
+#define UNICODE_DOT_DOT_VERSION $dotdot
+
+END
+
+# The data are at __DATA__  in this file.
 
 my @data = <DATA>;
 
@@ -95,13 +81,13 @@ foreach my $charset (get_supported_code_pages()) {
         my $name;
         my $cp;
         my $U_cp;   # code point in Unicode (not-native) terms
-        my $undef_ok = $desired_name || $flag =~ /skip_if_undef/;
 
         if ($name_or_cp =~ /^U\+(.*)/) {
             $U_cp = hex $1;
             $name = charnames::viacode($name_or_cp);
             if (! defined $name) {
-                die "Unknown code point '$name_or_cp' at line $.: $_\n" unless $undef_ok;
+                next if $flag =~ /skip_if_undef/;
+                die "Unknown code point '$name_or_cp' at line $.: $_\n" unless $desired_name;
                 $name = "";
             }
         }
@@ -176,6 +162,37 @@ print $out_fh "\n#endif /* H_UNICODE_CONSTANTS */\n";
 
 read_only_bottom_close_and_rename($out_fh);
 
+# DATA FORMAT
+#
+# A blank line is output as-is.
+# Comments (lines whose first non-blank is a '#') are converted to C-style,
+# though empty comments are converted to blank lines.  Otherwise, each line
+# represents one #define, and begins with either a Unicode character name with
+# the blanks and dashes in it squeezed out or replaced by underscores; or it
+# may be a hexadecimal Unicode code point of the form U+xxxx.  In the latter
+# case, the name will be looked-up to use as the name of the macro.  In either
+# case, the macro name will have suffixes as listed above, and all blanks and
+# dashes will be replaced by underscores.
+#
+# Each line may optionally have one of the following flags on it, separated by
+# white space from the initial token.
+#   string  indicates that the output is to be of the string form
+#           described in the comments above that are placed in the file.
+#   string_skip_ifundef  is the same as 'string', but instead of dying if the
+#           code point doesn't exist, the line is just skipped: no output is
+#           generated for it
+#   first   indicates that the output is to be of the FIRST_BYTE form.
+#   tail    indicates that the output is of the _TAIL form.
+#   native  indicates that the output is the code point, converted to the
+#           platform's native character set if applicable
+#
+# If the code point has no official name, the desired name may be appended
+# after the flag, which will be ignored if there is an official name.
+#
+# This program is used to make it convenient to create compile time constants
+# of UTF-8, and to generate proper EBCDIC as well as ASCII without manually
+# having to figure things out.
+
 __DATA__
 U+017F string
 
@@ -184,10 +201,12 @@ U+0300 string
 U+0399 string
 U+03BC string
 
-U+1E9E string
+U+1E9E string_skip_if_undef
 
 U+FB05 string
 U+FB06 string
+U+0130 string
+U+0131 string
 
 U+2010 string
 U+D800 first FIRST_SURROGATE
index 3455498..f2517e5 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -83,7 +83,7 @@
 #  include "regcomp.h"
 #endif
 
-#include "inline_invlist.c"
+#include "invlist_inline.h"
 #include "unicode_constants.h"
 
 #ifdef DEBUGGING
@@ -192,7 +192,7 @@ static const char* const non_utf8_target_but_utf8_required
                                         PL_utf8_swash_ptrs[_CC_WORDCHAR],     \
                                         "",                                   \
                                         PL_XPosix_ptrs[_CC_WORDCHAR],         \
-                                        LATIN_CAPITAL_LETTER_SHARP_S_UTF8);
+                                        LATIN_SMALL_LIGATURE_LONG_S_T_UTF8);
 
 #define PLACEHOLDER    /* Something for the preprocessor to grab onto */
 /* TODO: Combine JUMPABLE and HAS_TEXT to cache OP(rn) */
@@ -1753,7 +1753,7 @@ REXEC_FBC_SCAN( /* Loops while (s < strend) */                 \
 #define getGCB_VAL_CP(cp)                                                      \
           _generic_GET_BREAK_VAL_CP(                                           \
                                     PL_GCB_invlist,                            \
-                                    Grapheme_Cluster_Break_invmap,             \
+                                    _Perl_GCB_invmap,                          \
                                     (cp))
 
 /* Returns the GCB value for the first code point in the UTF-8 encoded string
@@ -1766,7 +1766,7 @@ REXEC_FBC_SCAN( /* Loops while (s < strend) */                 \
 #define getSB_VAL_CP(cp)                                                       \
           _generic_GET_BREAK_VAL_CP(                                           \
                                     PL_SB_invlist,                             \
-                                    Sentence_Break_invmap,                     \
+                                    _Perl_SB_invmap,                     \
                                     (cp))
 
 /* Returns the SB value for the first code point in the UTF-8 encoded string
@@ -1778,7 +1778,7 @@ REXEC_FBC_SCAN( /* Loops while (s < strend) */                 \
 #define getWB_VAL_CP(cp)                                                       \
           _generic_GET_BREAK_VAL_CP(                                           \
                                     PL_WB_invlist,                             \
-                                    Word_Break_invmap,                         \
+                                    _Perl_WB_invmap,                         \
                                     (cp))
 
 /* Returns the WB value for the first code point in the UTF-8 encoded string
diff --git a/scope.c b/scope.c
index 5699d7c..9768c30 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -720,16 +720,6 @@ Perl_save_alloc(pTHX_ I32 size, I32 pad)
     return start;
 }
 
-void
-Perl_save_aliased_sv(pTHX_ GV *gv)
-{
-    dSS_ADD;
-    PERL_ARGS_ASSERT_SAVE_ALIASED_SV;
-    SS_ADD_PTR(gp_ref(GvGP(gv)));
-    SS_ADD_UV(SAVEt_GP_ALIASED_SV | cBOOL(GvALIASED_SV(gv)) << 8);
-    SS_ADD_END(2);
-}
-
 
 
 #define ARG0_SV  MUTABLE_SV(arg0.any_ptr)
@@ -1252,24 +1242,6 @@ Perl_leave_scope(pTHX_ I32 base)
        case SAVEt_READONLY_OFF:
            SvREADONLY_off(ARG0_SV);
            break;
-       case SAVEt_GP_ALIASED_SV: {
-           /* The GP may have been abandoned, leaving the savestack with
-              the only remaining reference to it.  */
-           GP * const gp = (GP *)ARG0_PTR;
-           if (gp->gp_refcnt == 1) {
-               GV * const gv = (GV *)sv_2mortal(newSV_type(SVt_PVGV));
-               isGV_with_GP_on(gv);
-               GvGP_set(gv,gp);
-               gp_free(gv);
-               isGV_with_GP_off(gv);
-           }
-           else {
-               gp->gp_refcnt--;
-               if (uv >> 8) gp->gp_flags |=  GPf_ALIASED_SV;
-               else         gp->gp_flags &= ~GPf_ALIASED_SV;
-           }
-           break;
-       }
        default:
            Perl_croak(aTHX_ "panic: leave_scope inconsistency %u", type);
        }
diff --git a/scope.h b/scope.h
index 97ef3fa..0de5b77 100644 (file)
--- a/scope.h
+++ b/scope.h
@@ -21,7 +21,7 @@
 
 /* one arg */
 
-#define SAVEt_GP_ALIASED_SV    4
+/*** SPARE                     4 ***/
 #define SAVEt_BOOL             5
 #define SAVEt_COMPILE_WARNINGS 6
 #define SAVEt_COMPPAD          7
diff --git a/sv.c b/sv.c
index 210150b..cd1bbf5 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -4119,18 +4119,7 @@ Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
            && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
            GvFLAGS(dstr) |= import_flag;
        }
-       if (import_flag == GVf_IMPORTED_SV) {
-           if (intro) {
-               save_aliased_sv((GV *)dstr);
-           }
-           /* Turn off the flag if sref is not referenced elsewhere,
-              even by weak refs.  (SvRMAGICAL is a pessimistic check for
-              back refs.)  */
-           if (SvREFCNT(sref) <= 2 && !SvRMAGICAL(sref))
-               GvALIASED_SV_off(dstr);
-           else
-               GvALIASED_SV_on(dstr);
-       }
+
        if (stype == SVt_PVHV) {
            const char * const name = GvNAME((GV*)dstr);
            const STRLEN len = GvNAMELEN(dstr);
@@ -7203,7 +7192,7 @@ the start of the string, to a count of the equivalent number of bytes; if
 lenp is non-zero, it does the same to lenp, but this time starting from
 the offset, rather than from the start
 of the string.  Handles type coercion.
-I<flags> is passed to C<SvPV_flags>, and usually should be
+C<flags> is passed to C<SvPV_flags>, and usually should be
 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
 
 =cut
@@ -7480,7 +7469,7 @@ S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
 
 Converts the offset from a count of bytes from the start of the string, to
 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
-I<flags> is passed to C<SvPV_flags>, and usually should be
+C<flags> is passed to C<SvPV_flags>, and usually should be
 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
 
 =cut
@@ -8245,16 +8234,6 @@ Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
                            amount left, otherwise this is the amount it
                            can hold. */
 
-#if defined(__VMS) && defined(PERLIO_IS_STDIO)
-    /* An ungetc()d char is handled separately from the regular
-     * buffer, so we getc() it back out and stuff it in the buffer.
-     */
-    i = PerlIO_getc(fp);
-    if (i == EOF) return 0;
-    *(--((*fp)->_ptr)) = (unsigned char) i;
-    (*fp)->_cnt++;
-#endif
-
     /* Here is some breathtakingly efficient cheating */
 
     /* When you read the following logic resist the urge to think
@@ -10723,7 +10702,7 @@ Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
  * The non-double-double-long-double overshoots since all bits of NV
  * are not mantissa bits, there are also exponent bits. */
 #ifdef LONGDOUBLE_DOUBLEDOUBLE
-#  define VHEX_SIZE (1+DOUBLEDOUBLE_MAXBITS/4)
+#  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
 #else
 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
 #endif
@@ -10820,7 +10799,7 @@ S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
 
     /* HEXTRACTSIZE is the maximum number of xdigits. */
 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
-#  define HEXTRACTSIZE (DOUBLEDOUBLE_MAXBITS/4)
+#  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
 #else
 #  define HEXTRACTSIZE 2 * NVSIZE
 #endif
@@ -10828,8 +10807,10 @@ S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
     const U8* vmaxend = vhex + HEXTRACTSIZE;
     PERL_UNUSED_VAR(ix); /* might happen */
     (void)Perl_frexp(PERL_ABS(nv), exponent);
-    if (vend && (vend <= vhex || vend > vmaxend))
-        Perl_croak(aTHX_ "Hexadecimal float: internal error");
+    if (vend && (vend <= vhex || vend > vmaxend)) {
+        /* diag_listed_as: Hexadecimal float: internal error (%s) */
+        Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
+    }
     {
         /* First check if using long doubles. */
 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
@@ -11035,8 +11016,10 @@ S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
          * which is convenient since the HEXTRACTSIZE is tricky
          * for double-double. */
         ixmin < 0 || ixmax >= NVSIZE ||
-        (vend && v != vend))
-        Perl_croak(aTHX_ "Hexadecimal float: internal error");
+        (vend && v != vend)) {
+        /* diag_listed_as: Hexadecimal float: internal error (%s) */
+        Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
+    }
     return v;
 }
 
@@ -14169,13 +14152,6 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
            ptr = POPPTR(ss,ix);
            TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
            break;
-       case SAVEt_GP_ALIASED_SV: {
-           GP * gp_ptr = (GP *)POPPTR(ss,ix);
-           GP * new_gp_ptr = gp_dup(gp_ptr, param);
-           TOPPTR(nss,ix) = new_gp_ptr;
-           new_gp_ptr->gp_refcnt++;
-           break;
-       }
        default:
            Perl_croak(aTHX_
                       "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
@@ -14244,7 +14220,7 @@ the ptr_table using the function
 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
 reason to keep it around is if you want to dup some of your own
 variable who are outside the graph perl scans, example of this
-code is in threads.xs create.
+code is in F<threads.xs> create.
 
 CLONEf_CLONE_HOST -
 This is a win32 thing, it is ignored on unix, it tells perls
@@ -14410,7 +14386,6 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
     PL_minus_F         = proto_perl->Iminus_F;
     PL_doswitches      = proto_perl->Idoswitches;
     PL_dowarn          = proto_perl->Idowarn;
-    PL_sawalias                = proto_perl->Isawalias;
 #ifdef PERL_SAWAMPERSAND
     PL_sawampersand    = proto_perl->Isawampersand;
 #endif
diff --git a/sv.h b/sv.h
index 0076ddd..bc5daa9 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -16,7 +16,7 @@
 =head1 SV Flags
 
 =for apidoc AmU||svtype
-An enum of flags for Perl types.  These are found in the file B<sv.h>
+An enum of flags for Perl types.  These are found in the file F<sv.h>
 in the C<svtype> enum.  Test these flags with the C<SvTYPE> macro.
 
 The types are:
@@ -278,7 +278,7 @@ All of the following SvREFCNT_inc* macros are optimized versions of
 SvREFCNT_inc, and can be replaced with SvREFCNT_inc.
 
 =for apidoc Am|SV*|SvREFCNT_inc_NN|SV* sv
-Same as SvREFCNT_inc, but can only be used if you know I<sv>
+Same as SvREFCNT_inc, but can only be used if you know C<sv>
 is not NULL.  Since we don't have to check the NULLness, it's faster
 and smaller.
 
@@ -288,7 +288,7 @@ return value.  The macro doesn't need to return a meaningful value.
 
 =for apidoc Am|void|SvREFCNT_inc_void_NN|SV* sv
 Same as SvREFCNT_inc, but can only be used if you don't need the return
-value, and you know that I<sv> is not NULL.  The macro doesn't need
+value, and you know that C<sv> is not NULL.  The macro doesn't need
 to return a meaningful value, or check for NULLness, so it's smaller
 and faster.
 
@@ -297,7 +297,7 @@ Same as SvREFCNT_inc, but can only be used with expressions without side
 effects.  Since we don't have to store a temporary value, it's faster.
 
 =for apidoc Am|SV*|SvREFCNT_inc_simple_NN|SV* sv
-Same as SvREFCNT_inc_simple, but can only be used if you know I<sv>
+Same as SvREFCNT_inc_simple, but can only be used if you know C<sv>
 is not NULL.  Since we don't have to check the NULLness, it's faster
 and smaller.
 
@@ -307,15 +307,15 @@ return value.  The macro doesn't need to return a meaningful value.
 
 =for apidoc Am|void|SvREFCNT_inc_simple_void_NN|SV* sv
 Same as SvREFCNT_inc, but can only be used if you don't need the return
-value, and you know that I<sv> is not NULL.  The macro doesn't need
+value, and you know that C<sv> is not NULL.  The macro doesn't need
 to return a meaningful value, or check for NULLness, so it's smaller
 and faster.
 
 =for apidoc Am|void|SvREFCNT_dec|SV* sv
-Decrements the reference count of the given SV.  I<sv> may be NULL.
+Decrements the reference count of the given SV.  C<sv> may be NULL.
 
 =for apidoc Am|void|SvREFCNT_dec_NN|SV* sv
-Same as SvREFCNT_dec, but can only be used if you know I<sv>
+Same as SvREFCNT_dec, but can only be used if you know C<sv>
 is not NULL.  Since we don't have to check the NULLness, it's faster
 and smaller.
 
@@ -399,7 +399,9 @@ perform the upgrade if necessary.  See C<svtype>.
 #define SVf_BREAK      0x04000000  /* refcnt is artificially low - used by
                                       SVs in final arena cleanup.
                                       Set in S_regtry on PL_reg_curpm, so that
-                                      perl_destruct will skip it. */
+                                      perl_destruct will skip it.
+                                       Used for mark and sweep by OP_AASSIGN
+                                       */
 #define SVf_READONLY   0x08000000  /* may not be modified */
 
 
@@ -2156,11 +2158,11 @@ Creates a new SV containing the pad name.
 /*
 =for apidoc Am|void|SvOOK_offset|NN SV*sv|STRLEN len
 
-Reads into I<len> the offset from SvPVX back to the true start of the
+Reads into C<len> the offset from SvPVX back to the true start of the
 allocated buffer, which will be non-zero if C<sv_chop> has been used to
 efficiently remove characters from start of the buffer.  Implemented as a
-macro, which takes the address of I<len>, which must be of type C<STRLEN>.
-Evaluates I<sv> more than once.  Sets I<len> to 0 if C<SvOOK(sv)> is false.
+macro, which takes the address of C<len>, which must be of type C<STRLEN>.
+Evaluates C<sv> more than once.  Sets C<len> to 0 if C<SvOOK(sv)> is false.
 
 =cut
 */
index 6f3c4b5..f52d8e4 100644 (file)
@@ -127,7 +127,7 @@ $/ = "\n";
  # binary-incompatible previously-installed version. The eval won’t help in
  # intercepting a SIGTRAP.
  local @INC = ("../lib", "lib", @INC);
- if (not eval q/use PerelIO::scalar; 1/) {
+ if (not eval q/use PerlIO::scalar; 1/) {
   # In-memory files necessitate PerlIO::scalar, thus a perl with
   # perlio and dynaloading enabled. miniperl won't be able to run this
   # test, so skip it
index a061ac8..78ff6cd 100644 (file)
@@ -234,3 +234,48 @@ Constant(q) unknown at - line 12, near ""a""
 <<"foo
 EXPECT
 Unterminated delimiter for here document at - line 1.
+########
+# NAME my (our $x) errors
+my (our $x);
+EXPECT
+Can't redeclare "our" in "my" at - line 1, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME our (my $x) errors
+our (my $x);
+EXPECT
+Can't redeclare "my" in "our" at - line 1, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME state (my $x) errors
+use feature 'state';
+state (my $x);
+EXPECT
+Can't redeclare "my" in "state" at - line 2, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME our (state $x) errors
+use feature 'state';
+our (state $x);
+EXPECT
+Can't redeclare "state" in "our" at - line 2, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME my (my $x) errors
+my (my $x, $y, $z);
+EXPECT
+Can't redeclare "my" in "my" at - line 1, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME our (our $x) errors
+our ($x, our($y), $z);
+EXPECT
+Can't redeclare "our" in "our" at - line 1, near ", "
+Execution of - aborted due to compilation errors.
+########
+# NAME state (state $x) errors
+use feature 'state';
+state ($x, $y, state $z);
+EXPECT
+Can't redeclare "state" in "state" at - line 2, near ", "
+Execution of - aborted due to compilation errors.
index a1e07f8..6338964 100644 (file)
@@ -633,6 +633,7 @@ EOM
 }
 my $file = "./xcv" ;
 open(F, ">$file") ; 
+binmode F;
 my $a = sysread(F, $a,10) ;
 no warnings 'io' ;
 my $a = sysread(F, $a,10) ;
@@ -644,11 +645,11 @@ sysread(NONEXISTENT, $a, 10);
 read(NONEXISTENT, $a, 10);
 unlink $file ;
 EXPECT
-Filehandle F opened only for output at - line 12.
-sysread() on closed filehandle F at - line 17.
-read() on closed filehandle F at - line 18.
-sysread() on unopened filehandle NONEXISTENT at - line 19.
-read() on unopened filehandle NONEXISTENT at - line 20.
+Filehandle F opened only for output at - line 13.
+sysread() on closed filehandle F at - line 18.
+read() on closed filehandle F at - line 19.
+sysread() on unopened filehandle NONEXISTENT at - line 20.
+read() on unopened filehandle NONEXISTENT at - line 21.
 ########
 # pp_sys.c [pp_binmode]
 use warnings 'unopened' ;
@@ -939,3 +940,25 @@ sleep(-1);
 
 EXPECT
 sleep() with negative argument at - line 2.
+########
+# NAME sysread() deprecated on :utf8
+use warnings 'deprecated';
+open my $fh, "<:raw", "../harness" or die "# $!";
+my $buf;
+sysread $fh, $buf, 10;
+binmode $fh, ':utf8';
+sysread $fh, $buf, 10;
+EXPECT
+sysread() is deprecated on :utf8 handles at - line 6.
+########
+# NAME syswrite() deprecated on :utf8
+my $file = "syswwarn.tmp";
+use warnings 'deprecated';
+open my $fh, ">:raw", $file or die "# $!";
+syswrite $fh, 'ABC';
+binmode $fh, ':utf8';
+syswrite $fh, 'ABC';
+close $fh;
+unlink $file;
+EXPECT
+syswrite() is deprecated on :utf8 handles at - line 6.
index bf0396f..541e08f 100644 (file)
@@ -11,6 +11,9 @@
 # Functions whose names begin with underscore are internal helper functions
 # for this file, and are not to be used by outside callers.
 
+eval { require POSIX; import POSIX 'locale_h'; };
+my $has_posix_locales = defined &POSIX::LC_CTYPE;
+
 sub _trylocale ($$$$) { # For use only by other functions in this file!
 
     # Adds the locale given by the first parameter to the list given by the
@@ -112,12 +115,13 @@ sub locales_enabled(;$) {
     # category, like 'LC_TIME'.  The initial 'LC_' is optional.  It is a fatal
     # error to call this with something that isn't a known category
 
-    use Config;;
+    use Config;
 
     return 0 unless    $Config{d_setlocale}
                         # I (khw) cargo-culted the '?' in the pattern on the
                         # next line.
-                    && $Config{ccflags} !~ /\bD?NO_LOCALE\b/;
+                    && $Config{ccflags} !~ /\bD?NO_LOCALE\b/
+                    && $has_posix_locales;
 
     # Done with the global possibilities.  Now check if any passed in category
     # is disabled.
@@ -172,10 +176,7 @@ sub find_locales ($;$) {  # Returns an array of all the locales we found on the
 
     # Done this way in case this is 'required' in the caller before seeing if
     # this is miniperl.
-    eval { require POSIX; import POSIX 'locale_h'; };
-    unless (defined &POSIX::LC_CTYPE) {
-      return;
-    }
+    return unless $has_posix_locales;
 
     _trylocale("C", $categories, \@Locale, $only_plays_well);
     _trylocale("POSIX", $categories, \@Locale, $only_plays_well);
@@ -296,8 +297,7 @@ sub is_locale_utf8 ($) { # Return a boolean as to if core Perl thinks the input
     # On z/OS, even locales marked as UTF-8 aren't.
     return 0 if ord "A" != 65;
 
-    eval { require POSIX; import POSIX 'locale_h'; };
-    return 0 if ! defined &POSIX::LC_CTYPE;
+    return 0 if ! $has_posix_locales;
     return 0 if ! locales_enabled('LC_CTYPE');
 
     my $locale = shift;
@@ -347,8 +347,7 @@ sub find_utf8_ctype_locale (;$) { # Return the name of a locale that core Perl
     my $locales_ref = shift;
 
     if (! defined $locales_ref) {
-        eval { require POSIX; import POSIX 'locale_h'; };
-        return if ! defined &POSIX::LC_CTYPE;
+        return if ! $has_posix_locales;
 
         my @locales = find_locales(&POSIX::LC_CTYPE(),
                                    1 # Reject iffy locales.
diff --git a/t/op/aassign.t b/t/op/aassign.t
new file mode 100644 (file)
index 0000000..e73e172
--- /dev/null
@@ -0,0 +1,335 @@
+#!./perl -w
+
+# Some miscellaneous checks for the list assignment operator, OP_AASSIGN.
+#
+# This file was only added in 2015; before then, such tests were
+# typically in various other random places like op/array.t. This test file
+# doesn't therefore attempt to be comprehensive; it merely provides a
+# central place to new put additional tests, especially those related to
+# the trickiness of commonality, e.g. ($a,$b) = ($b,$a).
+#
+# In particular, it's testing the flags
+#    OPpASSIGN_COMMON_SCALAR
+#    OPpASSIGN_COMMON_RC1
+#    OPpASSIGN_COMMON_AGG
+
+BEGIN {
+    chdir 't' if -d 't';
+    @INC = '../lib';
+    require './test.pl';
+}
+
+use warnings;
+use strict;
+
+# general purpose package vars
+
+our $pkg_scalar;
+our @pkg_array;
+our %pkg_hash;
+
+sub f_ret_14 { return 1..4 }
+
+# stringify a hash ref
+
+sub sh {
+    my $rh = $_[0];
+    join ',', map "$_:$rh->{$_}", sort keys %$rh;
+}
+
+
+# where the RHS has surplus elements
+
+{
+    my ($a,$b);
+    ($a,$b) = f_ret_14();
+    is("$a:$b", "1:2", "surplus");
+}
+
+# common with slices
+
+{
+    my @a = (1,2);
+    @a[0,1] = @a[1,0];
+    is("$a[0]:$a[1]", "2:1", "lex array slice");
+}
+
+# package alias
+
+{
+    my ($a, $b) = 1..2;
+    for $pkg_scalar ($a) {
+        ($pkg_scalar, $b) = (3, $a);
+        is($pkg_scalar, 3, "package alias pkg");
+        is("$a:$b", "3:1", "package alias a:b");
+    }
+}
+
+# my array/hash populated via closure
+
+{
+    my $ra = f1();
+    my ($x, @a) = @$ra;
+    sub f1 { $x = 1; @a = 2..4; \@a }
+    is($x,       2, "my: array closure x");
+    is("@a", "3 4", "my: array closure a");
+
+    my $rh = f2();
+    my ($k, $v, %h) = (d => 4, %$rh, e => 6);
+    sub f2 { $k = 'a'; $v = 1; %h = qw(b 2 c 3); \%h }
+    is("$k:$v", "d:4", "my: hash closure k:v");
+    is(sh(\%h), "b:2,c:3,e:6", "my: hash closure h");
+}
+
+
+# various shared element scenarios within a my (...)
+
+{
+    my ($x,$y) = f3(); # $x and $y on both sides
+    sub f3 : lvalue { ($x,$y) = (1,2); $y, $x }
+    is ("$x:$y", "2:1", "my: scalar and lvalue sub");
+}
+
+{
+    my $ra = f4();
+    my @a = @$ra;  # elements of @a on both sides
+    sub f4 { @a = 1..4; \@a }
+    is("@a", "1 2 3 4", "my: array and elements");
+}
+
+{
+    my $rh = f5();
+    my %h = %$rh;  # elements of %h on both sides
+    sub f5 { %h = qw(a 1 b 2 c 3); \%h }
+    is(sh(\%h), "a:1,b:2,c:3", "my: hash and elements");
+}
+
+{
+    f6();
+    our $xalias6;
+    my ($x, $y) = (2, $xalias6);
+    sub f6 { $x = 1; *xalias6 = \$x; }
+    is ("$x:$y", "2:1", "my: pkg var aliased to lexical");
+}
+
+
+{
+    my @a;
+    f7();
+    my ($x,$y) = @a;
+    is ("$x:$y", "2:1", "my: lex array elements aliased");
+
+    sub f7 {
+        ($x, $y) = (1,2);
+        use feature 'refaliasing';
+        no warnings 'experimental';
+        \($a[0], $a[1]) = \($y,$x);
+    }
+}
+
+{
+    @pkg_array = ();
+    f8();
+    my ($x,$y) = @pkg_array;
+    is ("$x:$y", "2:1", "my: pkg array elements aliased");
+
+    sub f8 {
+        ($x, $y) = (1,2);
+        use feature 'refaliasing';
+        no warnings 'experimental';
+        \($pkg_array[0], $pkg_array[1]) = \($y,$x);
+    }
+}
+
+{
+    f9();
+    my ($x,$y) = f9();
+    is ("$x:$y", "2:1", "my: pkg scalar alias");
+
+    our $xalias9;
+    sub f9 : lvalue {
+        ($x, $y) = (1,2);
+        *xalias9 = \$x;
+        $y, $xalias9;
+    }
+}
+
+{
+    use feature 'refaliasing';
+    no warnings 'experimental';
+
+    f10();
+    our $pkg10;
+    \(my $lex) = \$pkg10;
+    my @a = ($lex,3); # equivalent to ($a[0],3)
+    is("@a", "1 3", "my: lex alias of array alement");
+
+    sub f10 {
+        @a = (1,2);
+        \$pkg10 = \$a[0];
+    }
+
+}
+
+{
+    use feature 'refaliasing';
+    no warnings 'experimental';
+
+    f11();
+    my @b;
+    my @a = (@b);
+    is("@a", "2 1", "my: lex alias of array alements");
+
+    sub f11 {
+        @a = (1,2);
+        \$b[0] = \$a[1];
+        \$b[1] = \$a[0];
+    }
+}
+
+# package aliasing
+
+{
+    my ($x, $y) = (1,2);
+
+    for $pkg_scalar ($x) {
+        ($pkg_scalar, $y) = (3, $x);
+        is("$pkg_scalar,$y", "3,1", "package scalar aliased");
+    }
+}
+
+# lvalue subs on LHS
+
+{
+    my @a;
+    sub f12 : lvalue { @a }
+    (f12()) = 1..3;
+    is("@a", "1 2 3", "lvalue sub on RHS returns array");
+}
+
+{
+    my ($x,$y);
+    sub f13 : lvalue { $x,$y }
+    (f13()) = 1..3;
+    is("$x:$y", "1:2", "lvalue sub on RHS returns scalars");
+}
+
+
+# package shared scalar vars
+
+{
+    our $pkg14a = 1;
+    our $pkg14b = 2;
+    ($pkg14a,$pkg14b) = ($pkg14b,$pkg14a);
+    is("$pkg14a:$pkg14b", "2:1", "shared package scalars");
+}
+
+# lexical shared scalar vars
+
+{
+    my $a = 1;
+    my $b = 2;
+    ($a,$b) = ($b,$a);
+    is("$a:$b", "2:1", "shared lexical scalars");
+}
+
+
+# lexical nested array elem swap
+
+{
+    my @a;
+    $a[0][0] = 1;
+    $a[0][1] = 2;
+    ($a[0][0],$a[0][1]) =  ($a[0][1],$a[0][0]);
+    is("$a[0][0]:$a[0][1]", "2:1", "lexical nested array elem swap");
+}
+
+# package nested array elem swap
+
+{
+    our @a15;
+    $a15[0][0] = 1;
+    $a15[0][1] = 2;
+    ($a15[0][0],$a15[0][1]) =  ($a15[0][1],$a15[0][0]);
+    is("$a15[0][0]:$a15[0][1]", "2:1", "package nested array elem swap");
+}
+
+# surplus RHS junk
+#
+{
+    our ($a16, $b16);
+    ($a16, undef, $b16) = 1..30;
+    is("$a16:$b16", "1:3", "surplus RHS junk");
+}
+
+# my ($scalar,....) = @_
+#
+# technically this is an unsafe usage commonality-wise, but
+# a) you have to try really hard to break it, as this test shows;
+# b) it's such an important usage that for performance reasons we
+#    mark it as safe even though it isn't really. Hence it's a TODO.
+
+{
+    local $::TODO = 'cheat and optimise my (....) = @_';
+    local @_ = 1..3;
+    &f17;
+    my ($a, @b) = @_;
+    is("($a)(@b)", "(3)(2 1)", 'my (....) = @_');
+
+    sub f17 {
+        use feature 'refaliasing';
+        no warnings 'experimental';
+        ($a, @b) = @_;
+        \($_[2], $_[1], $_[0]) = \($a, $b[0], $b[1]);
+    }
+}
+
+# single scalar on RHS that's in an aggregate on LHS
+
+{
+    my @a = 1..3;
+    for my $x ($a[0]) {
+        (@a) = ($x);
+        is ("(@a)", "(1)", 'single scalar on RHS, agg');
+    }
+}
+
+# TEMP buffer stealing.
+# In something like
+#    (...) = (f())[0,0]
+# the same TEMP RHS element may be used more than once, so when copying
+# it, we mustn't steal its buffer.
+
+{
+    # a string long enough for COW and buffer stealing to be enabled
+    my $long = 'def' . ('x' x 2000);
+
+    # a sub that is intended to return a TEMP string that isn't COW
+    # the concat returns a non-COW PADTMP; pp_leavesub sees a long
+    # stealable string, so creates a TEMP with the stolen buffer from the
+    # PADTMP - hence it returns a non-COW string
+    sub f18 {
+        my $x = "abc";
+        $x . $long;
+    }
+
+    my @a;
+
+    # with @a initially empty,the code path creates a new copy of each
+    # RHS element to store in the array
+
+    @a = (f18())[0,0];
+    is (substr($a[0], 0, 7), "abcdefx", 'NOSTEAL empty $a[0]');
+    is (substr($a[1], 0, 7), "abcdefx", 'NOSTEAL empty $a[1]');
+
+    # with @a initially non-empty, it takes a different code path that
+    # makes a mortal copy of each RHS element
+    @a = 1..3;
+    @a = (f18())[0,0];
+    is (substr($a[0], 0, 7), "abcdefx", 'NOSTEAL non-empty $a[0]');
+    is (substr($a[1], 0, 7), "abcdefx", 'NOSTEAL non-empty $a[1]');
+
+}
+
+
+done_testing();
index 7239d48..4f0a772 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan (172);
+plan (173);
 
 #
 # @foo, @bar, and @ary are also used from tie-stdarray after tie-ing them
@@ -549,4 +549,10 @@ is "@ary", 'b a',
 for(scalar $#foo) { $_ = 3 }
 is $#foo, 3, 'assigning to arylen aliased in foreach(scalar $#arylen)';
 
+{
+    my @a = qw(a b c);
+    @a = @a;
+    is "@a", 'a b c', 'assigning to itself';
+}
+
 "We're included by lib/Tie/Array/std.t so we need to return something true";
index bcf1322..94e164e 100644 (file)
@@ -77,6 +77,7 @@ expected_tie_calls(tied $c, 1, 2, 'chomping a ref');
  # Do this again, with a utf8 handle
     $c = *foo;                                         # 1 write
     open $h, "<:utf8", $outfile;
+    no warnings 'deprecated';
     sysread $h, $c, 3, 7;                              # 1 read; 1 write
     is $c, "*main::bar", 'what sysread wrote';         # 1 read
     expected_tie_calls(tied $c, 2, 2, 'calling sysread with tied buf');
index 429eb38..b4d6c25 100644 (file)
@@ -207,4 +207,11 @@ torture_hash('a .. zz', 'a' .. 'zz');
 torture_hash('0 .. 9', 0 .. 9);
 torture_hash("'Perl'", 'Rules');
 
+{
+    my %h = qw(a x b y c z);
+    no warnings qw(misc uninitialized);
+    %h = $h{a};
+    is(join(':', %h), 'x:', 'hash self-assign');
+}
+
 done_testing();
index 2631526..35e4773 100644 (file)
@@ -10,7 +10,7 @@ plan tests => 22;
 
 unless (eval {
     require File::Path;
-    File::Path::rmtree('blurfl');
+    File::Path::rmtree('blurfl') if -d 'blurfl';
     1
 }) {
     diag("$0 may fail if its temporary directory remains from a previous run");
index 01227e3..05c923f 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     set_up_inc('../lib');
 }
 use warnings;
-plan(tests => 190);
+plan(tests => 189);
 
 # these shouldn't hang
 {
@@ -778,12 +778,16 @@ cmp_ok($answer,'eq','good','sort subr called from other package');
     is $@, "", 'abrupt scope exit turns off readonliness';
 }
 
-{
-    local $TODO = "sort should make sure elements are not freed in the sort block";
-    eval { @nomodify_x=(1..8);
-          our @copy = sort { undef @nomodify_x; 1 } (@nomodify_x, 3); };
-    is($@, "");
-}
+# I commented out this TODO test because messing with FREEd scalars on the
+# stack can have all sorts of strange side-effects, not made safe by eval
+# - DAPM.
+#
+#{
+#    local $TODO = "sort should make sure elements are not freed in the sort block";
+#    eval { @nomodify_x=(1..8);
+#         our @copy = sort { undef @nomodify_x; 1 } (@nomodify_x, 3); };
+#    is($@, "");
+#}
 
 
 # Sorting shouldn't increase the refcount of a sub
@@ -855,12 +859,12 @@ is("@b", "1 2 3 3 4 5 7", "comparison result as string");
     is($cs, 2, 'overload string called twice');
 }
 
-fresh_perl_is('sub w ($$) {my ($l, my $r) = @_; my $v = \@_; undef @_; $l <=> $r}; print join q{ }, sort w 3, 1, 2, 0',
+fresh_perl_is('sub w ($$) {my ($l, $r) = @_; my $v = \@_; undef @_; $l <=> $r}; print join q{ }, sort w 3, 1, 2, 0',
              '0 1 2 3',
              {stderr => 1, switches => ['-w']},
              'RT #72334');
 
-fresh_perl_is('sub w ($$) {my ($l, my $r) = @_; my $v = \@_; undef @_; @_ = 0..2; $l <=> $r}; print join q{ }, sort w 3, 1, 2, 0',
+fresh_perl_is('sub w ($$) {my ($l, $r) = @_; my $v = \@_; undef @_; @_ = 0..2; $l <=> $r}; print join q{ }, sort w 3, 1, 2, 0',
              '0 1 2 3',
              {stderr => 1, switches => ['-w']},
              'RT #72334');
index 1a4dd30..023167b 100644 (file)
@@ -243,7 +243,7 @@ if ($Config{nvsize} == 8 &&
     print "# no hexfloat tests\n";
 }
 
-plan tests => 1408 + ($Q ? 0 : 12) + @hexfloat;
+plan tests => 1408 + ($Q ? 0 : 12) + @hexfloat + 6;
 
 use strict;
 use Config;
@@ -648,3 +648,22 @@ for my $t (@hexfloat) {
     }
     ok($ok, "'$format' '$arg' -> '$result' cf '$expected'");
 }
+
+# double-double long double %a special testing.
+SKIP: {
+    skip("$^O doublekind=$Config{doublekind}", 6)
+        unless ($Config{doublekind} == 4 && $^O eq 'linux');
+    # [rt.perl.org 125633]
+    like(sprintf("%La\n", (2**1020) + (2**-1072)),
+         qr/^0x1.0{522}1p\+1020$/);
+    like(sprintf("%La\n", (2**1021) + (2**-1072)),
+         qr/^0x1.0{523}8p\+1021$/);
+    like(sprintf("%La\n", (2**1022) + (2**-1072)),
+         qr/^0x1.0{523}4p\+1022$/);
+    like(sprintf("%La\n", (2**1023) + (2**-1072)),
+         qr/^0x1.0{523}2p\+1023$/);
+    like(sprintf("%La\n", (2**1023) + (2**-1073)),
+         qr/^0x1.0{523}1p\+1023$/);
+    like(sprintf("%La\n", (2**1023) + (2**-1074)),
+         qr/^0x1.0{524}8p\+1023$/);
+}
index ad94b3f..a807b90 100644 (file)
@@ -194,7 +194,7 @@ SKIP: {
        skip "Can't test if an admin user in miniperl", 2,
          if $Is_Cygwin && is_miniperl();
         skip "Can't test -r or -w meaningfully if you're superuser", 2
-          if ($Is_Cygwin ? Win32::IsAdminUser : $> == 0);
+          if ($> == 0);
 
         SKIP: {
             skip "Can't test -r meaningfully?", 1 if $Is_Dos;
index 6c38893..508ab14 100644 (file)
--- a/t/op/tr.t
+++ b/t/op/tr.t
@@ -313,9 +313,8 @@ is($a, "X");
 ($a = "\x{200}") =~ tr/\x00-\x{100}/X/cs;
 is($a, "X");
 
-
-# Tricky on EBCDIC: while [a-z] [A-Z] must not match the gap characters,
-# (i-j, r-s, I-J, R-S), [\x89-\x91] [\xc9-\xd1] has to match them,
+# Tricky on EBCDIC: while [a-z] [A-Z] must not match the gap characters (as
+# well as i-j, r-s, I-J, R-S), [\x89-\x91] [\xc9-\xd1] has to match them,
 # from Karsten Sperling.
 
 $c = ($a = "\x89\x8a\x8b\x8c\x8d\x8f\x90\x91") =~ tr/\x89-\x91/X/;
index 43e4345..241eb49 100644 (file)
@@ -35,7 +35,7 @@ $uv_bigi |= 0x0;
 my @array = qw(perl rules);
 
 my @raw, @upgraded, @utf8;
-foreach ("\x{1F4A9}", chr(163), 'N') {
+foreach ("\0", "\x{1F4A9}", chr(163), 'N') {
     push @raw, $_;
     my $temp = $_ . chr 256;
     chop $temp;
index 144b58c..6baa3b2 100644 (file)
     'expr::array::ref_expr_lex_3const' => {
         desc    => '(lexical expr)->[const][const][const]',
         setup   => 'my $r = [[[1,2]]]',
-        code    => '($r//0)->[0][0][0]',
+        code    => '($r||0)->[0][0][0]',
     },
 
 
     'expr::array::pkg_1const_0' => {
         desc    => 'package $array[0]',
-        setup   => 'our @a = (1)',
+        setup   => '@a = (1)',
         code    => '$a[0]',
     },
     'expr::array::pkg_1const_m1' => {
         desc    => 'package $array[-1]',
-        setup   => 'our @a = (1)',
+        setup   => '@a = (1)',
         code    => '$a[-1]',
     },
     'expr::array::pkg_2const' => {
         desc    => 'package $array[const][const]',
-        setup   => 'our @a = ([1,2])',
+        setup   => '@a = ([1,2])',
         code    => '$a[0][1]',
     },
     'expr::array::pkg_2var' => {
         desc    => 'package $array[$i1][$i2]',
-        setup   => 'our ($i1,$i2) = (0,1); our @a = ([1,2])',
+        setup   => '($i1,$i2) = (0,1); @a = ([1,2])',
         code    => '$a[$i1][$i2]',
     },
     'expr::array::ref_pkg_2var' => {
         desc    => 'package $arrayref->[$i1][$i2]',
-        setup   => 'our ($i1,$i2) = (0,1); our $r = [[1,2]]',
+        setup   => '($i1,$i2) = (0,1); $r = [[1,2]]',
         code    => '$r->[$i1][$i2]',
     },
     'expr::array::ref_pkg_3const' => {
         desc    => 'package $arrayref->[const][const][const]',
-        setup   => 'our $r = [[[1,2]]]',
+        setup   => '$r = [[[1,2]]]',
         code    => '$r->[0][0][0]',
     },
     'expr::array::ref_expr_pkg_3const' => {
         desc    => '(package expr)->[const][const][const]',
-        setup   => 'our $r = [[[1,2]]]',
-        code    => '($r//0)->[0][0][0]',
+        setup   => '$r = [[[1,2]]]',
+        code    => '($r||0)->[0][0][0]',
     },
 
 
     },
     'expr::arrayhash::pkg_3var' => {
         desc    => 'package $h{$k1}[$i]{$k2}',
-        setup   => 'our ($i, $k1, $k2) = (0,"foo","bar");'
-                    . 'our %h = (foo => [ { bar => 1 } ])',
+        setup   => '($i, $k1, $k2) = (0,"foo","bar");'
+                    . '%h = (foo => [ { bar => 1 } ])',
         code    => '$h{$k1}[$i]{$k2}',
     },
 
     'expr::hash::ref_expr_lex_3const' => {
         desc    => '(lexical expr)->{const}{const}{const}',
         setup   => 'my $r = {foo => { bar => { baz => 1 }}}',
-        code    => '($r//0)->{foo}{bar}{baz}',
+        code    => '($r||0)->{foo}{bar}{baz}',
     },
 
 
     'expr::hash::pkg_1const' => {
         desc    => 'package $hash{const}',
-        setup   => 'our %h = ("foo" => 1)',
+        setup   => '%h = ("foo" => 1)',
         code    => '$h{foo}',
     },
     'expr::hash::pkg_2const' => {
         desc    => 'package $hash{const}{const}',
-        setup   => 'our %h = (foo => { bar => 1 })',
+        setup   => '%h = (foo => { bar => 1 })',
         code    => '$h{foo}{bar}',
     },
     'expr::hash::pkg_2var' => {
         desc    => 'package $hash{$k1}{$k2}',
-        setup   => 'our ($k1,$k2) = qw(foo bar); our %h = ($k1 => { $k2 => 1 })',
+        setup   => '($k1,$k2) = qw(foo bar); %h = ($k1 => { $k2 => 1 })',
         code    => '$h{$k1}{$k2}',
     },
     'expr::hash::ref_pkg_2var' => {
         desc    => 'package $hashref->{$k1}{$k2}',
-        setup   => 'our ($k1,$k2) = qw(foo bar); our $r = {$k1 => { $k2 => 1 }}',
+        setup   => '($k1,$k2) = qw(foo bar); $r = {$k1 => { $k2 => 1 }}',
         code    => '$r->{$k1}{$k2}',
     },
     'expr::hash::ref_pkg_3const' => {
         desc    => 'package $hashref->{const}{const}{const}',
-        setup   => 'our $r = {foo => { bar => { baz => 1 }}}',
+        setup   => '$r = {foo => { bar => { baz => 1 }}}',
         code    => '$r->{foo}{bar}{baz}',
     },
     'expr::hash::ref_expr_pkg_3const' => {
         desc    => '(package expr)->{const}{const}{const}',
-        setup   => 'our $r = {foo => { bar => { baz => 1 }}}',
-        code    => '($r//0)->{foo}{bar}{baz}',
+        setup   => '$r = {foo => { bar => { baz => 1 }}}',
+        code    => '($r||0)->{foo}{bar}{baz}',
     },
 
 
 
     'expr::index::utf8_position_1' => {
         desc    => 'index of a utf8 string, matching at position 1',
-        setup   => 'utf8::upgrade my $x = "abc"',
+        setup   => 'my $x = "abc". chr(0x100); chop $x',
         code    => 'index $x, "b"',
     },
 
+
+    # list assign, OP_AASSIGN
+
+
+    # (....) = ()
+
+    'expr::aassign::ma_empty' => {
+        desc    => 'my array assigned empty',
+        setup   => '',
+        code    => 'my @a = ()',
+    },
+    'expr::aassign::lax_empty' => {
+        desc    => 'non-empty lexical array assigned empty',
+        setup   => 'my @a = 1..3;',
+        code    => '@a = ()',
+    },
+    'expr::aassign::llax_empty' => {
+        desc    => 'non-empty lexical var and array assigned empty',
+        setup   => 'my ($x, @a) = 1..4;',
+        code    => '($x, @a) = ()',
+    },
+    'expr::aassign::3m_empty' => {
+        desc    => 'three my vars assigned empty',
+        setup   => '',
+        code    => 'my ($x,$y,$z) = ()',
+    },
+    'expr::aassign::3l_empty' => {
+        desc    => 'three lexical vars assigned empty',
+        setup   => 'my ($x,$y,$z)',
+        code    => '($x,$y,$z) = ()',
+    },
+    'expr::aassign::pa_empty' => {
+        desc    => 'package array assigned empty',
+        setup   => '',
+        code    => '@a = ()',
+    },
+    'expr::aassign::pax_empty' => {
+        desc    => 'non-empty package array assigned empty',
+        setup   => '@a = (1,2,3)',
+        code    => '@a = ()',
+    },
+    'expr::aassign::3p_empty' => {
+        desc    => 'three package vars assigned empty',
+        setup   => '($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = ()',
+    },
+
+    # (....) = (1,2,3)
+
+    'expr::aassign::ma_3c' => {
+        desc    => 'my array assigned 3 consts',
+        setup   => '',
+        code    => 'my @a = (1,2,3)',
+    },
+    'expr::aassign::lax_3c' => {
+        desc    => 'non-empty lexical array assigned 3 consts',
+        setup   => 'my @a = 1..3;',
+        code    => '@a = (1,2,3)',
+    },
+    'expr::aassign::llax_3c' => {
+        desc    => 'non-empty lexical var and array assigned 3 consts',
+        setup   => 'my ($x, @a) = 1..4;',
+        code    => '($x, @a) = (1,2,3)',
+    },
+    'expr::aassign::3m_3c' => {
+        desc    => 'three my vars assigned 3 consts',
+        setup   => '',
+        code    => 'my ($x,$y,$z) = (1,2,3)',
+    },
+    'expr::aassign::3l_3c' => {
+        desc    => 'three lexical vars assigned 3 consts',
+        setup   => 'my ($x,$y,$z)',
+        code    => '($x,$y,$z) = (1,2,3)',
+    },
+    'expr::aassign::pa_3c' => {
+        desc    => 'package array assigned 3 consts',
+        setup   => '',
+        code    => '@a = (1,2,3)',
+    },
+    'expr::aassign::pax_3c' => {
+        desc    => 'non-empty package array assigned 3 consts',
+        setup   => '@a = (1,2,3)',
+        code    => '@a = (1,2,3)',
+    },
+    'expr::aassign::3p_3c' => {
+        desc    => 'three package vars assigned 3 consts',
+        setup   => '($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = (1,2,3)',
+    },
+
+    # (....) = @lexical
+
+    'expr::aassign::ma_la' => {
+        desc    => 'my array assigned lexical array',
+        setup   => 'my @init = 1..3;',
+        code    => 'my @a = @init',
+    },
+    'expr::aassign::lax_la' => {
+        desc    => 'non-empty lexical array assigned lexical array',
+        setup   => 'my @init = 1..3; my @a = 1..3;',
+        code    => '@a = @init',
+    },
+    'expr::aassign::llax_la' => {
+        desc    => 'non-empty lexical var and array assigned lexical array',
+        setup   => 'my @init = 1..3; my ($x, @a) = 1..4;',
+        code    => '($x, @a) = @init',
+    },
+    'expr::aassign::3m_la' => {
+        desc    => 'three my vars assigned lexical array',
+        setup   => 'my @init = 1..3;',
+        code    => 'my ($x,$y,$z) = @init',
+    },
+    'expr::aassign::3l_la' => {
+        desc    => 'three lexical vars assigned lexical array',
+        setup   => 'my @init = 1..3; my ($x,$y,$z)',
+        code    => '($x,$y,$z) = @init',
+    },
+    'expr::aassign::pa_la' => {
+        desc    => 'package array assigned lexical array',
+        setup   => 'my @init = 1..3;',
+        code    => '@a = @init',
+    },
+    'expr::aassign::pax_la' => {
+        desc    => 'non-empty package array assigned lexical array',
+        setup   => 'my @init = 1..3; @a = @init',
+        code    => '@a = @init',
+    },
+    'expr::aassign::3p_la' => {
+        desc    => 'three package vars assigned lexical array',
+        setup   => 'my @init = 1..3; ($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = @init',
+    },
+
+    # (....) = @package
+
+    'expr::aassign::ma_pa' => {
+        desc    => 'my array assigned package array',
+        setup   => '@init = 1..3;',
+        code    => 'my @a = @init',
+    },
+    'expr::aassign::lax_pa' => {
+        desc    => 'non-empty lexical array assigned package array',
+        setup   => '@init = 1..3; my @a = 1..3;',
+        code    => '@a = @init',
+    },
+    'expr::aassign::llax_pa' => {
+        desc    => 'non-empty lexical var and array assigned package array',
+        setup   => '@init = 1..3; my ($x, @a) = 1..4;',
+        code    => '($x, @a) = @init',
+    },
+    'expr::aassign::3m_pa' => {
+        desc    => 'three my vars assigned package array',
+        setup   => '@init = 1..3;',
+        code    => 'my ($x,$y,$z) = @init',
+    },
+    'expr::aassign::3l_pa' => {
+        desc    => 'three lexical vars assigned package array',
+        setup   => '@init = 1..3; my ($x,$y,$z)',
+        code    => '($x,$y,$z) = @init',
+    },
+    'expr::aassign::pa_pa' => {
+        desc    => 'package array assigned package array',
+        setup   => '@init = 1..3;',
+        code    => '@a = @init',
+    },
+    'expr::aassign::pax_pa' => {
+        desc    => 'non-empty package array assigned package array',
+        setup   => '@init = 1..3; @a = @init',
+        code    => '@a = @init',
+    },
+    'expr::aassign::3p_pa' => {
+        desc    => 'three package vars assigned package array',
+        setup   => '@init = 1..3; ($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = @init',
+    },
+
+    # (....) = @_;
+
+    'expr::aassign::ma_defary' => {
+        desc    => 'my array assigned @_',
+        setup   => '@_ = 1..3;',
+        code    => 'my @a = @_',
+    },
+    'expr::aassign::lax_defary' => {
+        desc    => 'non-empty lexical array assigned @_',
+        setup   => '@_ = 1..3; my @a = 1..3;',
+        code    => '@a = @_',
+    },
+    'expr::aassign::llax_defary' => {
+        desc    => 'non-empty lexical var and array assigned @_',
+        setup   => '@_ = 1..3; my ($x, @a) = 1..4;',
+        code    => '($x, @a) = @_',
+    },
+    'expr::aassign::3m_defary' => {
+        desc    => 'three my vars assigned @_',
+        setup   => '@_ = 1..3;',
+        code    => 'my ($x,$y,$z) = @_',
+    },
+    'expr::aassign::3l_defary' => {
+        desc    => 'three lexical vars assigned @_',
+        setup   => '@_ = 1..3; my ($x,$y,$z)',
+        code    => '($x,$y,$z) = @_',
+    },
+    'expr::aassign::pa_defary' => {
+        desc    => 'package array assigned @_',
+        setup   => '@_ = 1..3;',
+        code    => '@a = @_',
+    },
+    'expr::aassign::pax_defary' => {
+        desc    => 'non-empty package array assigned @_',
+        setup   => '@_ = 1..3; @a = @_',
+        code    => '@a = @_',
+    },
+    'expr::aassign::3p_defary' => {
+        desc    => 'three package vars assigned @_',
+        setup   => '@_ = 1..3; ($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = @_',
+    },
+
+
+    # (....) = ($lex1,$lex2,$lex3);
+
+    'expr::aassign::ma_3l' => {
+        desc    => 'my array assigned lexicals',
+        setup   => 'my ($v1,$v2,$v3) = 1..3;',
+        code    => 'my @a = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::lax_3l' => {
+        desc    => 'non-empty lexical array assigned lexicals',
+        setup   => 'my ($v1,$v2,$v3) = 1..3; my @a = 1..3;',
+        code    => '@a = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::llax_3l' => {
+        desc    => 'non-empty lexical var and array assigned lexicals',
+        setup   => 'my ($v1,$v2,$v3) = 1..3; my ($x, @a) = 1..4;',
+        code    => '($x, @a) = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::3m_3l' => {
+        desc    => 'three my vars assigned lexicals',
+        setup   => 'my ($v1,$v2,$v3) = 1..3;',
+        code    => 'my ($x,$y,$z) = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::3l_3l' => {
+        desc    => 'three lexical vars assigned lexicals',
+        setup   => 'my ($v1,$v2,$v3) = 1..3; my ($x,$y,$z)',
+        code    => '($x,$y,$z) = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::pa_3l' => {
+        desc    => 'package array assigned lexicals',
+        setup   => 'my ($v1,$v2,$v3) = 1..3;',
+        code    => '@a = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::pax_3l' => {
+        desc    => 'non-empty package array assigned lexicals',
+        setup   => 'my ($v1,$v2,$v3) = 1..3; @a = @_',
+        code    => '@a = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::3p_3l' => {
+        desc    => 'three package vars assigned lexicals',
+        setup   => 'my ($v1,$v2,$v3) = 1..3; ($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = ($v1,$v2,$v3)',
+    },
+
+
+    # (....) = ($pkg1,$pkg2,$pkg3);
+
+    'expr::aassign::ma_3p' => {
+        desc    => 'my array assigned 3 package vars',
+        setup   => '($v1,$v2,$v3) = 1..3;',
+        code    => 'my @a = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::lax_3p' => {
+        desc    => 'non-empty lexical array assigned 3 package vars',
+        setup   => '($v1,$v2,$v3) = 1..3; my @a = 1..3;',
+        code    => '@a = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::llax_3p' => {
+        desc    => 'non-empty lexical var and array assigned 3 package vars',
+        setup   => '($v1,$v2,$v3) = 1..3; my ($x, @a) = 1..4;',
+        code    => '($x, @a) = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::3m_3p' => {
+        desc    => 'three my vars assigned 3 package vars',
+        setup   => '($v1,$v2,$v3) = 1..3;',
+        code    => 'my ($x,$y,$z) = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::3l_3p' => {
+        desc    => 'three lexical vars assigned 3 package vars',
+        setup   => '($v1,$v2,$v3) = 1..3; my ($x,$y,$z)',
+        code    => '($x,$y,$z) = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::pa_3p' => {
+        desc    => 'package array assigned 3 package vars',
+        setup   => '($v1,$v2,$v3) = 1..3;',
+        code    => '@a = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::pax_3p' => {
+        desc    => 'non-empty package array assigned 3 package vars',
+        setup   => '($v1,$v2,$v3) = 1..3; @a = @_',
+        code    => '@a = ($v1,$v2,$v3)',
+    },
+    'expr::aassign::3p_3p' => {
+        desc    => 'three package vars assigned 3 package vars',
+        setup   => '($v1,$v2,$v3) = 1..3; ($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = ($v1,$v2,$v3)',
+    },
+
+
+    # (....) = (1,2,$shared);
+
+    'expr::aassign::llax_2c1s' => {
+        desc    => 'non-empty lexical var and array assigned 2 consts and 1 shared var',
+        setup   => 'my ($x, @a) = 1..4;',
+        code    => '($x, @a) = (1,2,$x)',
+    },
+    'expr::aassign::3l_2c1s' => {
+        desc    => 'three lexical vars assigned 2 consts and 1 shared var',
+        setup   => 'my ($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = (1,2,$x)',
+    },
+    'expr::aassign::3p_2c1s' => {
+        desc    => 'three package vars assigned 2 consts and 1 shared var',
+        setup   => '($x,$y,$z) = 1..3;',
+        code    => '($x,$y,$z) = (1,2,$x)',
+    },
+
+
+    # ($a,$b) = ($b,$a);
+
+    'expr::aassign::2l_swap' => {
+        desc    => 'swap two lexical vars',
+        setup   => 'my ($a,$b) = (1,2)',
+        code    => '($a,$b) = ($b,$a)',
+    },
+    'expr::aassign::2p_swap' => {
+        desc    => 'swap two package vars',
+        setup   => '($a,$b) = (1,2)',
+        code    => '($a,$b) = ($b,$a)',
+    },
+    'expr::aassign::2laelem_swap' => {
+        desc    => 'swap two lexical vars',
+        setup   => 'my @a = (1,2)',
+        code    => '($a[0],$a[1]) = ($a[1],$a[0])',
+    },
+
+    # misc list assign
+
+    'expr::aassign::5l_4l1s' => {
+        desc    => 'long list of lexical vars, 1 shared',
+        setup   => 'my ($a,$b,$c,$d,$e) = 1..5',
+        code    => '($a,$b,$c,$d,$e) = ($a,$a,$c,$d,$e)',
+    },
+
+    'expr::aassign::5p_4p1s' => {
+        desc    => 'long list of package vars, 1 shared',
+        setup   => '($a,$b,$c,$d,$e) = 1..5',
+        code    => '($a,$b,$c,$d,$e) = ($a,$a,$c,$d,$e)',
+    },
+    'expr::aassign::5l_defary' => {
+        desc    => 'long list of lexical vars to assign @_ to',
+        setup   => '@_ = 1..5',
+        code    => 'my ($a,$b,$c,$d,$e) = @_',
+    },
+    'expr::aassign::5l1la_defary' => {
+        desc    => 'long list of lexical vars plus long slurp to assign @_ to',
+        setup   => '@_ = 1..20',
+        code    => 'my ($a,$b,$c,$d,$e,@rest) = @_',
+    },
+    'expr::aassign::1l_2l' => {
+        desc    => 'single lexical LHS',
+        setup   => 'my $x = 1;',
+        code    => '(undef,$x) = ($x,$x)',
+    },
+    'expr::aassign::2l_1l' => {
+        desc    => 'single lexical RHS',
+        setup   => 'my $x = 1;',
+        code    => '($x,$x) = (undef, $x)',
+    },
+
+
 ];
index 7e3a06e..a2ff7f2 100644 (file)
@@ -10,26 +10,87 @@ BEGIN {
     @INC = '../lib';
 }
 
-plan 24;
+plan 54;
 
 use v5.10; # state
-use B qw 'svref_2object OPpASSIGN_COMMON';
-
+use B qw(svref_2object
+         OPpASSIGN_COMMON_SCALAR
+         OPpASSIGN_COMMON_RC1
+         OPpASSIGN_COMMON_AGG
+      );
+
+
+# Test that OP_AASSIGN gets the appropriate
+# OPpASSIGN_COMMON* flags set.
+#
+# Too few flags set is likely to cause code to misbehave;
+# too many flags set unnecessarily slows things down.
+# See also the tests in t/op/aassign.t
+
+for my $test (
+    # Each anon array contains:
+    # [
+    #   expected flags:
+    #      a 3 char string, each char showing whether we expect a
+    #      particular flag to be set:
+    #           '-' indicates any char not set, while
+    #           'S':  char 0: OPpASSIGN_COMMON_SCALAR,
+    #           'R':  char 1: OPpASSIGN_COMMON_RC1,
+    #           'A'   char 2: OPpASSIGN_COMMON_AGG,
+    #   code to eval,
+    #   description,
+    # ]
+
+    [ "---", '() = (1, $x, my $y, @z, f($p))', 'no LHS' ],
+    [ "---", '(undef, $x, my $y, @z, ($a ? $b : $c)) = ()', 'no RHS' ],
+    [ "---", '(undef, $x, my $y, @z, ($a ? $b : $c)) = (1,2)', 'safe RHS' ],
+    [ "---", 'my @a = (1,2)', 'safe RHS: my array' ],
+    [ "---", 'my %h = (1,2)', 'safe RHS: my hash' ],
+    [ "---", 'my ($a,$b,$c,$d) = 1..6; ($a,$b) = ($c,$d);', 'non-common lex' ],
+    [ "---", '($x,$y) = (1,2)', 'pkg var LHS only' ],
+    [ "---", 'my $p; my ($x,$y) = ($p, $p)', 'my; dup lex var on RHS' ],
+    [ "---", 'my $p; my ($x,$y); ($x,$y) = ($p, $p)', 'dup lex var on RHS' ],
+    [ "---", 'my ($self) = @_', 'LHS lex scalar only' ],
+    [ "--A", 'my ($self, @rest) = @_', 'LHS lex mixed' ],
+    [ "-R-", 'my ($x,$y) = ($p, $q)', 'pkg var RHS only' ],
+    [ "S--", '($x,$y) = ($p, $q)', 'pkg scalar both sides' ],
+    [ "--A", 'my (@a, @b); @a = @b', 'lex ary both sides' ],
+    [ "-R-", 'my ($x,$y,$z,@a); ($x,$y,$z) = @a ', 'lex vars to lex ary' ],
+    [ "--A", '@a = @b', 'pkg ary both sides' ],
+    [ "--A", 'my (%a,%b); %a = %b', 'lex hash both sides' ],
+    [ "--A", '%a = %b', 'pkg hash both sides' ],
+    [ "--A", 'my $x; @a = ($a[0], $a[$x])', 'common ary' ],
+    [ "--A", 'my ($x,@a); @a = ($a[0], $a[$x])', 'common lex ary' ],
+    [ "S-A", 'my $x; ($a[$x], $a[0]) = ($a[0], $a[$x])', 'common ary elems' ],
+    [ "S-A", 'my ($x,@a); ($a[$x], $a[0]) = ($a[0], $a[$x])',
+                                                    'common lex ary elems' ],
+    [ "--A", 'my $x; my @a = @$x', 'lex ary may have stuff' ],
+    [ "-RA", 'my $x; my ($b, @a) = @$x', 'lex ary may have stuff' ],
+    [ "--A", 'my $x; my %a = @$x', 'lex hash may have stuff' ],
+    [ "-RA", 'my $x; my ($b, %a) = @$x', 'lex hash may have stuff' ],
+    [ "--A", 'my (@a,@b); @a = ($b[0])', 'lex ary and elem' ],
+    [ "S-A", 'my @a; ($a[1],$a[0]) = @a', 'lex ary and elem' ],
+    [ "--A", 'my @x; @y = $x[0]', 'pkg ary from lex elem' ],
+    [ "---", '(undef,$x) = f()', 'single scalar on LHS' ],
+    [ "---", '($x,$y) = ($x)', 'single scalar on RHS, no AGG' ],
+    [ "--A", '($x,@b) = ($x)', 'single scalar on RHS' ],
+) {
+    my ($exp, $code, $desc) = @$test;
+    my $sub = eval "sub { $code }"
+        or die
+            "aassign eval('$code') failed: this test needs to be rewritten:\n"
+            . $@;
 
-# aassign with no common vars
-for ('my ($self) = @_',
-     'my @x; @y = $x[0]', # aelemfast_lex
-    )
-{
-    my $sub = eval "sub { $_ }";
-    my $last_expr =
-      svref_2object($sub)->ROOT->first->last;
+    my $last_expr = svref_2object($sub)->ROOT->first->last;
     if ($last_expr->name ne 'aassign') {
         die "Expected aassign but found ", $last_expr->name,
             "; this test needs to be rewritten" 
     }
-    is $last_expr->private & OPpASSIGN_COMMON, 0,
-      "no ASSIGN_COMMON for $_";
+    my $got =
+        (($last_expr->private & OPpASSIGN_COMMON_SCALAR) ? 'S' : '-')
+      . (($last_expr->private & OPpASSIGN_COMMON_RC1)    ? 'R' : '-')
+      . (($last_expr->private & OPpASSIGN_COMMON_AGG)    ? 'A' : '-');
+    is $got, $exp,  "OPpASSIGN_COMMON: $desc: '$code'";
 }    
 
 
index c3188a7..d9000a6 100644 (file)
@@ -43,9 +43,9 @@ if (!@ARGV) {
     while (<$fh>) {
        # *.c or */*.c
        push @ARGV, $prefix . $1 if m!^((?:[^/]+/)?[^/]+\.c)\t!;
+        # Special case the *inline.h since they behave like *.c
+       push @ARGV, $prefix . $1 if m!^(([^/]+)?inline\.h)\t!;
     }
-    push @ARGV, $prefix . 'inline.h'; # Special case this '.h' which acts like
-                                      # a '.c'
 }
 
 while (<>) {
index 98c2c58..b2a75fc 100644 (file)
@@ -280,7 +280,7 @@ pod/perldebtut.pod  Verbatim line length including indents exceeds 79 by    22
 pod/perldebug.pod      Verbatim line length including indents exceeds 79 by    3
 pod/perldtrace.pod     Verbatim line length including indents exceeds 79 by    26
 pod/perlfunc.pod       ? Should you be using F<...> or maybe L<...> instead of 1
-pod/perlgit.pod        Verbatim line length including indents exceeds 79 by    12
+pod/perlgit.pod        Verbatim line length including indents exceeds 79 by    11
 pod/perlgpl.pod        Verbatim line length including indents exceeds 79 by    50
 pod/perlguts.pod       ? Should you be using F<...> or maybe L<...> instead of 2
 pod/perlguts.pod       ? Should you be using L<...> instead of 1
index 230fd89..33647f3 100644 (file)
@@ -2419,6 +2419,15 @@ EOF
                         'No segfault on qr{(?&foo){0}abc(?<foo>)}');
     }
 
+    SKIP:
+    {   # [perl #125826] buffer overflow in TRIE_STORE_REVCHAR
+        # (during compilation, so use a fresh perl)
+        $Config{uvsize} == 8
+         or skip("need large code-points for this test", 1);
+       fresh_perl_is('/\x{E000000000}|/ and print qq(ok\n)', "ok\n", {},
+                     "buffer overflow in TRIE_STORE_REVCHAR");
+    }
+
     # !!! NOTE that tests that aren't at all likely to crash perl should go
     # a ways above, above these last ones.
 
index a5f0527..6674a2a 100644 (file)
@@ -1915,7 +1915,6 @@ A+(*PRUNE)BC(?{}) AAABC   y       $&      AAABC
 /( (?&solution) | % ) \Z (?(DEFINE) (?<solution>7\%\ solution) )/x     7% solution     y       $1      7% solution             # [perl #122890]
 (.)(?{$~=$^N}) \x{100} y       $~      \x{100}         # [perl #123135]
 
-# pat  string  y/n/etc expr    expected-expr   skip-reason     comment
 /[a-z]/i       \N{KELVIN SIGN} y       $&      \N{KELVIN SIGN}
 /[A-Z]/ia      \N{KELVIN SIGN} y       $&      \N{KELVIN SIGN}
 /[A-Z]/iaa     \N{KELVIN SIGN} n       -       -
index 66cd5b8..ff89b08 100644 (file)
@@ -169,6 +169,7 @@ foreach my $operator ('print', 'syswrite', 'syswrite len', 'syswrite off',
        my $trail = $operator =~ /\blen\b/ ? "!" : "";
        my $u = UTF8Toggle->new("$pad$E_acute\n$trail");
        my $l = UTF8Toggle->new("$pad$e_acute\n$trail", 1);
+        no warnings 'deprecated';
        if ($operator eq 'print') {
            no warnings 'utf8';
            print $fh $u;
index 33f057a..5601b97 100644 (file)
@@ -231,7 +231,7 @@ for ( 0x0 .. 0xff ) {
         if ($chr =~ /[#*]/) {
 
             # Length-1 variables with these two characters used to be used by
-            # Perl, but now it generates a warning that they're gone.
+            # Perl, but now a warning is generated that they're gone.
             # Ignore such warnings.
             for (my $i = @warnings - 1; $i >= 0; $i--) {
                 splice @warnings, $i, 1 if $warnings[$i] =~ /is no longer supported/;
index f0e8d71..ca7f786 100644 (file)
--- a/time64.c
+++ b/time64.c
@@ -33,12 +33,15 @@ long' type can use localtime64_r() and gmtime64_r() which correctly
 converts the time even on 32-bit systems. Whether you have 64-bit time
 values will depend on the operating system.
 
-S_localtime64_r() is a 64-bit equivalent of localtime_r().
+Perl_localtime64_r() is a 64-bit equivalent of localtime_r().
 
-S_gmtime64_r() is a 64-bit equivalent of gmtime_r().
+Perl_gmtime64_r() is a 64-bit equivalent of gmtime_r().
 
 */
 
+#include "EXTERN.h"
+#define PERL_IN_TIME64_C
+#include "perl.h"
 #include "time64.h"
 
 static const char days_in_month[2][12] = {
@@ -69,16 +72,6 @@ static const short safe_years[SOLAR_CYCLE_LENGTH] = {
     2012, 2013, 2014, 2015
 };
 
-static const char dow_year_start[SOLAR_CYCLE_LENGTH] = {
-    5, 0, 1, 2,     /* 0       2016 - 2019 */
-    3, 5, 6, 0,     /* 4  */
-    1, 3, 4, 5,     /* 8  */
-    6, 1, 2, 3,     /* 12 */
-    4, 6, 0, 1,     /* 16 */
-    2, 4, 5, 6,     /* 20      2036, 2037, 2010, 2011 */
-    0, 2, 3, 4      /* 24      2012, 2013, 2014, 2015 */
-};
-
 /* Let's assume people are going to be looking for dates in the future.
    Let's provide some cheats so you can skip ahead.
    This has a 4x speed boost when near 2008.
@@ -340,7 +333,7 @@ static struct tm * S_gmtime_r(const time_t *clock, struct tm *result) {
 }
 #endif
 
-static struct TM *S_gmtime64_r (const Time64_T *in_time, struct TM *p)
+struct TM *Perl_gmtime64_r (const Time64_T *in_time, struct TM *p)
 {
     int v_tm_sec, v_tm_min, v_tm_hour, v_tm_mon, v_tm_wday;
     Time64_T v_tm_tday;
@@ -467,7 +460,7 @@ static struct TM *S_gmtime64_r (const Time64_T *in_time, struct TM *p)
 }
 
 
-static struct TM *S_localtime64_r (const Time64_T *time, struct TM *local_tm)
+struct TM *Perl_localtime64_r (const Time64_T *time, struct TM *local_tm)
 {
     time_t safe_time;
     struct tm safe_date;
@@ -491,7 +484,7 @@ static struct TM *S_localtime64_r (const Time64_T *time, struct TM *local_tm)
         return local_tm;
     }
 
-    if( S_gmtime64_r(time, &gm_tm) == NULL ) {
+    if( Perl_gmtime64_r(time, &gm_tm) == NULL ) {
         TIME64_TRACE1("gmtime64_r returned null for %lld\n", *time);
         return NULL;
     }
index b7306d0..6f60bce 100644 (file)
--- a/time64.h
+++ b/time64.h
@@ -49,9 +49,8 @@ struct TM64 {
 
 
 /* Declare functions */
-static struct TM *S_gmtime64_r    (const Time64_T *, struct TM *);
-static struct TM *S_localtime64_r (const Time64_T *, struct TM *);
-static Time64_T   S_timegm64      (struct TM *);
+struct TM *Perl_gmtime64_r    (const Time64_T *, struct TM *);
+struct TM *Perl_localtime64_r (const Time64_T *, struct TM *);
 
 
 /* Not everyone has gm/localtime_r(), provide a replacement */
diff --git a/toke.c b/toke.c
index 9a94f91..7a0f1b6 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -38,7 +38,7 @@ Individual members of C<PL_parser> have their own documentation.
 #include "EXTERN.h"
 #define PERL_IN_TOKE_C
 #include "perl.h"
-#include "dquote_static.c"
+#include "dquote_inline.h"
 
 #define new_constant(a,b,c,d,e,f,g)    \
        S_new_constant(aTHX_ a,b,STR_WITH_LEN(c),d,e,f, g)
@@ -652,15 +652,15 @@ is made on the save stack so that upon unwinding the new state object
 will be destroyed and the former value of L</PL_parser> will be restored.
 Nothing else need be done to clean up the parsing context.
 
-The code to be parsed comes from I<line> and I<rsfp>.  I<line>, if
+The code to be parsed comes from C<line> and C<rsfp>.  C<line>, if
 non-null, provides a string (in SV form) containing code to be parsed.
-A copy of the string is made, so subsequent modification of I<line>
-does not affect parsing.  I<rsfp>, if non-null, provides an input stream
+A copy of the string is made, so subsequent modification of C<line>
+does not affect parsing.  C<rsfp>, if non-null, provides an input stream
 from which code will be read to be parsed.  If both are non-null, the
-code in I<line> comes first and must consist of complete lines of input,
-and I<rsfp> supplies the remainder of the source.
+code in C<line> comes first and must consist of complete lines of input,
+and C<rsfp> supplies the remainder of the source.
 
-The I<flags> parameter is reserved for future use.  Currently it is only
+The C<flags> parameter is reserved for future use.  Currently it is only
 used by perl internally, so extensions should always pass zero.
 
 =cut
@@ -757,8 +757,8 @@ Perl_parser_free(pTHX_  const yy_parser *parser)
 
     if (PL_parser->lex_flags & LEX_DONT_CLOSE_RSFP)
        PerlIO_clearerr(parser->rsfp);
-    else if (parser->rsfp && (!parser->old_parser ||
-               (parser->old_parser && parser->rsfp != parser->old_parser->rsfp)))
+    else if (parser->rsfp && (!parser->old_parser
+          || (parser->old_parser && parser->rsfp != parser->old_parser->rsfp)))
        PerlIO_close(parser->rsfp);
     SvREFCNT_dec(parser->rsfp_filters);
     SvREFCNT_dec(parser->lex_stuff);
@@ -887,7 +887,7 @@ Perl_lex_bufutf8(pTHX)
 =for apidoc Amx|char *|lex_grow_linestr|STRLEN len
 
 Reallocates the lexer buffer (L</PL_parser-E<gt>linestr>) to accommodate
-at least I<len> octets (including terminating C<NUL>).  Returns a
+at least C<len> octets (including terminating C<NUL>).  Returns a
 pointer to the reallocated buffer.  This is necessary before making
 any direct modification of the buffer that would increase its length.
 L</lex_stuff_pvn> provides a more convenient way to insert text into
@@ -948,9 +948,9 @@ It is not recommended to do this as part of normal parsing, and most
 uses of this facility run the risk of the inserted characters being
 interpreted in an unintended manner.
 
-The string to be inserted is represented by I<len> octets starting
-at I<pv>.  These octets are interpreted as either UTF-8 or Latin-1,
-according to whether the C<LEX_STUFF_UTF8> flag is set in I<flags>.
+The string to be inserted is represented by C<len> octets starting
+at C<pv>.  These octets are interpreted as either UTF-8 or Latin-1,
+according to whether the C<LEX_STUFF_UTF8> flag is set in C<flags>.
 The characters are recoded for the lexer buffer, according to how the
 buffer is currently being interpreted (L</lex_bufutf8>).  If a string
 to be inserted is available as a Perl scalar, the L</lex_stuff_sv>
@@ -1060,10 +1060,10 @@ It is not recommended to do this as part of normal parsing, and most
 uses of this facility run the risk of the inserted characters being
 interpreted in an unintended manner.
 
-The string to be inserted is represented by octets starting at I<pv>
+The string to be inserted is represented by octets starting at C<pv>
 and continuing to the first nul.  These octets are interpreted as either
 UTF-8 or Latin-1, according to whether the C<LEX_STUFF_UTF8> flag is set
-in I<flags>.  The characters are recoded for the lexer buffer, according
+in C<flags>.  The characters are recoded for the lexer buffer, according
 to how the buffer is currently being interpreted (L</lex_bufutf8>).
 If it is not convenient to nul-terminate a string to be inserted, the
 L</lex_stuff_pvn> function is more appropriate.
@@ -1089,7 +1089,7 @@ It is not recommended to do this as part of normal parsing, and most
 uses of this facility run the risk of the inserted characters being
 interpreted in an unintended manner.
 
-The string to be inserted is the string value of I<sv>.  The characters
+The string to be inserted is the string value of C<sv>.  The characters
 are recoded for the lexer buffer, according to how the buffer is currently
 being interpreted (L</lex_bufutf8>).  If a string to be inserted is
 not already a Perl scalar, the L</lex_stuff_pvn> function avoids the
@@ -1114,7 +1114,7 @@ Perl_lex_stuff_sv(pTHX_ SV *sv, U32 flags)
 =for apidoc Amx|void|lex_unstuff|char *ptr
 
 Discards text about to be lexed, from L</PL_parser-E<gt>bufptr> up to
-I<ptr>.  Text following I<ptr> will be moved, and the buffer shortened.
+C<ptr>.  Text following C<ptr> will be moved, and the buffer shortened.
 This hides the discarded text from any lexing code that runs later,
 as if the text had never appeared.
 
@@ -1148,7 +1148,7 @@ Perl_lex_unstuff(pTHX_ char *ptr)
 =for apidoc Amx|void|lex_read_to|char *ptr
 
 Consume text in the lexer buffer, from L</PL_parser-E<gt>bufptr> up
-to I<ptr>.  This advances L</PL_parser-E<gt>bufptr> to match I<ptr>,
+to C<ptr>.  This advances L</PL_parser-E<gt>bufptr> to match C<ptr>,
 performing the correct bookkeeping whenever a newline character is passed.
 This is the normal way to consume lexed text.
 
@@ -1179,8 +1179,8 @@ Perl_lex_read_to(pTHX_ char *ptr)
 =for apidoc Amx|void|lex_discard_to|char *ptr
 
 Discards the first part of the L</PL_parser-E<gt>linestr> buffer,
-up to I<ptr>.  The remaining content of the buffer will be moved, and
-all pointers into the buffer updated appropriately.  I<ptr> must not
+up to C<ptr>.  The remaining content of the buffer will be moved, and
+all pointers into the buffer updated appropriately.  C<ptr> must not
 be later in the buffer than the position of L</PL_parser-E<gt>bufptr>:
 it is not permitted to discard text that has yet to be lexed.
 
@@ -1241,7 +1241,7 @@ the current chunk at this time.
 If L</PL_parser-E<gt>bufptr> is pointing to the very end of the current
 chunk (i.e., the current chunk has been entirely consumed), normally the
 current chunk will be discarded at the same time that the new chunk is
-read in.  If I<flags> includes C<LEX_KEEP_PREVIOUS>, the current chunk
+read in.  If C<flags> includes C<LEX_KEEP_PREVIOUS>, the current chunk
 will not be discarded.  If the current chunk has not been entirely
 consumed, then it will not be discarded regardless of the flag.
 
@@ -1270,8 +1270,9 @@ Perl_lex_next_chunk(pTHX_ U32 flags)
        return FALSE;
     linestr = PL_parser->linestr;
     buf = SvPVX(linestr);
-    if (!(flags & LEX_KEEP_PREVIOUS) &&
-           PL_parser->bufptr == PL_parser->bufend) {
+    if (!(flags & LEX_KEEP_PREVIOUS)
+          && PL_parser->bufptr == PL_parser->bufend)
+    {
        old_bufend_pos = bufptr_pos = oldbufptr_pos = oldoldbufptr_pos = 0;
        linestart_pos = 0;
        if (PL_parser->last_uni != PL_parser->bufend)
@@ -1338,8 +1339,10 @@ Perl_lex_next_chunk(pTHX_ U32 flags)
        CopLINE_set(PL_curcop, PL_parser->preambling + 1);
        PL_parser->preambling = NOLINE;
     }
-    if (got_some_for_debugger && (PERLDB_LINE || PERLDB_SAVESRC) &&
-           PL_curstash != PL_debstash) {
+    if (   got_some_for_debugger
+        && PERLDB_LINE_OR_SAVESRC
+        && PL_curstash != PL_debstash)
+    {
        /* debugger active and we're not compiling the debugger code,
         * so store the line into the debugger's array of lines
         */
@@ -1359,7 +1362,7 @@ peeked character, use L</lex_read_unichar>.
 
 If the next character is in (or extends into) the next chunk of input
 text, the next chunk will be read in.  Normally the current chunk will be
-discarded at the same time, but if I<flags> includes C<LEX_KEEP_PREVIOUS>
+discarded at the same time, but if C<flags> includes C<LEX_KEEP_PREVIOUS>
 then the current chunk will not be discarded.
 
 If the input is being interpreted as UTF-8 and a UTF-8 encoding error
@@ -1430,7 +1433,7 @@ examine the next character, use L</lex_peek_unichar> instead.
 
 If the next character is in (or extends into) the next chunk of input
 text, the next chunk will be read in.  Normally the current chunk will be
-discarded at the same time, but if I<flags> includes C<LEX_KEEP_PREVIOUS>
+discarded at the same time, but if C<flags> includes C<LEX_KEEP_PREVIOUS>
 then the current chunk will not be discarded.
 
 If the input is being interpreted as UTF-8 and a UTF-8 encoding error
@@ -1468,7 +1471,7 @@ at a non-space character (or the end of the input text).
 
 If spaces extend into the next chunk of input text, the next chunk will
 be read in.  Normally the current chunk will be discarded at the same
-time, but if I<flags> includes C<LEX_KEEP_PREVIOUS> then the current
+time, but if C<flags> includes C<LEX_KEEP_PREVIOUS> then the current
 chunk will not be discarded.
 
 =cut
@@ -1587,9 +1590,10 @@ Perl_validate_proto(pTHX_ SV *name, SV *proto, bool warn)
                    in_brackets = TRUE;
                else if (*p == ']')
                    in_brackets = FALSE;
-               else if ((*p == '@' || *p == '%') &&
-                   !after_slash &&
-                   !in_brackets ) {
+               else if ((*p == '@' || *p == '%')
+                         && !after_slash
+                         && !in_brackets )
+                {
                    must_be_last = TRUE;
                    greedy_proto = *p;
                }
@@ -2013,8 +2017,8 @@ S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack)
 
     start = skipspace(start);
     s = start;
-    if (isIDFIRST_lazy_if(s,UTF) ||
-       (allow_pack && *s == ':') )
+    if (isIDFIRST_lazy_if(s,UTF)
+        || (allow_pack && *s == ':') )
     {
        s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
        if (check_keyword) {
@@ -2182,8 +2186,8 @@ S_force_strict_version(pTHX_ char *s)
        s = (char *)scan_version(s, ver, 0);
        version = newSVOP(OP_CONST, 0, ver);
     }
-    else if ( (*s != ';' && *s != '{' && *s != '}' ) &&
-           (s = skipspace(s), (*s != ';' && *s != '{' && *s != '}' )))
+    else if ((*s != ';' && *s != '{' && *s != '}' )
+             && (s = skipspace(s), (*s != ';' && *s != '{' && *s != '}' )))
     {
        PL_bufptr = s;
        if (errstr)
@@ -2755,7 +2759,6 @@ S_get_and_check_backslash_N_name(pTHX_ const char* s, const char* const e)
         \l \L \u \U \Q \E
        (?{  or  (??{
 
-
   In transliterations:
     characters are VERY literal, except for - not at the start or end
     of the string, which indicates a range. If the range is in bytes,
@@ -2941,9 +2944,9 @@ S_scan_const(pTHX_ char *start)
 #ifdef EBCDIC
                 /* Because of the discontinuities in EBCDIC A-Z and a-z, expand
                  * any subsets of these ranges into individual characters */
-               if (literal_endpoint == 2 &&
-                   ((isLOWER_A(min) && isLOWER_A(max)) ||
-                    (isUPPER_A(min) && isUPPER_A(max))))
+               if (literal_endpoint == 2
+                    && ((isLOWER_A(min) && isLOWER_A(max))
+                     || (isUPPER_A(min) && isUPPER_A(max))))
                 {
                     for (i = min; i <= max; i++) {
                         if (isALPHA_A(i))
@@ -3006,7 +3009,8 @@ S_scan_const(pTHX_ char *start)
            }
        }
 
-       /* if we get here, we're not doing a transliteration */
+        /* if we get to any of these else's, we're not doing a
+         * transliteration. */
 
        else if (*s == '[' && PL_lex_inpat && !in_charclass) {
            char *s1 = s-1;
@@ -3035,17 +3039,20 @@ S_scan_const(pTHX_ char *start)
                while (s+1 < send && *s != ')')
                    *d++ = *s++;
            }
-           else if (!PL_lex_casemods &&
-                    (    s[2] == '{' /* This should match regcomp.c */
-                     || (s[2] == '?' && s[3] == '{')))
+           else if (!PL_lex_casemods
+                     && (    s[2] == '{' /* This should match regcomp.c */
+                        || (s[2] == '?' && s[3] == '{')))
            {
                break;
            }
        }
 
        /* likewise skip #-initiated comments in //x patterns */
-       else if (*s == '#' && PL_lex_inpat && !in_charclass &&
-         ((PMOP*)PL_lex_inpat)->op_pmflags & RXf_PMf_EXTENDED) {
+       else if (*s == '#'
+                 && PL_lex_inpat
+                 && !in_charclass
+                 && ((PMOP*)PL_lex_inpat)->op_pmflags & RXf_PMf_EXTENDED)
+        {
            while (s+1 < send && *s != '\n')
                *d++ = *s++;
        }
@@ -3091,8 +3098,11 @@ S_scan_const(pTHX_ char *start)
 
            /* warn on \1 - \9 in substitution replacements, but note that \11
             * is an octal; and \19 is \1 followed by '9' */
-           if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
-               isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
+           if (PL_lex_inwhat == OP_SUBST
+                && !PL_lex_inpat
+                && isDIGIT(*s)
+                && *s != '0'
+                && !isDIGIT(s[1]))
            {
                /* diag_listed_as: \%d better written as $%d */
                Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "\\%c better written as $%c", *s, *s);
@@ -3229,8 +3239,9 @@ S_scan_const(pTHX_ char *start)
 
                     if (has_utf8) {
                        d = (char*)uvchr_to_utf8((U8*)d, uv);
-                       if (PL_lex_inwhat == OP_TRANS &&
-                           PL_sublex_info.sub_op) {
+                       if (PL_lex_inwhat == OP_TRANS
+                            && PL_sublex_info.sub_op)
+                        {
                            PL_sublex_info.sub_op->op_private |=
                                (PL_lex_repl ? OPpTRANS_FROM_UTF
                                             : OPpTRANS_TO_UTF);
@@ -3781,8 +3792,10 @@ S_intuit_more(pTHX_ char *s)
                    else
                        weight -= 10;
                }
-               else if (*s == '$' && s[1] &&
-                 strchr("[#!%*<>()-=",s[1])) {
+               else if (*s == '$'
+                         && s[1]
+                         && strchr("[#!%*<>()-=",s[1]))
+                {
                    if (/*{*/ strchr("])} =",s[2]))
                        weight -= 10;
                    else
@@ -3892,8 +3905,8 @@ S_intuit_method(pTHX_ char *start, SV *ioname, CV *cv)
     }
 
     if (*start == '$') {
-       if (cv || PL_last_lop_op == OP_PRINT || PL_last_lop_op == OP_SAY ||
-               isUPPER(*PL_tokenbuf))
+       if (cv || PL_last_lop_op == OP_PRINT || PL_last_lop_op == OP_SAY
+            || isUPPER(*PL_tokenbuf))
            return 0;
        s = skipspace(s);
        PL_bufptr = start;
@@ -4167,9 +4180,11 @@ S_find_in_my_stash(pTHX_ const char *pkgname, STRLEN len)
     if (len == 11 && *pkgname == '_' && strEQ(pkgname, "__PACKAGE__"))
         return PL_curstash;
 
-    if (len > 2 &&
-        (pkgname[len - 2] == ':' && pkgname[len - 1] == ':') &&
-        (gv = gv_fetchpvn_flags(pkgname, len, ( UTF ? SVf_UTF8 : 0 ), SVt_PVHV)))
+    if (len > 2
+        && (pkgname[len - 2] == ':' && pkgname[len - 1] == ':')
+        && (gv = gv_fetchpvn_flags(pkgname,
+                                   len,
+                                   ( UTF ? SVf_UTF8 : 0 ), SVt_PVHV)))
     {
         return GvHV(gv);                       /* Foo:: */
     }
@@ -4226,10 +4241,10 @@ S_tokenize_use(pTHX_ int is_use, char *s) {
 STATIC bool
 S_word_takes_any_delimeter(char *p, STRLEN len)
 {
-    return (len == 1 && strchr("msyq", p[0])) ||
-          (len == 2 && (
-           (p[0] == 't' && p[1] == 'r') ||
-           (p[0] == 'q' && strchr("qwxr", p[1]))));
+    return (len == 1 && strchr("msyq", p[0]))
+            || (len == 2
+                && ((p[0] == 't' && p[1] == 'r')
+                    || (p[0] == 'q' && strchr("qwxr", p[1]))));
 }
 
 static void
@@ -4402,10 +4417,11 @@ Perl_yylex(pTHX)
                I32 tmp;
                 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
                     tmp = *s, *s = s[2], s[2] = (char)tmp;     /* misordered... */
-               if ((*s == 'L' || *s == 'U' || *s == 'F') &&
-                   (strchr(PL_lex_casestack, 'L')
+               if ((*s == 'L' || *s == 'U' || *s == 'F')
+                    && (strchr(PL_lex_casestack, 'L')
                         || strchr(PL_lex_casestack, 'U')
-                        || strchr(PL_lex_casestack, 'F'))) {
+                        || strchr(PL_lex_casestack, 'F')))
+                {
                    PL_lex_casestack[--PL_lex_casemods] = '\0';
                    PL_lex_allbrackets--;
                    return REPORT(')');
@@ -4651,8 +4667,9 @@ Perl_yylex(pTHX)
         && (!PL_parser->filtered || s+1 < PL_bufend)) {
            PL_last_uni = 0;
            PL_last_lop = 0;
-           if (PL_lex_brackets &&
-                   PL_lex_brackstack[PL_lex_brackets-1] != XFAKEEOF) {
+           if (PL_lex_brackets
+                && PL_lex_brackstack[PL_lex_brackets-1] != XFAKEEOF)
+            {
                yyerror((const char *)
                        (PL_lex_formbrack
                         ? "Format not terminated"
@@ -4735,7 +4752,7 @@ Perl_yylex(pTHX)
            PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
            PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
            PL_last_lop = PL_last_uni = NULL;
-           if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
+           if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
                update_debugger_info(PL_linestr, NULL, 0);
            goto retry;
        }
@@ -4757,11 +4774,12 @@ Perl_yylex(pTHX)
            s = PL_bufptr;
            /* If it looks like the start of a BOM or raw UTF-16,
             * check if it in fact is. */
-           if (bof && PL_rsfp &&
-                    (*s == 0 ||
-                     *(U8*)s == BOM_UTF8_FIRST_BYTE ||
-                     *(U8*)s >= 0xFE ||
-                     s[1] == 0)) {
+           if (bof && PL_rsfp
+                && (*s == 0
+                    || *(U8*)s == BOM_UTF8_FIRST_BYTE
+                        || *(U8*)s >= 0xFE
+                        || s[1] == 0))
+            {
                Off_t offset = (IV)PerlIO_tell(PL_rsfp);
                bof = (offset == (Off_t)SvCUR(PL_linestr));
 #if defined(PERLIO_USING_CRLF) && defined(PERL_TEXTMODE_SCRIPTS)
@@ -4901,12 +4919,12 @@ Perl_yylex(pTHX)
                        *s = '#';       /* Don't try to parse shebang line */
                }
 #endif /* ALTERNATE_SHEBANG */
-               if (!d &&
-                   *s == '#' &&
-                   ipathend > ipath &&
-                   !PL_minus_c &&
-                   !instr(s,"indir") &&
-                   instr(PL_origargv[0],"perl"))
+               if (!d
+                    && *s == '#'
+                    && ipathend > ipath
+                    && !PL_minus_c
+                    && !instr(s,"indir")
+                    && instr(PL_origargv[0],"perl"))
                {
                    dVAR;
                    char **newargv;
@@ -4969,8 +4987,8 @@ Perl_yylex(pTHX)
                            } while (argc && argv[0][0] == '-' && argv[0][1]);
                            init_argv_symbols(argc,argv);
                        }
-                       if (((PERLDB_LINE || PERLDB_SAVESRC) && !oldpdb) ||
-                           ((PL_minus_n || PL_minus_p) && !(oldn || oldp)))
+                       if (   (PERLDB_LINE_OR_SAVESRC && !oldpdb)
+                            || ((PL_minus_n || PL_minus_p) && !(oldn || oldp)))
                              /* if we have already added "LINE: while (<>) {",
                                 we must not do it again */
                        {
@@ -4979,7 +4997,7 @@ Perl_yylex(pTHX)
                            PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
                            PL_last_lop = PL_last_uni = NULL;
                            PL_preambled = FALSE;
-                           if (PERLDB_LINE || PERLDB_SAVESRC)
+                           if (PERLDB_LINE_OR_SAVESRC)
                                (void)gv_fetchfile(PL_origfilename);
                            goto retry;
                        }
@@ -5004,8 +5022,9 @@ Perl_yylex(pTHX)
        goto retry;
     case '#':
     case '\n':
-       if (PL_lex_state != LEX_NORMAL ||
-            (PL_in_eval && !PL_rsfp && !PL_parser->filtered)) {
+       if (PL_lex_state != LEX_NORMAL
+            || (PL_in_eval && !PL_rsfp && !PL_parser->filtered))
+        {
             const bool in_comment = *s == '#';
            if (*s == '#' && s == PL_linestart && PL_in_eval
             && !PL_rsfp && !PL_parser->filtered) {
@@ -5152,8 +5171,10 @@ Perl_yylex(pTHX)
                    TERM(ARROW);
            }
            if (PL_expect == XOPERATOR) {
-               if (*s == '=' && !PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+               if (*s == '='
+                    && !PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+                {
                    s--;
                    TOKEN(0);
                }
@@ -5177,8 +5198,10 @@ Perl_yylex(pTHX)
                    OPERATOR(PREINC);
            }
            if (PL_expect == XOPERATOR) {
-               if (*s == '=' && !PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+               if (*s == '='
+                    && !PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+                {
                    s--;
                    TOKEN(0);
                }
@@ -5204,15 +5227,18 @@ Perl_yylex(pTHX)
        s++;
        if (*s == '*') {
            s++;
-           if (*s == '=' && !PL_lex_allbrackets &&
-                   PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+           if (*s == '=' && !PL_lex_allbrackets
+                && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+            {
                s -= 2;
                TOKEN(0);
            }
            PWop(OP_POW);
        }
-       if (*s == '=' && !PL_lex_allbrackets &&
-               PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+       if (*s == '='
+            && !PL_lex_allbrackets
+            && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+        {
            s--;
            TOKEN(0);
        }
@@ -5222,9 +5248,12 @@ Perl_yylex(pTHX)
     case '%':
     {
        if (PL_expect == XOPERATOR) {
-           if (s[1] == '=' && !PL_lex_allbrackets &&
-                   PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+           if (s[1] == '='
+                && !PL_lex_allbrackets
+                && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+            {
                TOKEN(0);
+            }
            ++s;
            PL_parser->saw_infix_sigil = 1;
            Mop(OP_MODULO);
@@ -5420,10 +5449,12 @@ Perl_yylex(pTHX)
                /* XXX losing whitespace on sequential attributes here */
            }
            {
-               if (*s != ';' && *s != '}' &&
-                   !(PL_expect == XOPERATOR
-                       ? (*s == '=' ||  *s == ')')
-                       : (*s == '{' ||  *s == '('))) {
+               if (*s != ';'
+                    && *s != '}'
+                    && !(PL_expect == XOPERATOR
+                        ? (*s == '=' ||  *s == ')')
+                        : (*s == '{' ||  *s == '(')))
+                {
                    const char q = ((*s == '\'') ? '"' : '\'');
                    /* If here for an expression, and parsed no attrs, back
                       off. */
@@ -5807,16 +5838,18 @@ Perl_yylex(pTHX)
        {
            const char tmp = *s++;
            if (tmp == '=') {
-               if (!PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+               if (!PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+                {
                    s -= 2;
                    TOKEN(0);
                }
                Eop(OP_EQ);
            }
            if (tmp == '>') {
-               if (!PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_COMMA) {
+               if (!PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_COMMA)
+                {
                    s -= 2;
                    TOKEN(0);
                }
@@ -5829,8 +5862,9 @@ Perl_yylex(pTHX)
                Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
                            "Reversed %c= operator",(int)tmp);
            s--;
-           if (PL_expect == XSTATE && isALPHA(tmp) &&
-               (s == PL_linestart+1 || s[-2] == '\n') )
+           if (PL_expect == XSTATE
+                && isALPHA(tmp)
+                && (s == PL_linestart+1 || s[-2] == '\n') )
             {
                 if ((PL_in_eval && !PL_rsfp && !PL_parser->filtered)
                     || PL_lex_state != LEX_NORMAL) {
@@ -5894,15 +5928,16 @@ Perl_yylex(pTHX)
                    while (t < PL_bufend && isSPACE(*t))
                        ++t;
 
-                   if (*t == '/' || *t == '?' ||
-                       ((*t == 'm' || *t == 's' || *t == 'y')
-                        && !isWORDCHAR(t[1])) ||
-                       (*t == 't' && t[1] == 'r' && !isWORDCHAR(t[2])))
+                   if (*t == '/' || *t == '?'
+                        || ((*t == 'm' || *t == 's' || *t == 'y')
+                           && !isWORDCHAR(t[1]))
+                        || (*t == 't' && t[1] == 'r' && !isWORDCHAR(t[2])))
                        Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
                                    "!=~ should be !~");
                }
-               if (!PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+               if (!PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+                {
                    s -= 2;
                    TOKEN(0);
                }
@@ -5928,8 +5963,9 @@ Perl_yylex(pTHX)
        {
            char tmp = *s++;
            if (tmp == '<') {
-               if (*s == '=' && !PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+               if (*s == '=' && !PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+                {
                    s -= 2;
                    TOKEN(0);
                }
@@ -5938,16 +5974,18 @@ Perl_yylex(pTHX)
            if (tmp == '=') {
                tmp = *s++;
                if (tmp == '>') {
-                   if (!PL_lex_allbrackets &&
-                           PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+                   if (!PL_lex_allbrackets
+                        && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+                    {
                        s -= 3;
                        TOKEN(0);
                    }
                    Eop(OP_NCMP);
                }
                s--;
-               if (!PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+               if (!PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+                {
                    s -= 2;
                    TOKEN(0);
                }
@@ -5965,16 +6003,18 @@ Perl_yylex(pTHX)
        {
            const char tmp = *s++;
            if (tmp == '>') {
-               if (*s == '=' && !PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+               if (*s == '=' && !PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+                {
                    s -= 2;
                    TOKEN(0);
                }
                SHop(OP_RIGHT_SHIFT);
            }
            else if (tmp == '=') {
-               if (!PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+               if (!PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+                {
                    s -= 2;
                    TOKEN(0);
                }
@@ -6182,8 +6222,9 @@ Perl_yylex(pTHX)
        }
        else if (PL_expect == XOPERATOR) {
            s++;
-           if (*s == '=' && !PL_lex_allbrackets &&
-               PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+           if (*s == '=' && !PL_lex_allbrackets
+                && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+            {
                s--;
                TOKEN(0);
            }
@@ -6203,8 +6244,9 @@ Perl_yylex(pTHX)
 
      case '?':                 /* conditional */
        s++;
-       if (!PL_lex_allbrackets &&
-           PL_lex_fakeeof >= LEX_FAKEEOF_IFELSE) {
+       if (!PL_lex_allbrackets
+            && PL_lex_fakeeof >= LEX_FAKEEOF_IFELSE)
+        {
            s--;
            TOKEN(0);
        }
@@ -6231,8 +6273,9 @@ Perl_yylex(pTHX)
        if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
            char tmp = *s++;
            if (*s == tmp) {
-               if (!PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_RANGE) {
+               if (!PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_RANGE)
+                {
                    s--;
                    TOKEN(0);
                }
@@ -6245,8 +6288,9 @@ Perl_yylex(pTHX)
                    pl_yylval.ival = 0;
                OPERATOR(DOTDOT);
            }
-           if (*s == '=' && !PL_lex_allbrackets &&
-                   PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+           if (*s == '=' && !PL_lex_allbrackets
+                && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+            {
                s--;
                TOKEN(0);
            }
@@ -6310,7 +6354,13 @@ Perl_yylex(pTHX)
 
     case '`':
        s = scan_str(s,FALSE,FALSE,FALSE,NULL);
-       DEBUG_T( { printbuf("### Saw backtick string before %s\n", s); } );
+       DEBUG_T( {
+            if (s)
+                printbuf("### Saw backtick string before %s\n", s);
+            else
+               PerlIO_printf(Perl_debug_log,
+                            "### Saw unterminated backtick string\n");
+        } );
        if (PL_expect == XOPERATOR)
            no_op("Backticks",s);
        if (!s)
@@ -6521,24 +6571,23 @@ Perl_yylex(pTHX)
                CV *cv;
                if ((gv = gv_fetchpvn_flags(PL_tokenbuf, len,
                                            (UTF ? SVf_UTF8 : 0)|GV_NOTQUAL,
-                                           SVt_PVCV)) &&
-                   (cv = GvCVu(gv)))
+                                           SVt_PVCV))
+                    && (cv = GvCVu(gv)))
                {
                    if (GvIMPORTED_CV(gv))
                        ogv = gv;
                    else if (! CvMETHOD(cv))
                        hgv = gv;
                }
-               if (!ogv &&
-                   (gvp = (GV**)hv_fetch(PL_globalstash, PL_tokenbuf,
-                                         len, FALSE)) &&
-                   (gv = *gvp) && (
-                       isGV_with_GP(gv)
-                           ? GvCVu(gv) && GvIMPORTED_CV(gv)
-                           :   SvPCS_IMPORTED(gv)
-                            && (gv_init(gv, PL_globalstash, PL_tokenbuf,
-                                        len, 0), 1)
-                  ))
+               if (!ogv
+                    && (gvp = (GV**)hv_fetch(PL_globalstash, PL_tokenbuf,
+                                                              len, FALSE))
+                    && (gv = *gvp)
+                    && (isGV_with_GP(gv)
+                       ? GvCVu(gv) && GvIMPORTED_CV(gv)
+                       :   SvPCS_IMPORTED(gv)
+                       && (gv_init(gv, PL_globalstash, PL_tokenbuf,
+                                                                 len, 0), 1)))
                {
                    ogv = gv;
                }
@@ -6637,8 +6686,9 @@ Perl_yylex(pTHX)
                   in which case Foo is a bareword
                   (and a package name). */
 
-               if (len > 2 &&
-                   PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
+               if (len > 2
+                    && PL_tokenbuf[len - 2] == ':'
+                    && PL_tokenbuf[len - 1] == ':')
                {
                    if (ckWARN(WARN_BAREWORD)
                        && ! gv_fetchpvn_flags(PL_tokenbuf, len, UTF ? SVf_UTF8 : 0, SVt_PVHV))
@@ -6698,13 +6748,14 @@ Perl_yylex(pTHX)
 
                /* See if it's the indirect object for a list operator. */
 
-               if (PL_oldoldbufptr &&
-                   PL_oldoldbufptr < PL_bufptr &&
-                   (PL_oldoldbufptr == PL_last_lop
-                    || PL_oldoldbufptr == PL_last_uni) &&
-                   /* NO SKIPSPACE BEFORE HERE! */
-                   (PL_expect == XREF ||
-                    ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
+               if (PL_oldoldbufptr
+                    && PL_oldoldbufptr < PL_bufptr
+                    && (PL_oldoldbufptr == PL_last_lop
+                       || PL_oldoldbufptr == PL_last_uni)
+                    && /* NO SKIPSPACE BEFORE HERE! */
+                      (PL_expect == XREF
+                        || ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7)
+                                                               == OA_FILEREF))
                {
                    bool immediate_paren = *s == '(';
 
@@ -6713,8 +6764,9 @@ Perl_yylex(pTHX)
 
                    /* Two barewords in a row may indicate method call. */
 
-                   if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') &&
-                       (tmp = intuit_method(s, lex ? NULL : sv, cv))) {
+                   if ((isIDFIRST_lazy_if(s,UTF) || *s == '$')
+                        && (tmp = intuit_method(s, lex ? NULL : sv, cv)))
+                    {
                        goto method;
                    }
 
@@ -6723,12 +6775,13 @@ Perl_yylex(pTHX)
                    /* Also, if "_" follows a filetest operator, it's a bareword */
 
                    if (
-                       ( !immediate_paren && (PL_last_lop_op == OP_SORT ||
-                         (!cv &&
-                        (PL_last_lop_op != OP_MAPSTART &&
-                        PL_last_lop_op != OP_GREPSTART))))
+                       ( !immediate_paren && (PL_last_lop_op == OP_SORT
+                         || (!cv
+                             && (PL_last_lop_op != OP_MAPSTART
+                                 && PL_last_lop_op != OP_GREPSTART))))
                       || (PL_tokenbuf[0] == '_' && PL_tokenbuf[1] == '\0'
-                           && ((PL_opargs[PL_last_lop_op] & OA_CLASS_MASK) == OA_FILESTATOP))
+                           && ((PL_opargs[PL_last_lop_op] & OA_CLASS_MASK)
+                                                            == OA_FILESTATOP))
                       )
                    {
                        PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
@@ -6784,9 +6837,11 @@ Perl_yylex(pTHX)
                    op_free(rv2cv_op);
                    PL_last_lop = PL_oldbufptr;
                    PL_last_lop_op = OP_METHOD;
-                   if (!PL_lex_allbrackets &&
-                           PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                   if (!PL_lex_allbrackets
+                        && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                    {
                        PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+                    }
                    PL_expect = XBLOCKTERM;
                    PL_bufptr = s;
                    return REPORT(METHOD);
@@ -6808,9 +6863,11 @@ Perl_yylex(pTHX)
                        else SvUTF8_off(sv);
                    }
                    op_free(rv2cv_op);
-                   if (tmp == METHOD && !PL_lex_allbrackets &&
-                           PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                   if (tmp == METHOD && !PL_lex_allbrackets
+                        && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                    {
                        PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+                    }
                    return REPORT(tmp);
                }
 
@@ -6879,18 +6936,22 @@ Perl_yylex(pTHX)
                                sv_setpvs(PL_subname, "__ANON__");
                            else
                                sv_setpvs(PL_subname, "__ANON__::__ANON__");
-                           if (!PL_lex_allbrackets &&
-                                   PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                           if (!PL_lex_allbrackets
+                                && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                            {
                                PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+                            }
                            PREBLOCK(LSTOPSUB);
                        }
                    }
                    NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
                    PL_expect = XTERM;
                    force_next(off ? PRIVATEREF : WORD);
-                   if (!PL_lex_allbrackets &&
-                           PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                   if (!PL_lex_allbrackets
+                        && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                    {
                        PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+                    }
                    TOKEN(NOAMP);
                }
 
@@ -7301,11 +7362,13 @@ Perl_yylex(pTHX)
            if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
                char *p = s;
 
-               if ((PL_bufend - p) >= 3 &&
-                   strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
+               if ((PL_bufend - p) >= 3
+                    && strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
+                {
                    p += 2;
-               else if ((PL_bufend - p) >= 4 &&
-                   strnEQ(p, "our", 3) && isSPACE(*(p + 3)))
+                }
+               else if ((PL_bufend - p) >= 4
+                         && strnEQ(p, "our", 3) && isSPACE(*(p + 3)))
                    p += 3;
                p = skipspace(p);
                 /* skip optional package name, as in "for my abc $x (..)" */
@@ -7542,6 +7605,14 @@ Perl_yylex(pTHX)
        case KEY_our:
        case KEY_my:
        case KEY_state:
+           if (PL_in_my) {
+               yyerror(Perl_form(aTHX_
+                                 "Can't redeclare \"%s\" in \"%s\"",
+                                  tmp      == KEY_my    ? "my" :
+                                  tmp      == KEY_state ? "state" : "our",
+                                  PL_in_my == KEY_my    ? "my" :
+                                  PL_in_my == KEY_state ? "state" : "our"));
+           }
            PL_in_my = (U16)tmp;
            s = skipspace(s);
            if (isIDFIRST_lazy_if(s,UTF)) {
@@ -7587,9 +7658,11 @@ Perl_yylex(pTHX)
            if (*s == '(' || (s = skipspace(s), *s == '('))
                FUN1(OP_NOT);
            else {
-               if (!PL_lex_allbrackets &&
-                       PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+               if (!PL_lex_allbrackets
+                    && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+                {
                    PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+                }
                OPERATOR(NOTOP);
            }
 
@@ -7958,8 +8031,9 @@ Perl_yylex(pTHX)
                d = s;
                s = skipspace(s);
 
-               if (isIDFIRST_lazy_if(s,UTF) || *s == '\'' ||
-                   (*s == ':' && s[1] == ':'))
+               if (isIDFIRST_lazy_if(s,UTF)
+                    || *s == '\''
+                    || (*s == ':' && s[1] == ':'))
                {
 
                    PL_expect = XBLOCK;
@@ -8182,9 +8256,11 @@ Perl_yylex(pTHX)
 
        case KEY_x:
            if (PL_expect == XOPERATOR) {
-               if (*s == '=' && !PL_lex_allbrackets &&
-                       PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+               if (*s == '=' && !PL_lex_allbrackets
+                    && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+                {
                    return REPORT(0);
+                }
                Mop(OP_REPEAT);
            }
            check_uni();
@@ -8304,14 +8380,17 @@ S_pending_ident(pTHX)
        and @foo isn't a variable we can find in the symbol
        table.
     */
-    if (ckWARN(WARN_AMBIGUOUS) &&
-       pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
+    if (ckWARN(WARN_AMBIGUOUS)
+        && pit == '@'
+        && PL_lex_state != LEX_NORMAL
+        && !PL_lex_brackets)
+    {
         GV *const gv = gv_fetchpvn_flags(PL_tokenbuf + 1, tokenbuf_len - 1,
                                         ( UTF ? SVf_UTF8 : 0 ), SVt_PVAV);
         if ((!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
                /* DO NOT warn for @- and @+ */
-               && !( PL_tokenbuf[2] == '\0' &&
-                   ( PL_tokenbuf[1] == '-' || PL_tokenbuf[1] == '+' ))
+               && !( PL_tokenbuf[2] == '\0'
+                      && ( PL_tokenbuf[1] == '-' || PL_tokenbuf[1] == '+' ))
           )
         {
             /* Downgraded from fatal to warning 20000522 mjd */
@@ -8674,12 +8753,12 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
 
     /* Here, it is not a run-of-the-mill identifier name */
 
-    if (*s == '$' && s[1] &&
-      (isIDFIRST_lazy_if(s+1,is_utf8)
-         || isDIGIT_A((U8)s[1])
-         || s[1] == '$'
-         || s[1] == '{'
-         || strnEQ(s+1,"::",2)) )
+    if (*s == '$' && s[1]
+        && (isIDFIRST_lazy_if(s+1,is_utf8)
+            || isDIGIT_A((U8)s[1])
+            || s[1] == '$'
+            || s[1] == '{'
+            || strnEQ(s+1,"::",2)) )
     {
         /* Dereferencing a value in a scalar variable.
            The alternatives are different syntaxes for a scalar variable.
@@ -8711,7 +8790,7 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
         {
             deprecate("literal non-graphic characters in variable names");
         }
-        
+
         if (is_utf8) {
             const STRLEN skip = UTF8SKIP(s);
             STRLEN i;
@@ -8796,12 +8875,14 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
                PL_expect = XREF;
            }
            if (PL_lex_state == LEX_NORMAL) {
-               if (ckWARN(WARN_AMBIGUOUS) &&
-                   (keyword(dest, d - dest, 0)
-                    || get_cvn_flags(dest, d - dest, is_utf8 ? SVf_UTF8 : 0)))
+               if (ckWARN(WARN_AMBIGUOUS)
+                    && (keyword(dest, d - dest, 0)
+                       || get_cvn_flags(dest, d - dest, is_utf8
+                           ? SVf_UTF8
+                           : 0)))
                {
                     SV *tmp = newSVpvn_flags( dest, d - dest,
-                                            SVs_TEMP | (is_utf8 ? SVf_UTF8 : 0) );
+                                        SVs_TEMP | (is_utf8 ? SVf_UTF8 : 0) );
                    if (funny == '#')
                        funny = '@';
                     orig_copline = CopLINE(PL_curcop);
@@ -9310,8 +9391,9 @@ S_scan_heredoc(pTHX_ char *s)
        linestr = shared->ls_linestr;
        bufend = SvEND(linestr);
        d = s;
-       while (s < bufend - len + 1 &&
-          memNE(s,PL_tokenbuf,len) ) {
+       while (s < bufend - len + 1
+               && memNE(s,PL_tokenbuf,len) )
+        {
            if (*s++ == '\n')
                ++PL_parser->herelines;
        }
@@ -9340,9 +9422,10 @@ S_scan_heredoc(pTHX_ char *s)
                                bufend - shared->re_eval_start);
            shared->re_eval_start -= s-d;
        }
-       if (cxstack_ix >= 0 && CxTYPE(cx) == CXt_EVAL &&
-            CxOLD_OP_TYPE(cx) == OP_ENTEREVAL &&
-            cx->blk_eval.cur_text == linestr)
+       if (cxstack_ix >= 0
+            && CxTYPE(cx) == CXt_EVAL
+            && CxOLD_OP_TYPE(cx) == OP_ENTEREVAL
+            && cx->blk_eval.cur_text == linestr)
         {
            cx->blk_eval.cur_text = newSVsv(linestr);
            SvSCREAM_on(cx->blk_eval.cur_text);
@@ -9396,8 +9479,8 @@ S_scan_heredoc(pTHX_ char *s)
        PL_last_lop = PL_last_uni = NULL;
 #ifndef PERL_STRICT_CR
        if (PL_bufend - PL_linestart >= 2) {
-           if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
-               (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
+           if (   (PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n')
+                || (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
            {
                PL_bufend[-2] = '\n';
                PL_bufend--;
@@ -9878,8 +9961,8 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re
                    COPLINE_INC_WITH_HERELINES;
                /* backslashes can escape the open or closing characters */
                if (*s == '\\' && s+1 < PL_bufend) {
-                   if (!keep_bracketed_quoted &&
-                       ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)))
+                   if (!keep_bracketed_quoted
+                       && ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)))
                     {
                        s++;
                     }
@@ -9909,8 +9992,8 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re
 
 #ifndef PERL_STRICT_CR
        if (to - SvPVX_const(sv) >= 2) {
-           if ((to[-2] == '\r' && to[-1] == '\n') ||
-               (to[-2] == '\n' && to[-1] == '\r'))
+           if (   (to[-2] == '\r' && to[-1] == '\n')
+                || (to[-2] == '\n' && to[-1] == '\r'))
            {
                to[-2] = '\n';
                to--;
@@ -10255,8 +10338,9 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
                                 hexfp_exp *= 10;
                                 hexfp_exp += *h - '0';
 #ifdef NV_MIN_EXP
-                                if (negexp &&
-                                    -hexfp_exp < NV_MIN_EXP - 1) {
+                                if (negexp
+                                    && -hexfp_exp < NV_MIN_EXP - 1)
+                                {
                                     Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
                                                    "Hexadecimal float: exponent underflow");
 #endif
@@ -10264,8 +10348,9 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
                                 }
                                 else {
 #ifdef NV_MAX_EXP
-                                    if (!negexp &&
-                                        hexfp_exp > NV_MAX_EXP - 1) {
+                                    if (!negexp
+                                        && hexfp_exp > NV_MAX_EXP - 1)
+                                    {
                                         Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
                                                    "Hexadecimal float: exponent overflow");
                                         break;
@@ -10329,8 +10414,10 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
         }
 
        /* read next group of digits and _ and copy into d */
-       while (isDIGIT(*s) || *s == '_' ||
-               UNLIKELY(hexfp && isXDIGIT(*s))) {
+       while (isDIGIT(*s)
+               || *s == '_'
+               || UNLIKELY(hexfp && isXDIGIT(*s)))
+        {
            /* skip underscores, checking for misplaced ones
               if -w is on
            */
@@ -10370,9 +10457,11 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
 
            /* copy, ignoring underbars, until we run out of digits.
            */
-           for (; isDIGIT(*s) || *s == '_' ||
-                     UNLIKELY(hexfp && isXDIGIT(*s));
-                 s++) {
+           for (; isDIGIT(*s)
+                   || *s == '_'
+                   || UNLIKELY(hexfp && isXDIGIT(*s));
+                 s++)
+            {
                /* fixed length buffer check */
                if (d >= e)
                    Perl_croak(aTHX_ "%s", number_too_long);
@@ -10443,8 +10532,8 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
                    *d++ = *s++;
                }
                else {
-                  if (((lastub && s == lastub + 1) ||
-                       (!isDIGIT(s[1]) && s[1] != '_')))
+                  if (((lastub && s == lastub + 1)
+                        || (!isDIGIT(s[1]) && s[1] != '_')))
                       Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
                                      "Misplaced _ in number");
                   lastub = s++;
@@ -10689,9 +10778,12 @@ Perl_yyerror_pvn(pTHX_ const char *const s, STRLEN len, U32 flags)
 
     if (!yychar || (yychar == ';' && !PL_rsfp))
        sv_catpvs(where_sv, "at EOF");
-    else if (PL_oldoldbufptr && PL_bufptr > PL_oldoldbufptr &&
-      PL_bufptr - PL_oldoldbufptr < 200 && PL_oldoldbufptr != PL_oldbufptr &&
-      PL_oldbufptr != PL_bufptr) {
+    else if (   PL_oldoldbufptr
+             && PL_bufptr > PL_oldoldbufptr
+             && PL_bufptr - PL_oldoldbufptr < 200
+             && PL_oldoldbufptr != PL_oldbufptr
+             && PL_oldbufptr != PL_bufptr)
+    {
        /*
                Only for NetWare:
                The code below is removed for NetWare because it abends/crashes on NetWare
@@ -10706,8 +10798,10 @@ Perl_yyerror_pvn(pTHX_ const char *const s, STRLEN len, U32 flags)
        context = PL_oldoldbufptr;
        contlen = PL_bufptr - PL_oldoldbufptr;
     }
-    else if (PL_oldbufptr && PL_bufptr > PL_oldbufptr &&
-      PL_bufptr - PL_oldbufptr < 200 && PL_oldbufptr != PL_bufptr) {
+    else if (  PL_oldbufptr
+            && PL_bufptr > PL_oldbufptr
+            && PL_bufptr - PL_oldbufptr < 200
+            && PL_oldbufptr != PL_bufptr) {
        /*
                Only for NetWare:
                The code below is removed for NetWare because it abends/crashes on NetWare
@@ -10725,8 +10819,8 @@ Perl_yyerror_pvn(pTHX_ const char *const s, STRLEN len, U32 flags)
     else if (yychar > 255)
        sv_catpvs(where_sv, "next token ???");
     else if (yychar == YYEMPTY) {
-       if (PL_lex_state == LEX_NORMAL ||
-          (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
+       if (    PL_lex_state == LEX_NORMAL
+            || (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
            sv_catpvs(where_sv, "at end of line");
        else if (PL_lex_inpat)
            sv_catpvs(where_sv, "within pattern");
@@ -11177,7 +11271,7 @@ Parse a Perl arithmetic expression.  This may contain operators of precedence
 down to the bit shift operators.  The expression must be followed (and thus
 terminated) either by a comparison or lower-precedence operator or by
 something that would normally terminate an expression such as semicolon.
-If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
+If C<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
 otherwise it is mandatory.  It is up to the caller to ensure that the
 dynamic parser state (L</PL_parser> et al) is correctly set to reflect
 the source of the code to be parsed and the lexical context for the
@@ -11209,7 +11303,7 @@ Parse a Perl term expression.  This may contain operators of precedence
 down to the assignment operators.  The expression must be followed (and thus
 terminated) either by a comma or lower-precedence operator or by
 something that would normally terminate an expression such as semicolon.
-If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
+If C<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
 otherwise it is mandatory.  It is up to the caller to ensure that the
 dynamic parser state (L</PL_parser> et al) is correctly set to reflect
 the source of the code to be parsed and the lexical context for the
@@ -11241,7 +11335,7 @@ Parse a Perl list expression.  This may contain operators of precedence
 down to the comma operator.  The expression must be followed (and thus
 terminated) either by a low-precedence logic operator such as C<or> or by
 something that would normally terminate an expression such as semicolon.
-If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
+If C<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
 otherwise it is mandatory.  It is up to the caller to ensure that the
 dynamic parser state (L</PL_parser> et al) is correctly set to reflect
 the source of the code to be parsed and the lexical context for the
@@ -11274,7 +11368,7 @@ expression grammar, including the lowest-precedence operators such
 as C<or>.  The expression must be followed (and thus terminated) by a
 token that an expression would normally be terminated by: end-of-file,
 closing bracketing punctuation, semicolon, or one of the keywords that
-signals a postfix expression-statement modifier.  If I<flags> includes
+signals a postfix expression-statement modifier.  If C<flags> includes
 C<PARSE_OPTIONAL> then the expression is optional, otherwise it is
 mandatory.  It is up to the caller to ensure that the dynamic parser
 state (L</PL_parser> et al) is correctly set to reflect the source of
@@ -11321,7 +11415,7 @@ the parser state, normally resulting in a single exception at the top
 level of parsing which covers all the compilation errors that occurred.
 Some compilation errors, however, will throw an exception immediately.
 
-The I<flags> parameter is reserved for future use, and must always
+The C<flags> parameter is reserved for future use, and must always
 be zero.
 
 =cut
@@ -11359,7 +11453,7 @@ the parser state, normally resulting in a single exception at the top
 level of parsing which covers all the compilation errors that occurred.
 Some compilation errors, however, will throw an exception immediately.
 
-The I<flags> parameter is reserved for future use, and must always
+The C<flags> parameter is reserved for future use, and must always
 be zero.
 
 =cut
@@ -11379,7 +11473,7 @@ Perl_parse_barestmt(pTHX_ U32 flags)
 Parse a single label, possibly optional, of the type that may prefix a
 Perl statement.  It is up to the caller to ensure that the dynamic parser
 state (L</PL_parser> et al) is correctly set to reflect the source of
-the code to be parsed.  If I<flags> includes C<PARSE_OPTIONAL> then the
+the code to be parsed.  If C<flags> includes C<PARSE_OPTIONAL> then the
 label is optional, otherwise it is mandatory.
 
 The name of the label is returned in the form of a fresh scalar.  If an
@@ -11463,7 +11557,7 @@ the parser state, normally resulting in a single exception at the top
 level of parsing which covers all the compilation errors that occurred.
 Some compilation errors, however, will throw an exception immediately.
 
-The I<flags> parameter is reserved for future use, and must always
+The C<flags> parameter is reserved for future use, and must always
 be zero.
 
 =cut
@@ -11501,7 +11595,7 @@ normally resulting in a single exception at the top level of parsing
 which covers all the compilation errors that occurred.  Some compilation
 errors, however, will throw an exception immediately.
 
-The I<flags> parameter is reserved for future use, and must always
+The C<flags> parameter is reserved for future use, and must always
 be zero.
 
 =cut
@@ -11593,8 +11687,9 @@ Perl_parse_subsignature(pTHX)
                                    "lacks default expression"));
                    } else {
                        OP *defexpr = parse_termexpr(0);
-                       if (defexpr->op_type == OP_UNDEF &&
-                               !(defexpr->op_flags & OPf_KIDS)) {
+                       if (defexpr->op_type == OP_UNDEF
+                            && !(defexpr->op_flags & OPf_KIDS))
+                        {
                            op_free(defexpr);
                        } else {
                            OP *ifop = 
index 7da4eb3..be7a38e 100644 (file)
@@ -8,10 +8,11 @@
 #ifndef H_UNICODE_CONSTANTS   /* Guard against nested #includes */
 #define H_UNICODE_CONSTANTS   1
 
-/* This file contains #defines for various Unicode code points.  The values
- * the macros expand to are the native Unicode code point, or all or portions
- * of the UTF-8 encoding for the code point.  In the former case, the macro
- * name has the suffix "_NATIVE"; otherwise, the suffix "_UTF8".
+/* This file contains #defines for the version of Unicode being used and
+ * various Unicode code points.  The values the code point macros expand to
+ * are the native Unicode code point, or all or portions of the UTF-8 encoding
+ * for the code point.  In the former case, the macro name has the suffix
+ * "_NATIVE"; otherwise, the suffix "_UTF8".
  *
  * The macros that have the suffix "_UTF8" may have further suffixes, as
  * follows:
  *  "_TAIL"       if instead it represents all but the first byte.  This, and
  *                with no additional suffix are both string constants */
 
+#define UNICODE_MAJOR_VERSION   8
+#define UNICODE_DOT_VERSION     0
+#define UNICODE_DOT_DOT_VERSION 0
+
 
 #if 'A' == 65 /* ASCII/Latin1 */
 #   define LATIN_SMALL_LETTER_LONG_S_UTF8  "\xC5\xBF"    /* U+017F */
@@ -33,6 +38,8 @@
 
 #   define LATIN_SMALL_LIGATURE_LONG_S_T_UTF8  "\xEF\xAC\x85"    /* U+FB05 */
 #   define LATIN_SMALL_LIGATURE_ST_UTF8  "\xEF\xAC\x86"    /* U+FB06 */
+#   define LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8  "\xC4\xB0"    /* U+0130 */
+#   define LATIN_SMALL_LETTER_DOTLESS_I_UTF8  "\xC4\xB1"    /* U+0131 */
 
 #   define HYPHEN_UTF8  "\xE2\x80\x90"    /* U+2010 */
 #   define FIRST_SURROGATE_UTF8_FIRST_BYTE  0xED    /* U+D800 */
@@ -71,6 +78,8 @@
 
 #   define LATIN_SMALL_LIGATURE_LONG_S_T_UTF8  "\xDD\x72\x67\x46"    /* U+FB05 */
 #   define LATIN_SMALL_LIGATURE_ST_UTF8  "\xDD\x72\x67\x47"    /* U+FB06 */
+#   define LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8  "\x8D\x57"    /* U+0130 */
+#   define LATIN_SMALL_LETTER_DOTLESS_I_UTF8  "\x8D\x58"    /* U+0131 */
 
 #   define HYPHEN_UTF8  "\xCA\x41\x57"    /* U+2010 */
 #   define FIRST_SURROGATE_UTF8_FIRST_BYTE  0xDD    /* U+D800 */
 
 #   define LATIN_SMALL_LIGATURE_LONG_S_T_UTF8  "\xDD\x71\x66\x46"    /* U+FB05 */
 #   define LATIN_SMALL_LIGATURE_ST_UTF8  "\xDD\x71\x66\x47"    /* U+FB06 */
+#   define LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8  "\x8C\x57"    /* U+0130 */
+#   define LATIN_SMALL_LETTER_DOTLESS_I_UTF8  "\x8C\x58"    /* U+0131 */
 
 #   define HYPHEN_UTF8  "\xCA\x41\x57"    /* U+2010 */
 #   define FIRST_SURROGATE_UTF8_FIRST_BYTE  0xDD    /* U+D800 */
 
 #   define LATIN_SMALL_LIGATURE_LONG_S_T_UTF8  "\xDC\x74\x68\x46"    /* U+FB05 */
 #   define LATIN_SMALL_LIGATURE_ST_UTF8  "\xDC\x74\x68\x47"    /* U+FB06 */
+#   define LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8  "\x8E\x58"    /* U+0130 */
+#   define LATIN_SMALL_LETTER_DOTLESS_I_UTF8  "\x8E\x59"    /* U+0131 */
 
 #   define HYPHEN_UTF8  "\xCA\x41\x58"    /* U+2010 */
 #   define FIRST_SURROGATE_UTF8_FIRST_BYTE  0xDC    /* U+D800 */
diff --git a/utf8.c b/utf8.c
index 360e1f5..794649e 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -31,7 +31,7 @@
 #include "EXTERN.h"
 #define PERL_IN_UTF8_C
 #include "perl.h"
-#include "inline_invlist.c"
+#include "invlist_inline.h"
 
 static const char unees[] =
     "Malformed UTF-8 character (unexpected end of string)";
@@ -1413,11 +1413,15 @@ Perl__to_upper_title_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp, const char S_
            case MICRO_SIGN:
                converted = GREEK_CAPITAL_LETTER_MU;
                break;
+#if    UNICODE_MAJOR_VERSION > 2                                        \
+   || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1           \
+                                  && UNICODE_DOT_DOT_VERSION >= 8)
            case LATIN_SMALL_LETTER_SHARP_S:
                *(p)++ = 'S';
                *p = S_or_s;
                *lenp = 2;
                return 'S';
+#endif
            default:
                Perl_croak(aTHX_ "panic: to_upper_title_latin1 did not expect '%c' to map to '%c'", c, LATIN_SMALL_LETTER_Y_WITH_DIAERESIS);
                NOT_REACHED; /* NOTREACHED */
@@ -1540,6 +1544,9 @@ Perl__to_fold_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp, const unsigned int f
     if (c == MICRO_SIGN) {
        converted = GREEK_SMALL_LETTER_MU;
     }
+#if    UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */   \
+   || (UNICODE_MAJOR_VERSION == 3 && (   UNICODE_DOT_VERSION > 0)       \
+                                      || UNICODE_DOT_DOT_VERSION > 0)
     else if ((flags & FOLD_FLAGS_FULL) && c == LATIN_SMALL_LETTER_SHARP_S) {
 
         /* If can't cross 127/128 boundary, can't return "ss"; instead return
@@ -1558,6 +1565,7 @@ Perl__to_fold_latin1(pTHX_ const U8 c, U8* p, STRLEN *lenp, const unsigned int f
             return 's';
         }
     }
+#endif
     else { /* In this range the fold of all other characters is their lower
               case */
        converted = toLOWER_LATIN1(c);
@@ -2200,11 +2208,13 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags)
 
        if (flags & FOLD_FLAGS_LOCALE) {
 
-#           define CAP_SHARP_S   LATIN_CAPITAL_LETTER_SHARP_S_UTF8
 #           define LONG_S_T      LATIN_SMALL_LIGATURE_LONG_S_T_UTF8
+            const unsigned int long_s_t_len    = sizeof(LONG_S_T) - 1;
+
+#         ifdef LATIN_CAPITAL_LETTER_SHARP_S_UTF8
+#           define CAP_SHARP_S   LATIN_CAPITAL_LETTER_SHARP_S_UTF8
 
             const unsigned int cap_sharp_s_len = sizeof(CAP_SHARP_S) - 1;
-            const unsigned int long_s_t_len    = sizeof(LONG_S_T) - 1;
 
             /* Special case these two characters, as what normally gets
              * returned under locale doesn't work */
@@ -2217,7 +2227,9 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags)
                               "resolved to \"\\x{17F}\\x{17F}\".");
                 goto return_long_s;
             }
-            else if (UTF8SKIP(p) == long_s_t_len
+            else
+#endif
+                 if (UTF8SKIP(p) == long_s_t_len
                      && memEQ((char *) p, LONG_S_T, long_s_t_len))
             {
                 /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
@@ -2226,6 +2238,28 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags)
                               "resolved to \"\\x{FB06}\".");
                 goto return_ligature_st;
             }
+
+#if    UNICODE_MAJOR_VERSION   == 3         \
+    && UNICODE_DOT_VERSION     == 0         \
+    && UNICODE_DOT_DOT_VERSION == 1
+#           define DOTTED_I   LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8
+
+            /* And special case this on this Unicode version only, for the same
+             * reaons the other two are special cased.  They would cross the
+             * 255/256 boundary which is forbidden under /l, and so the code
+             * wouldn't catch that they are equivalent (which they are only in
+             * this release) */
+            else if (UTF8SKIP(p) == sizeof(DOTTED_I) - 1
+                     && memEQ((char *) p, DOTTED_I, sizeof(DOTTED_I) - 1))
+            {
+                /* diag_listed_as: Can't do %s("%s") on non-UTF-8 locale; resolved to "%s". */
+                Perl_ck_warner(aTHX_ packWARN(WARN_LOCALE),
+                              "Can't do fc(\"\\x{0130}\") on non-UTF-8 locale; "
+                              "resolved to \"\\x{0131}\".");
+                goto return_dotless_i;
+            }
+#endif
+
            return check_locale_boundary_crossing(p, result, ustrp, lenp);
        }
        else if (! (flags & FOLD_FLAGS_NOMIX_ASCII)) {
@@ -2249,14 +2283,24 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags)
 
                     /* But in these instances, there is an alternative we can
                      * return that is valid */
-                    if (original == LATIN_CAPITAL_LETTER_SHARP_S
-                        || original == LATIN_SMALL_LETTER_SHARP_S)
-                    {
+                    if (original == LATIN_SMALL_LETTER_SHARP_S
+#ifdef LATIN_CAPITAL_LETTER_SHARP_S /* not defined in early Unicode releases */
+                        || original == LATIN_CAPITAL_LETTER_SHARP_S
+#endif
+                    ) {
                         goto return_long_s;
                     }
                     else if (original == LATIN_SMALL_LIGATURE_LONG_S_T) {
                         goto return_ligature_st;
                     }
+#if    UNICODE_MAJOR_VERSION   == 3         \
+    && UNICODE_DOT_VERSION     == 0         \
+    && UNICODE_DOT_DOT_VERSION == 1
+
+                    else if (original == LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE) {
+                        goto return_dotless_i;
+                    }
+#endif
                    Copy(p, ustrp, *lenp, char);
                    return original;
                }
@@ -2300,6 +2344,18 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags)
     *lenp = sizeof(LATIN_SMALL_LIGATURE_ST_UTF8) - 1;
     Copy(LATIN_SMALL_LIGATURE_ST_UTF8, ustrp, *lenp, U8);
     return LATIN_SMALL_LIGATURE_ST;
+
+#if    UNICODE_MAJOR_VERSION   == 3         \
+    && UNICODE_DOT_VERSION     == 0         \
+    && UNICODE_DOT_DOT_VERSION == 1
+
+  return_dotless_i:
+    *lenp = sizeof(LATIN_SMALL_LETTER_DOTLESS_I_UTF8) - 1;
+    Copy(LATIN_SMALL_LETTER_DOTLESS_I_UTF8, ustrp, *lenp, U8);
+    return LATIN_SMALL_LETTER_DOTLESS_I;
+
+#endif
+
 }
 
 /* Note:
@@ -3252,7 +3308,24 @@ Perl__swash_inversion_hash(pTHX_ SV* const swash)
     * currently handle.  But it also means that FB05 and FB06 are equivalent in
     * a 1-1 mapping which we should handle, and this relationship may not be in
     * the main table.  Therefore this function examines all the multi-char
-    * sequences and adds the 1-1 mappings that come out of that.  */
+    * sequences and adds the 1-1 mappings that come out of that.
+    *
+    * XXX This function was originally intended to be multipurpose, but its
+    * only use is quite likely to remain for constructing the inversion of
+    * the CaseFolding (//i) property.  If it were more general purpose for
+    * regex patterns, it would have to do the FB05/FB06 game for simple folds,
+    * because certain folds are prohibited under /iaa and /il.  As an example,
+    * in Unicode 3.0.1 both U+0130 and U+0131 fold to 'i', and hence are both
+    * equivalent under /i.  But under /iaa and /il, the folds to 'i' are
+    * prohibited, so we would not figure out that they fold to each other.
+    * Code could be written to automatically figure this out, similar to the
+    * code that does this for multi-character folds, but this is the only case
+    * where something like this is ever likely to happen, as all the single
+    * char folds to The 0-255 range are now quite settled.  Instead there is a
+    * little special code that is compiled only for this Unicode version.  This
+    * is smaller and didn't require much coding time to do.  But this makes
+    * this routine strongly tied to being used just for CaseFolding.  If ever
+    * it should be generalized, this would have to be fixed */
 
     U8 *l, *lend;
     STRLEN lcur;
@@ -3395,7 +3468,24 @@ Perl__swash_inversion_hash(pTHX_ SV* const swash)
     } /* End of specials */
 
     /* read $swash->{LIST} */
+
+#if    UNICODE_MAJOR_VERSION   == 3         \
+    && UNICODE_DOT_VERSION     == 0         \
+    && UNICODE_DOT_DOT_VERSION == 1
+
+    /* For this version only U+130 and U+131 are equivalent under qr//i.  Add a
+     * rule so that things work under /iaa and /il */
+
+    SV * mod_listsv = sv_mortalcopy(*listsvp);
+    sv_catpv(mod_listsv, "130\t130\t131\n");
+    l = (U8*)SvPV(mod_listsv, lcur);
+
+#else
+
     l = (U8*)SvPV(*listsvp, lcur);
+
+#endif
+
     lend = l + lcur;
 
     /* Go through each input line */
@@ -3752,7 +3842,7 @@ Perl_check_utf8_print(pTHX_ const U8* s, const STRLEN len)
        }
        if (UNLIKELY(*s >= UTF8_FIRST_PROBLEMATIC_CODE_POINT_FIRST_BYTE)) {
            STRLEN char_len;
-           if (UTF8_IS_SUPER(s)) {
+           if (UTF8_IS_SUPER(s, e)) {
                if (ckWARN_d(WARN_NON_UNICODE)) {
                    UV uv = utf8_to_uvchr_buf(s, e, &char_len);
                    Perl_warner(aTHX_ packWARN(WARN_NON_UNICODE),
@@ -3760,7 +3850,7 @@ Perl_check_utf8_print(pTHX_ const U8* s, const STRLEN len)
                    ok = FALSE;
                }
            }
-           else if (UTF8_IS_SURROGATE(s)) {
+           else if (UTF8_IS_SURROGATE(s, e)) {
                if (ckWARN_d(WARN_SURROGATE)) {
                    UV uv = utf8_to_uvchr_buf(s, e, &char_len);
                    Perl_warner(aTHX_ packWARN(WARN_SURROGATE),
@@ -3768,10 +3858,7 @@ Perl_check_utf8_print(pTHX_ const U8* s, const STRLEN len)
                    ok = FALSE;
                }
            }
-           else if
-               ((UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC(s))
-                && (ckWARN_d(WARN_NONCHAR)))
-           {
+           else if ((UTF8_IS_NONCHAR(s, e)) && (ckWARN_d(WARN_NONCHAR))) {
                UV uv = utf8_to_uvchr_buf(s, e, &char_len);
                Perl_warner(aTHX_ packWARN(WARN_NONCHAR),
                    "Unicode non-character U+%04"UVXf" is not recommended for open interchange", uv);
diff --git a/utf8.h b/utf8.h
index 3e15707..722cbb1 100644 (file)
--- a/utf8.h
+++ b/utf8.h
@@ -30,9 +30,9 @@
 #include "unicode_constants.h"
 
 /* For to_utf8_fold_flags, q.v. */
-#define FOLD_FLAGS_LOCALE 0x1
-#define FOLD_FLAGS_FULL   0x2
-#define FOLD_FLAGS_NOMIX_ASCII 0x4
+#define FOLD_FLAGS_LOCALE       0x1
+#define FOLD_FLAGS_FULL         0x2
+#define FOLD_FLAGS_NOMIX_ASCII  0x4
 
 /* For _core_swash_init(), internal core use only */
 #define _CORE_SWASH_INIT_USER_DEFINED_PROPERTY 0x1
@@ -112,7 +112,7 @@ EXTCONST unsigned char PL_utf8skip[] = {
 /* 0xA0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bogus: continuation byte */
 /* 0xB0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bogus: continuation byte */
 /* 0xC0 */ 2,2,                                    /* overlong */
-/* 0xC2 */ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,     /* U+0080 to U+03FF */
+/* 0xC2 */     2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* U+0080 to U+03FF */
 /* 0xD0 */ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* U+0400 to U+07FF */
 /* 0xE0 */ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* U+0800 to U+FFFF */
 /* 0xF0 */ 4,4,4,4,4,4,4,4,5,5,5,5,6,6,            /* above BMP to 2**31 - 1 */
@@ -196,16 +196,16 @@ Perl's extended UTF-8 means we can have start bytes up to FF.
 
 /* Is the UTF8-encoded byte 'c' part of a variant sequence in UTF-8?  This is
  * the inverse of UTF8_IS_INVARIANT */
-#define UTF8_IS_CONTINUED(c)           (((U8)c) &  0x80)
+#define UTF8_IS_CONTINUED(c)        (((U8)c) &  0x80)
 
 /* Is the byte 'c' the first byte of a multi-byte UTF8-8 encoded sequence?
  * This doesn't catch invariants (they are single-byte).  It also excludes the
  * illegal overlong sequences that begin with C0 and C1. */
-#define UTF8_IS_START(c)               (((U8)c) >= 0xc2)
+#define UTF8_IS_START(c)            (((U8)c) >= 0xc2)
 
 /* Is the byte 'c' part of a multi-byte UTF8-8 encoded sequence, and not the
  * first byte thereof?  */
-#define UTF8_IS_CONTINUATION(c)                ((((U8)c) & 0xC0) == 0x80)
+#define UTF8_IS_CONTINUATION(c)     ((((U8)c) & 0xC0) == 0x80)
 
 /* Is the UTF8-encoded byte 'c' the first byte of a two byte sequence?  Use
  * UTF8_IS_NEXT_CHAR_DOWNGRADEABLE() instead if the input isn't known to
@@ -215,7 +215,7 @@ Perl's extended UTF-8 means we can have start bytes up to FF.
 
 /* Is the UTF8-encoded byte 'c' the first byte of a sequence of bytes that
  * represent a code point > 255? */
-#define UTF8_IS_ABOVE_LATIN1(c)        ((U8)(c) >= 0xc4)
+#define UTF8_IS_ABOVE_LATIN1(c)     ((U8)(c) >= 0xc4)
 
 /* This defines the 1-bits that are to be in the first byte of a multi-byte
  * UTF-8 encoded character that give the number of bytes that comprise the
@@ -367,7 +367,8 @@ only) byte is pointed to by C<s>.
 
 =cut
  */
-#define UTF8SKIP(s) PL_utf8skip[*(const U8*)(s)]
+#define UTF8SKIP(s)  PL_utf8skip[*(const U8*)(s)]
+#define UTF8_SKIP(s) UTF8SKIP(s)
 
 /* Is the byte 'c' the same character when encoded in UTF-8 as when not.  This
  * works on both UTF-8 encoded strings and non-encoded, as it returns TRUE in
@@ -390,8 +391,8 @@ only) byte is pointed to by C<s>.
 
 /* These two are helper macros for the other three sets, and should not be used
  * directly anywhere else.  'translate_function' is either NATIVE_TO_LATIN1
- * (which works for code points up to 0xFF) or NATIVE_TO_UNI which works for any
- * code point */
+ * (which works for code points up through 0xFF) or NATIVE_TO_UNI which works
+ * for any code point */
 #define __BASE_TWO_BYTE_HI(c, translate_function)                               \
             I8_TO_NATIVE_UTF8((translate_function(c) >> UTF_ACCUMULATION_SHIFT) \
                               | UTF_START_MARK(2))
@@ -465,7 +466,12 @@ case any call to string overloading updates the internal UTF-8 encoding flag.
 =cut
 */
 #define DO_UTF8(sv) (SvUTF8(sv) && !IN_BYTES)
-#define IN_UNI_8_BIT \
+
+/* Should all strings be treated as Unicode, and not just UTF-8 encoded ones?
+ * Is so within 'feature unicode_strings' or 'locale :not_characters', and not
+ * within 'use bytes'.  UTF-8 locales are not tested for here, but perhaps
+ * could be */
+#define IN_UNI_8_BIT                                                             \
            (((CopHINTS_get(PL_curcop) & (HINT_UNI_8_BIT))                       \
                || (CopHINTS_get(PL_curcop) & HINT_LOCALE_PARTIAL                 \
                    /* -1 below is for :not_characters */                         \
@@ -529,7 +535,11 @@ case any call to string overloading updates the internal UTF-8 encoding flag.
 #define UTF8_FIRST_PROBLEMATIC_CODE_POINT_FIRST_BYTE \
                                     FIRST_SURROGATE_UTF8_FIRST_BYTE
 
-#define UTF8_IS_SURROGATE(s) cBOOL(is_SURROGATE_utf8(s))
+/* Several of the macros below have a second parameter that is currently
+ * unused; but could be used in the future to make sure that the input is
+ * well-formed. */
+
+#define UTF8_IS_SURROGATE(s, e) cBOOL(is_SURROGATE_utf8(s))
 #define UTF8_IS_REPLACEMENT(s, send) cBOOL(is_REPLACEMENT_utf8_safe(s,send))
 
 /*               ASCII              EBCDIC I8
@@ -540,20 +550,20 @@ case any call to string overloading updates the internal UTF-8 encoding flag.
  * BE AWARE that this test doesn't rule out malformed code points, in
  * particular overlongs */
 #ifdef EBCDIC /* Both versions assume well-formed UTF8 */
-#   define UTF8_IS_SUPER(s) (NATIVE_UTF8_TO_I8(* (U8*) (s)) >= 0xF9             \
+#   define UTF8_IS_SUPER(s, e) (NATIVE_UTF8_TO_I8(* (U8*) (s)) >= 0xF9          \
                          && (NATIVE_UTF8_TO_I8(* (U8*) (s)) > 0xF9              \
                              || (NATIVE_UTF8_TO_I8(* ((U8*) (s) + 1)) >= 0xA2)))
 #else
-#   define UTF8_IS_SUPER(s) (*(U8*) (s) >= 0xF4                                 \
-                            && (*(U8*) (s) > 0xF4 || (*((U8*) (s) + 1) >= 0x90)))
+#   define UTF8_IS_SUPER(s, e) (*(U8*) (s) >= 0xF4                              \
+                           && (*(U8*) (s) > 0xF4 || (*((U8*) (s) + 1) >= 0x90)))
 #endif
 
 /* These are now machine generated, and the 'given' clause is no longer
  * applicable */
-#define UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC(s)             \
+#define UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC(s, e)          \
                                                     cBOOL(is_NONCHAR_utf8(s))
-#define UTF8_IS_NONCHAR_(s)                                                    \
-                    UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC(s)
+#define UTF8_IS_NONCHAR(s, e)                                                  \
+                UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC(s, e)
 
 #define UNICODE_SURROGATE_FIRST                0xD800
 #define UNICODE_SURROGATE_LAST         0xDFFF
@@ -611,7 +621,11 @@ case any call to string overloading updates the internal UTF-8 encoding flag.
 #define GREEK_CAPITAL_LETTER_MU                 0x039C /* Upper and title case
                                                            of MICRON */
 #define LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS   0x0178 /* Also is title case */
-#define LATIN_CAPITAL_LETTER_SHARP_S           0x1E9E
+#ifdef LATIN_CAPITAL_LETTER_SHARP_S_UTF8
+#   define LATIN_CAPITAL_LETTER_SHARP_S                0x1E9E
+#endif
+#define LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE   0x130
+#define LATIN_SMALL_LETTER_DOTLESS_I            0x131
 #define LATIN_SMALL_LETTER_LONG_S               0x017F
 #define LATIN_SMALL_LIGATURE_LONG_S_T           0xFB05
 #define LATIN_SMALL_LIGATURE_ST                 0xFB06
@@ -654,9 +668,9 @@ case any call to string overloading updates the internal UTF-8 encoding flag.
  * on the order of 10 minutes to generate, and is never going to change, unless
  * the generated code is improved.
  *
- * The EBCDIC versions have been cut to not cover all of legal Unicode, so
- * don't take too long to generate, and there is a separate one for each code
- * page, so they are in regcharclass.h instead of here */
+ * The EBCDIC versions have been cut to not cover all of legal Unicode,
+ * otherwise they take too long to generate; besides there is a separate one
+ * for each code page, so they are in regcharclass.h instead of here */
 /*
        UTF8_CHAR: Matches legal UTF-8 encoded characters from 2 through 4 bytes
 
index 24101ed..39eb30c 100644 (file)
@@ -87,7 +87,8 @@
  * aren't equivalent to ASCII characters nor C1 controls form the set of
  * continuation bytes; the remaining 64 non-ASCII, non-control code points form
  * the potential start bytes, in order.  (However, the first 5 of these lead to
- * malformed overlongs, so there really are only 59 start bytes.) Hence the
+ * malformed overlongs, so there really are only 59 start bytes, and the first
+ * three of the 59 are the start bytes for the Latin1 range.)  Hence the
  * UTF-EBCDIC for the smallest variant code point, 0x160, will have likely 0x41
  * as its continuation byte, provided 0x41 isn't an ASCII or C1 equivalent.
  * And its start byte will be the code point that is 37 (32+5) non-ASCII,
@@ -143,7 +144,7 @@ END_EXTERN_C
 /*
   The following table is adapted from tr16, it shows I8 encoding of Unicode code points.
 
-        Unicode                             Bit pattern 1st Byte 2nd Byte 3rd Byte 4th Byte 5th Byte 6th Byte 7th byte
+        Unicode                         U32 Bit pattern 1st Byte 2nd Byte 3rd Byte 4th Byte 5th Byte 6th Byte 7th byte
     U+0000..U+007F                     000000000xxxxxxx 0xxxxxxx
     U+0080..U+009F                     00000000100xxxxx 100xxxxx
     U+00A0..U+03FF                     000000yyyyyxxxxx 110yyyyy 101xxxxx
@@ -160,17 +161,18 @@ END_EXTERN_C
 
 /* Input is a true Unicode (not-native) code point */
 #define OFFUNISKIP(uv) ( (uv) < 0xA0        ? 1 : \
-                     (uv) < 0x400          ? 2 : \
-                     (uv) < 0x4000         ? 3 : \
-                     (uv) < 0x40000        ? 4 : \
-                     (uv) < 0x400000       ? 5 : \
-                     (uv) < 0x4000000      ? 6 : 7 )
+                        (uv) < 0x400       ? 2 : \
+                        (uv) < 0x4000      ? 3 : \
+                        (uv) < 0x40000     ? 4 : \
+                        (uv) < 0x400000    ? 5 : \
+                        (uv) < 0x4000000   ? 6 : 7 )
+
 
 #define UNI_IS_INVARIANT(c)            (((UV)(c)) <  0xA0)
 
 /* UTF-EBCDIC semantic macros - transform back into I8 and then compare
  * Comments as to the meaning of each are given at their corresponding utf8.h
- * definitions */
+ * definitions. */
 
 #define UTF8_IS_START(c)               (NATIVE_UTF8_TO_I8(c) >= 0xC5     \
                                          && NATIVE_UTF8_TO_I8(c) != 0xE0)
diff --git a/util.c b/util.c
index 607f480..e357379 100644 (file)
--- a/util.c
+++ b/util.c
@@ -5452,7 +5452,9 @@ Perl_xs_handshake(const U32 key, void * v_my_perl, const char * file, ...)
        SAVEPPTR(PL_xsubfilename);/* which was require'd from a XSUB BEGIN */
        PL_xsubfilename = file;   /* so the old name must be restored for
                                     additional XSUBs to register themselves */
-       (void)gv_fetchfile(file);
+       /* XSUBs can't be perl lang/perl5db.pl debugged
+       if (PERLDB_LINE_OR_SAVESRC)
+           (void)gv_fetchfile(file); */
     }
 
     if(key & HSf_POPMARK) {
@@ -5767,7 +5769,7 @@ Perl_drand48_init_r(perl_drand48_t *random_state, U32 seed)
     PERL_ARGS_ASSERT_DRAND48_INIT_R;
 
 #ifdef PERL_DRAND48_QUAD
-    *random_state = FREEBSD_DRAND48_SEED_0 + ((U64TYPE)seed << 16);
+    *random_state = FREEBSD_DRAND48_SEED_0 + ((U64)seed << 16);
 #else
     random_state->seed[0] = FREEBSD_DRAND48_SEED_0;
     random_state->seed[1] = (U16) seed;
@@ -6393,7 +6395,7 @@ be missing) tells how much inside the S_parse_body the program counter was.
 
 The util.c:1716 is the source code file and line number.
 
-The /usr/bin/perl is obvious (hopefully).
+The F</usr/bin/perl> is obvious (hopefully).
 
 Unknowns are C<"-">.  Unknowns can happen unfortunately quite easily:
 if the platform doesn't support retrieving the information;
index c34f3e2..f47f4a5 100644 (file)
@@ -226,17 +226,17 @@ FULLLIBS2 = $(LIBS2)|$(THRLIBS1)|$(THRLIBS2)
 
 #### End of system configuration section. ####
 
-c0 = $(MALLOC_C) av.c caretx.c deb.c doio.c doop.c dump.c globals.c gv.c hv.c mro_core.c
+c0 = $(MALLOC_C) av.c caretx.c deb.c doio.c doop.c dquote.c dump.c globals.c gv.c hv.c mro_core.c
 c1 = mg.c locale.c mathoms.c miniperlmain.c numeric.c op.c pad.c perl.c perlapi.c perlio.c
 c2 = perly.c pp.c pp_ctl.c pp_hot.c pp_pack.c pp_sort.c pp_sys.c regcomp.c regexec.c reentr.c
-c3 = run.c scope.c sv.c taint.c toke.c universal.c utf8.c util.c vms.c keywords.c
+c3 = run.c scope.c sv.c taint.c time64.c toke.c universal.c utf8.c util.c vms.c keywords.c
 c = $(c0) $(c1) $(c2) $(c3)
 
 obj0 = perl$(O)
-obj1 = $(MALLOC_O) av$(O) caretx$(O) deb$(O) doio$(O) doop$(O) dump$(O) mro_core$(O) globals$(O) gv$(O) hv$(O)
+obj1 = $(MALLOC_O) av$(O) caretx$(O) deb$(O) doio$(O) doop$(O) dquote$(O) dump$(O) mro_core$(O) globals$(O) gv$(O) hv$(O)
 obj2 = keywords$(O) locale$(O) mathoms$(O) mg$(O) miniperlmain$(O) numeric$(O) op$(O) pad$(O) perlapi$(O) perlio$(O) 
 obj3 = perly$(O) pp$(O) pp_ctl$(O) pp_hot$(O) reentr$(O) pp_pack$(O) pp_sort$(O) pp_sys$(O) regcomp$(O) 
-obj4 = regexec$(O) run$(O) scope$(O) sv$(O) taint$(O) toke$(O) universal$(O) utf8$(O) util$(O) vms$(O)
+obj4 = regexec$(O) run$(O) scope$(O) sv$(O) taint$(O) time64$(O) toke$(O) universal$(O) utf8$(O) util$(O) vms$(O)
 
 mini_obj = perlmini$(O) $(obj1) $(obj2) $(obj3) $(obj4)
 obj = $(obj0) $(obj1) $(obj2) $(obj3) $(obj4)
@@ -307,7 +307,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5)
 extra.pods : miniperl
        @ @extra_pods.com
 
-PERLDELTA_CURRENT = [.pod]perl5231delta.pod
+PERLDELTA_CURRENT = [.pod]perl5232delta.pod
 
 $(PERLDELTA_CURRENT) : [.pod]perldelta.pod
        Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
@@ -625,6 +625,8 @@ doio$(O) : doio.c $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 doop$(O) : doop.c $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
+dquote$(O) : dquote.c $(h)
+       $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 dump$(O) : dump.c $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 globals$(O) : globals.c $(generated_headers) $(h)
@@ -689,6 +691,8 @@ sv$(O) : sv.c $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 taint$(O) : taint.c $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
+time64$(O) : time64.c $(h)
+       $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 toke$(O) : toke.c $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 universal$(O) : universal.c $(h)
index 16c12cc..f92c0f0 100644 (file)
@@ -66,7 +66,7 @@ INST_TOP := $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      := \5.23.1
+#INST_VER      := \5.23.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -537,6 +537,7 @@ MICROCORE_SRC       =               \
                ..\deb.c        \
                ..\doio.c       \
                ..\doop.c       \
+               ..\dquote.c     \
                ..\dump.c       \
                ..\globals.c    \
                ..\gv.c         \
@@ -565,6 +566,7 @@ MICROCORE_SRC       =               \
                ..\scope.c      \
                ..\sv.c         \
                ..\taint.c      \
+               ..\time64.c     \
                ..\toke.c       \
                ..\universal.c  \
                ..\utf8.c       \
index ac7c0b5..a2fb2aa 100644 (file)
@@ -38,7 +38,7 @@ INST_TOP      = $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      = \5.23.1
+#INST_VER      = \5.23.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -98,33 +98,33 @@ USE_LARGE_FILES     = define
 #
 # uncomment exactly one of the following
 #
-# Visual C++ 6.x (aka Visual C++ 98)
+# Visual C++ 6.0 (aka Visual C++ 98)
 CCTYPE         = MSVC60
-# Visual C++ .NET 2002/2003 (aka Visual C++ 7.x) (full version)
+# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
 #CCTYPE                = MSVC70
-# Visual C++ Toolkit 2003 (aka Visual C++ 7.x) (free command-line tools)
+# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
 #CCTYPE                = MSVC70FREE
 # Windows Server 2003 SP1 Platform SDK (April 2005)
 #CCTYPE                = SDK2003SP1
-# Visual C++ 2005 (aka Visual C++ 8.x) (full version)
+# Visual C++ 2005 (aka Visual C++ 8.0) (full version)
 #CCTYPE                = MSVC80
-# Visual C++ 2005 Express Edition (aka Visual C++ 8.x) (free version)
+# Visual C++ 2005 Express Edition (aka Visual C++ 8.0) (free version)
 #CCTYPE                = MSVC80FREE
-# Visual C++ 2008 (aka Visual C++ 9.x) (full version)
+# Visual C++ 2008 (aka Visual C++ 9.0) (full version)
 #CCTYPE                = MSVC90
-# Visual C++ 2008 Express Edition (aka Visual C++ 9.x) (free version)
+# Visual C++ 2008 Express Edition (aka Visual C++ 9.0) (free version)
 #CCTYPE                = MSVC90FREE
-# Visual C++ 2010 (aka Visual C++ 10.x) (full version)
+# Visual C++ 2010 (aka Visual C++ 10.0) (full version)
 #CCTYPE                = MSVC100
-# Visual C++ 2010 Express Edition (aka Visual C++ 10.x) (free version)
+# Visual C++ 2010 Express Edition (aka Visual C++ 10.0) (free version)
 #CCTYPE                = MSVC100FREE
-# Visual C++ 2012 (aka Visual C++ 11.x) (full version)
+# Visual C++ 2012 (aka Visual C++ 11.0) (full version)
 #CCTYPE                = MSVC110
-# Visual C++ 2012 Express Edition (aka Visual C++ 11.x) (free version)
+# Visual C++ 2012 Express Edition (aka Visual C++ 11.0) (free version)
 #CCTYPE                = MSVC110FREE
-# Visual C++ 2013 (aka Visual C++ 12.x) (full version)
+# Visual C++ 2013 (aka Visual C++ 12.0) (full version)
 #CCTYPE                = MSVC120
-# Visual C++ 2013 Express Edition (aka Visual C++ 12.x) (free version)
+# Visual C++ 2013 Express Edition (aka Visual C++ 12.0) (free version)
 #CCTYPE                = MSVC120FREE
 
 #
@@ -385,13 +385,13 @@ ARCHNAME  = $(ARCHNAME)-64int
 !ENDIF
 !ENDIF
 
-# All but the free version of VC++ 7.x can load DLLs on demand.  Makes the test
+# All but the free version of VC++ 7.1 can load DLLs on demand.  Makes the test
 # suite run in about 10% less time.
 !IF "$(CCTYPE)" != "MSVC70FREE"
 DELAYLOAD      = -DELAYLOAD:ws2_32.dll delayimp.lib
 !ENDIF
 
-# Visual C++ 2005 and 2008 (VC++ 8.x and 9.x) create manifest files for EXEs and
+# Visual C++ 2005 and 2008 (VC++ 8.0 and 9.0) create manifest files for EXEs and
 # DLLs. These either need copying everywhere with the binaries, or else need
 # embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For
 # simplicity, embed them if they exist (and delete them afterwards so that they
@@ -483,7 +483,7 @@ DEFINES             = $(DEFINES) -DWIN64 -DCONSERVATIVE
 OPTIMIZE       = $(OPTIMIZE) -fp:precise
 !ENDIF
 
-# For now, silence warnings from VC++ 8.x onwards about "unsafe" CRT functions
+# For now, silence warnings from VC++ 8.0 onwards about "unsafe" CRT functions
 # and POSIX CRT function names being deprecated.
 !IF "$(PREMSVC80)" == "undef"
 DEFINES                = $(DEFINES) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
@@ -552,12 +552,12 @@ LINK_FLAGS        = $(LINK_FLAGS) "/manifestdependency:type='Win32' name='Microsoft.Win
 RSC_FLAGS      = -DINCLUDE_MANIFEST
 !ENDIF
 
-# For XP support in >= 2013, subsystem is always in Config.pm LINK_FLAGS
-# else subsystem is only needed for EXE building, not XS DLL building
+# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm
+# LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building
 # Console vs GUI makes no difference for DLLs, so use default for cleaner
 # building cmd lines
 !IF "$(CCTYPE)" == "MSVC120" || "$(CCTYPE)" == "MSVC120FREE" \
-    || "$(CCTYPE)" == "MSVC150" || "$(CCTYPE)" == "MSVC150FREE"
+    || "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE"
 !  IF "$(WIN64)" == "define"
 LINK_FLAGS     = $(LINK_FLAGS) -subsystem:console,"5.02"
 !  ELSE
@@ -702,6 +702,7 @@ MICROCORE_SRC       =               \
                ..\deb.c        \
                ..\doio.c       \
                ..\doop.c       \
+               ..\dquote.c     \
                ..\dump.c       \
                ..\globals.c    \
                ..\gv.c         \
@@ -730,6 +731,7 @@ MICROCORE_SRC       =               \
                ..\scope.c      \
                ..\sv.c         \
                ..\taint.c      \
+               ..\time64.c     \
                ..\toke.c       \
                ..\universal.c  \
                ..\utf8.c       \
@@ -1193,7 +1195,7 @@ utils: $(PERLEXE) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5231delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5232delta.pod
        cd ..\win32
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
@@ -1289,7 +1291,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5231delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5232delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
index 67d43c9..b9a979c 100644 (file)
@@ -622,6 +622,7 @@ MICROCORE_SRC       =               \
                ..\deb.c        \
                ..\doio.c       \
                ..\doop.c       \
+               ..\dquote.c     \
                ..\dump.c       \
                ..\globals.c    \
                ..\gv.c         \
@@ -650,6 +651,7 @@ MICROCORE_SRC       =               \
                ..\scope.c      \
                ..\sv.c         \
                ..\taint.c      \
+               ..\time64.c     \
                ..\toke.c       \
                ..\universal.c  \
                ..\utf8.c       \
@@ -867,6 +869,7 @@ $(DLLDIR)\caretx.obj \
 $(DLLDIR)\deb.obj \
 $(DLLDIR)\doio.obj \
 $(DLLDIR)\doop.obj \
+$(DLLDIR)\dquote.obj \
 $(DLLDIR)\dump.obj \
 $(DLLDIR)\globals.obj \
 $(DLLDIR)\gv.obj \
@@ -896,6 +899,7 @@ $(DLLDIR)\run.obj \
 $(DLLDIR)\scope.obj \
 $(DLLDIR)\sv.obj \
 $(DLLDIR)\taint.obj \
+$(DLLDIR)\time64.obj \
 $(DLLDIR)\toke.obj \
 $(DLLDIR)\universal.obj \
 $(DLLDIR)\utf8.obj \
index 11a3ff7..c74b5bb 100644 (file)
@@ -44,7 +44,7 @@ INST_TOP      *= $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      *= \5.23.1
+#INST_VER      *= \5.23.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -110,33 +110,33 @@ USE_LARGE_FILES   *= define
 #
 # uncomment exactly one of the following
 #
-# Visual C++ 6.x (aka Visual C++ 98)
+# Visual C++ 6.0 (aka Visual C++ 98)
 #CCTYPE                *= MSVC60
-# Visual C++ .NET 2002/2003 (aka Visual C++ 7.x) (full version)
+# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
 #CCTYPE                *= MSVC70
-# Visual C++ Toolkit 2003 (aka Visual C++ 7.x) (free command-line tools)
+# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
 #CCTYPE                *= MSVC70FREE
 # Windows Server 2003 SP1 Platform SDK (April 2005)
 #CCTYPE                = SDK2003SP1
-# Visual C++ 2005 (aka Visual C++ 8.x) (full version)
+# Visual C++ 2005 (aka Visual C++ 8.0) (full version)
 #CCTYPE                *= MSVC80
-# Visual C++ 2005 Express Edition (aka Visual C++ 8.x) (free version)
+# Visual C++ 2005 Express Edition (aka Visual C++ 8.0) (free version)
 #CCTYPE                *= MSVC80FREE
-# Visual C++ 2008 (aka Visual C++ 9.x) (full version)
+# Visual C++ 2008 (aka Visual C++ 9.0) (full version)
 #CCTYPE                *= MSVC90
-# Visual C++ 2008 Express Edition (aka Visual C++ 9.x) (free version)
+# Visual C++ 2008 Express Edition (aka Visual C++ 9.0) (free version)
 #CCTYPE                *= MSVC90FREE
-# Visual C++ 2010 (aka Visual C++ 10.x) (full version)
+# Visual C++ 2010 (aka Visual C++ 10.0) (full version)
 #CCTYPE                = MSVC100
-# Visual C++ 2010 Express Edition (aka Visual C++ 10.x) (free version)
+# Visual C++ 2010 Express Edition (aka Visual C++ 10.0) (free version)
 #CCTYPE                = MSVC100FREE
-# Visual C++ 2012 (aka Visual C++ 11.x) (full version)
+# Visual C++ 2012 (aka Visual C++ 11.0) (full version)
 #CCTYPE                = MSVC110
-# Visual C++ 2012 Express Edition (aka Visual C++ 11.x) (free version)
+# Visual C++ 2012 Express Edition (aka Visual C++ 11.0) (free version)
 #CCTYPE                = MSVC110FREE
-# Visual C++ 2013 (aka Visual C++ 12.x) (full version)
+# Visual C++ 2013 (aka Visual C++ 12.0) (full version)
 #CCTYPE                = MSVC120
-# Visual C++ 2013 Express Edition (aka Visual C++ 12.x) (free version)
+# Visual C++ 2013 Express Edition (aka Visual C++ 12.0) (free version)
 #CCTYPE                = MSVC120FREE
 # MinGW or mingw-w64 with gcc-3.4.5 or later
 CCTYPE         *= GCC
@@ -516,13 +516,13 @@ TESTPREPGCC       = test-prep-gcc
 
 .ELSE
 
-# All but the free version of VC++ 7.x can load DLLs on demand.  Makes the test
+# All but the free version of VC++ 7.1 can load DLLs on demand.  Makes the test
 # suite run in about 10% less time.
 .IF "$(CCTYPE)" != "MSVC70FREE"
 DELAYLOAD      = -DELAYLOAD:ws2_32.dll delayimp.lib
 .ENDIF
 
-# Visual C++ 2005 and 2008 (VC++ 8.x and 9.x) create manifest files for EXEs and
+# Visual C++ 2005 and 2008 (VC++ 8.0 and 9.0) create manifest files for EXEs and
 # DLLs. These either need copying everywhere with the binaries, or else need
 # embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For
 # simplicity, embed them if they exist (and delete them afterwards so that they
@@ -597,7 +597,7 @@ DEFINES             += -DWIN64 -DCONSERVATIVE
 OPTIMIZE       += -fp:precise
 .ENDIF
 
-# For now, silence warnings from VC++ 8.x onwards about "unsafe" CRT functions
+# For now, silence warnings from VC++ 8.0 onwards about "unsafe" CRT functions
 # and POSIX CRT function names being deprecated.
 .IF "$(PREMSVC80)" == "undef"
 DEFINES                += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
@@ -671,12 +671,12 @@ RSC_FLAGS = -DINCLUDE_MANIFEST
 .ENDIF
 
 
-# For XP support in >= 2013, subsystem is always in Config.pm LINK_FLAGS
-# else subsystem is only needed for EXE building, not XS DLL building
+# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm
+# LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building
 # Console vs GUI makes no difference for DLLs, so use default for cleaner
 # building cmd lines
 .IF "$(CCTYPE)" == "MSVC120" || "$(CCTYPE)" == "MSVC120FREE" \
-    || "$(CCTYPE)" == "MSVC150" || "$(CCTYPE)" == "MSVC150FREE"
+    || "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE"
 .IF "$(WIN64)" == "define"
 LINK_FLAGS     += -subsystem:console,"5.02"
 .ELSE
@@ -847,6 +847,7 @@ MICROCORE_SRC       =               \
                ..\deb.c        \
                ..\doio.c       \
                ..\doop.c       \
+               ..\dquote.c     \
                ..\dump.c       \
                ..\globals.c    \
                ..\gv.c         \
@@ -875,6 +876,7 @@ MICROCORE_SRC       =               \
                ..\scope.c      \
                ..\sv.c         \
                ..\taint.c      \
+               ..\time64.c     \
                ..\toke.c       \
                ..\universal.c  \
                ..\utf8.c       \
@@ -1477,7 +1479,7 @@ utils: $(PERLEXE) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5231delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5232delta.pod
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1572,7 +1574,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5231delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5232delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
index f08ef87..44344b3 100644 (file)
@@ -42,6 +42,7 @@ POD = perl.pod        \
        perl5220delta.pod       \
        perl5230delta.pod       \
        perl5231delta.pod       \
+       perl5232delta.pod       \
        perl561delta.pod        \
        perl56delta.pod \
        perl581delta.pod        \
@@ -178,6 +179,7 @@ MAN = perl.man      \
        perl5220delta.man       \
        perl5230delta.man       \
        perl5231delta.man       \
+       perl5232delta.man       \
        perl561delta.man        \
        perl56delta.man \
        perl581delta.man        \
@@ -314,6 +316,7 @@ HTML = perl.html    \
        perl5220delta.html      \
        perl5230delta.html      \
        perl5231delta.html      \
+       perl5232delta.html      \
        perl561delta.html       \
        perl56delta.html        \
        perl581delta.html       \
@@ -450,6 +453,7 @@ TEX = perl.tex      \
        perl5220delta.tex       \
        perl5230delta.tex       \
        perl5231delta.tex       \
+       perl5232delta.tex       \
        perl561delta.tex        \
        perl56delta.tex \
        perl581delta.tex        \
index 0bb0348..2b883a2 100644 (file)
@@ -42,9 +42,8 @@
 
 /* #include "config.h" */
 
-#if !defined(PERLIO_IS_STDIO)
-#  define PerlIO FILE
-#endif
+
+#define PerlIO FILE
 
 #include <sys/stat.h>
 #include "EXTERN.h"
index b3c5b52..1b58d40 100644 (file)
@@ -13,9 +13,7 @@
 
 #define PERLIO_NOT_STDIO 0
 
-#if !defined(PERLIO_IS_STDIO)
 #define PerlIO FILE
-#endif
 
 #define wince_private
 #include "errno.h"