Imported Upstream version 5.33.7 upstream/5.33.7
authorDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 21 Jan 2022 04:41:46 +0000 (13:41 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 21 Jan 2022 04:41:46 +0000 (13:41 +0900)
226 files changed:
.git_patch
AUTHORS
Configure
Cross/config.sh-arm-linux
Cross/config.sh-arm-linux-n770
INSTALL
MANIFEST
META.json
META.yml
Makefile.SH
NetWare/Makefile
NetWare/config_H.wc
Porting/Glossary
Porting/Maintainers.pl
Porting/README.pod
Porting/add-package.pl
Porting/add-pod-file [new file with mode: 0644]
Porting/config.sh
Porting/config_H
Porting/epigraphs.pod
Porting/makerel
Porting/perldelta_template.pod
Porting/pod_lib.pl
Porting/pod_rules.pl
Porting/release_schedule.pod
Porting/todo.pod
README.cygwin
README.haiku
README.macosx
README.os2
README.vms
README.win32
config_h.SH
configure.com
cop.h
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS390.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
cpan/ExtUtils-MakeMaker/t/hints.t
cpan/ExtUtils-MakeMaker/t/parse_version.t
cpan/ExtUtils-PL2Bat/lib/ExtUtils/PL2Bat.pm
cpan/JSON-PP/lib/JSON/PP.pm
cpan/JSON-PP/lib/JSON/PP/Boolean.pm
cpan/JSON-PP/t/118_boolean_values.t
cpan/autodie/lib/Fatal.pm
cpan/autodie/lib/autodie.pm
cpan/autodie/lib/autodie/Scope/Guard.pm
cpan/autodie/lib/autodie/Scope/GuardStack.pm
cpan/autodie/lib/autodie/Util.pm
cpan/autodie/lib/autodie/exception.pm
cpan/autodie/lib/autodie/exception/system.pm
cpan/autodie/lib/autodie/hints.pm
cpan/autodie/lib/autodie/skip.pm
cpan/autodie/t/exception_nonref.t [new file with mode: 0644]
dist/Devel-PPPort/HACKERS
dist/Devel-PPPort/parts/inc/mess
dist/ExtUtils-CBuilder/Changes
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/android.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm
dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm
dist/IO/IO.pm
dist/IO/lib/IO/Dir.pm
dist/IO/lib/IO/File.pm
dist/IO/lib/IO/Handle.pm
dist/IO/lib/IO/Pipe.pm
dist/IO/lib/IO/Poll.pm
dist/IO/lib/IO/Seekable.pm
dist/IO/lib/IO/Select.pm
dist/IO/lib/IO/Socket.pm
dist/IO/lib/IO/Socket/INET.pm
dist/IO/lib/IO/Socket/UNIX.pm
dist/Module-CoreList/Changes
dist/Module-CoreList/lib/Module/CoreList.pm
dist/Module-CoreList/lib/Module/CoreList/Utils.pm
dist/Time-HiRes/HiRes.pm
dist/Time-HiRes/HiRes.xs
dump.c
embed.fnc
embed.h
ext/File-Find/lib/File/Find.pm
ext/Hash-Util/Changes
ext/Hash-Util/Util.xs
ext/Hash-Util/lib/Hash/Util.pm
ext/Hash-Util/t/Util.t
ext/Opcode/Opcode.pm
ext/POSIX/lib/POSIX.pod
ext/POSIX/t/mb.t
ext/PerlIO-encoding/encoding.pm
ext/PerlIO-encoding/encoding.xs
ext/mro/mro.pm
ext/mro/mro.xs
feature.h
gv.c
handy.h
hints/catamount.sh
hv.c
hv_func.h
inline.h
iperlsys.h
keywords.c
keywords.h
lib/B/Deparse-core.t
lib/B/Deparse.pm
lib/B/Deparse.t
lib/B/Op_private.pm
lib/feature.pm
lib/warnings.pm
locale.c
make_ext.pl
op.c
op.h
opcode.h
opnames.h
packsizetables.inc
patchlevel.h
perl.h
perlvars.h
perly.act
perly.h
perly.tab
perly.y
plan9/config_sh.sample
pod/.gitignore
pod/perl.pod
pod/perl5321delta.pod [new file with mode: 0644]
pod/perl5336delta.pod [new file with mode: 0644]
pod/perldelta.pod
pod/perldiag.pod
pod/perldocstyle.pod
pod/perlfunc.pod
pod/perlgov.pod
pod/perlhack.pod
pod/perlhist.pod
pod/perlmodinstall.pod
pod/perlpolicy.pod
pod/perlre.pod
pod/perlretut.pod
pod/perlsyn.pod
pp.c
pp_ctl.c
pp_pack.c
pp_proto.h
proto.h
regcomp.c
regcomp.h
regen/feature.pl
regen/genpacksizetables.pl
regen/keywords.pl
regen/lib_cleanup.pl
regen/opcodes
regen/warnings.pl
regexec.c
stadtx_hash.h [deleted file]
sv.c
t/lib/warnings/pad
t/loc_tools.pl
t/op/coreamp.t
t/op/coresubs.t
t/op/magic.t
t/op/split.t
t/op/try.t [new file with mode: 0644]
t/opbasic/arith.t
t/porting/customized.dat
t/porting/globvar.t
t/porting/known_pod_issues.dat
t/porting/libperl.t
t/porting/manifest.t
t/porting/pod_rules.t
t/porting/podcheck.t
t/porting/regen.t
t/re/charset.t
t/re/reg_mesg.t
t/run/locale.t
toke.c
uconfig.h
util.c
vms/descrip_mms.template
warnings.h
win32/GNUmakefile
win32/Makefile
win32/config.gc
win32/makefile.mk [deleted file]
win32/pod.mak
win32/win32.c
win32/win32.h

index f960afa..04eb800 100644 (file)
@@ -1 +1 @@
-7b99455fe0a347ad42afab1cd66997f231344818|2021-01-20 18:25:42 +0000|tag: v5.33.6
+e01e187c82121556fa7a767dae415c77f70bc4a0|2021-02-20 09:40:01 +0100|tag: v5.33.7
diff --git a/AUTHORS b/AUTHORS
index 226b3eb..dc2c713 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -419,6 +419,7 @@ Eryq                           <eryq@zeegee.com>
 Etienne Grossman               <etienne@isr.isr.ist.utl.pt>
 Eugen Konkov                   <kes-kes@yandex.ru>
 Eugene Alterman                <Eugene.Alterman@bremer-inc.com>
+Eugene Alvin Villar            <seav80@gmail.com>
 Evan Miller                    <eam@frap.net>
 Evan Zacks                     <zackse@cpan.org>
 Fabien Tassin                  <tassin@eerie.fr>
@@ -1356,6 +1357,7 @@ Yves Orton                     <demerphq@gmail.com>
 Zachary Miller                 <zcmiller@simon.er.usgs.gov>
 Zachary Storer                 <zacts.3.14159@gmail.com>
 Zak B. Elep                    <zakame@zakame.net>
+Zakariyya Mughal               <zmughal@cpan.org>
 Zbynek Vyskovsky               <kvr@centrum.cz>
 Zefram                         <zefram@fysh.org>
 Zsbán Ambrus                   <ambrus@math.bme.hu>
index 2d2f22f..71092ea 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -1834,8 +1834,8 @@ Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
   -r : reuse C symbols value if possible (skips costly nm extraction).
   -s : silent mode, only echoes questions and essential information.
   -D : define symbol to have some value:
-         -D symbol         symbol gets the value 'define'
-         -D symbol=value   symbol gets the value 'value'
+         -D symbol                symbol gets the value 'define'
+         -D symbol='some value'   symbol is set to 'some value'
        common used examples (see INSTALL for more info):
          -Duse64bitint            use 64bit integers
          -Duse64bitall            use 64bit integers and pointers
@@ -6894,9 +6894,9 @@ int main() {
      * The Motorola 68881 had another "extended precision" format:
      * sign:1 exp:15 zero:16 integer:1 mantissa:63
      * for total of 96 bits of bytes.  The zero bits were unused.
-     * See "M68000 FAMILY PROGRAMMER’S REFERENCE MANUAL" for more details.
-     * If it ever becomes relevant, this format should be allocated
-     * a new doublekind code since it's quite different from the Intel x87.
+     * See "M68000 FAMILY PROGRAMMER'S REFERENCE MANUAL" for more details.
+     * If it ever becomes relevant, this format should be allocated a
+     * new doublekind code since it is quite different from the Intel x87.
      */
     printf("4\n");
     exit(0);
@@ -10380,7 +10380,7 @@ void lencheck(int expect, int got)
                printf("%s length mismatch:  Expected %d, got %d\n",
                        myname, expect, got);
                exit(1);
-        }
+       }
 }
 
 int main()
@@ -10455,8 +10455,8 @@ int main()
        else
            checkit("1e+34", buf);
 
-        /* Test for an Ubuntu/Debian bug in gcvt and qgcvt. See:        *
-         * https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1899553 */
+       /* Test for an Ubuntu/Debian bug in gcvt and qgcvt. See:        *
+        * https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1899553 */
 
        Gconvert((DOUBLETYPE)0.4, 53, 0, buf);
        lencheck(55, (int)strlen(buf));
@@ -14278,19 +14278,19 @@ EOCP
 val=
 set try
 if eval $compile_ok; then
-        $run ./try
-        rc=$?
-        case "$rc" in
-            0) echo "getenv() didn't destroy another thread's buffer" >&4
-              val=$define
-               ;;
-            1) echo "getenv() does destroy another thread's buffer" >&4
-              val=$undef
-               ;;
-            *) echo "Couldn't determine if getenv() destroys another thread's return value (code=$rc); assuming it does" >&4
-              val=$undef
-               ;;
-        esac
+    $run ./try
+    rc=$?
+    case "$rc" in
+       0) echo "getenv() didn't destroy another thread's buffer" >&4
+          val=$define
+          ;;
+       1) echo "getenv() does destroy another thread's buffer" >&4
+          val=$undef
+          ;;
+       *) echo "Couldn't determine if getenv() destroys another thread's return value (code=$rc); assuming it does" >&4
+          val=$undef
+          ;;
+    esac
 else
     echo "(I can't seem to compile the test program.)" >&4
     echo "Assuming that your C library's getenv destroys another thread's return value." >&4
index 0ea35b0..8188147 100644 (file)
@@ -31,12 +31,12 @@ afsroot='/afs'
 alignbytes='4'
 aphostname='/bin/hostname'
 api_revision='5'
-api_subversion='6'
+api_subversion='7'
 api_version='33'
-api_versionstring='5.33.6'
+api_versionstring='5.33.7'
 ar='ar'
-archlib='/usr/lib/perl5/5.33.6/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.33.6/armv4l-linux'
+archlib='/usr/lib/perl5/5.33.7/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.33.7/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -55,7 +55,7 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.33.6/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.33.7/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'
@@ -825,7 +825,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.33.6/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.33.7/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -833,13 +833,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.33.6'
+installprivlib='./install_me_here/usr/lib/perl5/5.33.7'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.33.6/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.33.7/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.33.6'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.33.7'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -973,8 +973,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.33.6'
-privlibexp='/usr/lib/perl5/5.33.6'
+privlib='/usr/lib/perl5/5.33.7'
+privlibexp='/usr/lib/perl5/5.33.7'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1039,17 +1039,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.33.6/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.33.6/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.33.7/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.33.7/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.33.6'
+sitelib='/usr/lib/perl5/site_perl/5.33.7'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.33.6'
+sitelibexp='/usr/lib/perl5/site_perl/5.33.7'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1088,7 +1088,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='6'
+subversion='7'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1179,8 +1179,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.33.6'
-version_patchlevel_string='version 33 subversion 6'
+version='5.33.7'
+version_patchlevel_string='version 33 subversion 7'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1194,9 +1194,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=33
-PERL_SUBVERSION=6
+PERL_SUBVERSION=7
 PERL_API_REVISION=5
 PERL_API_VERSION=33
-PERL_API_SUBVERSION=6
+PERL_API_SUBVERSION=7
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
index ca3b2c1..ec7832e 100644 (file)
@@ -31,12 +31,12 @@ afsroot='/afs'
 alignbytes='4'
 aphostname='/bin/hostname'
 api_revision='5'
-api_subversion='6'
+api_subversion='7'
 api_version='33'
-api_versionstring='5.33.6'
+api_versionstring='5.33.7'
 ar='ar'
-archlib='/usr/lib/perl5/5.33.6/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.33.6/armv4l-linux'
+archlib='/usr/lib/perl5/5.33.7/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.33.7/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -54,7 +54,7 @@ castflags='0'
 cat='cat'
 cc='arm-none-linux-gnueabi-gcc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.33.6/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.33.7/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'
@@ -823,7 +823,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.33.6/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.33.7/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -831,13 +831,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.33.6'
+installprivlib='./install_me_here/usr/lib/perl5/5.33.7'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.33.6/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.33.7/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.33.6'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.33.7'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -971,8 +971,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.33.6'
-privlibexp='/usr/lib/perl5/5.33.6'
+privlib='/usr/lib/perl5/5.33.7'
+privlibexp='/usr/lib/perl5/5.33.7'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1037,17 +1037,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.33.6/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.33.6/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.33.7/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.33.7/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.33.6'
+sitelib='/usr/lib/perl5/site_perl/5.33.7'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.33.6'
+sitelibexp='/usr/lib/perl5/site_perl/5.33.7'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1086,7 +1086,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='6'
+subversion='7'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1177,8 +1177,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.33.6'
-version_patchlevel_string='version 33 subversion 6'
+version='5.33.7'
+version_patchlevel_string='version 33 subversion 7'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1192,9 +1192,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=33
-PERL_SUBVERSION=6
+PERL_SUBVERSION=7
 PERL_API_REVISION=5
 PERL_API_VERSION=33
-PERL_API_SUBVERSION=6
+PERL_API_SUBVERSION=7
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
diff --git a/INSTALL b/INSTALL
index 001178a..df62c50 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -132,7 +132,31 @@ Configure supports a number of useful options.  Run
 
        Configure -h
 
-to get a listing.  See the F<Porting/Glossary> file for a complete list of
+to get a listing.
+
+Many Configure switches are expressed as C<key=value> pairs, for example:
+
+    -Dcc=clang
+
+Sometimes the value to be supplied for a switch is a string which contains
+spaces.  In that case, the value needs to be quoted so as to delimit that
+"shell word" from any following switch.  Example:
+
+    sh ./Configure -des \
+        -Doptimize="-O2 -pipe -fstack-protector -fno-strict-aliasing" \
+        -Dusedevel
+
+Once Configure has run, you will be able to access configuration data via
+entries in the file F<config.sh>.
+
+    config_arg0='./Configure'
+    config_args='-des -Doptimize=-O2 -pipe -fstack-protector -fno-strict-aliasing -Dusedevel'
+    config_argc=3
+    config_arg1='-des'
+    config_arg2='-Doptimize=-O2 -pipe -fstack-protector -fno-strict-aliasing'
+    config_arg3='-Dusedevel'
+
+See the F<Porting/Glossary> file for a complete list of
 Configure variables you can set and their definitions.
 
 =over 4
@@ -368,7 +392,7 @@ insecure and are not recommended for production use.>
 
 Since Perl 5.18 we have included support for multiple hash functions,
 although from time to time we change which functions we support,
-and which function is default (currently SBOX+STADTX on 64 bit builds
+and which function is default (currently SBOX+SIPHASH13 on 64 bit builds
 and SBOX+ZAPHOD32 for 32 bit builds). You can choose a different
 algorithm by defining one of the following symbols during configure.
 Note that there are security implications regarding which hash function you choose
@@ -378,7 +402,6 @@ to be, with the one believed to be most secure at release time being PERL_HASH_F
     PERL_HASH_FUNC_SIPHASH
     PERL_HASH_FUNC_SIPHASH13
     PERL_HASH_FUNC_ZAPHOD32
-    PERL_HASH_FUNC_STADTX
 
 In addition, these, (or custom hash functions), may be "fronted" by the
 SBOX32 hash function for keys under a chosen size. This hash function is
@@ -615,7 +638,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.33.6.
+By default, Configure will use the following directories for 5.33.7.
 $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
@@ -2438,7 +2461,7 @@ L<https://www.chiark.greenend.org.uk/~sgtatham/bugs.html>
 
 =head1 Coexistence with earlier versions of perl 5
 
-Perl 5.33.6 is not binary compatible with earlier versions of Perl.
+Perl 5.33.7 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 stable version of Perl
@@ -2513,9 +2536,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.33.6
+       sh Configure -Dprefix=/opt/perl5.33.7
 
-and adding /opt/perl5.33.6/bin to the shell PATH variable.  Such users
+and adding /opt/perl5.33.7/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.
 
@@ -2528,13 +2551,13 @@ seriously consider using a separate directory, since development
 subversions may not have all the compatibility wrinkles ironed out
 yet.
 
-=head2 Upgrading from 5.33.5 or earlier
+=head2 Upgrading from 5.33.6 or earlier
 
-B<Perl 5.33.6 may not be binary compatible with Perl 5.33.5 or
+B<Perl 5.33.7 may not be binary compatible with Perl 5.33.6 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.33.6.  If you find you do need to rebuild an extension with
-5.33.6, you may safely do so without disturbing the older
+used with 5.33.7.  If you find you do need to rebuild an extension with
+5.33.7, you may safely do so without disturbing the older
 installations.  (See L<"Coexistence with earlier versions of perl 5">
 above.)
 
@@ -2567,15 +2590,15 @@ Firstly, the bare minimum to run this script
      print("$f\n");
   }
 
-in Linux with perl-5.33.6 is as follows (under $Config{prefix}):
+in Linux with perl-5.33.7 is as follows (under $Config{prefix}):
 
   ./bin/perl
-  ./lib/perl5/5.33.6/strict.pm
-  ./lib/perl5/5.33.6/warnings.pm
-  ./lib/perl5/5.33.6/i686-linux/File/Glob.pm
-  ./lib/perl5/5.33.6/feature.pm
-  ./lib/perl5/5.33.6/XSLoader.pm
-  ./lib/perl5/5.33.6/i686-linux/auto/File/Glob/Glob.so
+  ./lib/perl5/5.33.7/strict.pm
+  ./lib/perl5/5.33.7/warnings.pm
+  ./lib/perl5/5.33.7/i686-linux/File/Glob.pm
+  ./lib/perl5/5.33.7/feature.pm
+  ./lib/perl5/5.33.7/XSLoader.pm
+  ./lib/perl5/5.33.7/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 134a4ac..c0519a7 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -81,6 +81,7 @@ cpan/autodie/t/crickey.t              autodie - Like an Australian
 cpan/autodie/t/dbmopen.t               autodie - dbm tests
 cpan/autodie/t/eval_error.t
 cpan/autodie/t/exception_class.t       autodie - Exception class subclasses
+cpan/autodie/t/exception_nonref.t
 cpan/autodie/t/exceptions.t            autodie - 5.10 exception tests.
 cpan/autodie/t/exec.t                  autodie - exec tests.
 cpan/autodie/t/Fatal.t                 autodie - Fatal backcompatibility
@@ -5227,12 +5228,14 @@ pod/perl5301delta.pod           Perl changes in version 5.30.1
 pod/perl5302delta.pod          Perl changes in version 5.30.2
 pod/perl5303delta.pod          Perl changes in version 5.30.3
 pod/perl5320delta.pod          Perl changes in version 5.32.0
+pod/perl5321delta.pod          Perl changes in version 5.32.1
 pod/perl5330delta.pod          Perl changes in version 5.33.0
 pod/perl5331delta.pod          Perl changes in version 5.33.1
 pod/perl5332delta.pod          Perl changes in version 5.33.2
 pod/perl5333delta.pod          Perl changes in version 5.33.3
 pod/perl5334delta.pod          Perl changes in version 5.33.4
 pod/perl5335delta.pod          Perl changes in version 5.33.5
+pod/perl5336delta.pod          Perl changes in version 5.33.6
 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
@@ -5344,6 +5347,7 @@ pod/splitpod                      Splits perlfunc into multiple pod pages
 Policy_sh.SH                   Hold site-wide preferences between Configure runs.
 Porting/acknowledgements.pl    Generate perldelta acknowledgements text
 Porting/add-package.pl         Add/Update CPAN modules that are part of Core
+Porting/add-pod-file           Utility to add new pod/*.pod file to core distribution
 Porting/bench.pl               Run benchmarks against t/perf/benchmarks
 Porting/bisect.pl              A tool to make bisecting easy
 Porting/bisect-example.sh      Example script to use with git bisect run
@@ -5503,7 +5507,6 @@ sbox32_hash.h                     SBox hash code (32 Bit SBOX based hash function)
 scope.c                                Scope entry and exit code
 scope.h                                Scope entry and exit header
 SECURITY.md                    Add Security Policy for GitHub
-stadtx_hash.h                  StadtX hash code (64 Bit fast hash function)
 sv.c                           Scalar value code
 sv.h                           Scalar value header
 t/base/cond.t                  See if conditionals work
@@ -5631,7 +5634,7 @@ t/lib/feature/bits                Tests for feature bit handling
 t/lib/feature/bundle           Tests for feature bundles
 t/lib/feature/implicit         Tests for implicit loading of feature.pm
 t/lib/feature/indirect         Tests for enabling/disabling indirect method calls
-t/lib/feature/multidimensional Tests for enabling/disabling $foo{$x, y} => $foo{join($;, $x, $y)}
+t/lib/feature/multidimensional Tests for enabling/disabling $foo{$x, $y} => $foo{join($;, $x, $y)}
 t/lib/feature/nonesuch         Tests for enabling/disabling nonexistent feature
 t/lib/feature/removed          Tests for enabling/disabling removed feature
 t/lib/feature/say              Tests for enabling/disabling say feature
@@ -5959,6 +5962,7 @@ t/op/time.t                       See if time functions work
 t/op/time_loop.t               Test that very large values don't hang gmtime and localtime.
 t/op/tr.t                      See if tr works
 t/op/tr_latin1.t               See if tr works, but file isn't encoded in UTF-8
+t/op/try.t                     See if try works
 t/op/undef.t                   See if undef works
 t/op/universal.t               See if UNIVERSAL class works
 t/op/unlink.t                  See if unlink works
@@ -6278,7 +6282,6 @@ win32/include/sys/errno2.h        Win32 port
 win32/include/sys/socket.h     Win32 port
 win32/list_static_libs.pl      prints libraries for static linking
 win32/Makefile                 Win32 makefile for NMAKE (Visual C++ build)
-win32/makefile.mk              Win32 makefile for DMAKE (BC++, VC++ builds)
 win32/perlexe.ico              perlexe.ico image file
 win32/perlexe.manifest         Assembly manifest file
 win32/perlexe.rc               associated perl binary with icon
index 1bd9870..72ccd5c 100644 (file)
--- a/META.json
+++ b/META.json
          "url" : "https://github.com/Perl/perl5"
       }
    },
-   "version" : "5.033006",
-   "x_serialization_backend" : "JSON::PP version 4.05"
+   "version" : "5.033007",
+   "x_serialization_backend" : "JSON::PP version 4.06"
 }
index 1e7388d..6d35ec7 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -118,5 +118,5 @@ resources:
   homepage: https://www.perl.org/
   license: https://dev.perl.org/licenses/
   repository: https://github.com/Perl/perl5
-version: '5.033006'
+version: '5.033007'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
index ba8d9bd..7ff2b14 100755 (executable)
@@ -589,7 +589,7 @@ esac
 
 $spitshell >>$Makefile <<'!NO!SUBS!'
 
-perltoc_pod_prereqs = extra.pods pod/perl5336delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
+perltoc_pod_prereqs = extra.pods pod/perl5337delta.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
 
@@ -1153,9 +1153,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/perl5336delta.pod: pod/perldelta.pod
-       $(RMS) pod/perl5336delta.pod
-       $(LNS) perldelta.pod pod/perl5336delta.pod
+pod/perl5337delta.pod: pod/perldelta.pod
+       $(RMS) pod/perl5337delta.pod
+       $(LNS) perldelta.pod pod/perl5337delta.pod
 
 extra.pods: $(MINIPERL_EXE)
        -@test ! -f extra.pods || rm -f `cat extra.pods`
index 3eb56a6..8544240 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.33.6 for NetWare"
+MODULE_DESC     = "Perl 5.33.7 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.33.6
+INST_VER       = \5.33.7
 
 #
 # Comment this out if you DON'T want your perl installation to have
index 045ae57..b40e326 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.33.6\\lib\\NetWare-x86-multi-thread"              /**/
+#define ARCHLIB "c:\\perl\\5.33.7\\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.33.6\\bin\\NetWare-x86-multi-thread"  /**/
-#define BIN_EXP "c:\\perl\\5.33.6\\bin\\NetWare-x86-multi-thread"      /**/
+#define BIN "c:\\perl\\5.33.7\\bin\\NetWare-x86-multi-thread"  /**/
+#define BIN_EXP "c:\\perl\\5.33.7\\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.33.6\\lib\\NetWare-x86-multi-thread"               /**/
+#define SITEARCH "c:\\perl\\site\\5.33.7\\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.33.6\\lib"          /**/
+#define SITELIB "c:\\perl\\site\\5.33.7\\lib"          /**/
 /*#define SITELIB_EXP ""       /**/
 #define SITELIB_STEM ""                /**/
 
index 0f7523a..d28e8c5 100644 (file)
@@ -1075,6 +1075,11 @@ d_getcwd (d_getcwd.U):
        indicates to the C program that the getcwd() routine is available
        to get the current working directory.
 
+d_getenv_preserves_other_thread (d_getenv_thread.U):
+       This variable conditionally defines the GETENV_PRESERVES_OTHER_THREAD
+       symbol, which indicates to the C program that the getenv() system call
+       does not zap the static buffer in a different thread.
+
 d_getespwnam (d_getespwnam.U):
        This variable conditionally defines HAS_GETESPWNAM if getespwnam() is
        available to retrieve enhanced (shadow) password entries by name.
@@ -5550,7 +5555,7 @@ usecrosscompile (Cross.U):
 usedefaultstrict (usedefaultstrict.U):
        This setting provides a mechanism for perl developers to enable
        strict by default. These defaults do not apply when perl is run
-    via -e or -E.
+       via -e or -E.
 
 usedevel (Devel.U):
        This variable indicates that Perl was configured with development
index 209d218..74aabea 100755 (executable)
@@ -138,7 +138,7 @@ use File::Glob qw(:case);
     },
 
     'autodie' => {
-        'DISTRIBUTION' => 'TODDR/autodie-2.32.tar.gz',
+        'DISTRIBUTION' => 'TODDR/autodie-2.34.tar.gz',
         'FILES'        => q[cpan/autodie],
         'EXCLUDED'     => [
             qr{benchmarks},
@@ -427,7 +427,7 @@ use File::Glob qw(:case);
     },
 
     'ExtUtils::CBuilder' => {
-        'DISTRIBUTION' => 'AMBS/ExtUtils-CBuilder-0.280235.tar.gz',
+        'DISTRIBUTION' => 'AMBS/ExtUtils-CBuilder-0.280236.tar.gz',
         'FILES'        => q[dist/ExtUtils-CBuilder],
         'EXCLUDED'     => [
             qw(README.mkdn),
@@ -466,7 +466,7 @@ use File::Glob qw(:case);
     },
 
     'ExtUtils::MakeMaker' => {
-        'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.58.tar.gz',
+        'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.60.tar.gz',
         'FILES'        => q[cpan/ExtUtils-MakeMaker],
         'EXCLUDED'     => [
             qr{^t/lib/Test/},
@@ -481,15 +481,12 @@ use File::Glob qw(:case);
     },
 
     'ExtUtils::PL2Bat' => {
-        'DISTRIBUTION' => 'LEONT/ExtUtils-PL2Bat-0.003.tar.gz',
+        'DISTRIBUTION' => 'LEONT/ExtUtils-PL2Bat-0.004.tar.gz',
         'FILES'        => q[cpan/ExtUtils-PL2Bat],
         'EXCLUDED'     => [
             't/00-compile.t',
             'script/pl2bat.pl'
         ],
-        'CUSTOMIZED'     => [
-            't/make_executable.t',
-        ],
     },
 
     'ExtUtils::Manifest' => {
@@ -585,7 +582,7 @@ use File::Glob qw(:case);
     },
 
     'FindBin' => {
-        'DISTRIBUTION' => 'XSAWYERX/FindBin-0.000.tar.gz',
+        'DISTRIBUTION' => 'TODDR/FindBin-1.52.tar.gz',
         'FILES'        => q[dist/FindBin],
     },
 
@@ -630,7 +627,7 @@ use File::Glob qw(:case);
     },
 
     'IO' => {
-        'DISTRIBUTION' => 'TODDR/IO-1.42.tar.gz',
+        'DISTRIBUTION' => 'TODDR/IO-1.45.tar.gz',
         'FILES'        => q[dist/IO/],
         'EXCLUDED'     => ['t/test.pl'],
     },
@@ -677,7 +674,7 @@ use File::Glob qw(:case);
     },
 
     'JSON::PP' => {
-        'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.05.tar.gz',
+        'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.06.tar.gz',
         'FILES'        => q[cpan/JSON-PP],
     },
 
@@ -811,7 +808,7 @@ use File::Glob qw(:case);
     },
 
     'Module::CoreList' => {
-        'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20201120.tar.gz',
+        'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20210123.tar.gz',
         'FILES'        => q[dist/Module-CoreList],
     },
 
index aa26821..3e2fe7a 100644 (file)
@@ -16,6 +16,10 @@ text.
 Program to prepare dual-life distributions for insertion into the Perl 5
 F<lib/> and F<t/> directories.  Now thought to be largely superseded.
 
+=head2 F<add-pod-file>
+
+Program to facilitate addition of new F<.pod> files to F<pod/>.
+
 =head2 F<bench.pl>
 
 Do performance analysis on the code snippets in F<t/perf/benchmarks>.
index 012aa77..af04c8f 100755 (executable)
@@ -319,11 +319,11 @@ my @ChangedFiles;
             }
         }
 
-        ### add entries to win32/Makefile and win32/makefile.mk
+        ### add entries to win32/Makefile
         ### they contain the following lines:
         # ./win32/makefile.mk:            ..\utils\ptardiff       \
         # ./win32/makefile.mk:        xsubpp instmodsh prove ptar ptardiff
-        for my $file ( qw[win32/Makefile win32/makefile.mk] ) {
+        for my $file ( qw[win32/Makefile] ) {
             unless ( `grep $bin $Repo/$file` ) {
                 print "    Adding $bin entries to $file..." if $Verbose;
 
diff --git a/Porting/add-pod-file b/Porting/add-pod-file
new file mode 100644 (file)
index 0000000..6ffcdca
--- /dev/null
@@ -0,0 +1,242 @@
+#!/usr/bin/perl
+use 5.14.0;
+use warnings;
+use Carp;
+use File::Spec;
+use Getopt::Long;
+use Module::Metadata;
+require "./Porting/manifest_lib.pl";
+
+=head1 NAME
+
+add-pod-file - Utility to add new F<pod/*.pod> file to core distribution
+
+=head1 USAGE
+
+After C<make test_prep> has been run, call from top level of Perl 5 core
+distribution:
+
+   perl Porting/add-pod-file \
+       --stub=<XXX> --section=<Z> --verbose
+
+=head1 DESCRIPTION
+
+This is a program which I<may> be helpful when a committer has to add a new
+F<*.pod> file in the F<pod/> directory.
+
+=head2 Prerequisites
+
+This program assumes that committer has taken the following steps (in the
+order listed):
+
+=over 4
+
+=item 1 You have run F<make test_prep>.
+
+This is to guarantee that all files are properly positioned.
+
+=item 2 You have placed a well-formatted F<.pod> file into the F<pod/> directory.
+
+In the C<NAME> section of this file there is a single non-blank line which
+consists of a string in the format C<STUB - ABSTRACT>, where C<STUB> is the
+basename of the file without the C<.pod> suffix and C<ABSTRACT> is the short
+description of the file.  For example, a new file whose path is
+F<pod/perlphonypod.pod> must have a C<NAME> section like this:
+
+    =head1 NAME
+
+    perlphonypod - This is phony POD
+
+=back
+
+F<pod/*.pod> files need entries in multiple locations to keep F<make
+test_porting> happy.  This program automates the formulation of I<most> of
+those entries, but will need some assistance from the committer to work
+properly.  The committer will have to make a reasonable choice as to which
+section of F<pod/perl.pod> the new F<.pod> file should be listed under.
+The eligible sections are shown in the following table:
+
+    Command-Line Value      Section in pod/perl.pod
+
+         O               => 'Overview',
+         T               => 'Tutorials',
+         R               => 'Reference Manual',
+         I               => 'Internals and C Language Interface',
+         M               => 'Miscellaneous',
+         L               => 'Language-Specific',
+         P               => 'Platform-Specific',
+
+For a first pass, we'll put the new entry at the end of the C<^=head2> section
+specified by the committer with the single-initial provided for command-line
+switch C<section>.
+
+=head2 Testing this program
+
+=over 4
+
+=item 1 Run F<configure> and F<make> in the source tree.
+
+=item 2 Create a well formatted F<.pod> file somewhere on your system.
+
+=item 3 Copy it into the source tree under F<pod>.
+
+=item 4 Call the program as in L</USAGE> above.
+
+=item 5 Call F<git diff> and examine results.
+
+=item 6 Run F<make test_porting>.
+
+=back
+
+=head1 BUGS
+
+When the argument provided to the C<--section> command-line switch is C<P> (for platform-specific), F<win32/pod.mak> is not getting updated -- but it's not clear whether it I<ought> to be updated.
+
+=cut
+
+my @man_sections = (
+    O   => 'Overview',
+    T   => 'Tutorials',
+    R   => 'Reference Manual',
+    I   => 'Internals and C Language Interface',
+    M   => 'Miscellaneous',
+    L   => 'Language-Specific',
+    P   => 'Platform-Specific',
+);
+
+my @man_section_abbrevs = ();
+my $man_sections_str = '';
+for (my $i=0; $i<= $#man_sections; $i+=2) {
+    my $j = $i+1;
+    push @man_section_abbrevs, $man_sections[$i];
+    $man_sections_str .= "\t$man_sections[$i] => $man_sections[$j]\n";
+}
+my %man_sections_seen = map { $_ => 1 } @man_section_abbrevs;
+my $man_sections = { @man_sections };
+
+my ($stub, $section, $verbose) = ('') x 3;
+GetOptions(
+    "stub=s"        => \$stub,
+    "section=s"     => \$section,
+    "verbose"       => \$verbose,
+) or croak("Error in command line arguments to add-pod-file.pl\n");
+croak "$0: Must provide value for command-line switch 'stub'"
+    unless length($stub);
+croak "$0: Must provide value for command-line switch 'section'"
+    unless length($section);
+my $section_croak = "$0: Value for command-line switch must be one of @man_section_abbrevs\n";
+$section_croak .= "    Select one initial from:\n$man_sections_str";
+croak $section_croak unless $man_sections_seen{$section};
+
+my $newpodfile = "$stub.pod";
+my $newpodpath = File::Spec->catfile('pod', $newpodfile);
+croak "Unable to locate new file '$newpodpath'" unless -f $newpodpath;
+my $thispodchecker = File::Spec->catfile(qw|cpan Pod-Checker podchecker|);
+croak "Cannot locate 'podchecker' within this checkout; have you called 'make'?"
+    unless -f $thispodchecker;
+
+say "Step 1: Basic test of validity of POD in $newpodpath" if $verbose;
+
+system(qq|$^X $thispodchecker $newpodpath|)
+    and croak "$newpodpath has POD errors; correct before proceeding further";
+my $data = Module::Metadata->new_from_file($newpodpath, collect_pod => 1, decode_pod => 1);
+
+my $regex = qr/\A\s*(?:\S+\s+)+?-+\s+(.+?)\s*\z/s;
+my ($abstract) = ($data->pod('NAME') // '')  =~ $regex
+    or croak "Could not parse abstract from `=head1 NAME` in $newpodpath";
+
+system(qq|git add $newpodpath|) and croak "Unable to 'git add'";
+
+# Step 2:  Insert entry for $newpodpath into MANIFEST
+
+my $manifest = 'MANIFEST';
+say "Step 2: Insert entry for $newpodpath into $manifest" if $verbose;
+
+open(my $IN, '<', $manifest)
+    or croak "Can't open $manifest for reading";
+my @manifest_orig = <$IN>;
+close($IN) or croak "Can't close $manifest after reading";
+chomp(@manifest_orig);
+
+my (@before_pod, @pod, @after_pod);
+my $seen_pod = 0;
+while (my $l = shift(@manifest_orig)) {
+    if (! $seen_pod and $l !~ m{^pod\/}) {
+        push @before_pod, $l;
+    }
+    elsif ($l =~ m{^pod\/}) {
+        push @pod, $l;
+        $seen_pod++;
+    }
+    else {
+        push @after_pod, $l;
+    }
+}
+
+say "Inserting entry for '$newpodpath' into $manifest; text will be '$abstract'" if $verbose;
+my $new_manifest_entry = "$newpodpath\t\t$abstract";
+my @new_pod = sort_manifest(@pod, $new_manifest_entry);
+
+open(my $OUT, '>', $manifest)
+    or croak "Can't open $manifest for writing";
+binmode($OUT);
+say $OUT join("\n", @before_pod, @new_pod, @after_pod);
+close($OUT) or croak "Can't close $manifest after writing";
+
+my $perlpod = File::Spec->catfile(qw|pod perl.pod|);
+
+say "Step 3: Add entry to $perlpod" if $verbose;
+
+# Read the existing pod/perl.pod into memory.
+# Divide it into chunks before the selected section, the head2 of the selected
+# section, the selected section, and what comes after the selected section.
+# Add the stub and abstract for the new .pod file to the end of the selected
+# section.  (Manually reposition to taste.)
+
+open(my $IN1, '<', $perlpod)
+    or croak "Can't open $perlpod for reading";
+my $perlpod_str;
+{
+    local $/;
+    $perlpod_str = <$IN1>;
+}
+close($IN1) or croak "Can't close $perlpod after reading";
+
+my $section_head = "=head2 $man_sections->{$section}";
+my @chunks = split $section_head, $perlpod_str;
+chomp $chunks[0]; # So we can use 'say' consistently later on
+
+my @balance = split /\n/, $chunks[1];
+shift @balance; # $chunks[1] begins with a newline which we won't need to output
+my (@target_section, @after_section);
+
+my $target = \@target_section;
+for my $l (@balance) {
+    $target = \@after_section if $l =~ m/^=(head2|for)/;
+    push @$target, $l;
+}
+
+push @target_section, "    $stub\t\t$abstract";
+
+open(my $OUT1, '>', $perlpod)
+    or croak "Can't open $perlpod for writing";
+say $OUT1 $chunks[0];
+say $OUT1 $section_head;
+say $OUT1 join("\n" => @target_section), "\n";
+say $OUT1 join("\n" => @after_section), "\n";
+close $OUT1 or croak "Can't close $perlpod after writing";
+
+my $podmak_command = './perl -Ilib Porting/pod_rules.pl --build-podmak --verbose';
+say "Step 4: Running '$podmak_command' to update win32/pod.mak."
+    if $verbose;
+
+system($podmak_command) and croak "'$podmak_command' failed";
+
+system(qq|git add MANIFEST pod/perl.pod win32/pod.mak|)
+    and croak "Unable to git-add three updated files";
+
+if ($verbose) {
+    say "Call 'git diff --staged' and inspect modified files; correct as needed.";
+    say "Then run 'make test_porting'.";
+    say "Then say 'git commit'.";
+}
index 4c1cf7b..88845e4 100644 (file)
@@ -46,12 +46,12 @@ afsroot='/afs'
 alignbytes='16'
 aphostname=''
 api_revision='5'
-api_subversion='6'
+api_subversion='7'
 api_version='33'
-api_versionstring='5.33.6'
+api_versionstring='5.33.7'
 ar='ar'
-archlib='/opt/perl/lib/5.33.6/x86_64-linux-thread-multi-ld'
-archlibexp='/opt/perl/lib/5.33.6/x86_64-linux-thread-multi-ld'
+archlib='/opt/perl/lib/5.33.7/x86_64-linux-thread-multi-ld'
+archlibexp='/opt/perl/lib/5.33.7/x86_64-linux-thread-multi-ld'
 archname64=''
 archname='x86_64-linux-thread-multi-ld'
 archobjs=''
@@ -854,7 +854,7 @@ incpath=''
 incpth='/usr/lib64/gcc/x86_64-suse-linux/10/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/10/include-fixed /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/include /usr/include'
 inews=''
 initialinstalllocation='/opt/perl/bin'
-installarchlib='/opt/perl/lib/5.33.6/x86_64-linux-thread-multi-ld'
+installarchlib='/opt/perl/lib/5.33.7/x86_64-linux-thread-multi-ld'
 installbin='/opt/perl/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -862,13 +862,13 @@ installman1dir='/opt/perl/man/man1'
 installman3dir='/opt/perl/man/man3'
 installprefix='/opt/perl'
 installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.33.6'
+installprivlib='/opt/perl/lib/5.33.7'
 installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.33.6/x86_64-linux-thread-multi-ld'
+installsitearch='/opt/perl/lib/site_perl/5.33.7/x86_64-linux-thread-multi-ld'
 installsitebin='/opt/perl/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='/opt/perl/lib/site_perl/5.33.6'
+installsitelib='/opt/perl/lib/site_perl/5.33.7'
 installsiteman1dir='/opt/perl/man/man1'
 installsiteman3dir='/opt/perl/man/man3'
 installsitescript='/opt/perl/bin'
@@ -993,7 +993,7 @@ perl_patchlevel=''
 perl_static_inline='static __inline__'
 perladmin='yourname@yourhost.yourplace.com'
 perllibs='-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/opt/perl/bin/perl5.33.6'
+perlpath='/opt/perl/bin/perl5.33.7'
 pg='pg'
 phostname=''
 pidtype='pid_t'
@@ -1002,8 +1002,8 @@ pmake=''
 pr=''
 prefix='/opt/perl'
 prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.33.6'
-privlibexp='/opt/perl/lib/5.33.6'
+privlib='/opt/perl/lib/5.33.7'
+privlibexp='/opt/perl/lib/5.33.7'
 procselfexe='"/proc/self/exe"'
 ptrsize='8'
 quadkind='2'
@@ -1068,17 +1068,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, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.33.6/x86_64-linux-thread-multi-ld'
-sitearchexp='/opt/perl/lib/site_perl/5.33.6/x86_64-linux-thread-multi-ld'
+sitearch='/opt/perl/lib/site_perl/5.33.7/x86_64-linux-thread-multi-ld'
+sitearchexp='/opt/perl/lib/site_perl/5.33.7/x86_64-linux-thread-multi-ld'
 sitebin='/opt/perl/bin'
 sitebinexp='/opt/perl/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/opt/perl/lib/site_perl/5.33.6'
+sitelib='/opt/perl/lib/site_perl/5.33.7'
 sitelib_stem='/opt/perl/lib/site_perl'
-sitelibexp='/opt/perl/lib/site_perl/5.33.6'
+sitelibexp='/opt/perl/lib/site_perl/5.33.7'
 siteman1dir='/opt/perl/man/man1'
 siteman1direxp='/opt/perl/man/man1'
 siteman3dir='/opt/perl/man/man3'
@@ -1104,7 +1104,7 @@ src='.'
 ssizetype='ssize_t'
 st_ino_sign='1'
 st_ino_size='8'
-startperl='#!/opt/perl/bin/perl5.33.6'
+startperl='#!/opt/perl/bin/perl5.33.7'
 startsh='#!/bin/sh'
 static_ext=' '
 stdchar='char'
@@ -1116,7 +1116,7 @@ stdio_ptr='((fp)->_ptr)'
 stdio_stream_array=''
 strerror_r_proto='REENTRANT_PROTO_B_IBW'
 submit=''
-subversion='6'
+subversion='7'
 sysman='/usr/share/man/man1'
 sysroot=''
 tail=''
@@ -1215,8 +1215,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.33.6'
-version_patchlevel_string='version 33 subversion 6'
+version='5.33.7'
+version_patchlevel_string='version 33 subversion 7'
 versiononly='define'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1226,10 +1226,10 @@ zcat=''
 zip='zip'
 PERL_REVISION=5
 PERL_VERSION=33
-PERL_SUBVERSION=6
+PERL_SUBVERSION=7
 PERL_API_REVISION=5
 PERL_API_VERSION=33
-PERL_API_SUBVERSION=6
+PERL_API_SUBVERSION=7
 PERL_PATCHLEVEL=''
 PERL_CONFIG_SH=true
 : Variables propagated from previous config.sh file.
index 3809fd2..54c73d3 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 "/opt/perl/lib/5.33.6/x86_64-linux"            /**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.33.6/x86_64-linux"                /**/
+#define ARCHLIB "/opt/perl/lib/5.33.7/x86_64-linux"            /**/
+#define ARCHLIB_EXP "/opt/perl/lib/5.33.7/x86_64-linux"                /**/
 
 /* BIN:
  *     This symbol holds the path of the bin directory where the package will
  *     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 "/opt/perl/lib/5.33.6"         /**/
-#define PRIVLIB_EXP "/opt/perl/lib/5.33.6"             /**/
+#define PRIVLIB "/opt/perl/lib/5.33.7"         /**/
+#define PRIVLIB_EXP "/opt/perl/lib/5.33.7"             /**/
 
 /* SITEARCH:
  *     This symbol contains the name of the private library for this package.
  *     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 "/opt/perl/lib/site_perl/5.33.6/x86_64-linux"         /**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.33.6/x86_64-linux"             /**/
+#define SITEARCH "/opt/perl/lib/site_perl/5.33.7/x86_64-linux"         /**/
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.33.7/x86_64-linux"             /**/
 
 /* 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 "/opt/perl/lib/site_perl/5.33.6"               /**/
-#define SITELIB_EXP "/opt/perl/lib/site_perl/5.33.6"           /**/
+#define SITELIB "/opt/perl/lib/site_perl/5.33.7"               /**/
+#define SITELIB_EXP "/opt/perl/lib/site_perl/5.33.7"           /**/
 #define SITELIB_STEM "/opt/perl/lib/site_perl"         /**/
 
 /* PERL_VENDORARCH:
  *     script to make sure (one hopes) that it runs with perl and not
  *     some shell.
  */
-#define STARTPERL "#!/opt/perl/bin/perl5.33.6"         /**/
+#define STARTPERL "#!/opt/perl/bin/perl5.33.7"         /**/
 
 /* HAS_STDIO_STREAM_ARRAY:
  *     This symbol, if defined, tells that there is an array
index 90e9e20..2874b83 100644 (file)
@@ -17,6 +17,14 @@ Consult your favorite dictionary for details.
 
 =head1 EPIGRAPHS
 
+=head2 v5.33.6 - Edward R. Murrow
+
+L<Announced on 2021-01-20 by Richard Leach|https://www.nntp.perl.org/group/perl.perl5.porters/2021/01/msg258843.html>
+
+This instrument can teach, it can illuminate; yes, and it can even
+inspire. But it can do so only to the extent that humans are determined
+to use it to those ends. Otherwise it is merely wires and lights in a box.
+
 =head2 v5.33.5 - Max Weber, (from "Understanding Administration", by Wolfgang Seibel)
 
 L<Announced on 2020-12-20 by Max Maischein|https://www.nntp.perl.org/group/perl.perl5.porters/2020/12/msg258683.html>
@@ -81,6 +89,21 @@ L<Announed on 2020-07-17 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5.
 
   The man who moves a mountain begins by carrying away small stones.
 
+=head2 v5.32.1 - Mikhail Bulgakov, trans. Michael Glenny, "The Master and Margarita"
+
+L<Announced on 2021-01-23 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2021/01/msg258868.html>
+
+As the warning bells rang, inquisitive people were peeping into the star
+dressing room.  Among them were jugglers in bright robes and turbans, a
+roller-skater in a knitted cardigan, a comedian with a powdered white
+face and a make-up man.  The celebrated guest artiste amazed everyone
+with his unusually long, superbly cut tail coat and by wearing a black
+domino.  Even more astounding were the black magician's two companions:
+a tall man in checks with an unsteady pince-nez and a fat black cat
+which walked into the dressing room on its hind legs and casually sat
+down on the divan, blinking in the light of the unshaded lamps round the
+make-up mirror.
+
 =head2 v5.32.1-RC1 - Mikhail Bulgakov, trans. Michael Glenny, "The Heart of a Dog"
 
 L<Announced on 2021-01-09 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2021/01/msg258762.html>
index e9a7ea4..79c17f4 100755 (executable)
@@ -303,7 +303,6 @@ my @writables = qw(
     lib/warnings.pm
     win32/GNUmakefile
     win32/Makefile
-    win32/makefile.mk
     win32/config_H.gc
     win32/config_H.vc
     uconfig.h
index 873655f..035726a 100644 (file)
@@ -403,7 +403,7 @@ died, add a short obituary here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.33.6..HEAD
+  perl Porting/acknowledgements.pl v5.33.7..HEAD
 
 =head1 Reporting Bugs
 
index 3e64837..8f8ebf2 100644 (file)
@@ -186,7 +186,6 @@ right-hand values in this list of key-value pairs:
             manifest => 'MANIFEST',
             vms => 'vms/descrip_mms.template',
             nmake => 'win32/Makefile',
-            dmake => 'win32/makefile.mk',
             gmake => 'win32/GNUmakefile',
             podmak => 'win32/pod.mak',
             unix => 'Makefile.SH',
index 434f1fd..d10c669 100644 (file)
@@ -24,7 +24,6 @@ if (ord("A") == 193) {
             manifest => 'MANIFEST',
             vms => 'vms/descrip_mms.template',
             nmake => 'win32/Makefile',
-            dmake => 'win32/makefile.mk',
             gmake => 'win32/GNUmakefile',
             podmak => 'win32/pod.mak',
             unix => 'Makefile.SH',
@@ -165,7 +164,6 @@ sub do_nmake {
 }
 
 # shut up used only once warning
-*do_dmake = *do_dmake = \&do_nmake;
 *do_gmake = *do_gmake = \&do_nmake;
 
 sub do_podmak {
index 21ba9a1..47ca623 100644 (file)
@@ -14,7 +14,7 @@ deemed necessary by the Pumpking.
 =head2 Perl 5.32
 
   2020-06-20  5.32.0 âœ“        Sawyer X
-  2021-01-23  5.32.1         Steve Hay
+  2021-01-23  5.32.1 âœ“        Steve Hay
 
 =head2 Perl 5.30
 
@@ -45,10 +45,13 @@ you should reset the version numbers to the next blead series.
   2020-10-20  5.33.3 âœ“       Steve Hay
   2020-11-20  5.33.4 âœ“       Tom Hukins
   2020-12-20  5.33.5 âœ“       Max Maischein
-  2021-01-20  5.33.6         Richard Leach
-  2021-02-20  5.33.7         Renee Backer
-  2021-03-20  5.33.8         Atoomic
-  2021-04-20  5.33.9         Todd Rinaldo
+  2021-01-20  5.33.6 âœ“       Richard Leach
+  2021-02-20  5.33.7         Renee Backer   Contentious changes freeze
+  2021-03-20  5.33.8         Atoomic        User-visible changes to
+                                            correctly functioning programs
+                                            freeze
+  2021-04-20  5.33.9         Todd Rinaldo   Full code freeze
+  2021-05-20  5.34.0         Sawyer X       Stable release!
 
 =head1 VICTIMS
 
index 33b2aa0..307058d 100644 (file)
@@ -486,7 +486,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.33.6.
+options would be nice for perl 5.33.7.
 
 =head2 Profile Perl - am I hot or not?
 
@@ -1189,7 +1189,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.33.6"
+of 5.33.7"
 
 =head2 make ithreads more robust
 
index 6ad9fb5..dec2852 100644 (file)
@@ -598,7 +598,7 @@ be kept as clean as possible.
  plan9/mkfile
  hints/uwin.sh
  vms/descrip_mms.template
- win32/Makefile win32/makefile.mk
+ win32/Makefile
 
 =item Tests
 
index 44c55d0..a50a6d6 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.33.6/BePC-haiku/CORE/libperl.so .
+  cd /boot/common/lib; ln -s perl5/5.33.7/BePC-haiku/CORE/libperl.so .
 
-Replace C<5.33.6> with your respective version of Perl.
+Replace C<5.33.7> with your respective version of Perl.
 
 =head1 KNOWN PROBLEMS
 
index d583fe6..c3d2556 100644 (file)
@@ -10,9 +10,9 @@ perlmacosx - Perl under Mac OS X
 
 This document briefly describes Perl under Mac OS X.
 
-  curl -O https://www.cpan.org/src/perl-5.33.6.tar.gz
-  tar -xzf perl-5.33.6.tar.gz
-  cd perl-5.33.6
+  curl -O https://www.cpan.org/src/perl-5.33.7.tar.gz
+  tar -xzf perl-5.33.7.tar.gz
+  cd perl-5.33.7
   ./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.33.6 as of this writing) builds without changes
+The latest Perl release (5.33.7 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 85b15f9..d12be97 100644 (file)
@@ -619,7 +619,7 @@ C<set PERLLIB_PREFIX> in F<Config.sys>, see L</"C<PERLLIB_PREFIX>">.
 
 =item Additional Perl modules
 
-  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.33.6/
+  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.33.7/
 
 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 372c74b..7894487 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^.33^.6.tar
+    vmstar -xvf perl-5^.33^.7.tar
 
 Then set default to the top-level source directory like so:
 
-    set default [.perl-5^.33^.6]
+    set default [.perl-5^.33^.7]
 
 and proceed with configuration as described in the next section.
 
index 73d74bd..e0075d3 100644 (file)
@@ -41,8 +41,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
-                              with runtime < 3.21
+      Gcc by mingw.org        gcc version 3.4.5-5.3.0
       Gcc by mingw-w64.org    gcc version 4.4.3 or later
 
 Note that the last two of these are actually competing projects both
@@ -98,20 +97,9 @@ See L</Usage Hints for Perl on Windows> below for general hints about this.
 
 You need a "make" program to build the sources.  If you are using
 Visual C++ or the Windows SDK tools, you can use nmake supplied with Visual C++
-or Windows SDK. You may also use, for Visual C++ or Windows SDK, dmake or gmake
-instead of nmake.  dmake is open source software, but is not included with
-Visual C++ or Windows SDK.  Builds using gcc need dmake or gmake.  nmake is not
-supported for gcc builds.  Parallel building is only supported with dmake and
-gmake, not nmake.  When using dmake it is recommended to use dmake 4.13 or newer
-for parallel building.  Older dmakes, in parallel mode, have very high CPU usage
-and pound the disk/filing system with duplicate I/O calls in an aggressive
-polling loop.
-
-A port of dmake for Windows is available from:
-
-L<https://metacpan.org/release/dmake>
-
-Fetch and install dmake somewhere on your path.
+or Windows SDK. You may also use gmake instead of nmake.  Builds using gcc need
+gmake. nmake is not supported for gcc builds.  Parallel building is only
+supported with gmake, not nmake.
 
 =item Command Shell
 
@@ -322,10 +310,10 @@ MinGW64 (version 4.4.3 or later).  It can be downloaded here:
 L<http://www.mingw.org/>
 L<http://www.mingw-w64.org/>
 
-You also need dmake or gmake.  See L</"Make"> above on how to get it.
+You also need gmake. Usually it comes with MinGW but its executable may have
+a different name, such as mingw32-make.exe.
 
-Note that the MinGW build currently requires a MinGW runtime version earlier
-than 3.21 (check __MINGW32_MAJOR_VERSION and __MINGW32_MINOR_VERSION).
+Note that the MinGW build currently fails with version 6.3.0 or later.
 
 Note also that the C++ mode build currently fails with MinGW 3.4.5 and 4.7.2
 or later, and with MinGW64 64-bit 6.3.0 or later.
@@ -356,15 +344,14 @@ unlike GCC.
 Make sure you are in the "win32" subdirectory under the perl toplevel.
 This directory contains a "Makefile" that will work with
 versions of nmake that come with Visual C++ or the Windows SDK, and
-a GNU make "GNUmakefile" or dmake "makefile.mk" that will work for all
-supported compilers.  The defaults in the gmake and dmake makefile are
-setup to build using MinGW/gcc.
+a GNU make "GNUmakefile" that will work for all supported compilers.
+The defaults in the gmake makefile are setup to build using MinGW/gcc.
 
 =item *
 
-Edit the GNUmakefile, makefile.mk (or Makefile, if you're using nmake)
-and change the values of INST_DRV and INST_TOP.   You can also enable
-various build flags.  These are explained in the makefiles.
+Edit the GNUmakefile (or Makefile, if you're using nmake) and change the values
+of INST_DRV and INST_TOP. You can also enable various build flags. These are
+explained in the makefiles.
 
 Note that it is generally not a good idea to try to build a perl with
 INST_DRV and INST_TOP set to a path that already exists from a previous
@@ -380,7 +367,7 @@ F<lib> directories.
 
 If building with the cross-compiler provided by
 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
+GCCCROSS in the GNUmakefile. 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
 executables are prefixed with 'x86_64-w64-mingw32-'.)
@@ -396,21 +383,18 @@ Be sure to read the instructions near the top of the makefiles carefully.
 
 =item *
 
-Type "dmake" ("gmake" for GNU make, or "nmake" if you are using that make).
+Type "gmake" (or "nmake" if you are using that make).
 
 This should build everything.  Specifically, it will create perl.exe,
 perl533.dll at the perl toplevel, and various other extension dll's
 under the lib\auto directory.  If the build fails for any reason, make
 sure you have done the previous steps correctly.
 
-To try dmake's parallel mode, type "dmake -P2", where 2, is the maximum number
+To try gmake's parallel mode, type "gmake -j2", where 2, is the maximum number
 of parallel jobs you want to run. A number of things in the build process will
 run in parallel, but there are serialization points where you will see just 1
 CPU maxed out. This is normal.
 
-Similarly you can build in parallel with GNU make, type "gmake -j2" to
-build with two parallel jobs, or higher for more.
-
 If you are advanced enough with building C code, here is a suggestion to speed
 up building perl, and the later C<make test>. Try to keep your PATH environmental
 variable with the least number of folders possible (remember to keep your C
@@ -422,7 +406,7 @@ is the most commonly launched program during the build and later testing.
 
 =head2 Testing Perl on Windows
 
-Type "dmake test" (or "gmake test", "nmake test").  This will run most
+Type "gmake test" (or "nmake test").  This will run most
 of the tests from the testsuite (many tests will be skipped).
 
 There should be no test failures.
@@ -450,7 +434,7 @@ native "cmd.exe", or if you are building from a path that contains
 spaces.  So don't do that.
 
 If you are running the tests from a emacs shell window, you may see
-failures in op/stat.t.  Run "dmake test-notty" in that case.
+failures in op/stat.t.  Run "gmake test-notty" in that case.
 
 Furthermore, you should make sure that during C<make test> you do not
 have any GNU tool packages in your path: some toolkits like Unixutils
@@ -469,7 +453,7 @@ Please report any other failures as described under L</BUGS AND CAVEATS>.
 
 =head2 Installation of Perl on Windows
 
-Type "dmake install" (or "gmake install", "nmake install").  This will
+Type "gmake install" ("nmake install").  This will
 put the newly built perl and the libraries under whatever C<INST_TOP>
 points to in the Makefile.  It will also install the pod documentation
 under C<$INST_TOP\$INST_VER\lib\pod> and HTML versions of the same
@@ -652,25 +636,13 @@ may not provide a testsuite (so "$MAKE test" may not do anything or
 fail), but most serious ones do.
 
 It is important that you use a supported 'make' program, and
-ensure Config.pm knows about it.  If you don't have nmake, you can
-either get dmake from the location mentioned earlier or get an
-old version of nmake reportedly available from:
-
-L<http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe>
-
-Another option is to use the make written in Perl, available from
-CPAN.
-
-L<https://www.cpan.org/modules/by-module/Make/>
-
-You may also use dmake or gmake.  See L</"Make"> above on how to get it.
+ensure Config.pm knows about it.
 
 Note that MakeMaker actually emits makefiles with different syntax
 depending on what 'make' it thinks you are using.  Therefore, it is
 important that one of the following values appears in Config.pm:
 
     make='nmake'       # MakeMaker emits nmake syntax
-    make='dmake'       # MakeMaker emits dmake syntax
     any other value    # MakeMaker emits generic make syntax
                            (e.g GNU make, or Perl make)
 
@@ -970,6 +942,6 @@ Win9x support was added in 5.6 (Benjamin Stuhl).
 
 Support for 64-bit Windows added in 5.8 (ActiveState Corp).
 
-Last updated: 30 April 2019
+Last updated: 26 January 2020
 
 =cut
index dceb480..8264f91 100755 (executable)
@@ -3603,12 +3603,6 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$default_inc_excludes_dot DEFAULT_INC_EXCLUDES_DOT    /**/
 
-/* USE_STRICT_BY_DEFAULT:
- *     This symbol, if defined, enables additional defaults.
- *     At this time it only enables implicit strict by default.
- */
-#$usedefaultstrict USE_STRICT_BY_DEFAULT       /* use strict by default */
-
 /* USE_DYNAMIC_LOADING:
  *     This symbol, if defined, indicates that dynamic loading of
  *     some sort is available.
@@ -4255,6 +4249,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$usecbacktrace USE_C_BACKTRACE                /**/
 
+/* USE_STRICT_BY_DEFAULT:
+ *     This symbol, if defined, enables additional defaults.
+ *     At this time it only enables implicit strict by default.
+ */
+#$usedefaultstrict USE_STRICT_BY_DEFAULT       /* use strict by default */
+
 /* USE_DTRACE:
  *     This symbol, if defined, indicates that Perl should
  *     be built with support for DTrace.
index 77ce7ae..df29582 100644 (file)
@@ -341,8 +341,8 @@ $   DECK
  "-r" : reuse C symbols value if possible (skips costly nm extraction).*
  "-s" : silent mode, only echoes questions and essential information.
  -"D" : define symbol to have some value:                              *
-         -"Dsymbol"         symbol gets the value 'define'
-         -"Dsymbol=value"   symbol gets the value 'value'
+         -"Dsymbol"             symbol gets the value 'define'
+         -"Dsymbol=some value"  symbol is set to "some value"
   -E  : stop at the end of questions, after having produced config.sh. *
   -K  : do not use unless you know what you are doing.
   -O  : let -D and -U override definitions from loaded configuration file. *
@@ -7275,6 +7275,7 @@ $ IF unlink_all_versions .OR. unlink_all_versions .EQS. "define" THEN -
 $ IF d_sockaddr_sa_len .EQS. "define" then WC "#define _SOCKADDR_LEN 1"
 $ IF ccname .EQS. "CXX" then WC "#define NO_ENVIRON_ARRAY"
 $ IF ccname .EQS. "CXX" then WC "#define VMS" ! only has __VMS by default
+$ WC "#define _PTHREAD_EXC_INCL_CLEAN" ! avoid conflict between DECthreads TRY/CATCH and Perl TRY/CATCH
 $ CLOSE CONFIG
 $!
 $ echo4 "Doing variable substitutions on .SH files..."
diff --git a/cop.h b/cop.h
index a1f5b92..7b8a14f 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -940,7 +940,7 @@ struct context {
                              or plain block { ...; } */
 #define CXt_SUB                9
 #define CXt_FORMAT     10
-#define CXt_EVAL       11
+#define CXt_EVAL       11 /* eval'', eval{}, try{} */
 #define CXt_SUBST      12
 /* SUBST doesn't feature in all switch statements.  */
 
@@ -953,7 +953,8 @@ struct context {
 
 /* private flags for CXt_EVAL */
 #define CXp_REAL       0x20    /* truly eval'', not a lookalike */
-#define CXp_TRYBLOCK   0x40    /* eval{}, not eval'' or similar */
+#define CXp_EVALBLOCK  0x40    /* eval{}, not eval'' or similar */
+#define CXp_TRY         0x80    /* try {} block */
 
 /* private flags for CXt_LOOP */
 
@@ -975,11 +976,17 @@ struct context {
 #define CxMULTICALL(c) ((c)->cx_type & CXp_MULTICALL)
 #define CxREALEVAL(c)  (((c)->cx_type & (CXTYPEMASK|CXp_REAL))         \
                         == (CXt_EVAL|CXp_REAL))
-#define CxTRYBLOCK(c)  (((c)->cx_type & (CXTYPEMASK|CXp_TRYBLOCK))     \
-                        == (CXt_EVAL|CXp_TRYBLOCK))
+#define CxEVALBLOCK(c) (((c)->cx_type & (CXTYPEMASK|CXp_EVALBLOCK))    \
+                        == (CXt_EVAL|CXp_EVALBLOCK))
+#define CxTRY(c)        (((c)->cx_type & (CXTYPEMASK|CXp_TRY))          \
+                         == (CXt_EVAL|CXp_TRY))
 #define CxFOREACH(c)   (   CxTYPE(cx) >= CXt_LOOP_ARY                  \
                          && CxTYPE(cx) <= CXt_LOOP_LIST)
 
+/* deprecated old name before real try/catch was added */
+#define CXp_TRYBLOCK    CXp_EVALBLOCK
+#define CxTRYBLOCK(c)   CxEVALBLOCK(c)
+
 #define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc()))
 
 #define G_SCALAR       2
index bce04cc..e5f524d 100644 (file)
@@ -8,7 +8,7 @@ use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
 @ISA       = qw(Exporter);
 @EXPORT    = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f test_d chmod
                 dos2unix);
-$VERSION = '7.58';
+$VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 my $Is_VMS   = $^O eq 'VMS';
index 93bddbf..79dad57 100644 (file)
@@ -10,7 +10,7 @@ our @ISA = qw(Exporter);
 
 our @EXPORT  = qw(test_harness pod2man perllocal_install uninstall
                   warn_if_old_packlist test_s cp_nonempty);
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 my $Is_VMS = $^O eq 'VMS';
index 877bffa..0718cc0 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::Liblist;
 use strict;
 use warnings;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 use File::Spec;
index ef53dbc..6aa7632 100644 (file)
@@ -11,7 +11,7 @@ use 5.006;
 
 use strict;
 use warnings;
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 use ExtUtils::MakeMaker::Config;
index fc8d1c8..31998ba 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use ExtUtils::MakeMaker::Config;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::Liblist;
index b2864e7..bdafaa9 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_AIX;
 
 use strict;
 use warnings;
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 use ExtUtils::MakeMaker::Config;
index 2f86884..fc60f81 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_Any;
 
 use strict;
 use warnings;
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 use Carp;
index 9e054f5..b9b2d35 100644 (file)
@@ -27,7 +27,7 @@ require ExtUtils::MM_Any;
 require ExtUtils::MM_Unix;
 
 our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 
index 403f052..b4f6014 100644 (file)
@@ -10,7 +10,7 @@ require ExtUtils::MM_Unix;
 require ExtUtils::MM_Win32;
 our @ISA = qw( ExtUtils::MM_Unix );
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 
index cb6cb65..63f91fd 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MM_DOS;
 use strict;
 use warnings;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Any;
index 2fed563..f1e510b 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
     our @ISA = qw( ExtUtils::MM_Unix );
 }
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 
index 8a0bba4..69e2710 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MM_MacOS;
 use strict;
 use warnings;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 sub new {
index fc35d28..9d781ba 100644 (file)
@@ -23,7 +23,7 @@ use warnings;
 use ExtUtils::MakeMaker::Config;
 use File::Basename;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Win32;
index da43f6b..fd423ab 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use ExtUtils::MakeMaker qw(neatvalue);
 use File::Spec;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Any;
index f3e6879..7f82eba 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_OS390;
 
 use strict;
 use warnings;
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 use ExtUtils::MakeMaker::Config;
index 145a826..decd89d 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_QNX;
 
 use strict;
 use warnings;
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Unix;
index 80074c7..1ace757 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_UWIN;
 
 use strict;
 use warnings;
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Unix;
index 46d457c..0429637 100644 (file)
@@ -15,7 +15,7 @@ use ExtUtils::MakeMaker qw($Verbose neatvalue _sprintf562);
 
 # If we make $VERSION an our variable parse_version() breaks
 use vars qw($VERSION);
-$VERSION = '7.58';
+$VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Any;
@@ -3020,7 +3020,7 @@ sub parse_version {
       $result = $normal if defined $normal;
     }
     if ( defined $result ) {
-      $result = "undef" unless $result =~ m!^v?[\d_\.\-]+$!
+      $result = "undef" unless $result =~ m!^v?[\d_\.]+$!
                         or eval { version->parse( $result ) };
     }
     $result = "undef" unless defined $result;
index c0039c8..626ffcc 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
 use File::Basename;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Any;
index 08c3a80..d45caca 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MM_VOS;
 
 use strict;
 use warnings;
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Unix;
index 1fa000b..5a1d55e 100644 (file)
@@ -27,7 +27,7 @@ use ExtUtils::MakeMaker qw(neatvalue _sprintf562);
 require ExtUtils::MM_Any;
 require ExtUtils::MM_Unix;
 our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 $ENV{EMXSHELL} = 'sh'; # to run `commands`
index f17d536..45b51d9 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MM_Win95;
 use strict;
 use warnings;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require ExtUtils::MM_Win32;
index a179de9..0b19b23 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MY;
 use strict;
 require ExtUtils::MM;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 our @ISA = qw(ExtUtils::MM);
 
index aed2a74..b677b09 100644 (file)
@@ -25,7 +25,7 @@ my %Recognized_Att_Keys;
 our %macro_fsentity; # whether a macro is a filesystem name
 our %macro_dep; # whether a macro is a dependency
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 # Emulate something resembling CVS $Revision$
index 1140a61..70616a9 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::MakeMaker::Config;
 use strict;
 use warnings;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 use Config ();
index 0dccca3..5903b39 100644 (file)
@@ -1,6 +1,6 @@
 package ExtUtils::MakeMaker::FAQ;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 1;
index d2ca5c6..415c22d 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::MakeMaker::Locale;
 
 use strict;
 use warnings;
-our $VERSION = "7.58";
+our $VERSION = "7.60";
 $VERSION =~ tr/_//d;
 
 use base 'Exporter';
index 54bf7cb..080bdee 100644 (file)
@@ -1,6 +1,6 @@
 package ExtUtils::MakeMaker::Tutorial;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 
index 72a4ef7..7412868 100644 (file)
@@ -16,7 +16,7 @@ use warnings;
 
 use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv);
 
-$VERSION = '7.58';
+$VERSION = '7.60';
 $VERSION =~ tr/_//d;
 $CLASS = 'version';
 
index 6742d98..72d31e0 100644 (file)
@@ -11,7 +11,7 @@ use warnings;
 
 use vars qw($VERSION $CLASS $STRICT $LAX);
 
-$VERSION = '7.58';
+$VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 #--------------------------------------------------------------------------#
index 7e7a545..3362e4d 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::Mkbootstrap;
 use strict;
 use warnings;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 require Exporter;
index 562c9c3..eadb752 100644 (file)
@@ -11,7 +11,7 @@ use Config;
 
 our @ISA = qw(Exporter);
 our @EXPORT = qw(&Mksymlists);
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 sub Mksymlists {
index c4006c2..22aec0b 100644 (file)
@@ -3,7 +3,7 @@ package ExtUtils::testlib;
 use strict;
 use warnings;
 
-our $VERSION = '7.58';
+our $VERSION = '7.60';
 $VERSION =~ tr/_//d;
 
 use Cwd;
index 7689e37..79b96f6 100644 (file)
@@ -61,7 +61,8 @@ CLOO
     local $SIG{__WARN__} = sub { $stderr .= join '', @_ };
 
     $mm->check_hints;
-    like( $stderr, qr{^Failed to run hint file hints\S+\.pl: Argh!\n\z}, 'hint files produce errors' );
+    my $Escaped_Hint_File = quotemeta($Hint_File);
+    like( $stderr, qr{^Failed to run hint file $Escaped_Hint_File: Argh!\n\z}, 'hint files produce errors' );
 }
 
 END {
index f90b947..ecba13d 100644 (file)
@@ -22,7 +22,7 @@ my %versions = (q[$VERSION = '1.00']            => '1.00',
                 q[*FOO::VERSION = \'1.11';]     => '1.11',
                 '$VERSION = 0.02'               => 0.02,
                 '$VERSION = 0.0'                => 0.0,
-                '$VERSION = -1.0'               => -1.0,
+                '$VERSION = -1.0'               => 'undef',
                 '$VERSION = undef'              => 'undef',
                 '$wibble  = 1.0'                => undef,
                 q[my $VERSION = '1.01']         => 'undef',
index 4341843..070e186 100644 (file)
@@ -1,5 +1,5 @@
 package ExtUtils::PL2Bat;
-$ExtUtils::PL2Bat::VERSION = '0.003';
+$ExtUtils::PL2Bat::VERSION = '0.004';
 use strict;
 use warnings;
 
@@ -122,7 +122,7 @@ ExtUtils::PL2Bat - Batch file creation to run perl scripts on Windows
 
 =head1 VERSION
 
-version 0.003
+version 0.004
 
 =head1 OVERVIEW
 
index 0507921..2475fe1 100644 (file)
@@ -14,7 +14,7 @@ use JSON::PP::Boolean;
 use Carp ();
 #use Devel::Peek;
 
-$JSON::PP::VERSION = '4.05';
+$JSON::PP::VERSION = '4.06';
 
 @JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json);
 
@@ -201,12 +201,11 @@ sub boolean_values {
         my ($false, $true) = @_;
         $self->{false} = $false;
         $self->{true} = $true;
-        return ($false, $true);
     } else {
         delete $self->{false};
         delete $self->{true};
-        return;
     }
+    return $self;
 }
 
 sub get_boolean_values {
index 5d5b17c..a6b9ee1 100644 (file)
@@ -10,7 +10,7 @@ overload::import('overload',
     fallback => 1,
 );
 
-$JSON::PP::Boolean::VERSION = '4.05';
+$JSON::PP::Boolean::VERSION = '4.06';
 
 1;
 
index 5a2c2b3..f575b72 100644 (file)
@@ -37,13 +37,14 @@ if (eval "require Types::Serialiser; 1") {
     push @tests, [Types::Serialiser::true(), Types::Serialiser::false(), 'Types::Serialiser::BooleanBase', 'Types::Serialiser::BooleanBase'];
 }
 
-plan tests => 13 * @tests;
+plan tests => 15 * @tests;
 
 my $json = JSON::PP->new;
 for my $test (@tests) {
     my ($true, $false, $true_class, $false_class, $incompat) = @$test;
 
-    $json->boolean_values($false, $true);
+    my $ret = $json->boolean_values($false, $true);
+    is $ret => $json, "returns the same object";
     my ($new_false, $new_true) = $json->get_boolean_values;
     ok defined $new_true, "new true class is defined";
     ok defined $new_false, "new false class is defined";
@@ -70,7 +71,8 @@ for my $test (@tests) {
         is $should_false_json => 'false', "A $false_class object turns into JSON false";
     }
 
-    $json->boolean_values();
+    $ret = $json->boolean_values();
+    is $ret => $json, "returns the same object";
     ok !$json->get_boolean_values, "reset boolean values";
 
     $should_true = $json->allow_nonref(1)->decode('true');
index 09abfb8..744ca72 100644 (file)
@@ -55,7 +55,7 @@ use constant ERROR_58_HINTS => q{Non-subroutine %s hints for %s are not supporte
 
 use constant MIN_IPC_SYS_SIMPLE_VER => 0.12;
 
-our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg::Version
+our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg::Version
 
 our $Debug ||= 0;
 
@@ -168,6 +168,8 @@ my %TAGS = (
     ':2.30'  => [qw(:default)],
     ':2.31'  => [qw(:default)],
     ':2.32'  => [qw(:default)],
+    ':2.33'  => [qw(:default)],
+    ':2.34'  => [qw(:default)],
 );
 
 
index 8f62d67..0c1b9ac 100644 (file)
@@ -9,7 +9,7 @@ our $VERSION;
 # ABSTRACT: Replace functions with ones that succeed or die with lexical scope
 
 BEGIN {
-    our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg::Version
+    our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg::Version
 }
 
 use constant ERROR_WRONG_FATAL => q{
@@ -306,7 +306,7 @@ return an empty list, or a list consisting only of a single undef
 element.
 
 Some builtins (e.g. C<chdir> or C<truncate>) has a call signature that
-cannot completely be representated with a Perl prototype.  This means
+cannot completely be represented with a Perl prototype.  This means
 that some valid Perl code will be invalid under autodie.  As an example:
 
   chdir(BAREWORD);
@@ -392,8 +392,7 @@ C<autodie> with block eval is considered good practice.
 =head2 REPORTING BUGS
 
 Please report bugs via the GitHub Issue Tracker at
-L<https://github.com/pjf/autodie/issues> or via the CPAN Request
-Tracker at L<https://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie>.
+L<https://github.com/pjf/autodie/issues>.
 
 =head1 FEEDBACK
 
index 8ee412b..2be221d 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 
 # ABSTRACT: Wrapper class for calling subs at end of scope
-our $VERSION = '2.32'; # VERSION
+our $VERSION = '2.34'; # VERSION
 
 # This code schedules the cleanup of subroutines at the end of
 # scope.  It's directly inspired by chocolateboy's excellent
index 9b0a906..8cb1be1 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use autodie::Scope::Guard;
 
 # ABSTRACT: Hook stack for managing scopes via %^H
-our $VERSION = '2.32'; # VERSION
+our $VERSION = '2.34'; # VERSION
 
 my $H_KEY_STEM = __PACKAGE__ . '/guard';
 my $COUNTER = 0;
index 1a04a19..95de13e 100644 (file)
@@ -14,7 +14,7 @@ our @EXPORT_OK = qw(
   on_end_of_compile_scope
 );
 
-our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Internal Utility subroutines for autodie and Fatal
 
index d4c14f9..f4035d2 100644 (file)
@@ -4,7 +4,9 @@ use strict;
 use warnings;
 use Carp qw(croak);
 
-our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version
+use Scalar::Util qw(blessed);
+
+our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg:Version
 # ABSTRACT: Exceptions from autodying functions.
 
 our $DEBUG = 0;
index b0e270c..afe1617 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 use parent 'autodie::exception';
 use Carp qw(croak);
 
-our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Exceptions from autodying system().
 
index c3f83ed..3778cc7 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 
 use constant PERL58 => ( $] < 5.009 );
 
-our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Provide hints about user subroutines to autodie
 
index ad9706c..32aba04 100644 (file)
@@ -2,7 +2,7 @@ package autodie::skip;
 use strict;
 use warnings;
 
-our $VERSION = '2.32'; # VERSION
+our $VERSION = '2.34'; # VERSION
 
 # This package exists purely so people can inherit from it,
 # which isn't at all how roles are supposed to work, but it's
diff --git a/cpan/autodie/t/exception_nonref.t b/cpan/autodie/t/exception_nonref.t
new file mode 100644 (file)
index 0000000..7fdbc31
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/perl -w
+use strict;
+use Test::More tests => 1;
+use autodie;
+
+eval { syswrite "xxxxxxxx", \*STDOUT };
+my $err = $@;
+
+like( $err, qr<xxxxxxxx>, 'expected failure on attempt to write to non-reference' );
+
+done_testing();
index 98abad2..1ad2a65 100644 (file)
@@ -617,7 +617,7 @@ variable C<DPPP_CHECK_LEVEL> to 1 or 2.
 All of these files could be generated on the fly while building
 C<Devel::PPPort>, but not having the tests in F<t/> will confuse
 TEST/harness in the core. Not having F<PPPort.pm> will be bad for
-viewing the docs on C<search.cpan.org>. So unfortunately, it's
+viewing the docs on C<metacpan.org>. So unfortunately, it's
 unavoidable to put some redundancy into the package.
 
 =head2 Submitting Patches
index 523480f..269498b 100644 (file)
@@ -201,8 +201,7 @@ mess_sv(pTHX_ SV *basemsg, bool consume)
 
 #ifndef croak_xs_usage
 #if { NEED croak_xs_usage }
-#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
-#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
+
 
 void
 croak_xs_usage(const CV *const cv, const char *const params)
@@ -210,7 +209,11 @@ croak_xs_usage(const CV *const cv, const char *const params)
     dTHX;
     const GV *const gv = CvGV(cv);
 
+#ifdef PERL_ARGS_ASSERT_CROAK_XS_USAGE
     PERL_ARGS_ASSERT_CROAK_XS_USAGE;
+#else
+     assert(cv); assert(params);
+#endif
 
     if (gv) {
         const char *const gvname = GvNAME(gv);
@@ -228,7 +231,6 @@ croak_xs_usage(const CV *const cv, const char *const params)
 }
 #endif
 #endif
-#endif
 
 =xsinit
 
index 5cb89e4..2ee209a 100644 (file)
@@ -1,5 +1,12 @@
 Revision history for Perl extension ExtUtils::CBuilder.
 
+0.280236 - 2021-02-12
+
+  Fix:
+
+  - Remove image-base generation on Win32/gcc and instead use GCC's built-in
+    `--enable-auto-image-base` linker option.
+
 0.280235 - 2020-11-01
 
   Fix:
index 3286015..e470d41 100644 (file)
@@ -7,7 +7,7 @@ use Perl::OSType qw/os_type/;
 
 use warnings;
 use strict;
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA;
 
 # We only use this once - don't waste a symbol table entry on it.
index a72a7cb..8ee248d 100644 (file)
@@ -9,7 +9,7 @@ use Text::ParseWords;
 use IPC::Cmd qw(can_run);
 use File::Temp qw(tempfile);
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 
 # More details about C/C++ compilers:
 # http://developers.sun.com/sunstudio/documentation/product/compiler.jsp
index 4005366..590068c 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 use strict;
 use ExtUtils::CBuilder::Base;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Base);
 
 sub link_executable {
index f0ce477..d9b1fbd 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 use strict;
 use ExtUtils::CBuilder::Base;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Base);
 
 use File::Spec::Functions qw(catfile catdir);
index b017d7a..b81384f 100644 (file)
@@ -8,7 +8,7 @@ use File::Spec;
 use ExtUtils::CBuilder::Base;
 use IO::File;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Base);
 
 =begin comment
index 35e8027..657241a 100644 (file)
@@ -1,6 +1,6 @@
 package ExtUtils::CBuilder::Platform::Windows::BCC;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 
 use strict;
 use warnings;
index 46650e9..52664c7 100644 (file)
@@ -1,6 +1,6 @@
 package ExtUtils::CBuilder::Platform::Windows::GCC;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 
 use warnings;
 use strict;
@@ -40,15 +40,6 @@ sub format_linker_cmd {
   unshift( @{$spec{other_ldflags}}, '-nostartfiles' )
     if ( $spec{startup} && @{$spec{startup}} );
 
-  # From ExtUtils::MM_Win32:
-  #
-  ## one thing for GCC/Mingw32:
-  ## we try to overcome non-relocateable-DLL problems by generating
-  ##    a (hopefully unique) image-base from the dll's name
-  ## -- BKS, 10-19-1999
-  File::Basename::basename( $spec{output} ) =~ /(....)(.{0,4})/;
-  $spec{image_base} = sprintf( "0x%x0000", unpack('n', $1 ^ $2) );
-
   %spec = $self->write_linker_script(%spec)
     if $spec{use_scripts};
 
@@ -72,7 +63,7 @@ sub format_linker_cmd {
     @ld                       ,
     '-o', $spec{output}       ,
     "-Wl,--base-file,$spec{base_file}"   ,
-    "-Wl,--image-base,$spec{image_base}" ,
+    "-Wl,--enable-auto-image-base" ,
     @{$spec{lddlflags}}       ,
     @{$spec{libpath}}         ,
     @{$spec{startup}}         ,
@@ -93,7 +84,7 @@ sub format_linker_cmd {
   push @cmds, [ grep {defined && length} (
     @ld                       ,
     '-o', $spec{output}       ,
-    "-Wl,--image-base,$spec{image_base}" ,
+    "-Wl,--enable-auto-image-base" ,
     @{$spec{lddlflags}}       ,
     @{$spec{libpath}}         ,
     @{$spec{startup}}         ,
index 3f8337d..6cbcc9b 100644 (file)
@@ -1,6 +1,6 @@
 package ExtUtils::CBuilder::Platform::Windows::MSVC;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 
 use warnings;
 use strict;
index 57ceb8a..2ef8b38 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use ExtUtils::CBuilder::Platform::Unix;
 use File::Spec;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 sub need_prelink { 1 }
index 5916515..8500ab9 100644 (file)
@@ -6,7 +6,7 @@ use File::Spec;
 use ExtUtils::CBuilder::Platform::Unix;
 use Config;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 # The Android linker will not recognize symbols from
index 9474bfd..3c8beac 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use File::Spec;
 use ExtUtils::CBuilder::Platform::Unix;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 # TODO: If a specific exe_file name is requested, if the exe created
index 3787f39..e050e32 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 use strict;
 use ExtUtils::CBuilder::Platform::Unix;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 sub compile {
index 98cb235..971cf93 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use ExtUtils::CBuilder::Platform::Unix;
 use File::Spec;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 sub link_executable {
index 8e1377f..58d316b 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 use strict;
 use ExtUtils::CBuilder::Platform::Unix;
 
-our $VERSION = '0.280235'; # VERSION
+our $VERSION = '0.280236'; # VERSION
 our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
 
 sub need_prelink { 1 }
index c5d954b..8c094f8 100644 (file)
@@ -7,7 +7,7 @@ use Carp;
 use strict;
 use warnings;
 
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 XSLoader::load 'IO', $VERSION;
 
 sub import {
@@ -53,7 +53,7 @@ in one go.  The IO modules belonging to the core are:
 
 Some other IO modules don't belong to the perl core but can be loaded
 as well if they have been installed from CPAN.  You can discover which
-ones exist by searching for "^IO::" on L<http://search.cpan.org>.
+ones exist with this query:  L<https://metacpan.org/search?q=IO%3A%3A>.
 
 For more information on any of these modules, please see its respective
 documentation.
index 60174b2..3cfd5f3 100644 (file)
@@ -18,7 +18,7 @@ use File::stat;
 use File::Spec;
 
 our @ISA = qw(Tie::Hash Exporter);
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 our @EXPORT_OK = qw(DIR_UNLINK);
 
index 856fdca..e2accf7 100644 (file)
@@ -135,7 +135,7 @@ require Exporter;
 
 our @ISA = qw(IO::Handle IO::Seekable Exporter);
 
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 our @EXPORT = @IO::Seekable::EXPORT;
 
index 1f2f83b..2010bb8 100644 (file)
@@ -270,7 +270,7 @@ use IO ();  # Load the XS module
 require Exporter;
 our @ISA = qw(Exporter);
 
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 our @EXPORT_OK = qw(
     autoflush
index 73cdf32..7b195ca 100644 (file)
@@ -13,7 +13,7 @@ use strict;
 use Carp;
 use Symbol;
 
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 sub new {
     my $type = shift;
index 77083f4..20f630b 100644 (file)
@@ -12,7 +12,7 @@ use IO::Handle;
 use Exporter ();
 
 our @ISA = qw(Exporter);
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 our @EXPORT = qw( POLLIN
              POLLOUT
index 7c103b5..5d44d7a 100644 (file)
@@ -106,7 +106,7 @@ require Exporter;
 our @EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END);
 our @ISA = qw(Exporter);
 
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 sub seek {
     @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)';
index 2367d95..fe07f3b 100644 (file)
@@ -10,7 +10,7 @@ use     strict;
 use warnings::register;
 require Exporter;
 
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 our @ISA = qw(Exporter); # This is only so we can do version checking
 
index 7f29815..b7cdf06 100644 (file)
@@ -23,7 +23,7 @@ require IO::Socket::UNIX if ($^O ne 'epoc' && $^O ne 'symbian');
 
 our @ISA = qw(IO::Handle);
 
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 our @EXPORT_OK = qw(sockatmark);
 
index d315731..5b76c2e 100644 (file)
@@ -14,7 +14,7 @@ use Exporter;
 use Errno;
 
 our @ISA = qw(IO::Socket);
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1;
 
index 261edc4..a93456c 100644 (file)
@@ -11,7 +11,7 @@ use IO::Socket;
 use Carp;
 
 our @ISA = qw(IO::Socket);
-our $VERSION = "1.45";
+our $VERSION = "1.46";
 
 IO::Socket::UNIX->register_domain( AF_UNIX );
 
index 27f9899..21aaece 100644 (file)
@@ -1,3 +1,9 @@
+5.20210220
+  - Updated for v5.33.7
+
+5.20210123
+  - Updated for v5.32.1
+
 5.20210120
   - Updated for v5.33.6
 
index b0e58ed..b2958e4 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 our ( %released, %version, %families, %upstream, %bug_tracker, %deprecated, %delta );
 
 use version;
-our $VERSION = '5.20210120';
+our $VERSION = '5.20210220';
 
 sub PKG_PATTERN () { q#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z# }
 sub _looks_like_invocant ($) { local $@; !!eval { $_[0]->isa(__PACKAGE__) } }
@@ -373,6 +373,8 @@ sub changes_between {
     5.033004 => '2020-11-20',
     5.033005 => '2020-12-20',
     5.033006 => '2021-01-20',
+    5.032001 => '2021-01-23',
+    5.033007 => '2021-02-20',
   );
 
 for my $version ( sort { $a <=> $b } keys %released ) {
@@ -18300,6 +18302,111 @@ for my $version ( sort { $a <=> $b } keys %released ) {
         removed => {
         }
     },
+    5.032001 => {
+        delta_from => 5.032000,
+        changed => {
+            'B::Op_private'         => '5.032001',
+            'Config'                => '5.032001',
+            'Data::Dumper'          => '2.174_01',
+            'DynaLoader'            => '1.47_01',
+            'ExtUtils::Liblist::Kid'=> '7.44_01',
+            'Module::CoreList'      => '5.20210123',
+            'Module::CoreList::Utils'=> '5.20210123',
+            'Opcode'                => '1.48',
+            'Safe'                  => '2.41_01',
+            'Win32API::File::inc::ExtUtils::Myconst2perl'=> '1',
+        },
+        removed => {
+        }
+    },
+    5.033007 => {
+        delta_from => 5.033006,
+        changed => {
+            'B::Deparse'            => '1.56',
+            'B::Op_private'         => '5.033007',
+            'Config'                => '5.033007',
+            'ExtUtils::CBuilder'    => '0.280236',
+            'ExtUtils::CBuilder::Base'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::Unix'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::VMS'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::Windows'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::Windows::GCC'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::Windows::MSVC'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::aix'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::android'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::cygwin'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::darwin'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::dec_osf'=> '0.280236',
+            'ExtUtils::CBuilder::Platform::os2'=> '0.280236',
+            'ExtUtils::Command'     => '7.60',
+            'ExtUtils::Command::MM' => '7.60',
+            'ExtUtils::Liblist'     => '7.60',
+            'ExtUtils::Liblist::Kid'=> '7.60',
+            'ExtUtils::MM'          => '7.60',
+            'ExtUtils::MM_AIX'      => '7.60',
+            'ExtUtils::MM_Any'      => '7.60',
+            'ExtUtils::MM_BeOS'     => '7.60',
+            'ExtUtils::MM_Cygwin'   => '7.60',
+            'ExtUtils::MM_DOS'      => '7.60',
+            'ExtUtils::MM_Darwin'   => '7.60',
+            'ExtUtils::MM_MacOS'    => '7.60',
+            'ExtUtils::MM_NW5'      => '7.60',
+            'ExtUtils::MM_OS2'      => '7.60',
+            'ExtUtils::MM_OS390'    => '7.60',
+            'ExtUtils::MM_QNX'      => '7.60',
+            'ExtUtils::MM_UWIN'     => '7.60',
+            'ExtUtils::MM_Unix'     => '7.60',
+            'ExtUtils::MM_VMS'      => '7.60',
+            'ExtUtils::MM_VOS'      => '7.60',
+            'ExtUtils::MM_Win32'    => '7.60',
+            'ExtUtils::MM_Win95'    => '7.60',
+            'ExtUtils::MY'          => '7.60',
+            'ExtUtils::MakeMaker'   => '7.60',
+            'ExtUtils::MakeMaker::Config'=> '7.60',
+            'ExtUtils::MakeMaker::Locale'=> '7.60',
+            'ExtUtils::MakeMaker::version'=> '7.60',
+            'ExtUtils::MakeMaker::version::regex'=> '7.60',
+            'ExtUtils::Mkbootstrap' => '7.60',
+            'ExtUtils::Mksymlists'  => '7.60',
+            'ExtUtils::PL2Bat'      => '0.004',
+            'ExtUtils::testlib'     => '7.60',
+            'Fatal'                 => '2.34',
+            'File::Find'            => '1.39',
+            'Hash::Util'            => '0.25',
+            'IO'                    => '1.46',
+            'IO::Dir'               => '1.46',
+            'IO::File'              => '1.46',
+            'IO::Handle'            => '1.46',
+            'IO::Pipe'              => '1.46',
+            'IO::Poll'              => '1.46',
+            'IO::Seekable'          => '1.46',
+            'IO::Select'            => '1.46',
+            'IO::Socket'            => '1.46',
+            'IO::Socket::INET'      => '1.46',
+            'IO::Socket::UNIX'      => '1.46',
+            'JSON::PP'              => '4.06',
+            'JSON::PP::Boolean'     => '4.06',
+            'Module::CoreList'      => '5.20210220',
+            'Module::CoreList::Utils'=> '5.20210220',
+            'Opcode'                => '1.50',
+            'PerlIO::encoding'      => '0.30',
+            'Time::HiRes'           => '1.9767',
+            'autodie'               => '2.34',
+            'autodie::Scope::Guard' => '2.34',
+            'autodie::Scope::GuardStack'=> '2.34',
+            'autodie::Util'         => '2.34',
+            'autodie::exception'    => '2.34',
+            'autodie::exception::system'=> '2.34',
+            'autodie::hints'        => '2.34',
+            'autodie::skip'         => '2.34',
+            'feature'               => '1.63',
+            'mro'                   => '1.25_001',
+            'warnings'              => '1.51',
+        },
+        removed => {
+        }
+    },
 );
 
 sub is_core
@@ -19470,6 +19577,20 @@ sub is_core
         removed => {
         }
     },
+    5.032001 => {
+        delta_from => 5.032,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.033007 => {
+        delta_from => 5.033006,
+        changed => {
+        },
+        removed => {
+        }
+    },
 );
 
 %deprecated = _undelta(\%deprecated);
@@ -20030,10 +20151,10 @@ sub is_core
     'ExtUtils::Manifest'    => 'http://github.com/Perl-Toolchain-Gang/ExtUtils-Manifest/issues',
     'ExtUtils::Mkbootstrap' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
     'ExtUtils::Mksymlists'  => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
-    'ExtUtils::PL2Bat'      => 'http://rt.cpan.org/Public/Dist/Display.html?Name=ExtUtils-PL2Bat',
+    'ExtUtils::PL2Bat'      => 'https://github.com/Perl-Toolchain-Gang/extutils-pl2bat/issues',
     'ExtUtils::Packlist'    => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-Install',
     'ExtUtils::testlib'     => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
-    'Fatal'                 => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
+    'Fatal'                 => 'https://github.com/pjf/autodie/issues',
     'File::Fetch'           => undef,
     'File::GlobMapper'      => 'https://github.com/pmqs/IO-Compress/issues',
     'File::Path'            => undef,
@@ -20312,14 +20433,14 @@ sub is_core
     'Unicode::Collate::Locale'=> undef,
     'Win32'                 => 'https://github.com/perl-libwin32/win32/issues',
     'Win32API::File'        => undef,
-    'autodie'               => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
-    'autodie::Scope::Guard' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
-    'autodie::Scope::GuardStack'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
-    'autodie::Util'         => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
-    'autodie::exception'    => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
-    'autodie::exception::system'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
-    'autodie::hints'        => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
-    'autodie::skip'         => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
+    'autodie'               => 'https://github.com/pjf/autodie/issues',
+    'autodie::Scope::Guard' => 'https://github.com/pjf/autodie/issues',
+    'autodie::Scope::GuardStack'=> 'https://github.com/pjf/autodie/issues',
+    'autodie::Util'         => 'https://github.com/pjf/autodie/issues',
+    'autodie::exception'    => 'https://github.com/pjf/autodie/issues',
+    'autodie::exception::system'=> 'https://github.com/pjf/autodie/issues',
+    'autodie::hints'        => 'https://github.com/pjf/autodie/issues',
+    'autodie::skip'         => 'https://github.com/pjf/autodie/issues',
     'bigint'                => undef,
     'bignum'                => undef,
     'bigrat'                => undef,
index 8c8752b..7cc2778 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use Module::CoreList;
 
-our $VERSION = '5.20210120';
+our $VERSION = '5.20210220';
 our %utilities;
 
 sub utilities {
@@ -1671,6 +1671,20 @@ my %delta = (
         removed => {
         }
     },
+    5.032001 => {
+        delta_from => 5.032000,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.033007 => {
+        delta_from => 5.033006,
+        changed => {
+        },
+        removed => {
+        }
+    },
 );
 
 %utilities = Module::CoreList::_undelta(\%delta);
index a7600b2..9377c34 100644 (file)
@@ -50,7 +50,7 @@ our @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval
                  stat lstat utime
                 );
 
-our $VERSION = '1.9766';
+our $VERSION = '1.9767';
 our $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
index ec43295..1b97962 100644 (file)
@@ -134,8 +134,12 @@ typedef struct {
     unsigned __int64 reset_time;
 } my_cxt_t;
 
-/* Visual C++ 2013 and older don't have the timespec structure */
-#  if defined(_MSC_VER) && _MSC_VER < 1900
+/* Visual C++ 2013 and older don't have the timespec structure.
+ * Neither do mingw.org compilers with MinGW runtimes older than 3.22. */
+#  if((defined(_MSC_VER) && _MSC_VER < 1900) || \
+      (defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) && \
+      defined(__MINGW32_MAJOR_VERSION) && (__MINGW32_MAJOR_VERSION < 3 || \
+      (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION < 22))))
 struct timespec {
     time_t tv_sec;
     long   tv_nsec;
diff --git a/dump.c b/dump.c
index 21dd53a..31c8792 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -827,7 +827,7 @@ S_do_pmop_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const PMOP *pm)
     else
         S_opdump_indent(aTHX_ (OP*)pm, level, bar, file, "PMf_PRE (RUNTIME)\n");
 
-    if (pm->op_pmflags || (PM_GETRE(pm) && RX_CHECK_SUBSTR(PM_GETRE(pm)))) {
+    if (pm->op_pmflags || PM_GETRE(pm)) {
         SV * const tmpsv = pm_description(pm);
         S_opdump_indent(aTHX_ (OP*)pm, level, bar, file, "PMFLAGS = (%s)\n",
                         SvCUR(tmpsv) ? SvPVX_const(tmpsv) + 1 : "");
@@ -910,8 +910,14 @@ S_pm_description(pTHX_ const PMOP *pm)
             if (RX_EXTFLAGS(regex) & RXf_CHECK_ALL)
                 sv_catpvs(desc, ",ALL");
         }
+        if (RX_EXTFLAGS(regex) & RXf_START_ONLY)
+            sv_catpvs(desc, ",START_ONLY");
         if (RX_EXTFLAGS(regex) & RXf_SKIPWHITE)
             sv_catpvs(desc, ",SKIPWHITE");
+        if (RX_EXTFLAGS(regex) & RXf_WHITE)
+            sv_catpvs(desc, ",WHITE");
+        if (RX_EXTFLAGS(regex) & RXf_NULL)
+            sv_catpvs(desc, ",NULL");
     }
 
     append_flags(desc, pmflags, pmflags_flags_names);
@@ -3067,7 +3073,7 @@ S_deb_curcv(pTHX_ I32 ix)
 
         if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT)
             return cx->blk_sub.cv;
-        else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
+        else if (CxTYPE(cx) == CXt_EVAL && !CxEVALBLOCK(cx))
             return cx->blk_eval.cv;
         else if (ix == 0 && si->si_type == PERLSI_MAIN)
             return PL_main_cv;
index c496e41..eb7b476 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -1443,6 +1443,7 @@ ApdR      |OP*    |newSLICEOP     |I32 flags|NULLOK OP* subscript|NULLOK OP* listop
 ApdR   |OP*    |newSTATEOP     |I32 flags|NULLOK char* label|NULLOK OP* o
 AdpbM  |CV*    |newSUB         |I32 floor|NULLOK OP* o|NULLOK OP* proto \
                                |NULLOK OP* block
+ApdRx  |OP*    |newTRYCATCHOP  |I32 flags|NN OP* tryblock|NN OP *catchvar|NN OP* catchblock
 pd     |CV *   |newXS_len_flags|NULLOK const char *name|STRLEN len \
                                |NN XSUBADDR_t subaddr\
                                |NULLOK const char *const filename \
@@ -2439,8 +2440,8 @@ ES        |void   |debug_start_match|NN const REGEXP *prog|const bool do_utf8\
 EFp    |int    |re_exec_indentf|NN const char *fmt|U32 depth|...
 #  endif
 #endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
-EXRp   |bool   |isFOO_lc       |const U8 classnum|const U8 character
+#if defined(PERL_IN_REGEXEC_C)
+ESR    |bool   |isFOO_lc       |const U8 classnum|const U8 character
 #endif
 
 Ap     |void   |taint_env
@@ -3646,6 +3647,7 @@ Cixp      |void   |cx_pushformat   |NN PERL_CONTEXT *cx|NN CV *cv \
 Cixp   |void   |cx_popformat    |NN PERL_CONTEXT *cx
 Cixp   |void   |cx_pusheval     |NN PERL_CONTEXT *cx \
                                 |NULLOK OP *retop|NULLOK SV *namesv
+Cixp   |void   |cx_pushtry      |NN PERL_CONTEXT *cx|NULLOK OP *retop
 Cixp   |void   |cx_popeval      |NN PERL_CONTEXT *cx
 Cixp   |void   |cx_pushloop_plain|NN PERL_CONTEXT *cx
 Cixp   |void   |cx_pushloop_for |NN PERL_CONTEXT *cx \
diff --git a/embed.h b/embed.h
index 3be6c42..10214db 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define newSVrv(a,b)           Perl_newSVrv(aTHX_ a,b)
 #define newSVsv_flags(a,b)     Perl_newSVsv_flags(aTHX_ a,b)
 #define newSVuv(a)             Perl_newSVuv(aTHX_ a)
+#define newTRYCATCHOP(a,b,c,d) Perl_newTRYCATCHOP(aTHX_ a,b,c,d)
 #define newUNOP(a,b,c)         Perl_newUNOP(aTHX_ a,b,c)
 #define newUNOP_AUX(a,b,c,d)   Perl_newUNOP_AUX(aTHX_ a,b,c,d)
 #define newWHENOP(a,b)         Perl_newWHENOP(aTHX_ a,b)
 #define cx_pushloop_for(a,b,c) Perl_cx_pushloop_for(aTHX_ a,b,c)
 #define cx_pushloop_plain(a)   Perl_cx_pushloop_plain(aTHX_ a)
 #define cx_pushsub(a,b,c,d)    Perl_cx_pushsub(aTHX_ a,b,c,d)
+#define cx_pushtry(a,b)                Perl_cx_pushtry(aTHX_ a,b)
 #define cx_pushwhen(a)         Perl_cx_pushwhen(aTHX_ a)
 #define cx_topblock(a)         Perl_cx_topblock(aTHX_ a)
 #define gimme_V()              Perl_gimme_V(aTHX)
 #define find_span_end          S_find_span_end
 #define find_span_end_mask     S_find_span_end_mask
 #define foldEQ_latin1_s2_folded        S_foldEQ_latin1_s2_folded
+#define isFOO_lc(a,b)          S_isFOO_lc(aTHX_ a,b)
 #define isFOO_utf8_lc(a,b,c)   S_isFOO_utf8_lc(aTHX_ a,b,c)
 #define isGCB(a,b,c,d,e)       S_isGCB(aTHX_ a,b,c,d,e)
 #define isLB(a,b,c,d,e,f)      S_isLB(aTHX_ a,b,c,d,e,f)
 #define to_byte_substr(a)      S_to_byte_substr(aTHX_ a)
 #define to_utf8_substr(a)      S_to_utf8_substr(aTHX_ a)
 #  endif
-#  if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
-#define isFOO_lc(a,b)          Perl_isFOO_lc(aTHX_ a,b)
-#  endif
 #endif
 #ifdef PERL_CORE
 #define PerlLIO_dup2_cloexec(a,b)      Perl_PerlLIO_dup2_cloexec(aTHX_ a,b)
 #define ck_svconst(a)          Perl_ck_svconst(aTHX_ a)
 #define ck_tell(a)             Perl_ck_tell(aTHX_ a)
 #define ck_trunc(a)            Perl_ck_trunc(aTHX_ a)
+#define ck_trycatch(a)         Perl_ck_trycatch(aTHX_ a)
 #define closest_cop(a,b,c,d)   Perl_closest_cop(aTHX_ a,b,c,d)
 #define cmpchain_extend(a,b,c) Perl_cmpchain_extend(aTHX_ a,b,c)
 #define cmpchain_finish(a)     Perl_cmpchain_finish(aTHX_ a)
index 01dbc8b..5f5f146 100644 (file)
@@ -3,7 +3,7 @@ use 5.006;
 use strict;
 use warnings;
 use warnings::register;
-our $VERSION = '1.38';
+our $VERSION = '1.39';
 require Exporter;
 require Cwd;
 
@@ -839,6 +839,9 @@ where C<find()> works from the top of the tree down.
 
 =back
 
+Despite the name of the C<finddepth()> function, both C<find()> and
+C<finddepth()> perform a depth-first search of the directory hierarchy.
+
 =head2 %options
 
 The first argument to C<find()> is either a code reference to your
@@ -848,7 +851,7 @@ code reference is described in L</The wanted function> below.
 
 Here are the possible keys for the hash:
 
-=over 3
+=over 4
 
 =item C<wanted>
 
@@ -892,7 +895,7 @@ This might be expensive both in space and time for a large
 directory tree. See L</follow_fast> and L</follow_skip> below.
 If either I<follow> or I<follow_fast> is in effect:
 
-=over 6
+=over 4
 
 =item *
 
@@ -1079,9 +1082,9 @@ situations. You can disable these warnings by putting the statement
 in the appropriate scope. See L<warnings> for more info about lexical
 warnings.
 
-=head1 CAVEAT
+=head1 BUGS AND CAVEATS
 
-=over 2
+=over 4
 
 =item $dont_use_nlink
 
@@ -1107,12 +1110,6 @@ in an unknown directory.
 
 =back
 
-=head1 BUGS AND CAVEATS
-
-Despite the name of the C<finddepth()> function, both C<find()> and
-C<finddepth()> perform a depth-first search of the directory
-hierarchy.
-
 =head1 HISTORY
 
 File::Find used to produce incorrect results if called recursively.
index beb3f7e..7d405a2 100644 (file)
@@ -1,5 +1,14 @@
 Revision history for Perl extension Hash::Util.
 
+0.25, 0.24
+    Build fixes.
+
+0.23
+    Doc Fixes.
+
+0.22, 0.21
+    Build Fixes.
+
 0.20
     Add bucket_ratio, num_buckets, used_buckets as a back-compat
     shin for 5.25 where we remove the bucket data from scalar(%hash)
index fdadc2b..4e49a09 100644 (file)
@@ -95,8 +95,8 @@ hash_value(string,...)
         U8 *seedbuf= (U8 *)SvPV(ST(1),seedlen);
         if ( seedlen < PERL_HASH_SEED_BYTES ) {
             sv_dump(ST(1));
-            Perl_croak(aTHX_ "seed len must be at least %d long only got %"
-                             UVuf " bytes", PERL_HASH_SEED_BYTES, (UV)seedlen);
+            Perl_croak(aTHX_ "seed len must be at least %" UVuf " long only got %"
+                             UVuf " bytes", (UV)PERL_HASH_SEED_BYTES, (UV)seedlen);
         }
 
         PERL_HASH_WITH_SEED(seedbuf, uv, pv, len);
index a778db0..5a3e626 100644 (file)
@@ -42,7 +42,7 @@ our @EXPORT_OK  = qw(
 BEGIN {
     # make sure all our XS routines are available early so their prototypes
     # are correctly applied in the following code.
-    our $VERSION = '0.24';
+    our $VERSION = '0.25';
     require XSLoader;
     XSLoader::load();
 }
index c52a8e4..33d9967 100644 (file)
@@ -46,7 +46,7 @@ BEGIN {
                      lock_hash_recurse unlock_hash_recurse
                      lock_hashref_recurse unlock_hashref_recurse
                     );
-    plan tests => 244 + @Exported_Funcs;
+    plan tests => 250 + @Exported_Funcs;
     use_ok 'Hash::Util', @Exported_Funcs;
 }
 foreach my $func (@Exported_Funcs) {
@@ -597,7 +597,27 @@ ok(defined($hash_seed) && $hash_seed ne '', "hash_seed $hash_seed");
     my $h2= hash_value("bar");
     is( $h1, hash_value("foo") );
     is( $h2, hash_value("bar") );
+
+    my $seed= hash_seed();
+    my $h1s= hash_value("foo",$seed);
+    my $h2s= hash_value("bar",$seed);
+
+    is( $h1s, hash_value("foo",$seed) );
+    is( $h2s, hash_value("bar",$seed) );
+
+    $seed= join "", map { chr $_ } 1..length($seed);
+
+    my $h1s2= hash_value("foo",$seed);
+    my $h2s2= hash_value("bar",$seed);
+
+    is( $h1s2, hash_value("foo",$seed) );
+    is( $h2s2, hash_value("bar",$seed) );
+
+    isnt($h1s,$h1s2);
+    isnt($h1s,$h1s2);
+
 }
+
 {
     my @info1= bucket_info({});
     my @info2= bucket_info({1..10});
index fd3fbee..0501fb8 100644 (file)
@@ -6,7 +6,7 @@ use strict;
 
 our($VERSION, @ISA, @EXPORT_OK);
 
-$VERSION = "1.49";
+$VERSION = "1.50";
 
 use Carp;
 use Exporter ();
@@ -435,6 +435,7 @@ These are a hotchpotch of opcodes still waiting to be considered
     localtime gmtime
 
     entertry leavetry -- can be used to 'hide' fatal errors
+    entertrycatch poptry catch leavetrycatch -- similar
 
     entergiven leavegiven
     enterwhen leavewhen
index 6265a45..06b65ce 100644 (file)
@@ -972,7 +972,7 @@ the underlying locale is C or POSIX.  This is because it otherwise
 changes the locale, which globally affects all threads simultaneously.
 Windows platforms starting with Visual Studio 2005 are mostly
 thread-safe, but use of this function in those prior to Visual Studio
-2015 can interfere with a thread that has called
+2015 can have a race with a thread that has called
 L<perlapi/switch_to_global_locale>.
 
 Here is how to query the database for the B<de> (Deutsch or German) locale.
index 84d477f..64941e4 100644 (file)
@@ -74,7 +74,7 @@ SKIP: {
 }
 
 SKIP: {
-    skip("mbtowc() not present", 5) unless $Config{d_mbtowc};
+    skip("mbtowc() not present", 5) unless $Config{d_mbtowc} || $Config{d_mbrtowc};
 
     my $wide;
 
@@ -119,7 +119,7 @@ SKIP: {
 }
 
 SKIP: {
-    skip("mbtowc or wctomb() not present", 2) unless $Config{d_mbtowc} && $Config{d_wctomb};
+    skip("wctomb() not present", 2) unless $Config{d_wctomb} || $Config{d_wcrtomb};
 
     fresh_perl_is('use POSIX; &POSIX::wctomb(undef,0); my $string; my $len = &POSIX::wctomb($string, ord "A"); print "$len:$string"',
       "1:A", {}, 'wctomb() works on ASCII input');
index daf4457..bd5553f 100644 (file)
@@ -1,7 +1,7 @@
 package PerlIO::encoding;
 
 use strict;
-our $VERSION = '0.28';
+our $VERSION = '0.30';
 our $DEBUG = 0;
 $DEBUG and warn __PACKAGE__, " called by ", join(", ", caller), "\n";
 
@@ -13,8 +13,7 @@ $DEBUG and warn __PACKAGE__, " called by ", join(", ", caller), "\n";
 require XSLoader;
 XSLoader::load();
 
-our $fallback =
-    Encode::PERLQQ()|Encode::WARN_ON_ERR()|Encode::ONLY_PRAGMA_WARNINGS()|Encode::STOP_AT_PARTIAL();
+our $fallback = Encode::PERLQQ()|Encode::WARN_ON_ERR()|Encode::ONLY_PRAGMA_WARNINGS();
 
 1;
 __END__
index 9d98d87..380721e 100644 (file)
@@ -5,6 +5,12 @@
 #define U8 U8
 
 #define OUR_DEFAULT_FB "Encode::PERLQQ"
+#define OUR_STOP_AT_PARTIAL "Encode::STOP_AT_PARTIAL"
+#define OUR_LEAVE_SRC "Encode::LEAVE_SRC"
+
+/* This will be set during BOOT */
+static unsigned int encode_stop_at_partial = 0;
+static unsigned int encode_leave_src = 0;
 
 #if defined(USE_PERLIO)
 
@@ -164,6 +170,9 @@ PerlIOEncode_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg, PerlIO_funcs *
     }
 
     e->chk = newSVsv(get_sv("PerlIO::encoding::fallback", 0));
+    if (SvROK(e->chk))
+        Perl_croak(aTHX_ "PerlIO::encoding::fallback must be an integer");
+    SvUV_set(e->chk, ((SvUV(e->chk) & ~encode_leave_src) | encode_stop_at_partial));
     e->inEncodeCall = 0;
 
     FREETMPS;
@@ -638,30 +647,36 @@ PROTOTYPES: ENABLE
 
 BOOT:
 {
-    SV *chk = get_sv("PerlIO::encoding::fallback", GV_ADD|GV_ADDMULTI);
     /*
      * we now "use Encode ()" here instead of
      * PerlIO/encoding.pm.  This avoids SEGV when ":encoding()"
      * is invoked without prior "use Encode". -- dankogai
      */
     PUSHSTACKi(PERLSI_MAGIC);
-    if (!get_cvs(OUR_DEFAULT_FB, 0)) {
-#if 0
-       /* This would just be an irritant now loading works */
-       Perl_warner(aTHX_ packWARN(WARN_IO), ":encoding without 'use Encode'");
-#endif
+    if (!get_cvs(OUR_STOP_AT_PARTIAL, 0)) {
        /* The SV is magically freed by load_module */
        load_module(PERL_LOADMOD_NOIMPORT, newSVpvs("Encode"), Nullsv, Nullsv);
        assert(sp == PL_stack_sp);
     }
+
+    PUSHMARK(sp);
+    PUTBACK;
+    if (call_pv(OUR_STOP_AT_PARTIAL, G_SCALAR) != 1) {
+           /* should never happen */
+           Perl_die(aTHX_ "%s did not return a value", OUR_STOP_AT_PARTIAL);
+    }
+    SPAGAIN;
+    encode_stop_at_partial = POPu;
+
     PUSHMARK(sp);
     PUTBACK;
-    if (call_pv(OUR_DEFAULT_FB, G_SCALAR) != 1) {
+    if (call_pv(OUR_LEAVE_SRC, G_SCALAR) != 1) {
            /* should never happen */
-           Perl_die(aTHX_ "%s did not return a value",OUR_DEFAULT_FB);
+           Perl_die(aTHX_ "%s did not return a value", OUR_LEAVE_SRC);
     }
     SPAGAIN;
-    sv_setsv(chk, POPs);
+    encode_leave_src = POPu;
+
     PUTBACK;
 #ifdef PERLIO_LAYERS
     PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_encode));
index ac2d55d..1889bd6 100644 (file)
@@ -12,7 +12,7 @@ use warnings;
 
 # mro.pm versions < 1.00 reserved for MRO::Compat
 #  for partial back-compat to 5.[68].x
-our $VERSION = '1.25';
+our $VERSION = '1.25_001';
 
 require XSLoader;
 XSLoader::load('mro');
index 8ce5844..180378a 100644 (file)
@@ -63,8 +63,9 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level)
 
     /* For a better idea how the rest of this works, see the much clearer
        pure perl version in Algorithm::C3 0.01:
-       http://search.cpan.org/src/STEVAN/Algorithm-C3-0.01/lib/Algorithm/C3.pm
-       (later versions go about it differently than this code for speed reasons)
+       https://fastapi.metacpan.org/source/STEVAN/Algorithm-C3-0.01/lib/Algorithm/C3.pm
+       (later versions of this module go about it differently than this code
+       for speed reasons)
     */
 
     if(isa && AvFILLp(isa) >= 0) {
index 173719f..501bc3a 100644 (file)
--- a/feature.h
+++ b/feature.h
@@ -27,8 +27,9 @@
 #define FEATURE_SIGNATURES_BIT           0x1000
 #define FEATURE_STATE_BIT                0x2000
 #define FEATURE_SWITCH_BIT               0x4000
-#define FEATURE_UNIEVAL_BIT              0x8000
-#define FEATURE_UNICODE_BIT              0x10000
+#define FEATURE_TRY_BIT                  0x8000
+#define FEATURE_UNIEVAL_BIT              0x10000
+#define FEATURE_UNICODE_BIT              0x20000
 
 #define FEATURE_BUNDLE_DEFAULT 0
 #define FEATURE_BUNDLE_510     1
         FEATURE_IS_ENABLED_MASK(FEATURE_SAY_BIT)) \
     )
 
+#define FEATURE_TRY_IS_ENABLED \
+    ( \
+       CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+        FEATURE_IS_ENABLED_MASK(FEATURE_TRY_BIT) \
+    )
+
 #define FEATURE_STATE_IS_ENABLED \
     ( \
        (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
@@ -337,6 +344,14 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
             }
             return;
 
+        case 't':
+            if (keylen == sizeof("feature_try")-1
+                 && memcmp(subf+1, "ry", keylen - sizeof("feature_")) == 0) {
+                mask = FEATURE_TRY_BIT;
+                break;
+            }
+            return;
+
         case 'u':
             if (keylen == sizeof("feature_unicode")-1
                  && memcmp(subf+1, "nicode", keylen - sizeof("feature_")) == 0) {
diff --git a/gv.c b/gv.c
index 92bada5..0795b79 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -544,7 +544,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
      /* no support for \&CORE::infix;
         no support for funcs that do not parse like funcs */
     case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD:
-    case KEY_BEGIN   : case KEY_CHECK  : case KEY_cmp:
+    case KEY_BEGIN   : case KEY_CHECK  : case KEY_catch : case KEY_cmp:
     case KEY_default : case KEY_DESTROY:
     case KEY_do      : case KEY_dump   : case KEY_else  : case KEY_elsif  :
     case KEY_END     : case KEY_eq     : case KEY_eval  :
@@ -559,7 +559,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
     case KEY_qx   : case KEY_redo : case KEY_require: case KEY_return:
     case KEY_s    : case KEY_say  : case KEY_sort   :
     case KEY_state: case KEY_sub  :
-    case KEY_tr   : case KEY_UNITCHECK: case KEY_unless:
+    case KEY_tr   : case KEY_try  : case KEY_UNITCHECK: case KEY_unless:
     case KEY_until: case KEY_use  : case KEY_when     : case KEY_while :
     case KEY_x    : case KEY_xor  : case KEY_y        :
         return NULL;
diff --git a/handy.h b/handy.h
index 674bdf7..ff47c9b 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -2781,6 +2781,7 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe
 #  define PERL_POISON_EXPR(x)
 #endif
 
+/* Shallow copy */
 #define StructCopy(s,d,t) (*((t*)(d)) = *((t*)(s)))
 
 /*
index dc3e340..b5ad550 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.33.6
+# mkdir -p /opt/perl-catamount/lib/perl5/5.33.7
 # 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.33.6
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.33.7
 # 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
diff --git a/hv.c b/hv.c
index 82657cb..f503dae 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -38,7 +38,13 @@ holds the key and hash value.
  * NOTE if you change this formula so we split earlier than previously
  * you MUST change the logic in hv_ksplit()
  */
-#define DO_HSPLIT(xhv) ( ((xhv)->xhv_keys + ((xhv)->xhv_keys >> 1))  > (xhv)->xhv_max )
+
+/*  MAX_BUCKET_MAX is the maximum max bucket index, at which point we stop growing the
+ *  number of buckets,
+ */
+#define MAX_BUCKET_MAX ((1<<26)-1)
+#define DO_HSPLIT(xhv) ( ( ((xhv)->xhv_keys + ((xhv)->xhv_keys >> 1)) > (xhv)->xhv_max ) && \
+                           ((xhv)->xhv_max < MAX_BUCKET_MAX) )
 
 static const char S_strtab_error[]
     = "Cannot modify shared string table in hv_%s";
@@ -1424,6 +1430,8 @@ S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize)
     );
 
     PERL_ARGS_ASSERT_HSPLIT;
+    if (newsize > MAX_BUCKET_MAX+1)
+            return;
 
     PL_nomemok = TRUE;
     Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
index 919d850..7d8b01b 100644 (file)
--- a/hv_func.h
+++ b/hv_func.h
 #if !( 0 \
         || defined(PERL_HASH_FUNC_SIPHASH) \
         || defined(PERL_HASH_FUNC_SIPHASH13) \
-        || defined(PERL_HASH_FUNC_STADTX) \
         || defined(PERL_HASH_FUNC_ZAPHOD32) \
     )
 #   ifdef CAN64BITHASH
-#       define PERL_HASH_FUNC_STADTX
+#       define PERL_HASH_FUNC_SIPHASH13
 #   else
 #       define PERL_HASH_FUNC_ZAPHOD32
 #   endif
 
 #if defined(PERL_HASH_FUNC_SIPHASH)
 # define __PERL_HASH_FUNC "SIPHASH_2_4"
-# define __PERL_HASH_SEED_BYTES 16
-# define __PERL_HASH_STATE_BYTES 32
+# define __PERL_HASH_WORD_TYPE U64
+# define __PERL_HASH_WORD_SIZE sizeof(__PERL_HASH_WORD_TYPE)
+# define __PERL_HASH_SEED_BYTES (__PERL_HASH_WORD_SIZE * 2)
+# define __PERL_HASH_STATE_BYTES (__PERL_HASH_WORD_SIZE * 4)
 # define __PERL_HASH_SEED_STATE(seed,state) S_perl_siphash_seed_state(seed,state)
 # define __PERL_HASH_WITH_STATE(state,str,len) S_perl_hash_siphash_2_4_with_state((state),(U8*)(str),(len))
 #elif defined(PERL_HASH_FUNC_SIPHASH13)
 # define __PERL_HASH_FUNC "SIPHASH_1_3"
-# define __PERL_HASH_SEED_BYTES 16
-# define __PERL_HASH_STATE_BYTES 32
+# define __PERL_HASH_WORD_TYPE U64
+# define __PERL_HASH_WORD_SIZE sizeof(__PERL_HASH_WORD_TYPE)
+# define __PERL_HASH_SEED_BYTES (__PERL_HASH_WORD_SIZE * 2)
+# define __PERL_HASH_STATE_BYTES (__PERL_HASH_WORD_SIZE * 4)
 # define __PERL_HASH_SEED_STATE(seed,state) S_perl_siphash_seed_state(seed,state)
 # define __PERL_HASH_WITH_STATE(state,str,len) S_perl_hash_siphash_1_3_with_state((state),(U8*)(str),(len))
-#elif defined(PERL_HASH_FUNC_STADTX)
-# define __PERL_HASH_FUNC "STADTX"
-# define __PERL_HASH_SEED_BYTES 16
-# define __PERL_HASH_STATE_BYTES 32
-# define __PERL_HASH_SEED_STATE(seed,state) stadtx_seed_state(seed,state)
-# define __PERL_HASH_WITH_STATE(state,str,len) (U32)stadtx_hash_with_state((state),(U8*)(str),(len))
-# include "stadtx_hash.h"
 #elif defined(PERL_HASH_FUNC_ZAPHOD32)
 # define __PERL_HASH_FUNC "ZAPHOD32"
-# define __PERL_HASH_SEED_BYTES 12
-# define __PERL_HASH_STATE_BYTES 12
+# define __PERL_HASH_WORD_TYPE U32
+# define __PERL_HASH_WORD_SIZE sizeof(__PERL_HASH_WORD_TYPE)
+# define __PERL_HASH_SEED_BYTES (__PERL_HASH_WORD_SIZE * 3)
+# define __PERL_HASH_STATE_BYTES (__PERL_HASH_WORD_SIZE * 3)
 # define __PERL_HASH_SEED_STATE(seed,state) zaphod32_seed_state(seed,state)
 # define __PERL_HASH_WITH_STATE(state,str,len) (U32)zaphod32_hash_with_state((state),(U8*)(str),(len))
 # include "zaphod32_hash.h"
 */
 #include "perl_siphash.h"
 
+#define __PERL_HASH_SEED_roundup(x, y)   ( ( ( (x) + ( (y) - 1 ) ) / (y) ) * (y) )
+#define _PERL_HASH_SEED_roundup(x) __PERL_HASH_SEED_roundup(x,__PERL_HASH_WORD_SIZE)
+
+#define PL_hash_seed ((U8 *)PL_hash_seed_w)
+#define PL_hash_state ((U8 *)PL_hash_state_w)
+
 #if PERL_HASH_USE_SBOX32_ALSO != 1
 # define _PERL_HASH_FUNC                        __PERL_HASH_FUNC
 # define _PERL_HASH_SEED_BYTES                  __PERL_HASH_SEED_BYTES
@@ -87,8 +91,8 @@
 #else
 
 #define _PERL_HASH_FUNC         "SBOX32_WITH_" __PERL_HASH_FUNC
-
-#define _PERL_HASH_SEED_BYTES   ( __PERL_HASH_SEED_BYTES + (int)( 3 * sizeof(U32) ) )
+/* note the 3 in the below code comes from the fact the seed to initialize the SBOX is 96 bits */
+#define _PERL_HASH_SEED_BYTES   ( __PERL_HASH_SEED_BYTES + (int)( 3 * sizeof(U32)) )
 
 #define _PERL_HASH_STATE_BYTES  \
     ( __PERL_HASH_STATE_BYTES + ( ( 1 + ( 256 * SBOX32_MAX_LEN ) ) * sizeof(U32) ) )
 
 #endif
 
-PERL_STATIC_INLINE
-U32 S_perl_hash_with_seed(const U8 * const seed, const U8 * const str, const STRLEN len)
-{
-    U8 state[_PERL_HASH_STATE_BYTES];
-    _PERL_HASH_SEED_STATE(seed,state);
-    return _PERL_HASH_WITH_STATE(state,str,len);
-}
-
 #define PERL_HASH_WITH_SEED(seed,hash,str,len) \
     (hash) = S_perl_hash_with_seed((const U8 *) seed, (const U8 *) str,len)
 #define PERL_HASH_WITH_STATE(state,hash,str,len) \
     (hash) = _PERL_HASH_WITH_STATE((state),(U8*)(str),(len))
+
 #define PERL_HASH_SEED_STATE(seed,state) _PERL_HASH_SEED_STATE(seed,state)
-#define PERL_HASH_SEED_BYTES _PERL_HASH_SEED_BYTES
-#define PERL_HASH_STATE_BYTES _PERL_HASH_STATE_BYTES
+#define PERL_HASH_SEED_BYTES _PERL_HASH_SEED_roundup(_PERL_HASH_SEED_BYTES)
+#define PERL_HASH_STATE_BYTES _PERL_HASH_SEED_roundup(_PERL_HASH_STATE_BYTES)
 #define PERL_HASH_FUNC        _PERL_HASH_FUNC
 
+#define PERL_HASH_SEED_WORDS (PERL_HASH_SEED_BYTES/__PERL_HASH_WORD_SIZE)
+#define PERL_HASH_STATE_WORDS (PERL_HASH_STATE_BYTES/__PERL_HASH_WORD_SIZE)
+
 #ifdef PERL_USE_SINGLE_CHAR_HASH_CACHE
 #define PERL_HASH(state,str,len) \
     (hash) = ((len) < 2 ? ( (len) == 0 ? PL_hash_chars[256] : PL_hash_chars[(U8)(str)[0]] ) \
@@ -160,6 +160,13 @@ U32 S_perl_hash_with_seed(const U8 * const seed, const U8 * const str, const STR
 #define PERL_HASH_INTERNAL(hash,str,len) PERL_HASH(hash,str,len)
 #endif
 
+PERL_STATIC_INLINE U32
+S_perl_hash_with_seed(const U8 * seed, const U8 *str, STRLEN len) {
+    __PERL_HASH_WORD_TYPE state[PERL_HASH_STATE_WORDS];
+    _PERL_HASH_SEED_STATE(seed,(U8*)state);
+    return _PERL_HASH_WITH_STATE((U8*)state,str,len);
+}
+
 #endif /*compile once*/
 
 /*
index 777f9f6..bbf27da 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -2313,12 +2313,8 @@ Perl_cx_popformat(pTHX_ PERL_CONTEXT *cx)
 
 
 PERL_STATIC_INLINE void
-Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
+Perl_push_evalortry_common(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
 {
-    PERL_ARGS_ASSERT_CX_PUSHEVAL;
-
-    cx->blk_eval.old_cxsubix   = PL_curstackinfo->si_cxsubix;
-    PL_curstackinfo->si_cxsubix= cx - PL_curstackinfo->si_cxstack;
     cx->blk_eval.retop         = retop;
     cx->blk_eval.old_namesv    = namesv;
     cx->blk_eval.old_eval_root = PL_eval_root;
@@ -2331,6 +2327,29 @@ Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
     cx->blk_u16 = (PL_in_eval & 0x3F) | ((U16)PL_op->op_type << 7);
 }
 
+PERL_STATIC_INLINE void
+Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
+{
+    PERL_ARGS_ASSERT_CX_PUSHEVAL;
+
+    Perl_push_evalortry_common(aTHX_ cx, retop, namesv);
+
+    cx->blk_eval.old_cxsubix    = PL_curstackinfo->si_cxsubix;
+    PL_curstackinfo->si_cxsubix = cx - PL_curstackinfo->si_cxstack;
+}
+
+PERL_STATIC_INLINE void
+Perl_cx_pushtry(pTHX_ PERL_CONTEXT *cx, OP *retop)
+{
+    PERL_ARGS_ASSERT_CX_PUSHTRY;
+
+    Perl_push_evalortry_common(aTHX_ cx, retop, NULL);
+
+    /* Don't actually change it, just store the current value so it's restored
+     * by the common popeval */
+    cx->blk_eval.old_cxsubix = PL_curstackinfo->si_cxsubix;
+}
+
 
 PERL_STATIC_INLINE void
 Perl_cx_popeval(pTHX_ PERL_CONTEXT *cx)
index eaa0a9d..5ef7f23 100644 (file)
@@ -1377,7 +1377,7 @@ struct IPerlSockInfo
         (*PL_Sock->pClosesocket)(PL_Sock, s)
 #endif
 
-#else  /* PERL_IMPLICIT_SYS */
+#else  /* ! PERL_IMPLICIT_SYS below */
 
 #define PerlSock_htonl(x)              htonl(x)
 #define PerlSock_htons(x)              htons(x)
index b2dd655..624debc 100644 (file)
@@ -203,7 +203,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
           goto unknown;
       }
 
-    case 3: /* 29 tokens of length 3 */
+    case 3: /* 30 tokens of length 3 */
       switch (name[0])
       {
         case 'E':
@@ -463,13 +463,27 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
           }
 
         case 't':
-          if (name[1] == 'i' &&
-              name[2] == 'e')
-          {                                       /* tie              */
-            return -KEY_tie;
-          }
+          switch (name[1])
+          {
+            case 'i':
+              if (name[2] == 'e')
+              {                                   /* tie              */
+                return -KEY_tie;
+              }
 
-          goto unknown;
+              goto unknown;
+
+            case 'r':
+              if (name[2] == 'y')
+              {                                   /* try              */
+                return (all_keywords || FEATURE_TRY_IS_ENABLED ? KEY_try : 0);
+              }
+
+              goto unknown;
+
+            default:
+              goto unknown;
+          }
 
         case 'u':
           if (name[1] == 's' &&
@@ -964,7 +978,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
           goto unknown;
       }
 
-    case 5: /* 39 tokens of length 5 */
+    case 5: /* 40 tokens of length 5 */
       switch (name[0])
       {
         case 'B':
@@ -1046,6 +1060,16 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
         case 'c':
           switch (name[1])
           {
+            case 'a':
+              if (name[2] == 't' &&
+                  name[3] == 'c' &&
+                  name[4] == 'h')
+              {                                   /* catch            */
+                return (all_keywords || FEATURE_TRY_IS_ENABLED ? KEY_catch : 0);
+              }
+
+              goto unknown;
+
             case 'h':
               switch (name[2])
               {
@@ -3451,5 +3475,5 @@ unknown:
 }
 
 /* Generated from:
- * dd384f0c948716414a93d758d89a38e3c8116acfdc48eb7e34fa6737887097d5 regen/keywords.pl
+ * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl
  * ex: set ro: */
index 50dc717..8269490 100644 (file)
 #define KEY_bless              21
 #define KEY_break              22
 #define KEY_caller             23
-#define KEY_chdir              24
-#define KEY_chmod              25
-#define KEY_chomp              26
-#define KEY_chop               27
-#define KEY_chown              28
-#define KEY_chr                        29
-#define KEY_chroot             30
-#define KEY_close              31
-#define KEY_closedir           32
-#define KEY_cmp                        33
-#define KEY_connect            34
-#define KEY_continue           35
-#define KEY_cos                        36
-#define KEY_crypt              37
-#define KEY_dbmclose           38
-#define KEY_dbmopen            39
-#define KEY_default            40
-#define KEY_defined            41
-#define KEY_delete             42
-#define KEY_die                        43
-#define KEY_do                 44
-#define KEY_dump               45
-#define KEY_each               46
-#define KEY_else               47
-#define KEY_elsif              48
-#define KEY_endgrent           49
-#define KEY_endhostent         50
-#define KEY_endnetent          51
-#define KEY_endprotoent                52
-#define KEY_endpwent           53
-#define KEY_endservent         54
-#define KEY_eof                        55
-#define KEY_eq                 56
-#define KEY_eval               57
-#define KEY_evalbytes          58
-#define KEY_exec               59
-#define KEY_exists             60
-#define KEY_exit               61
-#define KEY_exp                        62
-#define KEY_fc                 63
-#define KEY_fcntl              64
-#define KEY_fileno             65
-#define KEY_flock              66
-#define KEY_for                        67
-#define KEY_foreach            68
-#define KEY_fork               69
-#define KEY_format             70
-#define KEY_formline           71
-#define KEY_ge                 72
-#define KEY_getc               73
-#define KEY_getgrent           74
-#define KEY_getgrgid           75
-#define KEY_getgrnam           76
-#define KEY_gethostbyaddr      77
-#define KEY_gethostbyname      78
-#define KEY_gethostent         79
-#define KEY_getlogin           80
-#define KEY_getnetbyaddr       81
-#define KEY_getnetbyname       82
-#define KEY_getnetent          83
-#define KEY_getpeername                84
-#define KEY_getpgrp            85
-#define KEY_getppid            86
-#define KEY_getpriority                87
-#define KEY_getprotobyname     88
-#define KEY_getprotobynumber   89
-#define KEY_getprotoent                90
-#define KEY_getpwent           91
-#define KEY_getpwnam           92
-#define KEY_getpwuid           93
-#define KEY_getservbyname      94
-#define KEY_getservbyport      95
-#define KEY_getservent         96
-#define KEY_getsockname                97
-#define KEY_getsockopt         98
-#define KEY_given              99
-#define KEY_glob               100
-#define KEY_gmtime             101
-#define KEY_goto               102
-#define KEY_grep               103
-#define KEY_gt                 104
-#define KEY_hex                        105
-#define KEY_if                 106
-#define KEY_index              107
-#define KEY_int                        108
-#define KEY_ioctl              109
-#define KEY_isa                        110
-#define KEY_join               111
-#define KEY_keys               112
-#define KEY_kill               113
-#define KEY_last               114
-#define KEY_lc                 115
-#define KEY_lcfirst            116
-#define KEY_le                 117
-#define KEY_length             118
-#define KEY_link               119
-#define KEY_listen             120
-#define KEY_local              121
-#define KEY_localtime          122
-#define KEY_lock               123
-#define KEY_log                        124
-#define KEY_lstat              125
-#define KEY_lt                 126
-#define KEY_m                  127
-#define KEY_map                        128
-#define KEY_mkdir              129
-#define KEY_msgctl             130
-#define KEY_msgget             131
-#define KEY_msgrcv             132
-#define KEY_msgsnd             133
-#define KEY_my                 134
-#define KEY_ne                 135
-#define KEY_next               136
-#define KEY_no                 137
-#define KEY_not                        138
-#define KEY_oct                        139
-#define KEY_open               140
-#define KEY_opendir            141
-#define KEY_or                 142
-#define KEY_ord                        143
-#define KEY_our                        144
-#define KEY_pack               145
-#define KEY_package            146
-#define KEY_pipe               147
-#define KEY_pop                        148
-#define KEY_pos                        149
-#define KEY_print              150
-#define KEY_printf             151
-#define KEY_prototype          152
-#define KEY_push               153
-#define KEY_q                  154
-#define KEY_qq                 155
-#define KEY_qr                 156
-#define KEY_quotemeta          157
-#define KEY_qw                 158
-#define KEY_qx                 159
-#define KEY_rand               160
-#define KEY_read               161
-#define KEY_readdir            162
-#define KEY_readline           163
-#define KEY_readlink           164
-#define KEY_readpipe           165
-#define KEY_recv               166
-#define KEY_redo               167
-#define KEY_ref                        168
-#define KEY_rename             169
-#define KEY_require            170
-#define KEY_reset              171
-#define KEY_return             172
-#define KEY_reverse            173
-#define KEY_rewinddir          174
-#define KEY_rindex             175
-#define KEY_rmdir              176
-#define KEY_s                  177
-#define KEY_say                        178
-#define KEY_scalar             179
-#define KEY_seek               180
-#define KEY_seekdir            181
-#define KEY_select             182
-#define KEY_semctl             183
-#define KEY_semget             184
-#define KEY_semop              185
-#define KEY_send               186
-#define KEY_setgrent           187
-#define KEY_sethostent         188
-#define KEY_setnetent          189
-#define KEY_setpgrp            190
-#define KEY_setpriority                191
-#define KEY_setprotoent                192
-#define KEY_setpwent           193
-#define KEY_setservent         194
-#define KEY_setsockopt         195
-#define KEY_shift              196
-#define KEY_shmctl             197
-#define KEY_shmget             198
-#define KEY_shmread            199
-#define KEY_shmwrite           200
-#define KEY_shutdown           201
-#define KEY_sin                        202
-#define KEY_sleep              203
-#define KEY_socket             204
-#define KEY_socketpair         205
-#define KEY_sort               206
-#define KEY_splice             207
-#define KEY_split              208
-#define KEY_sprintf            209
-#define KEY_sqrt               210
-#define KEY_srand              211
-#define KEY_stat               212
-#define KEY_state              213
-#define KEY_study              214
-#define KEY_sub                        215
-#define KEY_substr             216
-#define KEY_symlink            217
-#define KEY_syscall            218
-#define KEY_sysopen            219
-#define KEY_sysread            220
-#define KEY_sysseek            221
-#define KEY_system             222
-#define KEY_syswrite           223
-#define KEY_tell               224
-#define KEY_telldir            225
-#define KEY_tie                        226
-#define KEY_tied               227
-#define KEY_time               228
-#define KEY_times              229
-#define KEY_tr                 230
-#define KEY_truncate           231
-#define KEY_uc                 232
-#define KEY_ucfirst            233
-#define KEY_umask              234
-#define KEY_undef              235
-#define KEY_unless             236
-#define KEY_unlink             237
-#define KEY_unpack             238
-#define KEY_unshift            239
-#define KEY_untie              240
-#define KEY_until              241
-#define KEY_use                        242
-#define KEY_utime              243
-#define KEY_values             244
-#define KEY_vec                        245
-#define KEY_wait               246
-#define KEY_waitpid            247
-#define KEY_wantarray          248
-#define KEY_warn               249
-#define KEY_when               250
-#define KEY_while              251
-#define KEY_write              252
-#define KEY_x                  253
-#define KEY_xor                        254
-#define KEY_y                  255
+#define KEY_catch              24
+#define KEY_chdir              25
+#define KEY_chmod              26
+#define KEY_chomp              27
+#define KEY_chop               28
+#define KEY_chown              29
+#define KEY_chr                        30
+#define KEY_chroot             31
+#define KEY_close              32
+#define KEY_closedir           33
+#define KEY_cmp                        34
+#define KEY_connect            35
+#define KEY_continue           36
+#define KEY_cos                        37
+#define KEY_crypt              38
+#define KEY_dbmclose           39
+#define KEY_dbmopen            40
+#define KEY_default            41
+#define KEY_defined            42
+#define KEY_delete             43
+#define KEY_die                        44
+#define KEY_do                 45
+#define KEY_dump               46
+#define KEY_each               47
+#define KEY_else               48
+#define KEY_elsif              49
+#define KEY_endgrent           50
+#define KEY_endhostent         51
+#define KEY_endnetent          52
+#define KEY_endprotoent                53
+#define KEY_endpwent           54
+#define KEY_endservent         55
+#define KEY_eof                        56
+#define KEY_eq                 57
+#define KEY_eval               58
+#define KEY_evalbytes          59
+#define KEY_exec               60
+#define KEY_exists             61
+#define KEY_exit               62
+#define KEY_exp                        63
+#define KEY_fc                 64
+#define KEY_fcntl              65
+#define KEY_fileno             66
+#define KEY_flock              67
+#define KEY_for                        68
+#define KEY_foreach            69
+#define KEY_fork               70
+#define KEY_format             71
+#define KEY_formline           72
+#define KEY_ge                 73
+#define KEY_getc               74
+#define KEY_getgrent           75
+#define KEY_getgrgid           76
+#define KEY_getgrnam           77
+#define KEY_gethostbyaddr      78
+#define KEY_gethostbyname      79
+#define KEY_gethostent         80
+#define KEY_getlogin           81
+#define KEY_getnetbyaddr       82
+#define KEY_getnetbyname       83
+#define KEY_getnetent          84
+#define KEY_getpeername                85
+#define KEY_getpgrp            86
+#define KEY_getppid            87
+#define KEY_getpriority                88
+#define KEY_getprotobyname     89
+#define KEY_getprotobynumber   90
+#define KEY_getprotoent                91
+#define KEY_getpwent           92
+#define KEY_getpwnam           93
+#define KEY_getpwuid           94
+#define KEY_getservbyname      95
+#define KEY_getservbyport      96
+#define KEY_getservent         97
+#define KEY_getsockname                98
+#define KEY_getsockopt         99
+#define KEY_given              100
+#define KEY_glob               101
+#define KEY_gmtime             102
+#define KEY_goto               103
+#define KEY_grep               104
+#define KEY_gt                 105
+#define KEY_hex                        106
+#define KEY_if                 107
+#define KEY_index              108
+#define KEY_int                        109
+#define KEY_ioctl              110
+#define KEY_isa                        111
+#define KEY_join               112
+#define KEY_keys               113
+#define KEY_kill               114
+#define KEY_last               115
+#define KEY_lc                 116
+#define KEY_lcfirst            117
+#define KEY_le                 118
+#define KEY_length             119
+#define KEY_link               120
+#define KEY_listen             121
+#define KEY_local              122
+#define KEY_localtime          123
+#define KEY_lock               124
+#define KEY_log                        125
+#define KEY_lstat              126
+#define KEY_lt                 127
+#define KEY_m                  128
+#define KEY_map                        129
+#define KEY_mkdir              130
+#define KEY_msgctl             131
+#define KEY_msgget             132
+#define KEY_msgrcv             133
+#define KEY_msgsnd             134
+#define KEY_my                 135
+#define KEY_ne                 136
+#define KEY_next               137
+#define KEY_no                 138
+#define KEY_not                        139
+#define KEY_oct                        140
+#define KEY_open               141
+#define KEY_opendir            142
+#define KEY_or                 143
+#define KEY_ord                        144
+#define KEY_our                        145
+#define KEY_pack               146
+#define KEY_package            147
+#define KEY_pipe               148
+#define KEY_pop                        149
+#define KEY_pos                        150
+#define KEY_print              151
+#define KEY_printf             152
+#define KEY_prototype          153
+#define KEY_push               154
+#define KEY_q                  155
+#define KEY_qq                 156
+#define KEY_qr                 157
+#define KEY_quotemeta          158
+#define KEY_qw                 159
+#define KEY_qx                 160
+#define KEY_rand               161
+#define KEY_read               162
+#define KEY_readdir            163
+#define KEY_readline           164
+#define KEY_readlink           165
+#define KEY_readpipe           166
+#define KEY_recv               167
+#define KEY_redo               168
+#define KEY_ref                        169
+#define KEY_rename             170
+#define KEY_require            171
+#define KEY_reset              172
+#define KEY_return             173
+#define KEY_reverse            174
+#define KEY_rewinddir          175
+#define KEY_rindex             176
+#define KEY_rmdir              177
+#define KEY_s                  178
+#define KEY_say                        179
+#define KEY_scalar             180
+#define KEY_seek               181
+#define KEY_seekdir            182
+#define KEY_select             183
+#define KEY_semctl             184
+#define KEY_semget             185
+#define KEY_semop              186
+#define KEY_send               187
+#define KEY_setgrent           188
+#define KEY_sethostent         189
+#define KEY_setnetent          190
+#define KEY_setpgrp            191
+#define KEY_setpriority                192
+#define KEY_setprotoent                193
+#define KEY_setpwent           194
+#define KEY_setservent         195
+#define KEY_setsockopt         196
+#define KEY_shift              197
+#define KEY_shmctl             198
+#define KEY_shmget             199
+#define KEY_shmread            200
+#define KEY_shmwrite           201
+#define KEY_shutdown           202
+#define KEY_sin                        203
+#define KEY_sleep              204
+#define KEY_socket             205
+#define KEY_socketpair         206
+#define KEY_sort               207
+#define KEY_splice             208
+#define KEY_split              209
+#define KEY_sprintf            210
+#define KEY_sqrt               211
+#define KEY_srand              212
+#define KEY_stat               213
+#define KEY_state              214
+#define KEY_study              215
+#define KEY_sub                        216
+#define KEY_substr             217
+#define KEY_symlink            218
+#define KEY_syscall            219
+#define KEY_sysopen            220
+#define KEY_sysread            221
+#define KEY_sysseek            222
+#define KEY_system             223
+#define KEY_syswrite           224
+#define KEY_tell               225
+#define KEY_telldir            226
+#define KEY_tie                        227
+#define KEY_tied               228
+#define KEY_time               229
+#define KEY_times              230
+#define KEY_tr                 231
+#define KEY_try                        232
+#define KEY_truncate           233
+#define KEY_uc                 234
+#define KEY_ucfirst            235
+#define KEY_umask              236
+#define KEY_undef              237
+#define KEY_unless             238
+#define KEY_unlink             239
+#define KEY_unpack             240
+#define KEY_unshift            241
+#define KEY_untie              242
+#define KEY_until              243
+#define KEY_use                        244
+#define KEY_utime              245
+#define KEY_values             246
+#define KEY_vec                        247
+#define KEY_wait               248
+#define KEY_waitpid            249
+#define KEY_wantarray          250
+#define KEY_warn               251
+#define KEY_when               252
+#define KEY_while              253
+#define KEY_write              254
+#define KEY_x                  255
+#define KEY_xor                        256
+#define KEY_y                  257
 
 /* Generated from:
- * dd384f0c948716414a93d758d89a38e3c8116acfdc48eb7e34fa6737887097d5 regen/keywords.pl
+ * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl
  * ex: set ro: */
index cdbd27c..9d891a7 100644 (file)
@@ -362,6 +362,7 @@ my %not_tested = map { $_ => 1} qw(
     END
     INIT
     UNITCHECK
+    catch
     default
     else
     elsif
@@ -381,6 +382,7 @@ my %not_tested = map { $_ => 1} qw(
     require
     s
     tr
+    try
     unless
     until
     use
index 2317aa1..67147f1 100644 (file)
@@ -52,7 +52,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
         MDEREF_SHIFT
     );
 
-$VERSION = '1.55';
+$VERSION = '1.56';
 use strict;
 our $AUTOLOAD;
 use warnings ();
@@ -2304,6 +2304,8 @@ my %feature_keywords = (
     evalbytes=>'evalbytes',
     __SUB__ => '__SUB__',
    fc       => 'fc',
+   try      => 'try',
+   catch    => 'try',
 );
 
 # keywords that are strong and also have a prototype
@@ -4055,6 +4057,31 @@ sub pp_leavetry {
     return "eval {\n\t" . $self->pp_leave(@_) . "\n\b}";
 }
 
+sub pp_leavetrycatch {
+    my $self = shift;
+    my ($op) = @_;
+
+    # Expect that the first three kids should be (entertrycatch, poptry, catch)
+    my $entertrycatch = $op->first;
+    $entertrycatch->name eq "entertrycatch" or die "Expected entertrycatch as first child of leavetrycatch";
+
+    my $tryblock = $entertrycatch->sibling;
+    $tryblock->name eq "poptry" or die "Expected poptry as second child of leavetrycatch";
+
+    my $catch = $tryblock->sibling;
+    $catch->name eq "catch" or die "Expected catch as third child of leavetrycatch";
+
+    my $catchblock = $catch->first->sibling;
+    $catchblock->name eq "scope" or die "Expected scope as second child of catch";
+
+    my $trycode = scopeop(0, $self, $tryblock);
+    my $catchvar = $self->padname($catch->targ);
+    my $catchcode = scopeop(0, $self, $catchblock);
+
+    return "try {\n\t$trycode\n\b}\n" .
+           "catch($catchvar) {\n\t$catchcode\n\b}\cK";
+}
+
 sub _op_is_or_was {
   my ($op, $expect_type) = @_;
   my $type = $op->type;
index fb3a7fc..24eb445 100644 (file)
@@ -3162,3 +3162,12 @@ $a = int($c == $d != $e);
 $a = $b < ($c == $d != $e);
 $a = $b == ($c == $d != $e);
 $a = $b & $c == $d != $e;
+####
+# try/catch
+# CONTEXT use feature 'try'; no warnings 'experimental::try';
+try {
+    FIRST();
+}
+catch($var) {
+    SECOND();
+}
index 716aec8..a5917dc 100644 (file)
@@ -118,7 +118,7 @@ package B::Op_private;
 our %bits;
 
 
-our $VERSION = "5.033006";
+our $VERSION = "5.033007";
 
 $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
 $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
@@ -275,6 +275,7 @@ $bits{backtick}{0} = $bf[0];
 @{$bits{bit_xor}}{1,0} = ($bf[1], $bf[1]);
 @{$bits{bless}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
 @{$bits{caller}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
+$bits{catch}{0} = $bf[0];
 @{$bits{chdir}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
 @{$bits{chmod}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
 $bits{chomp}{0} = $bf[0];
@@ -310,6 +311,7 @@ $bits{entergiven}{0} = $bf[0];
 $bits{enteriter}{3} = 'OPpITER_DEF';
 @{$bits{entersub}}{5,4,0} = ($bf[8], $bf[8], 'OPpENTERSUB_INARGS');
 $bits{entertry}{0} = $bf[0];
+$bits{entertrycatch}{0} = $bf[0];
 $bits{enterwhen}{0} = $bf[0];
 @{$bits{enterwrite}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
 @{$bits{eof}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
index a8e943a..c57c75d 100644 (file)
@@ -5,12 +5,13 @@
 
 package feature;
 
-our $VERSION = '1.62';
+our $VERSION = '1.63';
 
 our %feature = (
     fc                   => 'feature_fc',
     isa                  => 'feature_isa',
     say                  => 'feature_say',
+    try                  => 'feature_try',
     state                => 'feature_state',
     switch               => 'feature_switch',
     bitwise              => 'feature_bitwise',
@@ -33,7 +34,7 @@ our %feature_bundle = (
     "5.15"    => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional say state switch unicode_eval unicode_strings)],
     "5.23"    => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)],
     "5.27"    => [qw(bareword_filehandles bitwise current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)],
-    "all"     => [qw(bareword_filehandles bitwise current_sub declared_refs evalbytes fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)],
+    "all"     => [qw(bareword_filehandles bitwise current_sub declared_refs evalbytes fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch try unicode_eval unicode_strings)],
     "default" => [qw(bareword_filehandles indirect multidimensional)],
 );
 
@@ -380,8 +381,8 @@ CPAN module.
 
 This feature enables multidimensional array emulation, a perl 4 (or
 earlier) feature that was used to emulate multidimensional arrays with
-hashes.  This works by converting code like C<< $foo{$x, y} >> into
-C<< $foo{join($;, $x, $y} >>.  It is enabled by default, but can be
+hashes.  This works by converting code like C<< $foo{$x, $y} >> into
+C<< $foo{join($;, $x, $y)} >>.  It is enabled by default, but can be
 turned off to disable multidimensional array emulation.
 
 When this feature is disabled the syntax that is normally replaced
@@ -409,6 +410,14 @@ previous versions it was simply on all the time.
 You can use the L<bareword::filehandles> module on CPAN to disable
 bareword filehandles for older versions of perl.
 
+=head2 The 'try' feature.
+
+This feature enables the C<try> and C<catch> syntax, which allows exception
+handling, where exceptions throwin from the body of the block introduced with
+C<try> are caught by executing the body of the C<catch> block.
+
+For more information, see L<perlsyn/"Try Catch Exception Handling">.
+
 =head1 FEATURE BUNDLES
 
 It's possible to load multiple features together, using
index d1c17ab..a92d490 100644 (file)
@@ -5,7 +5,7 @@
 
 package warnings;
 
-our $VERSION = "1.50";
+our $VERSION = "1.51";
 
 # Verify that we're called correctly so that warnings will work.
 # Can't use Carp, since Carp uses us!
@@ -109,6 +109,9 @@ our %Offsets = (
 
     # Warnings Categories added in Perl 5.031
     'experimental::isa'                        => 146,
+
+    # Warnings Categories added in Perl 5.033
+    'experimental::try'                        => 148,
 );
 
 our %Bits = (
@@ -122,7 +125,7 @@ our %Bits = (
     'digit'                            => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
     'exec'                             => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
     'exiting'                          => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
-    'experimental'                     => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x15\x50\x51\x05", # [51..56,58..62,66..68,70..73]
+    'experimental'                     => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x15\x50\x51\x15", # [51..56,58..62,66..68,70..74]
     'experimental::alpha_assertions'   => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [67]
     'experimental::bitwise'            => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [58]
     'experimental::const_attr'         => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [59]
@@ -137,6 +140,7 @@ our %Bits = (
     'experimental::script_run'         => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [68]
     'experimental::signatures'         => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [56]
     'experimental::smartmatch'         => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [54]
+    'experimental::try'                        => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [74]
     'experimental::uniprop_wildcards'  => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [71]
     'experimental::vlb'                        => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [72]
     'experimental::win32_perlio'       => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [62]
@@ -199,7 +203,7 @@ our %DeadBits = (
     'digit'                            => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
     'exec'                             => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
     'exiting'                          => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
-    'experimental'                     => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x2a\xa0\xa2\x0a", # [51..56,58..62,66..68,70..73]
+    'experimental'                     => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x2a\xa0\xa2\x2a", # [51..56,58..62,66..68,70..74]
     'experimental::alpha_assertions'   => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [67]
     'experimental::bitwise'            => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [58]
     'experimental::const_attr'         => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [59]
@@ -214,6 +218,7 @@ our %DeadBits = (
     'experimental::script_run'         => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [68]
     'experimental::signatures'         => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [56]
     'experimental::smartmatch'         => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [54]
+    'experimental::try'                        => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [74]
     'experimental::uniprop_wildcards'  => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [71]
     'experimental::vlb'                        => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [72]
     'experimental::win32_perlio'       => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [62]
@@ -267,8 +272,8 @@ our %DeadBits = (
 
 # These are used by various things, including our own tests
 our $NONE                              =  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
-our $DEFAULT                           =  "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x05"; # [2,4,22,23,25,52..56,58..63,66..68,70..73]
-our $LAST_BIT                          =  148 ;
+our $DEFAULT                           =  "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x15"; # [2,4,22,23,25,52..56,58..63,66..68,70..74]
+our $LAST_BIT                          =  150 ;
 our $BYTES                             =  19 ;
 
 sub Croaker
@@ -888,6 +893,8 @@ The current hierarchy is:
          |                 |
          |                 +- experimental::smartmatch
          |                 |
+         |                 +- experimental::try
+         |                 |
          |                 +- experimental::uniprop_wildcards
          |                 |
          |                 +- experimental::vlb
@@ -1052,7 +1059,7 @@ The L<strictures|strictures/VERSION-2> module on CPAN offers one example of
 a warnings subset that the module's authors believe is relatively safe to
 fatalize.
 
-B<NOTE:> users of FATAL warnings, especially those using
+B<NOTE:> Users of FATAL warnings, especially those using
 C<< FATAL => 'all' >>, should be fully aware that they are risking future
 portability of their programs by doing so.  Perl makes absolutely no
 commitments to not introduce new warnings or warnings categories in the
@@ -1120,6 +1127,9 @@ use:
    use v5.20;       # Perl 5.20 or greater is required for the following
    use warnings 'FATAL';  # short form of "use warnings FATAL => 'all';"
 
+However, you should still heed the guidance earlier in this section against
+using C<use warnings FATAL => 'all';>.
+
 If you want your program to be compatible with versions of Perl before
 5.20, you must use C<< use warnings FATAL => 'all'; >> instead.  (In
 previous versions of Perl, the behavior of the statements
index c8ee1b7..de171fc 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -1220,137 +1220,6 @@ S_emulate_setlocale(const int category,
 
 #endif /* USE_POSIX_2008_LOCALE */
 
-#if 0   /* Code that was to emulate thread-safe locales on platforms that
-           didn't natively support them */
-
-/* The way this would work is that we would keep a per-thread list of the
- * correct locale for that thread.  Any operation that was locale-sensitive
- * would have to be changed so that it would look like this:
- *
- *      SETLOCALE_LOCK;
- *      setlocale to the correct locale for this operation
- *      do operation
- *      SETLOCALE_UNLOCK
- *
- * This leaves the global locale in the most recently used operation's, but it
- * was locked long enough to get the result.  If that result is static, it
- * needs to be copied before the unlock.
- *
- * Macros could be written like SETUP_LOCALE_DEPENDENT_OP(category) that did
- * the setup, but are no-ops when not needed, and similarly,
- * END_LOCALE_DEPENDENT_OP for the tear-down
- *
- * But every call to a locale-sensitive function would have to be changed, and
- * if a module didn't cooperate by using the mutex, things would break.
- *
- * This code was abandoned before being completed or tested, and is left as-is
-*/
-
-#  define do_setlocale_c(cat, locale) locking_setlocale(cat, locale, cat ## _INDEX, TRUE)
-#  define do_setlocale_r(cat, locale) locking_setlocale(cat, locale, 0, FALSE)
-
-STATIC char *
-S_locking_setlocale(pTHX_
-                    const int category,
-                    const char * locale,
-                    int index,
-                    const bool is_index_valid
-                   )
-{
-    /* This function kind of performs a setlocale() on just the current thread;
-     * thus it is kind of thread-safe.  It does this by keeping a thread-level
-     * array of the current locales for each category.  Every time a locale is
-     * switched to, it does the switch globally, but updates the thread's
-     * array.  A query as to what the current locale is just returns the
-     * appropriate element from the array, and doesn't actually call the system
-     * setlocale().  The saving into the array is done in an uninterruptible
-     * section of code, so is unaffected by whatever any other threads might be
-     * doing.
-     *
-     * All locale-sensitive operations must work by first starting a critical
-     * section, then switching to the thread's locale as kept by this function,
-     * and then doing the operation, then ending the critical section.  Thus,
-     * each gets done in the appropriate locale. simulating thread-safety.
-     *
-     * This function takes the same parameters, 'category' and 'locale', that
-     * the regular setlocale() function does, but it also takes two additional
-     * ones.  This is because as described earlier.  If we know on input the
-     * index corresponding to the category into the array where we store the
-     * current locales, we don't have to calculate it.  If the caller knows at
-     * compile time what the index is, it can pass it, setting
-     * 'is_index_valid' to TRUE; otherwise the index parameter is ignored.
-     *
-     */
-
-    /* If the input index might be incorrect, calculate the correct one */
-    if (! is_index_valid) {
-        unsigned int i;
-
-        if (DEBUG_Lv_TEST || debug_initialization) {
-            PerlIO_printf(Perl_debug_log, "%s:%d: converting category %d to index\n", __FILE__, __LINE__, category);
-        }
-
-        for (i = 0; i <= LC_ALL_INDEX; i++) {
-            if (category == categories[i]) {
-                index = i;
-                goto found_index;
-            }
-        }
-
-        /* Here, we don't know about this category, so can't handle it.
-         * XXX best we can do is to unsafely set this
-         * XXX warning */
-
-        return my_setlocale(category, locale);
-
-      found_index: ;
-
-        if (DEBUG_Lv_TEST || debug_initialization) {
-            PerlIO_printf(Perl_debug_log, "%s:%d: index is 0x%x\n", __FILE__, __LINE__, index);
-        }
-    }
-
-    /* For a query, just return what's in our records */
-    if (new_locale == NULL) {
-        return curlocales[index];
-    }
-
-
-    /* Otherwise, we need to do the switch, and save the result, all in a
-     * critical section */
-
-    Safefree(curlocales[[index]]);
-
-    /* It might be that this is called from an already-locked section of code.
-     * We would have to detect and skip the LOCK/UNLOCK if so */
-    SETLOCALE_LOCK;
-
-    curlocales[index] = savepv(my_setlocale(category, new_locale));
-
-    if (strEQ(new_locale, "")) {
-
-#ifdef LC_ALL
-
-        /* The locale values come from the environment, and may not all be the
-         * same, so for LC_ALL, we have to update all the others, while the
-         * mutex is still locked */
-
-        if (category == LC_ALL) {
-            unsigned int i;
-            for (i = 0; i < LC_ALL_INDEX) {
-                curlocales[i] = my_setlocale(categories[i], NULL);
-            }
-        }
-    }
-
-#endif
-
-    SETLOCALE_UNLOCK;
-
-    return curlocales[index];
-}
-
-#endif
 #ifdef USE_LOCALE
 
 STATIC void
@@ -3046,6 +2915,9 @@ S_my_nl_langinfo(const int item, bool toggle)
                 tm.tm_year = 2017 - 1900;
                 tm.tm_wday = 0;
                 tm.tm_mon = 0;
+
+                GCC_DIAG_IGNORE_STMT(-Wimplicit-fallthrough);
+
                 switch (item) {
                     default:
                         Perl_croak(aTHX_
@@ -3134,6 +3006,8 @@ S_my_nl_langinfo(const int item, bool toggle)
                         break;
                 }
 
+                GCC_DIAG_RESTORE_STMT;
+
                 /* We can't use my_strftime() because it doesn't look at
                  * tm_wday  */
                 while (0 == strftime(PL_langinfo_buf, PL_langinfo_bufsize,
index 79ae1ef..ba507c8 100644 (file)
@@ -36,10 +36,6 @@ my $ext_dirs_re = '(?:' . join('|', @ext_dirs) . ')';
 # 
 #     make_ext.pl "MAKE=nmake -nologo" --dir=..\ext --target=clean
 # 
-#     make_ext.pl MAKE=dmake --dir=..\ext
-# 
-#     make_ext.pl MAKE=dmake --dir=..\ext --target=clean
-# 
 # Will skip building extensions which are marked with an '!' char.
 # Mostly because they still not ported to specified platform.
 # 
diff --git a/op.c b/op.c
index 4fb8c71..594d4ee 100644 (file)
--- a/op.c
+++ b/op.c
@@ -6699,6 +6699,7 @@ Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
        || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
        || type == OP_SASSIGN
        || type == OP_ENTERTRY
+        || type == OP_ENTERTRYCATCH
        || type == OP_CUSTOM
        || type == OP_NULL );
 
@@ -9816,6 +9817,63 @@ Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
 }
 
 /*
+=for apidoc newTRYCATCHOP
+
+Constructs and returns a conditional execution statement that implements
+the C<try>/C<catch> semantics.  First the op tree in C<tryblock> is executed,
+inside a context that traps exceptions.  If an exception occurs then the
+optree in C<catchblock> is executed, with the trapped exception set into the
+lexical variable given by C<catchvar> (which must be an op of type
+C<OP_PADSV>).  All the optrees are consumed by this function and become part
+of the returned op tree. 
+
+The C<flags> argument is currently ignored.
+
+=cut
+ */
+
+OP *
+Perl_newTRYCATCHOP(pTHX_ I32 flags, OP *tryblock, OP *catchvar, OP *catchblock)
+{
+    OP *o, *catchop;
+
+    PERL_ARGS_ASSERT_NEWTRYCATCHOP;
+    assert(catchvar->op_type == OP_PADSV);
+
+    PERL_UNUSED_ARG(flags);
+
+    /* The returned optree is shaped as:
+     *   LISTOP leavetrycatch
+     *       LOGOP entertrycatch
+     *       LISTOP poptry
+     *           $tryblock here
+     *       LOGOP catch
+     *           $catchblock here
+     */
+
+    if(tryblock->op_type != OP_LINESEQ)
+        tryblock = op_convert_list(OP_LINESEQ, 0, tryblock);
+    OpTYPE_set(tryblock, OP_POPTRY);
+
+    /* Manually construct a naked LOGOP.
+     * Normally if we call newLOGOP the returned value is a UNOP(OP_NULL)
+     * containing the LOGOP we wanted as its op_first */
+    catchop = (OP *)alloc_LOGOP(OP_CATCH, newOP(OP_NULL, 0), catchblock);
+    OpMORESIB_set(cUNOPx(catchop)->op_first, catchblock);
+    OpLASTSIB_set(catchblock, catchop);
+
+    /* Inject the catchvar's pad offset into the OP_CATCH targ */
+    cLOGOPx(catchop)->op_targ = catchvar->op_targ;
+    op_free(catchvar);
+
+    /* Build the optree structure */
+    o = newLISTOP(OP_LIST, 0, tryblock, catchop);
+    o = op_convert_list(OP_ENTERTRYCATCH, 0, o);
+
+    return o;
+}
+
+/*
 =for apidoc newRANGE
 
 Constructs and returns a C<range> op, with subordinate C<flip> and
@@ -12797,6 +12855,69 @@ Perl_ck_eval(pTHX_ OP *o)
 }
 
 OP *
+Perl_ck_trycatch(pTHX_ OP *o)
+{
+    LOGOP *enter;
+    OP *to_free = NULL;
+    OP *trykid, *catchkid;
+    OP *catchroot, *catchstart;
+
+    PERL_ARGS_ASSERT_CK_TRYCATCH;
+
+    trykid = cUNOPo->op_first;
+    if(trykid->op_type == OP_NULL || trykid->op_type == OP_PUSHMARK) {
+        to_free = trykid;
+        trykid = OpSIBLING(trykid);
+    }
+    catchkid = OpSIBLING(trykid);
+
+    assert(trykid->op_type == OP_POPTRY);
+    assert(catchkid->op_type == OP_CATCH);
+
+    /* cut whole sibling chain free from o */
+    op_sibling_splice(o, NULL, -1, NULL);
+    if(to_free)
+        op_free(to_free);
+    op_free(o);
+
+    enter = alloc_LOGOP(OP_ENTERTRYCATCH, NULL, NULL);
+
+    /* establish postfix order */
+    enter->op_next = (OP*)enter;
+
+    o = op_prepend_elem(OP_LINESEQ, (OP*)enter, trykid);
+    op_append_elem(OP_LINESEQ, (OP*)o, catchkid);
+
+    OpTYPE_set(o, OP_LEAVETRYCATCH);
+
+    /* The returned optree is actually threaded up slightly nonobviously in
+     * terms of its ->op_next pointers.
+     *
+     * This way, if the tryblock dies, its retop points at the OP_CATCH, but
+     * if it does not then its leavetry skips over that and continues
+     * execution past it.
+     */
+
+    /* First, link up the actual body of the catch block */
+    catchroot = OpSIBLING(cUNOPx(catchkid)->op_first);
+    catchstart = LINKLIST(catchroot);
+    cLOGOPx(catchkid)->op_other = catchstart;
+
+    o->op_next = LINKLIST(o);
+
+    /* die within try block should jump to the catch */
+    enter->op_other = catchkid;
+
+    /* after try block that doesn't die, just skip straight to leavetrycatch */
+    trykid->op_next = o;
+
+    /* after catch block, skip back up to the leavetrycatch */
+    catchroot->op_next = o;
+
+    return o;
+}
+
+OP *
 Perl_ck_exec(pTHX_ OP *o)
 {
     PERL_ARGS_ASSERT_CK_EXEC;
diff --git a/op.h b/op.h
index 189299e..cd3926d 100644 (file)
--- a/op.h
+++ b/op.h
@@ -223,6 +223,12 @@ struct binop {
 struct logop {
     BASEOP
     OP *       op_first;
+
+    /* Note that op->op_other is the *next* op in execution order of the
+     * alternate branch, not the root of the subtree. I.e. imagine it being
+     * called ->op_otherfirst.
+     * To find the structural subtree root (what could be called
+     * ->op_otherroot), use OpSIBLING of ->op_first  */
     OP *       op_other;
 };
 
index 859b205..c808bee 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -549,6 +549,10 @@ EXTCONST char* const PL_op_name[] = {
        "isa",
        "cmpchain_and",
        "cmpchain_dup",
+       "entertrycatch",
+       "leavetrycatch",
+       "poptry",
+       "catch",
         "freed",
 };
 #endif
@@ -957,6 +961,10 @@ EXTCONST char* const PL_op_desc[] = {
        "derived class test",
        "comparison chaining",
        "comparand shuffling",
+       "try {block}",
+       "try {block} exit",
+       "pop try",
+       "catch {} block",
         "freed op",
 };
 #endif
@@ -1368,6 +1376,10 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
        Perl_pp_isa,
        Perl_pp_cmpchain_and,
        Perl_pp_cmpchain_dup,
+       Perl_pp_entertrycatch,
+       Perl_pp_leavetrycatch,
+       Perl_pp_poptry,
+       Perl_pp_catch,
 }
 #endif
 ;
@@ -1775,6 +1787,10 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        Perl_ck_isa,            /* isa */
        Perl_ck_null,           /* cmpchain_and */
        Perl_ck_null,           /* cmpchain_dup */
+       Perl_ck_trycatch,       /* entertrycatch */
+       Perl_ck_null,           /* leavetrycatch */
+       Perl_ck_null,           /* poptry */
+       Perl_ck_null,           /* catch */
 }
 #endif
 ;
@@ -2183,6 +2199,10 @@ EXTCONST U32 PL_opargs[] = {
        0x00000204,     /* isa */
        0x00000300,     /* cmpchain_and */
        0x00000100,     /* cmpchain_dup */
+       0x00000300,     /* entertrycatch */
+       0x00000400,     /* leavetrycatch */
+       0x00000400,     /* poptry */
+       0x00000300,     /* catch */
 };
 #endif
 
@@ -2850,6 +2870,10 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
       12, /* isa */
        0, /* cmpchain_and */
        0, /* cmpchain_dup */
+       0, /* entertrycatch */
+      -1, /* leavetrycatch */
+      -1, /* poptry */
+       0, /* catch */
 
 };
 
@@ -2868,7 +2892,7 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
  */
 
 EXTCONST U16  PL_op_private_bitdefs[] = {
-    0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, 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, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, 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, cmpchain_and, cmpchain_dup */
+    0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, 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, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, 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, cmpchain_and, cmpchain_dup, entertrycatch, catch */
     0x2fdc, 0x41b9, /* pushmark */
     0x00bd, /* wantarray, runcv */
     0x0438, 0x1a50, 0x426c, 0x3d28, 0x3505, /* const */
@@ -3346,6 +3370,10 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* ISA        */ (OPpARG2_MASK),
     /* CMPCHAIN_AND */ (OPpARG1_MASK),
     /* CMPCHAIN_DUP */ (OPpARG1_MASK),
+    /* ENTERTRYCATCH */ (OPpARG1_MASK),
+    /* LEAVETRYCATCH */ (0),
+    /* POPTRY     */ (0),
+    /* CATCH      */ (OPpARG1_MASK),
 
 };
 
index 0e32546..f6c1552 100644 (file)
--- a/opnames.h
+++ b/opnames.h
@@ -414,10 +414,14 @@ typedef enum opcode {
        OP_ISA           = 397,
        OP_CMPCHAIN_AND  = 398,
        OP_CMPCHAIN_DUP  = 399,
+       OP_ENTERTRYCATCH = 400,
+       OP_LEAVETRYCATCH = 401,
+       OP_POPTRY        = 402,
+       OP_CATCH         = 403,
        OP_max          
 } opcode;
 
-#define MAXO 400
+#define MAXO 404
 #define OP_FREED MAXO
 
 /* the OP_IS_* macros are optimized to a simple range check because
index 1eeae13..ae74f93 100644 (file)
@@ -19,7 +19,7 @@ STATIC const packprops_t packprops[512] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0,
     /* C */ sizeof(unsigned char),
-#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+#if defined(HAS_LONG_DOUBLE)
     /* D */ LONG_DOUBLESIZE,
 #else
     0,
@@ -154,7 +154,7 @@ STATIC const packprops_t packprops[512] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     /* C */ sizeof(unsigned char),
-#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+#if defined(HAS_LONG_DOUBLE)
     /* D */ LONG_DOUBLESIZE,
 #else
     0,
index 7803e0e..9730710 100644 (file)
@@ -39,7 +39,7 @@ Instead use one of the version comparison macros.  See C<L</PERL_VERSION_EQ>>.
 
 #define PERL_REVISION  5               /* age */
 #define PERL_VERSION   33              /* epoch */
-#define PERL_SUBVERSION        6               /* generation */
+#define PERL_SUBVERSION        7               /* generation */
 
 /* The following numbers describe the earliest compatible version of
    Perl ("compatibility" here being defined as sufficient binary/API
@@ -60,7 +60,7 @@ Instead use one of the version comparison macros.  See C<L</PERL_VERSION_EQ>>.
 */
 #define PERL_API_REVISION      5
 #define PERL_API_VERSION       33
-#define PERL_API_SUBVERSION    6
+#define PERL_API_SUBVERSION    7
 /*
    XXX Note:  The selection of non-default Configure options, such
    as -Duselonglong may invalidate these settings.  Currently, Configure
diff --git a/perl.h b/perl.h
index 93cc6b9..a283712 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -4387,6 +4387,11 @@ Gid_t getegid (void);
 #define DEBUG_DB_RECURSE_FLAG  0x40000000
 #define DEBUG_TOP_FLAG         0x80000000 /* -D was given --> PL_debug |= FLAG */
 
+/* Both flags have to be set */
+#  define DEBUG_BOTH_FLAGS_TEST_(flag1, flag2)              \
+            UNLIKELY((PL_debug & ((flag1)|(flag2)))         \
+                              == ((flag1)|(flag2)))
+
 #  define DEBUG_p_TEST_ UNLIKELY(PL_debug & DEBUG_p_FLAG)
 #  define DEBUG_s_TEST_ UNLIKELY(PL_debug & DEBUG_s_FLAG)
 #  define DEBUG_l_TEST_ UNLIKELY(PL_debug & DEBUG_l_FLAG)
@@ -4415,11 +4420,11 @@ Gid_t getegid (void);
 #  define DEBUG_L_TEST_ UNLIKELY(PL_debug & DEBUG_L_FLAG)
 #  define DEBUG_i_TEST_ UNLIKELY(PL_debug & DEBUG_i_FLAG)
 #  define DEBUG_y_TEST_ UNLIKELY(PL_debug & DEBUG_y_FLAG)
-#  define DEBUG_Xv_TEST_ (DEBUG_X_TEST_ && DEBUG_v_TEST_)
-#  define DEBUG_Uv_TEST_ (DEBUG_U_TEST_ && DEBUG_v_TEST_)
-#  define DEBUG_Pv_TEST_ (DEBUG_P_TEST_ && DEBUG_v_TEST_)
-#  define DEBUG_Lv_TEST_ (DEBUG_L_TEST_ && DEBUG_v_TEST_)
-#  define DEBUG_yv_TEST_ (DEBUG_y_TEST_ && DEBUG_v_TEST_)
+#  define DEBUG_Xv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_X_FLAG, DEBUG_v_FLAG)
+#  define DEBUG_Uv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_U_FLAG, DEBUG_v_FLAG)
+#  define DEBUG_Pv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_P_FLAG, DEBUG_v_FLAG)
+#  define DEBUG_Lv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_L_FLAG, DEBUG_v_FLAG)
+#  define DEBUG_yv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_y_FLAG, DEBUG_v_FLAG)
 
 #ifdef DEBUGGING
 
index 0518c0f..c4a08e0 100644 (file)
@@ -264,9 +264,9 @@ PERLVAR(G, malloc_mutex, perl_mutex)        /* Mutex for malloc */
 #endif
 
 PERLVARI(G, hash_seed_set, bool, FALSE)        /* perl.c */
-PERLVARA(G, hash_seed, PERL_HASH_SEED_BYTES, unsigned char) /* perl.c and hv.h */
+PERLVARA(G, hash_seed_w, PERL_HASH_SEED_WORDS, __PERL_HASH_WORD_TYPE) /* perl.c and hv.h */
 #if defined(PERL_HASH_STATE_BYTES)
-PERLVARA(G, hash_state, PERL_HASH_STATE_BYTES, unsigned char) /* perl.c and hv.h */
+PERLVARA(G, hash_state_w, PERL_HASH_STATE_WORDS, __PERL_HASH_WORD_TYPE) /* perl.c and hv.h */
 #endif
 #if defined(PERL_USE_SINGLE_CHAR_HASH_CACHE)
 PERLVARA(G, hash_chars, (1+256) * sizeof(U32), unsigned char) /* perl.c and hv.h */
index 16abe6e..00192e6 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -5,8 +5,8 @@
  */
 
 case 2:
-#line 137 "perly.y"
-                        {
+#line 138 "perly.y"
+    {
                          parser->expect = XSTATE;
                           (yyval.ival) = 0;
                        }
@@ -14,8 +14,8 @@ case 2:
     break;
 
   case 3:
-#line 142 "perly.y"
-                        {
+#line 143 "perly.y"
+    {
                          newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval)));
                          PL_compiling.cop_seq = 0;
                          (yyval.ival) = 0;
@@ -24,8 +24,8 @@ case 2:
     break;
 
   case 4:
-#line 148 "perly.y"
-                        {
+#line 149 "perly.y"
+    {
                          parser->expect = XTERM;
                           (yyval.ival) = 0;
                        }
@@ -33,8 +33,8 @@ case 2:
     break;
 
   case 5:
-#line 153 "perly.y"
-                        {
+#line 154 "perly.y"
+    {
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
                        }
@@ -42,8 +42,8 @@ case 2:
     break;
 
   case 6:
-#line 158 "perly.y"
-                        {
+#line 159 "perly.y"
+    {
                          parser->expect = XBLOCK;
                           (yyval.ival) = 0;
                        }
@@ -51,8 +51,8 @@ case 2:
     break;
 
   case 7:
-#line 163 "perly.y"
-                        {
+#line 164 "perly.y"
+    {
                          PL_pad_reset_pending = TRUE;
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
@@ -63,8 +63,8 @@ case 2:
     break;
 
   case 8:
-#line 171 "perly.y"
-                        {
+#line 172 "perly.y"
+    {
                          parser->expect = XSTATE;
                           (yyval.ival) = 0;
                        }
@@ -72,8 +72,8 @@ case 2:
     break;
 
   case 9:
-#line 176 "perly.y"
-                        {
+#line 177 "perly.y"
+    {
                          PL_pad_reset_pending = TRUE;
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
@@ -84,8 +84,8 @@ case 2:
     break;
 
   case 10:
-#line 184 "perly.y"
-                        {
+#line 185 "perly.y"
+    {
                          parser->expect = XSTATE;
                           (yyval.ival) = 0;
                        }
@@ -93,8 +93,8 @@ case 2:
     break;
 
   case 11:
-#line 189 "perly.y"
-                        {
+#line 190 "perly.y"
+    {
                          PL_pad_reset_pending = TRUE;
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
@@ -105,8 +105,8 @@ case 2:
     break;
 
   case 12:
-#line 197 "perly.y"
-                        {
+#line 198 "perly.y"
+    {
                          parser->expect = XSTATE;
                           (yyval.ival) = 0;
                        }
@@ -114,8 +114,8 @@ case 2:
     break;
 
   case 13:
-#line 202 "perly.y"
-                        {
+#line 203 "perly.y"
+    {
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
                        }
@@ -123,8 +123,8 @@ case 2:
     break;
 
   case 14:
-#line 207 "perly.y"
-                        {
+#line 208 "perly.y"
+    {
                          parser->expect = XSTATE;
                          (yyval.ival) = 0;
                        }
@@ -132,8 +132,8 @@ case 2:
     break;
 
   case 15:
-#line 212 "perly.y"
-                        {
+#line 213 "perly.y"
+    {
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
                        }
@@ -141,8 +141,8 @@ case 2:
     break;
 
   case 16:
-#line 220 "perly.y"
-                        { if (parser->copline > (line_t)(ps[-3].val.ival))
+#line 221 "perly.y"
+    { if (parser->copline > (line_t)(ps[-3].val.ival))
                              parser->copline = (line_t)(ps[-3].val.ival);
                          (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval));
                        }
@@ -150,8 +150,8 @@ case 2:
     break;
 
   case 17:
-#line 228 "perly.y"
-                        { if (parser->copline > (line_t)(ps[-6].val.ival))
+#line 229 "perly.y"
+    { if (parser->copline > (line_t)(ps[-6].val.ival))
                              parser->copline = (line_t)(ps[-6].val.ival);
                          (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval));
                        }
@@ -159,15 +159,15 @@ case 2:
     break;
 
   case 18:
-#line 235 "perly.y"
-                        { (yyval.ival) = block_start(TRUE);
+#line 236 "perly.y"
+    { (yyval.ival) = block_start(TRUE);
                          parser->parsed_sub = 0; }
 
     break;
 
   case 19:
-#line 240 "perly.y"
-                        { if (parser->copline > (line_t)(ps[-3].val.ival))
+#line 241 "perly.y"
+    { if (parser->copline > (line_t)(ps[-3].val.ival))
                              parser->copline = (line_t)(ps[-3].val.ival);
                          (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval));
                        }
@@ -175,21 +175,21 @@ case 2:
     break;
 
   case 20:
-#line 247 "perly.y"
-                        { (yyval.ival) = block_start(FALSE);
+#line 248 "perly.y"
+    { (yyval.ival) = block_start(FALSE);
                          parser->parsed_sub = 0; }
 
     break;
 
   case 21:
-#line 253 "perly.y"
-                        { (yyval.opval) = NULL; }
+#line 254 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 22:
-#line 255 "perly.y"
-                        {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
+#line 256 "perly.y"
+    {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
                            PL_pad_reset_pending = TRUE;
                            if ((ps[-1].val.opval) && (ps[0].val.opval))
                                PL_hints |= HINT_BLOCK_SCOPE;
@@ -198,14 +198,14 @@ case 2:
     break;
 
   case 23:
-#line 264 "perly.y"
-                        { (yyval.opval) = NULL; }
+#line 265 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 24:
-#line 266 "perly.y"
-                        {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
+#line 267 "perly.y"
+    {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
                            PL_pad_reset_pending = TRUE;
                            if ((ps[-1].val.opval) && (ps[0].val.opval))
                                PL_hints |= HINT_BLOCK_SCOPE;
@@ -214,22 +214,22 @@ case 2:
     break;
 
   case 25:
-#line 275 "perly.y"
-                        {
+#line 276 "perly.y"
+    {
                          (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL;
                        }
 
     break;
 
   case 26:
-#line 279 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 280 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 27:
-#line 283 "perly.y"
-                        {
+#line 284 "perly.y"
+    {
                           SV *label = cSVOPx_sv((ps[-1].val.opval));
                          (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8,
                                             savepv(SvPVX_const(label)), (ps[0].val.opval));
@@ -239,8 +239,8 @@ case 2:
     break;
 
   case 28:
-#line 290 "perly.y"
-                        {
+#line 291 "perly.y"
+    {
                           SV *label = cSVOPx_sv((ps[-1].val.opval));
                          (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8,
                                             savepv(SvPVX_const(label)), (ps[0].val.opval));
@@ -250,14 +250,14 @@ case 2:
     break;
 
   case 29:
-#line 300 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 301 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 30:
-#line 302 "perly.y"
-                        {
+#line 303 "perly.y"
+    {
                          CV *fmtcv = PL_compcv;
                          newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval));
                          (yyval.opval) = NULL;
@@ -270,8 +270,8 @@ case 2:
     break;
 
   case 31:
-#line 314 "perly.y"
-                        {
+#line 315 "perly.y"
+    {
                           init_named_cv(PL_compcv, (ps[-1].val.opval));
                          parser->in_my = 0;
                          parser->in_my_stash = NULL;
@@ -280,8 +280,8 @@ case 2:
     break;
 
   case 32:
-#line 320 "perly.y"
-                        {
+#line 321 "perly.y"
+    {
                          SvREFCNT_inc_simple_void(PL_compcv);
                          (ps[-5].val.opval)->op_type == OP_CONST
                              ? newATTRSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval))
@@ -295,8 +295,8 @@ case 2:
     break;
 
   case 33:
-#line 335 "perly.y"
-                        {
+#line 336 "perly.y"
+    {
                           init_named_cv(PL_compcv, (ps[-1].val.opval));
                          parser->in_my = 0;
                          parser->in_my_stash = NULL;
@@ -305,8 +305,8 @@ case 2:
     break;
 
   case 34:
-#line 341 "perly.y"
-                        {
+#line 342 "perly.y"
+    {
                          SvREFCNT_inc_simple_void(PL_compcv);
                          (ps[-4].val.opval)->op_type == OP_CONST
                              ? newATTRSUB((ps[-3].val.ival), (ps[-4].val.opval), NULL, (ps[-1].val.opval), (ps[0].val.opval))
@@ -320,8 +320,8 @@ case 2:
     break;
 
   case 35:
-#line 352 "perly.y"
-                        {
+#line 353 "perly.y"
+    {
                          package((ps[-1].val.opval));
                          if ((ps[-2].val.opval))
                              package_version((ps[-2].val.opval));
@@ -331,14 +331,14 @@ case 2:
     break;
 
   case 36:
-#line 359 "perly.y"
-                        { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
+#line 360 "perly.y"
+    { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
 
     break;
 
   case 37:
-#line 361 "perly.y"
-                        {
+#line 362 "perly.y"
+    {
                          SvREFCNT_inc_simple_void(PL_compcv);
                          utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval));
                          parser->parsed_sub = 1;
@@ -348,8 +348,8 @@ case 2:
     break;
 
   case 38:
-#line 368 "perly.y"
-                        {
+#line 369 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-4].val.ival),
                              newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval)));
                          parser->copline = (line_t)(ps[-6].val.ival);
@@ -358,8 +358,8 @@ case 2:
     break;
 
   case 39:
-#line 374 "perly.y"
-                        {
+#line 375 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-4].val.ival),
                               newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval))));
                          parser->copline = (line_t)(ps[-6].val.ival);
@@ -368,8 +368,8 @@ case 2:
     break;
 
   case 40:
-#line 380 "perly.y"
-                        {
+#line 381 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0));
                          parser->copline = (line_t)(ps[-5].val.ival);
                        }
@@ -377,20 +377,20 @@ case 2:
     break;
 
   case 41:
-#line 385 "perly.y"
-                        { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); }
+#line 386 "perly.y"
+    { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); }
 
     break;
 
   case 42:
-#line 387 "perly.y"
-                        { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); }
+#line 388 "perly.y"
+    { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); }
 
     break;
 
   case 43:
-#line 389 "perly.y"
-                        {
+#line 390 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-5].val.ival),
                                  newWHILEOP(0, 1, NULL,
                                      (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival)));
@@ -400,8 +400,8 @@ case 2:
     break;
 
   case 44:
-#line 396 "perly.y"
-                        {
+#line 397 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-5].val.ival),
                                  newWHILEOP(0, 1, NULL,
                                      (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival)));
@@ -411,20 +411,20 @@ case 2:
     break;
 
   case 45:
-#line 403 "perly.y"
-                        { parser->expect = XTERM; }
+#line 404 "perly.y"
+    { parser->expect = XTERM; }
 
     break;
 
   case 46:
-#line 405 "perly.y"
-                        { parser->expect = XTERM; }
+#line 406 "perly.y"
+    { parser->expect = XTERM; }
 
     break;
 
   case 47:
-#line 408 "perly.y"
-                        {
+#line 409 "perly.y"
+    {
                          OP *initop = (ps[-9].val.opval);
                          OP *forop = newWHILEOP(0, 1, NULL,
                                      scalar((ps[-6].val.opval)), (ps[0].val.opval), (ps[-2].val.opval), (ps[-3].val.ival));
@@ -442,8 +442,8 @@ case 2:
     break;
 
   case 48:
-#line 423 "perly.y"
-                        {
+#line 424 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
                          parser->copline = (line_t)(ps[-8].val.ival);
                        }
@@ -451,8 +451,8 @@ case 2:
     break;
 
   case 49:
-#line 428 "perly.y"
-                        {
+#line 429 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0,
                                      op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
                          parser->copline = (line_t)(ps[-7].val.ival);
@@ -461,14 +461,14 @@ case 2:
     break;
 
   case 50:
-#line 434 "perly.y"
-                        { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
+#line 435 "perly.y"
+    { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
 
     break;
 
   case 51:
-#line 436 "perly.y"
-                        {
+#line 437 "perly.y"
+    {
                          (yyval.opval) = block_end(
                                (ps[-7].val.ival),
                                newFOROP(0,
@@ -484,8 +484,8 @@ case 2:
     break;
 
   case 52:
-#line 449 "perly.y"
-                        {
+#line 450 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(
                                0, op_lvalue(newUNOP(OP_REFGEN, 0,
                                                     (ps[-6].val.opval)),
@@ -496,8 +496,8 @@ case 2:
     break;
 
   case 53:
-#line 457 "perly.y"
-                        {
+#line 458 "perly.y"
+    {
                          (yyval.opval) = block_end((ps[-4].val.ival),
                                  newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
                          parser->copline = (line_t)(ps[-6].val.ival);
@@ -506,8 +506,29 @@ case 2:
     break;
 
   case 54:
-#line 463 "perly.y"
-                        {
+#line 464 "perly.y"
+    { parser->in_my = 1; }
+
+    break;
+
+  case 55:
+#line 466 "perly.y"
+    { parser->in_my = 0; intro_my(); }
+
+    break;
+
+  case 56:
+#line 468 "perly.y"
+    {
+                         (yyval.opval) = newTRYCATCHOP(0,
+                                 (ps[-8].val.opval), (ps[-3].val.opval), block_end((ps[-4].val.ival), op_scope((ps[0].val.opval))));
+                       }
+
+    break;
+
+  case 57:
+#line 473 "perly.y"
+    {
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, NULL,
                                  NULL, (ps[-1].val.opval), (ps[0].val.opval), 0);
@@ -515,9 +536,9 @@ case 2:
 
     break;
 
-  case 55:
-#line 469 "perly.y"
-                        {
+  case 58:
+#line 479 "perly.y"
+    {
                          package((ps[-2].val.opval));
                          if ((ps[-3].val.opval)) {
                              package_version((ps[-3].val.opval));
@@ -526,9 +547,9 @@ case 2:
 
     break;
 
-  case 56:
-#line 476 "perly.y"
-                        {
+  case 59:
+#line 486 "perly.y"
+    {
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, NULL,
                                  NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0);
@@ -538,35 +559,35 @@ case 2:
 
     break;
 
-  case 57:
-#line 484 "perly.y"
-                        {
+  case 60:
+#line 494 "perly.y"
+    {
                          (yyval.opval) = (ps[-1].val.opval);
                        }
 
     break;
 
-  case 58:
-#line 488 "perly.y"
-                        {
+  case 61:
+#line 498 "perly.y"
+    {
                          (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
                                newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
                        }
 
     break;
 
-  case 59:
-#line 493 "perly.y"
-                        {
+  case 62:
+#line 503 "perly.y"
+    {
                          (yyval.opval) = NULL;
                          parser->copline = NOLINE;
                        }
 
     break;
 
-  case 60:
-#line 501 "perly.y"
-                        { OP *list;
+  case 63:
+#line 511 "perly.y"
+    { OP *list;
                          if ((ps[0].val.opval)) {
                              OP *term = (ps[0].val.opval);
                              list = op_append_elem(OP_LIST, (ps[-1].val.opval), term);
@@ -583,241 +604,241 @@ case 2:
 
     break;
 
-  case 61:
-#line 518 "perly.y"
-                        { (yyval.opval) = NULL; }
-
-    break;
-
-  case 62:
-#line 520 "perly.y"
-                        { (yyval.opval) = op_unscope((ps[-1].val.opval)); }
-
-    break;
-
   case 64:
 #line 528 "perly.y"
-                        { (yyval.opval) = NULL; }
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 65:
 #line 530 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
-
-    break;
-
-  case 66:
-#line 532 "perly.y"
-                        { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
+    { (yyval.opval) = op_unscope((ps[-1].val.opval)); }
 
     break;
 
   case 67:
-#line 534 "perly.y"
-                        { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
+#line 538 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 68:
-#line 536 "perly.y"
-                        { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); }
+#line 540 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 69:
-#line 538 "perly.y"
-                        { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); }
+#line 542 "perly.y"
+    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
   case 70:
-#line 540 "perly.y"
-                        { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL);
-                         parser->copline = (line_t)(ps[-1].val.ival); }
+#line 544 "perly.y"
+    { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
   case 71:
-#line 543 "perly.y"
-                        { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); }
+#line 546 "perly.y"
+    { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); }
 
     break;
 
   case 72:
 #line 548 "perly.y"
-                        { (yyval.opval) = NULL; }
+    { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
   case 73:
 #line 550 "perly.y"
-                        {
-                         ((ps[0].val.opval))->op_flags |= OPf_PARENS;
-                         (yyval.opval) = op_scope((ps[0].val.opval));
-                       }
+    { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL);
+                         parser->copline = (line_t)(ps[-1].val.ival); }
 
     break;
 
   case 74:
-#line 555 "perly.y"
-                        { parser->copline = (line_t)(ps[-5].val.ival);
-                           (yyval.opval) = newCONDOP(0,
-                               newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)),
-                               op_scope((ps[-1].val.opval)), (ps[0].val.opval));
-                         PL_hints |= HINT_BLOCK_SCOPE;
-                       }
+#line 553 "perly.y"
+    { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); }
 
     break;
 
   case 75:
-#line 565 "perly.y"
-                        { (yyval.opval) = NULL; }
+#line 558 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 76:
-#line 567 "perly.y"
-                        { (yyval.opval) = op_scope((ps[0].val.opval)); }
+#line 560 "perly.y"
+    {
+                         ((ps[0].val.opval))->op_flags |= OPf_PARENS;
+                         (yyval.opval) = op_scope((ps[0].val.opval));
+                       }
 
     break;
 
   case 77:
-#line 572 "perly.y"
-                        { (yyval.ival) = (PL_min_intro_pending &&
-                           PL_max_intro_pending >=  PL_min_intro_pending);
-                         intro_my(); }
+#line 565 "perly.y"
+    { parser->copline = (line_t)(ps[-5].val.ival);
+                           (yyval.opval) = newCONDOP(0,
+                               newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)),
+                               op_scope((ps[-1].val.opval)), (ps[0].val.opval));
+                         PL_hints |= HINT_BLOCK_SCOPE;
+                       }
 
     break;
 
   case 78:
-#line 578 "perly.y"
-                        { (yyval.opval) = NULL; }
+#line 575 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 80:
-#line 584 "perly.y"
-                        { YYSTYPE tmplval;
-                         (void)scan_num("1", &tmplval);
-                         (yyval.opval) = tmplval.opval; }
+  case 79:
+#line 577 "perly.y"
+    { (yyval.opval) = op_scope((ps[0].val.opval)); }
 
     break;
 
-  case 82:
-#line 592 "perly.y"
-                        { (yyval.opval) = invert(scalar((ps[0].val.opval))); }
+  case 80:
+#line 582 "perly.y"
+    { (yyval.ival) = (PL_min_intro_pending &&
+                           PL_max_intro_pending >=  PL_min_intro_pending);
+                         intro_my(); }
 
     break;
 
-  case 83:
-#line 597 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); intro_my(); }
+  case 81:
+#line 588 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 84:
-#line 601 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); intro_my(); }
+  case 83:
+#line 594 "perly.y"
+    { YYSTYPE tmplval;
+                         (void)scan_num("1", &tmplval);
+                         (yyval.opval) = tmplval.opval; }
 
     break;
 
   case 85:
-#line 604 "perly.y"
-                                { (yyval.opval) = (ps[0].val.opval); }
+#line 602 "perly.y"
+    { (yyval.opval) = invert(scalar((ps[0].val.opval))); }
 
     break;
 
   case 86:
-#line 605 "perly.y"
-                        { (yyval.opval) = NULL; }
+#line 607 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); intro_my(); }
 
     break;
 
   case 87:
-#line 609 "perly.y"
-                        { (yyval.ival) = start_subparse(FALSE, 0);
-                           SAVEFREESV(PL_compcv); }
+#line 611 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); intro_my(); }
 
     break;
 
   case 88:
-#line 615 "perly.y"
-                        { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
-                           SAVEFREESV(PL_compcv); }
+#line 614 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 89:
-#line 620 "perly.y"
-                        { (yyval.ival) = start_subparse(TRUE, 0);
-                           SAVEFREESV(PL_compcv); }
+#line 615 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 92:
-#line 631 "perly.y"
-                        { (yyval.opval) = NULL; }
+  case 90:
+#line 619 "perly.y"
+    { (yyval.ival) = start_subparse(FALSE, 0);
+                           SAVEFREESV(PL_compcv); }
 
     break;
 
-  case 94:
-#line 637 "perly.y"
-                        { (yyval.opval) = NULL; }
+  case 91:
+#line 625 "perly.y"
+    { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
+                           SAVEFREESV(PL_compcv); }
 
     break;
 
-  case 95:
-#line 639 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+  case 92:
+#line 630 "perly.y"
+    { (yyval.ival) = start_subparse(TRUE, 0);
+                           SAVEFREESV(PL_compcv); }
 
     break;
 
-  case 96:
+  case 95:
 #line 641 "perly.y"
-                        { (yyval.opval) = NULL; }
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 97:
-#line 646 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 647 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 98:
-#line 648 "perly.y"
-                        { (yyval.opval) = NULL; }
+#line 649 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 99:
-#line 659 "perly.y"
-                        { parser->in_my = 0; (yyval.opval) = NULL; }
+#line 651 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 100:
-#line 661 "perly.y"
-                        { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); }
+#line 656 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 101:
-#line 666 "perly.y"
-                        { (yyval.ival) = '@'; }
+#line 658 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 102:
-#line 668 "perly.y"
-                        { (yyval.ival) = '%'; }
+#line 669 "perly.y"
+    { parser->in_my = 0; (yyval.opval) = NULL; }
 
     break;
 
   case 103:
-#line 672 "perly.y"
-                        {
+#line 671 "perly.y"
+    { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); }
+
+    break;
+
+  case 104:
+#line 676 "perly.y"
+    { (yyval.ival) = '@'; }
+
+    break;
+
+  case 105:
+#line 678 "perly.y"
+    { (yyval.ival) = '%'; }
+
+    break;
+
+  case 106:
+#line 682 "perly.y"
+    {
                             I32 sigil   = (ps[-2].val.ival);
                             OP *var     = (ps[-1].val.opval);
                             OP *defexpr = (ps[0].val.opval);
@@ -835,27 +856,27 @@ case 2:
 
     break;
 
-  case 104:
-#line 691 "perly.y"
-                        { (yyval.opval) = NULL; }
+  case 107:
+#line 701 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 105:
-#line 693 "perly.y"
-                        { (yyval.opval) = newOP(OP_NULL, 0); }
+  case 108:
+#line 703 "perly.y"
+    { (yyval.opval) = newOP(OP_NULL, 0); }
 
     break;
 
-  case 106:
-#line 695 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+  case 109:
+#line 705 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 107:
-#line 701 "perly.y"
-                        {
+  case 110:
+#line 711 "perly.y"
+    {
                             OP *var     = (ps[-1].val.opval);
                             OP *defexpr = (ps[0].val.opval);
 
@@ -918,71 +939,71 @@ case 2:
 
     break;
 
-  case 108:
-#line 766 "perly.y"
-                        { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
+  case 111:
+#line 776 "perly.y"
+    { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 109:
-#line 768 "perly.y"
-                        { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
+  case 112:
+#line 778 "perly.y"
+    { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 110:
-#line 774 "perly.y"
-                        { (yyval.opval) = (ps[-1].val.opval); }
+  case 113:
+#line 784 "perly.y"
+    { (yyval.opval) = (ps[-1].val.opval); }
 
     break;
 
-  case 111:
-#line 776 "perly.y"
-                        {
+  case 114:
+#line 786 "perly.y"
+    {
                          (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval));
                        }
 
     break;
 
-  case 112:
-#line 780 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+  case 115:
+#line 790 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 113:
-#line 785 "perly.y"
-                        { (yyval.opval) = NULL; }
+  case 116:
+#line 795 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 114:
-#line 787 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+  case 117:
+#line 797 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 115:
-#line 791 "perly.y"
-                        { (yyval.opval) = NULL; }
+  case 118:
+#line 801 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 116:
-#line 793 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+  case 119:
+#line 803 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 117:
-#line 797 "perly.y"
-                        { (yyval.opval) = (ps[-1].val.opval); }
+  case 120:
+#line 807 "perly.y"
+    { (yyval.opval) = (ps[-1].val.opval); }
 
     break;
 
-  case 118:
-#line 800 "perly.y"
-                        {
+  case 121:
+#line 810 "perly.y"
+    {
                             ENTER;
                             SAVEIV(parser->sig_elems);
                             SAVEIV(parser->sig_optelems);
@@ -995,9 +1016,9 @@ case 2:
 
     break;
 
-  case 119:
-#line 811 "perly.y"
-                        {
+  case 122:
+#line 821 "perly.y"
+    {
                             OP            *sigops = (ps[0].val.opval);
                             struct op_argcheck_aux *aux;
                             OP            *check;
@@ -1054,21 +1075,21 @@ case 2:
 
     break;
 
-  case 120:
-#line 868 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+  case 123:
+#line 878 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 121:
-#line 869 "perly.y"
-                                { (yyval.opval) = NULL; }
+  case 124:
+#line 879 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 122:
-#line 875 "perly.y"
-                        {
+  case 125:
+#line 885 "perly.y"
+    {
                          if (parser->copline > (line_t)(ps[-2].val.ival))
                              parser->copline = (line_t)(ps[-2].val.ival);
                          (yyval.opval) = block_end((ps[-3].val.ival), (ps[-1].val.opval));
@@ -1076,21 +1097,21 @@ case 2:
 
     break;
 
-  case 123:
-#line 885 "perly.y"
-                           { (yyval.opval) = (ps[0].val.opval); }
+  case 126:
+#line 895 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 124:
-#line 886 "perly.y"
-                                   { (yyval.opval) = NULL; }
+  case 127:
+#line 896 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 125:
-#line 890 "perly.y"
-                        {
+  case 128:
+#line 900 "perly.y"
+    {
                          if (parser->copline > (line_t)(ps[-2].val.ival))
                              parser->copline = (line_t)(ps[-2].val.ival);
                          (yyval.opval) = block_end((ps[-4].val.ival),
@@ -1099,52 +1120,52 @@ case 2:
 
     break;
 
-  case 126:
-#line 901 "perly.y"
-                        { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
+  case 129:
+#line 911 "perly.y"
+    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
-  case 127:
-#line 903 "perly.y"
-                        { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
+  case 130:
+#line 913 "perly.y"
+    { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
-  case 129:
-#line 909 "perly.y"
-                        { (yyval.opval) = (ps[-1].val.opval); }
+  case 132:
+#line 919 "perly.y"
+    { (yyval.opval) = (ps[-1].val.opval); }
 
     break;
 
-  case 130:
-#line 911 "perly.y"
-                        {
+  case 133:
+#line 921 "perly.y"
+    {
                          OP* term = (ps[0].val.opval);
                          (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term);
                        }
 
     break;
 
-  case 132:
-#line 920 "perly.y"
-                        { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED,
+  case 135:
+#line 930 "perly.y"
+    { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) );
                        }
 
     break;
 
-  case 133:
-#line 924 "perly.y"
-                        { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED,
+  case 136:
+#line 934 "perly.y"
+    { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) );
                        }
 
     break;
 
-  case 134:
-#line 928 "perly.y"
-                        { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
+  case 137:
+#line 938 "perly.y"
+    { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)),
                                    newMETHOP(OP_METHOD, 0, (ps[-3].val.opval))));
@@ -1152,18 +1173,18 @@ case 2:
 
     break;
 
-  case 135:
-#line 934 "perly.y"
-                        { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
+  case 138:
+#line 944 "perly.y"
+    { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, scalar((ps[-2].val.opval)),
                                    newMETHOP(OP_METHOD, 0, (ps[0].val.opval))));
                        }
 
     break;
 
-  case 136:
-#line 939 "perly.y"
-                        { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
+  case 139:
+#line 949 "perly.y"
+    { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)),
                                    newMETHOP(OP_METHOD, 0, (ps[-2].val.opval))));
@@ -1171,9 +1192,9 @@ case 2:
 
     break;
 
-  case 137:
-#line 945 "perly.y"
-                        { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
+  case 140:
+#line 955 "perly.y"
+    { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)),
                                    newMETHOP(OP_METHOD, 0, (ps[-4].val.opval))));
@@ -1181,97 +1202,97 @@ case 2:
 
     break;
 
-  case 138:
-#line 951 "perly.y"
-                        { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); }
+  case 141:
+#line 961 "perly.y"
+    { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
-  case 139:
-#line 953 "perly.y"
-                        { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
+  case 142:
+#line 963 "perly.y"
+    { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
 
     break;
 
-  case 140:
-#line 955 "perly.y"
-                        { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
+  case 143:
+#line 965 "perly.y"
+    { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
 
     break;
 
-  case 141:
-#line 957 "perly.y"
-                        { SvREFCNT_inc_simple_void(PL_compcv);
+  case 144:
+#line 967 "perly.y"
+    { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); }
 
     break;
 
-  case 142:
-#line 960 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+  case 145:
+#line 970 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 op_append_elem(OP_LIST,
                                   op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval)));
                        }
 
     break;
 
-  case 145:
-#line 975 "perly.y"
-                        { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); }
+  case 148:
+#line 985 "perly.y"
+    { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); }
 
     break;
 
-  case 146:
-#line 977 "perly.y"
-                        { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval)));
+  case 149:
+#line 987 "perly.y"
+    { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval)));
                        }
 
     break;
 
-  case 147:
-#line 980 "perly.y"
-                        { (yyval.opval) = newBINOP(OP_AELEM, 0,
+  case 150:
+#line 990 "perly.y"
+    { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[-4].val.opval)),OP_RV2AV),
                                        scalar((ps[-1].val.opval)));
                        }
 
     break;
 
-  case 148:
-#line 985 "perly.y"
-                        { (yyval.opval) = newBINOP(OP_AELEM, 0,
+  case 151:
+#line 995 "perly.y"
+    { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[-3].val.opval)),OP_RV2AV),
                                        scalar((ps[-1].val.opval)));
                        }
 
     break;
 
-  case 149:
-#line 990 "perly.y"
-                        { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval)));
+  case 152:
+#line 1000 "perly.y"
+    { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval)));
                        }
 
     break;
 
-  case 150:
-#line 993 "perly.y"
-                        { (yyval.opval) = newBINOP(OP_HELEM, 0,
+  case 153:
+#line 1003 "perly.y"
+    { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[-5].val.opval)),OP_RV2HV),
                                        jmaybe((ps[-2].val.opval))); }
 
     break;
 
-  case 151:
-#line 997 "perly.y"
-                        { (yyval.opval) = newBINOP(OP_HELEM, 0,
+  case 154:
+#line 1007 "perly.y"
+    { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[-4].val.opval)),OP_RV2HV),
                                        jmaybe((ps[-2].val.opval))); }
 
     break;
 
-  case 152:
-#line 1001 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+  case 155:
+#line 1011 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[-3].val.opval))));
                          if (parser->expect == XBLOCK)
                              parser->expect = XOPERATOR;
@@ -1279,9 +1300,9 @@ case 2:
 
     break;
 
-  case 153:
-#line 1007 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+  case 156:
+#line 1017 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   op_append_elem(OP_LIST, (ps[-1].val.opval),
                                       newCVREF(0, scalar((ps[-4].val.opval)))));
                          if (parser->expect == XBLOCK)
@@ -1290,9 +1311,9 @@ case 2:
 
     break;
 
-  case 154:
-#line 1015 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+  case 157:
+#line 1025 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   op_append_elem(OP_LIST, (ps[-1].val.opval),
                                               newCVREF(0, scalar((ps[-3].val.opval)))));
                          if (parser->expect == XBLOCK)
@@ -1301,9 +1322,9 @@ case 2:
 
     break;
 
-  case 155:
-#line 1022 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+  case 158:
+#line 1032 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[-2].val.opval))));
                          if (parser->expect == XBLOCK)
                              parser->expect = XOPERATOR;
@@ -1311,387 +1332,387 @@ case 2:
 
     break;
 
-  case 156:
-#line 1028 "perly.y"
-                        { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); }
-
-    break;
-
-  case 157:
-#line 1030 "perly.y"
-                        { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); }
-
-    break;
-
-  case 158:
-#line 1032 "perly.y"
-                        { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); }
-
-    break;
-
   case 159:
-#line 1037 "perly.y"
-                        { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); }
+#line 1038 "perly.y"
+    { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); }
 
     break;
 
   case 160:
-#line 1039 "perly.y"
-                        { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 1040 "perly.y"
+    { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); }
 
     break;
 
   case 161:
-#line 1041 "perly.y"
-                        {   if ((ps[-1].val.ival) != OP_REPEAT)
-                               scalar((ps[-2].val.opval));
-                           (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval)));
-                       }
+#line 1042 "perly.y"
+    { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); }
 
     break;
 
   case 162:
-#line 1046 "perly.y"
-                        { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 1047 "perly.y"
+    { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); }
 
     break;
 
   case 163:
-#line 1048 "perly.y"
-                        { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 1049 "perly.y"
+    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 164:
-#line 1050 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1051 "perly.y"
+    {   if ((ps[-1].val.ival) != OP_REPEAT)
+                               scalar((ps[-2].val.opval));
+                           (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval)));
+                       }
 
     break;
 
   case 165:
-#line 1052 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1056 "perly.y"
+    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 166:
-#line 1054 "perly.y"
-                        { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 1058 "perly.y"
+    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 167:
-#line 1056 "perly.y"
-                        { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 1060 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 168:
-#line 1058 "perly.y"
-                        { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 1062 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 169:
-#line 1060 "perly.y"
-                        { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 1064 "perly.y"
+    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 170:
-#line 1062 "perly.y"
-                        { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 1066 "perly.y"
+    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 171:
-#line 1064 "perly.y"
-                        { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 1068 "perly.y"
+    { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 172:
-#line 1066 "perly.y"
-                        { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 1070 "perly.y"
+    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 173:
-#line 1070 "perly.y"
-                        { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
+#line 1072 "perly.y"
+    { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 174:
-#line 1072 "perly.y"
-                        { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 1074 "perly.y"
+    { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 175:
-#line 1074 "perly.y"
-                        { yyerror("syntax error"); YYERROR; }
+#line 1076 "perly.y"
+    { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 176:
-#line 1076 "perly.y"
-                        { yyerror("syntax error"); YYERROR; }
+#line 1080 "perly.y"
+    { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
 
     break;
 
   case 177:
-#line 1080 "perly.y"
-                        { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 1082 "perly.y"
+    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 178:
-#line 1082 "perly.y"
-                        { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 1084 "perly.y"
+    { yyerror("syntax error"); YYERROR; }
 
     break;
 
   case 179:
 #line 1086 "perly.y"
-                        { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
+    { yyerror("syntax error"); YYERROR; }
 
     break;
 
   case 180:
-#line 1088 "perly.y"
-                        { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 1090 "perly.y"
+    { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 181:
-#line 1090 "perly.y"
-                        { yyerror("syntax error"); YYERROR; }
+#line 1092 "perly.y"
+    { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 182:
-#line 1092 "perly.y"
-                        { yyerror("syntax error"); YYERROR; }
+#line 1096 "perly.y"
+    { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
 
     break;
 
   case 183:
-#line 1096 "perly.y"
-                        { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 1098 "perly.y"
+    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 184:
-#line 1098 "perly.y"
-                        { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 1100 "perly.y"
+    { yyerror("syntax error"); YYERROR; }
 
     break;
 
   case 185:
-#line 1103 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
+#line 1102 "perly.y"
+    { yyerror("syntax error"); YYERROR; }
 
     break;
 
   case 186:
-#line 1105 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1106 "perly.y"
+    { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 187:
 #line 1108 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
+    { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 188:
-#line 1110 "perly.y"
-                        { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
+#line 1113 "perly.y"
+    { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 189:
-#line 1112 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_POSTINC, 0,
-                                       op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); }
+#line 1115 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 190:
-#line 1115 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
-                                       op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));}
+#line 1118 "perly.y"
+    { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 191:
-#line 1118 "perly.y"
-                        { (yyval.opval) = op_convert_list(OP_JOIN, 0,
-                                      op_append_elem(
-                                       OP_LIST,
-                                       newSVREF(scalar(
-                                           newSVOP(OP_CONST,0,
-                                                   newSVpvs("\""))
-                                       )),
-                                       (ps[-1].val.opval)
-                                      ));
-                       }
+#line 1120 "perly.y"
+    { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 192:
-#line 1129 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_PREINC, 0,
-                                       op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); }
+#line 1122 "perly.y"
+    { (yyval.opval) = newUNOP(OP_POSTINC, 0,
+                                       op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); }
 
     break;
 
   case 193:
-#line 1132 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_PREDEC, 0,
-                                       op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); }
+#line 1125 "perly.y"
+    { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
+                                       op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));}
 
     break;
 
   case 194:
-#line 1139 "perly.y"
-                        { (yyval.opval) = newANONLIST((ps[-1].val.opval)); }
+#line 1128 "perly.y"
+    { (yyval.opval) = op_convert_list(OP_JOIN, 0,
+                                      op_append_elem(
+                                       OP_LIST,
+                                       newSVREF(scalar(
+                                           newSVOP(OP_CONST,0,
+                                                   newSVpvs("\""))
+                                       )),
+                                       (ps[-1].val.opval)
+                                      ));
+                       }
 
     break;
 
   case 195:
-#line 1141 "perly.y"
-                        { (yyval.opval) = newANONLIST(NULL);}
+#line 1139 "perly.y"
+    { (yyval.opval) = newUNOP(OP_PREINC, 0,
+                                       op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); }
 
     break;
 
   case 196:
-#line 1143 "perly.y"
-                        { (yyval.opval) = newANONHASH((ps[-2].val.opval)); }
+#line 1142 "perly.y"
+    { (yyval.opval) = newUNOP(OP_PREDEC, 0,
+                                       op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); }
 
     break;
 
   case 197:
-#line 1145 "perly.y"
-                        { (yyval.opval) = newANONHASH(NULL); }
+#line 1149 "perly.y"
+    { (yyval.opval) = newANONLIST((ps[-1].val.opval)); }
 
     break;
 
   case 198:
-#line 1147 "perly.y"
-                        { SvREFCNT_inc_simple_void(PL_compcv);
-                         (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); }
+#line 1151 "perly.y"
+    { (yyval.opval) = newANONLIST(NULL);}
 
     break;
 
   case 199:
-#line 1150 "perly.y"
-                        { SvREFCNT_inc_simple_void(PL_compcv);
-                         (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); }
+#line 1153 "perly.y"
+    { (yyval.opval) = newANONHASH((ps[-2].val.opval)); }
 
     break;
 
   case 200:
-#line 1156 "perly.y"
-                        { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));}
+#line 1155 "perly.y"
+    { (yyval.opval) = newANONHASH(NULL); }
 
     break;
 
   case 201:
-#line 1158 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));}
+#line 1157 "perly.y"
+    { SvREFCNT_inc_simple_void(PL_compcv);
+                         (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); }
 
     break;
 
-  case 206:
-#line 1166 "perly.y"
-                        { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
+  case 202:
+#line 1160 "perly.y"
+    { SvREFCNT_inc_simple_void(PL_compcv);
+                         (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); }
 
     break;
 
-  case 207:
-#line 1168 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
+  case 203:
+#line 1166 "perly.y"
+    { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));}
 
     break;
 
-  case 208:
-#line 1170 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); }
+  case 204:
+#line 1168 "perly.y"
+    { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));}
 
     break;
 
   case 209:
-#line 1172 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1176 "perly.y"
+    { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 210:
-#line 1174 "perly.y"
-                        { (yyval.opval) = localize((ps[0].val.opval),0); }
+#line 1178 "perly.y"
+    { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
 
     break;
 
   case 211:
-#line 1176 "perly.y"
-                        { (yyval.opval) = sawparens((ps[-1].val.opval)); }
+#line 1180 "perly.y"
+    { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); }
 
     break;
 
   case 212:
-#line 1178 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1182 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 213:
-#line 1180 "perly.y"
-                        { (yyval.opval) = sawparens(newNULLLIST()); }
+#line 1184 "perly.y"
+    { (yyval.opval) = localize((ps[0].val.opval),0); }
 
     break;
 
   case 214:
-#line 1182 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1186 "perly.y"
+    { (yyval.opval) = sawparens((ps[-1].val.opval)); }
 
     break;
 
   case 215:
-#line 1184 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1188 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 216:
-#line 1186 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1190 "perly.y"
+    { (yyval.opval) = sawparens(newNULLLIST()); }
 
     break;
 
   case 217:
-#line 1188 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1192 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 218:
-#line 1190 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
+#line 1194 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 219:
-#line 1192 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1196 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 220:
-#line 1194 "perly.y"
-                        { (yyval.opval) = op_prepend_elem(OP_ASLICE,
+#line 1198 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
+
+    break;
+
+  case 221:
+#line 1200 "perly.y"
+    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
+
+    break;
+
+  case 222:
+#line 1202 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
+
+    break;
+
+  case 223:
+#line 1204 "perly.y"
+    { (yyval.opval) = op_prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
                                        list((ps[-1].val.opval)),
@@ -1703,9 +1724,9 @@ case 2:
 
     break;
 
-  case 221:
-#line 1204 "perly.y"
-                        { (yyval.opval) = op_prepend_elem(OP_KVASLICE,
+  case 224:
+#line 1214 "perly.y"
+    { (yyval.opval) = op_prepend_elem(OP_KVASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_KVASLICE, 0,
                                        list((ps[-1].val.opval)),
@@ -1717,9 +1738,9 @@ case 2:
 
     break;
 
-  case 222:
-#line 1214 "perly.y"
-                        { (yyval.opval) = op_prepend_elem(OP_HSLICE,
+  case 225:
+#line 1224 "perly.y"
+    { (yyval.opval) = op_prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
                                        list((ps[-2].val.opval)),
@@ -1731,9 +1752,9 @@ case 2:
 
     break;
 
-  case 223:
-#line 1224 "perly.y"
-                        { (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
+  case 226:
+#line 1234 "perly.y"
+    { (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_KVHSLICE, 0,
                                        list((ps[-2].val.opval)),
@@ -1745,378 +1766,377 @@ case 2:
 
     break;
 
-  case 224:
-#line 1234 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
-
-    break;
-
-  case 225:
-#line 1236 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); }
-
-    break;
-
-  case 226:
-#line 1238 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval)));
-                       }
-
-    break;
-
   case 227:
-#line 1241 "perly.y"
-                        {
-                         (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
-                               op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval))));
-                       }
+#line 1244 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 228:
 #line 1246 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
-                           op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval))));
-                       }
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 229:
-#line 1250 "perly.y"
-                        { (yyval.opval) = newSVREF((ps[-3].val.opval)); }
+#line 1248 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval)));
+                       }
 
     break;
 
   case 230:
-#line 1252 "perly.y"
-                        { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
+#line 1251 "perly.y"
+    {
+                         (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+                               op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval))));
+                       }
 
     break;
 
   case 231:
-#line 1254 "perly.y"
-                        { (yyval.opval) = newHVREF((ps[-3].val.opval)); }
+#line 1256 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+                           op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval))));
+                       }
 
     break;
 
   case 232:
-#line 1256 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
-                                      scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); }
+#line 1260 "perly.y"
+    { (yyval.opval) = newSVREF((ps[-3].val.opval)); }
 
     break;
 
   case 233:
-#line 1259 "perly.y"
-                        { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); }
+#line 1262 "perly.y"
+    { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
 
     break;
 
   case 234:
-#line 1261 "perly.y"
-                        { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL);
-                           PL_hints |= HINT_BLOCK_SCOPE; }
+#line 1264 "perly.y"
+    { (yyval.opval) = newHVREF((ps[-3].val.opval)); }
 
     break;
 
   case 235:
-#line 1264 "perly.y"
-                        { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); }
+#line 1266 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
+                                      scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); }
 
     break;
 
   case 236:
-#line 1266 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
+#line 1269 "perly.y"
+    { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); }
 
     break;
 
   case 237:
-#line 1268 "perly.y"
-                        { (yyval.opval) = newOP((ps[0].val.ival), 0); }
+#line 1271 "perly.y"
+    { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL);
+                           PL_hints |= HINT_BLOCK_SCOPE; }
 
     break;
 
   case 238:
-#line 1270 "perly.y"
-                        { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
+#line 1274 "perly.y"
+    { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); }
 
     break;
 
   case 239:
-#line 1272 "perly.y"
-                        { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
+#line 1276 "perly.y"
+    { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 240:
-#line 1274 "perly.y"
-                        { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); }
+#line 1278 "perly.y"
+    { (yyval.opval) = newOP((ps[0].val.ival), 0); }
 
     break;
 
   case 241:
-#line 1276 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); }
+#line 1280 "perly.y"
+    { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
   case 242:
-#line 1278 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
+#line 1282 "perly.y"
+    { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
   case 243:
-#line 1280 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
-                           op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); }
+#line 1284 "perly.y"
+    { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); }
 
     break;
 
   case 244:
-#line 1283 "perly.y"
-                        { (yyval.opval) = newOP((ps[0].val.ival), 0); }
+#line 1286 "perly.y"
+    { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); }
 
     break;
 
   case 245:
-#line 1285 "perly.y"
-                        { (yyval.opval) = newOP((ps[-2].val.ival), 0);}
+#line 1288 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
 
     break;
 
   case 246:
-#line 1287 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1290 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+                           op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); }
 
     break;
 
   case 247:
-#line 1289 "perly.y"
-                        { (yyval.opval) = (ps[-2].val.opval); }
+#line 1293 "perly.y"
+    { (yyval.opval) = newOP((ps[0].val.ival), 0); }
 
     break;
 
   case 248:
-#line 1291 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
+#line 1295 "perly.y"
+    { (yyval.opval) = newOP((ps[-2].val.ival), 0);}
 
     break;
 
   case 249:
-#line 1293 "perly.y"
-                        { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT)
-                          ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0)))
-                          : newOP((ps[-2].val.ival), OPf_SPECIAL); }
+#line 1297 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 250:
-#line 1297 "perly.y"
-                        { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
+#line 1299 "perly.y"
+    { (yyval.opval) = (ps[-2].val.opval); }
 
     break;
 
   case 251:
-#line 1299 "perly.y"
-                        {
-                           if (   (ps[0].val.opval)->op_type != OP_TRANS
-                               && (ps[0].val.opval)->op_type != OP_TRANSR
-                               && (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV))
-                           {
-                               (yyval.ival) = start_subparse(FALSE, CVf_ANON);
-                               SAVEFREESV(PL_compcv);
-                           } else
-                               (yyval.ival) = 0;
-                       }
+#line 1301 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
 
     break;
 
   case 252:
-#line 1310 "perly.y"
-                        { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); }
+#line 1303 "perly.y"
+    { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT)
+                          ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0)))
+                          : newOP((ps[-2].val.ival), OPf_SPECIAL); }
 
     break;
 
-  case 256:
-#line 1318 "perly.y"
-                        { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); }
+  case 253:
+#line 1307 "perly.y"
+    { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
 
     break;
 
-  case 257:
-#line 1320 "perly.y"
-                        { (yyval.opval) = localize((ps[0].val.opval),1); }
+  case 254:
+#line 1309 "perly.y"
+    {
+                           if (   (ps[0].val.opval)->op_type != OP_TRANS
+                               && (ps[0].val.opval)->op_type != OP_TRANSR
+                               && (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV))
+                           {
+                               (yyval.ival) = start_subparse(FALSE, CVf_ANON);
+                               SAVEFREESV(PL_compcv);
+                           } else
+                               (yyval.ival) = 0;
+                       }
 
     break;
 
-  case 258:
-#line 1322 "perly.y"
-                        { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); }
+  case 255:
+#line 1320 "perly.y"
+    { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); }
 
     break;
 
   case 259:
-#line 1327 "perly.y"
-                        { (yyval.opval) = sawparens((ps[-1].val.opval)); }
+#line 1328 "perly.y"
+    { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); }
 
     break;
 
   case 260:
-#line 1329 "perly.y"
-                        { (yyval.opval) = sawparens(newNULLLIST()); }
+#line 1330 "perly.y"
+    { (yyval.opval) = localize((ps[0].val.opval),1); }
 
     break;
 
   case 261:
 #line 1332 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+    { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); }
 
     break;
 
   case 262:
-#line 1334 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1337 "perly.y"
+    { (yyval.opval) = sawparens((ps[-1].val.opval)); }
 
     break;
 
   case 263:
-#line 1336 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1339 "perly.y"
+    { (yyval.opval) = sawparens(newNULLLIST()); }
 
     break;
 
   case 264:
-#line 1341 "perly.y"
-                        { (yyval.opval) = NULL; }
+#line 1342 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 265:
-#line 1343 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1344 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 266:
-#line 1347 "perly.y"
-                        { (yyval.opval) = NULL; }
+#line 1346 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 267:
-#line 1349 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1351 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 268:
 #line 1353 "perly.y"
-                        { (yyval.opval) = NULL; }
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 269:
-#line 1355 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+#line 1357 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
   case 270:
-#line 1361 "perly.y"
-                        { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
+#line 1359 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 278:
-#line 1378 "perly.y"
-                        { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
+  case 271:
+#line 1363 "perly.y"
+    { (yyval.opval) = NULL; }
 
     break;
 
-  case 279:
-#line 1382 "perly.y"
-                        { (yyval.opval) = newSVREF((ps[0].val.opval)); }
+  case 272:
+#line 1365 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 280:
-#line 1386 "perly.y"
-                        { (yyval.opval) = newAVREF((ps[0].val.opval));
-                         if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
-                       }
+  case 273:
+#line 1371 "perly.y"
+    { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
 
     break;
 
   case 281:
-#line 1392 "perly.y"
-                        { (yyval.opval) = newHVREF((ps[0].val.opval));
-                         if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
-                       }
+#line 1388 "perly.y"
+    { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
 
     break;
 
   case 282:
-#line 1398 "perly.y"
-                        { (yyval.opval) = newAVREF((ps[0].val.opval)); }
+#line 1392 "perly.y"
+    { (yyval.opval) = newSVREF((ps[0].val.opval)); }
 
     break;
 
   case 283:
-#line 1400 "perly.y"
-                        { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
+#line 1396 "perly.y"
+    { (yyval.opval) = newAVREF((ps[0].val.opval));
+                         if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
+                       }
 
     break;
 
   case 284:
-#line 1404 "perly.y"
-                        { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
+#line 1402 "perly.y"
+    { (yyval.opval) = newHVREF((ps[0].val.opval));
+                         if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
+                       }
+
+    break;
+
+  case 285:
+#line 1408 "perly.y"
+    { (yyval.opval) = newAVREF((ps[0].val.opval)); }
 
     break;
 
   case 286:
-#line 1409 "perly.y"
-                        { (yyval.opval) = newAVREF((ps[-2].val.opval)); }
+#line 1410 "perly.y"
+    { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
 
     break;
 
-  case 288:
+  case 287:
 #line 1414 "perly.y"
-                        { (yyval.opval) = newHVREF((ps[-2].val.opval)); }
+    { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
 
     break;
 
-  case 290:
+  case 289:
 #line 1419 "perly.y"
-                        { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
+    { (yyval.opval) = newAVREF((ps[-2].val.opval)); }
 
     break;
 
   case 291:
 #line 1424 "perly.y"
-                        { (yyval.opval) = scalar((ps[0].val.opval)); }
+    { (yyval.opval) = newHVREF((ps[-2].val.opval)); }
 
     break;
 
-  case 292:
-#line 1426 "perly.y"
-                        { (yyval.opval) = scalar((ps[0].val.opval)); }
+  case 293:
+#line 1429 "perly.y"
+    { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
 
     break;
 
-  case 293:
-#line 1428 "perly.y"
-                        { (yyval.opval) = op_scope((ps[0].val.opval)); }
+  case 294:
+#line 1434 "perly.y"
+    { (yyval.opval) = scalar((ps[0].val.opval)); }
 
     break;
 
-  case 294:
-#line 1431 "perly.y"
-                        { (yyval.opval) = (ps[0].val.opval); }
+  case 295:
+#line 1436 "perly.y"
+    { (yyval.opval) = scalar((ps[0].val.opval)); }
+
+    break;
+
+  case 296:
+#line 1438 "perly.y"
+    { (yyval.opval) = op_scope((ps[0].val.opval)); }
 
     break;
 
+  case 297:
+#line 1441 "perly.y"
+    { (yyval.opval) = (ps[0].val.opval); }
+
+    break;
 
 
 
@@ -2124,6 +2144,6 @@ case 2:
     
 
 /* Generated from:
- * 9a5909b0af5f61f96907e330008f3cdc9dadcab1417c5bcb188cb3b9f6593c01 perly.y
+ * 427b422b0ce1154d834dc461973a3254729575694f98ab600032f67ccab7b9e5 perly.y
  * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.h b/perly.h
index a928631..545cf3f 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -4,14 +4,14 @@
    Any changes made here will be lost!
  */
 
-#define PERL_BISON_VERSION  30005
+#define PERL_BISON_VERSION  30003
 
 #ifdef PERL_CORE
-/* A Bison parser, made by GNU Bison 3.5.1.  */
+/* A Bison parser, made by GNU Bison 3.3.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -111,59 +111,61 @@ extern int yydebug;
     GIVEN = 310,
     WHEN = 311,
     DEFAULT = 312,
-    LOOPEX = 313,
-    DOTDOT = 314,
-    YADAYADA = 315,
-    FUNC0 = 316,
-    FUNC1 = 317,
-    FUNC = 318,
-    UNIOP = 319,
-    LSTOP = 320,
-    MULOP = 321,
-    ADDOP = 322,
-    DOLSHARP = 323,
-    DO = 324,
-    HASHBRACK = 325,
-    NOAMP = 326,
-    LOCAL = 327,
-    MY = 328,
-    REQUIRE = 329,
-    COLONATTR = 330,
-    FORMLBRACK = 331,
-    FORMRBRACK = 332,
-    SUBLEXSTART = 333,
-    SUBLEXEND = 334,
-    PREC_LOW = 335,
-    OROP = 336,
-    ANDOP = 337,
-    NOTOP = 338,
-    ASSIGNOP = 339,
-    PERLY_QUESTION_MARK = 340,
-    PERLY_COLON = 341,
-    OROR = 342,
-    DORDOR = 343,
-    ANDAND = 344,
-    BITOROP = 345,
-    BITANDOP = 346,
-    CHEQOP = 347,
-    NCEQOP = 348,
-    CHRELOP = 349,
-    NCRELOP = 350,
-    SHIFTOP = 351,
-    MATCHOP = 352,
-    PERLY_EXCLAMATION_MARK = 353,
-    PERLY_TILDE = 354,
-    UMINUS = 355,
-    REFGEN = 356,
-    POWOP = 357,
-    PREINC = 358,
-    PREDEC = 359,
-    POSTINC = 360,
-    POSTDEC = 361,
-    POSTJOIN = 362,
-    ARROW = 363,
-    PERLY_PAREN_CLOSE = 364,
-    PERLY_PAREN_OPEN = 365
+    TRY = 313,
+    CATCH = 314,
+    LOOPEX = 315,
+    DOTDOT = 316,
+    YADAYADA = 317,
+    FUNC0 = 318,
+    FUNC1 = 319,
+    FUNC = 320,
+    UNIOP = 321,
+    LSTOP = 322,
+    MULOP = 323,
+    ADDOP = 324,
+    DOLSHARP = 325,
+    DO = 326,
+    HASHBRACK = 327,
+    NOAMP = 328,
+    LOCAL = 329,
+    MY = 330,
+    REQUIRE = 331,
+    COLONATTR = 332,
+    FORMLBRACK = 333,
+    FORMRBRACK = 334,
+    SUBLEXSTART = 335,
+    SUBLEXEND = 336,
+    PREC_LOW = 337,
+    OROP = 338,
+    ANDOP = 339,
+    NOTOP = 340,
+    ASSIGNOP = 341,
+    PERLY_QUESTION_MARK = 342,
+    PERLY_COLON = 343,
+    OROR = 344,
+    DORDOR = 345,
+    ANDAND = 346,
+    BITOROP = 347,
+    BITANDOP = 348,
+    CHEQOP = 349,
+    NCEQOP = 350,
+    CHRELOP = 351,
+    NCRELOP = 352,
+    SHIFTOP = 353,
+    MATCHOP = 354,
+    PERLY_EXCLAMATION_MARK = 355,
+    PERLY_TILDE = 356,
+    UMINUS = 357,
+    REFGEN = 358,
+    POWOP = 359,
+    PREINC = 360,
+    PREDEC = 361,
+    POSTINC = 362,
+    POSTDEC = 363,
+    POSTJOIN = 364,
+    ARROW = 365,
+    PERLY_PAREN_CLOSE = 366,
+    PERLY_PAREN_OPEN = 367
   };
 #endif
 
@@ -193,6 +195,7 @@ S_is_opval_token(int type) {
 #endif /* PERL_IN_TOKE_C */
 #endif /* PERL_CORE */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
 union YYSTYPE
 {
 
@@ -202,8 +205,8 @@ union YYSTYPE
     OP *opval;
     GV *gvval;
 
-
 };
+
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -215,6 +218,6 @@ int yyparse (void);
 
 
 /* Generated from:
- * 9a5909b0af5f61f96907e330008f3cdc9dadcab1417c5bcb188cb3b9f6593c01 perly.y
+ * 427b422b0ce1154d834dc461973a3254729575694f98ab600032f67ccab7b9e5 perly.y
  * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl
  * ex: set ro: */
index d615eb0..91a88c5 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -6,29 +6,28 @@
 
 #define YYFINAL  16
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3128
+#define YYLAST   3177
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  111
+#define YYNTOKENS  113
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  97
+#define YYNNTS  99
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  294
+#define YYNRULES  297
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  571
+#define YYNSTATES  581
 
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   365
-
+#define YYMAXUTOK   367
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex, with out-of-bounds checking.  */
 #define YYTRANSLATE(YYX)                                                \
-  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex.  */
-static const yytype_int8 yytranslate[] =
+static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -66,43 +65,43 @@ static const yytype_int8 yytranslate[] =
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110
+     105,   106,   107,   108,   109,   110,   111,   112
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_int16 yyrline[] =
+static const yytype_uint16 yyrline[] =
 {
-       0,   137,   137,   136,   148,   147,   158,   157,   171,   170,
-     184,   183,   197,   196,   207,   206,   219,   227,   234,   239,
-     246,   252,   254,   263,   265,   274,   278,   282,   289,   299,
-     301,   314,   311,   335,   330,   351,   359,   358,   367,   373,
-     379,   384,   386,   388,   395,   403,   405,   402,   422,   427,
-     434,   433,   448,   456,   462,   469,   468,   483,   487,   492,
-     500,   517,   519,   523,   527,   529,   531,   533,   535,   537,
-     539,   542,   547,   549,   554,   564,   566,   571,   577,   579,
-     583,   587,   591,   596,   600,   604,   605,   608,   614,   619,
-     625,   626,   630,   632,   636,   638,   640,   645,   647,   658,
-     660,   665,   667,   671,   690,   692,   694,   700,   765,   767,
-     773,   775,   779,   784,   786,   790,   792,   796,   800,   800,
-     868,   869,   874,   885,   886,   889,   900,   902,   904,   908,
-     910,   915,   919,   923,   927,   933,   938,   944,   950,   952,
-     954,   957,   956,   967,   968,   972,   976,   979,   984,   989,
-     992,   996,  1000,  1006,  1014,  1021,  1027,  1029,  1031,  1036,
-    1038,  1040,  1045,  1047,  1049,  1051,  1053,  1055,  1057,  1059,
-    1061,  1063,  1065,  1069,  1071,  1073,  1075,  1079,  1081,  1085,
-    1087,  1089,  1091,  1095,  1097,  1102,  1104,  1107,  1109,  1111,
-    1114,  1117,  1128,  1131,  1138,  1140,  1142,  1144,  1146,  1149,
-    1155,  1157,  1161,  1162,  1163,  1164,  1165,  1167,  1169,  1171,
-    1173,  1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,
-    1193,  1203,  1213,  1223,  1233,  1235,  1237,  1240,  1245,  1249,
-    1251,  1253,  1255,  1258,  1260,  1263,  1265,  1267,  1269,  1271,
-    1273,  1275,  1277,  1279,  1282,  1284,  1286,  1288,  1290,  1292,
-    1296,  1299,  1298,  1311,  1312,  1313,  1317,  1319,  1321,  1326,
-    1328,  1331,  1333,  1335,  1340,  1342,  1346,  1348,  1352,  1354,
-    1360,  1364,  1365,  1366,  1369,  1370,  1373,  1374,  1377,  1381,
-    1385,  1391,  1397,  1399,  1403,  1407,  1408,  1412,  1413,  1417,
-    1418,  1423,  1425,  1427,  1430
+       0,   138,   138,   137,   149,   148,   159,   158,   172,   171,
+     185,   184,   198,   197,   208,   207,   220,   228,   235,   240,
+     247,   253,   255,   264,   266,   275,   279,   283,   290,   300,
+     302,   315,   312,   336,   331,   352,   360,   359,   368,   374,
+     380,   385,   387,   389,   396,   404,   406,   403,   423,   428,
+     435,   434,   449,   457,   464,   466,   463,   472,   479,   478,
+     493,   497,   502,   510,   527,   529,   533,   537,   539,   541,
+     543,   545,   547,   549,   552,   557,   559,   564,   574,   576,
+     581,   587,   589,   593,   597,   601,   606,   610,   614,   615,
+     618,   624,   629,   635,   636,   640,   642,   646,   648,   650,
+     655,   657,   668,   670,   675,   677,   681,   700,   702,   704,
+     710,   775,   777,   783,   785,   789,   794,   796,   800,   802,
+     806,   810,   810,   878,   879,   884,   895,   896,   899,   910,
+     912,   914,   918,   920,   925,   929,   933,   937,   943,   948,
+     954,   960,   962,   964,   967,   966,   977,   978,   982,   986,
+     989,   994,   999,  1002,  1006,  1010,  1016,  1024,  1031,  1037,
+    1039,  1041,  1046,  1048,  1050,  1055,  1057,  1059,  1061,  1063,
+    1065,  1067,  1069,  1071,  1073,  1075,  1079,  1081,  1083,  1085,
+    1089,  1091,  1095,  1097,  1099,  1101,  1105,  1107,  1112,  1114,
+    1117,  1119,  1121,  1124,  1127,  1138,  1141,  1148,  1150,  1152,
+    1154,  1156,  1159,  1165,  1167,  1171,  1172,  1173,  1174,  1175,
+    1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,  1195,
+    1197,  1199,  1201,  1203,  1213,  1223,  1233,  1243,  1245,  1247,
+    1250,  1255,  1259,  1261,  1263,  1265,  1268,  1270,  1273,  1275,
+    1277,  1279,  1281,  1283,  1285,  1287,  1289,  1292,  1294,  1296,
+    1298,  1300,  1302,  1306,  1309,  1308,  1321,  1322,  1323,  1327,
+    1329,  1331,  1336,  1338,  1341,  1343,  1345,  1350,  1352,  1356,
+    1358,  1362,  1364,  1370,  1374,  1375,  1376,  1379,  1380,  1383,
+    1384,  1387,  1391,  1395,  1401,  1407,  1409,  1413,  1417,  1418,
+    1422,  1423,  1427,  1428,  1433,  1435,  1437,  1440
 };
 #endif
 
@@ -122,38 +121,38 @@ static const char *const yytname[] =
   "LSTOPSUB", "PLUGEXPR", "PLUGSTMT", "LABEL", "FORMAT", "SUB", "SIGSUB",
   "ANONSUB", "ANON_SIGSUB", "PACKAGE", "USE", "WHILE", "UNTIL", "IF",
   "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHEN", "DEFAULT",
-  "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP",
-  "LSTOP", "MULOP", "ADDOP", "DOLSHARP", "DO", "HASHBRACK", "NOAMP",
-  "LOCAL", "MY", "REQUIRE", "COLONATTR", "FORMLBRACK", "FORMRBRACK",
-  "SUBLEXSTART", "SUBLEXEND", "PREC_LOW", "OROP", "ANDOP", "NOTOP",
-  "ASSIGNOP", "PERLY_QUESTION_MARK", "PERLY_COLON", "OROR", "DORDOR",
-  "ANDAND", "BITOROP", "BITANDOP", "CHEQOP", "NCEQOP", "CHRELOP",
+  "TRY", "CATCH", "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC",
+  "UNIOP", "LSTOP", "MULOP", "ADDOP", "DOLSHARP", "DO", "HASHBRACK",
+  "NOAMP", "LOCAL", "MY", "REQUIRE", "COLONATTR", "FORMLBRACK",
+  "FORMRBRACK", "SUBLEXSTART", "SUBLEXEND", "PREC_LOW", "OROP", "ANDOP",
+  "NOTOP", "ASSIGNOP", "PERLY_QUESTION_MARK", "PERLY_COLON", "OROR",
+  "DORDOR", "ANDAND", "BITOROP", "BITANDOP", "CHEQOP", "NCEQOP", "CHRELOP",
   "NCRELOP", "SHIFTOP", "MATCHOP", "PERLY_EXCLAMATION_MARK", "PERLY_TILDE",
   "UMINUS", "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC", "POSTDEC",
   "POSTJOIN", "ARROW", "PERLY_PAREN_CLOSE", "PERLY_PAREN_OPEN", "$accept",
   "grammar", "@1", "@2", "@3", "@4", "@5", "@6", "@7", "block",
   "formblock", "remember", "mblock", "mremember", "stmtseq", "formstmtseq",
   "fullstmt", "labfullstmt", "barestmt", "$@8", "$@9", "$@10", "$@11",
-  "$@12", "@13", "$@14", "formline", "formarg", "condition", "sideff",
-  "else", "cont", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr",
-  "formname", "startsub", "startanonsub", "startformsub", "subname",
-  "proto", "subattrlist", "myattrlist", "sigvarname", "sigslurpsigil",
-  "sigslurpelem", "sigdefault", "sigscalarelem", "sigelem", "siglist",
-  "siglistornull", "optsubsignature", "subsignature", "subsigguts", "$@15",
-  "optsubbody", "subbody", "optsigsubbody", "sigsubbody", "expr",
-  "listexpr", "listop", "@16", "method", "subscripted", "termbinop",
-  "termrelop", "relopchain", "termeqop", "eqopchain", "termunop",
-  "anonymous", "termdo", "term", "@17", "myattrterm", "myterm",
-  "optlistexpr", "optexpr", "optrepl", "my_scalar", "my_var",
-  "refgen_topic", "my_refgen", "amper", "scalar", "ary", "hsh", "arylen",
-  "star", "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR
+  "$@12", "@13", "$@14", "$@15", "$@16", "formline", "formarg",
+  "condition", "sideff", "else", "cont", "mintro", "nexpr", "texpr",
+  "iexpr", "mexpr", "mnexpr", "formname", "startsub", "startanonsub",
+  "startformsub", "subname", "proto", "subattrlist", "myattrlist",
+  "sigvarname", "sigslurpsigil", "sigslurpelem", "sigdefault",
+  "sigscalarelem", "sigelem", "siglist", "siglistornull",
+  "optsubsignature", "subsignature", "subsigguts", "$@17", "optsubbody",
+  "subbody", "optsigsubbody", "sigsubbody", "expr", "listexpr", "listop",
+  "@18", "method", "subscripted", "termbinop", "termrelop", "relopchain",
+  "termeqop", "eqopchain", "termunop", "anonymous", "termdo", "term",
+  "@19", "myattrterm", "myterm", "optlistexpr", "optexpr", "optrepl",
+  "my_scalar", "my_var", "refgen_topic", "my_refgen", "amper", "scalar",
+  "ary", "hsh", "arylen", "star", "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR
 };
 #endif
 
 # ifdef YYPRINT
 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_int16 yytoknum[] =
+static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -166,177 +165,179 @@ static const yytype_int16 yytoknum[] =
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365
+     365,   366,   367
 };
 # endif
 
-#define YYPACT_NINF (-464)
+#define YYPACT_NINF -482
 
-#define yypact_value_is_default(Yyn) \
-  ((Yyn) == YYPACT_NINF)
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-482)))
 
-#define YYTABLE_NINF (-290)
+#define YYTABLE_NINF -293
 
-#define yytable_value_is_error(Yyn) \
-  ((Yyn) == YYTABLE_NINF)
+#define yytable_value_is_error(Yytable_value) \
+  (!!((Yytable_value) == (-293)))
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     470,  -464,  -464,  -464,  -464,  -464,  -464,  -464,     7,  -464,
-    2748,     5,  1383,  1288,  -464,  -464,  -464,  -464,   225,  1825,
-     225,  2748,   225,  2748,   225,   225,  -464,   225,   225,  -464,
-    -464,    47,   -47,  -464,  2748,  -464,  -464,  -464,  -464,  2748,
-     -36,   -31,   -25,  1920,  1733,   225,  1920,  2012,   211,  2748,
-      -2,  2748,  2748,  2748,  2748,  2748,  2748,  2748,  2104,    91,
-      52,  -464,     4,  -464,   159,    35,   167,    -6,  -464,  -464,
-    -464,  2900,  -464,  -464,    -3,    45,   150,   180,  -464,   134,
-     252,   314,   168,  -464,  -464,  -464,  -464,  -464,  -464,   211,
-     211,   112,  -464,    99,   116,   169,   194,    16,   197,   201,
-       5,   246,   276,  -464,   322,  1034,  1288,  -464,  -464,  -464,
-     528,  -464,    20,   623,  -464,  -464,  -464,  -464,  -464,  -464,
-      13,  -464,   786,  -464,   786,  -464,  -464,  2748,   250,   278,
-    2748,   289,   703,     5,   348,   312,  2900,   290,  2196,  2748,
-    1733,  -464,   703,   357,    52,  -464,  1633,  2748,  -464,  -464,
-     703,   388,    66,  -464,  -464,  2748,   703,  2840,  2288,   327,
-    -464,  -464,  -464,   703,    52,   786,   786,   786,   268,   268,
-     390,    43,  2748,  2748,  2748,  2748,  2748,  2380,  -464,  -464,
-    2748,  -464,  -464,  2748,  2748,  2748,  2748,  2748,  2748,  2748,
-    2748,  2748,  2748,  2748,  2748,  2748,  2748,  2748,  2748,  2748,
-    2748,  -464,  -464,  -464,   165,  2472,  2748,  2748,  2748,  2748,
-    2748,  2748,  2748,  -464,   382,  -464,  -464,   383,  -464,  -464,
-    -464,  -464,  -464,   311,   228,  -464,  -464,   305,  -464,  -464,
-    -464,  -464,     5,  -464,  -464,  2748,  2748,  2748,  2748,  2748,
-    2748,  -464,  -464,  -464,   395,  -464,  -464,   395,  -464,  -464,
-    -464,   419,  -464,  -464,  -464,  2748,  2748,    19,  -464,  -464,
-    -464,   312,   406,  -464,  -464,  -464,    78,   361,   347,  2748,
-      52,  -464,   443,  -464,  2564,   786,   327,    36,    58,   131,
-    -464,   153,   431,  -464,  2748,   448,   385,  -464,  2900,   164,
-      24,  -464,   158,   703,   391,  2988,   288,   893,  2900,   425,
-    3020,  3020,   513,   608,   325,   391,   391,   703,   703,   798,
-     786,   786,   446,  2748,  2748,   787,   455,   457,   458,  -464,
-     465,  2656,   392,  -464,  -464,   221,   200,    28,   227,    38,
-     233,    54,   236,   718,  -464,   477,  -464,  -464,    32,   478,
-    2748,  2748,  2748,  2748,  -464,   487,  -464,  -464,   396,  -464,
-    -464,  -464,  -464,  1475,   345,  -464,  2748,  2748,  -464,  -464,
-      91,  -464,    91,  -464,  -464,  -464,  -464,  -464,   421,   421,
-      20,   399,   151,  -464,  2748,  -464,  -464,   413,  -464,  -464,
-    -464,  -464,   255,  -464,    21,   259,  -464,  -464,  -464,   102,
-    2748,   512,  -464,  -464,  2748,  -464,   242,   113,  -464,  -464,
-    -464,  -464,  -464,  -464,   277,  2748,  -464,   514,  -464,   522,
-    -464,   524,  -464,   525,  -464,  -464,  -464,   348,   312,  -464,
-    -464,   499,   434,    91,   436,   437,    91,   442,   449,  -464,
-    -464,  -464,  -464,   472,   565,   272,  -464,  2748,   485,   486,
-    2748,  -464,  -464,  -464,  -464,  2748,   533,  -464,   602,  -464,
-    -464,   603,  -464,  -464,    22,  -464,   126,  -464,  2944,   604,
-    -464,  -464,   508,  -464,  -464,  -464,  -464,   600,   312,   606,
-    -464,  2748,  -464,  -464,   614,   614,  2748,  2748,   614,  -464,
-     520,   526,   614,   614,  2900,    91,  -464,  -464,   531,  -464,
-    -464,  -464,  -464,   560,   619,  -464,  -464,  -464,  -464,   624,
-     614,   614,  -464,   287,   287,   545,   567,   276,  2748,  2748,
-     614,  -464,  -464,   813,  -464,   908,  -464,  -464,  -464,  -464,
-    1003,  -464,   276,   276,  -464,   614,   572,  -464,  -464,   614,
-     614,  -464,   667,   581,   276,  -464,  -464,     8,  -464,  -464,
-    -464,  1098,  -464,  2748,   276,   276,  -464,   614,  -464,   681,
-     631,  -464,  -464,   599,  -464,  -464,  -464,   276,  -464,  -464,
-    -464,   614,  1567,  -464,  1193,   287,   609,  -464,  -464,   614,
-    -464
+     533,  -482,  -482,  -482,  -482,  -482,  -482,  -482,    32,  -482,
+    2902,    25,  1407,  1310,  -482,  -482,  -482,  -482,   299,  1959,
+     299,  2902,   299,  2902,   299,   299,  -482,   299,   299,  -482,
+    -482,    10,   -66,  -482,  2902,  -482,  -482,  -482,  -482,  2902,
+     -63,   -56,   -47,  2056,  1865,   299,  2056,  2150,    67,  2902,
+      60,  2902,  2902,  2902,  2902,  2902,  2902,  2902,  2244,   144,
+      43,  -482,    50,  -482,   156,   -25,   233,   -11,  -482,  -482,
+    -482,  3067,  -482,  -482,   -35,    62,   228,   250,  -482,    78,
+     267,   270,    92,  -482,  -482,  -482,  -482,  -482,  -482,    67,
+      67,    83,  -482,    18,    41,    52,    97,    -1,   108,   135,
+      25,   203,   173,   207,  -482,   243,   330,  1310,  -482,  -482,
+    -482,   534,  -482,   220,   631,  -482,  -482,  -482,  -482,  -482,
+    -482,    12,  -482,   992,  -482,   992,  -482,  -482,  2902,   172,
+     176,  2902,   193,   808,    25,   285,   246,  3067,   218,  2338,
+    2902,  1865,  -482,   808,  1763,    43,  -482,  1663,  2902,  -482,
+    -482,   808,   329,   124,  -482,  -482,  2902,   808,  2996,  2432,
+     269,  -482,  -482,  -482,   808,    43,   992,   992,   992,   338,
+     338,   337,    23,  2902,  2902,  2902,  2902,  2902,  2526,  -482,
+    -482,  2902,  -482,  -482,  2902,  2902,  2902,  2902,  2902,  2902,
+    2902,  2902,  2902,  2902,  2902,  2902,  2902,  2902,  2902,  2902,
+    2902,  2902,  -482,  -482,  -482,    27,  2620,  2902,  2902,  2902,
+    2902,  2902,  2902,  2902,  -482,   335,  -482,  -482,   340,  -482,
+    -482,  -482,  -482,  -482,   278,   151,  -482,  -482,   261,  -482,
+    -482,  -482,  -482,   326,  -482,    25,  -482,  -482,  2902,  2902,
+    2902,  2902,  2902,  2902,  -482,  -482,  -482,   370,  -482,  -482,
+     370,  -482,  -482,  -482,   390,  -482,  -482,  -482,  2902,  2902,
+      34,  -482,  -482,  -482,   246,   378,  -482,  -482,  -482,   159,
+     327,   298,  2902,    43,  -482,   400,  -482,  2714,   992,   269,
+      44,   168,   169,  -482,   223,   389,  -482,  2902,   407,   339,
+    -482,  3067,   165,    45,  -482,   234,   808,   711,   423,   395,
+     289,  3067,  3023,  1696,  1696,  1850,   518,   614,   711,   711,
+     808,   808,   905,   992,   992,   397,  2902,  2902,   410,   399,
+     404,   415,  -482,   424,  2808,   357,  -482,  -482,   236,   171,
+      54,   184,    65,   189,    90,   191,   728,  -482,   452,  -482,
+    -482,    79,   451,  2902,  2902,  2902,  2902,  -482,   462,  -482,
+    -482,   368,  -482,  -482,  -482,  -482,  1501,   242,  -482,  2902,
+    2902,  -482,   371,  -482,  -482,   144,  -482,   144,  -482,  -482,
+    -482,  -482,  -482,   396,   396,   220,   374,    76,  -482,  2902,
+    -482,  -482,   376,  -482,  -482,  -482,  -482,   238,  -482,    59,
+     248,  -482,  -482,  -482,    94,  2902,   474,  -482,  -482,  2902,
+    -482,   229,   102,  -482,  -482,  -482,  -482,  -482,  -482,   281,
+    2902,  -482,   477,  -482,   481,  -482,   483,  -482,   484,  -482,
+    -482,  -482,   285,   246,  -482,  -482,   471,   412,   144,   413,
+     414,   144,   417,   398,  -482,  -482,  -482,  -482,   418,   479,
+     320,  -482,  2902,   435,   438,   825,  -482,  2902,  -482,  -482,
+    -482,  -482,  2902,   426,  -482,   500,  -482,  -482,   515,  -482,
+    -482,    68,  -482,   105,  -482,   364,   540,  -482,  -482,   446,
+    -482,  -482,  -482,  -482,   543,   246,   563,  -482,  2902,  -482,
+    -482,   203,   203,  2902,  2902,   203,  -482,   490,   482,   203,
+     203,  -482,  -482,  3067,   144,  -482,  -482,   492,  -482,  -482,
+    -482,  -482,   516,   596,  -482,  -482,  -482,  -482,   598,   203,
+     203,   288,   288,   510,   512,   207,  2902,  2902,   203,  -482,
+    -482,   462,   922,  -482,  1019,  -482,  -482,  -482,  -482,  1116,
+    -482,   207,   207,   203,   517,  -482,  -482,   203,   203,  -482,
+     602,   519,   207,  -482,  -482,  -482,   162,  -482,  -482,  -482,
+    -482,  2902,   207,   207,  -482,   203,  -482,   522,   619,   560,
+    -482,   532,  -482,  -482,  -482,   207,   203,  -482,  -482,  -482,
+     203,  1595,  -482,  -482,  1213,   288,   537,  -482,  -482,   203,
+    -482
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
-static const yytype_int16 yydefact[] =
+static const yytype_uint16 yydefact[] =
 {
        0,     2,     4,     6,     8,    10,    12,    14,     0,    18,
-     266,     0,     0,     0,    21,   118,     1,    21,     0,     0,
-       0,     0,     0,     0,     0,     0,   253,     0,     0,   224,
-     251,   212,   246,   248,   242,    88,   255,    88,    88,   234,
-     244,     0,     0,   237,   264,     0,     0,     0,     0,     0,
-       0,   240,     0,     0,     0,     0,     0,     0,     0,   267,
-     128,   254,   219,   202,   164,   173,   165,   179,   203,   204,
-     205,   131,   209,     5,   225,   214,   217,   216,   218,   215,
-       0,     0,     0,    18,     7,    64,    59,    29,    89,     0,
-       0,     0,    87,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    75,     9,     0,    65,     0,    11,    26,    25,
-       0,    15,   113,     0,   291,   294,   293,   292,   278,   195,
-       0,   279,   185,   281,   186,   280,   284,   264,     0,     0,
-       0,     0,   243,     0,    92,    94,   235,     0,     0,   266,
-     266,   238,   239,   291,   265,   138,   292,     0,   282,   201,
-     200,     0,     0,    90,    91,   264,   210,     0,     0,   257,
-     261,   263,   262,   241,   236,   187,   188,   207,   192,   193,
-     213,     0,     0,     0,   129,     0,     0,     0,   176,   175,
-       0,   182,   181,     0,     0,     0,     0,     0,     0,     0,
+     269,     0,     0,     0,    21,   121,     1,    21,     0,     0,
+       0,     0,     0,     0,     0,     0,   256,     0,     0,   227,
+     254,   215,   249,   251,   245,    91,   258,    91,    91,   237,
+     247,     0,     0,   240,   267,     0,     0,     0,     0,     0,
+       0,   243,     0,     0,     0,     0,     0,     0,     0,   270,
+     131,   257,   222,   205,   167,   176,   168,   182,   206,   207,
+     208,   134,   212,     5,   228,   217,   220,   219,   221,   218,
+       0,     0,     0,    18,     7,    67,    62,    29,    92,     0,
+       0,     0,    90,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    78,     9,     0,    68,     0,    11,    26,
+      25,     0,    15,   116,     0,   294,   297,   296,   295,   281,
+     198,     0,   282,   188,   284,   189,   283,   287,   267,     0,
+       0,     0,     0,   246,     0,    95,    97,   238,     0,     0,
+     269,   269,   241,   242,   294,   268,   141,   295,     0,   285,
+     204,   203,     0,     0,    93,    94,   267,   213,     0,     0,
+     260,   264,   266,   265,   244,   239,   190,   191,   210,   195,
+     196,   216,     0,     0,     0,   132,     0,     0,     0,   179,
+     178,     0,   185,   184,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   189,   190,   191,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    21,    86,    87,    87,     0,    36,    18,
-      18,    18,    18,    18,     0,    18,    18,     0,    18,    18,
-      42,    58,     0,    54,    57,     0,     0,     0,     0,     0,
-       0,    28,    27,    22,    99,   102,   101,    99,   109,   108,
-     112,   114,   119,   194,   136,   266,     0,     0,   247,   141,
-      93,    94,    96,    18,   245,   249,     0,     0,     0,     0,
-     132,   197,     0,   228,     0,   208,     0,   214,   217,   216,
-     260,     0,    98,   256,     0,   211,   127,   126,   130,     0,
-       0,   155,     0,   178,   184,   168,   161,   162,   159,     0,
-     170,   171,   169,   167,   166,   183,   180,   177,   174,   163,
-     172,   160,     0,     0,     0,     0,   288,   286,   290,   143,
-       0,     0,   135,   144,   226,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    85,     0,    31,    33,     0,     0,
-      80,     0,     0,     0,   276,     0,   277,   274,     0,   275,
-     271,   272,   273,     0,     0,    18,     0,     0,    76,    68,
-      63,    69,    82,    66,    67,    70,    71,   100,   104,   104,
-     110,     0,   268,   157,   264,    18,    95,   115,   199,   250,
-     140,   139,     0,   196,   213,     0,   258,   259,    97,     0,
-       0,     0,   148,   154,     0,   232,     0,     0,   229,   231,
-     230,   233,   283,   152,     0,   266,   227,     0,   146,     0,
-     220,     0,   221,     0,    16,    18,    30,    92,    94,    18,
-      35,     0,     0,    81,     0,     0,    83,     0,     0,   270,
-      18,    79,    84,     0,     0,    65,    50,     0,     0,     0,
-     105,   107,   103,   111,   137,     0,     0,   142,     0,   198,
-     118,     0,   116,   133,   211,   158,     0,   151,   206,     0,
-     147,   153,     0,   149,   222,   223,   145,     0,    94,    18,
-      55,   264,    77,    77,     0,     0,     0,     0,     0,    45,
-       0,     0,     0,     0,   106,   269,   252,    21,     0,    21,
-     156,   150,   134,     0,    18,   124,    34,   123,    21,     0,
-       0,     0,    20,    72,    72,     0,     0,    75,    80,     0,
-       0,    40,    41,     0,   117,     0,    23,   121,    32,   120,
-       0,    37,    75,    75,    21,     0,     0,    38,    39,     0,
-       0,    53,     0,     0,    75,   122,   125,     0,    56,    43,
-      44,     0,    73,     0,    75,    75,    46,     0,    49,     0,
-      61,    24,    19,     0,    48,    52,    77,    75,    17,    21,
-      60,     0,     0,    51,     0,    72,     0,    62,    74,     0,
+       0,     0,   192,   193,   194,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    21,    89,    90,    90,     0,    36,
+      18,    18,    18,    18,    18,     0,    18,    18,     0,    18,
+      18,    42,    20,     0,    61,     0,    57,    60,     0,     0,
+       0,     0,     0,     0,    28,    27,    22,   102,   105,   104,
+     102,   112,   111,   115,   117,   122,   197,   139,   269,     0,
+       0,   250,   144,    96,    97,    99,    18,   248,   252,     0,
+       0,     0,     0,   135,   200,     0,   231,     0,   211,     0,
+     217,   220,   219,   263,     0,   101,   259,     0,   214,   130,
+     129,   133,     0,     0,   158,     0,   181,   187,   171,   164,
+     165,   162,     0,   173,   174,   172,   170,   169,   186,   183,
+     180,   177,   166,   175,   163,     0,     0,     0,     0,   291,
+     289,   293,   146,     0,     0,   138,   147,   229,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    88,     0,    31,
+      33,     0,     0,    83,     0,     0,     0,   279,     0,   280,
+     277,     0,   278,   274,   275,   276,     0,     0,    18,     0,
+       0,    21,     0,    79,    71,    66,    72,    85,    69,    70,
+      73,    74,   103,   107,   107,   113,     0,   271,   160,   267,
+      18,    98,   118,   202,   253,   143,   142,     0,   199,   216,
+       0,   261,   262,   100,     0,     0,     0,   151,   157,     0,
+     235,     0,     0,   232,   234,   233,   236,   286,   155,     0,
+     269,   230,     0,   149,     0,   223,     0,   224,     0,    16,
+      18,    30,    95,    97,    18,    35,     0,     0,    84,     0,
+       0,    86,     0,     0,   273,    18,    82,    87,     0,     0,
+      68,    50,     0,     0,     0,     0,    54,   108,   110,   106,
+     114,   140,     0,     0,   145,     0,   201,   121,     0,   119,
+     136,   214,   161,     0,   154,   209,     0,   150,   156,     0,
+     152,   225,   226,   148,     0,    97,    18,    58,   267,    80,
+      80,     0,     0,     0,     0,     0,    45,     0,     0,     0,
+       0,    19,    18,   109,   272,   255,    21,     0,    21,   159,
+     153,   137,     0,    18,   127,    34,   126,    21,     0,     0,
+       0,    75,    75,     0,     0,    78,    83,     0,     0,    40,
+      41,     0,     0,   120,     0,    23,   124,    32,   123,     0,
+      37,    78,    78,     0,     0,    38,    39,     0,     0,    53,
+       0,     0,    78,    55,   125,   128,     0,    59,    43,    44,
+      76,     0,    78,    78,    46,     0,    49,     0,     0,    64,
+      24,     0,    48,    52,    80,    78,     0,    17,    21,    63,
+       0,     0,    51,    56,     0,    75,     0,    65,    77,     0,
       47
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -464,  -464,  -464,  -464,  -464,  -464,  -464,  -464,  -464,    37,
-    -464,    -5,  2417,  -464,   -17,  -464,   696,   605,    12,  -464,
-    -464,  -464,  -464,  -464,  -464,  -464,  -464,  -464,    33,  -343,
-    -463,  -156,  -453,  -464,   204,   376,  -266,   161,  -464,   127,
-     346,  -464,   273,   303,  -256,   456,   488,  -464,  -464,   356,
-    -464,   366,  -464,  -464,  -464,  -464,   291,  -464,  -464,   283,
-    -464,   280,    -8,   -43,  -464,  -464,  -464,  -464,  -464,  -464,
-    -464,  -464,  -464,  -464,  -464,  -464,   100,  -464,  -464,   627,
-    -124,  -127,  -464,  -464,   417,  -464,  -464,   561,     1,   -44,
-     -42,  -464,  -464,  -464,  -464,  -464,    48
+    -482,  -482,  -482,  -482,  -482,  -482,  -482,  -482,  -482,    42,
+    -482,    -5,  -127,  -482,   -17,  -482,   632,   542,     8,  -482,
+    -482,  -482,  -482,  -482,  -482,  -482,  -482,  -482,  -482,  -482,
+     224,  -342,  -481,  -115,  -459,  -482,   138,   318,  -246,   113,
+    -482,   155,   352,  -482,   305,   268,  -263,   420,   442,  -482,
+    -482,   341,  -482,   325,  -482,  -482,  -482,  -482,   257,  -482,
+    -482,   214,  -482,   244,    -8,   -36,  -482,  -482,  -482,  -482,
+    -482,  -482,  -482,  -482,  -482,  -482,  -482,  -482,   101,  -482,
+    -482,   561,  -122,   -99,  -482,  -482,   369,  -482,  -482,   502,
+     -15,   -33,   -31,  -482,  -482,  -482,  -482,  -482,     0
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     8,     9,    10,    11,    12,    13,    14,    15,   102,
-     416,   377,   503,   524,   110,   537,   243,   108,   109,   417,
-     418,   339,   508,   556,   480,   498,   551,   560,   359,   104,
-     527,   233,   500,   432,   422,   361,   425,   434,   335,   218,
-     133,   214,   155,   261,   263,   283,   368,   247,   248,   441,
-     249,   250,   251,   252,   451,   452,   111,   112,   518,   449,
-     496,   378,   105,    60,    61,   374,   322,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,   129,    72,   159,
-     145,    73,   446,   428,   347,   348,   226,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,   121
+      -1,     8,     9,    10,    11,    12,    13,    14,    15,   103,
+     421,   382,   233,   361,   111,   546,   246,   109,   110,   422,
+     423,   342,   516,   564,   487,   492,   557,   507,   560,   569,
+     364,   105,   535,   236,   509,   437,   427,   366,   430,   439,
+     338,   219,   134,   215,   156,   264,   266,   286,   373,   250,
+     251,   448,   252,   253,   254,   255,   458,   459,   112,   113,
+     527,   456,   505,   383,   106,    60,    61,   379,   325,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,   130,
+      72,   160,   146,    73,   453,   433,   350,   351,   227,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,   122
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -344,141 +345,124 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     113,   144,    59,   254,    17,   375,   161,    16,   162,   164,
-     431,   120,   267,   268,    20,   175,    83,   176,    22,   117,
-     501,   117,    24,   117,   103,   117,   117,   253,   117,   117,
-     549,   273,    20,   373,   284,   390,   244,   550,   392,   152,
-     245,   528,   408,   419,   246,   146,   117,   206,    84,   207,
-     171,   160,   410,   139,   420,   116,   206,   116,   207,   116,
-     130,   116,   116,   131,   116,   116,   118,   174,   412,  -285,
-     123,  -285,   125,   126,   137,   127,   128,   427,   213,   138,
-     141,   116,   116,   149,   144,   140,   183,   433,   272,   223,
-     438,   439,   147,   148,   172,   173,  -260,  -259,   227,   157,
-     172,   173,   568,   562,   270,   172,   173,   205,   158,   172,
-     173,  -261,   144,   278,   177,   279,   455,   224,   242,   172,
-     173,   122,   257,   124,   172,   173,   225,   460,   371,   180,
-     266,    59,    59,  -263,   132,   172,   173,   230,   217,   136,
-     490,   146,  -287,   142,  -287,  -289,   150,   172,   173,   156,
-     281,   163,   285,   165,   166,   167,   168,   169,   277,   172,
-     173,  -285,   469,  -285,   286,   287,   174,   289,   290,   292,
-     259,   481,   172,   173,   445,   312,   313,   116,   314,   212,
-     351,   315,   352,   172,   173,   316,   391,   379,   269,   317,
-     318,  -287,   319,  -287,   172,   173,   333,   325,   326,   327,
-     328,   329,   330,   331,   332,   323,  -262,   172,   173,   219,
-     505,   506,   494,   372,   340,   341,   342,   343,   345,   431,
-     353,   354,   407,   356,   357,   350,   220,   360,   362,   360,
-     360,   360,   360,   320,   172,   173,    83,   153,    18,   172,
-     173,    20,   154,   533,    20,   172,   173,    59,    22,   409,
-     447,   114,    24,   178,   179,   411,   115,   275,   413,   181,
-     182,   382,   387,   208,   459,   209,   385,   393,   231,   358,
-     363,   364,   365,   366,   288,   321,   389,   553,   462,   221,
-     293,   172,   173,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   346,   172,   173,   222,   396,   397,   228,   172,   173,
-     351,   229,   352,   404,   172,   173,   117,   172,   173,   235,
-     236,   237,   238,   172,   173,   210,   239,   211,   240,   232,
-     406,   144,   423,   362,   426,   426,   172,   173,   525,   526,
-     172,   173,   336,   337,   234,   435,   429,   499,   426,   426,
-     437,   531,   116,   172,   173,   350,   256,  -253,   172,   173,
-     255,    20,   215,   216,   453,    22,   539,   540,   454,    24,
-     448,  -253,  -253,  -290,  -290,  -290,   204,   260,   548,  -253,
-    -253,   -83,   456,   134,   135,   199,   461,   262,   554,   555,
-     200,   185,   186,   201,   202,   203,   204,    59,   258,   264,
-     271,   563,   282,   284,  -253,  -253,  -253,  -253,   334,   338,
-     467,  -253,   344,  -253,   470,   355,  -253,   194,   195,   196,
-     197,   198,   199,  -253,  -253,   477,   367,   200,   144,   426,
-     201,   202,   203,   204,   370,   376,  -253,   485,  -253,  -253,
-     380,  -253,  -253,  -253,  -253,  -253,  -253,  -253,  -253,  -253,
-    -253,  -253,  -253,  -253,  -253,   383,   381,   185,   186,  -253,
-     388,   390,  -253,  -253,  -253,  -253,  -253,   173,   426,   426,
-     513,   395,   515,     1,     2,     3,     4,     5,     6,     7,
-     399,   520,   400,   401,   184,   196,   197,   198,   199,   448,
-     402,   185,   186,   200,   458,   415,   201,   202,   203,   204,
-     423,   426,   405,    20,   421,   440,   430,   541,   444,   187,
-     188,   394,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   450,   457,   471,   463,   200,   -13,    85,
-     201,   202,   203,   204,   464,   426,   465,   466,    18,    83,
-     484,    19,   564,   472,    20,   473,   474,    21,    22,    23,
-      86,   475,    24,    25,    26,    27,    28,    29,    30,   476,
-      31,    32,    33,    34,    35,    36,    87,   106,    88,    89,
-      90,    37,    38,    91,    92,    93,    94,    95,    96,   185,
-     186,   478,    97,    98,    99,   100,    39,   479,   101,    40,
-      41,    42,    43,    44,   482,   483,    45,    46,    47,    48,
-      49,    50,    51,   192,   193,   194,   195,   196,   197,   198,
-     199,    52,   486,   487,   489,   200,   491,   492,   201,   202,
-     203,   204,   493,    -3,    85,   502,    53,    54,   495,    55,
-     509,    56,    57,    18,    83,   510,    19,   516,    58,    20,
-     514,   517,    21,    22,    23,    86,   521,    24,    25,    26,
-      27,    28,    29,    30,   529,    31,    32,    33,    34,    35,
-      36,    87,   106,    88,    89,    90,    37,    38,    91,    92,
-      93,    94,    95,    96,   185,   186,   530,    97,    98,    99,
-     100,    39,   543,   101,    40,    41,    42,    43,    44,   546,
-     547,    45,    46,    47,    48,    49,    50,    51,   558,   193,
-     194,   195,   196,   197,   198,   199,    52,   559,   561,   107,
-     200,   241,   532,   201,   202,   203,   204,   424,   569,    85,
-     468,    53,    54,   566,    55,   442,    56,    57,    18,    83,
-     414,    19,   386,    58,    20,   369,   443,    21,    22,    23,
-      86,   488,    24,    25,    26,    27,    28,    29,    30,   497,
-      31,    32,    33,    34,    35,    36,    87,   106,    88,    89,
-      90,    37,    38,    91,    92,    93,    94,    95,    96,   185,
-     186,   436,    97,    98,    99,   100,    39,   519,   101,    40,
-      41,    42,    43,    44,   276,   349,    45,    46,    47,    48,
-      49,    50,    51,     0,     0,     0,     0,     0,    83,   198,
-     199,    52,     0,    20,     0,   200,     0,     0,   201,   202,
-     203,   204,   398,   114,    85,     0,    53,    54,   115,    55,
-       0,    56,    57,    18,    83,   535,    19,     0,    58,    20,
-       0,     0,    21,    22,    23,    86,     0,    24,    25,    26,
-      27,    28,    29,    30,     0,    31,    32,    33,    34,    35,
-      36,    87,   106,    88,    89,    90,    37,    38,    91,    92,
-      93,    94,    95,    96,   185,   186,     0,    97,    98,    99,
-     100,    39,     0,   101,    40,    41,    42,    43,    44,     0,
-       0,    45,    46,    47,    48,    49,    50,    51,   200,     0,
-       0,   201,   202,   203,   204,   199,    52,     0,     0,     0,
-     200,     0,     0,   201,   202,   203,   204,     0,     0,    85,
-       0,    53,    54,     0,    55,     0,    56,    57,    18,    83,
-     536,    19,     0,    58,    20,     0,     0,    21,    22,    23,
-      86,     0,    24,    25,    26,    27,    28,    29,    30,     0,
-      31,    32,    33,    34,    35,    36,    87,   106,    88,    89,
-      90,    37,    38,    91,    92,    93,    94,    95,    96,   185,
-       0,     0,    97,    98,    99,   100,    39,     0,   101,    40,
-      41,    42,    43,    44,     0,     0,    45,    46,    47,    48,
-      49,    50,    51,     0,     0,     0,     0,     0,     0,     0,
-     199,    52,     0,     0,     0,   200,     0,     0,   201,   202,
-     203,   204,     0,     0,    85,     0,    53,    54,     0,    55,
-       0,    56,    57,    18,    83,   538,    19,     0,    58,    20,
-       0,     0,    21,    22,    23,    86,     0,    24,    25,    26,
-      27,    28,    29,    30,     0,    31,    32,    33,    34,    35,
-      36,    87,   106,    88,    89,    90,    37,    38,    91,    92,
-      93,    94,    95,    96,     0,     0,     0,    97,    98,    99,
-     100,    39,     0,   101,    40,    41,    42,    43,    44,     0,
-       0,    45,    46,    47,    48,    49,    50,    51,     0,     0,
-       0,   235,   236,   237,   238,     0,    52,     0,   239,     0,
-     240,     0,     0,     0,     0,     0,     0,     0,     0,    85,
-       0,    53,    54,     0,    55,     0,    56,    57,    18,    83,
-     552,    19,     0,    58,    20,   172,   173,    21,    22,    23,
-      86,     0,    24,    25,    26,    27,    28,    29,    30,     0,
-      31,    32,    33,    34,    35,    36,    87,   106,    88,    89,
-      90,    37,    38,    91,    92,    93,    94,    95,    96,     0,
-       0,     0,    97,    98,    99,   100,    39,     0,   101,    40,
-      41,    42,    43,    44,     0,     0,    45,    46,    47,    48,
-      49,    50,    51,     0,     0,     0,     0,     0,     0,     0,
-       0,    52,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    85,     0,    53,    54,     0,    55,
-       0,    56,    57,    18,    83,     0,    19,     0,    58,    20,
-       0,     0,    21,    22,    23,    86,     0,    24,    25,    26,
-      27,    28,    29,    30,     0,    31,    32,    33,    34,    35,
-      36,    87,   106,    88,    89,    90,    37,    38,    91,    92,
-      93,    94,    95,    96,     0,     0,     0,    97,    98,    99,
-     100,    39,     0,   101,    40,    41,    42,    43,    44,     0,
-       0,    45,    46,    47,    48,    49,    50,    51,     0,     0,
-     567,     0,     0,     0,     0,     0,    52,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    85,
+     114,   380,    59,   118,    17,   118,   257,   118,   145,   118,
+     118,   121,   118,   118,   436,    20,   165,   162,   119,   163,
+     104,   510,   124,   131,   126,   127,   256,   128,   129,   147,
+     118,   536,    16,   140,   276,   161,    83,   315,   316,   153,
+     317,   270,   271,   318,   148,   149,   132,   319,   378,   138,
+     172,   320,   321,    84,   322,   207,   139,   208,   175,   397,
+     117,   176,   117,   177,   117,   141,   117,   117,   413,   117,
+     117,   181,   287,   207,   224,   208,    20,   206,   214,   415,
+      22,   395,   228,   184,    24,   142,   117,   117,   150,  -292,
+     424,   175,   145,   154,   578,   173,   174,   323,   155,   452,
+     432,   425,   225,   213,   417,   571,   173,   174,   462,   218,
+     438,   226,   273,   443,   444,   245,   467,   173,   174,   499,
+     145,  -264,   123,   260,   125,   281,   147,   282,   173,   174,
+     220,   269,    59,    59,   288,   133,  -263,   173,   174,   324,
+     137,   272,   231,   280,   143,  -262,   275,   151,   173,   174,
+     157,   284,   164,   221,   166,   167,   168,   169,   170,   376,
+     476,    18,   178,   158,   222,   289,   290,    20,   292,   293,
+     295,    22,   159,   173,   174,    24,   262,   173,   174,  -288,
+    -290,  -288,  -290,   117,   558,   173,   174,   396,   173,   174,
+     326,   559,   354,   412,   355,   234,   488,   336,   328,   329,
+     330,   331,   332,   333,   334,   335,   414,   173,   174,   223,
+     353,   416,   503,   418,   232,   343,   344,   345,   346,   348,
+     229,   356,   357,   377,   359,   360,   349,   173,   174,   436,
+     365,   367,   365,   365,   365,   365,   247,   513,   514,  -288,
+     248,  -288,   173,   174,   249,  -266,  -265,   230,   173,   174,
+      59,   466,   179,   180,   173,   174,   259,   454,    20,   278,
+     235,  -290,    22,  -290,   387,   237,    24,   173,   174,   390,
+     384,   541,   173,   174,   173,   174,   291,   363,   209,   394,
+     210,   211,   296,   212,   258,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   118,   261,   561,   173,   174,   401,   402,
+      83,   469,   173,   174,   263,    20,   409,   173,   174,   173,
+     174,   173,   174,   265,   354,   115,   355,   182,   183,   267,
+     116,   173,   174,   434,   392,   428,   367,   431,   431,   533,
+     534,   274,   353,   145,   445,   398,   285,   411,   440,   460,
+     287,   431,   431,   442,   511,   512,   508,   186,   515,   461,
+     117,   337,   519,   520,   173,   174,   341,   238,   239,   240,
+     241,   339,   340,   358,   242,   455,   243,   238,   239,   240,
+     241,   347,   531,   532,   242,   362,   243,   463,   200,   135,
+     136,   542,   468,   201,   216,   217,   202,   203,   204,   205,
+     539,   372,    59,   173,   174,   375,   550,   381,   385,   386,
+     552,   553,   388,   173,   174,   474,   548,   549,   393,   477,
+     395,    83,   400,   174,   404,   185,    20,   556,   565,   405,
+     484,   -86,   186,   187,   431,   403,   115,   562,   563,   573,
+     406,   116,   145,   575,   494,  -293,  -293,  -293,   205,   407,
+     572,   189,   580,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   368,   369,   370,   371,   201,   410,
+     420,   202,   203,   204,   205,   431,   431,   426,    20,   522,
+     435,   524,   447,   446,  -293,   451,   464,   521,   457,   470,
+     529,   186,   187,   471,   200,   472,   473,   478,   455,   201,
+     465,   486,   202,   203,   204,   205,   543,   495,   428,   431,
+     483,   496,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   479,   480,   481,   498,   201,   482,   485,
+     202,   203,   204,   205,   -13,    85,     1,     2,     3,     4,
+       5,     6,     7,   431,    18,    83,   489,    19,   493,   490,
+      20,   574,   500,    21,    22,    23,    86,   501,    24,    25,
+      26,    27,    28,    29,    30,   502,    31,    32,    33,    34,
+      35,    36,    87,   107,    88,    89,    90,    37,    38,    91,
+      92,    93,    94,    95,    96,   504,   186,   187,    97,    98,
+      99,   100,   101,   518,    39,   525,   102,    40,    41,    42,
+      43,    44,   517,   523,    45,    46,    47,    48,    49,    50,
+      51,   194,   195,   196,   197,   198,   199,   200,   526,    52,
+     530,   537,   201,   538,   554,   202,   203,   204,   205,   551,
+     555,    -3,    85,   566,    53,    54,   567,    55,   568,    56,
+      57,    18,    83,   570,    19,   108,    58,    20,   579,   244,
+      21,    22,    23,    86,   540,    24,    25,    26,    27,    28,
+      29,    30,   429,    31,    32,    33,    34,    35,    36,    87,
+     107,    88,    89,    90,    37,    38,    91,    92,    93,    94,
+      95,    96,   186,   187,   576,    97,    98,    99,   100,   101,
+     475,    39,   374,   102,    40,    41,    42,    43,    44,   391,
+     450,    45,    46,    47,    48,    49,    50,    51,   195,   196,
+     197,   198,   199,   200,   497,   449,    52,   528,   201,   279,
+     506,   202,   203,   204,   205,     0,   441,   352,     0,    85,
        0,    53,    54,     0,    55,     0,    56,    57,    18,    83,
-       0,    19,     0,    58,    20,     0,     0,    21,    22,    23,
+     419,    19,     0,    58,    20,     0,     0,    21,    22,    23,
       86,     0,    24,    25,    26,    27,    28,    29,    30,     0,
-      31,    32,    33,    34,    35,    36,    87,   106,    88,    89,
-      90,    37,    38,    91,    92,    93,    94,    95,    96,     0,
-       0,     0,    97,    98,    99,   100,    39,     0,   101,    40,
+      31,    32,    33,    34,    35,    36,    87,   107,    88,    89,
+      90,    37,    38,    91,    92,    93,    94,    95,    96,   186,
+     187,     0,    97,    98,    99,   100,   101,     0,    39,     0,
+     102,    40,    41,    42,    43,    44,     0,     0,    45,    46,
+      47,    48,    49,    50,    51,     0,     0,   197,   198,   199,
+     200,     0,     0,    52,     0,   201,     0,     0,   202,   203,
+     204,   205,     0,     0,     0,     0,    85,     0,    53,    54,
+       0,    55,     0,    56,    57,    18,    83,   491,    19,     0,
+      58,    20,     0,     0,    21,    22,    23,    86,     0,    24,
+      25,    26,    27,    28,    29,    30,     0,    31,    32,    33,
+      34,    35,    36,    87,   107,    88,    89,    90,    37,    38,
+      91,    92,    93,    94,    95,    96,   186,   187,     0,    97,
+      98,    99,   100,   101,     0,    39,     0,   102,    40,    41,
+      42,    43,    44,     0,     0,    45,    46,    47,    48,    49,
+      50,    51,     0,     0,     0,     0,   199,   200,     0,     0,
+      52,     0,   201,     0,     0,   202,   203,   204,   205,     0,
+       0,     0,     0,    85,     0,    53,    54,     0,    55,     0,
+      56,    57,    18,    83,   544,    19,     0,    58,    20,     0,
+       0,    21,    22,    23,    86,     0,    24,    25,    26,    27,
+      28,    29,    30,     0,    31,    32,    33,    34,    35,    36,
+      87,   107,    88,    89,    90,    37,    38,    91,    92,    93,
+      94,    95,    96,   186,   187,     0,    97,    98,    99,   100,
+     101,     0,    39,     0,   102,    40,    41,    42,    43,    44,
+       0,     0,    45,    46,    47,    48,    49,    50,    51,     0,
+       0,     0,     0,     0,   200,     0,     0,    52,     0,   201,
+       0,     0,   202,   203,   204,   205,     0,     0,     0,     0,
+      85,     0,    53,    54,     0,    55,     0,    56,    57,    18,
+      83,   545,    19,     0,    58,    20,     0,     0,    21,    22,
+      23,    86,     0,    24,    25,    26,    27,    28,    29,    30,
+       0,    31,    32,    33,    34,    35,    36,    87,   107,    88,
+      89,    90,    37,    38,    91,    92,    93,    94,    95,    96,
+       0,     0,     0,    97,    98,    99,   100,   101,     0,    39,
+       0,   102,    40,    41,    42,    43,    44,     0,     0,    45,
+      46,    47,    48,    49,    50,    51,   201,     0,     0,   202,
+     203,   204,   205,     0,    52,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    85,     0,    53,
+      54,     0,    55,     0,    56,    57,    18,    83,   547,    19,
+       0,    58,    20,     0,     0,    21,    22,    23,    86,     0,
+      24,    25,    26,    27,    28,    29,    30,     0,    31,    32,
+      33,    34,    35,    36,    87,   107,    88,    89,    90,    37,
+      38,    91,    92,    93,    94,    95,    96,     0,     0,     0,
+      97,    98,    99,   100,   101,     0,    39,     0,   102,    40,
       41,    42,    43,    44,     0,     0,    45,    46,    47,    48,
       49,    50,    51,     0,     0,     0,     0,     0,     0,     0,
        0,    52,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -486,70 +470,101 @@ static const yytype_int16 yytable[] =
        0,    56,    57,    18,    83,     0,    19,     0,    58,    20,
        0,     0,    21,    22,    23,    86,     0,    24,    25,    26,
       27,    28,    29,    30,     0,    31,    32,    33,    34,    35,
-      36,    87,     0,    88,    89,    90,    37,    38,    91,    92,
+      36,    87,   107,    88,    89,    90,    37,    38,    91,    92,
       93,    94,    95,    96,     0,     0,     0,    97,    98,    99,
-     100,    39,     0,   101,    40,    41,    42,    43,    44,     0,
-       0,    45,    46,    47,    48,    49,    50,    51,     0,     0,
-       0,     0,     0,     0,     0,     0,    52,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    85,     0,     0,     0,
-       0,    53,    54,     0,    55,    18,    56,    57,    19,     0,
-       0,    20,     0,    58,    21,    22,    23,   -78,     0,    24,
-      25,    26,    27,    28,    29,    30,     0,    31,    32,    33,
-      34,    35,    36,     0,     0,     0,     0,     0,    37,    38,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    39,     0,     0,    40,    41,    42,    43,
+     100,   101,     0,    39,     0,   102,    40,    41,    42,    43,
       44,     0,     0,    45,    46,    47,    48,    49,    50,    51,
-       0,     0,     0,     0,     0,     0,     0,     0,    52,     0,
+       0,     0,   577,     0,     0,     0,     0,     0,    52,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    85,     0,    53,    54,     0,    55,     0,    56,    57,
+      18,    83,     0,    19,     0,    58,    20,     0,     0,    21,
+      22,    23,    86,     0,    24,    25,    26,    27,    28,    29,
+      30,     0,    31,    32,    33,    34,    35,    36,    87,   107,
+      88,    89,    90,    37,    38,    91,    92,    93,    94,    95,
+      96,     0,     0,     0,    97,    98,    99,   100,   101,     0,
+      39,     0,   102,    40,    41,    42,    43,    44,     0,     0,
+      45,    46,    47,    48,    49,    50,    51,     0,     0,     0,
+       0,     0,     0,     0,     0,    52,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    85,     0,
-       0,     0,     0,    53,    54,     0,    55,    18,    56,    57,
-      19,     0,     0,    20,     0,    58,    21,    22,    23,     0,
+      53,    54,     0,    55,     0,    56,    57,    18,    83,     0,
+      19,     0,    58,    20,     0,     0,    21,    22,    23,    86,
        0,    24,    25,    26,    27,    28,    29,    30,     0,    31,
-      32,    33,    34,    35,    36,     0,     0,     0,     0,     0,
-      37,    38,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    39,     0,     0,    40,    41,
-      42,    43,    44,  -214,     0,    45,    46,    47,    48,    49,
-      50,    51,     0,     0,   206,     0,   207,  -214,  -214,     0,
-      52,     0,     0,     0,     0,  -214,  -214,     0,     0,     0,
-       0,     0,     0,     0,     0,    53,    54,     0,    55,     0,
-      56,    57,     0,     0,     0,     0,   -78,    58,     0,     0,
-    -214,  -214,  -214,  -214,     0,     0,     0,  -214,     0,  -214,
-       0,     0,  -214,     0,     0,     0,     0,     0,     0,  -214,
-    -214,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -214,     0,  -214,  -214,     0,  -214,  -214,  -214,
-    -214,  -214,  -214,  -214,  -214,  -214,  -214,  -214,  -214,  -214,
-    -214,     0,     0,     0,     0,  -214,     0,     0,  -214,  -214,
-    -214,  -214,  -214,    18,    83,     0,    19,     0,     0,    20,
-       0,     0,    21,    22,    23,     0,     0,    24,    25,   143,
-      27,    28,    29,    30,   115,    31,    32,    33,    34,    35,
-      36,     0,     0,     0,     0,     0,    37,    38,     0,     0,
+      32,    33,    34,    35,    36,    87,     0,    88,    89,    90,
+      37,    38,    91,    92,    93,    94,    95,    96,     0,     0,
+       0,    97,    98,    99,   100,   101,     0,    39,     0,   102,
+      40,    41,    42,    43,    44,     0,     0,    45,    46,    47,
+      48,    49,    50,    51,     0,     0,     0,     0,     0,     0,
+       0,     0,    52,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    85,     0,     0,     0,     0,    53,    54,     0,
+      55,    18,    56,    57,    19,     0,     0,    20,     0,    58,
+      21,    22,    23,   -81,     0,    24,    25,    26,    27,    28,
+      29,    30,     0,    31,    32,    33,    34,    35,    36,     0,
+       0,     0,     0,     0,    37,    38,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    39,     0,     0,    40,    41,    42,    43,    44,     0,
        0,    45,    46,    47,    48,    49,    50,    51,     0,     0,
        0,     0,     0,     0,     0,     0,    52,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    53,    54,     0,    55,    18,    56,    57,    19,   119,
+       0,     0,     0,     0,     0,     0,    85,     0,     0,     0,
+       0,    53,    54,     0,    55,    18,    56,    57,    19,     0,
        0,    20,     0,    58,    21,    22,    23,     0,     0,    24,
       25,    26,    27,    28,    29,    30,     0,    31,    32,    33,
       34,    35,    36,     0,     0,     0,     0,     0,    37,    38,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    39,     0,     0,    40,    41,    42,    43,
-      44,     0,     0,    45,    46,    47,    48,    49,    50,    51,
-       0,     0,     0,     0,     0,     0,     0,     0,    52,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    53,    54,     0,    55,     0,    56,    57,
-      18,    83,     0,    19,     0,    58,    20,     0,     0,    21,
-      22,    23,     0,     0,    24,    25,    26,    27,    28,    29,
+       0,     0,     0,     0,     0,    39,     0,     0,    40,    41,
+      42,    43,    44,  -217,     0,    45,    46,    47,    48,    49,
+      50,    51,     0,     0,   207,     0,   208,  -217,  -217,     0,
+      52,     0,     0,     0,     0,  -217,  -217,     0,     0,     0,
+       0,     0,     0,     0,     0,    53,    54,     0,    55,     0,
+      56,    57,     0,     0,     0,     0,   -81,    58,     0,     0,
+    -217,  -217,  -217,  -217,     0,     0,     0,  -217,     0,  -217,
+       0,     0,     0,     0,  -217,     0,     0,     0,     0,     0,
+       0,  -217,  -217,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  -217,     0,  -217,  -217,     0,  -217,
+    -217,  -217,  -217,  -217,  -217,  -217,  -217,  -217,  -217,  -217,
+    -217,  -217,  -217,  -256,   186,   187,     0,  -217,     0,     0,
+    -217,  -217,  -217,  -217,  -217,     0,     0,  -256,  -256,     0,
+       0,     0,     0,     0,     0,  -256,  -256,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,     0,     0,     0,     0,
+     201,     0,     0,   202,   203,   204,   205,     0,     0,     0,
+    -256,  -256,  -256,  -256,     0,     0,     0,  -256,     0,  -256,
+       0,     0,     0,     0,  -256,     0,     0,     0,     0,     0,
+       0,  -256,  -256,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  -256,     0,  -256,  -256,     0,  -256,
+    -256,  -256,  -256,  -256,  -256,  -256,  -256,  -256,  -256,  -256,
+    -256,  -256,  -256,     0,     0,     0,     0,  -256,     0,     0,
+    -256,  -256,  -256,  -256,  -256,    18,    83,     0,    19,     0,
+       0,    20,     0,     0,    21,    22,    23,     0,     0,    24,
+      25,   144,    27,    28,    29,    30,   116,    31,    32,    33,
+      34,    35,    36,     0,     0,     0,     0,     0,    37,    38,
+       0,     0,     0,     0,     0,     0,     0,     0,   186,   187,
+       0,     0,     0,     0,     0,    39,     0,     0,    40,    41,
+      42,    43,    44,     0,     0,    45,    46,    47,    48,    49,
+      50,    51,   193,   194,   195,   196,   197,   198,   199,   200,
+      52,     0,     0,     0,   201,     0,     0,   202,   203,   204,
+     205,     0,     0,     0,     0,    53,    54,     0,    55,    18,
+      56,    57,    19,   120,     0,    20,     0,    58,    21,    22,
+      23,     0,     0,    24,    25,    26,    27,    28,    29,    30,
+       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+       0,     0,    37,    38,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    39,
+       0,     0,    40,    41,    42,    43,    44,     0,     0,    45,
+      46,    47,    48,    49,    50,    51,     0,     0,     0,     0,
+       0,     0,     0,     0,    52,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    53,
+      54,     0,    55,     0,    56,    57,    18,    83,     0,    19,
+       0,    58,    20,     0,     0,    21,    22,    23,     0,     0,
+      24,    25,    26,    27,    28,    29,    30,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,     0,     0,    37,
+      38,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    39,     0,     0,    40,
+      41,    42,    43,    44,     0,     0,    45,    46,    47,    48,
+      49,    50,    51,     0,     0,     0,     0,     0,     0,     0,
+       0,    52,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    53,    54,     0,    55,
+      18,    56,    57,    19,     0,     0,    20,     0,    58,    21,
+      22,    23,   152,     0,    24,    25,    26,    27,    28,    29,
       30,     0,    31,    32,    33,    34,    35,    36,     0,     0,
        0,     0,     0,    37,    38,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    39,     0,
-       0,    40,    41,    42,    43,    44,     0,     0,    45,    46,
-      47,    48,    49,    50,    51,     0,     0,     0,     0,     0,
-       0,     0,     0,    52,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    53,    54,
-       0,    55,    18,    56,    57,    19,     0,     0,    20,     0,
-      58,    21,    22,    23,   151,     0,    24,    25,    26,    27,
-      28,    29,    30,     0,    31,    32,    33,    34,    35,    36,
-       0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       39,     0,     0,    40,    41,    42,    43,    44,     0,     0,
       45,    46,    47,    48,    49,    50,    51,     0,     0,     0,
@@ -560,554 +575,551 @@ static const yytype_int16 yytable[] =
       26,    27,    28,    29,    30,     0,    31,    32,    33,    34,
       35,    36,     0,     0,     0,     0,     0,    37,    38,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    39,     0,     0,    40,    41,    42,    43,    44,
-       0,     0,    45,    46,    47,    48,    49,    50,    51,     0,
-       0,     0,     0,     0,     0,     0,     0,    52,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    53,    54,     0,    55,    18,    56,    57,    19,
-       0,     0,    20,   170,    58,    21,    22,    23,     0,     0,
-      24,    25,    26,    27,    28,    29,    30,     0,    31,    32,
-      33,    34,    35,    36,     0,     0,     0,     0,     0,    37,
-      38,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    39,     0,     0,    40,    41,    42,
       43,    44,     0,     0,    45,    46,    47,    48,    49,    50,
       51,     0,     0,     0,     0,     0,     0,     0,     0,    52,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    53,    54,     0,    55,    18,    56,
-      57,    19,     0,     0,    20,   265,    58,    21,    22,    23,
+      57,    19,     0,     0,    20,   171,    58,    21,    22,    23,
        0,     0,    24,    25,    26,    27,    28,    29,    30,     0,
       31,    32,    33,    34,    35,    36,     0,     0,     0,     0,
        0,    37,    38,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    39,     0,     0,    40,
-      41,    42,    43,    44,     0,     0,    45,    46,    47,    48,
-      49,    50,    51,     0,     0,     0,     0,     0,     0,     0,
-       0,    52,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    53,    54,     0,    55,
-      18,    56,    57,    19,     0,     0,    20,   280,    58,    21,
-      22,    23,     0,     0,    24,    25,    26,    27,    28,    29,
-      30,     0,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,     0,     0,    37,    38,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    39,     0,
        0,    40,    41,    42,    43,    44,     0,     0,    45,    46,
       47,    48,    49,    50,    51,     0,     0,     0,     0,     0,
        0,     0,     0,    52,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    53,    54,
-       0,    55,    18,    56,    57,    19,     0,     0,    20,   291,
+       0,    55,    18,    56,    57,    19,     0,     0,    20,   268,
       58,    21,    22,    23,     0,     0,    24,    25,    26,    27,
       28,    29,    30,     0,    31,    32,    33,    34,    35,    36,
        0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      39,     0,     0,    40,    41,    42,    43,    44,     0,     0,
-      45,    46,    47,    48,    49,    50,    51,     0,     0,     0,
-       0,     0,     0,     0,     0,    52,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      53,    54,     0,    55,    18,    56,    57,    19,     0,     0,
-      20,   324,    58,    21,    22,    23,     0,     0,    24,    25,
-      26,    27,    28,    29,    30,     0,    31,    32,    33,    34,
-      35,    36,     0,     0,     0,     0,     0,    37,    38,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    39,     0,     0,    40,    41,    42,    43,    44,
        0,     0,    45,    46,    47,    48,    49,    50,    51,     0,
        0,     0,     0,     0,     0,     0,     0,    52,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    53,    54,     0,    55,    18,    56,    57,    19,
-       0,     0,    20,   384,    58,    21,    22,    23,     0,     0,
+       0,     0,    20,   283,    58,    21,    22,    23,     0,     0,
       24,    25,    26,    27,    28,    29,    30,     0,    31,    32,
       33,    34,    35,    36,     0,     0,     0,     0,     0,    37,
       38,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    39,     0,     0,    40,
+      41,    42,    43,    44,     0,     0,    45,    46,    47,    48,
+      49,    50,    51,     0,     0,     0,     0,     0,     0,     0,
+       0,    52,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    53,    54,     0,    55,
+      18,    56,    57,    19,     0,     0,    20,   294,    58,    21,
+      22,    23,     0,     0,    24,    25,    26,    27,    28,    29,
+      30,     0,    31,    32,    33,    34,    35,    36,     0,     0,
+       0,     0,     0,    37,    38,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      39,     0,     0,    40,    41,    42,    43,    44,     0,     0,
+      45,    46,    47,    48,    49,    50,    51,     0,     0,     0,
+       0,     0,     0,     0,     0,    52,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      53,    54,     0,    55,    18,    56,    57,    19,     0,     0,
+      20,   327,    58,    21,    22,    23,     0,     0,    24,    25,
+      26,    27,    28,    29,    30,     0,    31,    32,    33,    34,
+      35,    36,     0,     0,     0,     0,     0,    37,    38,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    39,     0,     0,    40,    41,    42,
       43,    44,     0,     0,    45,    46,    47,    48,    49,    50,
       51,     0,     0,     0,     0,     0,     0,     0,     0,    52,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    53,    54,     0,    55,    18,    56,
-      57,    19,     0,     0,    20,   403,    58,    21,    22,    23,
+      57,    19,     0,     0,    20,   389,    58,    21,    22,    23,
        0,     0,    24,    25,    26,    27,    28,    29,    30,     0,
       31,    32,    33,    34,    35,    36,     0,     0,     0,     0,
        0,    37,    38,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,     0,
+       0,    40,    41,    42,    43,    44,     0,     0,    45,    46,
+      47,    48,    49,    50,    51,     0,     0,     0,     0,     0,
+       0,     0,     0,    52,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    53,    54,
+       0,    55,    18,    56,    57,    19,     0,     0,    20,   408,
+      58,    21,    22,    23,     0,     0,    24,    25,    26,    27,
+      28,    29,    30,     0,    31,    32,    33,    34,    35,    36,
+       0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    39,     0,     0,    40,    41,    42,    43,    44,
+       0,     0,    45,    46,    47,    48,    49,    50,    51,     0,
+       0,     0,     0,     0,     0,     0,     0,    52,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    53,    54,     0,    55,    18,    56,    57,    19,
+       0,     0,    20,     0,    58,    21,    22,    23,     0,     0,
+      24,    25,    26,    27,    28,    29,    30,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,     0,     0,    37,
+      38,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    39,     0,     0,    40,
       41,    42,    43,    44,     0,     0,    45,    46,    47,    48,
       49,    50,    51,     0,     0,     0,     0,     0,     0,     0,
-       0,    52,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    53,    54,     0,    55,
-      18,    56,    57,    19,     0,     0,    20,     0,    58,    21,
-      22,    23,     0,     0,    24,    25,    26,    27,    28,    29,
-      30,     0,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,     0,     0,    37,    38,     0,     0,     0,     0,     0,
-       0,     0,   504,     0,     0,   507,     0,     0,    39,   511,
-     512,    40,    41,    42,    43,    44,     0,     0,    45,    46,
-      47,    48,    49,    50,    51,     0,     0,   522,   523,     0,
-       0,     0,     0,    52,     0,     0,     0,   534,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    53,    54,
-       0,    55,   542,    56,    57,     0,   544,   545,     0,     0,
-     274,     0,     0,     0,     0,     0,     0,     0,     0,   184,
-       0,     0,     0,     0,   557,     0,   185,   186,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   565,     0,
-       0,     0,     0,     0,   187,   188,   570,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,     0,     0,
-       0,     0,   200,   184,     0,   201,   202,   203,   204,     0,
-     185,   186,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   188,
-       0,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,     0,     0,     0,     0,   200,  -290,     0,   201,
-     202,   203,   204,     0,   185,   186,     0,     0,     0,     0,
+       0,    52,     0,     0,   185,     0,     0,     0,     0,     0,
+       0,   186,   187,     0,     0,     0,    53,    54,     0,    55,
+       0,    56,    57,     0,     0,     0,     0,     0,   277,   188,
+     189,   399,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,     0,     0,     0,     0,   201,   185,     0,
+     202,   203,   204,   205,     0,   186,   187,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   185,   186,     0,     0,
-     200,     0,     0,   201,   202,   203,   204,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,     0,     0,
-       0,     0,   200,     0,     0,   201,   202,   203,   204
+       0,     0,     0,   188,   189,     0,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,     0,     0,     0,
+       0,   201,     0,     0,   202,   203,   204,   205
 };
 
 static const yytype_int16 yycheck[] =
 {
-      17,    44,    10,   127,     9,   261,    50,     0,    50,    52,
-     353,    19,   139,   140,    16,    11,    11,    13,    20,    18,
-     473,    20,    24,    22,    12,    24,    25,    14,    27,    28,
-      22,   155,    16,    14,    13,    13,    16,    29,    14,    47,
-      20,   504,    14,    11,    24,    44,    45,    11,    11,    13,
-      58,    50,    14,    78,    22,    18,    11,    20,    13,    22,
-      13,    24,    25,   110,    27,    28,    18,    15,    14,    11,
-      22,    13,    24,    25,   110,    27,    28,   343,    83,   110,
-      43,    44,    45,    46,   127,   110,    92,   353,    22,    73,
-     356,   357,    44,    45,    81,    82,    75,    75,    97,   101,
-      81,    82,   565,   556,   147,    81,    82,   110,   110,    81,
-      82,    75,   155,   157,   110,   157,    14,   101,   106,    81,
-      82,    21,   130,    23,    81,    82,   110,    14,   255,    94,
-     138,   139,   140,    75,    34,    81,    82,   100,    26,    39,
-      14,   140,    11,    43,    13,    11,    46,    81,    82,    49,
-     158,    51,   109,    53,    54,    55,    56,    57,   157,    81,
-      82,    11,   418,    13,   172,   173,    15,   175,   176,   177,
-     133,   437,    81,    82,    23,    10,    11,   140,    13,    11,
-     224,    16,   224,    81,    82,    20,    22,   109,   140,    24,
-      25,    11,    27,    13,    81,    82,   213,   205,   206,   207,
-     208,   209,   210,   211,   212,   204,    75,    81,    82,   110,
-     476,   477,   468,   256,   219,   220,   221,   222,   223,   562,
-     225,   226,    22,   228,   229,   224,   110,   235,   236,   237,
-     238,   239,   240,    68,    81,    82,    11,    26,    10,    81,
-      82,    16,    31,   509,    16,    81,    82,   255,    20,    22,
-     374,    26,    24,    94,    95,    22,    31,   157,    22,    92,
-      93,   269,   109,    11,    22,    13,   274,   109,    22,   232,
-     237,   238,   239,   240,   174,   110,   284,   543,   405,   110,
-     180,    81,    82,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,    73,    81,    82,   110,   313,   314,   110,    81,    82,
-     354,   110,   354,   321,    81,    82,   315,    81,    82,    47,
-      48,    49,    50,    81,    82,    11,    54,    13,    56,    53,
-     109,   374,   340,   341,   342,   343,    81,    82,    51,    52,
-      81,    82,   215,   216,    22,   353,   345,   471,   356,   357,
-     355,   507,   315,    81,    82,   354,    78,     0,    81,    82,
-     110,    16,    89,    90,   109,    20,   522,   523,   109,    24,
-     375,    14,    15,   105,   106,   107,   108,    29,   534,    22,
-      23,   109,   390,    37,    38,    97,   109,    75,   544,   545,
-     102,    66,    67,   105,   106,   107,   108,   405,   109,   109,
-      12,   557,    75,    13,    47,    48,    49,    50,    26,    26,
-     415,    54,   101,    56,   419,   110,    59,    92,    93,    94,
-      95,    96,    97,    66,    67,   430,    31,   102,   471,   437,
-     105,   106,   107,   108,    15,    29,    79,   445,    81,    82,
-      79,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    12,   109,    66,    67,   102,
-      29,    13,   105,   106,   107,   108,   109,    82,   476,   477,
-     487,    25,   489,     3,     4,     5,     6,     7,     8,     9,
-      25,   498,    25,    25,    59,    94,    95,    96,    97,   494,
-      25,    66,    67,   102,   394,    18,   105,   106,   107,   108,
-     508,   509,   110,    16,    26,    84,   110,   524,   109,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,   110,    12,    26,    12,   102,     0,     1,
-     105,   106,   107,   108,    12,   543,    12,    12,    10,    11,
-     440,    13,   559,   109,    16,   109,   109,    19,    20,    21,
-      22,   109,    24,    25,    26,    27,    28,    29,    30,   110,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    66,
-      67,   109,    54,    55,    56,    57,    58,    22,    60,    61,
-      62,    63,    64,    65,   109,   109,    68,    69,    70,    71,
-      72,    73,    74,    90,    91,    92,    93,    94,    95,    96,
-      97,    83,    79,    11,    11,   102,    12,   109,   105,   106,
-     107,   108,    22,     0,     1,    11,    98,    99,    22,   101,
-     110,   103,   104,    10,    11,   109,    13,    77,   110,    16,
-     109,    22,    19,    20,    21,    22,    22,    24,    25,    26,
-      27,    28,    29,    30,   109,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    66,    67,   109,    54,    55,    56,
-      57,    58,   110,    60,    61,    62,    63,    64,    65,    22,
-     109,    68,    69,    70,    71,    72,    73,    74,    17,    91,
-      92,    93,    94,    95,    96,    97,    83,    76,   109,    13,
-     102,   106,   508,   105,   106,   107,   108,   341,   109,     1,
-     417,    98,    99,   562,   101,   369,   103,   104,    10,    11,
-      12,    13,   276,   110,    16,   247,   370,    19,    20,    21,
-      22,   450,    24,    25,    26,    27,    28,    29,    30,   469,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    66,
-      67,   354,    54,    55,    56,    57,    58,   494,    60,    61,
-      62,    63,    64,    65,   157,   224,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    11,    96,
-      97,    83,    -1,    16,    -1,   102,    -1,    -1,   105,   106,
-     107,   108,    25,    26,     1,    -1,    98,    99,    31,   101,
-      -1,   103,   104,    10,    11,    12,    13,    -1,   110,    16,
-      -1,    -1,    19,    20,    21,    22,    -1,    24,    25,    26,
-      27,    28,    29,    30,    -1,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    66,    67,    -1,    54,    55,    56,
-      57,    58,    -1,    60,    61,    62,    63,    64,    65,    -1,
-      -1,    68,    69,    70,    71,    72,    73,    74,   102,    -1,
-      -1,   105,   106,   107,   108,    97,    83,    -1,    -1,    -1,
-     102,    -1,    -1,   105,   106,   107,   108,    -1,    -1,     1,
-      -1,    98,    99,    -1,   101,    -1,   103,   104,    10,    11,
-      12,    13,    -1,   110,    16,    -1,    -1,    19,    20,    21,
-      22,    -1,    24,    25,    26,    27,    28,    29,    30,    -1,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    66,
-      -1,    -1,    54,    55,    56,    57,    58,    -1,    60,    61,
-      62,    63,    64,    65,    -1,    -1,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      97,    83,    -1,    -1,    -1,   102,    -1,    -1,   105,   106,
-     107,   108,    -1,    -1,     1,    -1,    98,    99,    -1,   101,
-      -1,   103,   104,    10,    11,    12,    13,    -1,   110,    16,
-      -1,    -1,    19,    20,    21,    22,    -1,    24,    25,    26,
-      27,    28,    29,    30,    -1,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    -1,    60,    61,    62,    63,    64,    65,    -1,
-      -1,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
-      -1,    47,    48,    49,    50,    -1,    83,    -1,    54,    -1,
-      56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,
-      -1,    98,    99,    -1,   101,    -1,   103,   104,    10,    11,
-      12,    13,    -1,   110,    16,    81,    82,    19,    20,    21,
+      17,   264,    10,    18,     9,    20,   128,    22,    44,    24,
+      25,    19,    27,    28,   356,    16,    52,    50,    18,    50,
+      12,   480,    22,    13,    24,    25,    14,    27,    28,    44,
+      45,   512,     0,    80,   156,    50,    11,    10,    11,    47,
+      13,   140,   141,    16,    44,    45,   112,    20,    14,   112,
+      58,    24,    25,    11,    27,    11,   112,    13,    15,    14,
+      18,    11,    20,    13,    22,   112,    24,    25,    14,    27,
+      28,    96,    13,    11,    75,    13,    16,   112,    83,    14,
+      20,    13,    97,    94,    24,    43,    44,    45,    46,    11,
+      11,    15,   128,    26,   575,    83,    84,    70,    31,    23,
+     346,    22,   103,    11,    14,   564,    83,    84,    14,    26,
+     356,   112,   148,   359,   360,   107,    14,    83,    84,    14,
+     156,    77,    21,   131,    23,   158,   141,   158,    83,    84,
+     112,   139,   140,   141,   111,    34,    77,    83,    84,   112,
+      39,   141,   100,   158,    43,    77,    22,    46,    83,    84,
+      49,   159,    51,   112,    53,    54,    55,    56,    57,   258,
+     423,    10,   112,   103,   112,   173,   174,    16,   176,   177,
+     178,    20,   112,    83,    84,    24,   134,    83,    84,    11,
+      11,    13,    13,   141,    22,    83,    84,    22,    83,    84,
+     205,    29,   225,    22,   225,    22,   442,   214,   206,   207,
+     208,   209,   210,   211,   212,   213,    22,    83,    84,   112,
+     225,    22,   475,    22,    11,   220,   221,   222,   223,   224,
+     112,   226,   227,   259,   229,   230,    75,    83,    84,   571,
+     238,   239,   240,   241,   242,   243,    16,   483,   484,    11,
+      20,    13,    83,    84,    24,    77,    77,   112,    83,    84,
+     258,    22,    96,    97,    83,    84,    80,   379,    16,   158,
+      53,    11,    20,    13,   272,    22,    24,    83,    84,   277,
+     111,   517,    83,    84,    83,    84,   175,   235,    11,   287,
+      13,    11,   181,    13,   112,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   318,   111,   551,    83,    84,   316,   317,
+      11,   410,    83,    84,    29,    16,   324,    83,    84,    83,
+      84,    83,    84,    77,   357,    26,   357,    94,    95,   111,
+      31,    83,    84,   348,   111,   343,   344,   345,   346,    51,
+      52,    12,   357,   379,   361,   111,    77,   111,   356,   111,
+      13,   359,   360,   358,   481,   482,   478,    68,   485,   111,
+     318,    26,   489,   490,    83,    84,    26,    47,    48,    49,
+      50,   216,   217,   112,    54,   380,    56,    47,    48,    49,
+      50,   103,   509,   510,    54,    59,    56,   395,    99,    37,
+      38,   518,   111,   104,    89,    90,   107,   108,   109,   110,
+     515,    31,   410,    83,    84,    15,   533,    29,    81,   111,
+     537,   538,    12,    83,    84,   420,   531,   532,    29,   424,
+      13,    11,    25,    84,    25,    61,    16,   542,   555,    25,
+     435,   111,    68,    69,   442,    25,    26,   552,   553,   566,
+      25,    31,   478,   570,   452,   107,   108,   109,   110,    25,
+     565,    87,   579,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   240,   241,   242,   243,   104,   112,
+      18,   107,   108,   109,   110,   483,   484,    26,    16,   496,
+     112,   498,    86,   112,    61,   111,    12,   492,   112,    12,
+     507,    68,    69,    12,    99,    12,    12,    26,   503,   104,
+     399,    22,   107,   108,   109,   110,   521,    81,   516,   517,
+     112,    11,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   111,   111,   111,    11,   104,   111,   111,
+     107,   108,   109,   110,     0,     1,     3,     4,     5,     6,
+       7,     8,     9,   551,    10,    11,   111,    13,   447,   111,
+      16,   568,    12,    19,    20,    21,    22,   111,    24,    25,
+      26,    27,    28,    29,    30,    22,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    22,    68,    69,    54,    55,
+      56,    57,    58,   111,    60,    79,    62,    63,    64,    65,
+      66,    67,   112,   111,    70,    71,    72,    73,    74,    75,
+      76,    93,    94,    95,    96,    97,    98,    99,    22,    85,
+      22,   111,   104,   111,    22,   107,   108,   109,   110,   112,
+     111,     0,     1,   111,   100,   101,    17,   103,    78,   105,
+     106,    10,    11,   111,    13,    13,   112,    16,   111,   107,
+      19,    20,    21,    22,   516,    24,    25,    26,    27,    28,
+      29,    30,   344,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    68,    69,   571,    54,    55,    56,    57,    58,
+     422,    60,   250,    62,    63,    64,    65,    66,    67,   279,
+     375,    70,    71,    72,    73,    74,    75,    76,    94,    95,
+      96,    97,    98,    99,   457,   374,    85,   503,   104,   158,
+     476,   107,   108,   109,   110,    -1,   357,   225,    -1,     1,
+      -1,   100,   101,    -1,   103,    -1,   105,   106,    10,    11,
+      12,    13,    -1,   112,    16,    -1,    -1,    19,    20,    21,
       22,    -1,    24,    25,    26,    27,    28,    29,    30,    -1,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    -1,    60,    61,
-      62,    63,    64,    65,    -1,    -1,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     1,    -1,    98,    99,    -1,   101,
-      -1,   103,   104,    10,    11,    -1,    13,    -1,   110,    16,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    68,
+      69,    -1,    54,    55,    56,    57,    58,    -1,    60,    -1,
+      62,    63,    64,    65,    66,    67,    -1,    -1,    70,    71,
+      72,    73,    74,    75,    76,    -1,    -1,    96,    97,    98,
+      99,    -1,    -1,    85,    -1,   104,    -1,    -1,   107,   108,
+     109,   110,    -1,    -1,    -1,    -1,     1,    -1,   100,   101,
+      -1,   103,    -1,   105,   106,    10,    11,    12,    13,    -1,
+     112,    16,    -1,    -1,    19,    20,    21,    22,    -1,    24,
+      25,    26,    27,    28,    29,    30,    -1,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    68,    69,    -1,    54,
+      55,    56,    57,    58,    -1,    60,    -1,    62,    63,    64,
+      65,    66,    67,    -1,    -1,    70,    71,    72,    73,    74,
+      75,    76,    -1,    -1,    -1,    -1,    98,    99,    -1,    -1,
+      85,    -1,   104,    -1,    -1,   107,   108,   109,   110,    -1,
+      -1,    -1,    -1,     1,    -1,   100,   101,    -1,   103,    -1,
+     105,   106,    10,    11,    12,    13,    -1,   112,    16,    -1,
+      -1,    19,    20,    21,    22,    -1,    24,    25,    26,    27,
+      28,    29,    30,    -1,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    68,    69,    -1,    54,    55,    56,    57,
+      58,    -1,    60,    -1,    62,    63,    64,    65,    66,    67,
+      -1,    -1,    70,    71,    72,    73,    74,    75,    76,    -1,
+      -1,    -1,    -1,    -1,    99,    -1,    -1,    85,    -1,   104,
+      -1,    -1,   107,   108,   109,   110,    -1,    -1,    -1,    -1,
+       1,    -1,   100,   101,    -1,   103,    -1,   105,   106,    10,
+      11,    12,    13,    -1,   112,    16,    -1,    -1,    19,    20,
+      21,    22,    -1,    24,    25,    26,    27,    28,    29,    30,
+      -1,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    -1,    60,
+      -1,    62,    63,    64,    65,    66,    67,    -1,    -1,    70,
+      71,    72,    73,    74,    75,    76,   104,    -1,    -1,   107,
+     108,   109,   110,    -1,    85,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,   100,
+     101,    -1,   103,    -1,   105,   106,    10,    11,    12,    13,
+      -1,   112,    16,    -1,    -1,    19,    20,    21,    22,    -1,
+      24,    25,    26,    27,    28,    29,    30,    -1,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    -1,    60,    -1,    62,    63,
+      64,    65,    66,    67,    -1,    -1,    70,    71,    72,    73,
+      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     1,    -1,   100,   101,    -1,   103,
+      -1,   105,   106,    10,    11,    -1,    13,    -1,   112,    16,
       -1,    -1,    19,    20,    21,    22,    -1,    24,    25,    26,
       27,    28,    29,    30,    -1,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    -1,    60,    61,    62,    63,    64,    65,    -1,
-      -1,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
-      77,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,
-      -1,    98,    99,    -1,   101,    -1,   103,   104,    10,    11,
-      -1,    13,    -1,   110,    16,    -1,    -1,    19,    20,    21,
-      22,    -1,    24,    25,    26,    27,    28,    29,    30,    -1,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    -1,    54,    55,    56,    57,    58,    -1,    60,    61,
-      62,    63,    64,    65,    -1,    -1,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     1,    -1,    98,    99,    -1,   101,
-      -1,   103,   104,    10,    11,    -1,    13,    -1,   110,    16,
-      -1,    -1,    19,    20,    21,    22,    -1,    24,    25,    26,
-      27,    28,    29,    30,    -1,    32,    33,    34,    35,    36,
-      37,    38,    -1,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    56,
-      57,    58,    -1,    60,    61,    62,    63,    64,    65,    -1,
-      -1,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,
-      -1,    98,    99,    -1,   101,    10,   103,   104,    13,    -1,
-      -1,    16,    -1,   110,    19,    20,    21,    22,    -1,    24,
-      25,    26,    27,    28,    29,    30,    -1,    32,    33,    34,
-      35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,    44,
+      57,    58,    -1,    60,    -1,    62,    63,    64,    65,    66,
+      67,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
+      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    85,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    58,    -1,    -1,    61,    62,    63,    64,
-      65,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,
+      -1,     1,    -1,   100,   101,    -1,   103,    -1,   105,   106,
+      10,    11,    -1,    13,    -1,   112,    16,    -1,    -1,    19,
+      20,    21,    22,    -1,    24,    25,    26,    27,    28,    29,
+      30,    -1,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    -1,    -1,    -1,    54,    55,    56,    57,    58,    -1,
+      60,    -1,    62,    63,    64,    65,    66,    67,    -1,    -1,
+      70,    71,    72,    73,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
-      -1,    -1,    -1,    98,    99,    -1,   101,    10,   103,   104,
-      13,    -1,    -1,    16,    -1,   110,    19,    20,    21,    -1,
+     100,   101,    -1,   103,    -1,   105,   106,    10,    11,    -1,
+      13,    -1,   112,    16,    -1,    -1,    19,    20,    21,    22,
       -1,    24,    25,    26,    27,    28,    29,    30,    -1,    32,
-      33,    34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,
-      43,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    58,    -1,    -1,    61,    62,
-      63,    64,    65,     0,    -1,    68,    69,    70,    71,    72,
-      73,    74,    -1,    -1,    11,    -1,    13,    14,    15,    -1,
-      83,    -1,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,    -1,
-     103,   104,    -1,    -1,    -1,    -1,   109,   110,    -1,    -1,
-      47,    48,    49,    50,    -1,    -1,    -1,    54,    -1,    56,
-      -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    79,    -1,    81,    82,    -1,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    -1,    -1,    -1,    -1,   102,    -1,    -1,   105,   106,
-     107,   108,   109,    10,    11,    -1,    13,    -1,    -1,    16,
-      -1,    -1,    19,    20,    21,    -1,    -1,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    -1,    -1,    -1,    -1,    -1,    43,    44,    -1,    -1,
+      33,    34,    35,    36,    37,    38,    -1,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    -1,    -1,
+      -1,    54,    55,    56,    57,    58,    -1,    60,    -1,    62,
+      63,    64,    65,    66,    67,    -1,    -1,    70,    71,    72,
+      73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     1,    -1,    -1,    -1,    -1,   100,   101,    -1,
+     103,    10,   105,   106,    13,    -1,    -1,    16,    -1,   112,
+      19,    20,    21,    22,    -1,    24,    25,    26,    27,    28,
+      29,    30,    -1,    32,    33,    34,    35,    36,    37,    -1,
+      -1,    -1,    -1,    -1,    43,    44,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    58,    -1,    -1,    61,    62,    63,    64,    65,    -1,
-      -1,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    98,    99,    -1,   101,    10,   103,   104,    13,    14,
-      -1,    16,    -1,   110,    19,    20,    21,    -1,    -1,    24,
+      -1,    60,    -1,    -1,    63,    64,    65,    66,    67,    -1,
+      -1,    70,    71,    72,    73,    74,    75,    76,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,
+      -1,   100,   101,    -1,   103,    10,   105,   106,    13,    -1,
+      -1,    16,    -1,   112,    19,    20,    21,    -1,    -1,    24,
       25,    26,    27,    28,    29,    30,    -1,    32,    33,    34,
       35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,    44,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    58,    -1,    -1,    61,    62,    63,    64,
-      65,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    98,    99,    -1,   101,    -1,   103,   104,
-      10,    11,    -1,    13,    -1,   110,    16,    -1,    -1,    19,
-      20,    21,    -1,    -1,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    63,    64,
+      65,    66,    67,     0,    -1,    70,    71,    72,    73,    74,
+      75,    76,    -1,    -1,    11,    -1,    13,    14,    15,    -1,
+      85,    -1,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   100,   101,    -1,   103,    -1,
+     105,   106,    -1,    -1,    -1,    -1,   111,   112,    -1,    -1,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    -1,    56,
+      -1,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+      -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    81,    -1,    83,    84,    -1,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,     0,    68,    69,    -1,   104,    -1,    -1,
+     107,   108,   109,   110,   111,    -1,    -1,    14,    15,    -1,
+      -1,    -1,    -1,    -1,    -1,    22,    23,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,
+     104,    -1,    -1,   107,   108,   109,   110,    -1,    -1,    -1,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    -1,    56,
+      -1,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+      -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    81,    -1,    83,    84,    -1,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,    -1,    -1,    -1,    -1,   104,    -1,    -1,
+     107,   108,   109,   110,   111,    10,    11,    -1,    13,    -1,
+      -1,    16,    -1,    -1,    19,    20,    21,    -1,    -1,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,    44,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,
+      -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    63,    64,
+      65,    66,    67,    -1,    -1,    70,    71,    72,    73,    74,
+      75,    76,    92,    93,    94,    95,    96,    97,    98,    99,
+      85,    -1,    -1,    -1,   104,    -1,    -1,   107,   108,   109,
+     110,    -1,    -1,    -1,    -1,   100,   101,    -1,   103,    10,
+     105,   106,    13,    14,    -1,    16,    -1,   112,    19,    20,
+      21,    -1,    -1,    24,    25,    26,    27,    28,    29,    30,
+      -1,    32,    33,    34,    35,    36,    37,    -1,    -1,    -1,
+      -1,    -1,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
+      -1,    -1,    63,    64,    65,    66,    67,    -1,    -1,    70,
+      71,    72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,
+     101,    -1,   103,    -1,   105,   106,    10,    11,    -1,    13,
+      -1,   112,    16,    -1,    -1,    19,    20,    21,    -1,    -1,
+      24,    25,    26,    27,    28,    29,    30,    -1,    32,    33,
+      34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,
+      44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    63,
+      64,    65,    66,    67,    -1,    -1,    70,    71,    72,    73,
+      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   100,   101,    -1,   103,
+      10,   105,   106,    13,    -1,    -1,    16,    -1,   112,    19,
+      20,    21,    22,    -1,    24,    25,    26,    27,    28,    29,
       30,    -1,    32,    33,    34,    35,    36,    37,    -1,    -1,
       -1,    -1,    -1,    43,    44,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,
-      -1,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
-      70,    71,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,    99,
-      -1,   101,    10,   103,   104,    13,    -1,    -1,    16,    -1,
-     110,    19,    20,    21,    22,    -1,    24,    25,    26,    27,
-      28,    29,    30,    -1,    32,    33,    34,    35,    36,    37,
-      -1,    -1,    -1,    -1,    -1,    43,    44,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      58,    -1,    -1,    61,    62,    63,    64,    65,    -1,    -1,
-      68,    69,    70,    71,    72,    73,    74,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    -1,    -1,
+      70,    71,    72,    73,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      98,    99,    -1,   101,    10,   103,   104,    13,    -1,    -1,
-      16,    -1,   110,    19,    20,    21,    -1,    -1,    24,    25,
+     100,   101,    -1,   103,    10,   105,   106,    13,    -1,    -1,
+      16,    -1,   112,    19,    20,    21,    -1,    -1,    24,    25,
       26,    27,    28,    29,    30,    -1,    32,    33,    34,    35,
       36,    37,    -1,    -1,    -1,    -1,    -1,    43,    44,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    58,    -1,    -1,    61,    62,    63,    64,    65,
-      -1,    -1,    68,    69,    70,    71,    72,    73,    74,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,
+      -1,    -1,    -1,    -1,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    -1,    -1,    70,    71,    72,    73,    74,    75,
+      76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    98,    99,    -1,   101,    10,   103,   104,    13,
-      -1,    -1,    16,   109,   110,    19,    20,    21,    -1,    -1,
-      24,    25,    26,    27,    28,    29,    30,    -1,    32,    33,
-      34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,
-      44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    58,    -1,    -1,    61,    62,    63,
-      64,    65,    -1,    -1,    68,    69,    70,    71,    72,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    98,    99,    -1,   101,    10,   103,
-     104,    13,    -1,    -1,    16,   109,   110,    19,    20,    21,
+      -1,    -1,    -1,    -1,   100,   101,    -1,   103,    10,   105,
+     106,    13,    -1,    -1,    16,   111,   112,    19,    20,    21,
       -1,    -1,    24,    25,    26,    27,    28,    29,    30,    -1,
       32,    33,    34,    35,    36,    37,    -1,    -1,    -1,    -1,
       -1,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,    -1,    61,
-      62,    63,    64,    65,    -1,    -1,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,
-      10,   103,   104,    13,    -1,    -1,    16,   109,   110,    19,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,
+      -1,    63,    64,    65,    66,    67,    -1,    -1,    70,    71,
+      72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,   101,
+      -1,   103,    10,   105,   106,    13,    -1,    -1,    16,   111,
+     112,    19,    20,    21,    -1,    -1,    24,    25,    26,    27,
+      28,    29,    30,    -1,    32,    33,    34,    35,    36,    37,
+      -1,    -1,    -1,    -1,    -1,    43,    44,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    -1,    -1,    63,    64,    65,    66,    67,
+      -1,    -1,    70,    71,    72,    73,    74,    75,    76,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   100,   101,    -1,   103,    10,   105,   106,    13,
+      -1,    -1,    16,   111,   112,    19,    20,    21,    -1,    -1,
+      24,    25,    26,    27,    28,    29,    30,    -1,    32,    33,
+      34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,
+      44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    63,
+      64,    65,    66,    67,    -1,    -1,    70,    71,    72,    73,
+      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   100,   101,    -1,   103,
+      10,   105,   106,    13,    -1,    -1,    16,   111,   112,    19,
       20,    21,    -1,    -1,    24,    25,    26,    27,    28,    29,
       30,    -1,    32,    33,    34,    35,    36,    37,    -1,    -1,
       -1,    -1,    -1,    43,    44,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,
-      -1,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
-      70,    71,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,    99,
-      -1,   101,    10,   103,   104,    13,    -1,    -1,    16,   109,
-     110,    19,    20,    21,    -1,    -1,    24,    25,    26,    27,
-      28,    29,    30,    -1,    32,    33,    34,    35,    36,    37,
-      -1,    -1,    -1,    -1,    -1,    43,    44,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      58,    -1,    -1,    61,    62,    63,    64,    65,    -1,    -1,
-      68,    69,    70,    71,    72,    73,    74,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    -1,    -1,
+      70,    71,    72,    73,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      98,    99,    -1,   101,    10,   103,   104,    13,    -1,    -1,
-      16,   109,   110,    19,    20,    21,    -1,    -1,    24,    25,
+     100,   101,    -1,   103,    10,   105,   106,    13,    -1,    -1,
+      16,   111,   112,    19,    20,    21,    -1,    -1,    24,    25,
       26,    27,    28,    29,    30,    -1,    32,    33,    34,    35,
       36,    37,    -1,    -1,    -1,    -1,    -1,    43,    44,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    58,    -1,    -1,    61,    62,    63,    64,    65,
-      -1,    -1,    68,    69,    70,    71,    72,    73,    74,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,
+      -1,    -1,    -1,    -1,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    -1,    -1,    70,    71,    72,    73,    74,    75,
+      76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    98,    99,    -1,   101,    10,   103,   104,    13,
-      -1,    -1,    16,   109,   110,    19,    20,    21,    -1,    -1,
-      24,    25,    26,    27,    28,    29,    30,    -1,    32,    33,
-      34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,
-      44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    58,    -1,    -1,    61,    62,    63,
-      64,    65,    -1,    -1,    68,    69,    70,    71,    72,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    98,    99,    -1,   101,    10,   103,
-     104,    13,    -1,    -1,    16,   109,   110,    19,    20,    21,
+      -1,    -1,    -1,    -1,   100,   101,    -1,   103,    10,   105,
+     106,    13,    -1,    -1,    16,   111,   112,    19,    20,    21,
       -1,    -1,    24,    25,    26,    27,    28,    29,    30,    -1,
       32,    33,    34,    35,    36,    37,    -1,    -1,    -1,    -1,
       -1,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,    -1,    61,
-      62,    63,    64,    65,    -1,    -1,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,
-      10,   103,   104,    13,    -1,    -1,    16,    -1,   110,    19,
-      20,    21,    -1,    -1,    24,    25,    26,    27,    28,    29,
-      30,    -1,    32,    33,    34,    35,    36,    37,    -1,    -1,
-      -1,    -1,    -1,    43,    44,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   475,    -1,    -1,   478,    -1,    -1,    58,   482,
-     483,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
-      70,    71,    72,    73,    74,    -1,    -1,   500,   501,    -1,
-      -1,    -1,    -1,    83,    -1,    -1,    -1,   510,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,    99,
-      -1,   101,   525,   103,   104,    -1,   529,   530,    -1,    -1,
-     110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,
-      -1,    -1,    -1,    -1,   547,    -1,    66,    67,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   561,    -1,
-      -1,    -1,    -1,    -1,    84,    85,   569,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    -1,    -1,
-      -1,    -1,   102,    59,    -1,   105,   106,   107,   108,    -1,
-      66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,
-      -1,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    -1,    -1,    -1,    -1,   102,    59,    -1,   105,
-     106,   107,   108,    -1,    66,    67,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,
+      -1,    63,    64,    65,    66,    67,    -1,    -1,    70,    71,
+      72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,   101,
+      -1,   103,    10,   105,   106,    13,    -1,    -1,    16,   111,
+     112,    19,    20,    21,    -1,    -1,    24,    25,    26,    27,
+      28,    29,    30,    -1,    32,    33,    34,    35,    36,    37,
+      -1,    -1,    -1,    -1,    -1,    43,    44,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    66,    67,    -1,    -1,
-     102,    -1,    -1,   105,   106,   107,   108,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    -1,    -1,
-      -1,    -1,   102,    -1,    -1,   105,   106,   107,   108
+      -1,    -1,    60,    -1,    -1,    63,    64,    65,    66,    67,
+      -1,    -1,    70,    71,    72,    73,    74,    75,    76,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   100,   101,    -1,   103,    10,   105,   106,    13,
+      -1,    -1,    16,    -1,   112,    19,    20,    21,    -1,    -1,
+      24,    25,    26,    27,    28,    29,    30,    -1,    32,    33,
+      34,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,    43,
+      44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    -1,    63,
+      64,    65,    66,    67,    -1,    -1,    70,    71,    72,    73,
+      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    85,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+      -1,    68,    69,    -1,    -1,    -1,   100,   101,    -1,   103,
+      -1,   105,   106,    -1,    -1,    -1,    -1,    -1,   112,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,    -1,    -1,    -1,    -1,   104,    61,    -1,
+     107,   108,   109,   110,    -1,    68,    69,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    86,    87,    -1,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,
+      -1,   104,    -1,    -1,   107,   108,   109,   110
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,     5,     6,     7,     8,     9,   112,   113,
-     114,   115,   116,   117,   118,   119,     0,   122,    10,    13,
+       0,     3,     4,     5,     6,     7,     8,     9,   114,   115,
+     116,   117,   118,   119,   120,   121,     0,   124,    10,    13,
       16,    19,    20,    21,    24,    25,    26,    27,    28,    29,
-      30,    32,    33,    34,    35,    36,    37,    43,    44,    58,
-      61,    62,    63,    64,    65,    68,    69,    70,    71,    72,
-      73,    74,    83,    98,    99,   101,   103,   104,   110,   173,
-     174,   175,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   189,   192,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,    11,   120,     1,    22,    38,    40,    41,
+      30,    32,    33,    34,    35,    36,    37,    43,    44,    60,
+      63,    64,    65,    66,    67,    70,    71,    72,    73,    74,
+      75,    76,    85,   100,   101,   103,   105,   106,   112,   177,
+     178,   179,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   193,   196,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,    11,   122,     1,    22,    38,    40,    41,
       42,    45,    46,    47,    48,    49,    50,    54,    55,    56,
-      57,    60,   120,   129,   140,   173,    39,   127,   128,   129,
-     125,   167,   168,   125,    26,    31,   120,   199,   207,    14,
-     173,   207,   187,   207,   187,   207,   207,   207,   207,   188,
-      13,   110,   187,   151,   151,   151,   187,   110,   110,    78,
-     110,   120,   187,    26,   174,   191,   199,   207,   207,   120,
-     187,    22,   173,    26,    31,   153,   187,   101,   110,   190,
-     199,   200,   201,   187,   174,   187,   187,   187,   187,   187,
-     109,   173,    81,    82,    15,    11,    13,   110,    94,    95,
-      94,    92,    93,    92,    59,    66,    67,    84,    85,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-     102,   105,   106,   107,   108,   110,    11,    13,    11,    13,
-      11,    13,    11,   122,   152,   153,   153,    26,   150,   110,
-     110,   110,   110,    73,   101,   110,   197,   199,   110,   110,
-     120,    22,    53,   142,    22,    47,    48,    49,    50,    54,
-      56,   128,   129,   127,    16,    20,    24,   158,   159,   161,
-     162,   163,   164,    14,   191,   110,    78,   173,   109,   120,
-      29,   154,    75,   155,   109,   109,   173,   192,   192,   207,
-     174,    12,    22,   191,   110,   187,   190,   199,   200,   201,
-     109,   173,    75,   156,    13,   109,   173,   173,   187,   173,
-     173,   109,   173,   187,   187,   187,   187,   187,   187,   187,
-     187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-     187,   187,    10,    11,    13,    16,    20,    24,    25,    27,
-      68,   110,   177,   199,   109,   173,   173,   173,   173,   173,
-     173,   173,   173,   125,    26,   149,   150,   150,    26,   132,
-     122,   122,   122,   122,   101,   122,    73,   195,   196,   198,
-     199,   200,   201,   122,   122,   110,   122,   122,   120,   139,
-     173,   146,   173,   139,   139,   139,   139,    31,   157,   157,
-      15,   192,   174,    14,   176,   155,    29,   122,   172,   109,
-      79,   109,   173,    12,   109,   173,   156,   109,    29,   173,
-      13,    22,    14,   109,    86,    25,   173,   173,    25,    25,
-      25,    25,    25,   109,   173,   110,   109,    22,    14,    22,
-      14,    22,    14,    22,    12,    18,   121,   130,   131,    11,
-      22,    26,   145,   173,   146,   147,   173,   147,   194,   199,
-     110,   140,   144,   147,   148,   173,   195,   122,   147,   147,
-      84,   160,   160,   162,   109,    23,   193,   191,   122,   170,
-     110,   165,   166,   109,   109,    14,   173,    12,   187,    22,
-      14,   109,   192,    12,    12,    12,    12,   122,   154,   155,
-     122,    26,   109,   109,   109,   109,   110,   122,   109,    22,
-     135,   147,   109,   109,   187,   173,    79,    11,   167,    11,
-      14,    12,   109,    22,   155,    22,   171,   172,   136,   191,
-     143,   143,    11,   123,   123,   147,   147,   123,   133,   110,
-     109,   123,   123,   125,   109,   125,    77,    22,   169,   170,
-     125,    22,   123,   123,   124,    51,    52,   141,   141,   109,
-     109,   142,   145,   147,   123,    12,    12,   126,    12,   142,
-     142,   125,   123,   110,   123,   123,    22,   109,   142,    22,
-      29,   137,    12,   147,   142,   142,   134,   123,    17,    76,
-     138,   109,   143,   142,   125,   123,   148,    77,   141,   109,
-     123
+      57,    58,    62,   122,   131,   144,   177,    39,   129,   130,
+     131,   127,   171,   172,   127,    26,    31,   122,   203,   211,
+      14,   177,   211,   191,   211,   191,   211,   211,   211,   211,
+     192,    13,   112,   191,   155,   155,   155,   191,   112,   112,
+      80,   112,   122,   191,    26,   178,   195,   203,   211,   211,
+     122,   191,    22,   177,    26,    31,   157,   191,   103,   112,
+     194,   203,   204,   205,   191,   178,   191,   191,   191,   191,
+     191,   111,   177,    83,    84,    15,    11,    13,   112,    96,
+      97,    96,    94,    95,    94,    61,    68,    69,    86,    87,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   104,   107,   108,   109,   110,   112,    11,    13,    11,
+      13,    11,    13,    11,   124,   156,   157,   157,    26,   154,
+     112,   112,   112,   112,    75,   103,   112,   201,   203,   112,
+     112,   122,    11,   125,    22,    53,   146,    22,    47,    48,
+      49,    50,    54,    56,   130,   131,   129,    16,    20,    24,
+     162,   163,   165,   166,   167,   168,    14,   195,   112,    80,
+     177,   111,   122,    29,   158,    77,   159,   111,   111,   177,
+     196,   196,   211,   178,    12,    22,   195,   112,   191,   194,
+     203,   204,   205,   111,   177,    77,   160,    13,   111,   177,
+     177,   191,   177,   177,   111,   177,   191,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
+     191,   191,   191,   191,   191,    10,    11,    13,    16,    20,
+      24,    25,    27,    70,   112,   181,   203,   111,   177,   177,
+     177,   177,   177,   177,   177,   177,   127,    26,   153,   154,
+     154,    26,   134,   124,   124,   124,   124,   103,   124,    75,
+     199,   200,   202,   203,   204,   205,   124,   124,   112,   124,
+     124,   126,    59,   122,   143,   177,   150,   177,   143,   143,
+     143,   143,    31,   161,   161,    15,   196,   178,    14,   180,
+     159,    29,   124,   176,   111,    81,   111,   177,    12,   111,
+     177,   160,   111,    29,   177,    13,    22,    14,   111,    88,
+      25,   177,   177,    25,    25,    25,    25,    25,   111,   177,
+     112,   111,    22,    14,    22,    14,    22,    14,    22,    12,
+      18,   123,   132,   133,    11,    22,    26,   149,   177,   150,
+     151,   177,   151,   198,   203,   112,   144,   148,   151,   152,
+     177,   199,   124,   151,   151,   127,   112,    86,   164,   164,
+     166,   111,    23,   197,   195,   124,   174,   112,   169,   170,
+     111,   111,    14,   177,    12,   191,    22,    14,   111,   196,
+      12,    12,    12,    12,   124,   158,   159,   124,    26,   111,
+     111,   111,   111,   112,   124,   111,    22,   137,   151,   111,
+     111,    12,   138,   191,   177,    81,    11,   171,    11,    14,
+      12,   111,    22,   159,    22,   175,   176,   140,   195,   147,
+     147,   125,   125,   151,   151,   125,   135,   112,   111,   125,
+     125,   124,   127,   111,   127,    79,    22,   173,   174,   127,
+      22,   125,   125,    51,    52,   145,   145,   111,   111,   146,
+     149,   151,   125,   203,    12,    12,   128,    12,   146,   146,
+     125,   112,   125,   125,    22,   111,   146,   139,    22,    29,
+     141,   151,   146,   146,   136,   125,   111,    17,    78,   142,
+     111,   147,   146,   125,   127,   125,   152,    79,   145,   111,
+     125
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   111,   113,   112,   114,   112,   115,   112,   116,   112,
-     117,   112,   118,   112,   119,   112,   120,   121,   122,   123,
-     124,   125,   125,   126,   126,   127,   127,   128,   128,   129,
-     129,   130,   129,   131,   129,   129,   132,   129,   129,   129,
-     129,   129,   129,   129,   129,   133,   134,   129,   129,   129,
-     135,   129,   129,   129,   129,   136,   129,   129,   129,   129,
-     137,   138,   138,   139,   140,   140,   140,   140,   140,   140,
-     140,   140,   141,   141,   141,   142,   142,   143,   144,   144,
-     145,   145,   146,   147,   148,   149,   149,   150,   151,   152,
-     153,   153,   154,   154,   155,   155,   155,   156,   156,   157,
-     157,   158,   158,   159,   160,   160,   160,   161,   162,   162,
-     163,   163,   163,   164,   164,   165,   165,   166,   168,   167,
-     169,   169,   170,   171,   171,   172,   173,   173,   173,   174,
-     174,   174,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   176,   175,   177,   177,   178,   178,   178,   178,   178,
-     178,   178,   178,   178,   178,   178,   178,   178,   178,   179,
-     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
-     179,   179,   179,   180,   180,   180,   180,   181,   181,   182,
-     182,   182,   182,   183,   183,   184,   184,   184,   184,   184,
-     184,   184,   184,   184,   185,   185,   185,   185,   185,   185,
-     186,   186,   187,   187,   187,   187,   187,   187,   187,   187,
-     187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-     187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-     187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-     187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-     187,   188,   187,   187,   187,   187,   189,   189,   189,   190,
-     190,   190,   190,   190,   191,   191,   192,   192,   193,   193,
-     194,   195,   195,   195,   196,   196,   197,   197,   198,   199,
-     200,   201,   202,   202,   203,   204,   204,   205,   205,   206,
-     206,   207,   207,   207,   207
+       0,   113,   115,   114,   116,   114,   117,   114,   118,   114,
+     119,   114,   120,   114,   121,   114,   122,   123,   124,   125,
+     126,   127,   127,   128,   128,   129,   129,   130,   130,   131,
+     131,   132,   131,   133,   131,   131,   134,   131,   131,   131,
+     131,   131,   131,   131,   131,   135,   136,   131,   131,   131,
+     137,   131,   131,   131,   138,   139,   131,   131,   140,   131,
+     131,   131,   131,   141,   142,   142,   143,   144,   144,   144,
+     144,   144,   144,   144,   144,   145,   145,   145,   146,   146,
+     147,   148,   148,   149,   149,   150,   151,   152,   153,   153,
+     154,   155,   156,   157,   157,   158,   158,   159,   159,   159,
+     160,   160,   161,   161,   162,   162,   163,   164,   164,   164,
+     165,   166,   166,   167,   167,   167,   168,   168,   169,   169,
+     170,   172,   171,   173,   173,   174,   175,   175,   176,   177,
+     177,   177,   178,   178,   178,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   180,   179,   181,   181,   182,   182,
+     182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
+     182,   182,   183,   183,   183,   183,   183,   183,   183,   183,
+     183,   183,   183,   183,   183,   183,   184,   184,   184,   184,
+     185,   185,   186,   186,   186,   186,   187,   187,   188,   188,
+     188,   188,   188,   188,   188,   188,   188,   189,   189,   189,
+     189,   189,   189,   190,   190,   191,   191,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
+     191,   191,   191,   191,   192,   191,   191,   191,   191,   193,
+     193,   193,   194,   194,   194,   194,   194,   195,   195,   196,
+     196,   197,   197,   198,   199,   199,   199,   200,   200,   201,
+     201,   202,   203,   204,   205,   206,   206,   207,   208,   208,
+     209,   209,   210,   210,   211,   211,   211,   211
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_int8 yyr2[] =
+static const yytype_uint8 yyr2[] =
 {
        0,     2,     0,     4,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     0,     3,     4,     7,     0,     4,
        0,     0,     2,     0,     2,     1,     1,     2,     2,     1,
        4,     0,     7,     0,     6,     4,     0,     7,     7,     7,
        6,     6,     2,     8,     8,     0,     0,    13,     9,     8,
-       0,    10,     9,     7,     2,     0,     8,     2,     2,     1,
-       2,     0,     3,     1,     1,     1,     3,     3,     3,     3,
-       3,     3,     0,     2,     6,     0,     2,     0,     0,     1,
-       0,     1,     1,     1,     1,     1,     0,     0,     0,     0,
-       1,     1,     0,     1,     0,     2,     1,     2,     1,     0,
-       1,     1,     1,     3,     0,     1,     2,     3,     1,     1,
-       2,     3,     1,     0,     1,     0,     1,     3,     0,     2,
-       1,     1,     4,     1,     1,     5,     3,     3,     1,     2,
-       3,     1,     3,     5,     6,     3,     3,     5,     2,     4,
-       4,     0,     5,     1,     1,     5,     4,     5,     4,     5,
-       6,     5,     4,     5,     4,     3,     6,     4,     5,     3,
-       3,     3,     3,     3,     1,     1,     3,     3,     3,     3,
-       3,     3,     3,     1,     3,     2,     2,     3,     3,     1,
-       3,     2,     2,     3,     3,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     3,     2,     4,     3,     5,     4,
-       2,     2,     1,     1,     1,     1,     5,     2,     3,     1,
-       2,     3,     1,     2,     1,     1,     1,     1,     1,     1,
-       4,     4,     5,     5,     1,     1,     3,     4,     3,     4,
-       4,     4,     4,     4,     1,     2,     2,     1,     2,     2,
-       1,     2,     1,     2,     1,     3,     1,     3,     1,     3,
-       4,     0,     6,     1,     1,     1,     3,     2,     4,     3,
-       2,     1,     1,     1,     0,     1,     0,     1,     0,     2,
-       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
-       2,     2,     2,     4,     2,     1,     3,     1,     3,     1,
-       3,     1,     1,     1,     1
+       0,    10,     9,     7,     0,     0,    10,     2,     0,     8,
+       2,     2,     1,     2,     0,     3,     1,     1,     1,     3,
+       3,     3,     3,     3,     3,     0,     2,     6,     0,     2,
+       0,     0,     1,     0,     1,     1,     1,     1,     1,     0,
+       0,     0,     0,     1,     1,     0,     1,     0,     2,     1,
+       2,     1,     0,     1,     1,     1,     3,     0,     1,     2,
+       3,     1,     1,     2,     3,     1,     0,     1,     0,     1,
+       3,     0,     2,     1,     1,     4,     1,     1,     5,     3,
+       3,     1,     2,     3,     1,     3,     5,     6,     3,     3,
+       5,     2,     4,     4,     0,     5,     1,     1,     5,     4,
+       5,     4,     5,     6,     5,     4,     5,     4,     3,     6,
+       4,     5,     3,     3,     3,     3,     3,     1,     1,     3,
+       3,     3,     3,     3,     3,     3,     1,     3,     2,     2,
+       3,     3,     1,     3,     2,     2,     3,     3,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     3,     2,     4,
+       3,     5,     4,     2,     2,     1,     1,     1,     1,     5,
+       2,     3,     1,     2,     3,     1,     2,     1,     1,     1,
+       1,     1,     1,     4,     4,     5,     5,     1,     1,     3,
+       4,     3,     4,     4,     4,     4,     4,     1,     2,     2,
+       1,     2,     2,     1,     2,     1,     2,     1,     3,     1,
+       3,     1,     3,     4,     0,     6,     1,     1,     1,     3,
+       2,     4,     3,     2,     1,     1,     1,     0,     1,     0,
+       1,     0,     2,     1,     1,     1,     1,     1,     1,     2,
+       2,     2,     2,     2,     2,     2,     4,     2,     1,     3,
+       1,     3,     1,     3,     1,     1,     1,     1
 };
 
 typedef enum {
@@ -1128,34 +1140,34 @@ static const toketypes yy_type_tab[] =
   toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
-  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
-  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
   toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
   toketype_opval, toketype_ival, toketype_opval, toketype_ival, toketype_opval, toketype_opval,
   toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
-  toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
-  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
-  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
-  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval,
+  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval,
+  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival,
+  toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_opval, toketype_ival, toketype_opval, toketype_opval,
+  toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval,
+  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+  toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
   toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval,
-  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
-  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval
+  toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval
 };
 
 /* Generated from:
- * 9a5909b0af5f61f96907e330008f3cdc9dadcab1417c5bcb188cb3b9f6593c01 perly.y
+ * 427b422b0ce1154d834dc461973a3254729575694f98ab600032f67ccab7b9e5 perly.y
  * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.y b/perly.y
index 8e3630b..184fb0c 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -69,6 +69,7 @@
 %token <ival> FORMAT SUB SIGSUB ANONSUB ANON_SIGSUB PACKAGE USE
 %token <ival> WHILE UNTIL IF UNLESS ELSE ELSIF CONTINUE FOR
 %token <ival> GIVEN WHEN DEFAULT
+%token <ival> TRY CATCH
 %token <ival> LOOPEX DOTDOT YADAYADA
 %token <ival> FUNC0 FUNC1 FUNC UNIOP LSTOP
 %token <ival> MULOP ADDOP
@@ -459,6 +460,15 @@ barestmt:  PLUGSTMT
                                  newFOROP(0, NULL, $mexpr, $mblock, $cont));
                          parser->copline = (line_t)$FOR;
                        }
+       |       TRY mblock[try] CATCH PERLY_PAREN_OPEN 
+                       { parser->in_my = 1; }
+               remember scalar 
+                       { parser->in_my = 0; intro_my(); }
+               PERLY_PAREN_CLOSE mblock[catch]
+                       {
+                         $$ = newTRYCATCHOP(0,
+                                 $try, $scalar, block_end($remember, op_scope($catch)));
+                       }
        |       block cont
                        {
                          /* a block is a loop that happens once */
index a639d0f..d2e89ca 100644 (file)
@@ -31,12 +31,12 @@ afsroot='/afs'
 alignbytes='4'
 aphostname='/bin/uname -n'
 api_revision='5'
-api_subversion='6'
+api_subversion='7'
 api_version='33'
-api_versionstring='5.33.6'
+api_versionstring='5.33.7'
 ar='ar'
-archlib='/sys/lib/perl5/5.33.6/386'
-archlibexp='/sys/lib/perl5/5.33.6/386'
+archlib='/sys/lib/perl5/5.33.7/386'
+archlibexp='/sys/lib/perl5/5.33.7/386'
 archname64=''
 archname='386'
 archobjs=''
@@ -819,17 +819,17 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='/sys/lib/perl/5.33.6/386'
+installarchlib='/sys/lib/perl/5.33.7/386'
 installbin='/usr/bin'
 installman1dir='/sys/man/1pub'
 installman3dir='/sys/man/2pub'
 installprefix='/usr'
 installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.33.6'
+installprivlib='/sys/lib/perl/5.33.7'
 installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.33.6/site_perl/386'
+installsitearch='/sys/lib/perl/5.33.7/site_perl/386'
 installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.33.6/site_perl'
+installsitelib='/sys/lib/perl/5.33.7/site_perl'
 installstyle='lib/perl5'
 installusrbinperl='undef'
 installvendorarch=''
@@ -954,8 +954,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/sys/lib/perl/5.33.6'
-privlibexp='/sys/lib/perl/5.33.6'
+privlib='/sys/lib/perl/5.33.7'
+privlibexp='/sys/lib/perl/5.33.7'
 procselfexe=''
 prototype='define'
 ptrsize='4'
@@ -1020,13 +1020,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.33.6/site_perl/386'
+sitearch='/sys/lib/perl/5.33.7/site_perl/386'
 sitearchexp='/sys/lib/perl/site_perl/386'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.33.6/site_perl'
-sitelib_stem='/sys/lib/perl/5.33.6/site_perl'
-sitelibexp='/sys/lib/perl/5.33.6/site_perl'
+sitelib='/sys/lib/perl/5.33.7/site_perl'
+sitelib_stem='/sys/lib/perl/5.33.7/site_perl'
+sitelibexp='/sys/lib/perl/5.33.7/site_perl'
 siteprefix='/usr'
 siteprefixexp='/usr'
 sizesize='4'
@@ -1059,7 +1059,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/sys/include/ape/string.h'
 submit=''
-subversion='6'
+subversion='7'
 sysman='/sys/man/1pub'
 tail=''
 tar=''
@@ -1140,8 +1140,8 @@ vendorlib_stem=''
 vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
-version='5.33.6'
-version_patchlevel_string='version 33 subversion 6'
+version='5.33.7'
+version_patchlevel_string='version 33 subversion 7'
 versiononly='undef'
 vi=''
 xlibpth=''
@@ -1155,9 +1155,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=33
-PERL_SUBVERSION=6
+PERL_SUBVERSION=7
 PERL_API_REVISION=5
 PERL_API_VERSION=33
-PERL_API_SUBVERSION=6
+PERL_API_SUBVERSION=7
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
index 5ff5f60..c8d7ad8 100644 (file)
@@ -48,7 +48,7 @@
 /roffitall
 
 # generated
-/perl5336delta.pod
+/perl5337delta.pod
 /perlapi.pod
 /perlintern.pod
 /perlmodlib.pod
index b9503d5..101b842 100644 (file)
@@ -184,12 +184,14 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
 
     perlhist           Perl history records
     perldelta          Perl changes since previous version
+    perl5336delta      Perl changes in version 5.33.6
     perl5335delta      Perl changes in version 5.33.5
     perl5334delta      Perl changes in version 5.33.4
     perl5333delta      Perl changes in version 5.33.3
     perl5332delta      Perl changes in version 5.33.2
     perl5331delta      Perl changes in version 5.33.1
     perl5330delta      Perl changes in version 5.33.0
+    perl5321delta      Perl changes in version 5.32.1
     perl5320delta      Perl changes in version 5.32.0
     perl5303delta      Perl changes in version 5.30.3
     perl5302delta      Perl changes in version 5.30.2
diff --git a/pod/perl5321delta.pod b/pod/perl5321delta.pod
new file mode 100644 (file)
index 0000000..94e294e
--- /dev/null
@@ -0,0 +1,266 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5321delta - what is new for perl v5.32.1
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.32.0 release and the 5.32.1
+release.
+
+If you are upgrading from an earlier release such as 5.31.0, first read
+L<perl5320delta>, which describes differences between 5.31.0 and 5.32.0.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with Perl 5.32.0.  If any
+exist, they are bugs, and we request that you submit a report.  See
+L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Data::Dumper> has been upgraded from version 2.174 to 2.174_01.
+
+A number of memory leaks have been fixed.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.47 to 1.47_01.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20200620 to 5.20210123.
+
+=item *
+
+L<Opcode> has been upgraded from version 1.47 to 1.48.
+
+A warning has been added about evaluating untrusted code with the perl
+interpreter.
+
+=item *
+
+L<Safe> has been upgraded from version 2.41 to 2.41_01.
+
+A warning has been added about evaluating untrusted code with the perl
+interpreter.
+
+=back
+
+=head1 Documentation
+
+=head2 New Documentation
+
+=head3 L<perlgov>
+
+Documentation of the newly formed rules of governance for Perl.
+
+=head3 L<perlsecpolicy>
+
+Documentation of how the Perl security team operates and how the team evaluates
+new security reports.
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes listed in
+this document.  If you find any we have missed, open an issue at
+L<https://github.com/Perl/perl5/issues>.
+
+Additionally, the following selected changes have been made:
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+Document range op behaviour change.
+
+=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 *
+
+L<\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in mE<sol>%sE<sol>|perldiag/"\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/%s/">
+
+This error was incorrectly produced in some cases involving nested lookarounds.
+This has been fixed.
+
+[L<GH #18123|https://github.com/Perl/perl5/issues/18123>]
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+Newer 64-bit versions of the Intel C/C++ compiler are now recognized and have
+the correct flags set.
+
+=item *
+
+We now trap SIGBUS when F<Configure> checks for C<va_copy>.
+
+On several systems the attempt to determine if we need C<va_copy> or similar
+results in a SIGBUS instead of the expected SIGSEGV, which previously caused a
+core dump.
+
+[L<GH #18148|https://github.com/Perl/perl5/issues/18148>]
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and changes in this
+release.
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item MacOS (Darwin)
+
+The hints file for darwin has been updated to handle future macOS versions
+beyond 10.  Perl can now be built on macOS Big Sur.
+
+[L<GH #17946|https://github.com/Perl/perl5/issues/17946>,
+L<GH #18406|https://github.com/Perl/perl5/issues/18406>]
+
+=item Minix
+
+Build errors on Minix have been fixed.
+
+[L<GH #17908|https://github.com/Perl/perl5/issues/17908>]
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+Some list assignments involving C<undef> on the left-hand side were
+over-optimized and produced incorrect results.
+
+[L<GH #16685|https://github.com/Perl/perl5/issues/16685>,
+L<GH #17816|https://github.com/Perl/perl5/issues/17816>]
+
+=item *
+
+Fixed a bug in which some regexps with recursive subpatterns matched
+incorrectly.
+
+[L<GH #18096|https://github.com/Perl/perl5/issues/18096>]
+
+=item *
+
+Fixed a deadlock that hung the build when Perl is compiled for debugging memory
+problems and has PERL_MEM_LOG enabled.
+
+[L<GH #18341|https://github.com/Perl/perl5/issues/18341>]
+
+=item *
+
+Fixed a crash in the use of chained comparison operators when run under "no
+warnings 'uninitialized'".
+
+[L<GH #17917|https://github.com/Perl/perl5/issues/17917>,
+L<GH #18380|https://github.com/Perl/perl5/issues/18380>]
+
+=item *
+
+Exceptions thrown from destructors during global destruction are no longer
+swallowed.
+
+[L<GH #18063|https://github.com/Perl/perl5/issues/18063>]
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.32.1 represents approximately 7 months of development since Perl 5.32.0
+and contains approximately 7,000 lines of changes across 80 files from 23
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 1,300 lines of changes to 23 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its fourth decade thanks to a vibrant community
+of users and developers.  The following people are known to have contributed
+the improvements that became Perl 5.32.1:
+
+Adam Hartley, Andy Dougherty, Dagfinn Ilmari MannsÃ¥ker, Dan Book, David
+Mitchell, Graham Knop, Graham Ollis, Hauke D, H.Merijn Brand, Hugo van der
+Sanden, John Lightsey, Karen Etheridge, Karl Williamson, Leon Timmermans, Max
+Maischein, Nicolas R., Ricardo Signes, Richard Leach, Sawyer X, Sevan Janiyan,
+Steve Hay, Tom Hukins, 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 perl bug database at
+L<https://github.com/Perl/perl5/issues>.  There may also be information at
+L<http://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> for details of how to
+report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you
+can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=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
diff --git a/pod/perl5336delta.pod b/pod/perl5336delta.pod
new file mode 100644 (file)
index 0000000..9d5a2f9
--- /dev/null
@@ -0,0 +1,400 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5336delta - what is new for perl v5.33.6
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.33.5 release and the
+5.33.6 release.
+
+If you are upgrading from an earlier release such as 5.33.4, first read
+L<perl5335delta>, which describes differences between 5.33.4 and 5.33.5.
+
+=head1 Core Enhancements
+
+=head2 C<qr/{,n}/> is now accepted
+
+An empty lower bound is now accepted for regular expression quantifiers,
+like C<{,3}>.
+
+=head2 Blanks freely allowed within but adjacent to curly braces
+
+(in double-quotish contexts and regular expression patterns)
+
+This means you can write things like S<C<\x{ FFFC }>> if you like.  This
+applies to all such constructs, namely C<\b{}>, C<\g{}>, C<\k{}>,
+C<\N{}>, C<\o{}>, and C<\x{}>; as well as the regular expression
+quantifier C<{I<m>,I<n>}>.  C<\p{}> and C<\P{}> retain their
+already-existing, even looser, rules mandated by the Unicode standard
+(see L<perluniprops/Properties accessible through \p{} and \P{}>).
+
+This ability is in effect regardless of the presence of the C</x>
+regular expression pattern modifier.
+
+Additionally, the comma in a regular expression braced quantifier may
+have blanks (tabs or spaces) before and/or after the comma, like
+S<C<qr/a{ 5, 7 }/>>.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Carp> has been upgraded from version 1.51 to 1.52.
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from version 2.096 to 2.100.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from version 2.096 to 2.100.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.49 to 1.50.
+
+=item *
+
+L<ExtUtils::MakeMaker> has been upgraded from version 7.56 to 7.58.
+
+=item *
+
+L<ExtUtils::Manifest> has been upgraded from version 1.72 to 1.73.
+
+=item *
+
+L<feature> has been upgraded from version 1.61 to 1.62.
+
+Added the default enabled C<bareword_filehandles> feature.
+
+=item *
+
+L<GDBM_File> has been upgraded from version 1.18 to 1.19.
+
+New functions and compatibility for newer versions of GDBM.
+[L<GH #18435|https://github.com/Perl/perl5/pull/18435>]
+
+=item *
+
+L<IO> has been upgraded from version 1.44 to 1.45.
+
+IO::Socket now stores error messages in C<$IO::Socket::errstr>, in
+addition to in C<$@>.
+
+=item *
+
+IO-Compress has been upgraded from version 2.096 to 2.100.
+
+=item *
+
+libnet has been upgraded from version 3.12 to 3.13.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20201220 to 5.20210120.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.96 to 1.97.
+
+POSIX::signbit() behaviour has been improved.
+[L<GH #18441|https://github.com/Perl/perl5/pull/18441>]
+
+Documentation for C<asctime> clarifies that the result is always in English.
+(Use C<strftime> for a localized result.)
+
+=item *
+
+L<Socket> has been upgraded from version 2.030 to 2.031.
+
+=item *
+
+L<warnings> has been upgraded from version 1.49 to 1.50.
+
+=item *
+
+L<XS::APItest> has been upgraded from version 1.14 to 1.15.
+
+=back
+
+=head1 Documentation
+
+=head2 New Documentation
+
+=head3 L<perlgov>
+
+This document describes the goals, scope, system, and rules for Perl's new
+governance model.
+
+Other pod files, most notably L<perlpolicy>, were amended to reflect
+its adoption.
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes
+listed in this document.  If you find any we have missed, open an issue
+at L<https://github.com/Perl/perl5/issues>.
+
+Additionally, the following selected changes have been made:
+
+=head3 L<perlcommunity>
+
+=over 4
+
+=item *
+
+The freenode IRC URL has been updated.
+
+=back
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item *
+
+The L<localtime|perlfunc/localtime> entry has been improved and now
+also states that the result of the function is always in English.
+
+=back
+
+=head3 L<perlsyn>
+
+=over 4
+
+=item *
+
+A new example shows how a lexical C<my> variable can be declared
+during the initialization of a C<for> loop.
+
+=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 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<Bareword filehandle "%s" not allowed under 'no feature "bareword_filehandles"'|perldiag/"Bareword filehandle "%s" not allowed under 'no feature "bareword_filehandles"'">
+
+This accompanies the new L<bareword_filehandles|feature/"The 'bareword_filehandles' feature."> feature.
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+L<Too few arguments for subroutine '%s' (got %d; expected %d)|perldiag/"Too few arguments for subroutine '%s' (got %d; expected %d)">
+
+Subroutine argument-count mismatch errors now include the number of
+given and expected arguments.
+
+=item *
+
+L<Too many arguments for subroutine '%s' (got %d; expected %d)|perldiag/"Too many arguments for subroutine '%s' (got %d; expected %d)">
+
+Subroutine argument-count mismatch errors now include the number of
+given and expected arguments.
+
+=item *
+
+L<Lost precision when %s %f by 1|perldiag/"Lost precision when %s %f by 1">
+
+This warning was only issued for positive too-large values when 
+incrementing, and only for negative ones when decrementing.
+It is now issued for both positive or negative too-large values.
+[L<GH #18333|https://github.com/Perl/perl5/issues/18333>]
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item * Configure
+
+A new probe checks for buggy libc implementations of the C<gcvt>/C<qgcvt>
+functions.
+[L<GH #18170|https://github.com/Perl/perl5/issues/18170>]
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and
+changes in this release.  Furthermore, these significant changes were
+made:
+
+=over 4
+
+=item *
+
+F<t/re/opt.t> was added, providing a test harness for regexp optimization.
+[L<GH #18213|https://github.com/Perl/perl5/pull/18213>]
+
+=item *
+
+A workaround for CPAN distributions needing dot in C<@INC> has been removed
+[L<GH #18394|https://github.com/Perl/perl5/pull/18394>].
+All distributions that previously required the workaround have now been
+adapted.
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item Mac OS X
+
+A number of system libraries no longer exist as actual files on Big Sur,
+even though C<dlopen> will pretend they do, so now we fall back to C<dlopen>
+if a library file can not be found.
+[L<GH #18407|https://github.com/Perl/perl5/issues/18407>]
+
+=item MS Windows
+
+perl can now be built with C<USE_QUADMATH> on MS Windows using
+(32-bit and 64-bit) mingw-w64 ports of gcc.
+[L<GH #18465|https://github.com/Perl/perl5/pull/18465>]
+
+The F<pl2bat.pl> utility now needs to C<use ExtUtils::PL2Bat>. This could
+cause failures in parallel builds.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+Skip trying to constant fold an incomplete op tree
+[L<GH #18380|https://github.com/Perl/perl5/issues/18380>]
+
+Constant folding of chained comparison op trees could fail under certain
+conditions, causing perl to crash. As a quick fix, constant folding is
+now skipped for such op trees. This also addresses
+[L<GH #17917|https://github.com/Perl/perl5/issues/17917>].
+
+=item *
+
+%g formatting broken on Ubuntu-18.04, NVSIZE == 8
+[L<GH #18170|https://github.com/Perl/perl5/issues/18170>]
+
+Buggy libc implementations of the C<gcvt> and C<qgcvt> functions
+caused C<(s)printf> to incorrectly truncate C<%g> formatted numbers.
+A new Configure probe now checks for this, with the result that the libc
+C<sprintf> will be used in place of C<gcvt> and C<qgcvt>.
+
+Tests added as part of this fix also revealed related problems in
+some Windows builds. The makefiles for MINGW builds on Windows have
+thus been adjusted to use USE_MINGW_ANSI_STDIO by default, ensuring
+that they also provide correct C<(s)printf> formatting of numbers.
+
+=item *
+
+op.c: croak on "my $_" when "use utf8" is in effect
+[L<GH #18449|https://github.com/Perl/perl5/issues/18449>]
+
+The lexical topic feature experiment was removed in Perl v5.24 and
+declaring C<my $_> became a compile time error. However, it was previously
+still possible to make this declaration if C<use utf8> was in effect.
+
+=item *
+
+regexec.c: Fix assertion failure
+[L<GH #18451|https://github.com/Perl/perl5/issues/18451>]
+
+Fuzzing triggered an assertion failure in the regexp engine when too many
+characters were copied into a buffer.
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.33.6 represents approximately 4 weeks of development since Perl
+5.33.5 and contains approximately 96,000 lines of changes across 450 files
+from 26 authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 85,000 lines of changes to 320 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its fourth decade thanks to a vibrant
+community of users and developers. The following people are known to have
+contributed the improvements that became Perl 5.33.6:
+
+Branislav Zahradník, Chris 'BinGOs' Williams, Craig A. Berry, Dan Book,
+Daniel Böhmer, Daniel Laügt, Felipe Gasper, Hugo van der Sanden, James E
+Keenan, Kang-min Liu, Karen Etheridge, Karl Williamson, Leon Timmermans, Max
+Maischein, Michael G Schwern, Paul Evans, Ricardo Signes, Richard Leach,
+Sawyer X, Sergey Poznyakoff, Sisyphus, Steve Hay, TAKAI Kousuke, Tomasz
+Konojacki, Tom Hukins, 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 perl bug database
+at L<https://github.com/Perl/perl5/issues>.  There may also be information at
+L<http://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
+for details of how to report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
+you can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=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 0ee662a..55b6050 100644 (file)
@@ -2,40 +2,33 @@
 
 =head1 NAME
 
-perldelta - what is new for perl v5.33.6
+perldelta - what is new for perl v5.33.7
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.33.5 release and the
-5.33.6 release.
+This document describes differences between the 5.33.6 release and the 5.33.7
+release.
 
-If you are upgrading from an earlier release such as 5.33.4, first read
-L<perl5335delta>, which describes differences between 5.33.4 and 5.33.5.
+If you are upgrading from an earlier release such as 5.33.5, first read
+L<perl5336delta>, which describes differences between 5.33.5 and 5.33.6.
 
 =head1 Core Enhancements
 
-=head2 C<qr/{,n}/> is now accepted
+=head2 Experimental Try/Catch Syntax
 
-An empty lower bound is now accepted for regular expression quantifiers,
-like C<{,3}>.
+An initial experimental attempt at providing C<try>/C<catch> notation has
+been added.
 
-=head2 Blanks freely allowed within but adjacent to curly braces
+    use feature 'try';
 
-(in double-quotish contexts and regular expression patterns)
+    try {
+        a_function();
+    }
+    catch ($e) {
+        warn "An error occurred: $e";
+    }
 
-This means you can write things like S<C<\x{ FFFC }>> if you like.  This
-applies to all such constructs, namely C<\b{}>, C<\g{}>, C<\k{}>,
-C<\N{}>, C<\o{}>, and C<\x{}>; as well as the regular expression
-quantifier C<{I<m>,I<n>}>.  C<\p{}> and C<\P{}> retain their
-already-existing, even looser, rules mandated by the Unicode standard
-(see L<perluniprops/Properties accessible through \p{} and \P{}>).
-
-This ability is in effect regardless of the presence of the C</x>
-regular expression pattern modifier.
-
-Additionally, the comma in a regular expression braced quantifier may
-have blanks (tabs or spaces) before and/or after the comma, like
-S<C<qr/a{ 5, 7 }/>>.
+For more information, see L<perlsyn/"Try Catch Exception Handling">.
 
 =head1 Modules and Pragmata
 
@@ -45,96 +38,73 @@ S<C<qr/a{ 5, 7 }/>>.
 
 =item *
 
-L<Carp> has been upgraded from version 1.51 to 1.52.
+L<autodie> has been upgraded from version 2.32 to 2.34.
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.096 to 2.100.
+L<B::Deparse> has been upgraded from version 1.55 to 1.56.
 
 =item *
 
-L<Compress::Raw::Zlib> has been upgraded from version 2.096 to 2.100.
+L<ExtUtils::CBuilder> has been upgraded from version 0.280235 to 0.280236.
 
 =item *
 
-L<DynaLoader> has been upgraded from version 1.49 to 1.50.
+L<ExtUtils::MakeMaker> has been upgraded from version 7.58 to 7.60.
 
 =item *
 
-L<ExtUtils::MakeMaker> has been upgraded from version 7.56 to 7.58.
+L<ExtUtils::PL2Bat> has been upgraded from version 0.003 to 0.004.
 
 =item *
 
-L<ExtUtils::Manifest> has been upgraded from version 1.72 to 1.73.
+L<feature> has been upgraded from version 1.62 to 1.63.
 
 =item *
 
-L<feature> has been upgraded from version 1.61 to 1.62.
-
-Added the default enabled C<bareword_filehandles> feature.
+L<File::Find> has been upgraded from version 1.38 to 1.39.  Minor
+documentation touchups only.
 
 =item *
 
-L<GDBM_File> has been upgraded from version 1.18 to 1.19.
-
-New functions and compatibility for newer versions of GDBM.
-[L<GH #18435|https://github.com/Perl/perl5/pull/18435>]
+L<Hash::Util> has been upgraded from version 0.24 to 0.25.
 
 =item *
 
-L<IO> has been upgraded from version 1.44 to 1.45.
-
-IO::Socket now stores error messages in C<$IO::Socket::errstr>, in
-addition to in C<$@>.
+L<IO> has been upgraded from version 1.45 to 1.46.
 
 =item *
 
-IO-Compress has been upgraded from version 2.096 to 2.100.
+L<JSON::PP> has been upgraded from version 4.05 to 4.06.
 
 =item *
 
-libnet has been upgraded from version 3.12 to 3.13.
+L<Module::CoreList> has been upgraded from version 5.20210120 to 5.20210220.
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 5.20201220 to 5.20210120.
+L<mro> has been upgraded from version 1.25 to 1.25_001.
 
 =item *
 
-L<POSIX> has been upgraded from version 1.96 to 1.97.
-
-POSIX::signbit() behaviour has been improved.
-[L<GH #18441|https://github.com/Perl/perl5/pull/18441>]
-
-Documentation for C<asctime> clarifies that the result is always in English.
-(Use C<strftime> for a localized result.)
+L<Opcode> has been upgraded from version 1.49 to 1.50.
 
 =item *
 
-L<Socket> has been upgraded from version 2.030 to 2.031.
+L<PerlIO::encoding> has been upgraded from version 0.28 to 0.30.
 
 =item *
 
-L<warnings> has been upgraded from version 1.49 to 1.50.
+L<Time::HiRes> has been upgraded from version 1.9766 to 1.9767.
 
 =item *
 
-L<XS::APItest> has been upgraded from version 1.14 to 1.15.
+L<warnings> has been upgraded from version 1.50 to 1.51.
 
 =back
 
 =head1 Documentation
 
-=head2 New Documentation
-
-=head3 L<perlgov>
-
-This document describes the goals, scope, system, and rules for Perl's new
-governance model.
-
-Other pod files, most notably L<perlpolicy>, were amended to reflect
-its adoption.
-
 =head2 Changes to Existing Documentation
 
 We have attempted to update the documentation to reflect the changes
@@ -143,35 +113,16 @@ at L<https://github.com/Perl/perl5/issues>.
 
 Additionally, the following selected changes have been made:
 
-=head3 L<perlcommunity>
-
-=over 4
-
-=item *
-
-The freenode IRC URL has been updated.
-
-=back
-
 =head3 L<perlfunc>
 
 =over 4
 
 =item *
 
-The L<localtime|perlfunc/localtime> entry has been improved and now
-also states that the result of the function is always in English.
-
-=back
-
-=head3 L<perlsyn>
-
-=over 4
-
-=item *
-
-A new example shows how a lexical C<my> variable can be declared
-during the initialization of a C<for> loop.
+L<my()|perlfunc/my> and L<state()|perlfunc/state> now explicitly warn
+the reader that lexical variables should typically not be redeclared
+within the same scope or statement.
+L<[#18389]|https://github.com/Perl/perl5/issues/18389>
 
 =back
 
@@ -181,80 +132,40 @@ 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 New Diagnostics
-
-=head3 New Errors
-
-=over 4
-
-=item *
-
-L<Bareword filehandle "%s" not allowed under 'no feature|perldiag/"Bareword filehandle "%s" not allowed under 'no feature "bareword_filehandles"'">
-
-This accompanies the new L<bareword_filehandles|feature/"The 'bareword_filehandles' feature."> feature.
-
-=back
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-L<Too few arguments for subroutine '%s' (got %d; expected %d)|perldiag/"Too few arguments for subroutine '%s' (got %d; expected %d)">
-
-Subroutine argument-count mismatch errors now include the number of
-given and expected arguments.
+=head2 Changes to L<perldiag>
 
-=item *
-
-L<Too many arguments for subroutine '%s' (got %d; expected %d)|perldiag/"Too many arguments for subroutine '%s' (got %d; expected %d)">
-
-Subroutine argument-count mismatch errors now include the number of
-given and expected arguments.
-
-=item *
-
-L<Lost precision when %s %f by 1|perldiag/"Lost precision when %s %f by 1">
-
-This warning was only issued for positive too-large values when 
-incrementing, and only for negative ones when decrementing.
-It is now issued for both positive or negative too-large values.
-[L<GH #18333|https://github.com/Perl/perl5/issues/18333>]
-
-=back
-
-=head1 Configuration and Compilation
+L<perldiag> was missing some entries for existing diagnostics.
 
 =over 4
 
-=item * Configure
+=item * Error %s in expansion of %s
 
-A new probe checks for buggy libc implementations of the C<gcvt>/C<qgcvt>
-functions.
-[L<GH #18170|https://github.com/Perl/perl5/issues/18170>]
+An error was encountered in handling a user-defined property
+(L<perlunicode/User-Defined Character Properties>).  These are
+programmer written subroutines, hence subject to errors that may
+prevent them from compiling or running.
 
-=back
-
-=head1 Testing
+=item * Infinite recursion in user-defined property
 
-Tests were added and changed to reflect the other additions and
-changes in this release.  Furthermore, these significant changes were
-made:
-
-=over 4
+A user-defined property (L<perlunicode/User-Defined Character Properties>)
+can depend on the definitions of other user-defined
+properties.  If the chain of dependencies leads back to this property,
+infinite recursion would occur, were it not for the check that raised
+this error.
 
-=item *
+=item * Timeout waiting for another thread to define \p{%s}
 
-F<t/re/opt.t> was added, providing a test harness for regexp optimization.
-[L<GH #18213|https://github.com/Perl/perl5/pull/18213>]
+The first time a user-defined property
+(L<perlunicode/User-Defined Character Properties>) is used, its
+definition is looked up and converted into an internal form for more
+efficient handling in subsequent uses.  There could be a race if two or
+more threads tried to do this processing nearly simultaneously.
 
-=item *
+=item * Unknown user-defined property name \p{%s}
 
-A workaround for CPAN distributions needing dot in C<@INC> has been removed
-[L<GH #18394|https://github.com/Perl/perl5/pull/18394>].
-All distributions that previously required the workaround have now been
-adapted.
+You specified to use a property within the C<\p{...}> which was a
+syntactically valid user-defined property, but no definition was found
+for it
 
 =back
 
@@ -264,21 +175,17 @@ adapted.
 
 =over 4
 
-=item Mac OS X
-
-A number of system libraries no longer exist as actual files on Big Sur,
-even though C<dlopen> will pretend they do, so now we fall back to C<dlopen>
-if a library file can not be found.
-[L<GH #18407|https://github.com/Perl/perl5/issues/18407>]
+=item Windows
 
-=item MS Windows
+Building with mingw.org compilers (version 3.4.5 or later) using mingw runtime
+versions < 3.22 now works again.  This was broken in Perl 5.31.4.
 
-perl can now be built with C<USE_QUADMATH> on MS Windows using
-(32-bit and 64-bit) mingw-w64 ports of gcc.
-[L<GH #18465|https://github.com/Perl/perl5/pull/18465>]
+Building with mingw.org compilers (version 3.4.5 or later) using mingw runtime
+versions >= 3.21 now works (for compilers up to version 5.3.0).
 
-The F<pl2bat.pl> utility now needs to C<use ExtUtils::PL2Bat>. This could
-cause failures in parallel builds.
+Makefile.mk, and thus support for dmake, has been removed. It is still possible
+to build Perl on Windows using nmake (Makefile) and GNU make (GNUmakefile).
+[L<GH #18511|https://github.com/Perl/perl5/pull/18511>]
 
 =back
 
@@ -286,69 +193,40 @@ cause failures in parallel builds.
 
 =over 4
 
-=item *
-
-Skip trying to constant fold an incomplete op tree
-[L<GH #18380|https://github.com/Perl/perl5/issues/18380>]
-
-Constant folding of chained comparison op trees could fail under certain
-conditions, causing perl to crash. As a quick fix, constant folding is
-now skipped for such op trees. This also addresses
-[L<GH #17917|https://github.com/Perl/perl5/issues/17917>].
-
-=item *
-
-%g formatting broken on Ubuntu-18.04, NVSIZE == 8
-[L<GH #18170|https://github.com/Perl/perl5/issues/18170>]
-
-Buggy libc implementations of the C<gcvt> and C<qgcvt> functions
-caused C<(s)printf> to incorrectly truncate C<%g> formatted numbers.
-A new Configure probe now checks for this, with the result that the libc
-C<sprintf> will be used in place of C<gcvt> and C<qgcvt>.
+=item * pack/unpack format 'D' now works on all systems that could support it
 
-Tests added as part of this fix also revealed related problems in
-some Windows builds. The makefiles for MINGW builds on Windows have
-thus been adjusted to use USE_MINGW_ANSI_STDIO by default, ensuring
-that they also provide correct C<(s)printf> formatting of numbers.
+Previously if C<NV == long double>, now it is supported on all platforms that
+have long doubles. In particular that means it is now also supported on
+quadmath platforms.
 
-=item *
-
-op.c: croak on "my $_" when "use utf8" is in effect
-[L<GH #18449|https://github.com/Perl/perl5/issues/18449>]
-
-The lexical topic feature experiment was removed in Perl v5.24 and
-declaring C<my $_> became a compile time error. However, it was previously
-still possible to make this declaration if C<use utf8> was in effect.
-
-=item *
-
-regexec.c: Fix assertion failure
-[L<GH #18451|https://github.com/Perl/perl5/issues/18451>]
+=back
 
-Fuzzing triggered an assertion failure in the regexp engine when too many
-characters were copied into a buffer.
+=head1 Obituary
 
-=back
+Kent Fredric (KENTNL) passed away in February 2021.  A native of New Zealand
+and a self-described "huge geek," Kent was the author or maintainer of 178
+CPAN distributions, the Perl maintainer for the Gentoo Linux distribution and
+a contributor to the Perl core distribution.  He is mourned by his family,
+friends and open source software communities worldwide.
 
 =head1 Acknowledgements
 
-Perl 5.33.6 represents approximately 4 weeks of development since Perl
-5.33.5 and contains approximately 96,000 lines of changes across 450 files
-from 26 authors.
+Perl 5.33.7 represents approximately 4 weeks of development since Perl
+5.33.6 and contains approximately 11,000 lines of changes across 230 files
+from 19 authors.
 
 Excluding auto-generated files, documentation and release tools, there were
-approximately 85,000 lines of changes to 320 .pm, .t, .c and .h files.
+approximately 2,800 lines of changes to 140 .pm, .t, .c and .h files.
 
 Perl continues to flourish into its fourth decade thanks to a vibrant
 community of users and developers. The following people are known to have
-contributed the improvements that became Perl 5.33.6:
-
-Branislav Zahradník, Chris 'BinGOs' Williams, Craig A. Berry, Dan Book,
-Daniel Böhmer, Daniel Laügt, Felipe Gasper, Hugo van der Sanden, James E
-Keenan, Kang-min Liu, Karen Etheridge, Karl Williamson, Leon Timmermans, Max
-Maischein, Michael G Schwern, Paul Evans, Ricardo Signes, Richard Leach,
-Sawyer X, Sergey Poznyakoff, Sisyphus, Steve Hay, TAKAI Kousuke, Tomasz
-Konojacki, Tom Hukins, Tony Cook.
+contributed the improvements that became Perl 5.33.7:
+
+Andy Dougherty, Chris 'BinGOs' Williams, Craig A. Berry, Dan Book, Eugene
+Alvin Villar, H.Merijn Brand, Hugo van der Sanden, James E Keenan, Karl
+Williamson, Leon Timmermans, Paul Evans, Ricardo Signes, Richard Leach,
+Sawyer X, Steve Hay, Tomasz Konojacki, Tony Cook, Yves Orton, Zakariyya
+Mughal.
 
 The list above is almost certainly incomplete as it is automatically
 generated from version control history. In particular, it does not include
index 9c91630..98d159d 100644 (file)
@@ -2195,6 +2195,20 @@ single form when it must operate on them directly.  Either you've passed
 an invalid file specification to Perl, or you've found a case the
 conversion routines don't handle.  Drat.
 
+=item Error %s in expansion of %s
+
+(F) An error was encountered in handling a user-defined property
+(L<perlunicode/User-Defined Character Properties>).  These are
+programmer written subroutines, hence subject to errors that may
+prevent them from compiling or running.  The calls to these subs are
+C<eval>'d, and if there is a failure, this message is raised, using the
+contents of C<$@> from the failed C<eval>.
+
+Another possibility is that tainted data was encountered somewhere in
+the chain of expanding the property.  If so, the message wording will
+indicate that this is the problem.  See L</Insecure user-defined
+property %s>.
+
 =item Eval-group in insecure regular expression
 
 (F) Perl detected tainted data when trying to compile a regular
@@ -2836,6 +2850,16 @@ not match 8 spaces.
 text.  You should check the pattern to ensure that recursive patterns
 either consume text or fail.
 
+=item Infinite recursion in user-defined property
+
+(F) A user-defined property (L<perlunicode/User-Defined Character
+Properties>) can depend on the definitions of other user-defined
+properties.  If the chain of dependencies leads back to this property,
+infinite recursion would occur, were it not for the check that raised
+this error.
+
+Restructure your property definitions to avoid this.
+
 =item Infinite recursion via empty pattern
 
 (F) You tried to use the empty pattern inside of a regex code block,
@@ -6273,6 +6297,20 @@ lexicals that are initialized only once (see L<feature>):
 This use of C<my()> in a false conditional was deprecated beginning in
 Perl 5.10 and became a fatal error in Perl 5.30.
 
+=item Timeout waiting for another thread to define \p{%s}
+
+(F) The first time a user-defined property
+(L<perlunicode/User-Defined Character Properties>) is used, its
+definition is looked up and converted into an internal form for more
+efficient handling in subsequent uses.  There could be a race if two or
+more threads tried to do this processing nearly simultaneously.
+Instead, a critical section is created around this task, locking out all
+but one thread from doing it.  This message indicates that the thread
+that is doing the conversion is taking an unexpectedly long time.  The
+timeout exists solely to prevent deadlock; it's long enough that the
+system was likely thrashing and about to crash.  There is no real remedy but
+rebooting.
+
 =item times not implemented
 
 (F) Your version of the C library apparently doesn't do times().  I
@@ -6415,6 +6453,12 @@ disallowed.  See L<Safe>.
 (F) Your machine doesn't implement a file truncation mechanism that
 Configure knows about.
 
+=item try/catch is experimental
+
+(S experimental::try) This warning is emitted if you use the C<try> and
+C<catch> syntax. This syntax is currently experimental and its behaviour may
+change in future releases of Perl.
+
 =item Type of arg %d to &CORE::%s must be %s
 
 (F) The subroutine in question in the CORE package requires its argument
@@ -6846,6 +6890,13 @@ for the list of known options.
 L<perlrun|perlrun/-C [numberE<sol>list]> documentation of the C<-C> switch
 for the list of known options.
 
+=item Unknown user-defined property name \p{%s}
+
+(F) You specified to use a property within the C<\p{...}> which was a
+syntactically valid user-defined property, but no definition was found
+for it by the time one was required to proceed.  Check your spelling.
+See L<perlunicode/User-Defined Character Properties>.
+
 =item Unknown verb pattern '%s' in regex; marked by S<<-- HERE> in m/%s/
 
 (F) You either made a typo or have incorrectly put a C<*> quantifier
index f239ba1..927a2d8 100644 (file)
@@ -1038,7 +1038,7 @@ The interpreter program that reads and executes Perl code is named
 name).
 
 Generally, unless you are specifically writing about the
-command-line C<perl> progam (as, for example, L<C<perlrun>|perlrun>
+command-line C<perl> program (as, for example, L<C<perlrun>|perlrun>
 does), use "Perl" instead.
 
 =item Perl 5
index 927d374..6e428b2 100644 (file)
@@ -4350,6 +4350,17 @@ A L<C<my>|/my VARLIST> declares the listed variables to be local
 more than one variable is listed, the list must be placed in
 parentheses.
 
+Note that with a parenthesised list, L<C<undef>|/undef EXPR> can be used
+as a dummy placeholder, for example to skip assignment of initial
+values:
+
+    my ( undef, $min, $hour ) = localtime;
+
+Redeclaring a variable in the same scope or statement will "shadow" the
+previous declaration, creating a new instance and preventing access to
+the previous one. This is usually undesired and, if warnings are enabled,
+will result in a warning in the C<shadow> category.
+
 The exact semantics and interface of TYPE and ATTRS are still
 evolving.  TYPE may be a bareword, a constant declared
 with L<C<use constant>|constant>, or L<C<__PACKAGE__>|/__PACKAGE__>.  It
@@ -4359,12 +4370,6 @@ and attributes are handled using the L<attributes> pragma, or starting
 from Perl 5.8.0 also via the L<Attribute::Handlers> module.  See
 L<perlsub/"Private Variables via my()"> for details.
 
-Note that with a parenthesised list, L<C<undef>|/undef EXPR> can be used
-as a dummy placeholder, for example to skip assignment of initial
-values:
-
-    my ( undef, $min, $hour ) = localtime;
-
 =item next LABEL
 X<next> X<continue>
 
@@ -5200,8 +5205,7 @@ of values, as follows:
     F  A Perl internal floating-point value (NV) in native format
     D  A float of long-double precision in native format.
          (Long doubles are available only if your system supports
-          long double values _and_ if Perl has been compiled to
-          support those.  Raises an exception otherwise.
+          long double values. Raises an exception otherwise.
           Note that there are different long double formats.)
 
     p  A pointer to a null-terminated string.
@@ -6555,7 +6559,8 @@ X<rename> X<move> X<mv> X<ren>
 =for Pod::Functions change a filename
 
 Changes the name of a file; an existing file NEWNAME will be
-clobbered.  Returns true for success, false otherwise.
+clobbered.  Returns true for success; on failure returns false and sets
+L<C<$!>|perlvar/$!>.
 
 Behavior of this function varies wildly depending on your system
 implementation.  For example, it will usually not work across file system
@@ -8578,6 +8583,11 @@ used as a
 dummy placeholder.  However, since initialization of state variables in
 such lists is currently not possible this would serve no purpose.
 
+Redeclaring a variable in the same scope or statement will "shadow" the
+previous declaration, creating a new instance and preventing access to
+the previous one. This is usually undesired and, if warnings are enabled,
+will result in a warning in the C<shadow> category.
+
 L<C<state>|/state VARLIST> is available only if the
 L<C<"state"> feature|feature/The 'state' feature> is enabled or if it is
 prefixed with C<CORE::>.  The
index 64ba610..e636771 100644 (file)
@@ -474,7 +474,7 @@ The current members of the Perl Core Team are:
 
 =item * Abhijit Menon-Sen (inactive)
 
-=item * Andy Dougherty
+=item * Andy Dougherty (inactive)
 
 =item * Chad Granum
 
index c760082..1d436b6 100644 (file)
@@ -1166,7 +1166,7 @@ source, and we'll do that later on.
 Gisle Aas's "illustrated perlguts", also known as I<illguts>, has very
 helpful pictures:
 
-L<https://search.cpan.org/dist/illguts/>
+L<https://metacpan.org/release/RURBAN/illguts-0.49>
 
 =item * L<perlxstut> and L<perlxs>
 
index 71ecae3..84ec13b 100644 (file)
@@ -696,6 +696,7 @@ the strings?).
  Sawyer X  5.32.0-RC1   2020-Jun-07
  Sawyer X  5.32.0       2020-Jun-20
  Steve     5.32.1-RC1   2021-Jan-09
+ Steve     5.32.1       2021-Jan-23
 
  Sawyer X  5.33.0       2020-Jul-17     The 5.33 development track
  Ether     5.33.1       2020-Aug-20
@@ -704,6 +705,7 @@ the strings?).
  Tom H     5.33.4       2020-Nov-20
  Max M     5.33.5       2020-Dec-20
  Richard L 5.33.6       2021-Jan-20
+ Renee     5.33.7       2021-Feb-20
 
 =head2 SELECTED RELEASE SIZES
 
index aba1ab9..b07ef71 100644 (file)
@@ -139,10 +139,7 @@ If you used WinZip, this was already done for you.
 
    C. BUILD
 
-You'll need the C<nmake> utility, available at
-L<http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe>
-or dmake, available on CPAN.
-L<https://metacpan.org/release/dmake>
+You'll need either C<nmake> or C<gmake>.
 
 Does the module require compilation (i.e. does it have files that end
 in .xs, .c, .h, .y, .cc, .cxx, or .C)?  If it does, life is now
index ba54b92..c03fd9c 100644 (file)
@@ -606,8 +606,7 @@ question affirms they will not transgress again.
 Removals, like warnings, are public.
 
 The list of moderators will be public knowledge.  At present, it is:
-Karen Etheridge, Ricardo Signes, Sawyer X,
-Steffen Müller, Todd Rinaldo, Aaron Crane.
+Karen Etheridge, Ricardo Signes, Sawyer X, Todd Rinaldo, Aaron Crane.
 
 =head1 CREDITS
 
index f963fe7..bd49ac7 100644 (file)
@@ -313,7 +313,8 @@ The default behavior for matching can be changed, using various
 modifiers.  Modifiers that relate to the interpretation of the pattern
 are listed just below.  Modifiers that alter the way a pattern is used
 by Perl are detailed in L<perlop/"Regexp Quote-Like Operators"> and
-L<perlop/"Gory details of parsing quoted constructs">.
+L<perlop/"Gory details of parsing quoted constructs">.  Modifiers can be added
+dynamically; see L</Extended Patterns> below.
 
 =over 4
 
index ce196f3..6e9342a 100644 (file)
@@ -20,8 +20,10 @@ expressions will allow you to manipulate text with surprising ease.
 What is a regular expression?  At its most basic, a regular expression
 is a template that is used to determine if a string has certain
 characteristics.  The string is most often some text, such as a line,
-sentence, web page, or even a whole book, but less commonly it could be
-some binary data as well.
+sentence, web page, or even a whole book, but it doesn't have to be.  It
+could be binary data, for example.  Biologists often use Perl to look
+for patterns in long DNA sequences.
+
 Suppose we want to determine if the text in variable, C<$var> contains
 the sequence of characters S<C<m u s h r o o m>>
 (blanks added for legibility).  We can write in Perl
@@ -29,8 +31,9 @@ the sequence of characters S<C<m u s h r o o m>>
  $var =~ m/mushroom/
 
 The value of this expression will be TRUE if C<$var> contains that
-sequence of characters, and FALSE otherwise.  The portion enclosed in
-C<'E<sol>'> characters denotes the characteristic we are looking for.
+sequence of characters anywhere within it, and FALSE otherwise.  The
+portion enclosed in C<'E<sol>'> characters denotes the characteristic we
+are looking for.
 We use the term I<pattern> for it.  The process of looking to see if the
 pattern occurs in the string is called I<matching>, and the C<"=~">
 operator along with the C<m//> tell Perl to try to match the pattern
@@ -135,7 +138,7 @@ And finally, the C<//> default delimiters for a match can be changed
 to arbitrary delimiters by putting an C<'m'> out front:
 
     "Hello World" =~ m!World!;   # matches, delimited by '!'
-    "Hello World" =~ m{World};   # matches, note the matching '{}'
+    "Hello World" =~ m{World};   # matches, note the paired '{}'
     "/usr/bin/perl" =~ m"/perl"; # matches after '/usr/bin',
                                  # '/' becomes an ordinary char
 
@@ -151,7 +154,7 @@ Let's consider how different regexps would match C<"Hello World">:
     "Hello World" =~ /oW/;     # doesn't match
     "Hello World" =~ /World /; # doesn't match
 
-The first regexp C<world> doesn't match because regexps are
+The first regexp C<world> doesn't match because regexps are by default
 case-sensitive.  The second regexp matches because the substring
 S<C<'o W'>> occurs in the string S<C<"Hello World">>.  The space
 character C<' '> is treated like any other character in a regexp and is
@@ -169,8 +172,8 @@ always match at the earliest possible point in the string:
     "That hat is red" =~ /hat/; # matches 'hat' in 'That'
 
 With respect to character matching, there are a few more points you
-need to know about.   First of all, not all characters can be used "as
-is" in a match.  Some characters, called I<metacharacters>, are
+need to know about.   First of all, not all characters can be used
+"as-is" in a match.  Some characters, called I<metacharacters>, are
 generally reserved for use in regexp notation.  The metacharacters are
 
     {}[]()^$.|*+?-#\
@@ -832,8 +835,8 @@ Counting the opening parentheses to get the correct number for a
 backreference is error-prone as soon as there is more than one
 capturing group.  A more convenient technique became available
 with Perl 5.10: relative backreferences. To refer to the immediately
-preceding capture group one now may write C<\g{-1}>, the next but
-last is available via C<\g{-2}>, and so on.
+preceding capture group one now may write C<\g-1> or C<\g{-1}>, the next but
+last is available via C<\g-2> or C<\g{-2}>, and so on.
 
 Another good reason in addition to readability and maintainability
 for using relative backreferences is illustrated by the following example,
@@ -1989,10 +1992,11 @@ C<\x>I<XY> (without curly braces and I<XY> are two hex digits) doesn't
 go further than 255.  (Starting in Perl 5.14, if you're an octal fan,
 you can also use C<\o{oct}>.)
 
-    /\x{263a}/;  # match a Unicode smiley face :)
+    /\x{263a}/;   # match a Unicode smiley face :)
+    /\x{ 263a }/; # Same
 
 B<NOTE>: In Perl 5.6.0 it used to be that one needed to say C<use
-utf8> to use any Unicode features.  This is no more the case: for
+utf8> to use any Unicode features.  This is no longer the case: for
 almost all Unicode processing, the explicit C<utf8> pragma is not
 needed.  (The only case where it matters is if your Perl script is in
 Unicode and encoded in UTF-8, then an explicit C<use utf8> is needed.)
@@ -2070,16 +2074,16 @@ C<\p{Mark}>, meaning things like accent marks.
 
 The Unicode C<\p{Script}> and C<\p{Script_Extensions}> properties are
 used to categorize every Unicode character into the language script it
-is written in.  (C<Script_Extensions> is an improved version of
-C<Script>, which is retained for backward compatibility, and so you
-should generally use C<Script_Extensions>.)
-For example,
+is written in.  For example,
 English, French, and a bunch of other European languages are written in
 the Latin script.  But there is also the Greek script, the Thai script,
-the Katakana script, I<etc>.  You can test whether a character is in a
-particular script (based on C<Script_Extensions>) with, for example
-C<\p{Latin}>, C<\p{Greek}>, or C<\p{Katakana}>.  To test if it isn't in
-the Balinese script, you would use C<\P{Balinese}>.
+the Katakana script, I<etc>.  (C<Script> is an older, less advanced,
+form of C<Script_Extensions>, retained only for backwards
+compatibility.)  You can test whether a character is in a particular
+script  with, for example C<\p{Latin}>, C<\p{Greek}>, or
+C<\p{Katakana}>.  To test if it isn't in the Balinese script, you would
+use C<\P{Balinese}>.  (These all use C<Script_Extensions> under the
+hood, as that gives better results.)
 
 What we have described so far is the single form of the C<\p{...}> character
 classes.  There is also a compound form which you may run into.  These
@@ -2458,10 +2462,10 @@ parentheses and the second alternative C<\([^()]*\)>  matching a
 substring delimited by parentheses.  The problem with this regexp is
 that it is pathological: it has nested indeterminate quantifiers
 of the form C<(a+|b)+>.  We discussed in Part 1 how nested quantifiers
-like this could take an exponentially long time to execute if there
-was no match possible.  To prevent the exponential blowup, we need to
-prevent useless backtracking at some point.  This can be done by
-enclosing the inner quantifier as an independent subexpression:
+like this could take an exponentially long time to execute if no match
+were possible.  To prevent the exponential blowup, we need to prevent
+useless backtracking at some point.  This can be done by enclosing the
+inner quantifier as an independent subexpression:
 
     $x =~ /\( ( (?> [ ^ () ]+ ) | \([ ^ () ]* \) )+ \)/xx;
 
@@ -2645,8 +2649,8 @@ section L</"Pragmas and debugging"> below.
 
 More fun with C<?{}>:
 
-    $x =~ /(?{print "Hi Mom!";})/;       # matches,
-                                         # prints 'Hi Mom!'
+    $x =~ /(?{print "Hi Mom!";})/;         # matches,
+                                           # prints 'Hi Mom!'
     $x =~ /(?{$c = 1;})(?{print "$c";})/;  # matches,
                                            # prints '1'
     $x =~ /(?{$c = 1;})(?{print "$^R";})/; # matches,
index a96331f..8e30456 100644 (file)
@@ -282,6 +282,10 @@ The following compound statements may be used to control flow:
 
     PHASE BLOCK
 
+If enabled by the experimental C<try> feature, the following may also be used
+
+    try BLOCK catch (VAR) BLOCK
+
 The experimental C<given> statement is I<not automatically enabled>; see
 L</"Switch Statements"> below for how to do so, and the attendant caveats.
 
@@ -315,7 +319,7 @@ by a colon.  The LABEL identifies the loop for the loop control
 statements C<next>, C<last>, and C<redo>.
 If the LABEL is omitted, the loop control statement
 refers to the innermost enclosing loop.  This may include dynamically
-looking back your call-stack at run time to find the LABEL.  Such
+searching through your call-stack at run time to find the LABEL.  Such
 desperate behavior triggers a warning if you use the C<use warnings>
 pragma or the B<-w> flag.
 
@@ -606,6 +610,65 @@ block.  The reward for this discovery is this cautionary advice:  The
 return value of a C<for> loop is unspecified and may change without notice.
 Do not rely on it.
 
+=head2 Try Catch Exception Handling
+X<try> X<catch>
+
+The C<try>/C<catch> syntax provides control flow relating to exception
+handling. The C<try> keyword introduces a block which will be executed when it
+is encountered, and the C<catch> block provides code to handle any exception
+that may be thrown by the first.
+
+    try {
+        my $x = call_a_function();
+        $x < 100 or die "Too big";
+        send_output($x);
+    }
+    catch ($e) {
+        warn "Unable to output a value; $e";
+    }
+    print "Finished\n";
+
+Here, the body of the C<catch> block (i.e. the C<warn> statement) will be
+executed if the initial block invokes the conditional C<die>, or if either of
+the functions it invokes throws an uncaught exception. The C<catch> block can
+inspect the C<$e> lexical variable in this case to see what the exception was.
+If no exception was thrown then the C<catch> block does not happen. In either
+case, execution will then continue from the following statement - in this
+example the C<print>.
+
+The C<catch> keyword must be immediately followed by a variable declaration in
+parentheses, which introduces a new variable visible to the body of the
+subsequent block. Inside the block this variable will contain the exception
+value that was thrown by the code in the C<try> block. It is not necessary
+to use the C<my> keyword to declare this variable; this is implied (similar
+as it is for function signatures).
+
+Both the C<try> and the C<catch> blocks are permitted to contain control-flow
+expressions, such as C<return>, C<goto>, or C<next>/C<last>/C<redo>. In all
+cases they behave as expected without warnings. In particular, a C<return>
+expression inside the C<try> block will make its entire containing function
+return - this is in contrast to its behaviour inside an C<eval> block, where
+it would only make that block return.
+
+Like other control-flow syntax, C<try> and C<catch> will yield the last
+evaluated value when placed as the final statement in a function or a C<do>
+block. This permits the syntax to be used to create a value. In this case
+remember not to use the C<return> expression, or that will cause the
+containing function to return.
+
+    my $value = do {
+        try {
+            get_thing(@args);
+        }
+        catch ($e) {
+            warn "Unable to get thing - $e";
+            $DEFAULT_THING;
+        }
+    };
+
+This syntax is currently experimental and must be enabled with
+C<use feature 'try'>. It emits a warning in the C<experimental::try> category.
+
 =head2 Basic BLOCKs
 X<block>
 
diff --git a/pp.c b/pp.c
index d0e639f..df29cf8 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -4461,6 +4461,8 @@ PP(pp_lc)
         }
     }
 
+#else
+    PERL_UNUSED_VAR(has_turkic_I);
 #endif
 
     /* Overloaded values may have toggled the UTF-8 flag on source, so we need
@@ -6005,13 +6007,13 @@ PP(pp_split)
     I32 trailing_empty = 0;
     const char *orig;
     const IV origlimit = limit;
-    I32 realarray = 0;
+    bool realarray = 0;
     I32 base;
     const U8 gimme = GIMME_V;
     bool gimme_scalar;
     I32 oldsave = PL_savestack_ix;
-    U32 make_mortal = SVs_TEMP;
-    bool multiline = 0;
+    U32 flags = (do_utf8 ? SVf_UTF8 : 0) |
+         SVs_TEMP; /* Make mortal SVs by default */
     MAGIC *mg = NULL;
 
     rx = PM_GETRE(pm);
@@ -6051,7 +6053,7 @@ PP(pp_split)
            PUSHMARK(SP);
            XPUSHs(SvTIED_obj(MUTABLE_SV(ary), mg));
        } else {
-           make_mortal = 0;
+           flags &= ~SVs_TEMP; /* SVs will not be mortal */
        }
     }
 
@@ -6075,9 +6077,6 @@ PP(pp_split)
                s++;
        }
     }
-    if (RX_EXTFLAGS(rx) & RXf_PMf_MULTILINE) {
-       multiline = 1;
-    }
 
     gimme_scalar = gimme == G_SCALAR && !ary;
 
@@ -6119,8 +6118,7 @@ PP(pp_split)
                else
                    trailing_empty = 0;
            } else {
-               dstr = newSVpvn_flags(s, m-s,
-                                     (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
+               dstr = newSVpvn_flags(s, m-s, flags);
                XPUSHs(dstr);
            }
 
@@ -6164,8 +6162,7 @@ PP(pp_split)
                else
                    trailing_empty = 0;
            } else {
-               dstr = newSVpvn_flags(s, m-s,
-                                     (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
+               dstr = newSVpvn_flags(s, m-s, flags);
                XPUSHs(dstr);
            }
            s = m;
@@ -6209,12 +6206,12 @@ PP(pp_split)
                 while (--limit) {
                     m = s;
                     s += UTF8SKIP(s);
-                    dstr = newSVpvn_flags(m, s-m, SVf_UTF8 | make_mortal);
+                    dstr = newSVpvn_flags(m, s-m, flags);
                     PUSHs(dstr);
                 }
             } else {
                 while (--limit) {
-                    dstr = newSVpvn_flags(s, 1, make_mortal);
+                    dstr = newSVpvn_flags(s, 1, flags);
                     PUSHs(dstr);
                     s++;
                 }
@@ -6243,8 +6240,7 @@ PP(pp_split)
                    else
                        trailing_empty = 0;
                } else {
-                   dstr = newSVpvn_flags(s, m-s,
-                                        (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
+                   dstr = newSVpvn_flags(s, m-s, flags);
                    XPUSHs(dstr);
                }
                /* The rx->minlen is in characters but we want to step
@@ -6256,6 +6252,8 @@ PP(pp_split)
            }
        }
        else {
+           const bool multiline = (RX_EXTFLAGS(rx) & RXf_PMf_MULTILINE) ? 1 : 0;
+
            while (s < strend && --limit &&
              (m = fbm_instr((unsigned char*)s, (unsigned char*)strend,
                             csv, multiline ? FBMrf_MULTILINE : 0)) )
@@ -6267,8 +6265,7 @@ PP(pp_split)
                    else
                        trailing_empty = 0;
                } else {
-                   dstr = newSVpvn_flags(s, m-s,
-                                        (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
+                   dstr = newSVpvn_flags(s, m-s, flags);
                    XPUSHs(dstr);
                }
                /* The rx->minlen is in characters but we want to step
@@ -6304,8 +6301,7 @@ PP(pp_split)
                else
                    trailing_empty = 0;
            } else {
-               dstr = newSVpvn_flags(s, m-s,
-                                     (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
+               dstr = newSVpvn_flags(s, m-s, flags);
                XPUSHs(dstr);
            }
            if (RX_NPARENS(rx)) {
@@ -6325,9 +6321,7 @@ PP(pp_split)
                            trailing_empty = 0;
                    } else {
                        if (m >= orig && s >= orig) {
-                           dstr = newSVpvn_flags(s, m-s,
-                                                (do_utf8 ? SVf_UTF8 : 0)
-                                                 | make_mortal);
+                           dstr = newSVpvn_flags(s, m-s, flags);
                        }
                        else
                            dstr = &PL_sv_undef;  /* undef, not "" */
@@ -6350,7 +6344,7 @@ PP(pp_split)
     if (s < strend || (iters && origlimit)) {
        if (!gimme_scalar) {
            const STRLEN l = strend - s;
-           dstr = newSVpvn_flags(s, l, (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
+           dstr = newSVpvn_flags(s, l, flags);
            XPUSHs(dstr);
        }
        iters++;
@@ -6360,7 +6354,7 @@ PP(pp_split)
            iters -= trailing_empty;
        } else {
            while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) {
-               if (TOPs && !make_mortal)
+               if (TOPs && !(flags & SVs_TEMP))
                    sv_2mortal(TOPs);
                *SP-- = NULL;
                iters--;
index 654ecca..a480bb7 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -1335,10 +1335,13 @@ S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
     for (i = cxstack_ix; i >= 0; i--) {
         const PERL_CONTEXT * const cx = &cxstack[i];
         switch (CxTYPE(cx)) {
+        case CXt_EVAL:
+            if(CxTRY(cx))
+                continue;
+            /* FALLTHROUGH */
         case CXt_SUBST:
         case CXt_SUB:
         case CXt_FORMAT:
-        case CXt_EVAL:
         case CXt_NULL:
             /* diag_listed_as: Exiting subroutine via %s */
             Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
@@ -1451,8 +1454,15 @@ S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
              * code block. Hide this faked entry from the world. */
             if (cx->cx_type & CXp_SUB_RE_FAKE)
                 continue;
-            /* FALLTHROUGH */
+            DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
+            return i;
+
         case CXt_EVAL:
+            if (CxTRY(cx))
+                continue;
+            DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
+            return i;
+
         case CXt_FORMAT:
             DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
             return i;
@@ -1485,10 +1495,13 @@ S_dopoptoloop(pTHX_ I32 startingblock)
     for (i = startingblock; i >= 0; i--) {
         const PERL_CONTEXT * const cx = &cxstack[i];
         switch (CxTYPE(cx)) {
+        case CXt_EVAL:
+            if(CxTRY(cx))
+                continue;
+            /* FALLTHROUGH */
         case CXt_SUBST:
         case CXt_SUB:
         case CXt_FORMAT:
-        case CXt_EVAL:
         case CXt_NULL:
             /* diag_listed_as: Exiting subroutine via %s */
             Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
@@ -2471,7 +2484,7 @@ PP(pp_return)
 {
     dSP; dMARK;
     PERL_CONTEXT *cx;
-    const I32 cxix = dopopto_cursub();
+    I32 cxix = dopopto_cursub();
 
     assert(cxstack_ix >= 0);
     if (cxix < cxstack_ix) {
@@ -2563,7 +2576,7 @@ PP(pp_return)
     /* fall through to a normal exit */
     switch (CxTYPE(cx)) {
     case CXt_EVAL:
-        return CxTRYBLOCK(cx)
+        return CxEVALBLOCK(cx)
             ? Perl_pp_leavetry(aTHX)
             : Perl_pp_leaveeval(aTHX);
     case CXt_SUB:
@@ -3064,7 +3077,7 @@ PP(pp_goto)
             switch (CxTYPE(cx)) {
             case CXt_EVAL:
                 leaving_eval = TRUE;
-                if (!CxTRYBLOCK(cx)) {
+                if (!CxEVALBLOCK(cx)) {
                     gotoprobe = (last_eval_cx ?
                                 last_eval_cx->blk_eval.old_eval_root :
                                 PL_eval_root);
@@ -3348,7 +3361,7 @@ Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
                 if (cx->cx_type & CXp_SUB_RE)
                     continue;
             }
-            else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
+            else if (CxTYPE(cx) == CXt_EVAL && !CxEVALBLOCK(cx))
                 cv = cx->blk_eval.cv;
             if (cv) {
                 switch (cond) {
@@ -4593,6 +4606,59 @@ PP(pp_leaveeval)
     return retop;
 }
 
+/* Ops that implement try/catch syntax
+ * Note the asymmetry here:
+ *   pp_entertrycatch does two pushblocks
+ *   pp_leavetrycatch pops only the outer one; the inner one is popped by
+ *     pp_poptry or by stack-unwind of die within the try block
+ */
+
+PP(pp_entertrycatch)
+{
+    PERL_CONTEXT *cx;
+    const U8 gimme = GIMME_V;
+
+    RUN_PP_CATCHABLY(Perl_pp_entertrycatch);
+
+    assert(!CATCH_GET);
+
+    Perl_pp_enter(aTHX); /* performs cx_pushblock(CXt_BLOCK, ...) */
+
+    save_scalar(PL_errgv);
+    CLEAR_ERRSV();
+
+    cx = cx_pushblock((CXt_EVAL|CXp_EVALBLOCK|CXp_TRY), gimme,
+            PL_stack_sp, PL_savestack_ix);
+    cx_pushtry(cx, cLOGOP->op_other);
+
+    PL_in_eval = EVAL_INEVAL;
+
+    return NORMAL;
+}
+
+PP(pp_leavetrycatch)
+{
+    /* leavetrycatch is leave */
+    return Perl_pp_leave(aTHX);
+}
+
+PP(pp_poptry)
+{
+    /* poptry is leavetry */
+    return Perl_pp_leavetry(aTHX);
+}
+
+PP(pp_catch)
+{
+    dTARGET;
+
+    save_clearsv(&(PAD_SVl(PL_op->op_targ)));
+    sv_setsv(TARG, ERRSV);
+    CLEAR_ERRSV();
+
+    return cLOGOP->op_other;
+}
+
 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
    close to the related Perl_create_eval_scope.  */
 void
@@ -4615,7 +4681,7 @@ Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
     PERL_CONTEXT *cx;
     const U8 gimme = GIMME_V;
         
-    cx = cx_pushblock((CXt_EVAL|CXp_TRYBLOCK), gimme,
+    cx = cx_pushblock((CXt_EVAL|CXp_EVALBLOCK), gimme,
                     PL_stack_sp, PL_savestack_ix);
     cx_pusheval(cx, retop, NULL);
 
@@ -4631,10 +4697,14 @@ Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
     
 PP(pp_entertry)
 {
+    OP *retop = cLOGOP->op_other->op_next;
+
     RUN_PP_CATCHABLY(Perl_pp_entertry);
 
     assert(!CATCH_GET);
-    create_eval_scope(cLOGOP->op_other->op_next, 0);
+
+    create_eval_scope(retop, 0);
+
     return PL_op->op_next;
 }
 
@@ -4665,7 +4735,7 @@ PP(pp_leavetry)
     CX_LEAVE_SCOPE(cx);
     cx_popeval(cx);
     cx_popblock(cx);
-    retop = cx->blk_eval.retop;
+    retop = CxTRY(cx) ? PL_op->op_next : cx->blk_eval.retop;
     CX_POP(cx);
 
     CLEAR_ERRSV();
index 4a4cb31..7a02b55 100644 (file)
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -75,7 +75,7 @@ typedef union {
     U8 bytes[sizeof(NV)];
 } NV_bytes;
 
-#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+#if defined(HAS_LONG_DOUBLE)
 typedef union {
     long double ld;
     U8 bytes[sizeof(long double)];
@@ -1696,7 +1696,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
                     cdouble += anv.nv;
             }
             break;
-#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+#if defined(HAS_LONG_DOUBLE)
         case 'D':
             while (len-- > 0) {
                 ld_bytes aldouble;
@@ -2759,7 +2759,7 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
             }
             break;
         }
-#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+#if defined(HAS_LONG_DOUBLE)
         case 'D': {
             ld_bytes aldouble;
             /* long doubles can have unused bits, which may be nonzero */
index 6ddb1f6..a9bda73 100644 (file)
@@ -34,6 +34,7 @@ PERL_CALLCONV OP *Perl_pp_bit_or(pTHX);
 PERL_CALLCONV OP *Perl_pp_bless(pTHX);
 PERL_CALLCONV OP *Perl_pp_break(pTHX);
 PERL_CALLCONV OP *Perl_pp_caller(pTHX);
+PERL_CALLCONV OP *Perl_pp_catch(pTHX);
 PERL_CALLCONV OP *Perl_pp_chdir(pTHX);
 PERL_CALLCONV OP *Perl_pp_chop(pTHX);
 PERL_CALLCONV OP *Perl_pp_chown(pTHX);
@@ -66,6 +67,7 @@ PERL_CALLCONV OP *Perl_pp_enteriter(pTHX);
 PERL_CALLCONV OP *Perl_pp_enterloop(pTHX);
 PERL_CALLCONV OP *Perl_pp_entersub(pTHX);
 PERL_CALLCONV OP *Perl_pp_entertry(pTHX);
+PERL_CALLCONV OP *Perl_pp_entertrycatch(pTHX);
 PERL_CALLCONV OP *Perl_pp_enterwhen(pTHX);
 PERL_CALLCONV OP *Perl_pp_enterwrite(pTHX);
 PERL_CALLCONV OP *Perl_pp_eof(pTHX);
@@ -143,6 +145,7 @@ PERL_CALLCONV OP *Perl_pp_leaveloop(pTHX);
 PERL_CALLCONV OP *Perl_pp_leavesub(pTHX);
 PERL_CALLCONV OP *Perl_pp_leavesublv(pTHX);
 PERL_CALLCONV OP *Perl_pp_leavetry(pTHX);
+PERL_CALLCONV OP *Perl_pp_leavetrycatch(pTHX);
 PERL_CALLCONV OP *Perl_pp_leavewhen(pTHX);
 PERL_CALLCONV OP *Perl_pp_leavewrite(pTHX);
 PERL_CALLCONV OP *Perl_pp_left_shift(pTHX);
@@ -191,6 +194,7 @@ PERL_CALLCONV OP *Perl_pp_padhv(pTHX);
 PERL_CALLCONV OP *Perl_pp_padrange(pTHX);
 PERL_CALLCONV OP *Perl_pp_padsv(pTHX);
 PERL_CALLCONV OP *Perl_pp_pipe_op(pTHX);
+PERL_CALLCONV OP *Perl_pp_poptry(pTHX);
 PERL_CALLCONV OP *Perl_pp_pos(pTHX);
 PERL_CALLCONV OP *Perl_pp_postdec(pTHX);
 PERL_CALLCONV OP *Perl_pp_postinc(pTHX);
diff --git a/proto.h b/proto.h
index 8a98030..faca6d1 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -652,6 +652,11 @@ PERL_CALLCONV OP * Perl_ck_trunc(pTHX_ OP *o)
 #define PERL_ARGS_ASSERT_CK_TRUNC      \
        assert(o)
 
+PERL_CALLCONV OP *     Perl_ck_trycatch(pTHX_ OP *o)
+                       __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CK_TRYCATCH   \
+       assert(o)
+
 PERL_CALLCONV void     Perl_ck_warner(pTHX_ U32 err, const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_CK_WARNER     \
@@ -2483,6 +2488,11 @@ PERL_CALLCONV SV*        Perl_newSVuv(pTHX_ const UV u)
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWSVUV
 
+PERL_CALLCONV OP*      Perl_newTRYCATCHOP(pTHX_ I32 flags, OP* tryblock, OP *catchvar, OP* catchblock)
+                       __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWTRYCATCHOP \
+       assert(tryblock); assert(catchvar); assert(catchblock)
+
 PERL_CALLCONV OP*      Perl_newUNOP(pTHX_ I32 type, I32 flags, OP* first)
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_NEWUNOP
@@ -4469,6 +4479,11 @@ PERL_STATIC_INLINE void  Perl_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *reto
        assert(cx); assert(cv)
 #endif
 #ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void        Perl_cx_pushtry(pTHX_ PERL_CONTEXT *cx, OP *retop);
+#define PERL_ARGS_ASSERT_CX_PUSHTRY    \
+       assert(cx)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
 PERL_STATIC_INLINE void        Perl_cx_pushwhen(pTHX_ PERL_CONTEXT *cx);
 #define PERL_ARGS_ASSERT_CX_PUSHWHEN   \
        assert(cx)
@@ -6214,6 +6229,10 @@ PERL_STATIC_INLINE I32   S_foldEQ_latin1_s2_folded(const char* a, const char* b, I
 #define PERL_ARGS_ASSERT_FOLDEQ_LATIN1_S2_FOLDED       \
        assert(a); assert(b)
 #endif
+STATIC bool    S_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
+                       __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_ISFOO_LC
+
 STATIC bool    S_isFOO_utf8_lc(pTHX_ const U8 classnum, const U8* character, const U8* e)
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ISFOO_UTF8_LC \
@@ -6295,12 +6314,6 @@ STATIC void      S_to_utf8_substr(pTHX_ regexp * prog);
 #define PERL_ARGS_ASSERT_TO_UTF8_SUBSTR        \
        assert(prog)
 #endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
-PERL_CALLCONV bool     Perl_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
-                       __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_ISFOO_LC
-
-#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);
 #define PERL_ARGS_ASSERT_SAVE_PUSHPTRI32PTR
index 3060874..e44c7a3 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -8434,8 +8434,12 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
          * flags appropriately - Yves */
         regnode *first = RExC_rxi->program + 1;
         U8 fop = OP(first);
-        regnode *next = regnext(first);
-        U8 nop = OP(next);
+        regnode *next = NEXTOPER(first);
+        /* It's safe to read through *next only if OP(first) is a regop of
+         * the right type (not EXACT, for example).
+         */
+        U8 nop = (fop == NOTHING || fop == MBOL || fop == SBOL || fop == PLUS)
+                ? OP(next) : 0;
 
         if (PL_regkind[fop] == NOTHING && nop == END)
             RExC_rx->extflags |= RXf_NULL;
@@ -8448,13 +8452,13 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
             RExC_rx->extflags |= RXf_START_ONLY;
         else if (fop == PLUS
                  && PL_regkind[nop] == POSIXD && FLAGS(next) == _CC_SPACE
-                 && nop == END)
+                 && OP(regnext(first)) == END)
             RExC_rx->extflags |= RXf_WHITE;
         else if ( RExC_rx->extflags & RXf_SPLIT
                   && (PL_regkind[fop] == EXACT && ! isEXACTFish(fop))
                   && STR_LEN(first) == 1
                   && *(STRING(first)) == ' '
-                  && nop == END )
+                  && OP(regnext(first)) == END )
             RExC_rx->extflags |= (RXf_SKIPWHITE|RXf_WHITE);
 
     }
@@ -12546,6 +12550,13 @@ S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth)
     return ret;
 }
 
+#define RBRACE  0
+#define MIN_S   1
+#define MIN_E   2
+#define MAX_S   3
+#define MAX_E   4
+
+#ifndef PERL_IN_XSUB_RE
 bool
 Perl_regcurly(const char *s, const char *e, const char * result[5])
 {
@@ -12636,12 +12647,6 @@ Perl_regcurly(const char *s, const char *e, const char * result[5])
 
     if (result) {
 
-#define RBRACE  0
-#define MIN_S   1
-#define MIN_E   2
-#define MAX_S   3
-#define MAX_E   4
-
         result[RBRACE] = s;
 
         result[MIN_S] = min_start;
@@ -12667,6 +12672,7 @@ Perl_regcurly(const char *s, const char *e, const char * result[5])
 
     return TRUE;
 }
+#endif
 
 U32
 S_get_quantifier_value(pTHX_ RExC_state_t *pRExC_state,
index 4c2e535..c46451f 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -1121,7 +1121,7 @@ re.pm, especially to the documentation.
  * the defaults if not done already */
 #define DECLARE_AND_GET_RE_DEBUG_FLAGS                                         \
     volatile IV re_debug_flags = 0;  PERL_UNUSED_VAR(re_debug_flags);          \
-    STMT_START {                                                               \
+    DEBUG_r({                              \
         SV * re_debug_flags_sv = NULL;                                         \
                      /* get_sv() can return NULL during global destruction. */ \
         re_debug_flags_sv = PL_curcop ? get_sv(RE_DEBUG_FLAGS, GV_ADD) : NULL; \
@@ -1132,7 +1132,7 @@ re.pm, especially to the documentation.
                             RE_DEBUG_COMPILE_DUMP | RE_DEBUG_EXECUTE_MASK );   \
             re_debug_flags=SvIV(re_debug_flags_sv);                            \
         }                                                                      \
-    } STMT_END
+    })
 
 #define isDEBUG_WILDCARD (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_WILDCARD))
 
index e626ca9..2db99ef 100755 (executable)
@@ -40,6 +40,7 @@ my %feature = (
     indirect        => 'indirect',
     multidimensional => 'multidimensional',
     bareword_filehandles => 'bareword_filehandles',
+    try             => 'try',
 );
 
 # NOTE: If a feature is ever enabled in a non-contiguous range of Perl
@@ -477,7 +478,7 @@ read_only_bottom_close_and_rename($h);
 __END__
 package feature;
 
-our $VERSION = '1.62';
+our $VERSION = '1.63';
 
 FEATURES
 
@@ -786,8 +787,8 @@ CPAN module.
 
 This feature enables multidimensional array emulation, a perl 4 (or
 earlier) feature that was used to emulate multidimensional arrays with
-hashes.  This works by converting code like C<< $foo{$x, y} >> into
-C<< $foo{join($;, $x, $y} >>.  It is enabled by default, but can be
+hashes.  This works by converting code like C<< $foo{$x, $y} >> into
+C<< $foo{join($;, $x, $y)} >>.  It is enabled by default, but can be
 turned off to disable multidimensional array emulation.
 
 When this feature is disabled the syntax that is normally replaced
@@ -815,6 +816,14 @@ previous versions it was simply on all the time.
 You can use the L<bareword::filehandles> module on CPAN to disable
 bareword filehandles for older versions of perl.
 
+=head2 The 'try' feature.
+
+This feature enables the C<try> and C<catch> syntax, which allows exception
+handling, where exceptions throwin from the body of the block introduced with
+C<try> are caught by executing the body of the C<catch> block.
+
+For more information, see L<perlsyn/"Try Catch Exception Handling">.
+
 =head1 FEATURE BUNDLES
 
 It's possible to load multiple features together, using
index d886822..0d69762 100644 (file)
@@ -125,4 +125,4 @@ Q                   Uquad_t IVSIZE >= 8
 f                      float
 d                      double
 F                      =NVSIZE
-D                      =LONG_DOUBLESIZE        defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+D                      =LONG_DOUBLESIZE        defined(HAS_LONG_DOUBLE)
index b9ae8cf..77f8aa9 100755 (executable)
@@ -47,6 +47,8 @@ my %feature_kw = (
     __SUB__   => '__SUB__',
     fc        => 'fc',
     isa       => 'isa',
+    try       => 'try',
+    catch     => 'try',
 );
 
 my %pos = map { ($_ => 1) } @{$by_strength{'+'}};
@@ -132,6 +134,7 @@ __END__
 -bless
 -break
 -caller
++catch
 -chdir
 -chmod
 -chomp
@@ -339,6 +342,7 @@ __END__
 -time
 -times
 +tr
++try
 -truncate
 -uc
 -ucfirst
index d80a33c..3ba86f9 100644 (file)
@@ -154,7 +154,7 @@ sub edit_win32_makefile {
 }
 
 process('Makefile.SH', 'Makefile.SH', \&edit_makefile_SH, $TAP && '', $Verbose);
-foreach ('win32/Makefile', 'win32/makefile.mk', 'win32/GNUmakefile') {
+foreach ('win32/Makefile', 'win32/GNUmakefile') {
     process($_, $_, \&edit_win32_makefile, $TAP && '', $Verbose);
 }
 
index 4d5ba36..6a3f8db 100644 (file)
@@ -577,3 +577,8 @@ isa         derived class test      ck_isa          s2
 
 cmpchain_and   comparison chaining     ck_null         |
 cmpchain_dup   comparand shuffling     ck_null         1
+
+entertrycatch  try {block}             ck_trycatch     |
+leavetrycatch  try {block} exit        ck_null         @
+poptry         pop try                 ck_null         @
+catch          catch {} block          ck_null         |
index 0ca928b..c4d6b4e 100644 (file)
@@ -16,7 +16,7 @@
 #
 # This script is normally invoked from regen.pl.
 
-$VERSION = '1.50';
+$VERSION = '1.51';
 
 BEGIN {
     require './regen/regen_lib.pl';
@@ -119,6 +119,8 @@ my $tree = {
                                     [ 5.029, DEFAULT_ON ],
                                 'experimental::isa' =>
                                     [ 5.031, DEFAULT_ON ],
+                                'experimental::try' =>
+                                    [ 5.033, DEFAULT_ON ],
                         }],
 
         'missing'       => [ 5.021, DEFAULT_OFF],
@@ -1210,7 +1212,7 @@ The L<strictures|strictures/VERSION-2> module on CPAN offers one example of
 a warnings subset that the module's authors believe is relatively safe to
 fatalize.
 
-B<NOTE:> users of FATAL warnings, especially those using
+B<NOTE:> Users of FATAL warnings, especially those using
 C<< FATAL => 'all' >>, should be fully aware that they are risking future
 portability of their programs by doing so.  Perl makes absolutely no
 commitments to not introduce new warnings or warnings categories in the
@@ -1278,6 +1280,9 @@ use:
    use v5.20;       # Perl 5.20 or greater is required for the following
    use warnings 'FATAL';  # short form of "use warnings FATAL => 'all';"
 
+However, you should still heed the guidance earlier in this section against
+using C<use warnings FATAL => 'all';>.
+
 If you want your program to be compatible with versions of Perl before
 5.20, you must use C<< use warnings FATAL => 'all'; >> instead.  (In
 previous versions of Perl, the behavior of the statements
index cab82cf..75d58ce 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -425,10 +425,8 @@ S_regcp_restore(pTHX_ regexp *rex, I32 ix, U32 *maxopenparen_p _pDEPTH)
 
 #define regcpblow(cp) LEAVE_SCOPE(cp)  /* Ignores regcppush()ed data. */
 
-#ifndef PERL_IN_XSUB_RE
-
-bool
-Perl_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
+STATIC bool
+S_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
 {
     /* Returns a boolean as to whether or not 'character' is a member of the
      * Posix character class given by 'classnum' that should be equivalent to a
@@ -468,8 +466,6 @@ Perl_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
     return FALSE;
 }
 
-#endif
-
 PERL_STATIC_INLINE I32
 S_foldEQ_latin1_s2_folded(const char *s1, const char *s2, I32 len)
 {
diff --git a/stadtx_hash.h b/stadtx_hash.h
deleted file mode 100644 (file)
index 73ad9de..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-#ifndef STADTX_HASH_H
-#define STADTX_HASH_H
-
-#ifndef DEBUG_STADTX_HASH
-#define DEBUG_STADTX_HASH 0
-#endif
-
-#ifndef PERL_SEEN_HV_FUNC_H_
-
-#if !defined(U64)
-    #include <stdint.h>
-    #define U64 uint64_t
-#endif
-
-#if !defined(U32)
-  #define U32 uint32_t
-#endif
-
-#if !defined(U8)
-    #define U8 unsigned char
-#endif
-
-#if !defined(U16)
-    #define U16 uint16_t
-#endif
-
-#ifndef STRLEN
-#define STRLEN int
-#endif
-
-#endif
-
-#ifndef STADTX_STATIC_INLINE
-#ifdef PERL_STATIC_INLINE
-#define STADTX_STATIC_INLINE PERL_STATIC_INLINE
-#else
-#define STADTX_STATIC_INLINE static inline
-#endif
-#endif
-
-#ifndef STMT_START
-#define STMT_START do
-#define STMT_END while(0)
-#endif
-
-/* Find best way to ROTL32/ROTL64 */
-#if defined(_MSC_VER)
-  #include <stdlib.h>  /* Microsoft put _rotl declaration in here */
-  #define ROTL32(x,r)  _rotl(x,r)
-  #define ROTR32(x,r)  _rotr(x,r)
-  #define ROTL64(x,r)  _rotl64(x,r)
-  #define ROTR64(x,r)  _rotr64(x,r)
-#else
-  /* gcc recognises this code and generates a rotate instruction for CPUs with one */
-  #define ROTL32(x,r)  (((U32)(x) << (r)) | ((U32)(x) >> (32 - (r))))
-  #define ROTR32(x,r)  (((U32)(x) << (32 - (r))) | ((U32)(x) >> (r)))
-  #define ROTL64(x,r)  ( ( (U64)(x) << (r) ) | ( (U64)(x) >> ( 64 - (r) ) ) )
-  #define ROTR64(x,r)  ( ( (U64)(x) << ( 64 - (r) ) ) | ( (U64)(x) >> (r) ) )
-#endif
-
-
-/* do a marsaglia xor-shift permutation followed by a
- * multiply by a prime (presumably large) and another
- * marsaglia xor-shift permutation.
- * One of these thoroughly changes the bits of the input.
- * Two of these with different primes passes the Strict Avalanche Criteria
- * in all the tests I did.
- *
- * Note that v cannot end up zero after a scramble64 unless it
- * was zero in the first place.
- */
-#define STADTX_SCRAMBLE64(v,prime) STMT_START {    \
-    v ^= (v >> 13);                         \
-    v ^= (v << 35);                         \
-    v ^= (v >> 30);                         \
-    v *= prime;                             \
-    v ^= (v >> 19);                         \
-    v ^= (v << 15);                         \
-    v ^= (v >> 46);                         \
-} STMT_END
-
-
-STADTX_STATIC_INLINE void stadtx_seed_state (
-    const U8 *seed_ch,
-    U8 *state_ch
-) {
-    const U64 *seed= (const U64 *)seed_ch;
-    U64 *state= (U64 *)state_ch;
-    /* first we apply two masks to each word of the seed, this means that
-     * a) at least one of state[0] and state[2] is nonzero,
-     * b) at least one of state[1] and state[3] is nonzero
-     * c) that state[0] and state[2] are different
-     * d) that state[1] and state[3] are different
-     * e) that the replacement value for any zero's is a totally different from the seed value.
-     *    (iow, if seed[0] is 0x43f6a8885a308d31UL then state[0] becomes 0, which is the replaced
-     *    with 1, which is totally different.). */
-    /* hex expansion of pi, skipping first two digits. pi= 3.2[43f6...]*/
-    /* pi value in hex from here:
-     * http://turner.faculty.swau.edu/mathematics/materialslibrary/pi/pibases.html*/
-    state[0]= seed[0] ^ UINT64_C(0x43f6a8885a308d31);
-    state[1]= seed[1] ^ UINT64_C(0x3198a2e03707344a);
-    state[2]= seed[0] ^ UINT64_C(0x4093822299f31d00);
-    state[3]= seed[1] ^ UINT64_C(0x82efa98ec4e6c894);
-    if (!state[0]) state[0]=1;
-    if (!state[1]) state[1]=2;
-    if (!state[2]) state[2]=4;
-    if (!state[3]) state[3]=8;
-    /* and now for good measure we double scramble all four -
-     * a double scramble guarantees a complete avalanche of all the
-     * bits in the seed - IOW, by the time we are hashing the
-     * four state vectors should be completely different and utterly
-     * uncognizable from the input seed bits */
-    STADTX_SCRAMBLE64(state[0],UINT64_C(0x801178846e899d17));
-    STADTX_SCRAMBLE64(state[0],UINT64_C(0xdd51e5d1c9a5a151));
-    STADTX_SCRAMBLE64(state[1],UINT64_C(0x93a7d6c8c62e4835));
-    STADTX_SCRAMBLE64(state[1],UINT64_C(0x803340f36895c2b5));
-    STADTX_SCRAMBLE64(state[2],UINT64_C(0xbea9344eb7565eeb));
-    STADTX_SCRAMBLE64(state[2],UINT64_C(0xcd95d1e509b995cd));
-    STADTX_SCRAMBLE64(state[3],UINT64_C(0x9999791977e30c13));
-    STADTX_SCRAMBLE64(state[3],UINT64_C(0xaab8b6b05abfc6cd));
-}
-
-#define STADTX_K0_U64 UINT64_C(0xb89b0f8e1655514f)
-#define STADTX_K1_U64 UINT64_C(0x8c6f736011bd5127)
-#define STADTX_K2_U64 UINT64_C(0x8f29bd94edce7b39)
-#define STADTX_K3_U64 UINT64_C(0x9c1b8e1e9628323f)
-
-#define STADTX_K2_U32 0x802910e3
-#define STADTX_K3_U32 0x819b13af
-#define STADTX_K4_U32 0x91cb27e5
-#define STADTX_K5_U32 0xc1a269c1
-
-STADTX_STATIC_INLINE U64 stadtx_hash_with_state(
-    const U8 *state_ch,
-    const U8 *key,
-    const STRLEN key_len
-) {
-    U64 *state= (U64 *)state_ch;
-    STRLEN len = key_len;
-    U64 v0= state[0] ^ ((key_len+1) * STADTX_K0_U64);
-    U64 v1= state[1] ^ ((key_len+2) * STADTX_K1_U64);
-    if (len < 32) {
-        switch(len >> 3) {
-            case 3:
-            v0 += U8TO64_LE(key) * STADTX_K3_U64;
-            v0= ROTR64(v0, 17) ^ v1;
-            v1= ROTR64(v1, 53) + v0;
-            key += 8;
-            /* FALLTHROUGH */
-            case 2:
-            v0 += U8TO64_LE(key) * STADTX_K3_U64;
-            v0= ROTR64(v0, 17) ^ v1;
-            v1= ROTR64(v1, 53) + v0;
-            key += 8;
-            /* FALLTHROUGH */
-            case 1:
-            v0 += U8TO64_LE(key) * STADTX_K3_U64;
-            v0= ROTR64(v0, 17) ^ v1;
-            v1= ROTR64(v1, 53) + v0;
-            key += 8;
-            /* FALLTHROUGH */
-            case 0:
-            default: break;
-        }
-        switch ( len & 0x7 ) {
-            case 7: v0 += (U64)key[6] << 32;
-            /* FALLTHROUGH */
-            case 6: v1 += (U64)key[5] << 48;
-            /* FALLTHROUGH */
-            case 5: v0 += (U64)key[4] << 16;
-            /* FALLTHROUGH */
-            case 4: v1 += (U64)U8TO32_LE(key);
-                    break;
-            case 3: v0 += (U64)key[2] << 48;
-            /* FALLTHROUGH */
-            case 2: v1 += (U64)U8TO16_LE(key);
-                    break;
-            case 1: v0 += (U64)key[0];
-            /* FALLTHROUGH */
-            case 0: v1 = ROTL64(v1, 32) ^ 0xFF;
-                    break;
-        }
-        v1 ^= v0;
-        v0 = ROTR64(v0,33) + v1;
-        v1 = ROTL64(v1,17) ^ v0;
-        v0 = ROTL64(v0,43) + v1;
-        v1 = ROTL64(v1,31) - v0;
-        v0 = ROTL64(v0,13) ^ v1;
-        v1 -= v0;
-        v0 = ROTL64(v0,41) + v1;
-        v1 = ROTL64(v1,37) ^ v0;
-        v0 = ROTR64(v0,39) + v1;
-        v1 = ROTR64(v1,15) + v0;
-        v0 = ROTL64(v0,15) ^ v1;
-        v1 = ROTR64(v1, 5);
-        return v0 ^ v1;
-    } else {
-        U64 v2= state[2] ^ ((key_len+3) * STADTX_K2_U64);
-        U64 v3= state[3] ^ ((key_len+4) * STADTX_K3_U64);
-
-        do {
-            v0 += (U64)U8TO64_LE(key+ 0) * STADTX_K2_U32; v0= ROTL64(v0,57) ^ v3;
-            v1 += (U64)U8TO64_LE(key+ 8) * STADTX_K3_U32; v1= ROTL64(v1,63) ^ v2;
-            v2 += (U64)U8TO64_LE(key+16) * STADTX_K4_U32; v2= ROTR64(v2,47) + v0;
-            v3 += (U64)U8TO64_LE(key+24) * STADTX_K5_U32; v3= ROTR64(v3,11) - v1;
-            key += 32;
-            len -= 32;
-        } while ( len >= 32 );
-
-        switch ( len >> 3 ) {
-            case 3: v0 += ((U64)U8TO64_LE(key) * STADTX_K2_U32); key += 8; v0= ROTL64(v0,57) ^ v3;
-            /* FALLTHROUGH */
-            case 2: v1 += ((U64)U8TO64_LE(key) * STADTX_K3_U32); key += 8; v1= ROTL64(v1,63) ^ v2;
-            /* FALLTHROUGH */
-            case 1: v2 += ((U64)U8TO64_LE(key) * STADTX_K4_U32); key += 8; v2= ROTR64(v2,47) + v0;
-            /* FALLTHROUGH */
-            case 0: v3 = ROTR64(v3,11) - v1;
-            /* FALLTHROUGH */
-        }
-        v0 ^= (len+1) * STADTX_K3_U64;
-        switch ( len & 0x7 ) {
-            case 7: v1 += (U64)key[6];
-            /* FALLTHROUGH */
-            case 6: v2 += (U64)U8TO16_LE(key+4);
-                    v3 += (U64)U8TO32_LE(key);
-                    break;
-            case 5: v1 += (U64)key[4];
-            /* FALLTHROUGH */
-            case 4: v2 += (U64)U8TO32_LE(key);
-                    break;
-            case 3: v3 += (U64)key[2];
-            /* FALLTHROUGH */
-            case 2: v1 += (U64)U8TO16_LE(key);
-                    break;
-            case 1: v2 += (U64)key[0];
-            /* FALLTHROUGH */
-            case 0: v3 = ROTL64(v3, 32) ^ 0xFF;
-                    break;
-        }
-
-        v1 -= v2;
-        v0 = ROTR64(v0,19);
-        v1 -= v0;
-        v1 = ROTR64(v1,53);
-        v3 ^= v1;
-        v0 -= v3;
-        v3 = ROTL64(v3,43);
-        v0 += v3;
-        v0 = ROTR64(v0, 3);
-        v3 -= v0;
-        v2 = ROTR64(v2,43) - v3;
-        v2 = ROTL64(v2,55) ^ v0;
-        v1 -= v2;
-        v3 = ROTR64(v3, 7) - v2;
-        v2 = ROTR64(v2,31);
-        v3 += v2;
-        v2 -= v1;
-        v3 = ROTR64(v3,39);
-        v2 ^= v3;
-        v3 = ROTR64(v3,17) ^ v2;
-        v1 += v3;
-        v1 = ROTR64(v1, 9);
-        v2 ^= v1;
-        v2 = ROTL64(v2,24);
-        v3 ^= v2;
-        v3 = ROTR64(v3,59);
-        v0 = ROTR64(v0, 1) - v1;
-
-        return v0 ^ v1 ^ v2 ^ v3;
-    }
-}
-
-STADTX_STATIC_INLINE U64 stadtx_hash(
-    const U8 *seed_ch,
-    const U8 *key,
-    const STRLEN key_len
-) {
-    U64 state[4];
-    stadtx_seed_state(seed_ch,(U8*)state);
-    return stadtx_hash_with_state((U8*)state,key,key_len);
-}
-
-#endif
diff --git a/sv.c b/sv.c
index 828f685..e54d0a0 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -11788,6 +11788,8 @@ S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
 
     if (hexradix) {
 #ifndef USE_LOCALE_NUMERIC
+        PERL_UNUSED_ARG(in_lc_numeric);
+
         *p++ = '.';
 #else
         if (in_lc_numeric) {
@@ -15316,7 +15318,7 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
 
 #ifdef USE_LOCALE_COLLATE
     PL_collation_ix    = proto_perl->Icollation_ix;
-    PL_collation_standard      = proto_perl->Icollation_standard;
+    PL_collation_standard = proto_perl->Icollation_standard;
     PL_collxfrm_base   = proto_perl->Icollxfrm_base;
     PL_collxfrm_mult   = proto_perl->Icollxfrm_mult;
     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
index bd8e9c0..f7cd2a4 100644 (file)
@@ -47,11 +47,13 @@ EXPECT
 "my" variable $p masks earlier declaration in same scope at - line 8.
 ########
 # pad.c
+use feature 'state' ;
 use warnings 'shadow' ;
 our $x ;
 my $x ;
+state $x ;
 our $y = my $y ;
-our $p ;
+our $p = state $p ;
 package X ;
 my $p ;
 package main ;
@@ -59,20 +61,51 @@ no warnings 'shadow' ;
 our $z ;
 my $z ;
 our $t = my $t ;
-our $q ;
+our $q = state $q ;
 package X ;
 my $q ;
+state $q;
 EXPECT
-"my" variable $x masks earlier declaration in same scope at - line 4.
-"my" variable $y masks earlier declaration in same statement at - line 5.
-"my" variable $p masks earlier declaration in same scope at - line 8.
+"my" variable $x masks earlier declaration in same scope at - line 5.
+"state" variable $x masks earlier declaration in same scope at - line 6.
+"my" variable $y masks earlier declaration in same statement at - line 7.
+"state" variable $p masks earlier declaration in same statement at - line 8.
+"my" variable $p masks earlier declaration in same scope at - line 10.
 ########
 # pad.c
+use feature 'state' ;
+use warnings 'shadow';
+state $x ;
+state $x ;
+my $x ;
+our $x ;
+state $y = state $y ;
+state $p = my $p ;
+state $z = our $z ;
+package X ;
+state $p ;
+package main ;
+no warnings 'shadow' ;
+state $x ;
+state $y ;
+state $p ;
+EXPECT
+"state" variable $x masks earlier declaration in same scope at - line 5.
+"my" variable $x masks earlier declaration in same scope at - line 6.
+"our" variable $x masks earlier declaration in same scope at - line 7.
+"state" variable $y masks earlier declaration in same statement at - line 8.
+"my" variable $p masks earlier declaration in same statement at - line 9.
+"our" variable $z masks earlier declaration in same statement at - line 10.
+"state" variable $p masks earlier declaration in same scope at - line 12.
+########
+# pad.c
+use feature 'state';
 use warnings 'shadow' ;
 my $x ;
 our $x ;
+state $x;
 my $y = our $y ;
-my $p ;
+my $p = state $p ;
 package X ;
 our $p ;
 package main ;
@@ -80,13 +113,17 @@ no warnings 'shadow' ;
 my $z ;
 our $z ;
 my $t = our $t ;
-my $q ;
+my $z = state $z;
+my $q;
+state $q;
 package X ;
 our $q ;
 EXPECT
-"our" variable $x masks earlier declaration in same scope at - line 4.
-"our" variable $y masks earlier declaration in same statement at - line 5.
-"our" variable $p masks earlier declaration in same scope at - line 8.
+"our" variable $x masks earlier declaration in same scope at - line 5.
+"state" variable $x masks earlier declaration in same scope at - line 6.
+"our" variable $y masks earlier declaration in same statement at - line 7.
+"state" variable $p masks earlier declaration in same statement at - line 8.
+"our" variable $p masks earlier declaration in same scope at - line 10.
 ########
 # pad.c
 use warnings 'closure' ;
index 15f5448..f006cc7 100644 (file)
@@ -46,7 +46,7 @@ if ($has_locale_h) {
             # number) if the platform doesn't support this category, so we
             # have an entry for all the ones that might be specified in calls
             # to us.
-            $number = $number_for_missing_category-- if $@;
+            $number = $number_for_missing_category--;
         }
         elsif (   $number !~ / ^ -? \d+ $ /x
                || $number <=  $max_bad_category_number)
@@ -92,11 +92,7 @@ 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
     # 3rd iff the platform supports the locale in each of the category numbers
     # given by the 2nd parameter, which is either a single category or a
-    # reference to a list of categories.  The list MUST be sorted so that
-    # CTYPE is first, COLLATE is last unless ALL is present, in which case
-    # that comes after COLLATE.  This is because locale.c detects bad locales
-    # only with CTYPE, and COLLATE on some platforms can core dump if it is a
-    # bad locale.
+    # reference to a list of categories.
     #
     # The 4th parameter is true if to accept locales that aren't apparently
     # fully compatible with Perl.
@@ -139,10 +135,34 @@ sub _trylocale ($$$$) { # For use only by other functions in this file!
     # Incompatible locales aren't warned about unless using locales.
     use locale;
 
+    # Sort the input so CTYPE is first, COLLATE comes after all but ALL.  This
+    # is because locale.c detects bad locales only with CTYPE, and COLLATE on
+    # some platforms can core dump if it is a bad locale.
+    my @sorted;
+    my $has_ctype = 0;
+    my $has_all = 0;
+    my $has_collate = 0;
     foreach my $category (@$categories) {
         die "category '$category' must instead be a number"
                                             unless $category =~ / ^ -? \d+ $ /x;
+        if ($category_name{$category} eq 'CTYPE') {
+            $has_ctype = 1;
+        }
+        elsif ($category_name{$category} eq 'ALL') {
+            $has_all = 1;
+        }
+        elsif ($category_name{$category} eq 'COLLATE') {
+            $has_collate = 1;
+        }
+        else {
+            push @sorted, $category unless grep { $_ == $category } @sorted;
+        }
+    }
+    push @sorted, $category_number{'COLLATE'} if $has_collate;
+    push @sorted, $category_number{'ALL'} if $has_all;
+    unshift @sorted, $category_number{'CTYPE'} if $has_ctype || ! $allow_incompatible;
 
+    foreach my $category (@sorted) {
         return unless setlocale($category, $locale);
         last if $badutf8 || ! $plays_well;
     }
index b57609b..b32f180 100644 (file)
@@ -8,11 +8,11 @@
 # Other tests for CORE subs are in coresubs.t
 
 BEGIN {
-    chdir 't' if -d 't';
-    require "./test.pl";
-    set_up_inc( qw(. ../lib ../dist/if) );
-       require './charset_tools.pl';
-    $^P |= 0x100;      # Provide informative "file" names for evals
+  chdir 't' if -d 't';
+  require "./test.pl";
+  set_up_inc( qw(. ../lib ../dist/if) );
+  require './charset_tools.pl';
+  $^P |= 0x100; # Provide informative "file" names for evals
 }
 
 no warnings 'experimental::smartmatch';
@@ -32,15 +32,15 @@ package sov {
 }
 
 my %op_desc = (
evalbytes=> 'eval "string"',
join     => 'join or string',
pos      => 'match position',
prototype=> 'subroutine prototype',
readline => '<HANDLE>',
readpipe => 'quoted execution (``, qx)',
reset    => 'symbol reset',
ref      => 'reference-type operator',
undef    => 'undef operator',
 evalbytes => 'eval "string"',
 join      => 'join or string',
 pos       => 'match position',
 prototype => 'subroutine prototype',
 readline  => '<HANDLE>',
 readpipe  => 'quoted execution (``, qx)',
 reset     => 'symbol reset',
 ref       => 'reference-type operator',
 undef     => 'undef operator',
 );
 sub op_desc($) {
   return $op_desc{$_[0]} || $_[0];
@@ -94,7 +94,7 @@ sub test_proto {
     eval " &CORE::$o((1)x($maxargs+1)) ";
     my $desc = quotemeta op_desc($o);
     like $@, qr/^Too many arguments for $desc at /,
-        "&$o with too many args";
+      "&$o with too many args";
   }
   elsif ($p =~ '^([$*]+);?\z') { # Fixed-length $$$ or ***
     my $args = length $1;
@@ -130,46 +130,46 @@ sub test_proto {
     eval " &CORE::$o((1)x($minargs-1)) ";
     my $desc = quotemeta op_desc($o);
     like $@, qr/^Not enough arguments for $desc at /,
-       "&$o with too few args";
+      "&$o with too few args";
   }
   elsif ($p =~ /^\*\\\$\$(;?)\$\z/) { #  *\$$$ and *\$$;$
     $tests += 5;
 
     eval "&CORE::$o(1,1,1,1,1)";
     like $@, qr/^Too many arguments for $o at /,
-         "&$o with too many args";
+      "&$o with too many args";
     eval " &CORE::$o((1)x(\$1?2:3)) ";
     like $@, qr/^Not enough arguments for $o at /,
-         "&$o with too few args";
+      "&$o with too few args";
     eval " &CORE::$o(1,[],1,1) ";
     like $@, qr/^Type of arg 2 to &CORE::$o must be scalar reference at /,
-        "&$o with array ref arg";
+      "&$o with array ref arg";
     eval " &CORE::$o(1,1,1,1) ";
     like $@, qr/^Type of arg 2 to &CORE::$o must be scalar reference at /,
-        "&$o with scalar arg";
+      "&$o with scalar arg";
     eval " &CORE::$o(1,bless([], 'sov'),1,1) ";
     like $@, qr/^Type of arg 2 to &CORE::$o must be scalar reference at /,
-        "&$o with non-scalar arg w/scalar overload (which does not count)";
+      "&$o with non-scalar arg w/scalar overload (which does not count)";
   }
   elsif ($p =~ /^\\%\$*\z/) { #  \% and \%$$
     $tests += 5;
 
     eval "&CORE::$o(" . join(",", (1) x length $p) . ")";
     like $@, qr/^Too many arguments for $o at /,
-         "&$o with too many args";
+      "&$o with too many args";
     eval " &CORE::$o(" . join(",", (1) x (length($p)-2)) . ") ";
     like $@, qr/^Not enough arguments for $o at /,
-         "&$o with too few args";
+      "&$o with too few args";
     my $moreargs = ",1" x (length($p) - 2);
     eval " &CORE::$o([]$moreargs) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be hash reference at /,
-        "&$o with array ref arg";
+      "&$o with array ref arg";
     eval " &CORE::$o(*foo$moreargs) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be hash reference at /,
-        "&$o with typeglob arg";
+      "&$o with typeglob arg";
     eval " &CORE::$o(bless([], 'hov')$moreargs) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be hash reference at /,
-        "&$o with non-hash arg with hash overload (which does not count)";
+      "&$o with non-hash arg with hash overload (which does not count)";
   }
   elsif ($p =~ /^(;)?\\\[(\$\@%&?\*)](\$\@)?\z/) {
     $tests += 3;
@@ -190,16 +190,16 @@ sub test_proto {
     eval " &CORE::$o(2$more_args) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be reference to one of(?x:
                 ) \[\Q$2\E\] at /,
-        "&$o with non-ref arg";
+      "&$o with non-ref arg";
     eval " &CORE::$o(*STDOUT{IO}$more_args) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be reference to one of(?x:
                 ) \[\Q$2\E\] at /,
-        "&$o with ioref arg";
+      "&$o with ioref arg";
     my $class = ref *DATA{IO};
     eval " &CORE::$o(bless(*DATA{IO}, 'hov')$more_args) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be reference to one of(?x:
                 ) \[\Q$2\E\] at /,
-        "&$o with ioref arg with hash overload (which does not count)";
+      "&$o with ioref arg with hash overload (which does not count)";
     bless *DATA{IO}, $class;
     if (do {$2 !~ /&/}) {
       $tests++;
@@ -207,7 +207,7 @@ sub test_proto {
       like $@, qr/^Type of arg 1 to &CORE::$o must be reference to one (?x:
                   )of \[\Q$2\E\] at /,
         "&$o with coderef arg";
-    }    
+    }
   }
   elsif ($p =~ /^;?\\\@([\@;])?/) { #   ;\@   \@@   \@;$$@
     $tests += 7;
@@ -215,7 +215,7 @@ sub test_proto {
     if ($1) {
       eval { &{"CORE::$o"}() };
       like $@, qr/^Not enough arguments for $o at /,
-         "&$o with too few args";
+        "&$o with too few args";
     }
     else {
       eval " &CORE::$o(\\\@1,2) ";
@@ -224,56 +224,56 @@ sub test_proto {
     }
     eval " &CORE::$o(2) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be array reference at /,
-        "&$o with non-ref arg";
+      "&$o with non-ref arg";
     eval " &CORE::$o(*STDOUT{IO}) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be array reference at /,
-        "&$o with ioref arg";
+      "&$o with ioref arg";
     my $class = ref *DATA{IO};
     eval " &CORE::$o(bless(*DATA{IO}, 'aov')) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be array reference at /,
-        "&$o with ioref arg with array overload (which does not count)";
+      "&$o with ioref arg with array overload (which does not count)";
     bless *DATA{IO}, $class;
     eval " &CORE::$o(\\&scriggle) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be array reference at /,
-        "&$o with coderef arg";
+      "&$o with coderef arg";
     eval " &CORE::$o(\\\$_) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be array reference at /,
-        "&$o with scalarref arg";
+      "&$o with scalarref arg";
     eval " &CORE::$o({}) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be array reference at /,
-        "&$o with hashref arg";
+      "&$o with hashref arg";
   }
   elsif ($p eq '\[%@]') {
     $tests += 7;
 
     eval " &CORE::$o(\\%1,2) ";
     like $@, qr/^Too many arguments for ${\op_desc($o)} at /,
-        "&$o with too many args";
+      "&$o with too many args";
     eval { &{"CORE::$o"}() };
     like $@, qr/^Not enough arguments for $o at /,
-         "&$o with too few args";
+      "&$o with too few args";
     eval " &CORE::$o(2) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be hash or array (?x:
                 )reference at /,
-        "&$o with non-ref arg";
+      "&$o with non-ref arg";
     eval " &CORE::$o(*STDOUT{IO}) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be hash or array (?x:
                 )reference at /,
-        "&$o with ioref arg";
+      "&$o with ioref arg";
     my $class = ref *DATA{IO};
     eval " &CORE::$o(bless(*DATA{IO}, 'hov')) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be hash or array (?x:
                 )reference at /,
-        "&$o with ioref arg with hash overload (which does not count)";
+      "&$o with ioref arg with hash overload (which does not count)";
     bless *DATA{IO}, $class;
     eval " &CORE::$o(\\&scriggle) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be hash or array (?x:
                 )reference at /,
-        "&$o with coderef arg";
+      "&$o with coderef arg";
     eval " &CORE::$o(\\\$_) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be hash or array (?x:
                 )reference at /,
-        "&$o with scalarref arg";
+      "&$o with scalarref arg";
   }
   elsif ($p eq ';\[$*]') {
     $tests += 4;
@@ -281,16 +281,16 @@ sub test_proto {
     my $desc = quotemeta op_desc($o);
     eval " &CORE::$o(1,2) ";
     like $@, qr/^Too many arguments for $desc at /,
-        "&$o with too many args";
+      "&$o with too many args";
     eval " &CORE::$o([]) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be scalar reference at /,
-        "&$o with array ref arg";
+      "&$o with array ref arg";
     eval " &CORE::$o(1) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be scalar reference at /,
-        "&$o with scalar arg";
+      "&$o with scalar arg";
     eval " &CORE::$o(bless([], 'sov')) ";
     like $@, qr/^Type of arg 1 to &CORE::$o must be scalar reference at /,
-        "&$o with non-scalar arg w/scalar overload (which does not count)";
+      "&$o with non-scalar arg w/scalar overload (which does not count)";
   }
 
   else {
@@ -320,26 +320,26 @@ test_proto 'abs', -5, 5;
 
 SKIP:
 {
-    if ($^O eq "MSWin32" && is_miniperl) {
-        $tests += 8;
-        skip "accept() not available in Win32 miniperl", 8
-    }
-    $tests += 6;
-    test_proto 'accept';
-    eval q{
-      is &CORE::accept(qw{foo bar}), undef, "&accept";
-      lis [&{"CORE::accept"}(qw{foo bar})], [undef], "&accept in list context";
-
-      &myaccept(my $foo, my $bar);
-      is ref $foo, 'GLOB', 'CORE::accept autovivifies its first argument';
-      is $bar, undef, 'CORE::accept does not autovivify its second argument';
-      use strict;
-      undef $foo;
-      eval { 'myaccept'->($foo, $bar) };
-      like $@, qr/^Can't use an undefined value as a symbol reference at/,
-      'CORE::accept will not accept undef 2nd arg under strict';
-      is ref $foo, 'GLOB', 'CORE::accept autovivs its first arg under strict';
-    };
+  if ($^O eq "MSWin32" && is_miniperl) {
+    $tests += 8;
+    skip "accept() not available in Win32 miniperl", 8
+  }
+  $tests += 6;
+  test_proto 'accept';
+  eval q{
+    is &CORE::accept(qw{foo bar}), undef, "&accept";
+    lis [&{"CORE::accept"}(qw{foo bar})], [undef], "&accept in list context";
+
+    &myaccept(my $foo, my $bar);
+    is ref $foo, 'GLOB', 'CORE::accept autovivifies its first argument';
+    is $bar, undef, 'CORE::accept does not autovivify its second argument';
+    use strict;
+    undef $foo;
+    eval { 'myaccept'->($foo, $bar) };
+    like $@, qr/^Can't use an undefined value as a symbol reference at/,
+    'CORE::accept will not accept undef 2nd arg under strict';
+    is ref $foo, 'GLOB', 'CORE::accept autovivs its first arg under strict';
+  };
 }
 
 test_proto 'alarm';
@@ -349,13 +349,13 @@ test_proto 'bind';
 $tests += 3;
 SKIP:
 {
-    skip "bind() not available in Win32 miniperl", 3
-      if $^O eq "MSWin32" && is_miniperl();
-    is &CORE::bind('foo', 'bear'), undef, "&bind";
-    lis [&CORE::bind('foo', 'bear')], [undef], "&bind in list context";
-    eval { &mybind(my $foo, "bear") };
-    like $@, qr/^Bad symbol for filehandle at/,
-         'CORE::bind dies with undef first arg';
+  skip "bind() not available in Win32 miniperl", 3
+    if $^O eq "MSWin32" && is_miniperl();
+  is &CORE::bind('foo', 'bear'), undef, "&bind";
+  lis [&CORE::bind('foo', 'bear')], [undef], "&bind in list context";
+  eval { &mybind(my $foo, "bear") };
+  like $@, qr/^Bad symbol for filehandle at/,
+    'CORE::bind dies with undef first arg';
 }
 
 test_proto 'binmode';
@@ -367,12 +367,13 @@ is &mybinmode(foo), undef, '&binmode with one arg';
 test_proto 'bless';
 $tests += 3;
 like &CORE::bless([],'parcel'), qr/^parcel=ARRAY/, "&bless";
-like join(" ", &CORE::bless([],'parcel')),
-     qr/^parcel=ARRAY(?!.* )/, "&bless in list context";
+like join(" ", &CORE::bless([],'parcel')), qr/^parcel=ARRAY(?!.* )/,
+  "&bless in list context";
 like &mybless([]), qr/^main=ARRAY/, '&bless with one arg';
 
 test_proto 'break';
-{ $tests ++;
+{
+  $tests ++;
   my $tmp;
   CORE::given(1) {
     CORE::when(1) {
@@ -386,22 +387,22 @@ test_proto 'break';
 test_proto 'caller';
 $tests += 4;
 sub caller_test {
-    is scalar &CORE::caller, 'hadhad', '&caller';
-    is scalar &CORE::caller(1), 'main', '&caller(1)';
-    lis [&CORE::caller], [caller], '&caller in list context';
-    # The last element of caller in list context is a hint hash, which
-    # may be a different hash for caller vs &CORE::caller, so an eq com-
-    # parison (which lis() uses for convenience) won’t work.  So just
-    # pop the last element, since the rest are sufficient to prove that
-    # &CORE::caller works.
-    my @ampcaller = &CORE::caller(1);
-    my @caller    = caller(1);
-    pop @ampcaller; pop @caller;
-    lis \@ampcaller, \@caller, '&caller(1) in list context';
+  is scalar &CORE::caller, 'hadhad', '&caller';
+  is scalar &CORE::caller(1), 'main', '&caller(1)';
+  lis [&CORE::caller], [caller], '&caller in list context';
+  # The last element of caller in list context is a hint hash, which
+  # may be a different hash for caller vs &CORE::caller, so an eq com-
+  # parison (which lis() uses for convenience) won’t work.  So just
+  # pop the last element, since the rest are sufficient to prove that
+  # &CORE::caller works.
+  my @ampcaller = &CORE::caller(1);
+  my @caller    = caller(1);
+  pop @ampcaller; pop @caller;
+  lis \@ampcaller, \@caller, '&caller(1) in list context';
 }
 sub {
-   package hadhad;
-   ::caller_test();
+  package hadhad;
+  ::caller_test();
 }->();
 
 test_proto 'chmod';
@@ -424,23 +425,23 @@ test_proto 'close';
 {
   last if is_miniperl;
   $tests += 3;
-  
+
   open my $fh, ">", \my $buffalo;
   print $fh 'an address in the outskirts of Jersey';
   ok &CORE::close($fh), '&CORE::close retval';
   print $fh 'lalala';
   is $buffalo, 'an address in the outskirts of Jersey',
-     'effect of &CORE::close';
+    'effect of &CORE::close';
   # This has to be a separate variable from $fh, as re-using the same
   # variable can cause the tests to pass by accident.  That actually hap-
   # pened during developement, because the second close() was reading
   # beyond the end of the stack and finding a $fh left over from before.
   open my $fh2, ">", \($buffalo = '');
   select+(select($fh2), do {
-     print "Nasusiro Tokasoni";
-     &CORE::close();
-     print "jfd";
-     is $buffalo, "Nasusiro Tokasoni", '&CORE::close with no args';
+    print "Nasusiro Tokasoni";
+    &CORE::close();
+    print "jfd";
+    is $buffalo, "Nasusiro Tokasoni", '&CORE::close with no args';
   })[0];
 }
 lis [&CORE::close('tototootot')], [''], '&close in list context'; ++$tests;
@@ -454,10 +455,10 @@ test_proto 'connect';
 $tests += 2;
 SKIP:
 {
-    skip "connect() not available in Win32 miniperl", 2
-      if $^O eq "MSWin32" && is_miniperl();
-    is &CORE::connect('foo','bar'), undef, '&connect';
-    lis [&myconnect('foo','bar')], [undef], '&connect in list context';
+  skip "connect() not available in Win32 miniperl", 2
+    if $^O eq "MSWin32" && is_miniperl();
+  is &CORE::connect('foo','bar'), undef, '&connect';
+  lis [&myconnect('foo','bar')], [undef], '&connect in list context';
 }
 
 test_proto 'continue';
@@ -498,7 +499,7 @@ eval { dier('quinquangle') };
 is $@, "quinquangle at frob line 6.\n", '&CORE::die'; $tests ++;
 
 test_proto $_ for qw(
- endgrent endhostent endnetent endprotoent endpwent endservent
 endgrent endhostent endnetent endprotoent endpwent endservent
 );
 
 test_proto 'evalbytes';
@@ -647,8 +648,8 @@ SKIP: {
 
 test_proto 'kill'; # set up mykill alias
 if ($^O ne 'riscos') {
-    $tests ++;
-    ok( &mykill(0, $$), '&kill' );
+  $tests ++;
+  ok( &mykill(0, $$), '&kill' );
 }
 
 test_proto 'lc', 'A', 'a';
@@ -705,9 +706,8 @@ test_proto 'ord', chr(utf8::unicode_to_native(64)), utf8::unicode_to_native(64);
 
 test_proto 'pack';
 $tests += 2;
-my $Perl_as_a_hex_string = join "", map
-                                    { sprintf("%2X", utf8::unicode_to_native($_)) }
-                                    0x50, 0x65, 0x72, 0x6c;
+my $Perl_as_a_hex_string =
+  join "", map { sprintf("%2X", utf8::unicode_to_native($_)) } 0x50, 0x65, 0x72, 0x6c;
 is &mypack("H*", $Perl_as_a_hex_string), 'Perl', '&pack';
 lis [&mypack("H*", $Perl_as_a_hex_string)], ['Perl'], '&pack in list context';
 
@@ -761,8 +761,8 @@ test_proto 'rand';
 $tests += 3;
 my $r = &CORE::rand;
 ok eval {
-    use warnings FATAL => qw{numeric uninitialized};
-    $r >= 0 && $r < 1;
+  use warnings FATAL => qw{numeric uninitialized};
+  $r >= 0 && $r < 1;
 }, '&rand returns a valid number';
 unlike join(" ", &CORE::rand), qr/ /, '&rand in list context';
 &cmp_ok(&CORE::rand(78), qw '< 78', '&rand with 1 arg');
@@ -815,14 +815,14 @@ use if !is_miniperl, File::Temp, 'tempdir';
 
 test_proto 'rename';
 {
-    last if is_miniperl;
-    $tests ++;
-    my $dir = tempdir(uc cleanup => 1);
-    my $tmpfilenam = catfile $dir, 'aaa';
-    open my $fh, ">", $tmpfilenam or die "cannot open $tmpfilenam: $!";
-    close $fh or die "cannot close $tmpfilenam: $!";
-    &myrename("$tmpfilenam", $tmpfilenam = catfile $dir,'bbb');
-    ok open(my $fh, '>', $tmpfilenam), '&rename';
+  last if is_miniperl;
+  $tests ++;
+  my $dir = tempdir(uc cleanup => 1);
+  my $tmpfilenam = catfile $dir, 'aaa';
+  open my $fh, ">", $tmpfilenam or die "cannot open $tmpfilenam: $!";
+  close $fh or die "cannot close $tmpfilenam: $!";
+  &myrename("$tmpfilenam", $tmpfilenam = catfile $dir,'bbb');
+  ok open(my $fh, '>', $tmpfilenam), '&rename';
 }
 
 test_proto 'ref', [], 'ARRAY';
@@ -863,11 +863,11 @@ lis [&myscalar(3)], [3], '&scalar in list cx';
 
 test_proto 'seek';
 {
-    last if is_miniperl;
-    $tests += 1;
-    open my $fh, "<", \"misled" or die $!;
-    &myseek($fh, 2, 0);
-    is <$fh>, 'sled', '&seek in action';
+  last if is_miniperl;
+  $tests += 1;
+  open my $fh, "<", \"misled" or die $!;
+  &myseek($fh, 2, 0);
+  is <$fh>, 'sled', '&seek in action';
 }
 
 test_proto 'seekdir';
@@ -876,7 +876,7 @@ test_proto 'seekdir';
 $tests += 8;
 *myselect = \&CORE::select;
 is defined prototype &myselect, defined prototype "CORE::select",
-   'prototype of &select (or lack thereof)';
+  'prototype of &select (or lack thereof)';
 is &myselect, select, '&select with no args';
 {
   my $prev = select;
@@ -887,18 +887,18 @@ is &myselect, select, '&select with no args';
 }
 eval { &myselect(1,2) };
 like $@, qr/^Not enough arguments for select system call at /,
-      ,'&myselect($two,$args)';
+  '&myselect($two,$args)';
 eval { &myselect(1,2,3) };
 like $@, qr/^Not enough arguments for select system call at /,
-      ,'&myselect($with,$three,$args)';
+  '&myselect($with,$three,$args)';
 eval { &myselect(1,2,3,4,5) };
 like $@, qr/^Too many arguments for select system call at /,
-      ,'&myselect($a,$total,$of,$five,$args)';
+  '&myselect($a,$total,$of,$five,$args)';
 unless ($^O eq "MSWin32" && is_miniperl) {
-    &myselect((undef)x3,.25);
-    # Just have to assume that worked. :-) If we get here, at least it didn’t
-    # crash or anything.
-    # select() is unimplemented in Win32 miniperl
+  &myselect((undef)x3,.25);
+  # Just have to assume that worked. :-) If we get here, at least it didn’t
+  # crash or anything.
+  # select() is unimplemented in Win32 miniperl
 }
 
 test_proto "sem$_" for qw "ctl get op";
@@ -1037,7 +1037,7 @@ test_proto 'times';
 $tests += 2;
 like &mytimes, qr/^[\d.]+\z/, '&times in scalar context';
 like join('-',&mytimes), qr/^[\d.]+-[\d.]+-[\d.]+-[\d.]+\z/,
-   '&times in list context';
+  '&times in list context';
 
 test_proto 'uc', 'aa', 'AA';
 test_proto 'ucfirst', 'aa', "Aa";
@@ -1076,12 +1076,10 @@ undef @_;
 
 test_proto 'unpack';
 $tests += 2;
-my $abcd_as_a_hex_string = join "", map
-                                    { sprintf("%2X", utf8::unicode_to_native($_)) }
-                                    0x61, 0x62, 0x63, 0x64;
-my $bcde_as_a_hex_string = join "", map
-                                    { sprintf("%2X", utf8::unicode_to_native($_)) }
-                                    0x62, 0x63, 0x64, 0x65;
+my $abcd_as_a_hex_string =
+  join "", map { sprintf("%2X", utf8::unicode_to_native($_)) } 0x61, 0x62, 0x63, 0x64;
+my $bcde_as_a_hex_string =
+  join "", map { sprintf("%2X", utf8::unicode_to_native($_)) } 0x62, 0x63, 0x64, 0x65;
 $_ = 'abcd';
 is &myunpack("H*"), $abcd_as_a_hex_string, '&unpack with one arg';
 is &myunpack("H*", "bcde"), $bcde_as_a_hex_string, '&unpack with two arg';
@@ -1147,7 +1145,7 @@ test_proto 'write';
 $tests ++;
 eval {&mywrite};
 like $@, qr'^Undefined format "STDOUT" called',
-   "&write without arguments can handle the null";
+  "&write without arguments can handle the null";
 
 # This is just a check to make sure we have tested everything.  If we
 # haven’t, then either the sub needs to be tested or the list in
@@ -1156,16 +1154,16 @@ like $@, qr'^Undefined format "STDOUT" called',
   last if is_miniperl;
   require File::Spec::Functions;
   my $keywords_file =
-   File::Spec::Functions::catfile(
+    File::Spec::Functions::catfile(
       File::Spec::Functions::updir,'regen','keywords.pl'
-   );
+    );
   my %nottest_words = map { $_ => 1 } qw(
     AUTOLOAD BEGIN CHECK CORE DESTROY END INIT UNITCHECK
     __DATA__ __END__
-    and cmp default do dump else elsif eq eval for foreach format ge given goto
-    grep gt if isa last le local lt m map my ne next no or our package print
-    printf q qq qr qw qx redo require return s say sort state sub tr unless
-    until use when while x xor y
+    and catch cmp default do dump else elsif eq eval for foreach format ge
+    given goto grep gt if isa last le local lt m map my ne next no or our
+    package print printf q qq qr qw qx redo require return s say sort state
+    sub tr try unless until use when while x xor y
   );
   open my $kh, $keywords_file
     or die "$0 cannot open $keywords_file: $!";
@@ -1176,7 +1174,7 @@ like $@, qr'^Undefined format "STDOUT" called',
       $tests ++;
       ok   exists &{"my$word"}
         || (eval{&{"CORE::$word"}}, $@ =~ /cannot be called directly/),
-     "$word either has been tested or is not ampable";
+        "$word either has been tested or is not ampable";
     }
   }
 }
index 1fa11c0..30f0621 100644 (file)
@@ -16,10 +16,10 @@ use B;
 
 my %unsupported = map +($_=>1), qw (
  __DATA__ __END__ AUTOLOAD BEGIN UNITCHECK CORE DESTROY END INIT CHECK and
-  cmp default do dump else elsif eq eval for foreach
+  catch cmp default do dump else elsif eq eval for foreach
   format ge given goto grep gt if isa last le local lt m map my ne next
   no  or  our  package  print  printf  q  qq  qr  qw  qx  redo  require
-  return s say sort state sub tr unless until use
+  return s say sort state sub tr try unless until use
   when while x xor y
 );
 my %args_for = (
index 29db4c1..46d1bea 100644 (file)
@@ -797,48 +797,48 @@ SKIP: {
        env_is(__NoNeLoCaL => '');
 
     SKIP: {
-           skip("\$0 check only on Linux, Dragonfly BSD and FreeBSD", 2)
-               unless $^O =~ /^(linux|android|dragonfly|freebsd)$/;
-
-            SKIP: {
-                skip("No procfs cmdline support", 1)
-                    unless open CMDLINE, "/proc/$$/cmdline";
-
-                chomp(my $line = scalar <CMDLINE>);
-                my $me = (split /\0/, $line)[0];
-                is $me, $0, 'altering $0 is effective (testing with /proc/)';
-                close CMDLINE;
-            }
-            skip("No \$0 check with 'ps' on Android", 1) if $^O eq 'android';
-            # perlbug #22811
-            my $mydollarzero = sub {
-              my($arg) = shift;
-              $0 = $arg if defined $arg;
-             # In FreeBSD the ps -o command= will cause
-             # an empty header line, grab only the last line.
-              my $ps = (`ps -o command= -p $$`)[-1];
-              return if $?;
-              chomp $ps;
-              $ps;
-            };
-            my $ps = $mydollarzero->("x");
-            # we allow that something goes wrong with the ps command
-            !$ps && skip("The ps command failed", 1);
-            my $ps_re = ( $^O =~ /^(dragonfly|freebsd)$/ )
-                # FreeBSD cannot get rid of both the leading "perl :"
-                # and the trailing " (perl)": some FreeBSD versions
-                # can get rid of the first one.
-                ? qr/^(?:perl: )?x(?: \(perl\))?$/
-                # In Linux 2.4 we would get an exact match ($ps eq 'x') but
-                # in Linux 2.2 there seems to be something funny going on:
-                # it seems as if the original length of the argv[] would
-                # be stored in the proc struct and then used by ps(1),
-                # no matter what characters we use to pad the argv[].
-                # (And if we use \0:s, they are shown as spaces.)  Sigh.
-               : qr/^x\s*$/
-            ;
-            like($ps, $ps_re, 'altering $0 is effective (testing with `ps`)');
-       }
+        skip("\$0 check only on Linux, Dragonfly BSD and FreeBSD", 2)
+        unless $^O =~ /^(linux|android|dragonfly|freebsd)$/;
+
+        SKIP: {
+            skip("No procfs cmdline support", 1)
+                unless open CMDLINE, "/proc/$$/cmdline";
+
+            chomp(my $line = scalar <CMDLINE>);
+            my $me = (split /\0/, $line)[0];
+            is $me, $0, 'altering $0 is effective (testing with /proc/)';
+            close CMDLINE;
+        }
+        skip("No \$0 check with 'ps' on Android", 1) if $^O eq 'android';
+        # perlbug #22811
+        my $mydollarzero = sub {
+            my($arg) = shift;
+            $0 = $arg if defined $arg;
+            # In FreeBSD the ps -o command= will cause
+            # an empty header line, grab only the last line.
+            my $ps = (`ps -o command= -p $$`)[-1];
+            return if $?;
+            chomp $ps;
+            $ps;
+        };
+        my $ps = $mydollarzero->("x");
+        # we allow that something goes wrong with the ps command
+        !$ps && skip("The ps command failed", 1);
+        my $ps_re = ( $^O =~ /^(dragonfly|freebsd)$/ )
+            # FreeBSD cannot get rid of both the leading "perl :"
+            # and the trailing " (perl)": some FreeBSD versions
+            # can get rid of the first one.
+            ? qr/^(?:(?:mini)?perl: )?x(?: \((?:mini)?perl\))?$/
+            # In Linux 2.4 we would get an exact match ($ps eq 'x') but
+            # in Linux 2.2 there seems to be something funny going on:
+            # it seems as if the original length of the argv[] would
+            # be stored in the proc struct and then used by ps(1),
+            # no matter what characters we use to pad the argv[].
+            # (And if we use \0:s, they are shown as spaces.)  Sigh.
+           : qr/^x\s*$/
+        ;
+        like($ps, $ps_re, 'altering $0 is effective (testing with `ps`)');
+    }
 }
 
 # test case-insignificance of %ENV (these tests must be enabled only
index 7a32164..9a967ad 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     require './charset_tools.pl';
 }
 
-plan tests => 193;
+plan tests => 197;
 
 $FS = ':';
 
@@ -708,3 +708,20 @@ fresh_perl_is('our @ary; @ary = split(/\w(?{ *ary = 0 })/, "abc");',
         '',{},'(@ary = split ...) survives @ary destruction via typeglob');
 fresh_perl_is('my $ary = []; @$ary = split(/\w(?{ $ary = [] })/, "abc");',
         '',{},'(@ary = split ...) survives @ary destruction via reassignment');
+
+# gh18515: check that we spot and flag specific regexps for special treatment
+SKIP: {
+       skip_if_miniperl("special-case patterns: need dynamic loading", 4);
+       for ([ q{" "}, 'WHITE' ],
+               [ q{/\\s+/}, 'WHITE' ],
+               [ q{/^/}, 'START_ONLY' ],
+               [ q{//}, 'NULL' ],
+       ) {
+               my($pattern, $flag) = @$_;
+               my $prog = "split $pattern";
+               my $expect = qr{^r->extflags:.*\b$flag\b}m;
+               fresh_perl_like($prog, $expect, {
+                       switches => [ '-Mre=Debug,COMPILE', '-c' ],
+               }, "special-case pattern for $prog");
+       }
+}
diff --git a/t/op/try.t b/t/op/try.t
new file mode 100644 (file)
index 0000000..5539a3b
--- /dev/null
@@ -0,0 +1,252 @@
+#!./perl
+
+BEGIN {
+    chdir 't' if -d 't';
+    require './test.pl';
+    set_up_inc('../lib');
+    require Config;
+}
+
+use strict;
+use warnings;
+use feature 'try';
+
+{
+    my $warnings;
+    BEGIN { $SIG{__WARN__} = sub { $warnings .= shift; }; }
+
+    my $x;
+    my ($ltry, $lcatch) = (__LINE__+1, __LINE__+4);
+    try {
+        $x .= "try";
+    }
+    catch ($e) {
+        $x .= "catch";
+    }
+    is($x, "try", 'successful try/catch runs try but not catch');
+
+    is($warnings, "try/catch is experimental at $0 line $ltry.\n" .
+                  "try/catch is experimental at $0 line $lcatch.\n",
+        'compiletime warnings');
+    BEGIN { undef $SIG{__WARN__}; }
+}
+
+
+no warnings 'experimental::try';
+
+{
+    my $x;
+    try {
+        $x .= "try";
+    }
+    catch ($e) {
+        $x .= "catch";
+    }
+    is($x, "try", 'successful try/catch runs try but not catch');
+}
+
+{
+    my $x;
+    my $caught;
+    try {
+        $x .= "try";
+        die "Oopsie\n";
+    }
+    catch ($e) {
+        $x .= "catch";
+        $caught = $e;
+        is($@, "", '$@ is empty within catch block');
+    }
+    is($x, "trycatch", 'die in try runs catch block');
+    is($caught, "Oopsie\n", 'catch block saw exception value');
+}
+
+# return inside try {} makes containing function return
+{
+    sub f
+    {
+        try {
+            return "return inside try";
+        }
+        catch ($e) { }
+        return "return from func";
+    }
+    is(f(), "return inside try", 'return inside try');
+}
+
+# wantarray inside try
+{
+    my $context;
+    sub whatcontext
+    {
+        try {
+            $context = wantarray ? "list" :
+                defined wantarray ? "scalar" : "void";
+        }
+        catch ($e) { }
+    }
+
+    whatcontext();
+    is($context, "void", 'sub {try} in void');
+
+    my $scalar = whatcontext();
+    is($context, "scalar", 'sub {try} in scalar');
+
+    my @array = whatcontext();
+    is($context, "list", 'sub {try} in list');
+}
+
+# Loop controls inside try {} do not emit warnings
+{
+    my $warnings = "";
+    local $SIG{__WARN__} = sub { $warnings .= $_[0] };
+
+    {
+        try {
+            last;
+        }
+        catch ($e) { }
+    }
+
+    {
+        try {
+            next;
+        }
+        catch ($e) { }
+    }
+
+    my $count = 0;
+    {
+        try {
+            $count++;
+            redo if $count < 2;
+        }
+        catch ($e) { }
+    }
+
+    is($warnings, "", 'No warnings emitted by next/last/redo inside try');
+
+    $warnings = "";
+
+    LOOP_L: {
+        try {
+            last LOOP_L;
+        }
+        catch ($e) { }
+    }
+
+    LOOP_N: {
+        try {
+            next LOOP_N;
+        }
+        catch ($e) { }
+    }
+
+    $count = 0;
+    LOOP_R: {
+        try {
+            $count++;
+            redo LOOP_R if $count < 2;
+        }
+        catch ($e) { }
+    }
+
+    is($warnings, "", 'No warnings emitted by next/last/redo LABEL inside try');
+}
+
+# try/catch should localise $@
+{
+    eval { die "Value before\n"; };
+
+    try { die "Localized value\n" } catch ($e) {}
+
+    is($@, "Value before\n", 'try/catch localized $@');
+}
+
+# try/catch is not confused by false values
+{
+    my $caught;
+    try {
+        die 0;
+    }
+    catch ($e) {
+        $caught++;
+    }
+
+    ok( $caught, 'catch{} sees a false exception' );
+}
+
+# try/catch is not confused by always-false objects
+{
+    my $caught;
+    try {
+        die FALSE->new;
+    }
+    catch ($e) {
+        $caught++;
+    }
+
+    ok( $caught, 'catch{} sees a false-overload exception object' );
+
+    {
+        package FALSE;
+        use overload 'bool' => sub { 0 };
+        sub new { bless [], shift }
+    }
+}
+
+# return from try is correct even for :lvalue subs
+#   https://github.com/Perl/perl5/issues/18553
+{
+    my $scalar;
+    sub fscalar :lvalue
+    {
+        try { return $scalar }
+        catch ($e) { }
+    }
+
+    fscalar = 123;
+    is($scalar, 123, 'try { return } in :lvalue sub in scalar context' );
+
+    my @array;
+    sub flist :lvalue
+    {
+        try { return @array }
+        catch ($e) { }
+    }
+
+    (flist) = (4, 5, 6);
+    ok(eq_array(\@array, [4, 5, 6]), 'try { return } in :lvalue sub in list context' );
+}
+
+# try as final expression yields correct value
+{
+    my $scalar = do {
+        try { 123 }
+        catch ($e) { 456 }
+    };
+    is($scalar, 123, 'do { try } in scalar context');
+
+    my @list = do {
+        try { 1, 2, 3 }
+        catch ($e) { 4, 5, 6 }
+    };
+    ok(eq_array(\@list, [1, 2, 3]), 'do { try } in list context');
+}
+
+# catch as final expression yields correct value
+{
+    my $scalar = do {
+        try { die "Oops" }
+        catch ($e) { 456 }
+    };
+    is($scalar, 456, 'do { try/catch } in scalar context');
+
+    my @list = do {
+        try { die "Oops" }
+        catch ($e) { 4, 5, 6 }
+    };
+    ok(eq_array(\@list, [4, 5, 6]), 'do { try/catch } in list context');
+}
+
+done_testing;
index 69ea784..bbf7100 100644 (file)
@@ -2,8 +2,12 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    require './test.pl';
-    set_up_inc('../lib');
+    # we can't use test.pl here (see the comment below)
+    #require './test.pl';
+    #set_up_inc('../lib');
+    # so inline set_up_inc() and its call to is_miniperl
+    @INC = () if defined &DynaLoader::boot_DynaLoader;
+    unshift @INC, "../lib";
 }
 
 # This file has been placed in t/opbasic to indicate that it should not use
@@ -438,7 +442,8 @@ if ($^O eq 'VMS') {
 if ($^O eq 'vos') {
   print "not ok ", $T++, " # TODO VOS raises SIGFPE instead of producing infinity.\n";
 }
-elsif ($vms_no_ieee || !$Config{d_double_has_inf}) {
+elsif ($vms_no_ieee || !$Config::Config{d_double_has_inf}) {
+ # note Config.pm is only loaded under VMS and via a require.
  print "ok ", $T++, " # SKIP -- the IEEE infinity model is unavailable in this configuration.\n"
 }
 elsif ($^O eq 'ultrix') {
@@ -468,7 +473,8 @@ else {
 # [perl #120426]
 # small numbers shouldn't round to zero if they have extra floating digits
 
-unless ($Config{d_double_style_ieee}) {
+# note Config.pm is only loaded under VMS and via a require.
+unless ($Config::Config{d_double_style_ieee}) {
 for (1..8) { print "ok ", $T++, " # SKIP -- not IEEE\n" }
 } else {
 try $T++,  0.153e-305 != 0.0,              '0.153e-305';
index bf97579..ef7d2c4 100644 (file)
@@ -2,7 +2,6 @@
 #     cd t
 #     ./perl -I../lib porting/customized.t --regen
 ExtUtils::Constant cpan/ExtUtils-Constant/t/Constant.t d5c75c41d6736a0c5897130f534af0896a7d6f4d
-ExtUtils::PL2Bat cpan/ExtUtils-PL2Bat/t/make_executable.t 2f58339b567d943712488812f06d99f907af46ab
 Filter::Util::Call pod/perlfilter.pod 2d98239c4f4a930ad165444c3879629bb91f4cef
 Locale::Maketext::Simple cpan/Locale-Maketext-Simple/lib/Locale/Maketext/Simple.pm 57ed38905791a17c150210cd6f42ead22a7707b6
 Math::Complex cpan/Math-Complex/lib/Math/Complex.pm 66f28a17647e2de166909ca66e4ced26f8a0a62e
index f7e0858..3e6d630 100644 (file)
@@ -22,7 +22,7 @@ $skip{PL_hash_rand_bits}= $skip{PL_hash_rand_bits_enabled}= 1; # we can be compi
 $skip{PL_warn_locale}= 1; # we can be compiled without locales, so skip testing them
 
 
-my $trial = "nm globals$Config{_o} 2>&1";
+my $trial = "$Config{nm} globals$Config{_o} 2>&1";
 my $yes = `$trial`;
 
 skip_all("Could not run `$trial`") if $?;
@@ -47,7 +47,7 @@ close $fh or die "Problem running makedef.pl";
 my %unexported;
 
 foreach my $file (map {$_ . $Config{_o}} qw(globals regcomp)) {
-    open $fh, '-|', 'nm', $file
+    open $fh, '-|', $Config{nm}, $file
        or die "Can't run nm $file";
 
     while (<$fh>) {
index cc720a0..2164ee3 100644 (file)
@@ -384,6 +384,7 @@ ext/pod-html/testdir/perlvar-copy.pod       ? Should you be using L<...> instead of 3
 ext/pod-html/testdir/perlvar-copy.pod  Verbatim line length including indents exceeds 78 by    5
 ext/vms-filespec/lib/vms/filespec.pm   Verbatim line length including indents exceeds 78 by    1
 install        ? Should you be using F<...> or maybe L<...> instead of 1
+install        Verbatim line length including indents exceeds 78 by    2
 pod/perl.pod   Verbatim line length including indents exceeds 78 by    5
 pod/perlandroid.pod    Verbatim line length including indents exceeds 78 by    3
 pod/perlbook.pod       Verbatim line length including indents exceeds 78 by    1
index 9effa9a..c2d59f2 100644 (file)
@@ -341,7 +341,7 @@ if ( !$symbols{data}{common} ) {
     $symbols{data}{common} = $symbols{data}{bss};
 }
 
-ok($symbols{data}{common}{PL_hash_seed}{'globals.o'}, "has PL_hash_seed");
+ok($symbols{data}{common}{PL_hash_seed_w}{'globals.o'}, "has PL_hash_seed_w");
 ok($symbols{data}{data}{PL_ppaddr}{'globals.o'}, "has PL_ppaddr");
 
 # See the comments in the beginning for what "undefined symbols"
index 27aea1d..666c2d9 100644 (file)
@@ -86,14 +86,16 @@ SKIP: {
 SKIP: {
     find_git_or_skip(6);
     my %seen; # De-dup ls-files output (can appear more than once)
-    chomp(my @repo= grep {
+    my @repo= grep {
+        chomp();
         !m{\.git_patch$} &&
         !m{\.gitattributes$} &&
         !m{\.gitignore$} &&
         !m{\.mailmap$} &&
         !m{^\.github/} &&
+        -e $_ &&
         !$seen{$_}++
-        } `git ls-files`);
+    } `git ls-files`;
     skip("git ls-files didnt work",3)
         if !@repo;
     is( 0+@repo, 0+@files, "git ls-files gives the same number of files as MANIFEST lists");
index d3b36ba..0019599 100644 (file)
@@ -6,7 +6,6 @@
 #
 # Why do we test this?
 # Among other reasons, to check the well-formed-ness of these files:
-#   win32/makefile.mk
 #   MANIFEST
 #   win32/Makefile
 #   win32/pod.mak
index ca19def..d0961c0 100644 (file)
@@ -360,8 +360,8 @@ my $MANIFEST = File::Spec->catfile(File::Spec->updir($original_dir), 'MANIFEST')
 my $copy_fh;
 
 my $MAX_LINE_LENGTH = 78;   # 78 columns
-my $INDENT = 4;             # Things besides =head lines are indented at this
-                            #least much
+my $INDENT = 4;             # Lines other than '=head' lines are indented at
+                            # least this much
 
 # Our warning messages.  Better not have [('"] in them, as those are used as
 # delimiters for variable parts of the messages by poderror.
index 30d7c0f..d684fdc 100644 (file)
@@ -26,7 +26,7 @@ if ( $Config{usecrosscompile} ) {
   skip_all( "Not all files are available during cross-compilation" );
 }
 
-my $tests = 25; # I can't see a clean way to calculate this automatically.
+my $tests = 24; # I can't see a clean way to calculate this automatically.
 
 my %skip = ("regen_perly.pl"    => [qw(perly.act perly.h perly.tab)],
             "regen/keywords.pl" => [qw(keywords.c keywords.h)],
index 8496177..4da8e99 100644 (file)
@@ -41,7 +41,7 @@ $testcases{'[:word:]'} = $testcases{'\w'};
 my $utf8_locale;
 
 my @charsets = qw(a d u aa);
-my $locales_ok = eval { locales_enabled('LC_CTYPE'); 1 };
+my $locales_ok = locales_enabled('LC_CTYPE');
 if (! is_miniperl() && $locales_ok) {
     require POSIX;
     my $current_locale = POSIX::setlocale( &POSIX::LC_ALL, "C") // "";
index 0902224..6fce6e6 100644 (file)
@@ -14,6 +14,12 @@ skip_all_without_unicode_tables();
 use strict;
 use open qw(:utf8 :std);
 
+# Show that it works when all warnings are enabled upon invocation.  This file
+# includes tests that the default warnings are enabled by default, and the
+# non-default ones aren't.
+use warnings;
+BEGIN { ${^WARNING_BITS} = undef }  # Kludge to restore default warnings
+
 # Kind of a kludge to mark warnings to be expected only if we are testing
 # under "use re 'strict'"
 my $only_strict_marker = ':expected_only_under_strict';
index 8a04d1a..202f355 100644 (file)
@@ -38,7 +38,7 @@ if (defined $ARGV[0] && $ARGV[0] ne "") {
 }
 
 # reset the locale environment
-delete local @ENV{'LANG', (grep /^LC_[A-Z]+$/, keys %ENV)};
+delete local @ENV{'LANGUAGE', 'LANG', (grep /^LC_[A-Z]+$/, keys %ENV)};
 
 # If user wants this to happen, they set the environment variable AND use
 # 'debug'
@@ -490,23 +490,22 @@ SKIP: {
             }
         }
 
-        fresh_perl(<<"EOF",
+        fresh_perl_is(<<"EOF",
                 use locale;
                 use POSIX;
                 POSIX::setlocale(LC_ALL, "$invalid_string");
 EOF
-            {});
-        is ($?, 0, "In setting complicated invalid LC_ALL, final individ category doesn't need a \';'");
+            "", { eval $switches },
+            "In setting complicated invalid LC_ALL, final individ category doesn't need a \';'");
 
         skip("no non-C locale available", 1 ) unless $non_C_locale;
-        fresh_perl(<<"EOF",
+        fresh_perl_is(<<"EOF",
                 use locale;
                 use POSIX;
                 POSIX::setlocale(LC_ALL, "$valid_string");
 EOF
-            {});
-        is ($?, 0, "In setting complicated valid LC_ALL, final individ category doesn't need a \';'");
-
+            "", { eval $switches },
+            "In setting complicated valid LC_ALL, final individ category doesn't need a \';'");
     }
 
 }
diff --git a/toke.c b/toke.c
index 484dcbb..628a79f 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -345,6 +345,7 @@ static struct debug_tokens {
     { ASSIGNOP,                TOKENTYPE_OPNUM,        "ASSIGNOP" },
     { BITANDOP,                TOKENTYPE_OPNUM,        "BITANDOP" },
     { BITOROP,         TOKENTYPE_OPNUM,        "BITOROP" },
+    { CATCH,           TOKENTYPE_IVAL,         "CATCH" },
     { CHEQOP,          TOKENTYPE_OPNUM,        "CHEQOP" },
     { CHRELOP,         TOKENTYPE_OPNUM,        "CHRELOP" },
     { COLONATTR,       TOKENTYPE_NONE,         "COLONATTR" },
@@ -424,6 +425,7 @@ static struct debug_tokens {
     { SUBLEXEND,       TOKENTYPE_NONE,         "SUBLEXEND" },
     { SUBLEXSTART,     TOKENTYPE_NONE,         "SUBLEXSTART" },
     { THING,           TOKENTYPE_OPVAL,        "THING" },
+    { TRY,             TOKENTYPE_IVAL,         "TRY" },
     { UMINUS,          TOKENTYPE_NONE,         "UMINUS" },
     { UNIOP,           TOKENTYPE_OPNUM,        "UNIOP" },
     { UNIOPSUB,                TOKENTYPE_OPVAL,        "UNIOPSUB" },
@@ -7704,6 +7706,11 @@ yyl_word_or_keyword(pTHX_ char *s, STRLEN len, I32 key, I32 orig_keyword, struct
     case KEY_break:
         FUN0(OP_BREAK);
 
+    case KEY_catch:
+        Perl_ck_warner_d(aTHX_
+            packWARN(WARN_EXPERIMENTAL__TRY), "try/catch is experimental");
+        PREBLOCK(CATCH);
+
     case KEY_chop:
         UNI(OP_CHOP);
 
@@ -8435,6 +8442,11 @@ yyl_word_or_keyword(pTHX_ char *s, STRLEN len, I32 key, I32 orig_keyword, struct
     case KEY_truncate:
         LOP(OP_TRUNCATE,XTERM);
 
+    case KEY_try:
+        Perl_ck_warner_d(aTHX_
+            packWARN(WARN_EXPERIMENTAL__TRY), "try/catch is experimental");
+        PREBLOCK(TRY);
+
     case KEY_uc:
         UNI(OP_UC);
 
index 9df1564..d38a004 100644 (file)
--- a/uconfig.h
+++ b/uconfig.h
  */
 /*#define DEFAULT_INC_EXCLUDES_DOT     / **/
 
-/* USE_STRICT_BY_DEFAULT:
- *     This symbol, if defined, enables additional defaults.
- *     At this time it only enables implicit strict by default.
- */
-/*#define USE_STRICT_BY_DEFAULT        / * use strict by default */
-
 /* USE_DYNAMIC_LOADING:
  *     This symbol, if defined, indicates that dynamic loading of
  *     some sort is available.
  */
 /*#define USE_C_BACKTRACE              / **/
 
+/* USE_STRICT_BY_DEFAULT:
+ *     This symbol, if defined, enables additional defaults.
+ *     At this time it only enables implicit strict by default.
+ */
+/*#define USE_STRICT_BY_DEFAULT        / * use strict by default */
+
 /* USE_DTRACE:
  *     This symbol, if defined, indicates that Perl should
  *     be built with support for DTrace.
 #endif
 
 /* Generated from:
- * 53ec858c462f9fa2669095834b3d350458c955777a07a0ad7a3a73162ff8ef0e config_h.SH
+ * 6edd641b187b02d0daa8cb53f5d22f2dcca115a0d3e744f51b0292d2db484ca5 config_h.SH
  * b53784d20c0f250807f47a3130cdc8e01a92da948e6747af87ebc24f11904722 uconfig.sh
  * ex: set ro: */
diff --git a/util.c b/util.c
index 825c33f..8103260 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1542,9 +1542,9 @@ can be used any place a string (char *) is required:
 
     char * s = Perl_form("%d.%d",major,minor);
 
-They use a single private buffer so if you want to format several strings you
-must explicitly copy the earlier strings away (and free the copies when you
-are done).
+They use a single (per-thread) private buffer so if you want to format several
+strings you must explicitly copy the earlier strings away (and free the copies
+when you are done).
 
 The two forms differ only in that C<form_nocontext> does not take a thread
 context (C<aTHX>) parameter, so is used in situations where the caller doesn't
@@ -4215,20 +4215,22 @@ giving localized results.
   Newx(buf, buflen, char);
 
   GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral); /* fmt checked by caller */
+
   len = strftime(buf, buflen, fmt, &mytm);
+
   GCC_DIAG_RESTORE_STMT;
 
   /*
-  ** The following is needed to handle to the situation where
+  ** The following is needed to handle the situation where
   ** tmpbuf overflows.  Basically we want to allocate a buffer
-  ** and try repeatedly.  The reason why it is so complicated
-  ** is that getting a return value of 0 from strftime can indicate
-  ** one of the following:
+  ** and try repeatedly, until it's large enough.  The reason why it is so
+  ** complicated ** is that getting a return value of 0 from strftime can
+  ** indicate one of the following:
   ** 1. buffer overflowed,
   ** 2. illegal conversion specifier, or
-  ** 3. the format string specifies nothing to be returned(not
-  **     an error).  This could be because format is an empty string
-  **    or it specifies %p that yields an empty string in some locale.
+  ** 3. the format string specifies nothing to be returned (which isn't an
+  **    an error).  This could be because the format is an empty string
+  **    or it specifies %p which yields an empty string in some locales.
   ** If there is a better way to make it portable, go ahead by
   ** all means.
   */
@@ -4250,8 +4252,19 @@ giving localized results.
         break;
       /* heuristic to prevent out-of-memory errors */
       if (bufsize > 100*fmtlen) {
-        Safefree(buf);
-        buf = NULL;
+
+        /* "%p" can legally return nothing, assume that was the case if we
+         * can't make the buffer large enough to get a non-zero return.  For
+         * any other formats, assume it is an error (probably it is an illegal
+         * conversion specifier.) */
+        if (strEQ(fmt, "%p")) {
+            Renew(buf, 1, char);
+            *buf = '\0';
+        }
+        else {
+            Safefree(buf);
+            buf = NULL;
+        }
         break;
       }
       bufsize *= 2;
index 925d2c3..126d741 100644 (file)
@@ -313,7 +313,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5)
 extra.pods : miniperl
        @ @extra_pods.com
 
-PERLDELTA_CURRENT = [.pod]perl5336delta.pod
+PERLDELTA_CURRENT = [.pod]perl5337delta.pod
 
 $(PERLDELTA_CURRENT) : [.pod]perldelta.pod
        Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
index b129f6e..5547a11 100644 (file)
 /* Warnings Categories added in Perl 5.031 */
 
 #define WARN_EXPERIMENTAL__ISA          73
+
+/* Warnings Categories added in Perl 5.033 */
+
+#define WARN_EXPERIMENTAL__TRY          74
 #define WARNsize                        19
 #define WARN_ALLstring                  "\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125"
 #define WARN_NONEstring                         "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
@@ -313,6 +317,7 @@ category parameters passed.
 =for apidoc Amnh||WARN_EXPERIMENTAL__UNIPROP_WILDCARDS
 =for apidoc Amnh||WARN_EXPERIMENTAL__VLB
 =for apidoc Amnh||WARN_EXPERIMENTAL__ISA
+=for apidoc Amnh||WARN_EXPERIMENTAL__TRY
 
 =cut
 */
index af0fdf4..edfd088 100644 (file)
@@ -2,7 +2,7 @@
 # Makefile to build perl on Windows using GMAKE.
 # Supported compilers:
 #      Microsoft Visual C++ 7.0 or later
-#      MinGW with gcc-3.4.5 or later with runtime < 3.21
+#      MinGW with gcc-3.4.5-5.3.0
 #      MinGW64 with gcc-4.4.3 or later
 #      Windows SDK 64-bit compiler and tools
 #
@@ -64,7 +64,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.33.6
+#INST_VER      := \5.33.7
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -493,6 +493,13 @@ ifeq ($(USE_QUADMATH),define)
 ARCHNAME       := $(ARCHNAME)-quadmath
 endif
 
+ifeq ($(CCTYPE),GCC)
+GCCVER         := $(shell $(GCCBIN) -dumpversion)
+GCCVER1                := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%i)
+GCCVER2                := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%j)
+GCCVER3                := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%k)
+endif
+
 # Set the install location of the compiler headers/libraries.
 # These are saved into $Config{incpath} and $Config{libpth}.
 ifneq ($(GCCCROSS),)
@@ -501,7 +508,7 @@ CCLIBDIR := $(CCHOME)\$(GCCCROSS)\lib
 ARCHPREFIX := $(GCCCROSS)-
 else ifeq ($(CCTYPE),GCC)
 CCINCDIR := $(CCHOME)\include
-CCLIBDIR := $(CCHOME)\lib
+CCLIBDIR := $(CCHOME)\lib;$(CCHOME)\$(GCCTARGET)\lib;$(CCHOME)\lib\gcc\$(GCCTARGET)\$(GCCVER)
 ARCHPREFIX :=
 else
 CCINCDIR := $(CCHOME)\include
@@ -530,7 +537,7 @@ endif
 # Set DLL location for GCC compilers.
 ifeq ($(CCTYPE),GCC)
 ifneq ($(GCCCROSS),)
-CCDLLDIR := $(CCLIBDIR)
+CCDLLDIR := $(CCHOME)\$(GCCCROSS)\lib
 else
 CCDLLDIR := $(CCHOME)\bin
 endif
@@ -575,9 +582,6 @@ BUILDOPT        += -D__USE_MINGW_ANSI_STDIO
 MINIBUILDOPT    += -D__USE_MINGW_ANSI_STDIO
 endif
 
-GCCVER1   := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%i)
-GCCVER2   := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%j)
-GCCVER3   := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%k)
 
 # If you are using GCC, 4.3 or later by default we add the -fwrapv option.
 # See https://github.com/Perl/perl5/issues/13690
@@ -627,7 +631,7 @@ ifeq ($(USE_CPLUSPLUS),define)
 EXTRACFLAGS    += $(CXX_FLAG)
 endif
 CFLAGS         = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
-LINK_FLAGS     = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"
+LINK_FLAGS     = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(subst ;," -L",$(CCLIBDIR))"
 OBJOUT_FLAG    = -o
 EXEOUT_FLAG    = -o
 LIBOUT_FLAG    =
@@ -1776,7 +1780,7 @@ utils: $(HAVEMINIPERL) ..\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\perl5336delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5337delta.pod
        $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1874,7 +1878,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 \
-           perl5336delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5337delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
index 4986f0b..f4b6533 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.33.6
+#INST_VER      = \5.33.7
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -1240,7 +1240,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\perl5336delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5337delta.pod
        cd ..\win32
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
@@ -1339,7 +1339,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 \
-           perl5336delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5337delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
index b6e298f..af6fed9 100644 (file)
@@ -894,7 +894,7 @@ lseektype='long long'
 mad='undef'
 mail=''
 mailx=''
-make='dmake'
+make='gmake'
 make_set_make='#'
 mallocobj='malloc.o'
 mallocsrc='malloc.c'
diff --git a/win32/makefile.mk b/win32/makefile.mk
deleted file mode 100644 (file)
index 1e2a39c..0000000
+++ /dev/null
@@ -1,1961 +0,0 @@
-#
-# Makefile to build perl on Windows using DMAKE.
-# Supported compilers:
-#      Microsoft Visual C++ 7.0 or later
-#      MinGW with gcc-3.4.5 or later with runtime < 3.21
-#      MinGW64 with gcc-4.4.3 or later
-#      Windows SDK 64-bit compiler and tools
-#
-# This is set up to build a perl.exe that runs off a shared library
-# (perl533.dll).  Also makes individual DLLs for the XS extensions.
-#
-
-##
-## Make sure you read README.win32 *before* you mess with anything here!
-##
-
-#
-# Import everything from the environment like NMAKE does.
-#
-.IMPORT : .EVERYTHING
-
-##
-## Build configuration.  Edit the values below to suit your needs.
-##
-
-#
-# Set these to wherever you want "dmake install" to put your
-# newly built perl.
-#
-INST_DRV       *= c:
-INST_TOP       *= $(INST_DRV)\perl
-
-#
-# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
-# on a 64-bit version of Windows.
-#
-#WIN64         *= undef
-
-#
-# Comment this out if you DON'T want your perl installation to be versioned.
-# This means that the new installation will overwrite any files from the
-# old installation at the same INST_TOP location.  Leaving it enabled is
-# the safest route, as perl adds the extra version directory to all the
-# locations it installs files to.  If you disable it, an alternative
-# versioned installation can be obtained by setting INST_TOP above to a
-# path that includes an arbitrary version string.
-#
-#INST_VER      *= \5.33.6
-
-#
-# Comment this out if you DON'T want your perl installation to have
-# architecture specific components.  This means that architecture-
-# specific files will be installed along with the architecture-neutral
-# files.  Leaving it enabled is safer and more flexible, in case you
-# want to build multiple flavors of perl and install them together in
-# the same location.  Commenting it out gives you a simpler
-# installation that is easier to understand for beginners.
-#
-#INST_ARCH     *= \$(ARCHNAME)
-
-#
-# Uncomment this if you want perl to run
-#      $Config{sitelibexp}\sitecustomize.pl
-# before anything else.  This script can then be set up, for example,
-# to add additional entries to @INC.
-#
-#USE_SITECUST  *= define
-
-#
-# uncomment to enable multiple interpreters.  This is needed for fork()
-# emulation and for thread support, and is auto-enabled by USE_IMP_SYS
-# and USE_ITHREADS below.
-#
-USE_MULTI      *= define
-
-#
-# Interpreter cloning/threads; now reasonably complete.
-# This should be enabled to get the fork() emulation.  This needs (and
-# will auto-enable) USE_MULTI above.
-#
-USE_ITHREADS   *= define
-
-#
-# uncomment to enable the implicit "host" layer for all system calls
-# made by perl.  This is also needed to get fork().  This needs (and
-# will auto-enable) USE_MULTI above.
-#
-USE_IMP_SYS    *= define
-
-#
-# Uncomment this if you're building a 32-bit perl and want 64-bit integers.
-# (If you're building a 64-bit perl then you will have 64-bit integers whether
-# or not this is uncommented.)
-#
-#USE_64_BIT_INT        *= define
-
-#
-# Uncomment this if you want to support the use of long doubles in GCC builds.
-# This option is not supported for MSVC builds.
-#
-#USE_LONG_DOUBLE *= define
-
-#
-# Uncomment this if you want to support the use of __float128s in GCC builds.
-# This option is not supported for MSVC builds.
-#
-#USE_QUADMATH  *= define
-#I_QUADMATH    *= define
-
-#
-# Comment this out if you want to build perl without __USE_MINGW_ANSI_STDIO defined.
-# (If you're building perl with USE_LONG_DOUBLE defined then
-# __USE_MINGW_ANSI_STDIO will be defined whether or not this is uncommented.)
-# The advantage of defining __USE_MINGW_ANSI_STDIO is that it provides correct
-# (s)printf formatting of numbers, whereas the MS runtime might not.
-# This option has no effect on MSVC builds.
-#
-USE_MINGW_ANSI_STDIO *= define
-
-#
-# Comment this out if you want the legacy default behavior of including '.' at
-# the end of @INC.
-#
-DEFAULT_INC_EXCLUDES_DOT *= define
-
-#
-# Uncomment this if you want to disable looking up values from
-# HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in
-# the Registry.
-#
-#USE_NO_REGISTRY *= define
-
-#
-# uncomment exactly one of the following
-#
-# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
-#CCTYPE                *= MSVC70
-# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
-#CCTYPE                *= MSVC70FREE
-# Windows Server 2003 SP1 Platform SDK (April 2005) (64-bit compiler and tools)
-#CCTYPE                = SDK2003SP1
-# Visual C++ 2005 (aka Visual C++ 8.0) (full version or Express Edition)
-#CCTYPE                *= MSVC80
-# Visual C++ 2008 (aka Visual C++ 9.0) (full version or Express Edition)
-#CCTYPE                *= MSVC90
-# Visual C++ 2010 (aka Visual C++ 10.0) (full version or Express Edition)
-#CCTYPE                = MSVC100
-# Visual C++ 2012 (aka Visual C++ 11.0) (full version or Express Edition)
-#CCTYPE                = MSVC110
-# Visual C++ 2013 (aka Visual C++ 12.0) (full version or Express Edition)
-#CCTYPE                = MSVC120
-# Visual C++ 2015 (aka Visual C++ 14.0) (full version or Express Edition)
-#CCTYPE                = MSVC140
-# Visual C++ 2017 (aka Visual C++ 14.1) (full version or Community Edition)
-#CCTYPE                = MSVC141
-# Visual C++ 2019 (aka Visual C++ 14.2) (full version or Community Edition)
-#CCTYPE                = MSVC142
-# MinGW or mingw-w64 with gcc-3.4.5 or later
-#CCTYPE                = GCC
-
-#
-# If you are using GCC, 4.3 or later by default we add the -fwrapv option.
-# See https://github.com/Perl/perl5/issues/13690
-#
-#GCCWRAPV       *= define
-
-#
-# If you are using Intel C++ Compiler uncomment this
-#
-#__ICC         *= define
-
-#
-# Uncomment this if you want to build everything in C++ mode
-#
-#USE_CPLUSPLUS *= define
-
-#
-# uncomment next line if you want debug version of perl (big/slow)
-# If not enabled, we automatically try to use maximum optimization
-# with all compilers that are known to have a working optimizer.
-#
-# You can also set CFG = DebugSymbols for a slightly smaller/faster
-# debug build without the special debugging code in perl which is
-# enabled via -DDEBUGGING;
-#
-# or you can set CFG = DebugFull for an even fuller (bigger/slower)
-# debug build using the debug version of the CRT, and enabling VC++
-# debug features such as extra assertions and invalid parameter warnings
-# in perl and CRT code via -D_DEBUG.  (Note that the invalid parameter
-# handler does get triggered from time to time in this configuration,
-# which causes warnings to be printed on STDERR, which in turn causes a
-# few tests to fail.)  (This configuration is only available for VC++ builds.)
-#
-#CFG           *= Debug
-
-#
-# uncomment to enable linking with setargv.obj under the Visual C
-# compiler. Setting this options enables perl to expand wildcards in
-# arguments, but it may be harder to use alternate methods like
-# File::DosGlob that are more powerful.  This option is supported only with
-# Visual C.
-#
-#USE_SETARGV   *= define
-
-#
-# set this if you wish to use perl's malloc
-# WARNING: Turning this on/off WILL break binary compatibility with extensions
-# you may have compiled with/without it.  Be prepared to recompile all
-# extensions if you change the default.  Currently, this cannot be enabled
-# if you ask for USE_IMP_SYS above.
-#
-#PERL_MALLOC   *= define
-
-#
-# set this to enable debugging mstats
-# This must be enabled to use the Devel::Peek::mstat() function.  This cannot
-# be enabled without PERL_MALLOC as well.
-#
-#DEBUG_MSTATS  *= define
-
-#
-# set this to additionally provide a statically linked perl-static.exe.
-# Note that dynamic loading will not work with this perl, so you must
-# include required modules statically using the STATIC_EXT or ALL_STATIC
-# variables below. A static library perl533s.lib will also be created.
-# Ordinary perl.exe is not affected by this option.
-#
-#BUILD_STATIC  *= define
-
-#
-# in addition to BUILD_STATIC the option ALL_STATIC makes *every*
-# extension get statically built.
-# This will result in a very large perl executable, but the main purpose
-# is to have proper linking set so as to be able to create miscellaneous
-# executables with different built-in extensions. It implies BUILD_STATIC.
-#
-#ALL_STATIC    *= define
-
-#
-# set the install location of the compiler
-# Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using
-# Visual C++.
-#
-# For GCC builds this should be the directory containing the bin, include,
-# lib directories for your compiler.
-#
-
-#CCHOME                *= C:\MinGW
-
-#
-# uncomment this if you are using x86_64-w64-mingw32 cross-compiler
-# ie if your gcc executable is called 'x86_64-w64-mingw32-gcc'
-# instead of the usual 'gcc'.
-#
-#GCCCROSS      *= define
-
-#
-# Additional compiler flags can be specified here.
-#
-BUILDOPT       *= $(BUILDOPTEXTRA)
-
-#
-# This should normally be disabled.  Enabling it will disable the File::Glob
-# implementation of CORE::glob.
-#
-#BUILDOPT      += -DPERL_EXTERNAL_GLOB
-
-#
-# Perl needs to read scripts in text mode so that the DATA filehandle
-# works correctly with seek() and tell(), or around auto-flushes of
-# all filehandles (e.g. by system(), backticks, fork(), etc).
-#
-# The current version on the ByteLoader module on CPAN however only
-# works if scripts are read in binary mode.  But before you disable text
-# mode script reading (and break some DATA filehandle functionality)
-# please check first if an updated ByteLoader isn't available on CPAN.
-#
-BUILDOPT       += -DPERL_TEXTMODE_SCRIPTS
-
-#
-# specify semicolon-separated list of extra directories that modules will
-# look for libraries (spaces in path names need not be quoted)
-#
-EXTRALIBDIRS   *=
-
-#
-# set this to point to cmd.exe (only needed if you use some
-# alternate shell that doesn't grok cmd.exe style commands)
-#
-#SHELL         *= g:\winnt\system32\cmd.exe
-
-#
-# set this to your email address (perl will guess a value from
-# your loginname and your hostname, which may not be right)
-#
-#EMAIL         *=
-
-##
-## Build configuration ends.
-##
-
-##################### CHANGE THESE ONLY IF YOU MUST #####################
-
-PERL_MALLOC    *= undef
-DEBUG_MSTATS   *= undef
-
-USE_SITECUST   *= undef
-USE_MULTI      *= undef
-USE_ITHREADS   *= undef
-USE_IMP_SYS    *= undef
-USE_64_BIT_INT *= undef
-USE_LONG_DOUBLE        *= undef
-USE_QUADMATH   *= undef
-I_QUADMATH     *= undef
-DEFAULT_INC_EXCLUDES_DOT *= undef
-USE_NO_REGISTRY        *= undef
-
-
-.IF "$(USE_IMP_SYS)" == "define"
-PERL_MALLOC    = undef
-.ENDIF
-
-.IF "$(PERL_MALLOC)" == "undef"
-DEBUG_MSTATS   = undef
-.ENDIF
-
-.IF "$(DEBUG_MSTATS)" == "define"
-BUILDOPT       += -DPERL_DEBUGGING_MSTATS
-.ENDIF
-
-.IF "$(USE_IMP_SYS) $(USE_MULTI)" == "define undef"
-USE_MULTI      != define
-.ENDIF
-
-.IF "$(USE_ITHREADS) $(USE_MULTI)" == "define undef"
-USE_MULTI      != define
-.ENDIF
-
-.IF "$(USE_SITECUST)" == "define"
-BUILDOPT       += -DUSE_SITECUSTOMIZE
-.ENDIF
-
-.IF "$(USE_MULTI)" != "undef"
-BUILDOPT       += -DPERL_IMPLICIT_CONTEXT
-.ENDIF
-
-.IF "$(USE_IMP_SYS)" != "undef"
-BUILDOPT       += -DPERL_IMPLICIT_SYS
-.ENDIF
-
-.IF "$(USE_NO_REGISTRY)" != "undef"
-BUILDOPT       += -DWIN32_NO_REGISTRY
-.ENDIF
-
-.IF "$(CCTYPE)" == "GCC"
-GCCTARGET      := $(shell gcc -dumpmachine & exit /b 0)
-.ENDIF
-
-#no explicit CCTYPE given, do auto detection
-.IF "$(CCTYPE)" == ""
-GCCTARGET      := $(shell gcc -dumpmachine 2>NUL & exit /b 0)
-#do we have a GCC?
-.IF "$(GCCTARGET)" != ""
-CCTYPE         = GCC
-.ELSE
-WIN64          := $(shell for /f "tokens=3 delims=.^ " \
-       %i in ('cl ^2^>^&1') do @if "%i" == "32-bit" echo undef)
-#major version of CL has diff position based on 32 vs 64
-#Microsoft (R) C/C++ Optimizing Compiler Version 15.00.30729.01 for x64
-#Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
-#use var to capture 1st line only, not 8th token of lines 2 & 3 in cl.exe output
-.IF "$(WIN64)" == "undef"
-MSVCVER                := $(shell (set MSVCVER=) & (for /f "tokens=8,9 delims=.^ " \
-       %i in ('cl ^2^>^&1') do @if not defined MSVCVER if %i% geq 19 \
-       (set /A "MSVCVER=((%i-5)*10)+(%j/10)") \
-       else (set /A "MSVCVER=(%i-6)*10")))
-.ELSE
-MSVCVER                := $(shell (set MSVCVER=) & (for /f "tokens=7,8 delims=.^ " \
-       %i in ('cl ^2^>^&1') do @if not defined MSVCVER if %i% geq 19 \
-       (set /A "MSVCVER=((%i-5)*10)+(%j/10)") \
-       else (set /A "MSVCVER=(%i-6)*10")))
-.ENDIF
-#autodetect failed, reset to empty string
-.IF "$(MSVCVER)" == "-50"
-CCTYPE         := 
-.ELSE
-CCTYPE         := MSVC$(MSVCVER)
-.ENDIF
-.ENDIF
-.ENDIF
-
-# Versions of Visual C++ up to VC++ 7.1 define $(MSVCDir); versions since then
-# define $(VCINSTALLDIR) instead, but for VC++ 14.1 we need the subfolder given
-# by $(VCToolsInstallDir).
-.IF "$(CCHOME)" == ""
-.IF "$(CCTYPE)" == "GCC"
-CCHOME         *= C:\MinGW
-.ELIF "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
-CCHOME         *= $(MSVCDir)
-.ELIF "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
-CCHOME         *= $(VCToolsInstallDir)
-.ELSE
-CCHOME         *= $(VCINSTALLDIR)
-.ENDIF
-.ENDIF
-
-PROCESSOR_ARCHITECTURE *= x86
-
-.IF "$(WIN64)" == "undef"
-PROCESSOR_ARCHITECTURE = x86
-.ENDIF
-
-.IF "$(WIN64)" == ""
-# When we are running from a 32bit cmd.exe on AMD64 then
-# PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432
-# is set to AMD64
-.IF "$(PROCESSOR_ARCHITEW6432)" != ""
-PROCESSOR_ARCHITECTURE != $(PROCESSOR_ARCHITEW6432)
-WIN64                  = define
-.ELIF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "IA64"
-WIN64                  = define
-.ELSE
-WIN64                  = undef
-.ENDIF
-.ENDIF
-
-.IF "$(WIN64)" == "define"
-USE_64_BIT_INT = define
-.ENDIF
-
-# Disable the long double option for MSVC builds since that compiler
-# does not support it.
-.IF "$(CCTYPE)" != "GCC"
-USE_LONG_DOUBLE        != undef
-.ENDIF
-
-# Disable the __foat128 option for MSVC builds since that compiler
-# does not support it.
-.IF "$(CCTYPE)" != "GCC"
-USE_QUADMATH   != undef
-I_QUADMATH     != undef
-.ENDIF
-
-ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
-.IF "$(ARCHITECTURE)" == "AMD64"
-ARCHITECTURE   = x64
-.ENDIF
-.IF "$(ARCHITECTURE)" == "IA64"
-ARCHITECTURE   = ia64
-.ENDIF
-
-.IF "$(USE_MULTI)" == "define"
-ARCHNAME       = MSWin32-$(ARCHITECTURE)-multi
-.ELSE
-ARCHNAME       = MSWin32-$(ARCHITECTURE)-perlio
-.ENDIF
-
-.IF "$(USE_ITHREADS)" == "define"
-ARCHNAME       !:= $(ARCHNAME)-thread
-.ENDIF
-
-.IF "$(WIN64)" != "define"
-.IF "$(USE_64_BIT_INT)" == "define"
-ARCHNAME       !:= $(ARCHNAME)-64int
-.ENDIF
-.ENDIF
-
-.IF "$(USE_LONG_DOUBLE)" == "define"
-ARCHNAME       !:= $(ARCHNAME)-ld
-.ENDIF
-
-.IF "$(USE_QUADMATH)" == "define"
-ARCHNAME       !:= $(ARCHNAME)-quadmath
-.ENDIF
-
-# Set the install location of the compiler headers/libraries.
-# These are saved into $Config{incpath} and $Config{libpth}.
-.IF "$(GCCCROSS)" == "define"
-CCINCDIR *= $(CCHOME)\x86_64-w64-mingw32\include
-CCLIBDIR *= $(CCHOME)\x86_64-w64-mingw32\lib
-.ELIF "$(CCTYPE)" == "GCC"
-CCINCDIR *= $(CCHOME)\include
-CCLIBDIR *= $(CCHOME)\lib
-.ELSE
-CCINCDIR *= $(CCHOME)\include
-.IF "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
-.IF "$(WIN64)" == "define"
-CCLIBDIR *= $(CCHOME)\lib\x64
-.ELSE
-CCLIBDIR *= $(CCHOME)\lib\x86
-.ENDIF
-.ELSE
-.IF "$(WIN64)" == "define"
-CCLIBDIR *= $(CCHOME)\lib\amd64
-.ELSE
-CCLIBDIR *= $(CCHOME)\lib
-.ENDIF
-.ENDIF
-.ENDIF
-
-# Set DLL location for GCC compilers.
-.IF "$(CCTYPE)" == "GCC"
-.IF "$(GCCCROSS)" == "define"
-CCDLLDIR *= $(CCLIBDIR)
-.ELSE
-CCDLLDIR *= $(CCHOME)\bin
-.ENDIF
-.ENDIF
-
-ARCHDIR                = ..\lib\$(ARCHNAME)
-COREDIR                = ..\lib\CORE
-AUTODIR                = ..\lib\auto
-LIBDIR         = ..\lib
-EXTDIR         = ..\ext
-DISTDIR                = ..\dist
-CPANDIR                = ..\cpan
-PODDIR         = ..\pod
-HTMLDIR                = .\html
-
-INST_SCRIPT    = $(INST_TOP)$(INST_VER)\bin
-INST_BIN       = $(INST_SCRIPT)$(INST_ARCH)
-INST_LIB       = $(INST_TOP)$(INST_VER)\lib
-INST_ARCHLIB   = $(INST_LIB)$(INST_ARCH)
-INST_COREDIR   = $(INST_ARCHLIB)\CORE
-INST_HTML      = $(INST_TOP)$(INST_VER)\html
-
-#
-# Programs to compile, build .lib files and link
-#
-
-.USESHELL :
-
-MINIBUILDOPT    *=
-
-.IF "$(CCTYPE)" == "GCC"
-
-.IF "$(GCCCROSS)" == "define"
-ARCHPREFIX      = x86_64-w64-mingw32-
-.ENDIF
-
-CC             = $(ARCHPREFIX)gcc
-LINK32         = $(ARCHPREFIX)g++
-LIB32          = $(ARCHPREFIX)ar rc
-IMPLIB         = $(ARCHPREFIX)dlltool
-RSC            = $(ARCHPREFIX)windres
-
-.IF "$(USE_LONG_DOUBLE)" == "define" || "$(USE_MINGW_ANSI_STDIO)" == "define"
-BUILDOPT        += -D__USE_MINGW_ANSI_STDIO
-MINIBUILDOPT    += -D__USE_MINGW_ANSI_STDIO
-.ENDIF
-
-GCCVER1:= $(shell for /f "delims=. tokens=1,2,3" %i in ('gcc -dumpversion') do @echo %i)
-GCCVER2:= $(shell for /f "delims=. tokens=1,2,3" %i in ('gcc -dumpversion') do @echo %j)
-GCCVER3:= $(shell for /f "delims=. tokens=1,2,3" %i in ('gcc -dumpversion') do @echo %k)
-
-# If you are using GCC, 4.3 or later by default we add the -fwrapv option.
-# See https://github.com/Perl/perl5/issues/13690
-#
-GCCWRAPV *= $(shell if "$(GCCVER1)"=="4" (if "$(GCCVER2)" geq "3" echo define) else if "$(GCCVER1)" geq "5" (echo define))
-
-.IF "$(GCCWRAPV)" == "define"
-BUILDOPT        += -fwrapv
-MINIBUILDOPT    += -fwrapv
-.ENDIF
-
-i = .i
-o = .o
-a = .a
-
-#
-# Options
-#
-
-INCLUDES       = -I.\include -I. -I..
-DEFINES                = -DWIN32
-.IF "$(WIN64)" == "define"
-DEFINES                += -DWIN64
-.ENDIF
-LOCDEFS                = -DPERLDLL -DPERL_CORE
-CXX_FLAG       = -xc++
-
-# Current releases of MinGW 5.1.4 (as of 11-Aug-2009) will fail to link
-# correctly if -lmsvcrt is specified explicitly.
-LIBC           =
-#LIBC          = -lmsvcrt
-
-# same libs as MSVC
-LIBFILES       = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \
-       -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 \
-       -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
-
-.IF "$(USE_QUADMATH)" == "define"
-LIBFILES       += -lquadmath
-.ENDIF
-
-.IF  "$(CFG)" == "Debug"
-OPTIMIZE       = -g -O2
-LINK_DBG       = -g
-DEFINES                += -DDEBUGGING
-.ELIF  "$(CFG)" == "DebugSymbols"
-OPTIMIZE       = -g -O2
-LINK_DBG       = -g
-.ELSE
-OPTIMIZE       = -s -O2
-LINK_DBG       = -s
-.ENDIF
-
-EXTRACFLAGS    =
-.IF "$(USE_CPLUSPLUS)" == "define"
-EXTRACFLAGS    += $(CXX_FLAG)
-.ENDIF
-CFLAGS         = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
-LINK_FLAGS     = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"
-OBJOUT_FLAG    = -o
-EXEOUT_FLAG    = -o
-LIBOUT_FLAG    =
-PDBOUT         =
-
-BUILDOPT       += -fno-strict-aliasing -mms-bitfields
-MINIBUILDOPT   += -fno-strict-aliasing
-
-TESTPREPGCC    = test-prep-gcc
-
-.ELSE
-
-# 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"
-# If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA
-# which is rare to execute
-.IF "$(USE_NO_REGISTRY)" != "undef"
-DELAYLOAD      = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib
-MINIDELAYLOAD  =
-.ELSE
-DELAYLOAD      = -DELAYLOAD:ws2_32.dll delayimp.lib
-#miniperl never does any registry lookups
-MINIDELAYLOAD  = -DELAYLOAD:advapi32.dll
-.ENDIF
-.ENDIF
-
-# 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
-# don't get installed too).
-EMBED_EXE_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 && \
-                 if exist $@.manifest del $@.manifest
-EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
-                 if exist $@.manifest del $@.manifest
-# This one is for perl.exe which already has an embedded manifest, so we want to
-# append to it, not replace it.
-APPEND_EXE_MANI        = if exist $@.manifest mt -nologo -manifest $@.manifest -updateresource:$@;1 && \
-                 if exist $@.manifest del $@.manifest
-
-# Most relevant compiler-specific options fall into two groups:
-# either pre-MSVC80 or MSVC80 onwards, so define a macro for this.
-.IF "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
-PREMSVC80      = define
-.ELSE
-PREMSVC80      = undef
-.ENDIF
-
-.IF "$(__ICC)" != "define"
-CC             = cl
-LINK32         = link
-.ELSE
-CC             = icl
-LINK32         = xilink
-.ENDIF
-LIB32          = $(LINK32) -lib
-RSC            = rc
-
-#
-# Options
-#
-
-INCLUDES       = -I.\include -I. -I..
-#PCHFLAGS      = -Fpc:\temp\vcmoduls.pch -YX
-DEFINES                = -DWIN32 -D_CONSOLE -DNO_STRICT
-LOCDEFS                = -DPERLDLL -DPERL_CORE
-CXX_FLAG       = -TP -EHsc
-EXTRACFLAGS    = -nologo -GF -W3
-
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
-LIBC           = ucrt.lib
-.ELSE
-LIBC           = msvcrt.lib
-.ENDIF
-
-.IF  "$(CFG)" == "Debug"
-OPTIMIZE       = -Od -Zi
-LINK_DBG       = -debug
-DEFINES                += -DDEBUGGING
-EXTRACFLAGS    += -MD
-.ELIF  "$(CFG)" == "DebugSymbols"
-OPTIMIZE       = -Od -Zi
-LINK_DBG       = -debug
-EXTRACFLAGS    += -MD
-.ELIF  "$(CFG)" == "DebugFull"
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
-LIBC           = ucrtd.lib
-.ELSE
-LIBC           = msvcrtd.lib
-.ENDIF
-OPTIMIZE       = -Od -Zi
-LINK_DBG       = -debug
-DEFINES                += -D_DEBUG -DDEBUGGING
-EXTRACFLAGS    += -MDd
-.ELSE
-# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG).
-# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
-OPTIMIZE       = -O1 -Zi -GL
-# we enable debug symbols in release builds also
-LINK_DBG       = -debug -opt:ref,icf -ltcg
-# you may want to enable this if you want COFF symbols in the executables
-# in addition to the PDB symbols.  The default Dr. Watson that ships with
-# Windows can use the the former but not latter.  The free WinDbg can be
-# installed to get better stack traces from just the PDB symbols, so we
-# avoid the bloat of COFF symbols by default.
-#LINK_DBG      += -debugtype:both
-LIB_FLAGS      = -ltcg
-EXTRACFLAGS    += -MD
-.ENDIF
-
-.IF "$(WIN64)" == "define"
-DEFINES                += -DWIN64
-OPTIMIZE       += -fp:precise
-.ENDIF
-
-# 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
-.ENDIF
-
-# Likewise for deprecated Winsock APIs in VC++ 14.0 onwards for now.
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
-DEFINES                += -D_WINSOCK_DEPRECATED_NO_WARNINGS
-.ENDIF
-
-# The Windows Server 2003 SP1 SDK compiler only defines _configthreadlocale() if
-# _MT is defined, i.e. when using /MT (the LIBCMT.lib version of the CRT), which
-# the perl build doesn't use. We therefore specify NO_THREAD_SAFE_LOCALE so that
-# perl.h doesn't set USE_THREAD_SAFE_LOCALE, which it otherwise would do since
-# _MSC_VER is 1400 for this compiler (as per MSVC80).
-.IF "$(CCTYPE)" == "SDK2003SP1"
-DEFINES                += -DNO_THREAD_SAFE_LOCALE
-.ENDIF
-
-# In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
-# 64-bit, even in 32-bit mode.  It also provides the _USE_32BIT_TIME_T
-# preprocessor option to revert back to the old functionality for
-# backward compatibility.  We define this symbol here for older 32-bit
-# compilers only (which aren't using it at all) for the sole purpose
-# of getting it into $Config{ccflags}.  That way if someone builds
-# Perl itself with e.g. VC7 but later installs an XS module using VC8
-# the time_t types will still be compatible.
-.IF "$(WIN64)" == "undef"
-.IF "$(PREMSVC80)" == "define"
-BUILDOPT       += -D_USE_32BIT_TIME_T
-.ENDIF
-.ENDIF
-
-LIBBASEFILES   = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
-       comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
-       netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib \
-       odbc32.lib odbccp32.lib comctl32.lib
-
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
-.IF "$(CFG)" == "DebugFull"
-LIBBASEFILES   += msvcrtd.lib vcruntimed.lib
-.ELSE
-LIBBASEFILES   += msvcrt.lib vcruntime.lib
-.ENDIF
-.ENDIF
-
-# Avoid __intel_new_proc_init link error for libircmt.
-# libmmd is /MD equivelent, other variants exist.
-# libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99,
-# and optimized C89 funcs
-.IF "$(__ICC)" == "define"
-LIBBASEFILES   += libircmt.lib libmmd.lib
-.ENDIF
-
-# The Windows Server 2003 SP1 SDK compiler links against MSVCRT.dll, which
-# doesn't include the buffer overrun verification code used by the /GS switch.
-# Since the code links against libraries that are compiled with /GS, this
-# "security cookie verification" code must be included via bufferoverflow.lib.
-.IF "$(CCTYPE)" == "SDK2003SP1"
-LIBBASEFILES    += bufferoverflowU.lib
-.ENDIF
-
-LIBFILES       = $(LIBBASEFILES) $(LIBC)
-
-.IF "$(__ICC)" == "define"
-EXTRACFLAGS    += -Qstd=c99
-.ENDIF
-.IF "$(USE_CPLUSPLUS)" == "define"
-EXTRACFLAGS    += $(CXX_FLAG)
-.ENDIF
-CFLAGS         = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
-               $(PCHFLAGS) $(OPTIMIZE)
-LINK_FLAGS     = -nologo -nodefaultlib $(LINK_DBG) \
-               -libpath:"$(INST_COREDIR)" \
-               -machine:$(PROCESSOR_ARCHITECTURE)
-LIB_FLAGS      += -nologo
-OBJOUT_FLAG    = -Fo
-EXEOUT_FLAG    = -Fe
-LIBOUT_FLAG    = /out:
-PDBOUT         = -Fd$*.pdb
-TESTPREPGCC    =
-
-.ENDIF
-
-CFLAGS_O       = $(CFLAGS) $(BUILDOPT)
-
-RSC_FLAGS      =
-
-# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates)
-
-# 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)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
-.IF "$(WIN64)" == "define"
-LINK_FLAGS     += -subsystem:console,"5.02"
-.ELSE
-LINK_FLAGS     += -subsystem:console,"5.01"
-.ENDIF
-
-.ELIF "$(CCTYPE)" != "GCC"
-PRIV_LINK_FLAGS        += -subsystem:console
-.ENDIF
-
-BLINK_FLAGS    = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
-
-#################### do not edit below this line #######################
-############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
-
-# Some old dmakes (including Sarathy's one at
-# https://www.cpan.org/authors/id/G/GS/GSAR/dmake-4.1pl1-win32.zip)
-# don't support logical OR (||) or logical AND (&&) in conditional
-# expressions and hence don't process this makefile correctly. Determine
-# whether this is the case so that we can give the user an error message.
-.IF 1 == 1 || 1 == 1
-NEWDMAKE = define
-.ELSE
-NEWDMAKE = undef
-.ENDIF
-
-o *= .obj
-a *= .lib
-
-LKPRE          = INPUT (
-LKPOST         = )
-
-#
-# Rules
-#
-
-.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res
-
-.c$(o):
-       $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) $<
-
-.c.i:
-       $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) -E $< >$@
-
-.y.c:
-       $(NOOP)
-
-$(o).dll:
-.IF "$(CCTYPE)" == "GCC"
-       $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES)
-       $(IMPLIB) --input-def $(*B).def --output-lib $(*B).a $@
-.ELSE
-       $(LINK32) -dll -implib:$(*B).lib -def:$(*B).def \
-           -out:$@ $(BLINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
-       $(EMBED_DLL_MANI)
-.ENDIF
-
-.rc.res:
-.IF "$(CCTYPE)" == "GCC"
-       $(RSC) --use-temp-file --include-dir=. --include-dir=.. -O COFF -D INCLUDE_MANIFEST -i $< -o $@
-.ELSE
-       $(RSC) -i.. -DINCLUDE_MANIFEST $<
-.ENDIF
-
-#
-# various targets
-
-#do not put $(MINIPERL) as a dep/prereq in a rule, instead put $(HAVEMINIPERL)
-#$(MINIPERL) is not a buildable target, use "dmake mp" if you want to just build
-#miniperl alone
-MINIPERL       = ..\miniperl.exe
-HAVEMINIPERL   = ..\lib\buildcustomize.pl
-MINIDIR                = .\mini
-PERLEXE                = ..\perl.exe
-WPERLEXE       = ..\wperl.exe
-PERLEXESTATIC  = ..\perl-static.exe
-STATICDIR      = .\static.tmp
-GLOBEXE                = ..\perlglob.exe
-CONFIGPM       = ..\lib\Config.pm
-GENUUDMAP      = ..\generate_uudmap.exe
-.IF "$(BUILD_STATIC)" == "define" || "$(ALL_STATIC)" == "define"
-PERLSTATIC     = static
-.ELSE
-PERLSTATIC     = 
-.ENDIF
-
-# Unicode data files generated by mktables
-UNIDATAFILES    = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \
-                  ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
-                  ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm            \
-                  ..\lib\unicore\mktables.lst
-
-# Directories of Unicode data files generated by mktables
-UNIDATADIR1    = ..\lib\unicore\To
-UNIDATADIR2    = ..\lib\unicore\lib
-
-PERLEXE_MANIFEST= .\perlexe.manifest
-PERLEXE_ICO    = .\perlexe.ico
-PERLEXE_RES    = .\perlexe.res
-PERLDLL_RES    =
-
-# Nominate a target which causes extensions to be re-built
-# This used to be $(PERLEXE), but at worst it is the .dll that they depend
-# on and really only the interface - i.e. the .def file used to export symbols
-# from the .dll
-PERLDEP = $(PERLIMPLIB)
-
-
-PL2BAT         = bin\pl2bat.pl
-
-UTILS          =                       \
-               ..\utils\h2ph           \
-               ..\utils\splain         \
-               ..\utils\perlbug        \
-               ..\utils\pl2pm          \
-               ..\utils\h2xs           \
-               ..\utils\perldoc        \
-               ..\utils\perlivp        \
-               ..\utils\libnetcfg      \
-               ..\utils\enc2xs         \
-               ..\utils\encguess       \
-               ..\utils\piconv         \
-               ..\utils\corelist       \
-               ..\utils\cpan           \
-               ..\utils\xsubpp         \
-               ..\utils\pod2html       \
-               ..\utils\prove          \
-               ..\utils\ptar           \
-               ..\utils\ptardiff       \
-               ..\utils\ptargrep       \
-               ..\utils\zipdetails     \
-               ..\utils\shasum         \
-               ..\utils\instmodsh      \
-               ..\utils\json_pp        \
-               ..\utils\streamzip      \
-               bin\exetype.pl          \
-               bin\runperl.pl          \
-               bin\pl2bat.pl           \
-               bin\perlglob.pl         \
-               bin\search.pl
-
-.IF "$(CCTYPE)" == "GCC"
-
-CFGSH_TMPL     = config.gc
-CFGH_TMPL      = config_H.gc
-PERLIMPLIB     = $(COREDIR)\libperl533$(a)
-PERLSTATICLIB  = ..\libperl533s$(a)
-INT64          = long long
-
-.ELSE
-
-CFGSH_TMPL     = config.vc
-CFGH_TMPL      = config_H.vc
-INT64          = __int64
-
-.ENDIF
-
-# makedef.pl must be updated if this changes, and this should normally
-# only change when there is an incompatible revision of the public API.
-PERLIMPLIB     *= $(COREDIR)\perl533$(a)
-PERLEXPLIB     *= $(COREDIR)\perl533.exp
-PERLSTATICLIB  *= ..\perl533s$(a)
-PERLDLL                = ..\perl533.dll
-PERLDLLBASE    = perl533.dll
-
-#EUMM on Win32 isn't ready for parallel make, so only allow this file to be parallel
-#$(MAKE) will contain the -P that this makefile was called with, which is bad for
-#make_ext.pl since upto jobs*jobs processes will run instead of jobs
-#also any recipie containing $(MAKE) is special cased by dmake to execute recipes
-#containing $(MAKE) when "dmake -n" is executed, which causes recursive calls
-#to dmake, which means "dmake -n" is then broken as a diagnostic tool since
-#"dmake -n" will invoke all the make_ext.pl scripts build things instead of
-#showing what to build since $(MAKE) is an arg to make_ext.pl, not an invocation
-#of the dmake process
-PLMAKE         = dmake
-
-XCOPY          = xcopy /f /r /i /d /y
-RCOPY          = xcopy /f /r /i /e /d /y
-NOOP           = @rem
-
-#first ones are arrange in compile time order for faster parallel building
-#see #123867 for details
-MICROCORE_SRC  =               \
-               ..\toke.c       \
-               ..\regcomp.c    \
-               ..\regexec.c    \
-               ..\op.c         \
-               ..\sv.c         \
-               ..\pp.c         \
-               ..\pp_ctl.c     \
-               ..\pp_sys.c     \
-               ..\pp_pack.c    \
-               ..\pp_hot.c     \
-               ..\gv.c         \
-               ..\perl.c       \
-               ..\utf8.c       \
-               ..\dump.c       \
-               ..\hv.c         \
-               ..\av.c         \
-               ..\caretx.c     \
-               ..\deb.c        \
-               ..\doio.c       \
-               ..\doop.c       \
-               ..\dquote.c     \
-               ..\globals.c    \
-               ..\mro_core.c   \
-               ..\locale.c     \
-               ..\keywords.c   \
-               ..\mathoms.c    \
-               ..\mg.c         \
-               ..\numeric.c    \
-               ..\pad.c        \
-               ..\perly.c      \
-               ..\pp_sort.c    \
-               ..\reentr.c     \
-               ..\run.c        \
-               ..\scope.c      \
-               ..\taint.c      \
-               ..\time64.c     \
-               ..\universal.c  \
-               ..\util.c
-
-EXTRACORE_SRC  += perllib.c
-
-.IF "$(PERL_MALLOC)" == "define"
-EXTRACORE_SRC  += ..\malloc.c
-.ENDIF
-
-EXTRACORE_SRC  += ..\perlio.c
-
-WIN32_SRC      =               \
-               .\win32.c       \
-               .\win32io.c     \
-               .\win32sck.c    \
-               .\win32thread.c \
-               .\fcrypt.c
-
-CORE_NOCFG_H   =               \
-               ..\av.h         \
-               ..\cop.h        \
-               ..\cv.h         \
-               ..\dosish.h     \
-               ..\embed.h      \
-               ..\form.h       \
-               ..\gv.h         \
-               ..\handy.h      \
-               ..\hv.h         \
-               ..\hv_func.h    \
-               ..\iperlsys.h   \
-               ..\mg.h         \
-               ..\nostdio.h    \
-               ..\op.h         \
-               ..\opcode.h     \
-               ..\perl.h       \
-               ..\perlapi.h    \
-               ..\perlsdio.h   \
-               ..\perly.h      \
-               ..\pp.h         \
-               ..\proto.h      \
-               ..\regcomp.h    \
-               ..\regexp.h     \
-               ..\scope.h      \
-               ..\sv.h         \
-               ..\thread.h     \
-               ..\unixish.h    \
-               ..\utf8.h       \
-               ..\util.h       \
-               ..\warnings.h   \
-               ..\XSUB.h       \
-               ..\EXTERN.h     \
-               ..\perlvars.h   \
-               ..\intrpvar.h   \
-               .\include\dirent.h      \
-               .\include\netdb.h       \
-               .\include\sys\errno2.h  \
-               .\include\sys\socket.h  \
-               .\win32.h
-
-CORE_H         = $(CORE_NOCFG_H) .\config.h ..\git_version.h
-
-UUDMAP_H       = ..\uudmap.h
-BITCOUNT_H     = ..\bitcount.h
-MG_DATA_H      = ..\mg_data.h
-GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H)
-
-HAVE_COREDIR   = .\.coreheaders
-
-MICROCORE_OBJ  = $(MICROCORE_SRC:db:+$(o))
-CORE_OBJ       = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o))
-WIN32_OBJ      = $(WIN32_SRC:db:+$(o))
-MINICORE_OBJ   = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)}
-MINIWIN32_OBJ  = $(MINIDIR)\{$(WIN32_OBJ:f)}
-MINI_OBJ       = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
-DLL_OBJ                = $(DYNALOADER)
-
-PERLDLL_OBJ    = $(CORE_OBJ)
-PERLEXE_OBJ    = perlmain$(o)
-PERLEXEST_OBJ  = perlmainst$(o)
-
-PERLDLL_OBJ    += $(WIN32_OBJ) $(DLL_OBJ)
-
-.IF "$(USE_SETARGV)" != ""
-SETARGV_OBJ    = setargv$(o)
-.ENDIF
-
-.IF "$(ALL_STATIC)" == "define"
-# some exclusions, unfortunately, until fixed:
-#  - MakeMaker isn't capable enough for SDBM_File (small bug)
-STATIC_EXT     = * !SDBM_File
-NORMALIZE_STATIC = Normalize_static
-.ELSE
-# specify static extensions here, for example:
-# (be sure to include Win32CORE to load Win32 on demand)
-#STATIC_EXT    = Win32CORE Cwd Compress/Raw/Zlib
-STATIC_EXT     = Win32CORE
-NORMALIZE_DYN  = Normalize_dyn
-.ENDIF
-
-DYNALOADER     = ..\DynaLoader$(o)
-
-# vars must be separated by "\t+~\t+", since we're using the tempfile
-# version of config_sh.pl (we were overflowing someone's buffer by
-# trying to fit them all on the command line)
-#      -- BKS 10-17-1999
-CFG_VARS       =                                       \
-               INST_TOP=$(INST_TOP)    ~       \
-               INST_VER=$(INST_VER)    ~       \
-               INST_ARCH=$(INST_ARCH)          ~       \
-               archname=$(ARCHNAME)            ~       \
-               cc=$(CC)                        ~       \
-               ld=$(LINK32)                    ~       \
-               ccflags=$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT)   ~       \
-               usecplusplus=$(USE_CPLUSPLUS)   ~       \
-               cf_email=$(EMAIL)               ~       \
-               d_mymalloc=$(PERL_MALLOC)       ~       \
-               libs=$(LIBFILES:f)              ~       \
-               incpath=$(CCINCDIR)     ~       \
-               iquadmath=$(I_QUADMATH)         ~       \
-               libperl=$(PERLIMPLIB:f)         ~       \
-               libpth=$(CCLIBDIR);$(EXTRALIBDIRS)      ~       \
-               libc=$(LIBC)                    ~       \
-               make=$(PLMAKE)                  ~       \
-               _o=$(o)                         ~       \
-               obj_ext=$(o)                    ~       \
-               _a=$(a)                         ~       \
-               lib_ext=$(a)                    ~       \
-               static_ext=$(STATIC_EXT)        ~       \
-               usethreads=$(USE_ITHREADS)      ~       \
-               useithreads=$(USE_ITHREADS)     ~       \
-               usemultiplicity=$(USE_MULTI)    ~       \
-               use64bitint=$(USE_64_BIT_INT)   ~       \
-               uselongdouble=$(USE_LONG_DOUBLE)        ~       \
-               usequadmath=$(USE_QUADMATH)     ~       \
-               usesitecustomize=$(USE_SITECUST)        ~       \
-               default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)    ~       \
-               LINK_FLAGS=$(LINK_FLAGS)        ~       \
-               optimize=$(OPTIMIZE)    ~       \
-               ARCHPREFIX=$(ARCHPREFIX)        ~       \
-               WIN64=$(WIN64)
-
-#
-# Top targets
-#
-
-all : CHECKDMAKE rebasePE Extensions_nonxs $(PERLSTATIC)
-
-info :
-.IF "$(CCTYPE)" == "GCC"
-       @echo # CCTYPE=$(CCTYPE)&& \
-       echo # CC=$(CC)&& \
-       echo # GCCVER=$(GCCVER1).$(GCCVER2).$(GCCVER3)&& \
-       echo # GCCTARGET=$(GCCTARGET)&& \
-       echo # GCCCROSS=$(GCCCROSS)&& \
-       echo # WIN64=$(WIN64)&& \
-       echo # ARCHITECTURE=$(ARCHITECTURE)&& \
-       echo # ARCHNAME=$(ARCHNAME)&& \
-       echo # MAKE=$(PLMAKE)
-.ELSE
-       @echo # CCTYPE=$(CCTYPE)&& \
-       echo # WIN64=$(WIN64)&& \
-       echo # ARCHITECTURE=$(ARCHITECTURE)&& \
-       echo # ARCHNAME=$(ARCHNAME)&& \
-       echo # MAKE=$(PLMAKE)
-.ENDIF
-.IF "$(CCTYPE)" == ""
-       @echo Unable to detect gcc and/or architecture!
-       @exit 1
-.ENDIF
-
-
-..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
-
-..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
-
-reonly : ..\regnodes.h $(UNIDATAFILES) Extensions_reonly
-
-static: $(PERLEXESTATIC)
-
-#----------------------------------------------------------------
-
-CHECKDMAKE :
-.IF "$(NEWDMAKE)" == "define"
-       $(NOOP)
-.ELSE
-       @echo Your dmake doesn't support ^|^| or ^&^& in conditional expressions.
-       @echo Please get the latest dmake from https://metacpan.org/release/dmake
-       @exit 1
-.ENDIF
-
-$(GLOBEXE) : perlglob.c
-.IF "$(CCTYPE)" == "GCC"
-       $(LINK32) $(EXTRACFLAGS) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
-.ELSE
-       $(CC) $(EXTRACFLAGS) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
-       setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI)
-.ENDIF
-
-..\git_version.h : $(HAVEMINIPERL) ..\make_patchnum.pl
-       $(MINIPERL) -I..\lib ..\make_patchnum.pl
-
-# make sure that we recompile perl.c if the git version changes
-..\perl$(o) : ..\git_version.h
-
-..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(HAVEMINIPERL)
-       $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file \
-           $(mktmp $(CFG_VARS)) $(CFGSH_TMPL) > ..\config.sh
-
-# This target is for when changes to the main config.sh happen.
-# Edit config.gc, then make perl using GCC in a minimal configuration (i.e.
-# with MULTI, ITHREADS, IMP_SYS and LARGE_FILES off), then make
-# this target to regenerate config_H.gc.
-regen_config_h:
-       $(MINIPERL) -I..\lib config_sh.PL --prebuilt --cfgsh-option-file $(mktmp $(CFG_VARS)) \
-           $(CFGSH_TMPL) > ..\config.sh
-       $(MINIPERL) -I..\lib ..\configpm --chdir=..
-       -del /f $(CFGH_TMPL)
-       -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
-       rename config.h $(CFGH_TMPL)
-
-$(CONFIGPM) .\config.h .UPDATEALL: ..\config.sh config_h.PL
-       $(MINIPERL) -I..\lib ..\configpm --chdir=..
-       -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
-
-# See the comment in Makefile.SH explaining this seemingly cranky ordering
-..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl
-.IF "$(CCTYPE)" == "GCC"
-       $(LINK32) -v -mconsole -o $(MINIPERL) $(BLINK_FLAGS) \
-           $(mktmp $(LKPRE) $(MINI_OBJ) $(LIBFILES) $(LKPOST))
-.ELSE
-       $(LINK32) -out:$(MINIPERL) $(BLINK_FLAGS) \
-           @$(mktmp $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ))
-       $(EMBED_EXE_MANI:s/$@/$(MINIPERL)/)
-.ENDIF
-       $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl ..
-
-#convinence target, get a working miniperl
-mp : $(CONFIGPM)
-
-$(MINIDIR)\.exists : $(CFGH_TMPL)
-       if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
-#
-# Copy the template config.h and set configurables at the end of it
-# as per the options chosen and compiler used.
-# Note: This config.h is only used to build miniperl.exe anyway, but
-# it's as well to have its options correct to be sure that it builds
-# and so that it's "-V" options are correct for use by makedef.pl. The
-# real config.h used to build perl.exe is generated from the top-level
-# config_h.SH by config_h.PL (run by miniperl.exe).
-#
-# MINIDIR generates config.h so miniperl.exe is not rebuilt when the 2nd
-# config.h is generated in CONFIGPM target, see also the comments for $(MINI_OBJ).
-       copy $(CFGH_TMPL) config.h
-       @(echo.&& \
-       echo #ifndef _config_h_footer_&& \
-       echo #define _config_h_footer_&& \
-       echo #undef PTRSIZE&& \
-       echo #undef SSize_t&& \
-       echo #undef HAS_ATOLL&& \
-       echo #undef HAS_STRTOLL&& \
-       echo #undef HAS_STRTOULL&& \
-       echo #undef Size_t_size&& \
-       echo #undef IVTYPE&& \
-       echo #undef UVTYPE&& \
-       echo #undef IVSIZE&& \
-       echo #undef UVSIZE&& \
-       echo #undef NV_PRESERVES_UV&& \
-       echo #undef NV_PRESERVES_UV_BITS&& \
-       echo #undef IVdf&& \
-       echo #undef UVuf&& \
-       echo #undef UVof&& \
-       echo #undef UVxf&& \
-       echo #undef UVXf&& \
-       echo #undef USE_64_BIT_INT&& \
-       echo #undef Gconvert&& \
-       echo #undef HAS_FREXPL&& \
-       echo #undef HAS_ISNANL&& \
-       echo #undef HAS_MODFL&& \
-       echo #undef HAS_MODFL_PROTO&& \
-       echo #undef HAS_SQRTL&& \
-       echo #undef HAS_STRTOLD&& \
-       echo #undef I_QUADMATH&& \
-       echo #undef PERL_PRIfldbl&& \
-       echo #undef PERL_PRIgldbl&& \
-       echo #undef PERL_PRIeldbl&& \
-       echo #undef PERL_SCNfldbl&& \
-       echo #undef NVTYPE&& \
-       echo #undef NVSIZE&& \
-       echo #undef LONG_DOUBLESIZE&& \
-       echo #undef NV_OVERFLOWS_INTEGERS_AT&& \
-       echo #undef NVef&& \
-       echo #undef NVff&& \
-       echo #undef NVgf&& \
-       echo #undef USE_LONG_DOUBLE&& \
-       echo #undef USE_QUADMATH&& \
-       echo #undef USE_CPLUSPLUS)>> config.h
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
-       @(echo #undef FILE_ptr&& \
-       echo #undef FILE_cnt&& \
-       echo #undef FILE_base&& \
-       echo #undef FILE_bufsiz&& \
-       echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
-       echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
-       echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
-       echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
-       echo #define I_STDBOOL)>> config.h
-.ENDIF
-.IF "$(WIN64)"=="define"
-.IF "$(CCTYPE)" == "GCC"
-       @(echo #define LONG_DOUBLESIZE ^16)>> config.h
-.ELSE
-       @(echo #define LONG_DOUBLESIZE ^8)>> config.h
-.ENDIF
-       @(echo #define PTRSIZE ^8&& \
-       echo #define SSize_t $(INT64)&& \
-       echo #define HAS_ATOLL&& \
-       echo #define HAS_STRTOLL&& \
-       echo #define HAS_STRTOULL&& \
-       echo #define Size_t_size ^8)>> config.h
-.ELSE
-.IF "$(CCTYPE)" == "GCC"
-       @(echo #define LONG_DOUBLESIZE ^12)>> config.h
-.ELSE
-       @(echo #define LONG_DOUBLESIZE ^8)>> config.h
-.ENDIF
-       @(echo #define PTRSIZE ^4&& \
-       echo #define SSize_t int&& \
-       echo #undef HAS_ATOLL&& \
-       echo #undef HAS_STRTOLL&& \
-       echo #undef HAS_STRTOULL&& \
-       echo #define Size_t_size ^4)>> config.h
-.ENDIF
-.IF "$(USE_64_BIT_INT)"=="define"
-       @(echo #define IVTYPE $(INT64)&& \
-       echo #define UVTYPE unsigned $(INT64)&& \
-       echo #define IVSIZE ^8&& \
-       echo #define UVSIZE ^8)>> config.h
-.IF "$(USE_LONG_DOUBLE)"=="define"
-       @(echo #define NV_PRESERVES_UV&& \
-       echo #define NV_PRESERVES_UV_BITS 64)>> config.h
-.ELSE
-.IF "$(USE_QUADMATH)"=="define"
-       @(echo #define NV_PRESERVES_UV&& \
-       echo #define NV_PRESERVES_UV_BITS 64)>> config.h
-.ELSE
-       @(echo #undef NV_PRESERVES_UV&& \
-       echo #define NV_PRESERVES_UV_BITS 53)>> config.h
-.ENDIF
-.ENDIF
-       @(echo #define IVdf "I64d"&& \
-       echo #define UVuf "I64u"&& \
-       echo #define UVof "I64o"&& \
-       echo #define UVxf "I64x"&& \
-       echo #define UVXf "I64X"&& \
-       echo #define USE_64_BIT_INT)>> config.h
-.ELSE
-       @(echo #define IVTYPE long&& \
-       echo #define UVTYPE unsigned long&& \
-       echo #define IVSIZE ^4&& \
-       echo #define UVSIZE ^4&& \
-       echo #define NV_PRESERVES_UV&& \
-       echo #define NV_PRESERVES_UV_BITS 32&& \
-       echo #define IVdf "ld"&& \
-       echo #define UVuf "lu"&& \
-       echo #define UVof "lo"&& \
-       echo #define UVxf "lx"&& \
-       echo #define UVXf "lX"&& \
-       echo #undef USE_64_BIT_INT)>> config.h
-.ENDIF
-.IF "$(USE_LONG_DOUBLE)"=="define"
-       @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%.*""Lg",^(n^),^(x^)^)&& \
-       echo #define HAS_FREXPL&& \
-       echo #define HAS_ISNANL&& \
-       echo #define HAS_MODFL&& \
-       echo #define HAS_MODFL_PROTO&& \
-       echo #define HAS_SQRTL&& \
-       echo #define HAS_STRTOLD&& \
-       echo #define PERL_PRIfldbl "Lf"&& \
-       echo #define PERL_PRIgldbl "Lg"&& \
-       echo #define PERL_PRIeldbl "Le"&& \
-       echo #define PERL_SCNfldbl "Lf"&& \
-       echo #define NVTYPE long double&& \
-       echo #define NVSIZE LONG_DOUBLESIZE&& \
-       echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0&& \
-       echo #define NVef "Le"&& \
-       echo #define NVff "Lf"&& \
-       echo #define NVgf "Lg"&& \
-       echo #undef I_QUADMATH&& \
-       echo #undef USE_QUADMATH&& \
-       echo #define USE_LONG_DOUBLE)>> config.h
-.ELSE
-.IF "$(USE_QUADMATH)"=="define"
-       @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \
-       echo #define HAS_FREXPL&& \
-       echo #define HAS_ISNANL&& \
-       echo #define HAS_MODFL&& \
-       echo #define HAS_MODFL_PROTO&& \
-       echo #define HAS_SQRTL&& \
-       echo #define HAS_STRTOLD&& \
-       echo #define PERL_PRIfldbl "Lf"&& \
-       echo #define PERL_PRIgldbl "Lg"&& \
-       echo #define PERL_PRIeldbl "Le"&& \
-       echo #define PERL_SCNfldbl "Lf"&& \
-       echo #define NVTYPE __float128&& \
-       echo #define NVSIZE 16&& \
-       echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0&& \
-       echo #define NVef "Qe"&& \
-       echo #define NVff "Qf"&& \
-       echo #define NVgf "Qg"&& \
-       echo #undef USE_LONG_DOUBLE&& \
-       echo #define I_QUADMATH&& \
-       echo #define USE_QUADMATH)>> config.h
-.ELSE
-       @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%.*g",^(n^),^(x^)^)&& \
-       echo #undef HAS_FREXPL&& \
-       echo #undef HAS_ISNANL&& \
-       echo #undef HAS_MODFL&& \
-       echo #undef HAS_MODFL_PROTO&& \
-       echo #undef HAS_SQRTL&& \
-       echo #undef HAS_STRTOLD&& \
-       echo #undef PERL_PRIfldbl&& \
-       echo #undef PERL_PRIgldbl&& \
-       echo #undef PERL_PRIeldbl&& \
-       echo #undef PERL_SCNfldbl&& \
-       echo #define NVTYPE double&& \
-       echo #define NVSIZE ^8&& \
-       echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0&& \
-       echo #define NVef "e"&& \
-       echo #define NVff "f"&& \
-       echo #define NVgf "g"&& \
-       echo #undef I_QUADMATH&& \
-       echo #undef USE_QUADMATH&& \
-       echo #undef USE_LONG_DOUBLE)>> config.h
-.ENDIF
-.ENDIF
-.IF "$(USE_CPLUSPLUS)"=="define"
-       @(echo #define USE_CPLUSPLUS&& \
-       echo #endif)>> config.h
-.ELSE
-       @(echo #undef USE_CPLUSPLUS&& \
-       echo #endif)>> config.h
-.ENDIF
-#separate line since this is sentinal that this target is done
-       @rem. > $(MINIDIR)\.exists
-
-$(MINICORE_OBJ) : $(CORE_NOCFG_H)
-       $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) ..\$(*B).c
-
-$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
-       $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $(*B).c
-
-# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
-# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s
-# unless the .IF is true), so instead we use a .ELSE with the default.
-# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
-
-perllib$(o)    : perllib.c perllibst.h .\perlhost.h .\vdir.h .\vmem.h
-.IF "$(USE_IMP_SYS)" == "define"
-       $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c
-.ELSE
-       $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c
-.ENDIF
-
-# 1. we don't want to rebuild miniperl.exe when config.h changes
-# 2. we don't want to rebuild miniperl.exe with non-default config.h
-# 3. we can't have miniperl.exe depend on git_version.h, as miniperl creates it
-$(MINI_OBJ)    : $(MINIDIR)\.exists $(CORE_NOCFG_H)
-
-$(WIN32_OBJ)   : $(CORE_H)
-
-$(CORE_OBJ)    : $(CORE_H)
-
-$(DLL_OBJ)     : $(CORE_H)
-
-
-perllibst.h : $(HAVEMINIPERL) $(CONFIGPM) create_perllibst_h.pl
-       $(MINIPERL) -I..\lib create_perllibst_h.pl
-
-perldll.def : $(HAVEMINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl
-       $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
-       $(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def
-
-$(PERLEXPLIB) $(PERLIMPLIB) .UPDATEALL : perldll.def
-.IF "$(CCTYPE)" == "GCC"
-       $(IMPLIB) -k -d perldll.def -D $(PERLDLLBASE) -l $(PERLIMPLIB) -e $(PERLEXPLIB)
-.ELSE #VC family
-       lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB)
-.ENDIF
-
-$(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
-.IF "$(CCTYPE)" == "GCC"
-       $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \
-          $(PERLDLL_OBJ) $(shell @type Extensions_static) $(LIBFILES) $(PERLEXPLIB)
-.ELSE
-       $(LINK32) -dll -out:$@ $(BLINK_FLAGS) \
-           @Extensions_static \
-           @$(mktmp $(DELAYLOAD) $(LIBFILES) \
-               $(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB))
-       $(EMBED_DLL_MANI)
-.ENDIF
-
-$(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static
-.IF "$(CCTYPE)" == "GCC"
-       $(LIB32) $(LIB_FLAGS) $@ $(PERLDLL_OBJ)
-       if exist $(STATICDIR) rmdir /s /q $(STATICDIR)
-       for %i in ($(shell @type Extensions_static)) do \
-               @mkdir $(STATICDIR) && cd $(STATICDIR) && \
-               $(ARCHPREFIX)ar x ..\%i && \
-               $(ARCHPREFIX)ar q ..\$@ *$(o) && \
-               cd .. && rmdir /s /q $(STATICDIR)
-.ELSE
-       $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static \
-           @$(mktmp $(PERLDLL_OBJ))
-.ENDIF
-       $(XCOPY) $(PERLSTATICLIB) $(COREDIR)\$(NULL)
-
-$(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
-
-$(MINIDIR)\globals$(o) : $(GENERATED_HEADERS)
-
-$(GENUUDMAP) $(GENERATED_HEADERS) .UPDATEALL : ..\mg_raw.h
-.IF "$(CCTYPE)" == "GCC"
-       $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \
-       $(BLINK_FLAGS) -x $(mktmp $(LKPRE) $(LIBFILES) $(LKPOST))
-.ELSE
-       $(CC) $(CFLAGS_O) $(PDBOUT) -Fe..\generate_uudmap.exe ..\generate_uudmap.c @$(mktmp -link $(LIBFILES)) -link $(BLINK_FLAGS)
-       $(EMBED_EXE_MANI:s/$@/..\generate_uudmap.exe/)
-.ENDIF
-       $(GENUUDMAP) $(GENERATED_HEADERS)
-
-MakePPPort : $(HAVEMINIPERL) $(CONFIGPM)
-       $(MINIPERL) -I..\lib ..\mkppport
-
-# also known as $(HAVE_COREDIR)
-.\.coreheaders : $(CORE_H)
-       $(XCOPY) *.h $(COREDIR)\*.* && $(RCOPY) include $(COREDIR)\*.* && $(XCOPY) ..\*.h $(COREDIR)\*.*
-       rem. > $@
-
-perlmain$(o) : runperl.c $(CONFIGPM)
-       $(CC) $(CFLAGS_O:s,-DPERLDLL,-UPERLDLL,) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
-
-perlmainst$(o) : runperl.c $(CONFIGPM)
-       $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
-
-$(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB)
-.IF "$(CCTYPE)" == "GCC"
-       $(LINK32) -mconsole -o $@ $(BLINK_FLAGS)  \
-           $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES)
-.ELSE
-       $(LINK32) -out:$@ $(BLINK_FLAGS) \
-           $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ)
-       $(APPEND_EXE_MANI)
-.ENDIF
-       copy $(PERLEXE) $(WPERLEXE)
-       $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
-
-$(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
-.IF "$(CCTYPE)" == "GCC"
-       $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
-           $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES)
-.ELSE
-       $(LINK32) -out:$@ $(BLINK_FLAGS) \
-           $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ)
-       $(APPEND_EXE_MANI)
-.ENDIF
-
-#-------------------------------------------------------------------------------
-# There's no direct way to mark a dependency on
-# DynaLoader.pm, so this will have to do
-
-#most of deps of this target are in DYNALOADER and therefore omitted here
-Extensions : $(PERLDEP) $(DYNALOADER) Extension_lib $(GLOBEXE) MakePPPort
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic !Unicode/Normalize
-
-Normalize_static : $(CONFIGPM) $(GLOBEXE) $(HAVE_COREDIR) $(UNIDATAFILES)
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static +Unicode/Normalize
-
-Normalize_dyn : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES)
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +Unicode/Normalize
-
-Extensions_reonly : $(PERLDEP) $(DYNALOADER)
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
-
-Exts_static_general : ..\make_ext.pl $(CONFIGPM) Extension_lib $(GLOBEXE) $(HAVE_COREDIR) MakePPPort
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static !Unicode/Normalize
-
-Extensions_static : list_static_libs.pl Exts_static_general $(NORMALIZE_STATIC)
-       $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
-
-Extensions_nonxs : ..\make_ext.pl ..\pod\perlfunc.pod $(CONFIGPM) $(GLOBEXE)
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs !libs
-
-Extension_lib : ..\make_ext.pl $(CONFIGPM)
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) lib
-
-#lib must be built, it can't be buildcustomize.pl-ed, and is required for XS building
-$(DYNALOADER) : ..\make_ext.pl $(CONFIGPM) $(HAVE_COREDIR)
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(EXTDIR) --dir=$(DISTDIR) --dynaloader
-
-Extensions_clean :
-       -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
-
-Extensions_realclean :
-       -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean
-
-# all PE files need to be built by the time this target runs, PP files can still
-# be running in parallel like UNIDATAFILES, this target a placeholder for the
-# future
-.IF "$(PERLSTATIC)"=="static"
-rebasePE : Extensions $(PERLDLL) $(PERLEXE) $(PERLEXESTATIC)
-.ELSE
-rebasePE : Extensions $(PERLDLL) $(NORMALIZE_DYN) $(PERLEXE)
-.ENDIF
-       $(NOOP)
-
-#-------------------------------------------------------------------------------
-
-
-doc: $(PERLEXE) $(PERLDLL) ..\pod\perltoc.pod
-       $(PERLEXE) ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \
-           --podpath=pod:lib:utils --htmlroot="file://$(INST_HTML:s,:,|,)"\
-           --recurse
-
-..\utils\Makefile: $(CONFIGPM) ..\utils\Makefile.PL
-       $(MINIPERL) -I..\lib ..\utils\Makefile.PL ..
-
-# Note that this next section is parsed (and regenerated) by pod/buildtoc
-# so please check that script before making structural changes here
-utils: $(HAVEMINIPERL) ..\utils\Makefile
-       cd ..\utils && $(PLMAKE) PERL=$(MINIPERL)
-       copy ..\README.aix      ..\pod\perlaix.pod
-       copy ..\README.amiga    ..\pod\perlamiga.pod
-       copy ..\README.android  ..\pod\perlandroid.pod
-       copy ..\README.bs2000   ..\pod\perlbs2000.pod
-       copy ..\README.cn       ..\pod\perlcn.pod
-       copy ..\README.cygwin   ..\pod\perlcygwin.pod
-       copy ..\README.dos      ..\pod\perldos.pod
-       copy ..\README.freebsd  ..\pod\perlfreebsd.pod
-       copy ..\README.haiku    ..\pod\perlhaiku.pod
-       copy ..\README.hpux     ..\pod\perlhpux.pod
-       copy ..\README.hurd     ..\pod\perlhurd.pod
-       copy ..\README.irix     ..\pod\perlirix.pod
-       copy ..\README.jp       ..\pod\perljp.pod
-       copy ..\README.ko       ..\pod\perlko.pod
-       copy ..\README.linux    ..\pod\perllinux.pod
-       copy ..\README.macos    ..\pod\perlmacos.pod
-       copy ..\README.macosx   ..\pod\perlmacosx.pod
-       copy ..\README.netware  ..\pod\perlnetware.pod
-       copy ..\README.openbsd  ..\pod\perlopenbsd.pod
-       copy ..\README.os2      ..\pod\perlos2.pod
-       copy ..\README.os390    ..\pod\perlos390.pod
-       copy ..\README.os400    ..\pod\perlos400.pod
-       copy ..\README.plan9    ..\pod\perlplan9.pod
-       copy ..\README.qnx      ..\pod\perlqnx.pod
-       copy ..\README.riscos   ..\pod\perlriscos.pod
-       copy ..\README.solaris  ..\pod\perlsolaris.pod
-       copy ..\README.synology ..\pod\perlsynology.pod
-       copy ..\README.tru64    ..\pod\perltru64.pod
-       copy ..\README.tw       ..\pod\perltw.pod
-       copy ..\README.vos      ..\pod\perlvos.pod
-       copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5336delta.pod
-       $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
-       $(MINIPERL) -I..\lib ..\autodoc.pl ..
-       $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
-
-..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs $(NORMALIZE_DYN) utils
-       $(PERLEXE) -f ..\pod\buildtoc -q
-
-# Note that the pod cleanup in this next section is parsed (and regenerated
-# by pod/buildtoc so please check that script before making changes here
-
-distclean: realclean
-       -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
-               $(PERLIMPLIB) ..\miniperl$(a) $(PERLEXESTATIC) $(PERLSTATICLIB)
-       -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
-       -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm
-       -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm
-       -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
-       -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm
-       -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
-       -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
-       -del /f $(LIBDIR)\File\Glob.pm
-       -del /f $(LIBDIR)\Sys\Hostname.pm
-       -del /f $(LIBDIR)\Time\HiRes.pm
-       -del /f $(LIBDIR)\Unicode\Normalize.pm
-       -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm
-       -del /f $(LIBDIR)\Storable.pm
-       -del /f $(LIBDIR)\Win32.pm
-       -del /f $(LIBDIR)\Win32CORE.pm
-       -del /f $(LIBDIR)\Win32API\File.pm
-       -del /f $(LIBDIR)\Win32API\File\cFile.pc
-       -del /f $(LIBDIR)\buildcustomize.pl
-       -del /f $(DISTDIR)\XSLoader\XSLoader.pm
-       -del /f *.def *.map
-       -if exist $(LIBDIR)\Amiga rmdir /s /q $(LIBDIR)\Amiga
-       -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App
-       -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive
-       -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute
-       -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie
-       -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp
-       -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
-       -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl
-       -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN
-       -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
-       -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel
-       -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest
-       -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode
-       -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding
-       -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter
-       -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder
-       -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command
-       -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant
-       -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist
-       -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker
-       -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS
-       -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps
-       -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec
-       -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter
-       -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash
-       -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP
-       -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N
-       -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc
-       -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
-       -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC
-       -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON
-       -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List
-       -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale
-       -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math
-       -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize
-       -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
-       -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
-       -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
-       -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
-       -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
-       -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl
-       -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO
-       -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc
-       -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple
-       -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text
-       -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar
-       -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search
-       -if exist $(LIBDIR)\Sub rmdir /s /q $(LIBDIR)\Sub
-       -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys
-       -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP
-       -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term
-       -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test
-       -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test2
-       -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text
-       -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread
-       -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads
-       -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash
-       -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate
-       -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale
-       -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version
-       -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS
-       -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 \
-           perl5336delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
-           perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
-           perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
-           perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
-           perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
-           perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
-           perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
-           perlsolaris.pod perlsynology.pod perltoc.pod perltru64.pod \
-           perltw.pod perluniprops.pod perlvos.pod perlwin32.pod
-       -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
-           perldoc perlivp libnetcfg enc2xs encguess piconv cpan streamzip *.bat \
-           xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
-       -del /f ..\config.sh perlmain.c dlutils.c config.h.new \
-           perlmainst.c
-       -del /f $(CONFIGPM)
-       -del /f ..\lib\Config_git.pl
-       -del /f bin\*.bat
-       -del /f perllibst.h
-       -del /f $(PERLEXE_RES) perl.base
-       -cd .. && del /s *$(a) *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib ppport.h
-       -cd $(EXTDIR) && del /s *.def Makefile Makefile.old
-       -cd $(DISTDIR) && del /s *.def Makefile Makefile.old
-       -cd $(CPANDIR) && del /s *.def Makefile Makefile.old
-       -del /s ..\utils\Makefile
-       -if exist $(AUTODIR) rmdir /s /q $(AUTODIR)
-       -if exist $(COREDIR) rmdir /s /q $(COREDIR)
-       -if exist pod2htmd.tmp del pod2htmd.tmp
-       -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR)
-       -del /f ..\t\test_state
-
-install : all installbare installhtml
-
-installbare : utils ..\pod\perltoc.pod
-       $(PERLEXE) ..\installperl
-       if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
-       if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\*.*
-       $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
-       if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\*.*
-       $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
-
-installhtml : doc
-       $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\*.*
-
-inst_lib : $(CONFIGPM)
-       $(RCOPY) ..\lib $(INST_LIB)\*.*
-
-$(UNIDATAFILES) ..\pod\perluniprops.pod .UPDATEALL : ..\lib\unicore\mktables $(CONFIGPM)
-       $(MINIPERL) -I..\lib ..\lib\unicore\mktables -C ..\lib\unicore -P ..\pod -maketest -makelist -p
-
-minitest : .\config.h $(HAVEMINIPERL) ..\git_version.h $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) $(TESTPREPGCC)
-       $(XCOPY) $(MINIPERL) ..\t\$(NULL)
-       if exist ..\t\perl.exe del /f ..\t\perl.exe
-       rename ..\t\miniperl.exe perl.exe
-       $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
-# Note this perl.exe is miniperl
-       cd ..\t && perl.exe TEST base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t opbasic/*.t op/*.t uni/*.t perf/*.t pragma/*.t
-
-test-prep : all utils ..\pod\perltoc.pod $(TESTPREPGCC)
-       $(XCOPY) $(PERLEXE) ..\t\$(NULL) && $(XCOPY) $(PERLDLL) ..\t\$(NULL) \
-       && $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
-
-# If building with gcc versions 4.x.x or greater, then
-# the GCC helper DLL will also need copied to the test directory.
-# The name of the dll can change, depending upon which vendor has supplied
-# your compiler, and upon the values of "x".
-# libstdc++-6.dll is copied if it exists as it, too, may then be needed.
-# Without this copying, the op/taint.t test script will fail.
-
-.IF "$(CCTYPE)" == "GCC"
-
-test-prep-gcc :
-       if exist $(CCDLLDIR)\libgcc_s_seh-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_seh-1.dll ..\t\$(NULL)
-       if exist $(CCDLLDIR)\libgcc_s_sjlj-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_sjlj-1.dll ..\t\$(NULL)
-       if exist $(CCDLLDIR)\libgcc_s_dw2-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_dw2-1.dll ..\t\$(NULL)
-       if exist $(CCDLLDIR)\libstdc++-6.dll $(XCOPY) $(CCDLLDIR)\libstdc++-6.dll ..\t\$(NULL)
-       if exist $(CCDLLDIR)\libwinpthread-1.dll $(XCOPY) $(CCDLLDIR)\libwinpthread-1.dll ..\t\$(NULL)
-       if exist $(CCDLLDIR)\libquadmath-0.dll $(XCOPY) $(CCDLLDIR)\libquadmath-0.dll ..\t\$(NULL)
-
-.ENDIF
-
-test : test-prep
-       set PERL_STATIC_EXT=$(STATIC_EXT) && \
-           cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
-
-test_porting : test-prep
-       set PERL_STATIC_EXT=$(STATIC_EXT) && \
-           cd ..\t && perl.exe harness $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t
-
-test-reonly : reonly utils
-       $(XCOPY) $(PERLEXE) ..\t\$(NULL)
-       $(XCOPY) $(PERLDLL) ..\t\$(NULL)
-       $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
-       cd ..\t && perl.exe harness $(OPT) -re \bpat\\/ $(EXTRA)
-
-regen :
-       cd .. && regen.pl
-
-test-notty : test-prep
-       set PERL_STATIC_EXT=$(STATIC_EXT) && \
-           set PERL_SKIP_TTY_TEST=1 && \
-           cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
-
-_test :
-       $(XCOPY) $(PERLEXE) ..\t\$(NULL)
-       $(XCOPY) $(PERLDLL) ..\t\$(NULL)
-       $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
-       set PERL_STATIC_EXT=$(STATIC_EXT) && \
-           cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
-
-_clean :
-       -@erase miniperlmain$(o)
-       -@erase $(MINIPERL)
-       -@erase perlglob$(o)
-       -@erase perlmain$(o)
-       -@erase perlmainst$(o)
-       -@erase /f config.h
-       -@erase /f ..\git_version.h
-       -@erase $(GLOBEXE)
-       -@erase $(PERLEXE)
-       -@erase $(WPERLEXE)
-       -@erase $(PERLEXESTATIC)
-       -@erase $(PERLSTATICLIB)
-       -@erase $(PERLDLL)
-       -@erase $(CORE_OBJ)
-       -@erase $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS)
-       -@erase .coreheaders
-       -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
-       -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1)
-       -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2)
-       -@erase $(UNIDATAFILES)
-       -@erase $(WIN32_OBJ)
-       -@erase $(DLL_OBJ)
-       -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res
-       -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
-       -@erase *.ilk
-       -@erase *.pdb ..\*.pdb
-       -@erase Extensions_static
-
-clean : Extensions_clean _clean
-
-realclean : Extensions_realclean _clean
-
-# Handy way to run perlbug -ok without having to install and run the
-# installed perlbug. We don't re-run the tests here - we trust the user.
-# Please *don't* use this unless all tests pass.
-# If you want to report test failures, use "dmake nok" instead.
-ok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
-       $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)"
-
-okfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
-       $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
-
-nok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
-       $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)"
-
-nokfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
-       $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok
-
index 1e73295..7133f23 100644 (file)
@@ -63,6 +63,7 @@ POD = perl.pod        \
        perl5302delta.pod       \
        perl5303delta.pod       \
        perl5320delta.pod       \
+       perl5321delta.pod       \
        perl5330delta.pod       \
        perl5331delta.pod       \
        perl5332delta.pod       \
@@ -70,6 +71,7 @@ POD = perl.pod        \
        perl5334delta.pod       \
        perl5335delta.pod       \
        perl5336delta.pod       \
+       perl5337delta.pod       \
        perl561delta.pod        \
        perl56delta.pod \
        perl581delta.pod        \
@@ -231,6 +233,7 @@ MAN = perl.man      \
        perl5302delta.man       \
        perl5303delta.man       \
        perl5320delta.man       \
+       perl5321delta.man       \
        perl5330delta.man       \
        perl5331delta.man       \
        perl5332delta.man       \
@@ -238,6 +241,7 @@ MAN = perl.man      \
        perl5334delta.man       \
        perl5335delta.man       \
        perl5336delta.man       \
+       perl5337delta.man       \
        perl561delta.man        \
        perl56delta.man \
        perl581delta.man        \
@@ -399,6 +403,7 @@ HTML = perl.html    \
        perl5302delta.html      \
        perl5303delta.html      \
        perl5320delta.html      \
+       perl5321delta.html      \
        perl5330delta.html      \
        perl5331delta.html      \
        perl5332delta.html      \
@@ -406,6 +411,7 @@ HTML = perl.html    \
        perl5334delta.html      \
        perl5335delta.html      \
        perl5336delta.html      \
+       perl5337delta.html      \
        perl561delta.html       \
        perl56delta.html        \
        perl581delta.html       \
@@ -567,6 +573,7 @@ TEX = perl.tex      \
        perl5302delta.tex       \
        perl5303delta.tex       \
        perl5320delta.tex       \
+       perl5321delta.tex       \
        perl5330delta.tex       \
        perl5331delta.tex       \
        perl5332delta.tex       \
@@ -574,6 +581,7 @@ TEX = perl.tex      \
        perl5334delta.tex       \
        perl5335delta.tex       \
        perl5336delta.tex       \
+       perl5337delta.tex       \
        perl561delta.tex        \
        perl56delta.tex \
        perl581delta.tex        \
index cdd5685..7163a58 100644 (file)
@@ -1160,7 +1160,9 @@ chown(const char *path, uid_t owner, gid_t group)
  * XXX this needs strengthening  (for PerlIO)
  *   -- BKS, 11-11-200
 */
-#if !defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 4
+#if((!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 4) && \
+    (!defined(__MINGW32_MAJOR_VERSION) || __MINGW32_MAJOR_VERSION < 3 || \
+     (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION < 21)))
 int mkstemp(const char *path)
 {
     dTHX;
index 2325d0e..6d5e186 100644 (file)
@@ -418,7 +418,9 @@ extern  void        *sbrk(ptrdiff_t need);
 #endif
 extern char *  getlogin(void);
 extern int     chown(const char *p, uid_t o, gid_t g);
-#if !defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 4
+#if((!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 4) && \
+    (!defined(__MINGW32_MAJOR_VERSION) || __MINGW32_MAJOR_VERSION < 3 || \
+     (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION < 21)))
 extern  int    mkstemp(const char *path);
 #endif
 #endif