texlive[62701] Master/tlpkg/tlperl: New tlperl 5.34

commits+siepo at tug.org commits+siepo at tug.org
Mon Mar 14 11:08:51 CET 2022


Revision: 62701
          http://tug.org/svn/texlive?view=revision&revision=62701
Author:   siepo
Date:     2022-03-14 11:08:50 +0100 (Mon, 14 Mar 2022)
Log Message:
-----------
New tlperl 5.34

Modified Paths:
--------------
    trunk/Master/tlpkg/tlperl/bin/perl.exe
    trunk/Master/tlpkg/tlperl/bin/perlglob.exe
    trunk/Master/tlpkg/tlperl/bin/wperl.exe
    trunk/Master/tlpkg/tlperl/lib/.packlist
    trunk/Master/tlpkg/tlperl/lib/App/Cpan.pm
    trunk/Master/tlpkg/tlperl/lib/App/Prove/State/Result/Test.pm
    trunk/Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm
    trunk/Master/tlpkg/tlperl/lib/App/Prove/State.pm
    trunk/Master/tlpkg/tlperl/lib/App/Prove.pm
    trunk/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm
    trunk/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm
    trunk/Master/tlpkg/tlperl/lib/Archive/Tar.pm
    trunk/Master/tlpkg/tlperl/lib/B/Deparse.pm
    trunk/Master/tlpkg/tlperl/lib/B/Op_private.pm
    trunk/Master/tlpkg/tlperl/lib/B.pm
    trunk/Master/tlpkg/tlperl/lib/CORE/EXTERN.h
    trunk/Master/tlpkg/tlperl/lib/CORE/INTERN.h
    trunk/Master/tlpkg/tlperl/lib/CORE/XSUB.h
    trunk/Master/tlpkg/tlperl/lib/CORE/av.h
    trunk/Master/tlpkg/tlperl/lib/CORE/bitcount.h
    trunk/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h
    trunk/Master/tlpkg/tlperl/lib/CORE/config.h
    trunk/Master/tlpkg/tlperl/lib/CORE/cop.h
    trunk/Master/tlpkg/tlperl/lib/CORE/cv.h
    trunk/Master/tlpkg/tlperl/lib/CORE/dirent.h
    trunk/Master/tlpkg/tlperl/lib/CORE/dosish.h
    trunk/Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h
    trunk/Master/tlpkg/tlperl/lib/CORE/embed.h
    trunk/Master/tlpkg/tlperl/lib/CORE/embedvar.h
    trunk/Master/tlpkg/tlperl/lib/CORE/feature.h
    trunk/Master/tlpkg/tlperl/lib/CORE/gv.h
    trunk/Master/tlpkg/tlperl/lib/CORE/handy.h
    trunk/Master/tlpkg/tlperl/lib/CORE/hv.h
    trunk/Master/tlpkg/tlperl/lib/CORE/hv_func.h
    trunk/Master/tlpkg/tlperl/lib/CORE/hv_macro.h
    trunk/Master/tlpkg/tlperl/lib/CORE/inline.h
    trunk/Master/tlpkg/tlperl/lib/CORE/intrpvar.h
    trunk/Master/tlpkg/tlperl/lib/CORE/invlist_inline.h
    trunk/Master/tlpkg/tlperl/lib/CORE/iperlsys.h
    trunk/Master/tlpkg/tlperl/lib/CORE/keywords.h
    trunk/Master/tlpkg/tlperl/lib/CORE/metaconfig.h
    trunk/Master/tlpkg/tlperl/lib/CORE/mg.h
    trunk/Master/tlpkg/tlperl/lib/CORE/mg_data.h
    trunk/Master/tlpkg/tlperl/lib/CORE/mg_vtable.h
    trunk/Master/tlpkg/tlperl/lib/CORE/op.h
    trunk/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h
    trunk/Master/tlpkg/tlperl/lib/CORE/opcode.h
    trunk/Master/tlpkg/tlperl/lib/CORE/opnames.h
    trunk/Master/tlpkg/tlperl/lib/CORE/pad.h
    trunk/Master/tlpkg/tlperl/lib/CORE/parser.h
    trunk/Master/tlpkg/tlperl/lib/CORE/patchlevel.h
    trunk/Master/tlpkg/tlperl/lib/CORE/perl.h
    trunk/Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h
    trunk/Master/tlpkg/tlperl/lib/CORE/perlapi.h
    trunk/Master/tlpkg/tlperl/lib/CORE/perlhost.h
    trunk/Master/tlpkg/tlperl/lib/CORE/perlio.h
    trunk/Master/tlpkg/tlperl/lib/CORE/perliol.h
    trunk/Master/tlpkg/tlperl/lib/CORE/perlvars.h
    trunk/Master/tlpkg/tlperl/lib/CORE/perly.h
    trunk/Master/tlpkg/tlperl/lib/CORE/pp.h
    trunk/Master/tlpkg/tlperl/lib/CORE/pp_proto.h
    trunk/Master/tlpkg/tlperl/lib/CORE/proto.h
    trunk/Master/tlpkg/tlperl/lib/CORE/reentr.h
    trunk/Master/tlpkg/tlperl/lib/CORE/regcharclass.h
    trunk/Master/tlpkg/tlperl/lib/CORE/regcomp.h
    trunk/Master/tlpkg/tlperl/lib/CORE/regexp.h
    trunk/Master/tlpkg/tlperl/lib/CORE/regnodes.h
    trunk/Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h
    trunk/Master/tlpkg/tlperl/lib/CORE/scope.h
    trunk/Master/tlpkg/tlperl/lib/CORE/sv.h
    trunk/Master/tlpkg/tlperl/lib/CORE/sys/socket.h
    trunk/Master/tlpkg/tlperl/lib/CORE/thread.h
    trunk/Master/tlpkg/tlperl/lib/CORE/time64.h
    trunk/Master/tlpkg/tlperl/lib/CORE/time64_config.h
    trunk/Master/tlpkg/tlperl/lib/CORE/uconfig.h
    trunk/Master/tlpkg/tlperl/lib/CORE/uni_keywords.h
    trunk/Master/tlpkg/tlperl/lib/CORE/unicode_constants.h
    trunk/Master/tlpkg/tlperl/lib/CORE/unixish.h
    trunk/Master/tlpkg/tlperl/lib/CORE/utf8.h
    trunk/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h
    trunk/Master/tlpkg/tlperl/lib/CORE/util.h
    trunk/Master/tlpkg/tlperl/lib/CORE/uudmap.h
    trunk/Master/tlpkg/tlperl/lib/CORE/vdir.h
    trunk/Master/tlpkg/tlperl/lib/CORE/vmem.h
    trunk/Master/tlpkg/tlperl/lib/CORE/vutil.h
    trunk/Master/tlpkg/tlperl/lib/CORE/warnings.h
    trunk/Master/tlpkg/tlperl/lib/CORE/win32.h
    trunk/Master/tlpkg/tlperl/lib/CORE/win32iop.h
    trunk/Master/tlpkg/tlperl/lib/CORE/win32thread.h
    trunk/Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h
    trunk/Master/tlpkg/tlperl/lib/CPAN/FTP.pm
    trunk/Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm
    trunk/Master/tlpkg/tlperl/lib/CPAN.pm
    trunk/Master/tlpkg/tlperl/lib/Carp/Heavy.pm
    trunk/Master/tlpkg/tlperl/lib/Carp.pm
    trunk/Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm
    trunk/Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm
    trunk/Master/tlpkg/tlperl/lib/Compress/Zlib.pm
    trunk/Master/tlpkg/tlperl/lib/Config/Perl/V.pm
    trunk/Master/tlpkg/tlperl/lib/Config.pm
    trunk/Master/tlpkg/tlperl/lib/Config.pm.orig
    trunk/Master/tlpkg/tlperl/lib/Config.pod
    trunk/Master/tlpkg/tlperl/lib/Config_heavy.pl
    trunk/Master/tlpkg/tlperl/lib/Config_heavy.pl.orig
    trunk/Master/tlpkg/tlperl/lib/Cwd.pm
    trunk/Master/tlpkg/tlperl/lib/Data/Dumper.pm
    trunk/Master/tlpkg/tlperl/lib/Devel/PPPort.pm
    trunk/Master/tlpkg/tlperl/lib/Devel/Peek.pm
    trunk/Master/tlpkg/tlperl/lib/Digest/MD5.pm
    trunk/Master/tlpkg/tlperl/lib/Digest/base.pm
    trunk/Master/tlpkg/tlperl/lib/Digest/file.pm
    trunk/Master/tlpkg/tlperl/lib/Digest.pm
    trunk/Master/tlpkg/tlperl/lib/DynaLoader.pm
    trunk/Master/tlpkg/tlperl/lib/Encode/GSM0338.pm
    trunk/Master/tlpkg/tlperl/lib/Encode.pm
    trunk/Master/tlpkg/tlperl/lib/Env.pm
    trunk/Master/tlpkg/tlperl/lib/Errno.pm
    trunk/Master/tlpkg/tlperl/lib/Exporter/Heavy.pm
    trunk/Master/tlpkg/tlperl/lib/Exporter.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Base.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Unix.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/VMS.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/aix.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/android.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/cygwin.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/darwin.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/dec_osf.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/os2.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Command/MM.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Command.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Install.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Installed.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Liblist/Kid.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Liblist.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MANIFEST.SKIP
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_AIX.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_Any.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_BeOS.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_Cygwin.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_DOS.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_Darwin.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_MacOS.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_NW5.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_OS2.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_QNX.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_UWIN.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_Unix.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_VMS.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_VOS.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win32.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win95.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MY.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Config.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/FAQ.pod
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Locale.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Tutorial.pod
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/version.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Manifest.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Miniperl.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Mkbootstrap.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Mksymlists.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Packlist.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Constants.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/CountLines.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Eval.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Utilities.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Cmd.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/InputMap.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/OutputMap.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Type.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/testlib.pm
    trunk/Master/tlpkg/tlperl/lib/Fatal.pm
    trunk/Master/tlpkg/tlperl/lib/Fcntl.pm
    trunk/Master/tlpkg/tlperl/lib/File/Copy.pm
    trunk/Master/tlpkg/tlperl/lib/File/Fetch.pm
    trunk/Master/tlpkg/tlperl/lib/File/Find.pm
    trunk/Master/tlpkg/tlperl/lib/File/GlobMapper.pm
    trunk/Master/tlpkg/tlperl/lib/File/Path.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/AmigaOS.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/Functions.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/Mac.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/OS2.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/Unix.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/VMS.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec/Win32.pm
    trunk/Master/tlpkg/tlperl/lib/File/Spec.pm
    trunk/Master/tlpkg/tlperl/lib/File/Temp.pm
    trunk/Master/tlpkg/tlperl/lib/Filter/Util/Call.pm
    trunk/Master/tlpkg/tlperl/lib/FindBin.pm
    trunk/Master/tlpkg/tlperl/lib/Getopt/Long.pm
    trunk/Master/tlpkg/tlperl/lib/Getopt/Std.pm
    trunk/Master/tlpkg/tlperl/lib/Hash/Util/FieldHash.pm
    trunk/Master/tlpkg/tlperl/lib/Hash/Util.pm
    trunk/Master/tlpkg/tlperl/lib/I18N/LangTags.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Bzip2.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Deflate.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Identity.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Base/Common.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Base.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Bzip2.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Deflate.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/FAQ.pod
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Gzip/Constants.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Gzip.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/RawDeflate.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Zip/Constants.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Zip.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Zlib/Constants.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Compress/Zlib/Extra.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Dir.pm
    trunk/Master/tlpkg/tlperl/lib/IO/File.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Handle.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Pipe.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Poll.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Seekable.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Select.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Socket/INET.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Socket/IP.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Socket/UNIX.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Socket.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/Adapter/Bunzip2.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/Adapter/Identity.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/Adapter/Inflate.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/AnyInflate.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/AnyUncompress.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/Base.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/Bunzip2.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/Gunzip.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/Inflate.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/RawInflate.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm
    trunk/Master/tlpkg/tlperl/lib/IO/Zlib.pm
    trunk/Master/tlpkg/tlperl/lib/IO.pm
    trunk/Master/tlpkg/tlperl/lib/JSON/PP/Boolean.pm
    trunk/Master/tlpkg/tlperl/lib/JSON/PP.pm
    trunk/Master/tlpkg/tlperl/lib/Locale/Maketext/TPJ13.pod
    trunk/Master/tlpkg/tlperl/lib/MIME/Base64.pm
    trunk/Master/tlpkg/tlperl/lib/MIME/QuotedPrint.pm
    trunk/Master/tlpkg/tlperl/lib/Math/Complex.pm
    trunk/Master/tlpkg/tlperl/lib/Module/CoreList/Utils.pm
    trunk/Master/tlpkg/tlperl/lib/Module/CoreList.pm
    trunk/Master/tlpkg/tlperl/lib/Module/Load/Conditional.pm
    trunk/Master/tlpkg/tlperl/lib/Module/Load.pm
    trunk/Master/tlpkg/tlperl/lib/NEXT.pm
    trunk/Master/tlpkg/tlperl/lib/Net/Cmd.pm
    trunk/Master/tlpkg/tlperl/lib/Net/Config.pm
    trunk/Master/tlpkg/tlperl/lib/Net/Domain.pm
    trunk/Master/tlpkg/tlperl/lib/Net/FTP/A.pm
    trunk/Master/tlpkg/tlperl/lib/Net/FTP/E.pm
    trunk/Master/tlpkg/tlperl/lib/Net/FTP/I.pm
    trunk/Master/tlpkg/tlperl/lib/Net/FTP/L.pm
    trunk/Master/tlpkg/tlperl/lib/Net/FTP/dataconn.pm
    trunk/Master/tlpkg/tlperl/lib/Net/FTP.pm
    trunk/Master/tlpkg/tlperl/lib/Net/NNTP.pm
    trunk/Master/tlpkg/tlperl/lib/Net/Netrc.pm
    trunk/Master/tlpkg/tlperl/lib/Net/POP3.pm
    trunk/Master/tlpkg/tlperl/lib/Net/Ping.pm
    trunk/Master/tlpkg/tlperl/lib/Net/SMTP.pm
    trunk/Master/tlpkg/tlperl/lib/Net/Time.pm
    trunk/Master/tlpkg/tlperl/lib/Net/libnetFAQ.pod
    trunk/Master/tlpkg/tlperl/lib/Opcode.pm
    trunk/Master/tlpkg/tlperl/lib/POSIX.pm
    trunk/Master/tlpkg/tlperl/lib/POSIX.pod
    trunk/Master/tlpkg/tlperl/lib/PerlIO/encoding.pm
    trunk/Master/tlpkg/tlperl/lib/PerlIO/mmap.pm
    trunk/Master/tlpkg/tlperl/lib/PerlIO/scalar.pm
    trunk/Master/tlpkg/tlperl/lib/PerlIO/via/QuotedPrint.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Checker.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Html.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/BlackBox.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/Checker.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/Debug.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/DumpAsText.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/DumpAsXML.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/HTML.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/HTMLBatch.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/JustPod.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/LinkSection.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/Methody.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/Progress.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/PullParser.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/PullParserEndToken.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/PullParserStartToken.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/PullParserTextToken.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/PullParserToken.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/RTF.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/Search.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/SimpleTree.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/Text.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/TextContent.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/TiedOutFH.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/Transcode.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/TranscodeDumb.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/TranscodeSmart.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/XHTML.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple/XMLOutStream.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Simple.pm
    trunk/Master/tlpkg/tlperl/lib/Pod/Usage.pm
    trunk/Master/tlpkg/tlperl/lib/Safe.pm
    trunk/Master/tlpkg/tlperl/lib/Socket.pm
    trunk/Master/tlpkg/tlperl/lib/Storable.pm
    trunk/Master/tlpkg/tlperl/lib/Symbol.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Base.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Formatter/Base.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Formatter/Color.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/ParallelSession.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Formatter/Console/Session.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Formatter/Console.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Formatter/File/Session.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Formatter/File.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Formatter/Session.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Harness/Env.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Harness.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Object.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Aggregator.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Grammar.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Array.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Process.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator/Stream.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Iterator.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/IteratorFactory.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Multiplexer.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Bailout.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Comment.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Plan.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Pragma.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Test.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Unknown.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result/Version.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result/YAML.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Result.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/ResultFactory.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Job.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler/Spinner.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Scheduler.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/Source.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Executable.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/File.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Handle.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/Perl.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler/RawTAP.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/SourceHandler.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Reader.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser/YAMLish/Writer.pm
    trunk/Master/tlpkg/tlperl/lib/TAP/Parser.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Builder/Formatter.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Builder/Module.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Builder/Tester/Color.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Builder/Tester.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Builder/TodoDiag.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Builder.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Harness.pm
    trunk/Master/tlpkg/tlperl/lib/Test/More.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Simple.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Tester/Capture.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Tester/CaptureRunner.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Tester/Delegate.pm
    trunk/Master/tlpkg/tlperl/lib/Test/Tester.pm
    trunk/Master/tlpkg/tlperl/lib/Test/use/ok.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/Breakage.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/Context.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/Instance.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/Stack.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Bail.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Diag.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Encoding.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Exception.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Fail.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Generic.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Note.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Ok.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Pass.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Plan.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Skip.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Subtest.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/TAP/Version.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/V2.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event/Waiting.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Event.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/About.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Amnesty.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Assert.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Control.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Error.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Hub.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Info/Table.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Info.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Meta.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Parent.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Plan.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Render.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet/Trace.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/EventFacet.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Formatter/TAP.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Formatter.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Hub/Interceptor/Terminator.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Hub/Interceptor.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Hub/Subtest.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Hub.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/IPC/Driver/Files.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/IPC/Driver.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/IPC.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Tools/Tiny.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Transition.pod
    trunk/Master/tlpkg/tlperl/lib/Test2/Util/ExternalMeta.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Util/Facets2Legacy.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Util/HashBase.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Util/Trace.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/Util.pm
    trunk/Master/tlpkg/tlperl/lib/Test2.pm
    trunk/Master/tlpkg/tlperl/lib/Text/Balanced.pm
    trunk/Master/tlpkg/tlperl/lib/Tie/RefHash.pm
    trunk/Master/tlpkg/tlperl/lib/Time/HiRes.pm
    trunk/Master/tlpkg/tlperl/lib/Time/Local.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/CJK/Big5.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/CJK/GB2312.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/CJK/JISX0208.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/CJK/Korean.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/CJK/Pinyin.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/CJK/Stroke.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/CJK/Zhuyin.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/af.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ar.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/as.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/az.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/be.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/bn.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ca.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/cs.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/cu.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/cy.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/da.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/de_at_ph.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/de_phone.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/dsb.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ee.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/eo.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/es.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/es_trad.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/et.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/fa.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/fi.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/fi_phone.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/fil.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/fo.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/fr_ca.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/gu.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ha.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/haw.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/he.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/hi.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/hr.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/hu.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/hy.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ig.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/is.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ja.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/kk.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/kl.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/kn.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ko.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/kok.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/lkt.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ln.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/lt.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/lv.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/mk.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ml.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/mr.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/mt.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/nb.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/nn.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/nso.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/om.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/or.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/pa.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/pl.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ro.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sa.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/se.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/si.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/si_dict.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sk.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sl.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sq.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sr.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sv.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sv_refo.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ta.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/te.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/th.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/tn.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/to.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/tr.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ug_cyrl.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/uk.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ur.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/vi.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/vo.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/wae.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/wo.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/yo.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/zh.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/zh_big5.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/zh_gb.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/zh_pin.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/zh_strk.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/zh_zhu.pl
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/Locale.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate/allkeys.txt
    trunk/Master/tlpkg/tlperl/lib/Unicode/Collate.pm
    trunk/Master/tlpkg/tlperl/lib/Unicode/Normalize.pm
    trunk/Master/tlpkg/tlperl/lib/Win32.pm
    trunk/Master/tlpkg/tlperl/lib/auto/B/B.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Compress/Raw/Bzip2/Bzip2.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Compress/Raw/Zlib/Zlib.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Devel/Peek/Peek.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Digest/SHA/SHA.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/Byte/Byte.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/CN/CN.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/EBCDIC/EBCDIC.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/Encode.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/JP/JP.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/KR/KR.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/Symbol/Symbol.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/TW/TW.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Encode/Unicode/Unicode.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.dll
    trunk/Master/tlpkg/tlperl/lib/auto/File/DosGlob/DosGlob.dll
    trunk/Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Filter/Util/Call/Call.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Hash/Util/FieldHash/FieldHash.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Hash/Util/Util.dll
    trunk/Master/tlpkg/tlperl/lib/auto/I18N/Langinfo/Langinfo.dll
    trunk/Master/tlpkg/tlperl/lib/auto/IO/IO.dll
    trunk/Master/tlpkg/tlperl/lib/auto/List/Util/Util.dll
    trunk/Master/tlpkg/tlperl/lib/auto/MIME/Base64/Base64.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Math/BigInt/FastCalc/FastCalc.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Opcode/Opcode.dll
    trunk/Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.dll
    trunk/Master/tlpkg/tlperl/lib/auto/PerlIO/encoding/encoding.dll
    trunk/Master/tlpkg/tlperl/lib/auto/PerlIO/mmap/mmap.dll
    trunk/Master/tlpkg/tlperl/lib/auto/PerlIO/scalar/scalar.dll
    trunk/Master/tlpkg/tlperl/lib/auto/PerlIO/via/via.dll
    trunk/Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Socket/Socket.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Storable/Storable.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Sys/Hostname/Hostname.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Time/Piece/Piece.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Unicode/Collate/Collate.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Unicode/Normalize/Normalize.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Win32/Win32.dll
    trunk/Master/tlpkg/tlperl/lib/auto/Win32API/File/File.dll
    trunk/Master/tlpkg/tlperl/lib/auto/attributes/attributes.dll
    trunk/Master/tlpkg/tlperl/lib/auto/mro/mro.dll
    trunk/Master/tlpkg/tlperl/lib/auto/re/re.dll
    trunk/Master/tlpkg/tlperl/lib/auto/threads/shared/shared.dll
    trunk/Master/tlpkg/tlperl/lib/auto/threads/threads.dll
    trunk/Master/tlpkg/tlperl/lib/autodie/Scope/Guard.pm
    trunk/Master/tlpkg/tlperl/lib/autodie/Scope/GuardStack.pm
    trunk/Master/tlpkg/tlperl/lib/autodie/Util.pm
    trunk/Master/tlpkg/tlperl/lib/autodie/exception/system.pm
    trunk/Master/tlpkg/tlperl/lib/autodie/exception.pm
    trunk/Master/tlpkg/tlperl/lib/autodie/hints.pm
    trunk/Master/tlpkg/tlperl/lib/autodie/skip.pm
    trunk/Master/tlpkg/tlperl/lib/autodie.pm
    trunk/Master/tlpkg/tlperl/lib/bytes.pm
    trunk/Master/tlpkg/tlperl/lib/experimental.pm
    trunk/Master/tlpkg/tlperl/lib/feature.pm
    trunk/Master/tlpkg/tlperl/lib/if.pm
    trunk/Master/tlpkg/tlperl/lib/locale.pm
    trunk/Master/tlpkg/tlperl/lib/mro.pm
    trunk/Master/tlpkg/tlperl/lib/ok.pm
    trunk/Master/tlpkg/tlperl/lib/overload.pm
    trunk/Master/tlpkg/tlperl/lib/perl5db.pl
    trunk/Master/tlpkg/tlperl/lib/perlfaq.pm
    trunk/Master/tlpkg/tlperl/lib/perllocal.pod
    trunk/Master/tlpkg/tlperl/lib/re.pm
    trunk/Master/tlpkg/tlperl/lib/strict.pm
    trunk/Master/tlpkg/tlperl/lib/subs.pm
    trunk/Master/tlpkg/tlperl/lib/threads/shared.pm
    trunk/Master/tlpkg/tlperl/lib/threads.pm
    trunk/Master/tlpkg/tlperl/lib/unicore/UCD.pl
    trunk/Master/tlpkg/tlperl/lib/unicore/uni_keywords.pl
    trunk/Master/tlpkg/tlperl/lib/utf8.pm
    trunk/Master/tlpkg/tlperl/lib/version/regex.pm
    trunk/Master/tlpkg/tlperl/lib/version.pm
    trunk/Master/tlpkg/tlperl/lib/version.pod
    trunk/Master/tlpkg/tlperl/lib/warnings.pm
    trunk/Master/tlpkg/tlperl/site/lib/File/Which.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTML/Entities.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTML/Filter.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTML/HeadParser.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTML/LinkExtor.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTML/Parser.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTML/PullParser.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTML/TokeParser.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Config.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Daemon.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Auth.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Headers/ETag.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Headers/Util.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Headers.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Message.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Request/Common.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Request.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Response.pm
    trunk/Master/tlpkg/tlperl/site/lib/HTTP/Status.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Authen/Basic.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Authen/Digest.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Authen/Ntlm.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/ConnCache.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Debug/TraceHTTP.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Debug.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/DebugFile.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/MemberMixin.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/cpan.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/data.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/file.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/ftp.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/gopher.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/http.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/loopback.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/mailto.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nntp.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol/nogo.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Protocol.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/RobotUA.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/Simple.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP/UserAgent.pm
    trunk/Master/tlpkg/tlperl/site/lib/LWP.pm
    trunk/Master/tlpkg/tlperl/site/lib/Mozilla/CA/cacert.pem
    trunk/Master/tlpkg/tlperl/site/lib/Mozilla/CA.pm
    trunk/Master/tlpkg/tlperl/site/lib/Mozilla/mk-ca-bundle.pl
    trunk/Master/tlpkg/tlperl/site/lib/Net/HTTP/Methods.pm
    trunk/Master/tlpkg/tlperl/site/lib/Net/HTTP/NB.pm
    trunk/Master/tlpkg/tlperl/site/lib/Net/HTTP.pm
    trunk/Master/tlpkg/tlperl/site/lib/Net/HTTPS.pm
    trunk/Master/tlpkg/tlperl/site/lib/Socket.pm
    trunk/Master/tlpkg/tlperl/site/lib/Test/Needs.pm
    trunk/Master/tlpkg/tlperl/site/lib/Try/Tiny.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/Escape.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/Heuristic.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/IRI.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/QueryParam.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/Split.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/URL.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/WithBase.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_foreign.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_generic.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_idna.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_ldap.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_login.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_punycode.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_query.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_segment.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_server.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/_userpass.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/data.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/file/Base.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/file/FAT.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/file/Mac.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/file/OS2.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/file/QNX.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/file/Unix.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/file/Win32.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/file.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/ftp.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/gopher.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/http.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/https.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/ldap.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/ldapi.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/ldaps.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/mailto.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/mms.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/news.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/nntp.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/pop.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/rlogin.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/rsync.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/rtsp.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/rtspu.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/sftp.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/sip.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/sips.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/snews.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/ssh.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/telnet.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/tn3270.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/urn/isbn.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/urn/oid.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/urn.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI.pm
    trunk/Master/tlpkg/tlperl/site/lib/auto/Cpanel/JSON/XS/XS.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/Digest/SHA/SHA.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/HTML/Parser/Parser.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/Math/Int64/Int64.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/Socket/Socket.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/URI/.packlist
    trunk/Master/tlpkg/tlperl/site/lib/auto/Win32/API/API.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/Win32/API/Callback/Callback.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/Win32/Console/Console.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/Win32/Shortcut/Shortcut.dll
    trunk/Master/tlpkg/tlperl/site/lib/auto/Win32API/Registry/Registry.dll

Added Paths:
-----------
    trunk/Master/tlpkg/tlperl/bin/perl5.34.0.exe
    trunk/Master/tlpkg/tlperl/bin/perl534.dll
    trunk/Master/tlpkg/tlperl/lib/CORE/libperl534.a
    trunk/Master/tlpkg/tlperl/lib/CORE/perl_siphash.h
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/MM_OS390.pm
    trunk/Master/tlpkg/tlperl/lib/ExtUtils/PL2Bat.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/InterceptResult/
    trunk/Master/tlpkg/tlperl/lib/Test2/API/InterceptResult/Event.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/InterceptResult/Facet.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/InterceptResult/Hub.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/InterceptResult/Squasher.pm
    trunk/Master/tlpkg/tlperl/lib/Test2/API/InterceptResult.pm
    trunk/Master/tlpkg/tlperl/site/lib/URI/nntps.pm

Removed Paths:
-------------
    trunk/Master/tlpkg/tlperl/README.TEXLIVE
    trunk/Master/tlpkg/tlperl/bin/perl532.dll
    trunk/Master/tlpkg/tlperl/lib/CORE/libperl532.a
    trunk/Master/tlpkg/tlperl/lib/CORE/stadtx_hash.h

Deleted: trunk/Master/tlpkg/tlperl/README.TEXLIVE
===================================================================
--- trunk/Master/tlpkg/tlperl/README.TEXLIVE	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/README.TEXLIVE	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,8 +0,0 @@
-(This file public domain.)
-
-This directory contains Perl 5.32.1 compiled for Windows.
-
-The only purpose of this Perl is to provide support on Windows for
-Perl scripts shipped with TeX Live.  It is not intended for general use.
-
-The sources and notes on compilation can be found in Master/source/tlperl.

Modified: trunk/Master/tlpkg/tlperl/bin/perl.exe
===================================================================
(Binary files differ)

Added: trunk/Master/tlpkg/tlperl/bin/perl5.34.0.exe
===================================================================
(Binary files differ)

Index: trunk/Master/tlpkg/tlperl/bin/perl5.34.0.exe
===================================================================
--- trunk/Master/tlpkg/tlperl/bin/perl5.34.0.exe	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/bin/perl5.34.0.exe	2022-03-14 10:08:50 UTC (rev 62701)

Property changes on: trunk/Master/tlpkg/tlperl/bin/perl5.34.0.exe
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Deleted: trunk/Master/tlpkg/tlperl/bin/perl532.dll
===================================================================
(Binary files differ)

Added: trunk/Master/tlpkg/tlperl/bin/perl534.dll
===================================================================
(Binary files differ)

Index: trunk/Master/tlpkg/tlperl/bin/perl534.dll
===================================================================
--- trunk/Master/tlpkg/tlperl/bin/perl534.dll	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/bin/perl534.dll	2022-03-14 10:08:50 UTC (rev 62701)

Property changes on: trunk/Master/tlpkg/tlperl/bin/perl534.dll
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/x-dosexec
\ No newline at end of property
Modified: trunk/Master/tlpkg/tlperl/bin/perlglob.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlperl/bin/wperl.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlperl/lib/.packlist
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/.packlist	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/.packlist	2022-03-14 10:08:50 UTC (rev 62701)
@@ -7,9 +7,9 @@
 e:\tlperl\bin/instmodsh.bat type=file
 e:\tlperl\bin/json_pp.bat type=file
 e:\tlperl\bin/libnetcfg.bat type=file
-e:\tlperl\bin/perl.exe from=e:\tlperl\bin/perl5.32.1.exe type=link
-e:\tlperl\bin/perl5.32.1.exe type=file
-e:\tlperl\bin/perl532.dll type=file
+e:\tlperl\bin/perl.exe from=e:\tlperl\bin/perl5.34.0.exe type=link
+e:\tlperl\bin/perl5.34.0.exe type=file
+e:\tlperl\bin/perl534.dll type=file
 e:\tlperl\bin/perlbug.bat type=file
 e:\tlperl\bin/perldoc.bat type=file
 e:\tlperl\bin/perlivp.bat type=file
@@ -81,7 +81,7 @@
 e:\tlperl\lib/CORE/iperlsys.h type=file
 e:\tlperl\lib/CORE/keywords.h type=file
 e:\tlperl\lib/CORE/l1_char_class_tab.h type=file
-e:\tlperl\lib/CORE/libperl532.a type=file
+e:\tlperl\lib/CORE/libperl534.a type=file
 e:\tlperl\lib/CORE/malloc_ctl.h type=file
 e:\tlperl\lib/CORE/metaconfig.h type=file
 e:\tlperl\lib/CORE/mg.h type=file
@@ -102,6 +102,7 @@
 e:\tlperl\lib/CORE/perl.h type=file
 e:\tlperl\lib/CORE/perl_inc_macro.h type=file
 e:\tlperl\lib/CORE/perl_langinfo.h type=file
+e:\tlperl\lib/CORE/perl_siphash.h type=file
 e:\tlperl\lib/CORE/perlapi.h type=file
 e:\tlperl\lib/CORE/perlhost.h type=file
 e:\tlperl\lib/CORE/perlio.h type=file
@@ -119,7 +120,6 @@
 e:\tlperl\lib/CORE/regnodes.h type=file
 e:\tlperl\lib/CORE/sbox32_hash.h type=file
 e:\tlperl\lib/CORE/scope.h type=file
-e:\tlperl\lib/CORE/stadtx_hash.h type=file
 e:\tlperl\lib/CORE/sv.h type=file
 e:\tlperl\lib/CORE/sys/errno2.h type=file
 e:\tlperl\lib/CORE/sys/socket.h type=file
@@ -302,6 +302,7 @@
 e:\tlperl\lib/ExtUtils/MM_MacOS.pm type=file
 e:\tlperl\lib/ExtUtils/MM_NW5.pm type=file
 e:\tlperl\lib/ExtUtils/MM_OS2.pm type=file
+e:\tlperl\lib/ExtUtils/MM_OS390.pm type=file
 e:\tlperl\lib/ExtUtils/MM_QNX.pm type=file
 e:\tlperl\lib/ExtUtils/MM_UWIN.pm type=file
 e:\tlperl\lib/ExtUtils/MM_Unix.pm type=file
@@ -320,6 +321,7 @@
 e:\tlperl\lib/ExtUtils/Miniperl.pm type=file
 e:\tlperl\lib/ExtUtils/Mkbootstrap.pm type=file
 e:\tlperl\lib/ExtUtils/Mksymlists.pm type=file
+e:\tlperl\lib/ExtUtils/PL2Bat.pm type=file
 e:\tlperl\lib/ExtUtils/Packlist.pm type=file
 e:\tlperl\lib/ExtUtils/ParseXS.pm type=file
 e:\tlperl\lib/ExtUtils/ParseXS.pod type=file
@@ -624,6 +626,11 @@
 e:\tlperl\lib/Test2/API/Breakage.pm type=file
 e:\tlperl\lib/Test2/API/Context.pm type=file
 e:\tlperl\lib/Test2/API/Instance.pm type=file
+e:\tlperl\lib/Test2/API/InterceptResult.pm type=file
+e:\tlperl\lib/Test2/API/InterceptResult/Event.pm type=file
+e:\tlperl\lib/Test2/API/InterceptResult/Facet.pm type=file
+e:\tlperl\lib/Test2/API/InterceptResult/Hub.pm type=file
+e:\tlperl\lib/Test2/API/InterceptResult/Squasher.pm type=file
 e:\tlperl\lib/Test2/API/Stack.pm type=file
 e:\tlperl\lib/Test2/Event.pm type=file
 e:\tlperl\lib/Test2/Event/Bail.pm type=file
@@ -951,6 +958,7 @@
 e:\tlperl\lib/pods/perl5303delta.pod type=file
 e:\tlperl\lib/pods/perl5320delta.pod type=file
 e:\tlperl\lib/pods/perl5321delta.pod type=file
+e:\tlperl\lib/pods/perl5340delta.pod type=file
 e:\tlperl\lib/pods/perl561delta.pod type=file
 e:\tlperl\lib/pods/perl56delta.pod type=file
 e:\tlperl\lib/pods/perl581delta.pod type=file
@@ -988,6 +996,7 @@
 e:\tlperl\lib/pods/perldeprecation.pod type=file
 e:\tlperl\lib/pods/perldiag.pod type=file
 e:\tlperl\lib/pods/perldoc.pod type=file
+e:\tlperl\lib/pods/perldocstyle.pod type=file
 e:\tlperl\lib/pods/perldos.pod type=file
 e:\tlperl\lib/pods/perldsc.pod type=file
 e:\tlperl\lib/pods/perldtrace.pod type=file
@@ -1080,7 +1089,6 @@
 e:\tlperl\lib/pods/perlsource.pod type=file
 e:\tlperl\lib/pods/perlstyle.pod type=file
 e:\tlperl\lib/pods/perlsub.pod type=file
-e:\tlperl\lib/pods/perlsymbian.pod type=file
 e:\tlperl\lib/pods/perlsyn.pod type=file
 e:\tlperl\lib/pods/perlsynology.pod type=file
 e:\tlperl\lib/pods/perlthrtut.pod type=file

Modified: trunk/Master/tlpkg/tlperl/lib/App/Cpan.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/App/Cpan.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/App/Cpan.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -6,7 +6,7 @@
 
 use if $] < 5.008 => 'IO::Scalar';
 
-$VERSION = '1.675';
+$VERSION = '1.676';
 
 =head1 NAME
 
@@ -689,7 +689,7 @@
 
 	*CPAN::Shell::mywarn = sub {
 		my($self,$what) = @_;
-		$scalar .= $what;
+		$scalar .= $what if defined $what;
 		$self->print_ornamented($what,
 			$CPAN::Config->{colorize_warn}||'bold red on_white'
 			);

Modified: trunk/Master/tlpkg/tlperl/lib/App/Prove/State/Result/Test.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/App/Prove/State/Result/Test.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/App/Prove/State/Result/Test.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -9,11 +9,11 @@
 
 =head1 VERSION
 
-Version 3.42
+Version 3.43
 
 =cut
 
-our $VERSION = '3.42';
+our $VERSION = '3.43';
 
 =head1 DESCRIPTION
 

Modified: trunk/Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/App/Prove/State/Result.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -14,11 +14,11 @@
 
 =head1 VERSION
 
-Version 3.42
+Version 3.43
 
 =cut
 
-our $VERSION = '3.42';
+our $VERSION = '3.43';
 
 =head1 DESCRIPTION
 

Modified: trunk/Master/tlpkg/tlperl/lib/App/Prove/State.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/App/Prove/State.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/App/Prove/State.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -25,11 +25,11 @@
 
 =head1 VERSION
 
-Version 3.42
+Version 3.43
 
 =cut
 
-our $VERSION = '3.42';
+our $VERSION = '3.43';
 
 =head1 DESCRIPTION
 

Modified: trunk/Master/tlpkg/tlperl/lib/App/Prove.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/App/Prove.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/App/Prove.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -18,11 +18,11 @@
 
 =head1 VERSION
 
-Version 3.42
+Version 3.43
 
 =cut
 
-our $VERSION = '3.42';
+our $VERSION = '3.43';
 
 =head1 DESCRIPTION
 

Modified: trunk/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,9 +1,14 @@
 package Archive::Tar::Constant;
 
+use strict;
+use warnings;
+
+use vars qw[$VERSION @ISA @EXPORT];
+
 BEGIN {
     require Exporter;
 
-    $VERSION    = '2.36';
+    $VERSION    = '2.38';
     @ISA        = qw[Exporter];
 
     require Time::Local if $^O eq "MacOS";
@@ -11,9 +16,6 @@
 
 @EXPORT = Archive::Tar::Constant->_list_consts( __PACKAGE__ );
 
-use strict;
-use warnings;
-
 use constant FILE           => 0;
 use constant HARDLINK       => 1;
 use constant SYMLINK        => 2;

Modified: trunk/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -7,13 +7,11 @@
 use File::Spec          ();
 use File::Basename      ();
 
-### avoid circular use, so only require;
-require Archive::Tar;
 use Archive::Tar::Constant;
 
 use vars qw[@ISA $VERSION];
 #@ISA        = qw[Archive::Tar];
-$VERSION    = '2.36';
+$VERSION    = '2.38';
 
 ### set value to 1 to oct() it during the unpack ###
 
@@ -469,6 +467,8 @@
 
     local $Carp::CarpLevel += 1;
 
+    ### avoid circular use, so only require;
+    require Archive::Tar;
     return Archive::Tar->_extract_file( $self, @_ );
 }
 

Modified: trunk/Master/tlpkg/tlperl/lib/Archive/Tar.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/Archive/Tar.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/Archive/Tar.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -31,7 +31,7 @@
 $DEBUG                  = 0;
 $WARN                   = 1;
 $FOLLOW_SYMLINK         = 0;
-$VERSION                = "2.36";
+$VERSION                = "2.38";
 $CHOWN                  = 1;
 $CHMOD                  = 1;
 $SAME_PERMISSIONS       = $> == 0 ? 1 : 0;
@@ -48,7 +48,7 @@
     ### switch between perlio and IO::String
     $HAS_IO_STRING = eval {
         require IO::String;
-        import IO::String;
+        IO::String->import;
         1;
     } || 0;
 }
@@ -918,7 +918,7 @@
     }
 
     if( $CHOWN && CAN_CHOWN->() and not -l $full ) {
-        chown $entry->uid, $entry->gid, $full or
+        CORE::chown( $entry->uid, $entry->gid, $full ) or
             $self->_error( qq[Could not set uid/gid on '$full'] );
     }
 
@@ -929,7 +929,7 @@
         unless ($SAME_PERMISSIONS) {
             $mode &= ~(oct(7000) | umask);
         }
-        chmod $mode, $full or
+        CORE::chmod( $mode, $full ) or
             $self->_error( qq[Could not chown '$full' to ] . $entry->mode );
     }
 
@@ -2284,7 +2284,7 @@
     use Archive::Tar;
     use IO::File;
 
-    my $fh = new IO::File "| compress -c >$filename";
+    my $fh = IO::File->new( "| compress -c >$filename" );
     my $tar = Archive::Tar->new();
     ...
     $tar->write($fh);

Modified: trunk/Master/tlpkg/tlperl/lib/B/Deparse.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/B/Deparse.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/B/Deparse.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -52,7 +52,7 @@
         MDEREF_SHIFT
     );
 
-$VERSION = '1.54';
+$VERSION = '1.56';
 use strict;
 our $AUTOLOAD;
 use warnings ();
@@ -280,6 +280,7 @@
 # possibly undoing optimisations along the way.
 
 sub DEBUG { 0 }
+use if DEBUG, 'Data::Dumper';
 
 sub _pessimise_walk {
     my ($self, $startop) = @_;
@@ -2303,6 +2304,8 @@
     evalbytes=>'evalbytes',
     __SUB__ => '__SUB__',
    fc       => 'fc',
+   try      => 'try',
+   catch    => 'try',
 );
 
 # keywords that are strong and also have a prototype
@@ -2471,7 +2474,7 @@
 	    return $self->maybe_parens(
 			$self->keyword($name) . " $kid", $cx, 16
 		   );
-	}   
+	}
 	return $self->maybe_parens_unop($name, $kid, $cx);
     } else {
 	return $self->maybe_parens(
@@ -2511,7 +2514,7 @@
 sub pp_values { unop(@_, "values") }
 sub pp_keys { unop(@_, "keys") }
 { no strict 'refs'; *{"pp_r$_"} = *{"pp_$_"} for qw< keys each values >; }
-sub pp_boolkeys { 
+sub pp_boolkeys {
     # no name because its an optimisation op that has no keyword
     unop(@_,"");
 }
@@ -4054,6 +4057,31 @@
     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;
@@ -5658,38 +5686,24 @@
 # Escape a characrter.
 # Only used by tr///, so backslashes hyphens
 
-sub pchr { # ASCII
+sub pchr {
     my($n) = @_;
-    if ($n == ord '\\') {
-	return '\\\\';
-    } elsif ($n == ord "-") {
-	return "\\-";
-    } elsif (utf8::native_to_unicode($n) >= utf8::native_to_unicode(ord(' '))
-             and utf8::native_to_unicode($n) <= utf8::native_to_unicode(ord('~')))
-    {
-        # I'm presuming a regex is not ok here, otherwise we could have used
-        # /[[:print:]]/a to get here
-	return chr($n);
-    } elsif ($n == ord "\a") {
-	return '\\a';
-    } elsif ($n == ord "\b") {
-	return '\\b';
-    } elsif ($n == ord "\t") {
-	return '\\t';
-    } elsif ($n == ord "\n") {
-	return '\\n';
-    } elsif ($n == ord "\e") {
-	return '\\e';
-    } elsif ($n == ord "\f") {
-	return '\\f';
-    } elsif ($n == ord "\r") {
-	return '\\r';
-    } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) {
-	return '\\c' . $unctrl{chr $n};
-    } else {
-#	return '\x' . sprintf("%02x", $n);
-	return '\\' . sprintf("%03o", $n);
-    }
+    return sprintf("\\x{%X}", $n) if $n > 255;
+    return '\\\\' if $n == ord '\\';
+    return "\\-" if $n == ord "-";
+    # I'm presuming a regex is not ok here, otherwise we could have used
+    # /[[:print:]]/a to get here
+    return chr($n) if (        utf8::native_to_unicode($n)
+                            >= utf8::native_to_unicode(ord(' '))
+                        and    utf8::native_to_unicode($n)
+                            <= utf8::native_to_unicode(ord('~')));
+
+    my $mnemonic_pos = index("\a\b\e\f\n\r\t", chr($n));
+    return "\\" . substr("abefnrt", $mnemonic_pos, 1) if $mnemonic_pos >= 0;
+
+    return '\\c' . $unctrl{chr $n} if $n >= ord("\cA") and $n <= ord("\cZ");
+#   return '\x' . sprintf("%02x", $n);
+    return '\\' . sprintf("%03o", $n);
 }
 
 # Convert a list of characters into a string suitable for tr/// search or
@@ -5765,92 +5779,170 @@
     return ($from, $to);
 }
 
-sub tr_chr {
-    my $x = shift;
-    if ($x == ord "-") {
-	return "\\-";
-    } elsif ($x == ord "\\") {
-	return "\\\\";
-    } else {
-	return chr $x;
+my $infinity = ~0 >> 1;     # IV_MAX
+
+sub tr_append_to_invlist {
+    my ($list_ref, $current, $next) = @_;
+
+    # Appends the range $current..$next-1 to the inversion list $list_ref
+
+    printf STDERR "%d: %d..%d %s", __LINE__, $current, $next, Dumper $list_ref if DEBUG;
+
+    if (@$list_ref && $list_ref->[-1] == $current) {
+
+        # The new range extends the current final one.  If it is a finite
+        # rane, replace the current final by the new ending.
+        if (defined $next) {
+            $list_ref->[-1] = $next;
+        }
+        else {
+            # The new range extends to infinity, which means the current end
+            # of the inversion list is dangling.  Removing it causes things to
+            # work.
+            pop @$list_ref;
+        }
     }
+    else {  # The new range starts after the current final one; add it as a
+            # new range
+        push @$list_ref, $current;
+        push @$list_ref, $next if defined $next;
+    }
+
+    print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG;
 }
 
-sub tr_invmap {
+sub tr_invlist_to_string {
+    my ($list_ref, $to_complement) = @_;
+
+    # Stringify the inversion list $list_ref, possibly complementing it first.
+    # CAUTION: this can modify $list_ref.
+
+    print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG;
+
+    if ($to_complement) {
+
+        # Complementing an inversion list is done by prepending a 0 if it
+        # doesn't have one there already; otherwise removing the leading 0.
+        if ($list_ref->[0] == 0) {
+            shift @$list_ref;
+        }
+        else {
+            unshift @$list_ref, 0;
+        }
+
+        print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG;
+    }
+
+    my $output = "";
+
+    # Every other element is in the list.
+    for (my $i = 0; $i < @$list_ref; $i += 2) {
+        my $base = $list_ref->[$i];
+        $output .= pchr($base);
+        last unless defined $list_ref->[$i+1];
+
+        # The beginning of the next element starts the range of items not in
+        # the list.
+        my $upper = $list_ref->[$i+1] - 1;
+        my $range = $upper - $base;
+        $output .= '-' if $range > 1; # Adjacent characters don't have a
+                                      # minus, though it would be legal to do
+                                      # so
+        $output .= pchr($upper) if $range > 0;
+    }
+
+    print STDERR __LINE__, ": tr_invlist_to_string() returning '$output'\n"
+                                                                       if DEBUG;
+    return $output;
+}
+
+my $unmapped = ~0;
+my $special_handling = ~0 - 1;
+
+sub dump_invmap {
     my ($invlist_ref, $map_ref) = @_;
 
-    my $infinity = ~0 >> 1;     # IV_MAX
-    my $from = "";
-    my $to = "";
-
-    for my $i (0.. @$invlist_ref - 1) {
-        my $this_from = $invlist_ref->[$i];
+    for my $i (0 .. @$invlist_ref - 1) {
+        printf STDERR "[%d]\t%x\t", $i, $invlist_ref->[$i];
         my $map = $map_ref->[$i];
-        my $upper = ($i < @$invlist_ref - 1)
-                     ? $invlist_ref->[$i+1]
-                     : $infinity;
-        my $range = $upper - $this_from - 1;
-        if (DEBUG) {
-            print STDERR "i=$i, from=$this_from, upper=$upper, range=$range\n";
+        if ($map == $unmapped) {
+            print STDERR "TR_UNMAPPED\n";
         }
-        next if $map == ~0;
-        next if $map == ~0 - 1;
-        $from .= tr_chr($this_from);
-        $to .= tr_chr($map);
-        next if $range == 0;    # Single code point
-        if ($range == 1) {      # Adjacent code points
-            $from .= tr_chr($this_from + 1);
-            $to   .= tr_chr($map + 1);
+        elsif ($map == $special_handling) {
+            print STDERR "TR_SPECIAL\n";
         }
-        elsif ($upper != $infinity) {
-            $from .= "-" . tr_chr($this_from + $range);
-            $to   .= "-" . tr_chr($map + $range);
-        }
         else {
-            $from .= "-INFTY";
-            $to   .= "-INFTY";
+            printf STDERR "%x\n", $map;
         }
     }
-
-    return ($from, $to);
 }
 
 sub tr_decode_utf8 {
     my($tr_av, $flags) = @_;
-    printf STDERR "flags=0x%x\n", $flags if DEBUG;
+
+    printf STDERR "\n%s: %d: flags=0x%x\n", __FILE__, __LINE__, $flags if DEBUG;
+
     my $invlist = $tr_av->ARRAYelt(0);
     my @invlist = unpack("J*", $invlist->PV);
     my @map = unpack("J*", $tr_av->ARRAYelt(1)->PV);
 
-    if (DEBUG) {
-        for my $i (0 .. @invlist - 1) {
-            printf STDERR "[%d]\t%x\t", $i, $invlist[$i];
-            my $map = $map[$i];
-            if ($map == ~0) {
-                print STDERR "TR_UNMAPPED\n";
-            }
-            elsif ($map == ~0 - 1) {
-                print STDERR "TR_SPECIAL\n";
-            }
-            else {
-                printf STDERR "%x\n", $map;
-            }
+    dump_invmap(\@invlist, \@map) if DEBUG;
+
+    my @from;
+    my @to;
+
+    # Go through the whole map
+    for (my $i = 0; $i < @invlist; $i++) {
+        my $map = $map[$i];
+        printf STDERR "%d: i=%d, source=%x, map=%x\n",
+                      __LINE__, $i, $invlist[$i], $map if DEBUG;
+
+        # Ignore any lines that are unmapped
+        next if $map == $unmapped;
+
+        # Calculate this component of the mapping;  First the lhs
+        my $this_from = $invlist[$i];
+        my $next_from = $invlist[$i+1] if $i < @invlist - 1;
+
+        # The length of the rhs is the same as the lhs, except when special
+        my $next_map = $map - $this_from + $next_from
+                            if $map != $special_handling && defined $next_from;
+
+        if (DEBUG) {
+            printf STDERR "%d: i=%d, from=%x, to=%x",
+                          __LINE__, $i, $this_from, $map;
+            printf STDERR ", next_from=%x,", $next_from if defined $next_from;
+            printf STDERR ", next_map=%x", $next_map if defined $next_map;
+            print  STDERR "\n";
         }
+
+        # Add the lhs.
+        tr_append_to_invlist(\@from, $this_from, $next_from);
+
+        # And, the rhs; special handling doesn't get output as it really is an
+        # unmatched rhs
+        tr_append_to_invlist(\@to, $map, $next_map) if $map != $special_handling;
     }
 
-    my ($from, $to) = tr_invmap(\@invlist, \@map);
+    # Done with the input.
 
-    if ($flags & OPpTRANS_COMPLEMENT) {
-        shift @map;
-        pop @invlist;
-        my $throw_away;
-        ($from, $throw_away) = tr_invmap(\@invlist, \@map);
+    my $to;
+    if (join("", @from) eq join("", @to)) {
+
+        # the rhs is suppressed if identical to the left.  That's because
+        # tr/ABC/ABC/ can be written as tr/ABC//.  (Do this comparison before
+        # any complementing)
+        $to = "";
     }
+    else {
+        $to = tr_invlist_to_string(\@to, 0);  # rhs not complemented
+    }
 
-    if (DEBUG) {
-        print STDERR "Returning ", escape_str($from), "/",
-                                   escape_str($to), "\n";
-    }
+    my $from = tr_invlist_to_string(\@from,
+                                   ($flags & OPpTRANS_COMPLEMENT) != 0);
+
+    print STDERR "Returning ", escape_str($from), "/",
+                               escape_str($to), "\n" if DEBUG;
     return (escape_str($from), escape_str($to));
 }
 

Modified: trunk/Master/tlpkg/tlperl/lib/B/Op_private.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/B/Op_private.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/B/Op_private.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -118,7 +118,7 @@
 our %bits;
 
 
-our $VERSION = "5.032001";
+our $VERSION = "5.034000";
 
 $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
 $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
@@ -275,6 +275,7 @@
 @{$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{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]);

Modified: trunk/Master/tlpkg/tlperl/lib/B.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/B.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/B.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -20,7 +20,7 @@
 # walkoptree comes from B.xs
 
 BEGIN {
-    $B::VERSION = '1.80';
+    $B::VERSION = '1.82';
     @B::EXPORT_OK = ();
 
     # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK.
@@ -559,9 +559,9 @@
                 +------------+------------+
                 |            |            |
               B::PV        B::IV        B::NV
-                  \         /           /
-                   \       /           /
-                    B::PVIV           /
+               /  \         /           /
+              /    \       /           /
+        B::INVLIST  B::PVIV           /
                          \           /
                           \         /
                            \       /
@@ -735,6 +735,32 @@
 
 =back
 
+=head2 B::INVLIST Methods
+
+=over 4
+
+=item prev_index
+
+Returns the cache result of previous invlist_search() (internal usage)
+
+=item is_offset
+
+Returns a boolean value (0 or 1) to know if the invlist is using an offset.
+When false the list begins with the code point U+0000.
+When true the list begins with the following elements.
+
+=item array_len
+
+Returns an integer with the size of the array used to define the invlist.
+
+=item get_invlist_array
+
+This method returns a list of integers representing the array used by the
+invlist.
+Note: this cannot be used while in middle of iterating on an invlist and croaks.
+
+=back
+
 =head2 B::PVLV Methods
 
 =over 4

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/EXTERN.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/EXTERN.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/EXTERN.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -19,7 +19,7 @@
 #undef EXTCONST
 #undef dEXTCONST
 
-#  if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS)
+#  if defined(WIN32) && !defined(PERL_STATIC_SYMS)
     /* miniperl should not export anything */
 #    if defined(PERL_IS_MINIPERL)
 #      define EXT extern
@@ -26,7 +26,7 @@
 #      define dEXT 
 #      define EXTCONST extern const
 #      define dEXTCONST const
-#    elif defined(PERLDLL) || defined(__SYMBIAN32__)
+#    elif defined(PERLDLL)
 #      define EXT EXTERN_C __declspec(dllexport)
 #      define dEXT 
 #      define EXTCONST EXTERN_C __declspec(dllexport) const

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/INTERN.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/INTERN.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/INTERN.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -19,8 +19,7 @@
 #undef EXTCONST
 #undef dEXTCONST
 
-#  if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL)) \
-     || defined(__SYMBIAN32__)
+#  if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL))
 #    ifdef __cplusplus
 #      define EXT	__declspec(dllexport)
 #      define dEXT

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/XSUB.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/XSUB.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/XSUB.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -14,19 +14,25 @@
 /* first, some documentation for xsubpp-generated items */
 
 /*
-=head1 C<xsubpp> variables and internal functions
+=for apidoc_section $XS
 
-=for apidoc Amn|char*|CLASS
+F<xsubpp> compiles XS code into C.  See L<perlutil/xsubpp>.
+
+=for comment
+Some variables below are flagged with 'u' because Devel::PPPort can't currently
+readily test them as they spring into existence by compiling with xsubpp.
+
+=for apidoc Amnu|char*|CLASS
 Variable which is setup by C<xsubpp> to indicate the 
 class name for a C++ XS constructor.  This is always a C<char*>.  See
 C<L</THIS>>.
 
-=for apidoc Amn|(whatever)|RETVAL
+=for apidoc Amnu|type|RETVAL
 Variable which is setup by C<xsubpp> to hold the return value for an 
 XSUB.  This is always the proper type for the XSUB.  See 
 L<perlxs/"The RETVAL Variable">.
 
-=for apidoc Amn|(whatever)|THIS
+=for apidoc Amnu|type|THIS
 Variable which is setup by C<xsubpp> to designate the object in a C++ 
 XSUB.  This is always the proper type for the C++ object.  See C<L</CLASS>> and
 L<perlxs/"Using XS With C++">.
@@ -47,18 +53,27 @@
 =for apidoc Am|SV*|ST|int ix
 Used to access elements on the XSUB's stack.
 
-=for apidoc AmnU||XS
+=for apidoc Ay||XS|name
 Macro to declare an XSUB and its C parameter list.  This is handled by
-C<xsubpp>.  It is the same as using the more explicit C<XS_EXTERNAL> macro.
+C<xsubpp>.  It is the same as using the more explicit C<XS_EXTERNAL> macro; the
+latter is preferred.
 
-=for apidoc AmU||XS_INTERNAL
+=for apidoc Ayu||XS_INTERNAL|name
 Macro to declare an XSUB and its C parameter list without exporting the symbols.
 This is handled by C<xsubpp> and generally preferable over exporting the XSUB
 symbols unnecessarily.
 
-=for apidoc AmnU||XS_EXTERNAL
+=for comment
+XS_INTERNAL marked 'u' because declaring a function static within our test
+function doesn't work
+
+=for apidoc Ay||XS_EXTERNAL|name
 Macro to declare an XSUB and its C parameter list explicitly exporting the symbols.
 
+=for apidoc Ay||XSPROTO|name
+Macro used by C<L</XS_INTERNAL>> and C<L</XS_EXTERNAL>> to declare a function
+prototype.  You probably shouldn't be using this directly yourself.
+
 =for apidoc Amns||dAX
 Sets up the C<ax> variable.
 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
@@ -93,10 +108,10 @@
 */
 
 #ifndef PERL_UNUSED_ARG
-#  define PERL_UNUSED_ARG(x) ((void)x)
+#  define PERL_UNUSED_ARG(x) ((void)sizeof(x))
 #endif
 #ifndef PERL_UNUSED_VAR
-#  define PERL_UNUSED_VAR(x) ((void)x)
+#  define PERL_UNUSED_VAR(x) ((void)sizeof(x))
 #endif
 
 #define ST(off) PL_stack_base[ax + (off)]
@@ -127,9 +142,6 @@
 #if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
 #  define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
 #  define XS_INTERNAL(name) STATIC XSPROTO(name)
-#elif defined(__SYMBIAN32__)
-#  define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
-#  define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
 #elif defined(__cplusplus)
 #  define XS_EXTERNAL(name) extern "C" XSPROTO(name)
 #  define XS_INTERNAL(name) static XSPROTO(name)
@@ -163,16 +175,16 @@
    PL_xsubfilename. */
 #define dXSBOOTARGSXSAPIVERCHK  \
 	I32 ax = XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK;	\
-	SV **mark = PL_stack_base + ax; dSP; dITEMS
+	SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
 #define dXSBOOTARGSAPIVERCHK  \
 	I32 ax = XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK;	\
-	SV **mark = PL_stack_base + ax; dSP; dITEMS
+	SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
 /* dXSBOOTARGSNOVERCHK has no API in xsubpp to choose it so do
 #undef dXSBOOTARGSXSAPIVERCHK
 #define dXSBOOTARGSXSAPIVERCHK dXSBOOTARGSNOVERCHK */
 #define dXSBOOTARGSNOVERCHK  \
 	I32 ax = XS_SETXSUBFN_POPMARK;  \
-	SV **mark = PL_stack_base + ax; dSP; dITEMS
+	SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
 
 #define dXSTARG SV * const targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
 			     ? PAD_SV(PL_op->op_targ) : sv_newmortal())
@@ -203,7 +215,7 @@
 /* Typically used to return values from XS functions.       */
 
 /*
-=head1 Stack Manipulation Macros
+=for apidoc_section $stack
 
 =for apidoc Am|void|XST_mIV|int pos|IV iv
 Place an integer into the specified position C<pos> on the stack.  The
@@ -261,8 +273,6 @@
 =for apidoc Amns||XSRETURN_EMPTY
 Return an empty list from an XSUB immediately.
 
-=head1 Variables created by C<xsubpp> and C<xsubpp> internal functions
-
 =for apidoc AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
 Used by C<xsubpp> to hook up XSUBs as Perl subs.  Adds Perl prototypes to
 the subs.
@@ -281,7 +291,7 @@
 Macro to verify that the perl api version an XS module has been compiled against
 matches the api version of the perl interpreter it's being loaded into.
 
-=head1 Exception Handling (simple) Macros
+=for apidoc_section $exceptions
 
 =for apidoc Amns||dXCPT
 Set up necessary local variables for exception handling.
@@ -474,8 +484,6 @@
 #  define VTBL_amagicelem	&PL_vtbl_amagicelem
 #endif
 
-#include "perlapi.h"
-
 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
 #  undef aTHX
 #  undef aTHX_

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/av.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/av.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/av.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -37,23 +37,26 @@
  */
 
 /*
-=head1 Handy Values
-
 =for apidoc ADmnU||Nullav
 Null AV pointer.
 
 (deprecated - use C<(AV *)NULL> instead)
 
-=head1 Array Manipulation Functions
+=for apidoc Am|SSize_t|AvFILL|AV* av
+Same as C<L</av_top_index>> or C<L</av_tindex>>.
 
-=for apidoc Am|int|AvFILL|AV* av
-Same as C<av_top_index()> or C<av_tindex()>.
+=for apidoc Cm|SSize_t|AvFILLp|AV* av
 
-=for apidoc av_tindex
-Same as C<av_top_index()>.
+If the array C<av> is empty, this returns -1; otherwise it returns the maximum
+value of the indices of all the array elements which are currently defined in
+C<av>.  It does not handle magic, hence the C<p> private indication in its name.
 
-=for apidoc m|int|AvFILLp|AV* av
+=for apidoc Am|SV**|AvARRAY|AV* av
+Returns a pointer to the AV's internal SV* array.
 
+This is useful for doing pointer arithmetic on the array.
+If all you need is to look up an array element, then prefer C<av_fetch>.
+
 =cut
 */
 
@@ -80,8 +83,9 @@
 #define AvREALISH(av)	(SvFLAGS(av) & (SVpav_REAL|SVpav_REIFY))
                                           
 #define AvFILL(av)	((SvRMAGICAL((const SV *) (av))) \
-			 ? mg_size(MUTABLE_SV(av)) : AvFILLp(av))
-#define av_tindex(av)   av_top_index(av)
+                         ? mg_size(MUTABLE_SV(av)) : AvFILLp(av))
+#define av_top_index(av) AvFILL(av)
+#define av_tindex(av)    av_top_index(av)
 
 /* Note that it doesn't make sense to do this:
  *      SvGETMAGIC(av); IV x = av_tindex_nomg(av);

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/bitcount.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/bitcount.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/bitcount.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,3 +1,9 @@
+/* ..\bitcount.h:
+ * THIS FILE IS AUTO-GENERATED DURING THE BUILD by: ..\generate_uudmap.exe
+ *
+ * These values will populate PL_bitcount[]:
+ * this is a count of bits for each U8 value 0..255
+*/
 {
     0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 
     1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -29629,7 +29629,7 @@
 #  if 'A' == 65 /* ASCII/Latin1 */
 
 static const UV _Perl_IVCF_invlist[] = {  /* for ASCII/Latin1 */
-	1316,	/* Number of elements */
+	1318,	/* Number of elements */
 	148565664, /* Version and data structure type */
 	0,	/* 0 if the list starts at 0;
 		   1 if it starts at the element beyond 0 */
@@ -29640,6 +29640,8 @@
 	0x73,
 	0x74,
 	0x7B,
+	0xB5,
+	0xB6,
 	0xDF,
 	0xE0,
 	0xE5,
@@ -30991,7 +30993,8 @@
 	IVCF_use_AUX_TABLE_24 = -24,
 	IVCF_use_AUX_TABLE_25 = -25,
 	IVCF_use_AUX_TABLE_26 = -26,
-	IVCF_use_AUX_TABLE_27 = -27
+	IVCF_use_AUX_TABLE_27 = -27,
+	IVCF_use_AUX_TABLE_28 = -28
 } IVCF_enum;
 
 #define HAS_IVCF_AUX_TABLES
@@ -31007,129 +31010,134 @@
 };
 
 static const U32 IVCF_AUX_TABLE_3[] = {
+	0x39C,
+	0x3BC
+};
+
+static const U32 IVCF_AUX_TABLE_4[] = {
 	0xC5,
 	0x212B
 };
 
-static const U32 IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
 	0x1C4,
 	0x1C5
 };
 
-static const U32 IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
 	0x1C7,
 	0x1C8
 };
 
-static const U32 IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
 	0x1CA,
 	0x1CB
 };
 
-static const U32 IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
 	0x1F1,
 	0x1F2
 };
 
-static const U32 IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
 	0x392,
 	0x3D0
 };
 
-static const U32 IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
 	0x395,
 	0x3F5
 };
 
-static const U32 IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
 	0x398,
 	0x3D1,
 	0x3F4
 };
 
-static const U32 IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
 	0x345,
 	0x399,
 	0x1FBE
 };
 
-static const U32 IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_13[] = {
 	0x39A,
 	0x3F0
 };
 
-static const U32 IVCF_AUX_TABLE_13[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
 	0xB5,
 	0x39C
 };
 
-static const U32 IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
 	0x3A0,
 	0x3D6
 };
 
-static const U32 IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
 	0x3A1,
 	0x3F1
 };
 
-static const U32 IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
 	0x3A3,
 	0x3C2
 };
 
-static const U32 IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
 	0x3A6,
 	0x3D5
 };
 
-static const U32 IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
 	0x3A9,
 	0x2126
 };
 
-static const U32 IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
 	0x412,
 	0x1C80
 };
 
-static const U32 IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
 	0x414,
 	0x1C81
 };
 
-static const U32 IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
 	0x41E,
 	0x1C82
 };
 
-static const U32 IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
 	0x421,
 	0x1C83
 };
 
-static const U32 IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
 	0x422,
 	0x1C84,
 	0x1C85
 };
 
-static const U32 IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
 	0x42A,
 	0x1C86
 };
 
-static const U32 IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
 	0x462,
 	0x1C87
 };
 
-static const U32 IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
 	0x1E60,
 	0x1E9B
 };
 
-static const U32 IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_28[] = {
 	0x1C88,
 	0xA64A
 };
@@ -31162,7 +31170,8 @@
 	IVCF_AUX_TABLE_24,
 	IVCF_AUX_TABLE_25,
 	IVCF_AUX_TABLE_26,
-	IVCF_AUX_TABLE_27
+	IVCF_AUX_TABLE_27,
+	IVCF_AUX_TABLE_28
 };
 
 /* Parallel table to the above, giving the number of elements in each table
@@ -31179,9 +31188,9 @@
 	2	/* IVCF_AUX_TABLE_7 */,
 	2	/* IVCF_AUX_TABLE_8 */,
 	2	/* IVCF_AUX_TABLE_9 */,
-	3	/* IVCF_AUX_TABLE_10 */,
+	2	/* IVCF_AUX_TABLE_10 */,
 	3	/* IVCF_AUX_TABLE_11 */,
-	2	/* IVCF_AUX_TABLE_12 */,
+	3	/* IVCF_AUX_TABLE_12 */,
 	2	/* IVCF_AUX_TABLE_13 */,
 	2	/* IVCF_AUX_TABLE_14 */,
 	2	/* IVCF_AUX_TABLE_15 */,
@@ -31192,11 +31201,12 @@
 	2	/* IVCF_AUX_TABLE_20 */,
 	2	/* IVCF_AUX_TABLE_21 */,
 	2	/* IVCF_AUX_TABLE_22 */,
-	3	/* IVCF_AUX_TABLE_23 */,
-	2	/* IVCF_AUX_TABLE_24 */,
+	2	/* IVCF_AUX_TABLE_23 */,
+	3	/* IVCF_AUX_TABLE_24 */,
 	2	/* IVCF_AUX_TABLE_25 */,
 	2	/* IVCF_AUX_TABLE_26 */,
-	2	/* IVCF_AUX_TABLE_27 */
+	2	/* IVCF_AUX_TABLE_27 */,
+	2	/* IVCF_AUX_TABLE_28 */
 };
 
 static const I32 _Perl_IVCF_invmap[] = {  /* for ASCII/Latin1 */
@@ -31207,9 +31217,11 @@
 	IVCF_use_AUX_TABLE_2,
 	0x54,
 	0,
+	IVCF_use_AUX_TABLE_3,
+	0,
 	0x1E9E,
 	0xC0,
-	IVCF_use_AUX_TABLE_3,
+	IVCF_use_AUX_TABLE_4,
 	0xC6,
 	0,
 	0xD8,
@@ -31378,12 +31390,12 @@
 	0,
 	0x1F7,
 	0,
-	IVCF_use_AUX_TABLE_4,
-	0,
 	IVCF_use_AUX_TABLE_5,
 	0,
 	IVCF_use_AUX_TABLE_6,
 	0,
+	IVCF_use_AUX_TABLE_7,
+	0,
 	0x1CD,
 	0,
 	0x1CF,
@@ -31419,7 +31431,7 @@
 	0,
 	0x1EE,
 	0,
-	IVCF_use_AUX_TABLE_7,
+	IVCF_use_AUX_TABLE_8,
 	0,
 	0x1F4,
 	0,
@@ -31562,24 +31574,24 @@
 	0x388,
 	0x1FE3,
 	0x391,
-	IVCF_use_AUX_TABLE_8,
+	IVCF_use_AUX_TABLE_9,
 	0x393,
-	IVCF_use_AUX_TABLE_9,
+	IVCF_use_AUX_TABLE_10,
 	0x396,
-	IVCF_use_AUX_TABLE_10,
 	IVCF_use_AUX_TABLE_11,
 	IVCF_use_AUX_TABLE_12,
+	IVCF_use_AUX_TABLE_13,
 	0x39B,
-	IVCF_use_AUX_TABLE_13,
+	IVCF_use_AUX_TABLE_14,
 	0x39D,
-	IVCF_use_AUX_TABLE_14,
 	IVCF_use_AUX_TABLE_15,
+	IVCF_use_AUX_TABLE_16,
 	0,
-	IVCF_use_AUX_TABLE_16,
+	IVCF_use_AUX_TABLE_17,
 	0x3A4,
-	IVCF_use_AUX_TABLE_17,
+	IVCF_use_AUX_TABLE_18,
 	0x3A7,
-	IVCF_use_AUX_TABLE_18,
+	IVCF_use_AUX_TABLE_19,
 	0x3AA,
 	0x38C,
 	0x38E,
@@ -31618,22 +31630,22 @@
 	0x3FA,
 	0,
 	0x410,
-	IVCF_use_AUX_TABLE_19,
+	IVCF_use_AUX_TABLE_20,
 	0x413,
-	IVCF_use_AUX_TABLE_20,
+	IVCF_use_AUX_TABLE_21,
 	0x415,
-	IVCF_use_AUX_TABLE_21,
+	IVCF_use_AUX_TABLE_22,
 	0x41F,
-	IVCF_use_AUX_TABLE_22,
 	IVCF_use_AUX_TABLE_23,
+	IVCF_use_AUX_TABLE_24,
 	0x423,
-	IVCF_use_AUX_TABLE_24,
+	IVCF_use_AUX_TABLE_25,
 	0x42B,
 	0x400,
 	0,
 	0x460,
 	0,
-	IVCF_use_AUX_TABLE_25,
+	IVCF_use_AUX_TABLE_26,
 	0,
 	0x464,
 	0,
@@ -31941,7 +31953,7 @@
 	0,
 	0x1E5E,
 	0,
-	IVCF_use_AUX_TABLE_26,
+	IVCF_use_AUX_TABLE_27,
 	0,
 	0x1E62,
 	0,
@@ -32296,7 +32308,7 @@
 	0,
 	0xA648,
 	0,
-	IVCF_use_AUX_TABLE_27,
+	IVCF_use_AUX_TABLE_28,
 	0,
 	0xA64C,
 	0,
@@ -32530,7 +32542,7 @@
      && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
 
 static const UV _Perl_IVCF_invlist[] = {  /* for EBCDIC 1047 */
-	1331,	/* Number of elements */
+	1333,	/* Number of elements */
 	148565664, /* Version and data structure type */
 	0,	/* 0 if the list starts at 0;
 		   1 if it starts at the element beyond 0 */
@@ -32556,6 +32568,8 @@
 	0x9A,
 	0x9C,
 	0x9D,
+	0xA0,
+	0xA1,
 	0xA2,
 	0xA3,
 	0xAA,
@@ -33910,7 +33924,8 @@
 	IVCF_use_AUX_TABLE_24 = -24,
 	IVCF_use_AUX_TABLE_25 = -25,
 	IVCF_use_AUX_TABLE_26 = -26,
-	IVCF_use_AUX_TABLE_27 = -27
+	IVCF_use_AUX_TABLE_27 = -27,
+	IVCF_use_AUX_TABLE_28 = -28
 } IVCF_enum;
 
 #define HAS_IVCF_AUX_TABLES
@@ -33926,129 +33941,134 @@
 };
 
 static const U32 IVCF_AUX_TABLE_3[] = {
+	0x39C,
+	0x3BC
+};
+
+static const U32 IVCF_AUX_TABLE_4[] = {
 	0xE2,
 	0x17F
 };
 
-static const U32 IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
 	0x1C4,
 	0x1C5
 };
 
-static const U32 IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
 	0x1C7,
 	0x1C8
 };
 
-static const U32 IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
 	0x1CA,
 	0x1CB
 };
 
-static const U32 IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
 	0x1F1,
 	0x1F2
 };
 
-static const U32 IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
 	0x392,
 	0x3D0
 };
 
-static const U32 IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
 	0x395,
 	0x3F5
 };
 
-static const U32 IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
 	0x398,
 	0x3D1,
 	0x3F4
 };
 
-static const U32 IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
 	0x345,
 	0x399,
 	0x1FBE
 };
 
-static const U32 IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_13[] = {
 	0x39A,
 	0x3F0
 };
 
-static const U32 IVCF_AUX_TABLE_13[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
 	0xA0,
 	0x39C
 };
 
-static const U32 IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
 	0x3A0,
 	0x3D6
 };
 
-static const U32 IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
 	0x3A1,
 	0x3F1
 };
 
-static const U32 IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
 	0x3A3,
 	0x3C2
 };
 
-static const U32 IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
 	0x3A6,
 	0x3D5
 };
 
-static const U32 IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
 	0x3A9,
 	0x2126
 };
 
-static const U32 IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
 	0x412,
 	0x1C80
 };
 
-static const U32 IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
 	0x414,
 	0x1C81
 };
 
-static const U32 IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
 	0x41E,
 	0x1C82
 };
 
-static const U32 IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
 	0x421,
 	0x1C83
 };
 
-static const U32 IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
 	0x422,
 	0x1C84,
 	0x1C85
 };
 
-static const U32 IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
 	0x42A,
 	0x1C86
 };
 
-static const U32 IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
 	0x462,
 	0x1C87
 };
 
-static const U32 IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
 	0x1E60,
 	0x1E9B
 };
 
-static const U32 IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_28[] = {
 	0x1C88,
 	0xA64A
 };
@@ -34081,7 +34101,8 @@
 	IVCF_AUX_TABLE_24,
 	IVCF_AUX_TABLE_25,
 	IVCF_AUX_TABLE_26,
-	IVCF_AUX_TABLE_27
+	IVCF_AUX_TABLE_27,
+	IVCF_AUX_TABLE_28
 };
 
 /* Parallel table to the above, giving the number of elements in each table
@@ -34098,9 +34119,9 @@
 	2	/* IVCF_AUX_TABLE_7 */,
 	2	/* IVCF_AUX_TABLE_8 */,
 	2	/* IVCF_AUX_TABLE_9 */,
-	3	/* IVCF_AUX_TABLE_10 */,
+	2	/* IVCF_AUX_TABLE_10 */,
 	3	/* IVCF_AUX_TABLE_11 */,
-	2	/* IVCF_AUX_TABLE_12 */,
+	3	/* IVCF_AUX_TABLE_12 */,
 	2	/* IVCF_AUX_TABLE_13 */,
 	2	/* IVCF_AUX_TABLE_14 */,
 	2	/* IVCF_AUX_TABLE_15 */,
@@ -34111,11 +34132,12 @@
 	2	/* IVCF_AUX_TABLE_20 */,
 	2	/* IVCF_AUX_TABLE_21 */,
 	2	/* IVCF_AUX_TABLE_22 */,
-	3	/* IVCF_AUX_TABLE_23 */,
-	2	/* IVCF_AUX_TABLE_24 */,
+	2	/* IVCF_AUX_TABLE_23 */,
+	3	/* IVCF_AUX_TABLE_24 */,
 	2	/* IVCF_AUX_TABLE_25 */,
 	2	/* IVCF_AUX_TABLE_26 */,
-	2	/* IVCF_AUX_TABLE_27 */
+	2	/* IVCF_AUX_TABLE_27 */,
+	2	/* IVCF_AUX_TABLE_28 */
 };
 
 static const I32 _Perl_IVCF_invmap[] = {  /* for EBCDIC 1047 */
@@ -34142,6 +34164,8 @@
 	0x9E,
 	0,
 	IVCF_use_AUX_TABLE_3,
+	0,
+	IVCF_use_AUX_TABLE_4,
 	0xE3,
 	0,
 	0xEB,
@@ -34312,12 +34336,12 @@
 	0,
 	0x1F7,
 	0,
-	IVCF_use_AUX_TABLE_4,
-	0,
 	IVCF_use_AUX_TABLE_5,
 	0,
 	IVCF_use_AUX_TABLE_6,
 	0,
+	IVCF_use_AUX_TABLE_7,
+	0,
 	0x1CD,
 	0,
 	0x1CF,
@@ -34353,7 +34377,7 @@
 	0,
 	0x1EE,
 	0,
-	IVCF_use_AUX_TABLE_7,
+	IVCF_use_AUX_TABLE_8,
 	0,
 	0x1F4,
 	0,
@@ -34496,24 +34520,24 @@
 	0x388,
 	0x1FE3,
 	0x391,
-	IVCF_use_AUX_TABLE_8,
+	IVCF_use_AUX_TABLE_9,
 	0x393,
-	IVCF_use_AUX_TABLE_9,
+	IVCF_use_AUX_TABLE_10,
 	0x396,
-	IVCF_use_AUX_TABLE_10,
 	IVCF_use_AUX_TABLE_11,
 	IVCF_use_AUX_TABLE_12,
+	IVCF_use_AUX_TABLE_13,
 	0x39B,
-	IVCF_use_AUX_TABLE_13,
+	IVCF_use_AUX_TABLE_14,
 	0x39D,
-	IVCF_use_AUX_TABLE_14,
 	IVCF_use_AUX_TABLE_15,
+	IVCF_use_AUX_TABLE_16,
 	0,
-	IVCF_use_AUX_TABLE_16,
+	IVCF_use_AUX_TABLE_17,
 	0x3A4,
-	IVCF_use_AUX_TABLE_17,
+	IVCF_use_AUX_TABLE_18,
 	0x3A7,
-	IVCF_use_AUX_TABLE_18,
+	IVCF_use_AUX_TABLE_19,
 	0x3AA,
 	0x38C,
 	0x38E,
@@ -34552,22 +34576,22 @@
 	0x3FA,
 	0,
 	0x410,
-	IVCF_use_AUX_TABLE_19,
+	IVCF_use_AUX_TABLE_20,
 	0x413,
-	IVCF_use_AUX_TABLE_20,
+	IVCF_use_AUX_TABLE_21,
 	0x415,
-	IVCF_use_AUX_TABLE_21,
+	IVCF_use_AUX_TABLE_22,
 	0x41F,
-	IVCF_use_AUX_TABLE_22,
 	IVCF_use_AUX_TABLE_23,
+	IVCF_use_AUX_TABLE_24,
 	0x423,
-	IVCF_use_AUX_TABLE_24,
+	IVCF_use_AUX_TABLE_25,
 	0x42B,
 	0x400,
 	0,
 	0x460,
 	0,
-	IVCF_use_AUX_TABLE_25,
+	IVCF_use_AUX_TABLE_26,
 	0,
 	0x464,
 	0,
@@ -34875,7 +34899,7 @@
 	0,
 	0x1E5E,
 	0,
-	IVCF_use_AUX_TABLE_26,
+	IVCF_use_AUX_TABLE_27,
 	0,
 	0x1E62,
 	0,
@@ -35230,7 +35254,7 @@
 	0,
 	0xA648,
 	0,
-	IVCF_use_AUX_TABLE_27,
+	IVCF_use_AUX_TABLE_28,
 	0,
 	0xA64C,
 	0,
@@ -35464,7 +35488,7 @@
      && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
 
 static const UV _Perl_IVCF_invlist[] = {  /* for EBCDIC 037 */
-	1329,	/* Number of elements */
+	1331,	/* Number of elements */
 	148565664, /* Version and data structure type */
 	0,	/* 0 if the list starts at 0;
 		   1 if it starts at the element beyond 0 */
@@ -35488,6 +35512,8 @@
 	0x9A,
 	0x9C,
 	0x9D,
+	0xA0,
+	0xA1,
 	0xA2,
 	0xA3,
 	0xAA,
@@ -36842,7 +36868,8 @@
 	IVCF_use_AUX_TABLE_24 = -24,
 	IVCF_use_AUX_TABLE_25 = -25,
 	IVCF_use_AUX_TABLE_26 = -26,
-	IVCF_use_AUX_TABLE_27 = -27
+	IVCF_use_AUX_TABLE_27 = -27,
+	IVCF_use_AUX_TABLE_28 = -28
 } IVCF_enum;
 
 #define HAS_IVCF_AUX_TABLES
@@ -36858,129 +36885,134 @@
 };
 
 static const U32 IVCF_AUX_TABLE_3[] = {
+	0x39C,
+	0x3BC
+};
+
+static const U32 IVCF_AUX_TABLE_4[] = {
 	0xE2,
 	0x17F
 };
 
-static const U32 IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
 	0x1C4,
 	0x1C5
 };
 
-static const U32 IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
 	0x1C7,
 	0x1C8
 };
 
-static const U32 IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
 	0x1CA,
 	0x1CB
 };
 
-static const U32 IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
 	0x1F1,
 	0x1F2
 };
 
-static const U32 IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
 	0x392,
 	0x3D0
 };
 
-static const U32 IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
 	0x395,
 	0x3F5
 };
 
-static const U32 IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
 	0x398,
 	0x3D1,
 	0x3F4
 };
 
-static const U32 IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
 	0x345,
 	0x399,
 	0x1FBE
 };
 
-static const U32 IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_13[] = {
 	0x39A,
 	0x3F0
 };
 
-static const U32 IVCF_AUX_TABLE_13[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
 	0xA0,
 	0x39C
 };
 
-static const U32 IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
 	0x3A0,
 	0x3D6
 };
 
-static const U32 IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
 	0x3A1,
 	0x3F1
 };
 
-static const U32 IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
 	0x3A3,
 	0x3C2
 };
 
-static const U32 IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
 	0x3A6,
 	0x3D5
 };
 
-static const U32 IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
 	0x3A9,
 	0x2126
 };
 
-static const U32 IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
 	0x412,
 	0x1C80
 };
 
-static const U32 IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
 	0x414,
 	0x1C81
 };
 
-static const U32 IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
 	0x41E,
 	0x1C82
 };
 
-static const U32 IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
 	0x421,
 	0x1C83
 };
 
-static const U32 IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
 	0x422,
 	0x1C84,
 	0x1C85
 };
 
-static const U32 IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
 	0x42A,
 	0x1C86
 };
 
-static const U32 IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
 	0x462,
 	0x1C87
 };
 
-static const U32 IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
 	0x1E60,
 	0x1E9B
 };
 
-static const U32 IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_28[] = {
 	0x1C88,
 	0xA64A
 };
@@ -37013,7 +37045,8 @@
 	IVCF_AUX_TABLE_24,
 	IVCF_AUX_TABLE_25,
 	IVCF_AUX_TABLE_26,
-	IVCF_AUX_TABLE_27
+	IVCF_AUX_TABLE_27,
+	IVCF_AUX_TABLE_28
 };
 
 /* Parallel table to the above, giving the number of elements in each table
@@ -37030,9 +37063,9 @@
 	2	/* IVCF_AUX_TABLE_7 */,
 	2	/* IVCF_AUX_TABLE_8 */,
 	2	/* IVCF_AUX_TABLE_9 */,
-	3	/* IVCF_AUX_TABLE_10 */,
+	2	/* IVCF_AUX_TABLE_10 */,
 	3	/* IVCF_AUX_TABLE_11 */,
-	2	/* IVCF_AUX_TABLE_12 */,
+	3	/* IVCF_AUX_TABLE_12 */,
 	2	/* IVCF_AUX_TABLE_13 */,
 	2	/* IVCF_AUX_TABLE_14 */,
 	2	/* IVCF_AUX_TABLE_15 */,
@@ -37043,11 +37076,12 @@
 	2	/* IVCF_AUX_TABLE_20 */,
 	2	/* IVCF_AUX_TABLE_21 */,
 	2	/* IVCF_AUX_TABLE_22 */,
-	3	/* IVCF_AUX_TABLE_23 */,
-	2	/* IVCF_AUX_TABLE_24 */,
+	2	/* IVCF_AUX_TABLE_23 */,
+	3	/* IVCF_AUX_TABLE_24 */,
 	2	/* IVCF_AUX_TABLE_25 */,
 	2	/* IVCF_AUX_TABLE_26 */,
-	2	/* IVCF_AUX_TABLE_27 */
+	2	/* IVCF_AUX_TABLE_27 */,
+	2	/* IVCF_AUX_TABLE_28 */
 };
 
 static const I32 _Perl_IVCF_invmap[] = {  /* for EBCDIC 037 */
@@ -37072,6 +37106,8 @@
 	0x9E,
 	0,
 	IVCF_use_AUX_TABLE_3,
+	0,
+	IVCF_use_AUX_TABLE_4,
 	0xE3,
 	0,
 	0xEB,
@@ -37242,12 +37278,12 @@
 	0,
 	0x1F7,
 	0,
-	IVCF_use_AUX_TABLE_4,
-	0,
 	IVCF_use_AUX_TABLE_5,
 	0,
 	IVCF_use_AUX_TABLE_6,
 	0,
+	IVCF_use_AUX_TABLE_7,
+	0,
 	0x1CD,
 	0,
 	0x1CF,
@@ -37283,7 +37319,7 @@
 	0,
 	0x1EE,
 	0,
-	IVCF_use_AUX_TABLE_7,
+	IVCF_use_AUX_TABLE_8,
 	0,
 	0x1F4,
 	0,
@@ -37426,24 +37462,24 @@
 	0x388,
 	0x1FE3,
 	0x391,
-	IVCF_use_AUX_TABLE_8,
+	IVCF_use_AUX_TABLE_9,
 	0x393,
-	IVCF_use_AUX_TABLE_9,
+	IVCF_use_AUX_TABLE_10,
 	0x396,
-	IVCF_use_AUX_TABLE_10,
 	IVCF_use_AUX_TABLE_11,
 	IVCF_use_AUX_TABLE_12,
+	IVCF_use_AUX_TABLE_13,
 	0x39B,
-	IVCF_use_AUX_TABLE_13,
+	IVCF_use_AUX_TABLE_14,
 	0x39D,
-	IVCF_use_AUX_TABLE_14,
 	IVCF_use_AUX_TABLE_15,
+	IVCF_use_AUX_TABLE_16,
 	0,
-	IVCF_use_AUX_TABLE_16,
+	IVCF_use_AUX_TABLE_17,
 	0x3A4,
-	IVCF_use_AUX_TABLE_17,
+	IVCF_use_AUX_TABLE_18,
 	0x3A7,
-	IVCF_use_AUX_TABLE_18,
+	IVCF_use_AUX_TABLE_19,
 	0x3AA,
 	0x38C,
 	0x38E,
@@ -37482,22 +37518,22 @@
 	0x3FA,
 	0,
 	0x410,
-	IVCF_use_AUX_TABLE_19,
+	IVCF_use_AUX_TABLE_20,
 	0x413,
-	IVCF_use_AUX_TABLE_20,
+	IVCF_use_AUX_TABLE_21,
 	0x415,
-	IVCF_use_AUX_TABLE_21,
+	IVCF_use_AUX_TABLE_22,
 	0x41F,
-	IVCF_use_AUX_TABLE_22,
 	IVCF_use_AUX_TABLE_23,
+	IVCF_use_AUX_TABLE_24,
 	0x423,
-	IVCF_use_AUX_TABLE_24,
+	IVCF_use_AUX_TABLE_25,
 	0x42B,
 	0x400,
 	0,
 	0x460,
 	0,
-	IVCF_use_AUX_TABLE_25,
+	IVCF_use_AUX_TABLE_26,
 	0,
 	0x464,
 	0,
@@ -37805,7 +37841,7 @@
 	0,
 	0x1E5E,
 	0,
-	IVCF_use_AUX_TABLE_26,
+	IVCF_use_AUX_TABLE_27,
 	0,
 	0x1E62,
 	0,
@@ -38160,7 +38196,7 @@
 	0,
 	0xA648,
 	0,
-	IVCF_use_AUX_TABLE_27,
+	IVCF_use_AUX_TABLE_28,
 	0,
 	0xA64C,
 	0,
@@ -419864,9 +419900,9 @@
  * baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
  * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
  * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 28076ceb3f4e2514ea9db243f4b918b9a7c2807b036237e2276b99b2659d9474 lib/unicore/mktables
  * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
- * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
- * 7a7e778e903508b1c244a77bae57ec57606ab775bb5f81719dbb122eb66d4259 regen/mk_invlists.pl
+ * 24120d5e0c9685c442c93bc1dbea9b85ef973bf8e9474baf0e55b160c288226b regen/charset_translations.pl
+ * 9f74e34278592ddf58fef8c32236b294e94ea5e12627f911f4563e8040a07292 regen/mk_PL_charclass.pl
+ * 5eb9e6c825496cc9aa705e3cd33bc6d5a9657dcca16d4c4acc4824ff30b34a26 regen/mk_invlists.pl
  * ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/config.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/config.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/config.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -9,7 +9,7 @@
 
 /* Package name      : perl5
  * Source directory  : 
- * Configuration time: Tue Feb 23 20:23:57 2021
+ * Configuration time: Tue Mar  1 12:42:18 2022
  * Configured by     : siepo
  * Target system     : 
  */
@@ -216,11 +216,11 @@
  *	This symbol, if defined, indicates that the lstat routine is
  *	available to do file stats on symbolic links.
  */
-/*#define HAS_LSTAT		/ **/
+#define HAS_LSTAT		/**/
 
 /* HAS_MBLEN:
  *	This symbol, if defined, indicates that the mblen routine is available
- *	to find the number of bytes in a multibye character.
+ *	to find the number of bytes in a multibyte character.
  */
 #define HAS_MBLEN		/**/
 
@@ -342,7 +342,7 @@
  *	This symbol, if defined, indicates that the readlink routine is
  *	available to read the value of a symbolic link.
  */
-/*#define HAS_READLINK		/ **/
+#define HAS_READLINK		/**/
 
 /* HAS_REGCOMP:
  *	This symbol, if defined, indicates that the regcomp() routine is
@@ -500,7 +500,7 @@
  *	This symbol, if defined, indicates that the symlink routine is available
  *	to create symbolic links.
  */
-/*#define HAS_SYMLINK	/ **/
+#define HAS_SYMLINK	/**/
 
 /* HAS_SYSCALL:
  *	This symbol, if defined, indicates that the syscall routine is
@@ -1369,7 +1369,7 @@
  *	feature tests from Configure are generally more reliable.
  */
 #define OSNAME "MSWin32"		/**/
-#define OSVERS "10.0.19042.804"		/**/
+#define OSVERS "10.0.19042.508"		/**/
 
 /* CAT2:
  *	This macro concatenates 2 tokens together.
@@ -1732,6 +1732,8 @@
  *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
  *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
  *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
+ *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
+ *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
  *	LONG_DOUBLE_IS_VAX_H_FLOAT
  *	LONG_DOUBLE_IS_UNKNOWN_FORMAT
  *	It is only defined if the system supports long doubles.
@@ -1969,11 +1971,11 @@
  *	This symbol, if defined, indicates that the union semun is
  *	defined by including <sys/sem.h>.  If not, the user code
  *	probably needs to define it as:
- *	union semun {
+ *	 union semun {
  *	    int val;
  *	    struct semid_ds *buf;
  *	    unsigned short *array;
- *	}
+ *	 }
  */
 /* USE_SEMCTL_SEMUN:
  *	This symbol, if defined, indicates that union semun is
@@ -2984,7 +2986,7 @@
 
 /* HAS_MEMMEM:
  *	This symbol, if defined, indicates that the memmem routine is
- *	available to return a pointer to the start of the first occurance
+ *	available to return a pointer to the start of the first occurrence
  *	of a substring in a memory area (or NULL if not found).
  *	In glibc, memmem is a GNU extension.  The function is visible in
  *	libc, but the prototype is only visible if _GNU_SOURCE is #defined.
@@ -4212,6 +4214,12 @@
  */
 /*#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.
@@ -4532,6 +4540,19 @@
 /*#define HAS_ENDSERVENT_R	/ **/
 #define ENDSERVENT_R_PROTO 0	/**/
 
+/* GETENV_PRESERVES_OTHER_THREAD:
+ *	This symbol, if defined, indicates that the getenv system call doesn't
+ *	zap the static buffer of getenv() in a different thread.
+ *
+ *	The typical getenv() implementation will return a pointer to the proper
+ *	position in **environ.  But some may instead copy them to a static
+ *	buffer in getenv().  If there is a per-thread instance of that buffer,
+ *	or the return points to **environ, then a many-reader/1-writer mutex
+ *	will work; otherwise an exclusive locking mutex is required to prevent
+ *	races.
+ */
+#define GETENV_PRESERVES_OTHER_THREAD	/**/
+
 /* HAS_GETGRENT_R:
  *	This symbol, if defined, indicates that the getgrent_r routine
  *	is available to getgrent re-entrantly.
@@ -4828,6 +4849,9 @@
 #define L_R_TZSET
 #endif
 
+/* L_R_TZSET:
+ *	If localtime_r() needs tzset, it is defined in this define
+ */
 /* LOCALTIME_R_PROTO:
  *	This symbol encodes the prototype of localtime_r.
  *	It is zero if d_localtime_r is undef, and one of the
@@ -5119,10 +5143,11 @@
  *	This symbol, if defined, indicates that Perl should be built to
  *	use the interpreter-based threading implementation.
  */
-/* USE_5005THREADS:
- *	This symbol, if defined, indicates that Perl should be built to
- *	use the 5.005-based threading implementation.
- *	Only valid up to 5.8.x.
+/* USE_THREADS:
+ *	This symbol, if defined, indicates that Perl should
+ *	be built to use threads.  At present, it is a synonym for
+ *	and USE_ITHREADS, but eventually the source ought to be
+ *	changed to use this to mean _any_ threading implementation.
  */
 /* OLD_PTHREADS_API:
  *	This symbol, if defined, indicates that Perl should
@@ -5133,11 +5158,8 @@
  *	try to use the various _r versions of library functions.
  *	This is extremely experimental.
  */
-/*#define	USE_5005THREADS		/ **/
 #define	USE_ITHREADS		/**/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define		USE_THREADS		/* until src is revised*/
-#endif
+#define		USE_THREADS		/**/
 /*#define	OLD_PTHREADS_API		/ **/
 /*#define	USE_REENTRANT_API	/ **/
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/cop.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/cop.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/cop.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -166,12 +166,13 @@
     } STMT_END
 
 /*
-=head1 COP Hint Hashes
+=for apidoc_section $COP
 */
 
 typedef struct refcounted_he COPHH;
 
 #define COPHH_KEY_UTF8 REFCOUNTED_HE_KEY_UTF8
+#define COPHH_EXISTS REFCOUNTED_HE_EXISTS
 
 /*
 =for apidoc Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
@@ -229,6 +230,58 @@
     Perl_refcounted_he_fetch_sv(aTHX_ cophh, key, hash, flags)
 
 /*
+=for apidoc Amx|bool|cophh_exists_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+
+Look up the entry in the cop hints hash C<cophh> with the key specified by
+C<keypv> and C<keylen>.  If C<flags> has the C<COPHH_KEY_UTF8> bit set,
+the key octets are interpreted as UTF-8, otherwise they are interpreted
+as Latin-1.  C<hash> is a precomputed hash of the key string, or zero if
+it has not been precomputed.  Returns true if a value exists, and false
+otherwise.
+
+=cut
+*/
+
+#define cophh_exists_pvn(cophh, keypv, keylen, hash, flags) \
+    cBOOL(Perl_refcounted_he_fetch_pvn(aTHX_ cophh, keypv, keylen, hash, flags | COPHH_EXISTS))
+
+/*
+=for apidoc Amx|bool|cophh_exists_pvs|const COPHH *cophh|"key"|U32 flags
+
+Like L</cophh_exists_pvn>, but takes a literal string instead
+of a string/length pair, and no precomputed hash.
+
+=cut
+*/
+
+#define cophh_exists_pvs(cophh, key, flags) \
+    cBOOL(Perl_refcounted_he_fetch_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, flags | COPHH_EXISTS))
+
+/*
+=for apidoc Amx|bool|cophh_exists_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
+
+Like L</cophh_exists_pvn>, but takes a nul-terminated string instead of
+a string/length pair.
+
+=cut
+*/
+
+#define cophh_exists_pv(cophh, key, hash, flags) \
+    cBOOL(Perl_refcounted_he_fetch_pv(aTHX_ cophh, key, hash, flags | COPHH_EXISTS))
+
+/*
+=for apidoc Amx|bool|cophh_exists_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
+
+Like L</cophh_exists_pvn>, but takes a Perl scalar instead of a
+string/length pair.
+
+=cut
+*/
+
+#define cophh_exists_sv(cophh, key, hash, flags) \
+    cBOOL(Perl_refcounted_he_fetch_sv(aTHX_ cophh, key, hash, flags | COPHH_EXISTS))
+
+/*
 =for apidoc Amx|HV *|cophh_2hv|const COPHH *cophh|U32 flags
 
 Generates and returns a standard Perl hash representing the full set of
@@ -299,7 +352,7 @@
     Perl_refcounted_he_new_pvn(aTHX_ cophh, keypv, keylen, hash, value, flags)
 
 /*
-=for apidoc Amx|COPHH *|cophh_store_pvs|const COPHH *cophh|"key"|SV *value|U32 flags
+=for apidoc Amx|COPHH *|cophh_store_pvs|COPHH *cophh|"key"|SV *value|U32 flags
 
 Like L</cophh_store_pvn>, but takes a literal string instead
 of a string/length pair, and no precomputed hash.
@@ -311,7 +364,7 @@
     Perl_refcounted_he_new_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, value, flags)
 
 /*
-=for apidoc Amx|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
+=for apidoc Amx|COPHH *|cophh_store_pv|COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
 
 Like L</cophh_store_pvn>, but takes a nul-terminated string instead of
 a string/length pair.
@@ -323,7 +376,7 @@
     Perl_refcounted_he_new_pv(aTHX_ cophh, key, hash, value, flags)
 
 /*
-=for apidoc Amx|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
+=for apidoc Amx|COPHH *|cophh_store_sv|COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
 
 Like L</cophh_store_pvn>, but takes a Perl scalar instead of a
 string/length pair.
@@ -356,7 +409,7 @@
 	(SV *)NULL, flags)
 
 /*
-=for apidoc Amx|COPHH *|cophh_delete_pvs|const COPHH *cophh|"key"|U32 flags
+=for apidoc Amx|COPHH *|cophh_delete_pvs|COPHH *cophh|"key"|U32 flags
 
 Like L</cophh_delete_pvn>, but takes a literal string instead
 of a string/length pair, and no precomputed hash.
@@ -369,7 +422,7 @@
 	(SV *)NULL, flags)
 
 /*
-=for apidoc Amx|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
+=for apidoc Amx|COPHH *|cophh_delete_pv|COPHH *cophh|char *key|U32 hash|U32 flags
 
 Like L</cophh_delete_pvn>, but takes a nul-terminated string instead of
 a string/length pair.
@@ -381,7 +434,7 @@
     Perl_refcounted_he_new_pv(aTHX_ cophh, key, hash, (SV *)NULL, flags)
 
 /*
-=for apidoc Amx|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
+=for apidoc Amx|COPHH *|cophh_delete_sv|COPHH *cophh|SV *key|U32 hash|U32 flags
 
 Like L</cophh_delete_pvn>, but takes a Perl scalar instead of a
 string/length pair.
@@ -403,10 +456,10 @@
 #ifdef USE_ITHREADS
     PADOFFSET	cop_stashoff;	/* offset into PL_stashpad, for the
 				   package the line was compiled in */
-    char *	cop_file;	/* file name the following line # is from */
+    char *	cop_file;	/* name of file this command is from */
 #else
     HV *	cop_stash;	/* package line was compiled in */
-    GV *	cop_filegv;	/* file the following line # is from */
+    GV *	cop_filegv;	/* name of GV file this command is from */
 #endif
     U32		cop_hints;	/* hints bits from pragmata */
     U32		cop_seq;	/* parse sequence number */
@@ -423,6 +476,49 @@
     U32		cop_features;
 };
 
+/*
+=for apidoc Am|const char *|CopFILE|const COP * c
+Returns the name of the file associated with the C<COP> C<c>
+
+=for apidoc Am|STRLEN|CopLINE|const COP * c
+Returns the line number in the source code associated with the C<COP> C<c>
+
+=for apidoc Am|AV *|CopFILEAV|const COP * c
+Returns the AV associated with the C<COP> C<c>
+
+=for apidoc Am|SV *|CopFILESV|const COP * c
+Returns the SV associated with the C<COP> C<c>
+
+=for apidoc Am|void|CopFILE_set|COP * c|const char * pv
+Makes C<pv> the name of the file associated with the C<COP> C<c>
+
+=for apidoc Am|GV *|CopFILEGV|const COP * c
+Returns the GV associated with the C<COP> C<c>
+
+=for apidoc CopFILEGV_set
+Available only on unthreaded perls.  Makes C<pv> the name of the file
+associated with the C<COP> C<c>
+
+=for apidoc Am|HV *|CopSTASH|const COP * c
+Returns the stash associated with C<c>.
+
+=for apidoc Am|bool|CopSTASH_eq|const COP * c|const HV * hv
+Returns a boolean as to whether or not C<hv> is the stash associated with C<c>.
+
+=for apidoc Am|bool|CopSTASH_set|COP * c|HV * hv
+Set the stash associated with C<c> to C<hv>.
+
+=for apidoc Am|char *|CopSTASHPV|const COP * c
+Returns the package name of the stash associated with C<c>, or C<NULL> if no
+associated stash
+
+=for apidoc Am|void|CopSTASHPV_set|COP * c|const char * pv
+Set the package name of the stash associated with C<c>, to the NUL-terminated C
+string C<p>, creating the package if necessary.
+
+=cut
+*/
+
 #ifdef USE_ITHREADS
 #  define CopFILE(c)		((c)->cop_file)
 #  define CopFILEGV(c)		(CopFILE(c) \
@@ -452,7 +548,7 @@
 #  else
 #    define CopFILE_free(c)	(PerlMemShared_free(CopFILE(c)),(CopFILE(c) = NULL))
 #  endif
-#else
+#else /* Above: no threads; Below yes threads */
 #  define CopFILEGV(c)		((c)->cop_filegv)
 #  define CopFILEGV_set(c,gv)	((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
 #  define CopFILE_set(c,pv)	CopFILEGV_set((c), gv_fetchfile(pv))
@@ -464,7 +560,7 @@
 #  else
 #    define CopFILEAVx(c)	(GvAV(CopFILEGV(c)))
 # endif
-#  define CopFILE(c)		(CopFILEGV(c) \
+#  define CopFILE(c)		(CopFILEGV(c) /* +2 for '_<' */         \
 				    ? GvNAME(CopFILEGV(c))+2 : NULL)
 #  define CopSTASH(c)		((c)->cop_stash)
 #  define CopSTASH_set(c,hv)	((c)->cop_stash = (hv))
@@ -481,10 +577,6 @@
 #define CopHINTHASH_set(c,h)	((c)->cop_hints_hash = (h))
 
 /*
-=head1 COP Hint Reading
-*/
-
-/*
 =for apidoc Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
 
 Look up the hint entry in the cop C<cop> with the key specified by
@@ -538,6 +630,58 @@
     cophh_fetch_sv(CopHINTHASH_get(cop), key, hash, flags)
 
 /*
+=for apidoc Am|bool|cop_hints_exists_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+
+Look up the hint entry in the cop C<cop> with the key specified by
+C<keypv> and C<keylen>.  If C<flags> has the C<COPHH_KEY_UTF8> bit set,
+the key octets are interpreted as UTF-8, otherwise they are interpreted
+as Latin-1.  C<hash> is a precomputed hash of the key string, or zero if
+it has not been precomputed.  Returns true if a value exists, and false
+otherwise.
+
+=cut
+*/
+
+#define cop_hints_exists_pvn(cop, keypv, keylen, hash, flags) \
+    cophh_exists_pvn(CopHINTHASH_get(cop), keypv, keylen, hash, flags)
+
+/*
+=for apidoc Am|bool|cop_hints_exists_pvs|const COP *cop|"key"|U32 flags
+
+Like L</cop_hints_exists_pvn>, but takes a literal string
+instead of a string/length pair, and no precomputed hash.
+
+=cut
+*/
+
+#define cop_hints_exists_pvs(cop, key, flags) \
+    cophh_exists_pvs(CopHINTHASH_get(cop), key, flags)
+
+/*
+=for apidoc Am|bool|cop_hints_exists_pv|const COP *cop|const char *key|U32 hash|U32 flags
+
+Like L</cop_hints_exists_pvn>, but takes a nul-terminated string instead
+of a string/length pair.
+
+=cut
+*/
+
+#define cop_hints_exists_pv(cop, key, hash, flags) \
+    cophh_exists_pv(CopHINTHASH_get(cop), key, hash, flags)
+
+/*
+=for apidoc Am|bool|cop_hints_exists_sv|const COP *cop|SV *key|U32 hash|U32 flags
+
+Like L</cop_hints_exists_pvn>, but takes a Perl scalar instead of a
+string/length pair.
+
+=cut
+*/
+
+#define cop_hints_exists_sv(cop, key, hash, flags) \
+    cophh_exists_sv(CopHINTHASH_get(cop), key, hash, flags)
+
+/*
 =for apidoc Am|HV *|cop_hints_2hv|const COP *cop|U32 flags
 
 Generates and returns a standard Perl hash representing the full set of
@@ -636,12 +780,6 @@
 #  define CX_POP(cx) cxstack_ix--;
 #endif
 
-
-/* base for the next two macros. Don't use directly.
- * The context frame holds a reference to the CV so that it can't be
- * freed while we're executing it */
-
-
 #define CX_PUSHSUB_GET_LVALUE_MASK(func) \
 	/* If the context is indeterminate, then only the lvalue */	\
 	/* flags that the caller also has are applicable.        */	\
@@ -828,6 +966,9 @@
     void *	sbu_rxres;
     REGEXP *	sbu_rx;
 };
+
+#ifdef PERL_CORE
+
 #define sb_iters	cx_u.cx_subst.sbu_iters
 #define sb_maxiters	cx_u.cx_subst.sbu_maxiters
 #define sb_rflags	cx_u.cx_subst.sbu_rflags
@@ -841,7 +982,6 @@
 #define sb_rxres	cx_u.cx_subst.sbu_rxres
 #define sb_rx		cx_u.cx_subst.sbu_rx
 
-#ifdef PERL_CORE
 #  define CX_PUSHSUBST(cx) CXINC, cx = CX_CUR(),		        \
 	cx->blk_oldsaveix = oldsave,				        \
 	cx->sb_iters		= iters,				\
@@ -905,7 +1045,7 @@
                              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.  */
 
@@ -918,7 +1058,8 @@
 
 /* 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 */
 
@@ -940,46 +1081,19 @@
 #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()))
 
-/*
-=head1 "Gimme" Values
-*/
-
-/*
-=for apidoc AmnU||G_SCALAR
-Used to indicate scalar context.  See C<L</GIMME_V>>, C<L</GIMME>>, and
-L<perlcall>.
-
-=for apidoc AmnU||G_ARRAY
-Used to indicate list context.  See C<L</GIMME_V>>, C<L</GIMME>> and
-L<perlcall>.
-
-=for apidoc AmnU||G_VOID
-Used to indicate void context.  See C<L</GIMME_V>> and L<perlcall>.
-
-=for apidoc AmnU||G_DISCARD
-Indicates that arguments returned from a callback should be discarded.  See
-L<perlcall>.
-
-=for apidoc AmnU||G_EVAL
-
-Used to force a Perl C<eval> wrapper around a callback.  See
-L<perlcall>.
-
-=for apidoc AmnU||G_NOARGS
-
-Indicates that no arguments are being sent to a callback.  See
-L<perlcall>.
-
-=cut
-*/
-
 #define G_SCALAR	2
 #define G_ARRAY		3
 #define G_VOID		1
@@ -1054,6 +1168,12 @@
 
 };
 
+/*
+=for apidoc Ay||PERL_SI
+Use this typedef to declare variables that are to hold C<struct stackinfo>.
+
+=cut
+*/
 typedef struct stackinfo PERL_SI;
 
 #define cxstack		(PL_curstackinfo->si_cxstack)
@@ -1125,14 +1245,23 @@
 	}								\
     } STMT_END
 
-#define IN_PERL_COMPILETIME	cBOOL(PL_curcop == &PL_compiling)
-#define IN_PERL_RUNTIME		cBOOL(PL_curcop != &PL_compiling)
+/*
+=for apidoc_section $utility
+=for apidoc Amn|bool|IN_PERL_COMPILETIME
+Returns 1 if this macro is being called during the compilation phase of the
+program; otherwise 0;
 
+=for apidoc Amn|bool|IN_PERL_RUNTIME
+Returns 1 if this macro is being called during the execution phase of the
+program; otherwise 0;
 
+=cut
+*/
+#define IN_PERL_COMPILETIME     cBOOL(PL_curcop == &PL_compiling)
+#define IN_PERL_RUNTIME         cBOOL(PL_curcop != &PL_compiling)
 
-
 /*
-=head1 Multicall Functions
+=for apidoc_section $multicall
 
 =for apidoc Amns||dMULTICALL
 Declare local variables for a multicall.  See L<perlcall/LIGHTWEIGHT CALLBACKS>.

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/cv.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/cv.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/cv.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -16,7 +16,7 @@
 };
 
 /*
-=head1 Handy Values
+=for apidoc Ayh||CV
 
 =for apidoc ADmnU||Nullcv
 Null CV pointer.
@@ -23,11 +23,6 @@
 
 (deprecated - use C<(CV *)NULL> instead)
 
-=head1 CV Manipulation Functions
-
-This section documents functions to manipulate CVs which are code-values,
-or subroutines.  For more information, see L<perlguts>.
-
 =for apidoc Am|HV*|CvSTASH|CV* cv
 Returns the stash of the CV.  A stash is the symbol table hash, containing
 the package-scoped variables in the package where the subroutine was defined.
@@ -68,7 +63,7 @@
 
 /* these CvPADLIST/CvRESERVED asserts can be reverted one day, once stabilized */
 #define CvPADLIST(sv)	  (*(assert_(!CvISXSUB((CV*)(sv))) \
-	&(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist)))
+        &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist)))
 /* CvPADLIST_set is not public API, it can be removed one day, once stabilized */
 #ifdef DEBUGGING
 #  define CvPADLIST_set(sv, padlist) Perl_set_padlist((CV*)sv, padlist)
@@ -76,7 +71,7 @@
 #  define CvPADLIST_set(sv, padlist) (CvPADLIST(sv) = (padlist))
 #endif
 #define CvHSCXT(sv)	  *(assert_(CvISXSUB((CV*)(sv))) \
-	&(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_hscxt))
+        &(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_hscxt))
 #ifdef DEBUGGING
 #  if PTRSIZE == 8
 #    define PoisonPADLIST(sv) \
@@ -97,20 +92,20 @@
 
 /* These two are sometimes called on non-CVs */
 #define CvPROTO(sv)                               \
-	(                                          \
-	 SvPOK(sv)                                  \
-	  ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
-	     ? SvEND(sv)+1 : SvPVX_const(sv)          \
-	  : NULL                                       \
-	)
+        (                                          \
+         SvPOK(sv)                                  \
+          ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
+             ? SvEND(sv)+1 : SvPVX_const(sv)          \
+          : NULL                                       \
+        )
 #define CvPROTOLEN(sv)	                          \
-	(                                          \
-	 SvPOK(sv)                                  \
-	  ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
-	     ? SvLEN(sv)-SvCUR(sv)-2                  \
-	     : SvCUR(sv)                               \
-	  : 0                                           \
-	)
+        (                                          \
+         SvPOK(sv)                                  \
+          ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
+             ? SvLEN(sv)-SvCUR(sv)-2                  \
+             : SvCUR(sv)                               \
+          : 0                                           \
+        )
 
 #define CVf_METHOD	0x0001	/* CV is explicitly marked as a method */
 #define CVf_LVALUE	0x0002  /* CV return value can be used as lvalue */
@@ -122,11 +117,11 @@
 #define CVf_CLONED	0x0040	/* a clone of one of those */
 #define CVf_ANON	0x0080	/* CV is not pointed to by a GV */
 #define CVf_UNIQUE	0x0100	/* sub is only called once (eg PL_main_cv,
-				 * require, eval). */
+                                 * require, eval). */
 #define CVf_NODEBUG	0x0200	/* no DB::sub indirection for this CV
-				   (esp. useful for special XSUBs) */
+                                   (esp. useful for special XSUBs) */
 #define CVf_CVGV_RC	0x0400	/* CvGV is reference counted */
-#ifdef PERL_CORE
+#if defined(PERL_CORE) || defined(PERL_EXT)
 # define CVf_SLABBED	0x0800	/* Holds refcount on op slab  */
 #endif
 #define CVf_DYNFILE	0x1000	/* The filename is malloced  */
@@ -231,8 +226,8 @@
 CvNAME_HEK(CV *sv)
 {
     return CvNAMED(sv)
-	? ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_hek
-	: 0;
+        ? ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_hek
+        : 0;
 }
 
 /* helper for the common pattern:
@@ -247,15 +242,14 @@
 /* This lowers the reference count of the previous value, but does *not*
    increment the reference count of the new value. */
 #define CvNAME_HEK_set(cv, hek) ( \
-	CvNAME_HEK((CV *)(cv))						 \
-	    ? unshare_hek(SvANY((CV *)(cv))->xcv_gv_u.xcv_hek)	  \
-	    : (void)0,						   \
-	((XPVCV*)MUTABLE_PTR(SvANY(cv)))->xcv_gv_u.xcv_hek = (hek), \
-	CvNAMED_on(cv)						     \
+        CvNAME_HEK((CV *)(cv))						 \
+            ? unshare_hek(SvANY((CV *)(cv))->xcv_gv_u.xcv_hek)	  \
+            : (void)0,						   \
+        ((XPVCV*)MUTABLE_PTR(SvANY(cv)))->xcv_gv_u.xcv_hek = (hek), \
+        CvNAMED_on(cv)						     \
     )
 
 /*
-=head1 CV reference counts and CvOUTSIDE
 
 =for apidoc m|bool|CvWEAKOUTSIDE|CV *cv
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/dirent.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/dirent.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/dirent.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -24,21 +24,21 @@
 /* structure of a directory entry */
 typedef struct direct 
 {
-	long	d_ino;			/* inode number (not used by MS-DOS)  */
-	long	d_namlen;		/* name length  */
-	char	d_name[257];		/* file name  */
+        long	d_ino;			/* inode number (not used by MS-DOS)  */
+        long	d_namlen;		/* name length  */
+        char	d_name[257];		/* file name  */
 } _DIRECT;
 
 /* structure for dir operations */
 typedef struct _dir_struc
 {
-	char	*start;			/* starting position */
-	char	*curr;			/* current position */
-	long	size;			/* allocated size of string table */
-	long	nfiles;			/* number of filenames in table */
-	struct direct dirstr;		/* directory structure to return */
-	void*	handle;			/* system handle */
-	char	*end;			/* position after last filename */
+        char	*start;			/* starting position */
+        char	*curr;			/* current position */
+        long	size;			/* allocated size of string table */
+        long	nfiles;			/* number of filenames in table */
+        struct direct dirstr;		/* directory structure to return */
+        void*	handle;			/* system handle */
+        char	*end;			/* position after last filename */
 } DIR;
 
 #if 0		/* these have moved to win32iop.h */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/dosish.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/dosish.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/dosish.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -17,7 +17,7 @@
 #  define BIT_BUCKET "nul"
 #  define OP_BINARY O_BINARY
 #  define PERL_SYS_INIT_BODY(c,v)					\
-	 MALLOC_CHECK_TAINT2(*c,*v) Perl_DJGPP_init(c,v); PERLIO_INIT
+         MALLOC_CHECK_TAINT2(*c,*v) Perl_DJGPP_init(c,v); PERLIO_INIT
 #  define init_os_extras Perl_init_os_extras
 #  define HAS_UTIME
 #  define HAS_KILL
@@ -30,8 +30,8 @@
 #    define PERL_FS_VER_FMT	"%d_%d_%d"
 #  endif
 #  define PERL_FS_VERSION	STRINGIFY(PERL_REVISION) "_" \
-				STRINGIFY(PERL_VERSION) "_" \
-				STRINGIFY(PERL_SUBVERSION)
+                                STRINGIFY(PERL_VERSION) "_" \
+                                STRINGIFY(PERL_SUBVERSION)
 #elif defined(WIN32)
 #  define PERL_SYS_INIT_BODY(c,v)					\
       MALLOC_CHECK_TAINT2(*c,*v) Perl_win32_init(c,v); PERLIO_INIT
@@ -70,10 +70,10 @@
  *	to include <sys/stat.h> and <sys/types.h> to get any typedef'ed
  *	information.
  */
-#if defined(WIN64) || defined(USE_LARGE_FILES)
+#if defined(WIN32)
+#  define Stat_t struct w32_stat
+#else
 #  define Stat_t struct _stati64
-#else
-#  define Stat_t struct stat
 #endif
 
 /* USE_STAT_RDEV:

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/ebcdic_tables.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -44,9 +44,9 @@
 
 /* Index is ASCII platform code point; value is EBCDIC 1047 equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_a2e[];
+    EXTCONST U8 PL_a2e[256];
 #  else
-    EXTCONST U8 PL_a2e[] = {
+    EXTCONST U8 PL_a2e[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -70,9 +70,9 @@
 
 /* Index is EBCDIC 1047 code point; value is ASCII platform equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_e2a[];
+    EXTCONST U8 PL_e2a[256];
 #  else
-    EXTCONST U8 PL_e2a[] = {
+    EXTCONST U8 PL_e2a[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -97,9 +97,9 @@
 /* (Confusingly named) Index is EBCDIC 1047 I8 byte; value is
  * EBCDIC 1047 UTF-EBCDIC equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_utf2e[];
+    EXTCONST U8 PL_utf2e[256];
 #  else
-    EXTCONST U8 PL_utf2e[] = {
+    EXTCONST U8 PL_utf2e[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -124,9 +124,9 @@
 /* (Confusingly named) Index is EBCDIC 1047 UTF-EBCDIC byte; value is
  * EBCDIC 1047 I8 equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_e2utf[];
+    EXTCONST U8 PL_e2utf[256];
 #  else
-    EXTCONST U8 PL_e2utf[] = {
+    EXTCONST U8 PL_e2utf[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -153,9 +153,9 @@
  * flags table in tr16.  The entries marked 9 in tr16 are continuation bytes
  * and are marked as length 1 here so that we can recover. */
 #  ifndef DOINIT
-    EXTCONST U8 PL_utf8skip[];
+    EXTCONST U8 PL_utf8skip[256];
 #  else
-    EXTCONST U8 PL_utf8skip[] = {
+    EXTCONST U8 PL_utf8skip[256] = {
 /*     _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_*/  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 /*1_*/  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
@@ -179,9 +179,9 @@
 
 /* Index is EBCDIC 1047 code point; value is its lowercase equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_latin1_lc[];
+    EXTCONST U8 PL_latin1_lc[256];
 #  else
-    EXTCONST U8 PL_latin1_lc[] = {
+    EXTCONST U8 PL_latin1_lc[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -207,9 +207,9 @@
  * The 'mod' in the name means that codepoints whose uppercase is above 255 or
  * longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */
 #  ifndef DOINIT
-    EXTCONST U8 PL_mod_latin1_uc[];
+    EXTCONST U8 PL_mod_latin1_uc[256];
 #  else
-    EXTCONST U8 PL_mod_latin1_uc[] = {
+    EXTCONST U8 PL_mod_latin1_uc[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -234,9 +234,9 @@
 /* Index is EBCDIC 1047 code point; For A-Z, value is a-z; for a-z, value
  * is A-Z; all other code points map to themselves */
 #  ifndef DOINIT
-    EXTCONST U8 PL_fold[];
+    EXTCONST U8 PL_fold[256];
 #  else
-    EXTCONST U8 PL_fold[] = {
+    EXTCONST U8 PL_fold[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -258,13 +258,38 @@
 };
 #  endif
 
+#  ifndef DOINIT
+    EXT U8 PL_fold_locale[256];
+#  else
+    EXT U8 PL_fold_locale[256] = {
+/*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
+/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+/*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
+};
+#  endif
+
 /* Index is EBCDIC 1047 code point; value is its other fold-pair equivalent
  * (A => a; a => A, etc) in the 0-255 range.  If no such equivalent, value is
  * the code point itself */
 #  ifndef DOINIT
-    EXTCONST U8 PL_fold_latin1[];
+    EXTCONST U8 PL_fold_latin1[256];
 #  else
-    EXTCONST U8 PL_fold_latin1[] = {
+    EXTCONST U8 PL_fold_latin1[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -293,9 +318,9 @@
  */
 
 #  ifndef DOINIT
-    EXTCONST U8 PL_extended_utf8_dfa_tab[];
+    EXTCONST U8 PL_extended_utf8_dfa_tab[416];
 #  else
-    EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
+    EXTCONST U8 PL_extended_utf8_dfa_tab[416] = {
 /*         _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_    */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_    */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -334,9 +359,9 @@
  */
 
 #  ifndef DOINIT
-    EXTCONST U16 PL_strict_utf8_dfa_tab[];
+    EXTCONST U16 PL_strict_utf8_dfa_tab[624];
 #  else
-    EXTCONST U16 PL_strict_utf8_dfa_tab[] = {
+    EXTCONST U16 PL_strict_utf8_dfa_tab[624] = {
 /*          _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_     */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_     */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -381,9 +406,9 @@
  */
 
 #  ifndef DOINIT
-    EXTCONST U8 PL_c9_utf8_dfa_tab[];
+    EXTCONST U8 PL_c9_utf8_dfa_tab[368];
 #  else
-    EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
+    EXTCONST U8 PL_c9_utf8_dfa_tab[368] = {
 /*        _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_   */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_   */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -422,9 +447,9 @@
 
 /* Index is ASCII platform code point; value is EBCDIC 037 equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_a2e[];
+    EXTCONST U8 PL_a2e[256];
 #  else
-    EXTCONST U8 PL_a2e[] = {
+    EXTCONST U8 PL_a2e[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -448,9 +473,9 @@
 
 /* Index is EBCDIC 037 code point; value is ASCII platform equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_e2a[];
+    EXTCONST U8 PL_e2a[256];
 #  else
-    EXTCONST U8 PL_e2a[] = {
+    EXTCONST U8 PL_e2a[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -475,9 +500,9 @@
 /* (Confusingly named) Index is EBCDIC 037 I8 byte; value is
  * EBCDIC 037 UTF-EBCDIC equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_utf2e[];
+    EXTCONST U8 PL_utf2e[256];
 #  else
-    EXTCONST U8 PL_utf2e[] = {
+    EXTCONST U8 PL_utf2e[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -502,9 +527,9 @@
 /* (Confusingly named) Index is EBCDIC 037 UTF-EBCDIC byte; value is
  * EBCDIC 037 I8 equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_e2utf[];
+    EXTCONST U8 PL_e2utf[256];
 #  else
-    EXTCONST U8 PL_e2utf[] = {
+    EXTCONST U8 PL_e2utf[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -531,9 +556,9 @@
  * flags table in tr16.  The entries marked 9 in tr16 are continuation bytes
  * and are marked as length 1 here so that we can recover. */
 #  ifndef DOINIT
-    EXTCONST U8 PL_utf8skip[];
+    EXTCONST U8 PL_utf8skip[256];
 #  else
-    EXTCONST U8 PL_utf8skip[] = {
+    EXTCONST U8 PL_utf8skip[256] = {
 /*     _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_*/  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 /*1_*/  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
@@ -557,9 +582,9 @@
 
 /* Index is EBCDIC 037 code point; value is its lowercase equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_latin1_lc[];
+    EXTCONST U8 PL_latin1_lc[256];
 #  else
-    EXTCONST U8 PL_latin1_lc[] = {
+    EXTCONST U8 PL_latin1_lc[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -585,9 +610,9 @@
  * The 'mod' in the name means that codepoints whose uppercase is above 255 or
  * longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */
 #  ifndef DOINIT
-    EXTCONST U8 PL_mod_latin1_uc[];
+    EXTCONST U8 PL_mod_latin1_uc[256];
 #  else
-    EXTCONST U8 PL_mod_latin1_uc[] = {
+    EXTCONST U8 PL_mod_latin1_uc[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -612,9 +637,9 @@
 /* Index is EBCDIC 037 code point; For A-Z, value is a-z; for a-z, value
  * is A-Z; all other code points map to themselves */
 #  ifndef DOINIT
-    EXTCONST U8 PL_fold[];
+    EXTCONST U8 PL_fold[256];
 #  else
-    EXTCONST U8 PL_fold[] = {
+    EXTCONST U8 PL_fold[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -636,13 +661,38 @@
 };
 #  endif
 
+#  ifndef DOINIT
+    EXT U8 PL_fold_locale[256];
+#  else
+    EXT U8 PL_fold_locale[256] = {
+/*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
+/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+/*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
+};
+#  endif
+
 /* Index is EBCDIC 037 code point; value is its other fold-pair equivalent
  * (A => a; a => A, etc) in the 0-255 range.  If no such equivalent, value is
  * the code point itself */
 #  ifndef DOINIT
-    EXTCONST U8 PL_fold_latin1[];
+    EXTCONST U8 PL_fold_latin1[256];
 #  else
-    EXTCONST U8 PL_fold_latin1[] = {
+    EXTCONST U8 PL_fold_latin1[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -671,9 +721,9 @@
  */
 
 #  ifndef DOINIT
-    EXTCONST U8 PL_extended_utf8_dfa_tab[];
+    EXTCONST U8 PL_extended_utf8_dfa_tab[416];
 #  else
-    EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
+    EXTCONST U8 PL_extended_utf8_dfa_tab[416] = {
 /*         _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_    */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_    */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -712,9 +762,9 @@
  */
 
 #  ifndef DOINIT
-    EXTCONST U16 PL_strict_utf8_dfa_tab[];
+    EXTCONST U16 PL_strict_utf8_dfa_tab[624];
 #  else
-    EXTCONST U16 PL_strict_utf8_dfa_tab[] = {
+    EXTCONST U16 PL_strict_utf8_dfa_tab[624] = {
 /*          _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_     */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_     */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -759,9 +809,9 @@
  */
 
 #  ifndef DOINIT
-    EXTCONST U8 PL_c9_utf8_dfa_tab[];
+    EXTCONST U8 PL_c9_utf8_dfa_tab[368];
 #  else
-    EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
+    EXTCONST U8 PL_c9_utf8_dfa_tab[368] = {
 /*        _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_   */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_   */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/embed.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/embed.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/embed.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -20,7 +20,9 @@
 
 /* By defining PERL_NO_SHORT_NAMES (not done by default) the short forms
  * (like warn instead of Perl_warn) for the API are not defined.
- * Not defining the short forms is a good thing for cleaner embedding. */
+ * Not defining the short forms is a good thing for cleaner embedding.
+ * BEWARE that a bunch of macros don't have long names, so either must be
+ * added or don't use them if you define this symbol */
 
 #ifndef PERL_NO_SHORT_NAMES
 
@@ -29,6 +31,10 @@
 #define Gv_AMupdate(a,b)	Perl_Gv_AMupdate(aTHX_ a,b)
 #define SvAMAGIC_off		Perl_SvAMAGIC_off
 #define SvAMAGIC_on		Perl_SvAMAGIC_on
+#define SvTRUE(a)		Perl_SvTRUE(aTHX_ a)
+#define SvTRUE_NN(a)		Perl_SvTRUE_NN(aTHX_ a)
+#define SvTRUE_common(a,b)	Perl_SvTRUE_common(aTHX_ a,b)
+#define SvTRUE_nomg(a)		Perl_SvTRUE_nomg(aTHX_ a)
 #define _force_out_malformed_utf8_message(a,b,c,d)	Perl__force_out_malformed_utf8_message(aTHX_ a,b,c,d)
 #define _is_uni_FOO(a,b)	Perl__is_uni_FOO(aTHX_ a,b)
 #define _is_uni_perl_idcont(a)	Perl__is_uni_perl_idcont(aTHX_ a)
@@ -48,6 +54,7 @@
 #define atfork_lock		Perl_atfork_lock
 #define atfork_unlock		Perl_atfork_unlock
 #define av_clear(a)		Perl_av_clear(aTHX_ a)
+#define av_count(a)		Perl_av_count(aTHX_ a)
 #define av_delete(a,b,c)	Perl_av_delete(aTHX_ a,b,c)
 #define av_exists(a,b)		Perl_av_exists(aTHX_ a,b)
 #define av_extend(a,b)		Perl_av_extend(aTHX_ a,b)
@@ -59,7 +66,6 @@
 #define av_push(a,b)		Perl_av_push(aTHX_ a,b)
 #define av_shift(a)		Perl_av_shift(aTHX_ a)
 #define av_store(a,b,c)		Perl_av_store(aTHX_ a,b,c)
-#define av_top_index(a)		Perl_av_top_index(aTHX_ a)
 #define av_undef(a)		Perl_av_undef(aTHX_ a)
 #define av_unshift(a,b)		Perl_av_unshift(aTHX_ a,b)
 #define block_end(a,b)		Perl_block_end(aTHX_ a,b)
@@ -386,6 +392,7 @@
 #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)
@@ -410,6 +417,9 @@
 #define op_refcnt_unlock()	Perl_op_refcnt_unlock(aTHX)
 #define op_scope(a)		Perl_op_scope(aTHX_ a)
 #define op_sibling_splice	Perl_op_sibling_splice
+#ifndef NO_MATHOMS
+#define pack_cat(a,b,c,d,e,f,g)	Perl_pack_cat(aTHX_ a,b,c,d,e,f,g)
+#endif
 #define packlist(a,b,c,d,e)	Perl_packlist(aTHX_ a,b,c,d,e)
 #define pad_add_anon(a,b)	Perl_pad_add_anon(aTHX_ a,b)
 #define pad_add_name_pv(a,b,c,d)	Perl_pad_add_name_pv(aTHX_ a,b,c,d)
@@ -416,6 +426,9 @@
 #define pad_add_name_pvn(a,b,c,d,e)	Perl_pad_add_name_pvn(aTHX_ a,b,c,d,e)
 #define pad_add_name_sv(a,b,c,d)	Perl_pad_add_name_sv(aTHX_ a,b,c,d)
 #define pad_alloc(a,b)		Perl_pad_alloc(aTHX_ a,b)
+#ifndef NO_MATHOMS
+#define pad_compname_type(a)	Perl_pad_compname_type(aTHX_ a)
+#endif
 #define pad_findmy_pv(a,b)	Perl_pad_findmy_pv(aTHX_ a,b)
 #define pad_findmy_pvn(a,b,c)	Perl_pad_findmy_pvn(aTHX_ a,b,c)
 #define pad_findmy_sv(a,b)	Perl_pad_findmy_sv(aTHX_ a,b)
@@ -809,6 +822,7 @@
 #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)
@@ -828,11 +842,6 @@
 #define dump_mstats(a)		Perl_dump_mstats(aTHX_ a)
 #define get_mstats(a,b,c)	Perl_get_mstats(aTHX_ a,b,c)
 #endif
-#if defined(PERL_GLOBAL_STRUCT)
-#define GetVars()		Perl_GetVars(aTHX)
-#define free_global_struct(a)	Perl_free_global_struct(aTHX_ a)
-#define init_global_struct()	Perl_init_global_struct(aTHX)
-#endif
 #if defined(PERL_IMPLICIT_CONTEXT)
 #define croak_nocontext		Perl_croak_nocontext
 #define deb_nocontext		Perl_deb_nocontext
@@ -914,7 +923,7 @@
 #define PerlIO_unread(a,b,c)	Perl_PerlIO_unread(aTHX_ a,b,c)
 #define PerlIO_write(a,b,c)	Perl_PerlIO_write(aTHX_ a,b,c)
 #endif
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 #define do_aspawn(a,b,c)	Perl_do_aspawn(aTHX_ a,b,c)
 #define do_spawn(a)		Perl_do_spawn(aTHX_ a)
 #define do_spawn_nowait(a)	Perl_do_spawn_nowait(aTHX_ a)
@@ -927,6 +936,7 @@
 #define cntrl_to_mnemonic	Perl_cntrl_to_mnemonic
 #define current_re_engine()	Perl_current_re_engine(aTHX)
 #define cv_ckproto_len_flags(a,b,c,d,e)	Perl_cv_ckproto_len_flags(aTHX_ a,b,c,d,e)
+#define delimcpy_no_escape	Perl_delimcpy_no_escape
 #define do_uniprop_match	Perl_do_uniprop_match
 #define get_and_check_backslash_N_name(a,b,c,d)	Perl_get_and_check_backslash_N_name(aTHX_ a,b,c,d)
 #define get_deprecated_property_msg	Perl_get_deprecated_property_msg
@@ -1039,6 +1049,7 @@
 #define find_first_differing_byte_pos	S_find_first_differing_byte_pos
 #define get_ANYOFM_contents(a)	S_get_ANYOFM_contents(aTHX_ a)
 #define get_ANYOF_cp_list_for_ssc(a,b)	S_get_ANYOF_cp_list_for_ssc(aTHX_ a,b)
+#define get_quantifier_value(a,b,c)	S_get_quantifier_value(aTHX_ a,b,c)
 #define grok_bslash_N(a,b,c,d,e,f,g)	S_grok_bslash_N(aTHX_ a,b,c,d,e,f,g)
 #define handle_named_backref(a,b,c,d)	S_handle_named_backref(aTHX_ a,b,c,d)
 #define handle_names_wildcard(a,b,c,d)	S_handle_names_wildcard(aTHX_ a,b,c,d)
@@ -1052,7 +1063,6 @@
 #define join_exact(a,b,c,d,e,f,g)	S_join_exact(aTHX_ a,b,c,d,e,f,g)
 #define make_exactf_invlist(a,b)	S_make_exactf_invlist(aTHX_ a,b)
 #define make_trie(a,b,c,d,e,f,g,h)	S_make_trie(aTHX_ a,b,c,d,e,f,g,h)
-#define new_regcurly		S_new_regcurly
 #define nextchar(a)		S_nextchar(aTHX_ a)
 #define output_posix_warnings(a,b)	S_output_posix_warnings(aTHX_ a,b)
 #define parse_lparen_question_flags(a)	S_parse_lparen_question_flags(aTHX_ a)
@@ -1155,7 +1165,7 @@
 #define invlist_clone(a,b)	Perl_invlist_clone(aTHX_ a,b)
 #  endif
 #  if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-#define regcurly		S_regcurly
+#define regcurly		Perl_regcurly
 #  endif
 #  if defined(PERL_IN_REGEXEC_C)
 #define advance_one_LB(a,b,c)	S_advance_one_LB(aTHX_ a,b,c)
@@ -1170,6 +1180,7 @@
 #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)
@@ -1189,9 +1200,6 @@
 #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)
@@ -1262,6 +1270,7 @@
 #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)
@@ -1282,7 +1291,6 @@
 #define deb_stack_all()		Perl_deb_stack_all(aTHX)
 #define defelem_target(a,b)	Perl_defelem_target(aTHX_ a,b)
 #define delete_eval_scope()	Perl_delete_eval_scope(aTHX)
-#define delimcpy_no_escape	Perl_delimcpy_no_escape
 #define die_unwind(a)		Perl_die_unwind(aTHX_ a)
 #define do_aexec5(a,b,c,d,e)	Perl_do_aexec5(aTHX_ a,b,c,d,e)
 #define do_dump_pad(a,b,c,d)	Perl_do_dump_pad(aTHX_ a,b,c,d)
@@ -1341,7 +1349,9 @@
 #define magic_copycallchecker(a,b,c,d,e)	Perl_magic_copycallchecker(aTHX_ a,b,c,d,e)
 #define magic_existspack(a,b)	Perl_magic_existspack(aTHX_ a,b)
 #define magic_freearylen_p(a,b)	Perl_magic_freearylen_p(aTHX_ a,b)
+#define magic_freemglob(a,b)	Perl_magic_freemglob(aTHX_ a,b)
 #define magic_freeovrld(a,b)	Perl_magic_freeovrld(aTHX_ a,b)
+#define magic_freeutf8(a,b)	Perl_magic_freeutf8(aTHX_ a,b)
 #define magic_get(a,b)		Perl_magic_get(aTHX_ a,b)
 #define magic_getarylen(a,b)	Perl_magic_getarylen(aTHX_ a,b)
 #define magic_getdebugvar(a,b)	Perl_magic_getdebugvar(aTHX_ a,b)
@@ -1399,6 +1409,7 @@
 #define newXS_deffile(a,b)	Perl_newXS_deffile(aTHX_ a,b)
 #define newXS_len_flags(a,b,c,d,e,f,g)	Perl_newXS_len_flags(aTHX_ a,b,c,d,e,f,g)
 #define nextargv(a,b)		Perl_nextargv(aTHX_ a,b)
+#define no_bareword_filehandle(a)	Perl_no_bareword_filehandle(aTHX_ a)
 #define noperl_die		Perl_noperl_die
 #define notify_parser_that_changed_to_utf8()	Perl_notify_parser_that_changed_to_utf8(aTHX)
 #define oopsAV(a)		Perl_oopsAV(aTHX_ a)
@@ -2008,6 +2019,7 @@
 #define padnamelist_dup(a,b)	Perl_padnamelist_dup(aTHX_ a,b)
 #  endif
 #  if defined(USE_LOCALE_COLLATE)
+#define magic_freecollxfrm(a,b)	Perl_magic_freecollxfrm(aTHX_ a,b)
 #define magic_setcollxfrm(a,b)	Perl_magic_setcollxfrm(aTHX_ a,b)
 #ifndef NO_MATHOMS
 #define mem_collxfrm(a,b,c)	Perl_mem_collxfrm(aTHX_ a,b,c)

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/embedvar.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/embedvar.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/embedvar.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -107,7 +107,6 @@
 #define PL_comppad_name_floor	(vTHX->Icomppad_name_floor)
 #define PL_constpadix		(vTHX->Iconstpadix)
 #define PL_cop_seqmax		(vTHX->Icop_seqmax)
-#define PL_cryptseen		(vTHX->Icryptseen)
 #define PL_curcop		(vTHX->Icurcop)
 #define PL_curcopdb		(vTHX->Icurcopdb)
 #define PL_curlocales		(vTHX->Icurlocales)
@@ -205,6 +204,7 @@
 #define PL_maxsysfd		(vTHX->Imaxsysfd)
 #define PL_mbrlen_ps		(vTHX->Imbrlen_ps)
 #define PL_mbrtowc_ps		(vTHX->Imbrtowc_ps)
+#define PL_mem_log		(vTHX->Imem_log)
 #define PL_memory_debug_header	(vTHX->Imemory_debug_header)
 #define PL_mess_sv		(vTHX->Imess_sv)
 #define PL_min_intro_pending	(vTHX->Imin_intro_pending)
@@ -376,133 +376,4 @@
 
 #endif	/* MULTIPLICITY */
 
-#if defined(PERL_GLOBAL_STRUCT)
-
-#define PL_C_locale_obj		(my_vars->GC_locale_obj)
-#define PL_GC_locale_obj	(my_vars->GC_locale_obj)
-#define PL_appctx		(my_vars->Gappctx)
-#define PL_Gappctx		(my_vars->Gappctx)
-#define PL_check		(my_vars->Gcheck)
-#define PL_Gcheck		(my_vars->Gcheck)
-#define PL_check_mutex		(my_vars->Gcheck_mutex)
-#define PL_Gcheck_mutex		(my_vars->Gcheck_mutex)
-#define PL_csighandler1p	(my_vars->Gcsighandler1p)
-#define PL_Gcsighandler1p	(my_vars->Gcsighandler1p)
-#define PL_csighandler3p	(my_vars->Gcsighandler3p)
-#define PL_Gcsighandler3p	(my_vars->Gcsighandler3p)
-#define PL_csighandlerp		(my_vars->Gcsighandlerp)
-#define PL_Gcsighandlerp	(my_vars->Gcsighandlerp)
-#define PL_curinterp		(my_vars->Gcurinterp)
-#define PL_Gcurinterp		(my_vars->Gcurinterp)
-#define PL_do_undump		(my_vars->Gdo_undump)
-#define PL_Gdo_undump		(my_vars->Gdo_undump)
-#define PL_dollarzero_mutex	(my_vars->Gdollarzero_mutex)
-#define PL_Gdollarzero_mutex	(my_vars->Gdollarzero_mutex)
-#define PL_env_mutex		(my_vars->Genv_mutex)
-#define PL_Genv_mutex		(my_vars->Genv_mutex)
-#define PL_fold_locale		(my_vars->Gfold_locale)
-#define PL_Gfold_locale		(my_vars->Gfold_locale)
-#define PL_hash_chars		(my_vars->Ghash_chars)
-#define PL_Ghash_chars		(my_vars->Ghash_chars)
-#define PL_hash_seed		(my_vars->Ghash_seed)
-#define PL_Ghash_seed		(my_vars->Ghash_seed)
-#define PL_hash_seed_set	(my_vars->Ghash_seed_set)
-#define PL_Ghash_seed_set	(my_vars->Ghash_seed_set)
-#define PL_hash_state		(my_vars->Ghash_state)
-#define PL_Ghash_state		(my_vars->Ghash_state)
-#define PL_hints_mutex		(my_vars->Ghints_mutex)
-#define PL_Ghints_mutex		(my_vars->Ghints_mutex)
-#define PL_keyword_plugin	(my_vars->Gkeyword_plugin)
-#define PL_Gkeyword_plugin	(my_vars->Gkeyword_plugin)
-#define PL_keyword_plugin_mutex	(my_vars->Gkeyword_plugin_mutex)
-#define PL_Gkeyword_plugin_mutex	(my_vars->Gkeyword_plugin_mutex)
-#define PL_lc_numeric_mutex	(my_vars->Glc_numeric_mutex)
-#define PL_Glc_numeric_mutex	(my_vars->Glc_numeric_mutex)
-#define PL_locale_mutex		(my_vars->Glocale_mutex)
-#define PL_Glocale_mutex	(my_vars->Glocale_mutex)
-#define PL_malloc_mutex		(my_vars->Gmalloc_mutex)
-#define PL_Gmalloc_mutex	(my_vars->Gmalloc_mutex)
-#define PL_mmap_page_size	(my_vars->Gmmap_page_size)
-#define PL_Gmmap_page_size	(my_vars->Gmmap_page_size)
-#define PL_my_ctx_mutex		(my_vars->Gmy_ctx_mutex)
-#define PL_Gmy_ctx_mutex	(my_vars->Gmy_ctx_mutex)
-#define PL_my_cxt_index		(my_vars->Gmy_cxt_index)
-#define PL_Gmy_cxt_index	(my_vars->Gmy_cxt_index)
-#define PL_my_cxt_keys		(my_vars->Gmy_cxt_keys)
-#define PL_Gmy_cxt_keys		(my_vars->Gmy_cxt_keys)
-#define PL_my_cxt_keys_size	(my_vars->Gmy_cxt_keys_size)
-#define PL_Gmy_cxt_keys_size	(my_vars->Gmy_cxt_keys_size)
-#define PL_op_mutex		(my_vars->Gop_mutex)
-#define PL_Gop_mutex		(my_vars->Gop_mutex)
-#define PL_op_seq		(my_vars->Gop_seq)
-#define PL_Gop_seq		(my_vars->Gop_seq)
-#define PL_op_sequence		(my_vars->Gop_sequence)
-#define PL_Gop_sequence		(my_vars->Gop_sequence)
-#define PL_perlio_debug_fd	(my_vars->Gperlio_debug_fd)
-#define PL_Gperlio_debug_fd	(my_vars->Gperlio_debug_fd)
-#define PL_perlio_fd_refcnt	(my_vars->Gperlio_fd_refcnt)
-#define PL_Gperlio_fd_refcnt	(my_vars->Gperlio_fd_refcnt)
-#define PL_perlio_fd_refcnt_size	(my_vars->Gperlio_fd_refcnt_size)
-#define PL_Gperlio_fd_refcnt_size	(my_vars->Gperlio_fd_refcnt_size)
-#define PL_perlio_mutex		(my_vars->Gperlio_mutex)
-#define PL_Gperlio_mutex	(my_vars->Gperlio_mutex)
-#ifdef __VMS
-#define PL_perllib_sep		(my_vars->Gperllib_sep)
-#define PL_Gperllib_sep		(my_vars->Gperllib_sep)
-#endif
-#define PL_ppaddr		(my_vars->Gppaddr)
-#define PL_Gppaddr		(my_vars->Gppaddr)
-#ifdef OS2
-#define PL_sh_path		(my_vars->Gsh_path)
-#define PL_Gsh_path		(my_vars->Gsh_path)
-#endif
-#define PL_sig_defaulting	(my_vars->Gsig_defaulting)
-#define PL_Gsig_defaulting	(my_vars->Gsig_defaulting)
-#define PL_sig_handlers_initted	(my_vars->Gsig_handlers_initted)
-#define PL_Gsig_handlers_initted	(my_vars->Gsig_handlers_initted)
-#define PL_sig_ignoring		(my_vars->Gsig_ignoring)
-#define PL_Gsig_ignoring	(my_vars->Gsig_ignoring)
-#define PL_sig_trapped		(my_vars->Gsig_trapped)
-#define PL_Gsig_trapped		(my_vars->Gsig_trapped)
-#define PL_sigfpe_saved		(my_vars->Gsigfpe_saved)
-#define PL_Gsigfpe_saved	(my_vars->Gsigfpe_saved)
-#define PL_strategy_accept	(my_vars->Gstrategy_accept)
-#define PL_Gstrategy_accept	(my_vars->Gstrategy_accept)
-#define PL_strategy_dup		(my_vars->Gstrategy_dup)
-#define PL_Gstrategy_dup	(my_vars->Gstrategy_dup)
-#define PL_strategy_dup2	(my_vars->Gstrategy_dup2)
-#define PL_Gstrategy_dup2	(my_vars->Gstrategy_dup2)
-#define PL_strategy_mkstemp	(my_vars->Gstrategy_mkstemp)
-#define PL_Gstrategy_mkstemp	(my_vars->Gstrategy_mkstemp)
-#define PL_strategy_open	(my_vars->Gstrategy_open)
-#define PL_Gstrategy_open	(my_vars->Gstrategy_open)
-#define PL_strategy_open3	(my_vars->Gstrategy_open3)
-#define PL_Gstrategy_open3	(my_vars->Gstrategy_open3)
-#define PL_strategy_pipe	(my_vars->Gstrategy_pipe)
-#define PL_Gstrategy_pipe	(my_vars->Gstrategy_pipe)
-#define PL_strategy_socket	(my_vars->Gstrategy_socket)
-#define PL_Gstrategy_socket	(my_vars->Gstrategy_socket)
-#define PL_strategy_socketpair	(my_vars->Gstrategy_socketpair)
-#define PL_Gstrategy_socketpair	(my_vars->Gstrategy_socketpair)
-#define PL_sv_placeholder	(my_vars->Gsv_placeholder)
-#define PL_Gsv_placeholder	(my_vars->Gsv_placeholder)
-#define PL_thr_key		(my_vars->Gthr_key)
-#define PL_Gthr_key		(my_vars->Gthr_key)
-#define PL_timesbase		(my_vars->Gtimesbase)
-#define PL_Gtimesbase		(my_vars->Gtimesbase)
-#define PL_use_safe_putenv	(my_vars->Guse_safe_putenv)
-#define PL_Guse_safe_putenv	(my_vars->Guse_safe_putenv)
-#define PL_user_def_props	(my_vars->Guser_def_props)
-#define PL_Guser_def_props	(my_vars->Guser_def_props)
-#define PL_user_def_props_aTHX	(my_vars->Guser_def_props_aTHX)
-#define PL_Guser_def_props_aTHX	(my_vars->Guser_def_props_aTHX)
-#define PL_user_prop_mutex	(my_vars->Guser_prop_mutex)
-#define PL_Guser_prop_mutex	(my_vars->Guser_prop_mutex)
-#define PL_veto_cleanup		(my_vars->Gveto_cleanup)
-#define PL_Gveto_cleanup	(my_vars->Gveto_cleanup)
-#define PL_watch_pvx		(my_vars->Gwatch_pvx)
-#define PL_Gwatch_pvx		(my_vars->Gwatch_pvx)
-
-#endif /* PERL_GLOBAL_STRUCT */
-
 /* ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/feature.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/feature.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/feature.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -12,21 +12,24 @@
 
 #define HINT_FEATURE_SHIFT	26
 
-#define FEATURE_BITWISE_BIT         0x0001
-#define FEATURE___SUB___BIT         0x0002
-#define FEATURE_MYREF_BIT           0x0004
-#define FEATURE_EVALBYTES_BIT       0x0008
-#define FEATURE_FC_BIT              0x0010
-#define FEATURE_INDIRECT_BIT        0x0020
-#define FEATURE_ISA_BIT             0x0040
-#define FEATURE_POSTDEREF_QQ_BIT    0x0080
-#define FEATURE_REFALIASING_BIT     0x0100
-#define FEATURE_SAY_BIT             0x0200
-#define FEATURE_SIGNATURES_BIT      0x0400
-#define FEATURE_STATE_BIT           0x0800
-#define FEATURE_SWITCH_BIT          0x1000
-#define FEATURE_UNIEVAL_BIT         0x2000
-#define FEATURE_UNICODE_BIT         0x4000
+#define FEATURE_BAREWORD_FILEHANDLES_BIT 0x0001
+#define FEATURE_BITWISE_BIT              0x0002
+#define FEATURE___SUB___BIT              0x0004
+#define FEATURE_MYREF_BIT                0x0008
+#define FEATURE_EVALBYTES_BIT            0x0010
+#define FEATURE_FC_BIT                   0x0020
+#define FEATURE_INDIRECT_BIT             0x0040
+#define FEATURE_ISA_BIT                  0x0080
+#define FEATURE_MULTIDIMENSIONAL_BIT     0x0100
+#define FEATURE_POSTDEREF_QQ_BIT         0x0200
+#define FEATURE_REFALIASING_BIT          0x0400
+#define FEATURE_SAY_BIT                  0x0800
+#define FEATURE_SIGNATURES_BIT           0x1000
+#define FEATURE_STATE_BIT                0x2000
+#define FEATURE_SWITCH_BIT               0x4000
+#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
@@ -46,7 +49,7 @@
     ? (PL_curcop->cop_features & (mask)) : FALSE)
 
 /* The longest string we pass in.  */
-#define MAX_FEATURE_LEN (sizeof("postderef_qq")-1)
+#define MAX_FEATURE_LEN (sizeof("bareword_filehandles")-1)
 
 #define FEATURE_FC_IS_ENABLED \
     ( \
@@ -70,6 +73,12 @@
 	 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 && \
@@ -158,7 +167,21 @@
 	 FEATURE_IS_ENABLED_MASK(FEATURE_UNICODE_BIT)) \
     )
 
+#define FEATURE_MULTIDIMENSIONAL_IS_ENABLED \
+    ( \
+	CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+     || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+	 FEATURE_IS_ENABLED_MASK(FEATURE_MULTIDIMENSIONAL_BIT)) \
+    )
 
+#define FEATURE_BAREWORD_FILEHANDLES_IS_ENABLED \
+    ( \
+	CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+     || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+	 FEATURE_IS_ENABLED_MASK(FEATURE_BAREWORD_FILEHANDLES_BIT)) \
+    )
+
+
 #define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
 
 #define CLEARFEATUREBITS() (PL_compiling.cop_features = 0)
@@ -228,7 +251,12 @@
             return;
 
         case 'b':
-            if (keylen == sizeof("feature_bitwise")-1
+            if (keylen == sizeof("feature_bareword_filehandles")-1
+                 && memcmp(subf+1, "areword_filehandles", keylen - sizeof("feature_")) == 0) {
+                mask = FEATURE_BAREWORD_FILEHANDLES_BIT;
+                break;
+            }
+            else if (keylen == sizeof("feature_bitwise")-1
                  && memcmp(subf+1, "itwise", keylen - sizeof("feature_")) == 0) {
                 mask = FEATURE_BITWISE_BIT;
                 break;
@@ -265,7 +293,12 @@
             return;
 
         case 'm':
-            if (keylen == sizeof("feature_myref")-1
+            if (keylen == sizeof("feature_multidimensional")-1
+                 && memcmp(subf+1, "ultidimensional", keylen - sizeof("feature_")) == 0) {
+                mask = FEATURE_MULTIDIMENSIONAL_BIT;
+                break;
+            }
+            else if (keylen == sizeof("feature_myref")-1
                  && memcmp(subf+1, "yref", keylen - sizeof("feature_")) == 0) {
                 mask = FEATURE_MYREF_BIT;
                 break;
@@ -311,6 +344,14 @@
             }
             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) {

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/gv.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/gv.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/gv.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -26,34 +26,34 @@
 #define GvXPVGV(gv)	((XPVGV*)SvANY(gv))
 
 
-#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__INTEL_COMPILER)
+#if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS) && !defined(__INTEL_COMPILER)
 #  define GvGP(gv)							\
-	(0+(*({GV *const _gvgp = (GV *) (gv);				\
-	    assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
-	    assert(isGV_with_GP(_gvgp));				\
-	    &((_gvgp)->sv_u.svu_gp);})))
+        (0+(*({GV *const _gvgp = (GV *) (gv);				\
+            assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
+            assert(isGV_with_GP(_gvgp));				\
+            &((_gvgp)->sv_u.svu_gp);})))
 #  define GvGP_set(gv,gp)						\
-	{GV *const _gvgp = (GV *) (gv);				\
-	    assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
-	    assert(isGV_with_GP(_gvgp));				\
-	    (_gvgp)->sv_u.svu_gp = (gp); }
+        {GV *const _gvgp = (GV *) (gv);				\
+            assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
+            assert(isGV_with_GP(_gvgp));				\
+            (_gvgp)->sv_u.svu_gp = (gp); }
 #  define GvFLAGS(gv)							\
-	(*({GV *const _gvflags = (GV *) (gv);				\
-	    assert(SvTYPE(_gvflags) == SVt_PVGV || SvTYPE(_gvflags) == SVt_PVLV); \
-	    assert(isGV_with_GP(_gvflags));				\
-	    &(GvXPVGV(_gvflags)->xpv_cur);}))
+        (*({GV *const _gvflags = (GV *) (gv);				\
+            assert(SvTYPE(_gvflags) == SVt_PVGV || SvTYPE(_gvflags) == SVt_PVLV); \
+            assert(isGV_with_GP(_gvflags));				\
+            &(GvXPVGV(_gvflags)->xpv_cur);}))
 #  define GvSTASH(gv)							\
-	(*({ GV * const _gvstash = (GV *) (gv);				\
-	    assert(isGV_with_GP(_gvstash));				\
-	    assert(SvTYPE(_gvstash) == SVt_PVGV || SvTYPE(_gvstash) >= SVt_PVLV); \
-	    &(GvXPVGV(_gvstash)->xnv_u.xgv_stash);			\
-	 }))
+        (*({ GV * const _gvstash = (GV *) (gv);				\
+            assert(isGV_with_GP(_gvstash));				\
+            assert(SvTYPE(_gvstash) == SVt_PVGV || SvTYPE(_gvstash) >= SVt_PVLV); \
+            &(GvXPVGV(_gvstash)->xnv_u.xgv_stash);			\
+         }))
 #  define GvNAME_HEK(gv)						\
     (*({ GV * const _gvname_hek = (GV *) (gv);				\
-	   assert(isGV_with_GP(_gvname_hek));				\
-	   assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \
-	   &(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek);			\
-	 }))
+           assert(isGV_with_GP(_gvname_hek));				\
+           assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \
+           &(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek);			\
+         }))
 #  define GvNAME_get(gv)	({ assert(GvNAME_HEK(gv)); (char *)HEK_KEY(GvNAME_HEK(gv)); })
 #  define GvNAMELEN_get(gv)	({ assert(GvNAME_HEK(gv)); HEK_LEN(GvNAME_HEK(gv)); })
 #  define GvNAMEUTF8(gv)	({ assert(GvNAME_HEK(gv)); HEK_UTF8(GvNAME_HEK(gv)); })
@@ -72,12 +72,17 @@
 #define GvNAMELEN(gv)	GvNAMELEN_get(gv)
 
 /*
-=head1 GV Functions
-
 =for apidoc Am|SV*|GvSV|GV* gv
 
 Return the SV from the GV.
 
+Prior to Perl v5.9.3, this would add a scalar if none existed.  Nowadays, use
+C<L</GvSVn>> for that, or compile perl with S<C<-DPERL_CREATE_GVSV>>.  See
+L<perl5100delta>.
+
+=for apidoc Am|SV*|GvSVn|GV* gv
+Like C<L</GvSV>>, but creates an empty scalar if none already exists.
+
 =for apidoc Am|AV*|GvAV|GV* gv
 
 Return the AV from the GV.
@@ -96,8 +101,8 @@
 #define GvSV(gv)	(GvGP(gv)->gp_sv)
 #ifdef PERL_DONT_CREATE_GVSV
 #define GvSVn(gv)	(*(GvGP(gv)->gp_sv ? \
-			 &(GvGP(gv)->gp_sv) : \
-			 &(GvGP(gv_SVadd(gv))->gp_sv)))
+                         &(GvGP(gv)->gp_sv) : \
+                         &(GvGP(gv_SVadd(gv))->gp_sv)))
 #else
 #define GvSVn(gv)	GvSV(gv)
 #endif
@@ -121,13 +126,13 @@
 #define GvAV(gv)	(GvGP(gv)->gp_av)
 
 #define GvAVn(gv)	(GvGP(gv)->gp_av ? \
-			 GvGP(gv)->gp_av : \
-			 GvGP(gv_AVadd(gv))->gp_av)
+                         GvGP(gv)->gp_av : \
+                         GvGP(gv_AVadd(gv))->gp_av)
 #define GvHV(gv)	((GvGP(gv))->gp_hv)
 
 #define GvHVn(gv)	(GvGP(gv)->gp_hv ? \
-			 GvGP(gv)->gp_hv : \
-			 GvGP(gv_HVadd(gv))->gp_hv)
+                         GvGP(gv)->gp_hv : \
+                         GvGP(gv_HVadd(gv))->gp_hv)
 
 #define GvCV(gv)	(0+GvGP(gv)->gp_cv)
 #define GvCV_set(gv,cv)	(GvGP(gv)->gp_cv = (cv))
@@ -216,37 +221,38 @@
  * symbol creation flags, for use in gv_fetchpv() and get_*v()
  */
 #define GV_ADD		0x01	/* add, if symbol not already there
-				   For gv_name_set, adding a HEK for the first
-				   time, so don't try to free what's there.  */
+                                   For gv_name_set, adding a HEK for the first
+                                   time, so don't try to free what's there.  */
 #define GV_ADDMULTI	0x02	/* add, pretending it has been added
-				   already; used also by gv_init_* */
+                                   already; used also by gv_init_* */
 #define GV_ADDWARN	0x04	/* add, but warn if symbol wasn't already there */
-		/*	0x08	   UNUSED */
+                /*	0x08	   UNUSED */
 #define GV_NOINIT	0x10	/* add, but don't init symbol, if type != PVGV */
 /* This is used by toke.c to avoid turing placeholder constants in the symbol
    table into full PVGVs with attached constant subroutines.  */
 #define GV_NOADD_NOINIT	0x20	/* Don't add the symbol if it's not there.
-				   Don't init it if it is there but ! PVGV */
+                                   Don't init it if it is there but ! PVGV */
 #define GV_NOEXPAND	0x40	/* Don't expand SvOK() entries to PVGV */
 #define GV_NOTQUAL	0x80	/* A plain symbol name, not qualified with a
-				   package (so skip checks for :: and ')  */
+                                   package (so skip checks for :: and ')  */
 #define GV_AUTOLOAD	0x100	/* gv_fetchmethod_flags() should AUTOLOAD  */
 #define GV_CROAK	0x200	/* gv_fetchmethod_flags() should croak  */
 #define GV_ADDMG	0x400	/* add if magical */
 #define GV_NO_SVGMAGIC	0x800	/* Skip get-magic on an SV argument;
-				   used only by gv_fetchsv(_nomg) */
+                                   used only by gv_fetchsv(_nomg) */
 #define GV_CACHE_ONLY	0x1000  /* return stash only if found in cache;
-				   used only in flags parameter to gv_stash* family */
+                                   used only in flags parameter to gv_stash* family */
 
 /* Flags for gv_fetchmeth_pvn and gv_autoload_pvn*/
 #define GV_SUPER	0x1000	/* SUPER::method */
+#define GV_NOUNIVERSAL  0x2000  /* Skip UNIVERSAL lookup */
 
 /* Flags for gv_autoload_*/
 #define GV_AUTOLOAD_ISMETHOD 1	/* autoloading a method? */
 
 /*      SVf_UTF8 (more accurately the return value from SvUTF8) is also valid
-	as a flag to various gv_* functions, so ensure it lies
-	outside this range.
+        as a flag to various gv_* functions, so ensure it lies
+        outside this range.
 */
 
 #define GV_NOADD_MASK \
@@ -260,19 +266,26 @@
 #define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE)
 #define gv_fetchsv_nomg(n,f,t) gv_fetchsv(n,(f)|GV_NO_SVGMAGIC,t)
 #define gv_init(gv,stash,name,len,multi) \
-	gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi))
+        gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi))
 #define gv_fetchmeth(stash,name,len,level) gv_fetchmeth_pvn(stash, name, len, level, 0)
 #define gv_fetchmeth_autoload(stash,name,len,level) gv_fetchmeth_pvn_autoload(stash, name, len, level, 0)
 #define gv_fetchmethod_flags(stash,name,flags) gv_fetchmethod_pv_flags(stash, name, flags)
-#define gv_autoload4(stash, name, len, method) \
-	gv_autoload_pvn(stash, name, len, !!(method))
+
+/*
+=for apidoc gv_autoload4
+Equivalent to C<L</gv_autoload_pvn>>.
+
+=cut
+*/
+#define gv_autoload4(stash, name, len, autoload) \
+        gv_autoload_pvn(stash, name, len, !!(autoload))
 #define newGVgen(pack)  newGVgen_flags(pack, 0)
 #define gv_method_changed(gv)		    \
     (					     \
-    	assert_(isGV_with_GP(gv))	      \
-	GvREFCNT(gv) > 1		       \
-	    ? (void)++PL_sub_generation		\
-	    : mro_method_changed_in(GvSTASH(gv)) \
+        assert_(isGV_with_GP(gv))	      \
+        GvREFCNT(gv) > 1		       \
+            ? (void)++PL_sub_generation		\
+            : mro_method_changed_in(GvSTASH(gv)) \
     )
 
 #define gv_AVadd(gv) gv_add_by_type((gv), SVt_PVAV)

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/handy.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/handy.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/handy.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -18,16 +18,40 @@
 #  define Null(type) ((type)NULL)
 
 /*
-=head1 Handy Values
-
+=for apidoc_section $string
 =for apidoc AmnU||Nullch
 Null character pointer.  (No longer available when C<PERL_CORE> is
 defined.)
 
+=for apidoc_section $SV
 =for apidoc AmnU||Nullsv
 Null SV pointer.  (No longer available when C<PERL_CORE> is defined.)
 
 =cut
+
+Below are signatures of functions from config.h which can't easily be gleaned
+from it, and are very unlikely to change
+
+=for apidoc_section $signals
+=for apidoc Am|int|Sigsetjmp|jmp_buf env|int savesigs
+=for apidoc Am|void|Siglongjmp|jmp_buf env|int val
+
+=for apidoc_section $filesystem
+=for apidoc Am|void *|FILE_ptr|FILE * f
+=for apidoc Am|Size_t|FILE_cnt|FILE * f
+=for apidoc Am|void *|FILE_base|FILE * f
+=for apidoc Am|Size_t|FILE_bufsiz|FILE *f
+
+=for apidoc_section $string
+=for apidoc Amu|token|CAT2|token x|token y
+=for apidoc Amu|string|STRINGIFY|token x
+
+=for apidoc_section $numeric
+=for apidoc Am|double|Drand01
+=for apidoc Am|void|seedDrand01|Rand_seed_t x
+=for apidoc Am|char *|Gconvert|double x|Size_t n|bool t|char * b
+
+=cut
 */
 
 #  define Nullch Null(char*)
@@ -44,17 +68,33 @@
 #define TRUE (1)
 #define FALSE (0)
 
-/* The MUTABLE_*() macros cast pointers to the types shown, in such a way
- * (compiler permitting) that casting away const-ness will give a warning;
- * e.g.:
- *
- * const SV *sv = ...;
- * AV *av1 = (AV*)sv;        <== BAD:  the const has been silently cast away
- * AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn
+/*
+=for apidoc_section $SV
+=for apidoc Am|void *|MUTABLE_PTR|void * p
+=for apidoc_item |AV *|MUTABLE_AV|AV * p
+=for apidoc_item |CV *|MUTABLE_CV|CV * p
+=for apidoc_item |GV *|MUTABLE_GV|GV * p
+=for apidoc_item |HV *|MUTABLE_HV|HV * p
+=for apidoc_item |IO *|MUTABLE_IO|IO * p
+=for apidoc_item |SV *|MUTABLE_SV|SV * p
+
+The C<MUTABLE_I<*>>() macros cast pointers to the types shown, in such a way
+(compiler permitting) that casting away const-ness will give a warning;
+e.g.:
+
+ const SV *sv = ...;
+ AV *av1 = (AV*)sv;        <== BAD:  the const has been silently
+                                     cast away
+ AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn
+
+C<MUTABLE_PTR> is the base macro used to derive new casts.  The other
+already-built-in ones return pointers to what their names indicate.
+
+=cut
  */
 
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
-#  define MUTABLE_PTR(p) ({ void *_p = (p); _p; })
+#if defined(PERL_USE_GCC_BRACE_GROUPS)
+#  define MUTABLE_PTR(p) ({ void *p_ = (p); p_; })
 #else
 #  define MUTABLE_PTR(p) ((void *) (p))
 #endif
@@ -98,6 +138,7 @@
 #endif
 
 /*
+=for apidoc_section $casting
 =for apidoc Am|bool|cBOOL|bool expr
 
 Cast-to-bool.  A simple S<C<(bool) I<expr>>> cast may not do the right thing:
@@ -142,13 +183,13 @@
    For dealing with issues that may arise from various 32/64-bit
    systems, we will ask Configure to check out
 
-	SHORTSIZE == sizeof(short)
-	INTSIZE == sizeof(int)
-	LONGSIZE == sizeof(long)
-	LONGLONGSIZE == sizeof(long long) (if HAS_LONG_LONG)
-	PTRSIZE == sizeof(void *)
-	DOUBLESIZE == sizeof(double)
-	LONG_DOUBLESIZE == sizeof(long double) (if HAS_LONG_DOUBLE).
+        SHORTSIZE == sizeof(short)
+        INTSIZE == sizeof(int)
+        LONGSIZE == sizeof(long)
+        LONGLONGSIZE == sizeof(long long) (if HAS_LONG_LONG)
+        PTRSIZE == sizeof(void *)
+        DOUBLESIZE == sizeof(double)
+        LONG_DOUBLESIZE == sizeof(long double) (if HAS_LONG_DOUBLE).
 
 */
 
@@ -176,60 +217,86 @@
 typedef U64TYPE U64;
 #endif
 
-#if defined(UINT8_MAX) && defined(INT16_MAX) && defined(INT32_MAX)
-
 /* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type.
    Please search CHAR_MAX in perl.h for further details. */
-#define U8_MAX UINT8_MAX
-#define U8_MIN UINT8_MIN
-
-#define I16_MAX INT16_MAX
-#define I16_MIN INT16_MIN
-#define U16_MAX UINT16_MAX
-#define U16_MIN UINT16_MIN
-
-#define I32_MAX INT32_MAX
-#define I32_MIN INT32_MIN
-#ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
-#  define U32_MAX UINT32_MAX
+#ifdef UINT8_MAX
+#  define U8_MAX UINT8_MAX
 #else
-#  define U32_MAX 4294967295U
+#  define U8_MAX PERL_UCHAR_MAX
 #endif
-#define U32_MIN UINT32_MIN
-
+#ifdef UINT8_MIN
+#  define U8_MIN UINT8_MIN
 #else
+#  define U8_MIN PERL_UCHAR_MIN
+#endif
 
-/* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type.
-   Please search CHAR_MAX in perl.h for further details. */
-#define U8_MAX PERL_UCHAR_MAX
-#define U8_MIN PERL_UCHAR_MIN
-
-#define I16_MAX PERL_SHORT_MAX
-#define I16_MIN PERL_SHORT_MIN
-#define U16_MAX PERL_USHORT_MAX
-#define U16_MIN PERL_USHORT_MIN
-
-#if LONGSIZE > 4
-# define I32_MAX PERL_INT_MAX
-# define I32_MIN PERL_INT_MIN
-# define U32_MAX PERL_UINT_MAX
-# define U32_MIN PERL_UINT_MIN
+#ifdef INT16_MAX
+#  define I16_MAX INT16_MAX
 #else
-# define I32_MAX PERL_LONG_MAX
-# define I32_MIN PERL_LONG_MIN
-# define U32_MAX PERL_ULONG_MAX
-# define U32_MIN PERL_ULONG_MIN
+#  define I16_MAX PERL_SHORT_MAX
 #endif
+#ifdef INT16_MIN
+#  define I16_MIN INT16_MIN
+#else
+#  define I16_MIN PERL_SHORT_MIN
+#endif
+#ifdef UINT16_MAX
+#  define U16_MAX UINT16_MAX
+#else
+#  define U16_MAX PERL_USHORT_MAX
+#endif
+#ifdef UINT16_MIN
+#  define U16_MIN UINT16_MIN
+#else
+#  define U16_MIN PERL_USHORT_MIN
+#endif
 
+#ifdef INT32_MAX
+#  define I32_MAX INT32_MAX
+#elif LONGSIZE > 4
+#  define I32_MAX PERL_INT_MAX
+#else
+#  define I32_MAX PERL_LONG_MAX
 #endif
+#ifdef INT32_MIN
+#  define I32_MIN INT32_MIN
+#elif LONGSIZE > 4
+#  define I32_MIN PERL_INT_MIN
+#else
+#  define I32_MIN PERL_LONG_MIN
+#endif
+#ifdef UINT32_MAX
+#  ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
+#    define U32_MAX UINT_MAX
+#  else
+#    define U32_MAX 4294967295U
+#  endif
+#elif LONGSIZE > 4
+#  define U32_MAX PERL_UINT_MAX
+#else
+#  define U32_MAX PERL_ULONG_MAX
+#endif
+#ifdef UINT32_MIN
+#  define U32_MIN UINT32_MIN
+#elif LONGSIZE > 4
+#  define U32_MIN PERL_UINT_MIN
+#else
+#  define U32_MIN PERL_ULONG_MIN
+#endif
 
-/* These C99 typedefs are useful sometimes for, say, loop variables whose
- * maximum values are small, but for which speed trumps size.  If we have a C99
- * compiler, use that.  Otherwise, a plain 'int' should be good enough.
- *
- * Restrict these to core for now until we are more certain this is a good
- * idea. */
-#if defined(PERL_CORE) || defined(PERL_EXT)
+/*
+=for apidoc_section $integer
+=for apidoc Ay|| PERL_INT_FAST8_T
+=for apidoc_item PERL_INT_FAST16_T
+=for apidoc_item PERL_UINT_FAST8_T
+=for apidoc_item PERL_UINT_FAST16_T
+
+These are equivalent to the correspondingly-named C99 typedefs on platforms
+that have those; they evaluate to C<int> and C<unsigned int> on platforms that
+don't, so that you can portably take advantage of this C99 feature.
+
+=cut
+*/
 #  ifdef I_STDINT
     typedef  int_fast8_t  PERL_INT_FAST8_T;
     typedef uint_fast8_t  PERL_UINT_FAST8_T;
@@ -241,10 +308,12 @@
     typedef int           PERL_INT_FAST16_T;
     typedef unsigned int  PERL_UINT_FAST16_T;
 #  endif
-#endif
 
 /* log(2) (i.e., log base 10 of 2) is pretty close to 0.30103, just in case
- * anyone is grepping for it */
+ * anyone is grepping for it.  So BIT_DIGITS gives the number of decimal digits
+ * required to represent any possible unsigned number containing N bits.
+ * TYPE_DIGITS gives the number of decimal digits required to represent any
+ * possible unsigned number of type T. */
 #define BIT_DIGITS(N)   (((N)*146)/485 + 1)  /* log10(2) =~ 146/485 */
 #define TYPE_DIGITS(T)  BIT_DIGITS(sizeof(T) * 8)
 #define TYPE_CHARS(T)   (TYPE_DIGITS(T) + 2) /* sign, NUL */
@@ -269,8 +338,15 @@
 #  define isPOWER_OF_2(n) ((n) && ((n) & ((n)-1)) == 0)
 #endif
 
+/* Returns a mask with the lowest n bits set */
+#define nBIT_MASK(n) ((UINTMAX_C(1) << (n)) - 1)
+
+/* The largest unsigned number that will fit into n bits */
+#define nBIT_UMAX(n)  nBIT_MASK(n)
+
 /*
-=for apidoc Am|void|__ASSERT_|bool expr
+=for apidoc_section $directives
+=for apidoc Am||__ASSERT_|bool expr
 
 This is a helper macro to avoid preprocessor issues, replaced by nothing
 unless under DEBUGGING, where it expands to an assert of its argument,
@@ -279,7 +355,7 @@
 
 =cut
 
-We also use empty definition under Coverity since the __ASSERT__
+We also use empty definition under Coverity since the __ASSERT_
 checks often check for things that Really Cannot Happen, and Coverity
 detects that and gets all excited. */
 
@@ -291,7 +367,7 @@
 #endif
 
 /*
-=head1 SV Manipulation Functions
+=for apidoc_section $SV
 
 =for apidoc Ama|SV*|newSVpvs|"literal string"
 Like C<newSVpvn>, but takes a literal string instead of a
@@ -333,7 +409,7 @@
 Like C<sv_setref_pvn>, but takes a literal string instead of
 a string/length pair.
 
-=head1 Memory Management
+=for apidoc_section $string
 
 =for apidoc Ama|char*|savepvs|"literal string"
 Like C<savepvn>, but takes a literal string instead of a
@@ -343,13 +419,13 @@
 A version of C<savepvs()> which allocates the duplicate string in memory
 which is shared between threads.
 
-=head1 GV Functions
+=for apidoc_section $GV
 
 =for apidoc Am|HV*|gv_stashpvs|"name"|I32 create
 Like C<gv_stashpvn>, but takes a literal string instead of a
 string/length pair.
 
-=head1 Hash Manipulation Functions
+=for apidoc_section $HV
 
 =for apidoc Am|SV**|hv_fetchs|HV* tb|"key"|I32 lval
 Like C<hv_fetch>, but takes a literal string instead of a
@@ -360,7 +436,7 @@
 string/length pair
 and omits the hash parameter.
 
-=head1 Lexer interface
+=for apidoc_section $lexer
 
 =for apidoc Amx|void|lex_stuff_pvs|"pv"|U32 flags
 
@@ -371,7 +447,7 @@
 */
 
 /*
-=head1 Handy Values
+=for apidoc_section $string
 
 =for apidoc Amu|pair|STR_WITH_LEN|"literal string"
 
@@ -384,7 +460,6 @@
 =cut
 */
 
-
 #define STR_WITH_LEN(s)  ("" s ""), (sizeof(s)-1)
 
 /* STR_WITH_LEN() shortcuts */
@@ -408,10 +483,10 @@
 #define savesharedpvs(str) Perl_savesharedpvn(aTHX_ STR_WITH_LEN(str))
 #define gv_stashpvs(str, create) \
     Perl_gv_stashpvn(aTHX_ STR_WITH_LEN(str), create)
-#define gv_fetchpvs(namebeg, add, sv_type) \
-    Perl_gv_fetchpvn_flags(aTHX_ STR_WITH_LEN(namebeg), add, sv_type)
-#define gv_fetchpvn(namebeg, len, add, sv_type) \
-    Perl_gv_fetchpvn_flags(aTHX_ namebeg, len, add, sv_type)
+
+#define gv_fetchpvs(namebeg, flags, sv_type) \
+    Perl_gv_fetchpvn_flags(aTHX_ STR_WITH_LEN(namebeg), flags, sv_type)
+#define  gv_fetchpvn  gv_fetchpvn_flags
 #define sv_catxmlpvs(dsv, str, utf8) \
     Perl_sv_catxmlpvn(aTHX_ dsv, STR_WITH_LEN(str), utf8)
 
@@ -419,11 +494,106 @@
 #define lex_stuff_pvs(pv,flags) Perl_lex_stuff_pvn(aTHX_ STR_WITH_LEN(pv), flags)
 
 #define get_cvs(str, flags)					\
-	Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags))
+        Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags))
 
+/* internal helpers */
+/* Transitional */
+#ifndef PERL_VERSION_MAJOR
+#  define PERL_VERSION_MAJOR  PERL_REVISION
+#else
+#  undef  PERL_REVISION     /* We don't want code to be using these */
+#endif
+#ifndef PERL_VERSION_MINOR
+#  define PERL_VERSION_MINOR  PERL_VERSION
+#else
+#  undef  PERL_VERSION
+#endif
+#ifndef PERL_VERSION_PATCH
+#  define PERL_VERSION_PATCH  PERL_SUBVERSION
+#else
+#  undef  PERL_SUBVERSION
+#endif
+
+#define PERL_JNP_TO_DECIMAL_(maJor,miNor,Patch)                             \
+            /* '10*' leaves room for things like alpha, beta, releases */   \
+                    (10 * ((maJor) * 1000000) + ((miNor) * 1000) + (Patch))
+#define PERL_DECIMAL_VERSION_                                               \
+        PERL_JNP_TO_DECIMAL_(PERL_VERSION_MAJOR, PERL_VERSION_MINOR,        \
+                                                        PERL_VERSION_PATCH)
+
 /*
-=head1 Miscellaneous Functions
+=for apidoc_section $versioning
+=for apidoc AmR|bool|PERL_VERSION_EQ|const U8 major|const U8 minor|const U8 patch
+=for apidoc_item PERL_VERSION_NE
+=for apidoc_item PERL_VERSION_LT
+=for apidoc_item PERL_VERSION_LE
+=for apidoc_item PERL_VERSION_GT
+=for apidoc_item PERL_VERSION_GE
 
+Returns whether or not the perl currently being compiled has the specified
+relationship to the perl given by the parameters.  For example,
+
+ #if PERL_VERSION_GT(5,24,2)
+   code that will only be compiled on perls after v5.24.2
+ #else
+   fallback code
+ #endif
+
+Note that this is usable in making compile-time decisions
+
+You may use the special value '*' for the final number to mean ALL possible
+values for it.  Thus,
+
+ #if PERL_VERSION_EQ(5,31,'*')
+
+means all perls in the 5.31 series.  And
+
+ #if PERL_VERSION_NE(5,24,'*')
+
+means all perls EXCEPT 5.24 ones.  And
+
+ #if PERL_VERSION_LE(5,9,'*')
+
+is effectively
+
+ #if PERL_VERSION_LT(5,10,0)
+
+This means you don't have to think so much when converting from the existing
+deprecated C<PERL_VERSION> to using this macro:
+
+ #if PERL_VERSION <= 9
+
+becomes
+
+ #if PERL_VERSION_LE(5,9,'*')
+
+=cut
+*/
+
+/* N.B. These don't work if the patch version is 42 or 92, as those are what
+ * '*' is in ASCII and EBCDIC respectively */
+# define PERL_VERSION_EQ(j,n,p)                                             \
+              (((p) == '*')                                                 \
+               ? (   (j) == PERL_VERSION_MAJOR                              \
+                  && (n) == PERL_VERSION_MINOR)                             \
+               : (PERL_DECIMAL_VERSION_ == PERL_JNP_TO_DECIMAL_(j,n,p)))
+# define PERL_VERSION_NE(j,n,p) (! PERL_VERSION_EQ(j,n,p))
+
+# define PERL_VERSION_LT(j,n,p) /* < '*' effectively means < 0 */           \
+    (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_( (j),                     \
+                                                   (n),                     \
+                                                 (((p) == '*') ? 0 : p)))
+# define PERL_VERSION_GE(j,n,p)  (! PERL_VERSION_LT(j,n,p))
+
+# define PERL_VERSION_LE(j,n,p)  /* <= '*' effectively means < n+1 */       \
+    (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_(                  (j),    \
+                                          (((p) == '*') ? ((n)+1) : (n)),   \
+                                          (((p) == '*') ? 0 : p)))
+# define PERL_VERSION_GT(j,n,p) (! PERL_VERSION_LE(j,n,p))
+
+/*
+=for apidoc_section $string
+
 =for apidoc Am|bool|strNE|char* s1|char* s2
 Test two C<NUL>-terminated strings to see if they are different.  Returns true
 or false.
@@ -461,22 +631,24 @@
 =for apidoc Am|bool|memEQ|char* s1|char* s2|STRLEN len
 Test two buffers (which may contain embedded C<NUL> characters, to see if they
 are equal.  The C<len> parameter indicates the number of bytes to compare.
-Returns zero if equal, or non-zero if non-equal.
+Returns true or false.  It is undefined behavior if either of the buffers
+doesn't contain at least C<len> bytes.
 
 =for apidoc Am|bool|memEQs|char* s1|STRLEN l1|"s2"
 Like L</memEQ>, but the second string is a literal enclosed in double quotes,
 C<l1> gives the number of bytes in C<s1>.
-Returns zero if equal, or non-zero if non-equal.
+Returns true or false.
 
 =for apidoc Am|bool|memNE|char* s1|char* s2|STRLEN len
 Test two buffers (which may contain embedded C<NUL> characters, to see if they
 are not equal.  The C<len> parameter indicates the number of bytes to compare.
-Returns zero if non-equal, or non-zero if equal.
+Returns true or false.  It is undefined behavior if either of the buffers
+doesn't contain at least C<len> bytes.
 
 =for apidoc Am|bool|memNEs|char* s1|STRLEN l1|"s2"
 Like L</memNE>, but the second string is a literal enclosed in double quotes,
 C<l1> gives the number of bytes in C<s1>.
-Returns zero if non-equal, or zero if non-equal.
+Returns true or false.
 
 =for apidoc Am|bool|memCHRs|"list"|char c
 Returns the position of the first occurence of the byte C<c> in the literal
@@ -591,7 +763,7 @@
  * the current locale will use the tests that begin with "lc".
  */
 
-#ifdef HAS_SETLOCALE  /* XXX Is there a better test for this? */
+#ifdef USE_LOCALE
 #  ifndef CTYPE256
 #    define CTYPE256
 #  endif
@@ -673,38 +845,43 @@
 return FALSE, at the discretion of the implementation, and subject to change in
 future releases.
 
-=for apidoc Am|bool|isALPHA|int ch
+=for apidoc Am|bool|isALPHA|UV ch
+=for apidoc_item ||isALPHA_A|UV ch
+=for apidoc_item ||isALPHA_L1|UV ch
+=for apidoc_item ||isALPHA_uvchr|UV ch
+=for apidoc_item ||isALPHA_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isALPHA_utf8|U8 * s|U8 * end
+=for apidoc_item ||isALPHA_LC|UV ch
+=for apidoc_item ||isALPHA_LC_uvchr|UV ch
+=for apidoc_item ||isALPHA_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified input is one of C<[A-Za-z]>,
 analogous to C<m/[[:alpha:]]/>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isALPHA_A>, C<isALPHA_L1>, C<isALPHA_uvchr>, C<isALPHA_utf8>,
-C<isALPHA_utf8_safe>, C<isALPHA_LC>, C<isALPHA_LC_uvchr>, C<isALPHA_LC_utf8>,
-and C<isALPHA_LC_utf8_safe>.
+the variants.
 
 =cut
 
-Here and below, we add the protoypes of these macros for downstream programs
+Here and below, we add the prototypes of these macros for downstream programs
 that would be interested in them, such as Devel::PPPort
 
-=for apidoc Amh|bool|isALPHA_A|int ch
-=for apidoc Amh|bool|isALPHA_L1|int ch
-=for apidoc Amh|bool|isALPHA_uvchr|int ch
-=for apidoc Amh|bool|isALPHA_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isALPHA_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isALPHA_LC|int ch
-=for apidoc Amh|bool|isALPHA_LC_uvchr|int ch
-=for apidoc Amh|bool|isALPHA_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isALPHANUMERIC|int ch
+=for apidoc Am|bool|isALPHANUMERIC|UV ch
+=for apidoc_item ||isALPHANUMERIC_A|UV ch
+=for apidoc_item ||isALPHANUMERIC_L1|UV ch
+=for apidoc_item ||isALPHANUMERIC_uvchr|UV ch
+=for apidoc_item ||isALPHANUMERIC_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isALPHANUMERIC_utf8|U8 * s|U8 * end
+=for apidoc_item ||isALPHANUMERIC_LC|UV ch
+=for apidoc_item ||isALPHANUMERIC_LC_uvchr|UV ch
+=for apidoc_item ||isALPHANUMERIC_LC_utf8_safe|U8 * s| U8 *end
+=for apidoc_item ||isALNUMC|UV ch
+=for apidoc_item ||isALNUMC_A|UV ch
+=for apidoc_item ||isALNUMC_L1|UV ch
+=for apidoc_item ||isALNUMC_LC|UV ch
+=for apidoc_item ||isALNUMC_LC_uvchr|UV ch
 Returns a boolean indicating whether the specified character is one of
 C<[A-Za-z0-9]>, analogous to C<m/[[:alnum:]]/>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isALPHANUMERIC_A>, C<isALPHANUMERIC_L1>, C<isALPHANUMERIC_uvchr>,
-C<isALPHANUMERIC_utf8>, C<isALPHANUMERIC_utf8_safe>, C<isALPHANUMERIC_LC>,
-C<isALPHANUMERIC_LC_uvchr>, C<isALPHANUMERIC_LC_utf8>, and
-C<isALPHANUMERIC_LC_utf8_safe>.
+the variants.
 
 A (discouraged from use) synonym is C<isALNUMC> (where the C<C> suffix means
 this corresponds to the C language alphanumeric definition).  Also
@@ -712,21 +889,15 @@
 C<isALNUMC_A>, C<isALNUMC_L1>
 C<isALNUMC_LC>, and C<isALNUMC_LC_uvchr>.
 
-=for apidoc Amh|bool|isALPHANUMERIC_A|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_L1|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_uvchr|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isALPHANUMERIC_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isALPHANUMERIC_LC|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_LC_uvchr|int ch
-=for apidoc Amh|bool|isALPHANUMERIC_LC_utf8_safe|U8 * s| U8 *end
-=for apidoc Amh|bool|isALNUMC|int ch
-=for apidoc Amh|bool|isALNUMC_A|int ch
-=for apidoc Amh|bool|isALNUMC_L1|int ch
-=for apidoc Amh|bool|isALNUMC_LC|int ch
-=for apidoc Amh|bool|isALNUMC_LC_uvchr|int ch
-
-=for apidoc Am|bool|isASCII|int ch
+=for apidoc Am|bool|isASCII|UV ch
+=for apidoc_item ||isASCII_A|UV ch
+=for apidoc_item ||isASCII_L1|UV ch
+=for apidoc_item ||isASCII_uvchr|UV ch
+=for apidoc_item ||isASCII_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isASCII_utf8|U8 * s|U8 * end
+=for apidoc_item ||isASCII_LC|UV ch
+=for apidoc_item ||isASCII_LC_uvchr|UV ch
+=for apidoc_item ||isASCII_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is one of the 128
 characters in the ASCII character set, analogous to C<m/[[:ascii:]]/>.
 On non-ASCII platforms, it returns TRUE iff this
@@ -733,22 +904,11 @@
 character corresponds to an ASCII character.  Variants C<isASCII_A()> and
 C<isASCII_L1()> are identical to C<isASCII()>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isASCII_uvchr>, C<isASCII_utf8>, C<isASCII_utf8_safe>, C<isASCII_LC>,
-C<isASCII_LC_uvchr>, C<isASCII_LC_utf8>, and C<isASCII_LC_utf8_safe>.
+the variants.
 Note, however, that some platforms do not have the C library routine
 C<isascii()>.  In these cases, the variants whose names contain C<LC> are the
 same as the corresponding ones without.
 
-=for apidoc Amh|bool|isASCII_A|int ch
-=for apidoc Amh|bool|isASCII_L1|int ch
-=for apidoc Amh|bool|isASCII_uvchr|int ch
-=for apidoc Amh|bool|isASCII_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isASCII_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isASCII_LC|int ch
-=for apidoc Amh|bool|isASCII_LC_uvchr|int ch
-=for apidoc Amh|bool|isASCII_LC_utf8_safe|U8 * s| U8 *end
-
 Also note, that because all ASCII characters are UTF-8 invariant (meaning they
 have the exact same representation (always a single byte) whether encoded in
 UTF-8 or not), C<isASCII> will give the correct results when called with any
@@ -755,109 +915,101 @@
 byte in any string encoded or not in UTF-8.  And similarly C<isASCII_utf8> and
 C<isASCII_utf8_safe> will work properly on any string encoded or not in UTF-8.
 
-=for apidoc Am|bool|isBLANK|char ch
+=for apidoc Am|bool|isBLANK|UV ch
+=for apidoc_item ||isBLANK_A|UV ch
+=for apidoc_item ||isBLANK_L1|UV ch
+=for apidoc_item ||isBLANK_uvchr|UV ch
+=for apidoc_item ||isBLANK_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isBLANK_utf8|U8 * s|U8 * end
+=for apidoc_item ||isBLANK_LC|UV ch
+=for apidoc_item ||isBLANK_LC_uvchr|UV ch
+=for apidoc_item ||isBLANK_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is a
 character considered to be a blank, analogous to C<m/[[:blank:]]/>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isBLANK_A>, C<isBLANK_L1>, C<isBLANK_uvchr>, C<isBLANK_utf8>,
-C<isBLANK_utf8_safe>, C<isBLANK_LC>, C<isBLANK_LC_uvchr>, C<isBLANK_LC_utf8>,
-and C<isBLANK_LC_utf8_safe>.  Note,
+the variants.
+Note,
 however, that some platforms do not have the C library routine
 C<isblank()>.  In these cases, the variants whose names contain C<LC> are
 the same as the corresponding ones without.
 
-=for apidoc Amh|bool|isBLANK_A|int ch
-=for apidoc Amh|bool|isBLANK_L1|int ch
-=for apidoc Amh|bool|isBLANK_uvchr|int ch
-=for apidoc Amh|bool|isBLANK_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isBLANK_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isBLANK_LC|int ch
-=for apidoc Amh|bool|isBLANK_LC_uvchr|int ch
-=for apidoc Amh|bool|isBLANK_LC_utf8_safe|U8 * s| U8 *end
+=for apidoc Am|bool|isCNTRL|UV ch
+=for apidoc_item ||isCNTRL_A|UV ch
+=for apidoc_item ||isCNTRL_L1|UV ch
+=for apidoc_item ||isCNTRL_uvchr|UV ch
+=for apidoc_item ||isCNTRL_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isCNTRL_utf8|U8 * s|U8 * end
+=for apidoc_item ||isCNTRL_LC|UV ch
+=for apidoc_item ||isCNTRL_LC_uvchr|UV ch
+=for apidoc_item ||isCNTRL_LC_utf8_safe|U8 * s| U8 *end
 
-=for apidoc Am|bool|isCNTRL|char ch
 Returns a boolean indicating whether the specified character is a
 control character, analogous to C<m/[[:cntrl:]]/>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isCNTRL_A>, C<isCNTRL_L1>, C<isCNTRL_uvchr>, C<isCNTRL_utf8>,
-C<isCNTRL_utf8_safe>, C<isCNTRL_LC>, C<isCNTRL_LC_uvchr>, C<isCNTRL_LC_utf8>
-and C<isCNTRL_LC_utf8_safe>.  On EBCDIC
-platforms, you almost always want to use the C<isCNTRL_L1> variant.
+the variants.
+On EBCDIC platforms, you almost always want to use the C<isCNTRL_L1> variant.
 
-=for apidoc Amh|bool|isCNTRL_A|int ch
-=for apidoc Amh|bool|isCNTRL_L1|int ch
-=for apidoc Amh|bool|isCNTRL_uvchr|int ch
-=for apidoc Amh|bool|isCNTRL_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isCNTRL_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isCNTRL_LC|int ch
-=for apidoc Amh|bool|isCNTRL_LC_uvchr|int ch
-=for apidoc Amh|bool|isCNTRL_LC_utf8_safe|U8 * s| U8 *end
+=for apidoc Am|bool|isDIGIT|UV ch
+=for apidoc_item ||isDIGIT_A|UV ch
+=for apidoc_item ||isDIGIT_L1|UV ch
+=for apidoc_item ||isDIGIT_uvchr|UV ch
+=for apidoc_item ||isDIGIT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isDIGIT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isDIGIT_LC|UV ch
+=for apidoc_item ||isDIGIT_LC_uvchr|UV ch
+=for apidoc_item ||isDIGIT_LC_utf8_safe|U8 * s| U8 *end
 
-=for apidoc Am|bool|isDIGIT|char ch
 Returns a boolean indicating whether the specified character is a
 digit, analogous to C<m/[[:digit:]]/>.
 Variants C<isDIGIT_A> and C<isDIGIT_L1> are identical to C<isDIGIT>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isDIGIT_uvchr>, C<isDIGIT_utf8>, C<isDIGIT_utf8_safe>, C<isDIGIT_LC>,
-C<isDIGIT_LC_uvchr>, C<isDIGIT_LC_utf8>, and C<isDIGIT_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isDIGIT_A|int ch
-=for apidoc Amh|bool|isDIGIT_L1|int ch
-=for apidoc Amh|bool|isDIGIT_uvchr|int ch
-=for apidoc Amh|bool|isDIGIT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isDIGIT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isDIGIT_LC|int ch
-=for apidoc Amh|bool|isDIGIT_LC_uvchr|int ch
-=for apidoc Amh|bool|isDIGIT_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isGRAPH|char ch
+=for apidoc Am|bool|isGRAPH|UV ch
+=for apidoc_item ||isGRAPH_A|UV ch
+=for apidoc_item ||isGRAPH_L1|UV ch
+=for apidoc_item ||isGRAPH_uvchr|UV ch
+=for apidoc_item ||isGRAPH_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isGRAPH_utf8|U8 * s|U8 * end
+=for apidoc_item ||isGRAPH_LC|UV ch
+=for apidoc_item ||isGRAPH_LC_uvchr|UV ch
+=for apidoc_item ||isGRAPH_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is a
 graphic character, analogous to C<m/[[:graph:]]/>.
 See the L<top of this section|/Character classification> for an explanation of
-variants C<isGRAPH_A>, C<isGRAPH_L1>, C<isGRAPH_uvchr>, C<isGRAPH_utf8>,
-C<isGRAPH_utf8_safe>, C<isGRAPH_LC>, C<isGRAPH_LC_uvchr>,
-C<isGRAPH_LC_utf8_safe>, and C<isGRAPH_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isGRAPH_A|int ch
-=for apidoc Amh|bool|isGRAPH_L1|int ch
-=for apidoc Amh|bool|isGRAPH_uvchr|int ch
-=for apidoc Amh|bool|isGRAPH_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isGRAPH_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isGRAPH_LC|int ch
-=for apidoc Amh|bool|isGRAPH_LC_uvchr|int ch
-=for apidoc Amh|bool|isGRAPH_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isLOWER|char ch
+=for apidoc Am|bool|isLOWER|UV ch
+=for apidoc_item ||isLOWER_A|UV ch
+=for apidoc_item ||isLOWER_L1|UV ch
+=for apidoc_item ||isLOWER_uvchr|UV ch
+=for apidoc_item ||isLOWER_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isLOWER_utf8|U8 * s|U8 * end
+=for apidoc_item ||isLOWER_LC|UV ch
+=for apidoc_item ||isLOWER_LC_uvchr|UV ch
+=for apidoc_item ||isLOWER_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is a
 lowercase character, analogous to C<m/[[:lower:]]/>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isLOWER_A>, C<isLOWER_L1>, C<isLOWER_uvchr>, C<isLOWER_utf8>,
-C<isLOWER_utf8_safe>, C<isLOWER_LC>, C<isLOWER_LC_uvchr>, C<isLOWER_LC_utf8>,
-and C<isLOWER_LC_utf8_safe>.
+the variants
 
-=for apidoc Amh|bool|isLOWER_A|int ch
-=for apidoc Amh|bool|isLOWER_L1|int ch
-=for apidoc Amh|bool|isLOWER_uvchr|int ch
-=for apidoc Amh|bool|isLOWER_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isLOWER_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isLOWER_LC|int ch
-=for apidoc Amh|bool|isLOWER_LC_uvchr|int ch
-=for apidoc Amh|bool|isLOWER_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isOCTAL|char ch
+=for apidoc Am|bool|isOCTAL|UV ch
+=for apidoc_item ||isOCTAL_A|UV ch
+=for apidoc_item ||isOCTAL_L1|UV ch
 Returns a boolean indicating whether the specified character is an
 octal digit, [0-7].
 The only two variants are C<isOCTAL_A> and C<isOCTAL_L1>; each is identical to
 C<isOCTAL>.
 
-=for apidoc Amh|bool|isOCTAL_A|int ch
-=for apidoc Amh|bool|isOCTAL_L1|int ch
-
-=for apidoc Am|bool|isPUNCT|char ch
+=for apidoc Am|bool|isPUNCT|UV ch
+=for apidoc_item ||isPUNCT_A|UV ch
+=for apidoc_item ||isPUNCT_L1|UV ch
+=for apidoc_item ||isPUNCT_uvchr|UV ch
+=for apidoc_item ||isPUNCT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isPUNCT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isPUNCT_LC|UV ch
+=for apidoc_item ||isPUNCT_LC_uvchr|UV ch
+=for apidoc_item ||isPUNCT_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is a
 punctuation character, analogous to C<m/[[:punct:]]/>.
 Note that the definition of what is punctuation isn't as
@@ -864,20 +1016,17 @@
 straightforward as one might desire.  See L<perlrecharclass/POSIX Character
 Classes> for details.
 See the L<top of this section|/Character classification> for an explanation of
-variants C<isPUNCT_A>, C<isPUNCT_L1>, C<isPUNCT_uvchr>, C<isPUNCT_utf8>,
-C<isPUNCT_utf8_safe>, C<isPUNCT_LC>, C<isPUNCT_LC_uvchr>, C<isPUNCT_LC_utf8>,
-and C<isPUNCT_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isPUNCT_A|int ch
-=for apidoc Amh|bool|isPUNCT_L1|int ch
-=for apidoc Amh|bool|isPUNCT_uvchr|int ch
-=for apidoc Amh|bool|isPUNCT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isPUNCT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isPUNCT_LC|int ch
-=for apidoc Amh|bool|isPUNCT_LC_uvchr|int ch
-=for apidoc Amh|bool|isPUNCT_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isSPACE|char ch
+=for apidoc Am|bool|isSPACE|UV ch
+=for apidoc_item ||isSPACE_A|UV ch
+=for apidoc_item ||isSPACE_L1|UV ch
+=for apidoc_item ||isSPACE_uvchr|UV ch
+=for apidoc_item ||isSPACE_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isSPACE_utf8|U8 * s|U8 * end
+=for apidoc_item ||isSPACE_LC|UV ch
+=for apidoc_item ||isSPACE_LC_uvchr|UV ch
+=for apidoc_item ||isSPACE_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is a
 whitespace character.  This is analogous
 to what C<m/\s/> matches in a regular expression.  Starting in Perl 5.18
@@ -887,21 +1036,17 @@
 in the non-locale variants, was that C<isSPACE()> did not match a vertical tab.
 (See L</isPSXSPC> for a macro that matches a vertical tab in all releases.)
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isSPACE_A>, C<isSPACE_L1>, C<isSPACE_uvchr>, C<isSPACE_utf8>,
-C<isSPACE_utf8_safe>, C<isSPACE_LC>, C<isSPACE_LC_uvchr>, C<isSPACE_LC_utf8>,
-and C<isSPACE_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isSPACE_A|int ch
-=for apidoc Amh|bool|isSPACE_L1|int ch
-=for apidoc Amh|bool|isSPACE_uvchr|int ch
-=for apidoc Amh|bool|isSPACE_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isSPACE_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isSPACE_LC|int ch
-=for apidoc Amh|bool|isSPACE_LC_uvchr|int ch
-=for apidoc Amh|bool|isSPACE_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isPSXSPC|char ch
+=for apidoc Am|bool|isPSXSPC|UV ch
+=for apidoc_item ||isPSXSPC_A|UV ch
+=for apidoc_item ||isPSXSPC_L1|UV ch
+=for apidoc_item ||isPSXSPC_uvchr|UV ch
+=for apidoc_item ||isPSXSPC_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isPSXSPC_utf8|U8 * s|U8 * end
+=for apidoc_item ||isPSXSPC_LC|UV ch
+=for apidoc_item ||isPSXSPC_LC_uvchr|UV ch
+=for apidoc_item ||isPSXSPC_LC_utf8_safe|U8 * s| U8 *end
 (short for Posix Space)
 Starting in 5.18, this is identical in all its forms to the
 corresponding C<isSPACE()> macros.
@@ -912,55 +1057,49 @@
 Otherwise they are identical.  Thus this macro is analogous to what
 C<m/[[:space:]]/> matches in a regular expression.
 See the L<top of this section|/Character classification> for an explanation of
-variants C<isPSXSPC_A>, C<isPSXSPC_L1>, C<isPSXSPC_uvchr>, C<isPSXSPC_utf8>,
-C<isPSXSPC_utf8_safe>, C<isPSXSPC_LC>, C<isPSXSPC_LC_uvchr>,
-C<isPSXSPC_LC_utf8>, and C<isPSXSPC_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isPSXSPC_A|int ch
-=for apidoc Amh|bool|isPSXSPC_L1|int ch
-=for apidoc Amh|bool|isPSXSPC_uvchr|int ch
-=for apidoc Amh|bool|isPSXSPC_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isPSXSPC_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isPSXSPC_LC|int ch
-=for apidoc Amh|bool|isPSXSPC_LC_uvchr|int ch
-=for apidoc Amh|bool|isPSXSPC_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isUPPER|char ch
+=for apidoc Am|bool|isUPPER|UV ch
+=for apidoc_item ||isUPPER_A|UV ch
+=for apidoc_item ||isUPPER_L1|UV ch
+=for apidoc_item ||isUPPER_uvchr|UV ch
+=for apidoc_item ||isUPPER_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isUPPER_utf8|U8 * s|U8 * end
+=for apidoc_item ||isUPPER_LC|UV ch
+=for apidoc_item ||isUPPER_LC_uvchr|UV ch
+=for apidoc_item ||isUPPER_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is an
 uppercase character, analogous to C<m/[[:upper:]]/>.
 See the L<top of this section|/Character classification> for an explanation of
-variants C<isUPPER_A>, C<isUPPER_L1>, C<isUPPER_uvchr>, C<isUPPER_utf8>,
-C<isUPPER_utf8_safe>, C<isUPPER_LC>, C<isUPPER_LC_uvchr>, C<isUPPER_LC_utf8>,
-and C<isUPPER_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isUPPER_A|int ch
-=for apidoc Amh|bool|isUPPER_L1|int ch
-=for apidoc Amh|bool|isUPPER_uvchr|int ch
-=for apidoc Amh|bool|isUPPER_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isUPPER_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isUPPER_LC|int ch
-=for apidoc Amh|bool|isUPPER_LC_uvchr|int ch
-=for apidoc Amh|bool|isUPPER_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isPRINT|char ch
+=for apidoc Am|bool|isPRINT|UV ch
+=for apidoc_item ||isPRINT_A|UV ch
+=for apidoc_item ||isPRINT_L1|UV ch
+=for apidoc_item ||isPRINT_uvchr|UV ch
+=for apidoc_item ||isPRINT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isPRINT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isPRINT_LC|UV ch
+=for apidoc_item ||isPRINT_LC_uvchr|UV ch
+=for apidoc_item ||isPRINT_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is a
 printable character, analogous to C<m/[[:print:]]/>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isPRINT_A>, C<isPRINT_L1>, C<isPRINT_uvchr>, C<isPRINT_utf8>,
-C<isPRINT_utf8_safe>, C<isPRINT_LC>, C<isPRINT_LC_uvchr>, C<isPRINT_LC_utf8>,
-and C<isPRINT_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isPRINT_A|int ch
-=for apidoc Amh|bool|isPRINT_L1|int ch
-=for apidoc Amh|bool|isPRINT_uvchr|int ch
-=for apidoc Amh|bool|isPRINT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isPRINT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isPRINT_LC|int ch
-=for apidoc Amh|bool|isPRINT_LC_uvchr|int ch
-=for apidoc Amh|bool|isPRINT_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isWORDCHAR|char ch
+=for apidoc Am|bool|isWORDCHAR|UV ch
+=for apidoc_item ||isWORDCHAR_A|UV ch
+=for apidoc_item ||isWORDCHAR_L1|UV ch
+=for apidoc_item ||isWORDCHAR_uvchr|UV ch
+=for apidoc_item ||isWORDCHAR_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isWORDCHAR_utf8|U8 * s|U8 * end
+=for apidoc_item ||isWORDCHAR_LC|UV ch
+=for apidoc_item ||isWORDCHAR_LC_uvchr|UV ch
+=for apidoc_item ||isWORDCHAR_LC_utf8_safe|U8 * s| U8 *end
+=for apidoc_item ||isALNUM|UV ch
+=for apidoc_item ||isALNUM_A|UV ch
+=for apidoc_item ||isALNUM_LC|UV ch
+=for apidoc_item ||isALNUM_LC_uvchr|UV ch
 Returns a boolean indicating whether the specified character is a character
 that is a word character, analogous to what C<m/\w/> and C<m/[[:word:]]/> match
 in a regular expression.  A word character is an alphabetic character, a
@@ -970,84 +1109,61 @@
 word character includes more than the standard C language meaning of
 alphanumeric.
 See the L<top of this section|/Character classification> for an explanation of
-variants C<isWORDCHAR_A>, C<isWORDCHAR_L1>, C<isWORDCHAR_uvchr>,
-C<isWORDCHAR_utf8>, and C<isWORDCHAR_utf8_safe>.  C<isWORDCHAR_LC>,
-C<isWORDCHAR_LC_uvchr>, C<isWORDCHAR_LC_utf8>, and C<isWORDCHAR_LC_utf8_safe>
-are also as described there, but additionally include the platform's native
-underscore.
+the variants.
+C<isWORDCHAR_A>, C<isWORDCHAR_L1>, C<isWORDCHAR_uvchr>,
+C<isWORDCHAR_LC>, C<isWORDCHAR_LC_uvchr>, C<isWORDCHAR_LC_utf8>, and
+C<isWORDCHAR_LC_utf8_safe> are also as described there, but additionally
+include the platform's native underscore.
 
-=for apidoc Amh|bool|isWORDCHAR_A|int ch
-=for apidoc Amh|bool|isWORDCHAR_L1|int ch
-=for apidoc Amh|bool|isWORDCHAR_uvchr|int ch
-=for apidoc Amh|bool|isWORDCHAR_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isWORDCHAR_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isWORDCHAR_LC|int ch
-=for apidoc Amh|bool|isWORDCHAR_LC_uvchr|int ch
-=for apidoc Amh|bool|isWORDCHAR_LC_utf8_safe|U8 * s| U8 *end
-=for apidoc Amh|bool|isALNUM|int ch
-=for apidoc Amh|bool|isALNUM_A|int ch
-=for apidoc Amh|bool|isALNUM_LC|int ch
-=for apidoc Amh|bool|isALNUM_LC_uvchr|int ch
-
-=for apidoc Am|bool|isXDIGIT|char ch
+=for apidoc Am|bool|isXDIGIT|UV ch
+=for apidoc_item ||isXDIGIT_A|UV ch
+=for apidoc_item ||isXDIGIT_L1|UV ch
+=for apidoc_item ||isXDIGIT_uvchr|UV ch
+=for apidoc_item ||isXDIGIT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isXDIGIT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isXDIGIT_LC|UV ch
+=for apidoc_item ||isXDIGIT_LC_uvchr|UV ch
+=for apidoc_item ||isXDIGIT_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character is a hexadecimal
 digit.  In the ASCII range these are C<[0-9A-Fa-f]>.  Variants C<isXDIGIT_A()>
 and C<isXDIGIT_L1()> are identical to C<isXDIGIT()>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isXDIGIT_uvchr>, C<isXDIGIT_utf8>, C<isXDIGIT_utf8_safe>, C<isXDIGIT_LC>,
-C<isXDIGIT_LC_uvchr>, C<isXDIGIT_LC_utf8>, and C<isXDIGIT_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isXDIGIT_A|int ch
-=for apidoc Amh|bool|isXDIGIT_L1|int ch
-=for apidoc Amh|bool|isXDIGIT_uvchr|int ch
-=for apidoc Amh|bool|isXDIGIT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isXDIGIT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isXDIGIT_LC|int ch
-=for apidoc Amh|bool|isXDIGIT_LC_uvchr|int ch
-=for apidoc Amh|bool|isXDIGIT_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isIDFIRST|char ch
+=for apidoc Am|bool|isIDFIRST|UV ch
+=for apidoc_item ||isIDFIRST_A|UV ch
+=for apidoc_item ||isIDFIRST_L1|UV ch
+=for apidoc_item ||isIDFIRST_uvchr|UV ch
+=for apidoc_item ||isIDFIRST_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isIDFIRST_utf8|U8 * s|U8 * end
+=for apidoc_item ||isIDFIRST_LC|UV ch
+=for apidoc_item ||isIDFIRST_LC_uvchr|UV ch
+=for apidoc_item ||isIDFIRST_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character can be the first
 character of an identifier.  This is very close to, but not quite the same as
 the official Unicode property C<XID_Start>.  The difference is that this
 returns true only if the input character also matches L</isWORDCHAR>.
 See the L<top of this section|/Character classification> for an explanation of
-variants
-C<isIDFIRST_A>, C<isIDFIRST_L1>, C<isIDFIRST_uvchr>, C<isIDFIRST_utf8>,
-C<isIDFIRST_utf8_safe>, C<isIDFIRST_LC>, C<isIDFIRST_LC_uvchr>,
-C<isIDFIRST_LC_utf8>, and C<isIDFIRST_LC_utf8_safe>.
+the variants.
 
-=for apidoc Amh|bool|isIDFIRST_A|int ch
-=for apidoc Amh|bool|isIDFIRST_L1|int ch
-=for apidoc Amh|bool|isIDFIRST_uvchr|int ch
-=for apidoc Amh|bool|isIDFIRST_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isIDFIRST_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isIDFIRST_LC|int ch
-=for apidoc Amh|bool|isIDFIRST_LC_uvchr|int ch
-=for apidoc Amh|bool|isIDFIRST_LC_utf8_safe|U8 * s| U8 *end
-
-=for apidoc Am|bool|isIDCONT|char ch
+=for apidoc Am|bool|isIDCONT|UV ch
+=for apidoc_item ||isIDCONT_A|UV ch
+=for apidoc_item ||isIDCONT_L1|UV ch
+=for apidoc_item ||isIDCONT_uvchr|UV ch
+=for apidoc_item ||isIDCONT_utf8_safe|U8 * s|U8 * end
+=for apidoc_item ||isIDCONT_utf8|U8 * s|U8 * end
+=for apidoc_item ||isIDCONT_LC|UV ch
+=for apidoc_item ||isIDCONT_LC_uvchr|UV ch
+=for apidoc_item ||isIDCONT_LC_utf8_safe|U8 * s| U8 *end
 Returns a boolean indicating whether the specified character can be the
 second or succeeding character of an identifier.  This is very close to, but
 not quite the same as the official Unicode property C<XID_Continue>.  The
 difference is that this returns true only if the input character also matches
 L</isWORDCHAR>.  See the L<top of this section|/Character classification> for
-an explanation of variants C<isIDCONT_A>, C<isIDCONT_L1>, C<isIDCONT_uvchr>,
-C<isIDCONT_utf8>, C<isIDCONT_utf8_safe>, C<isIDCONT_LC>, C<isIDCONT_LC_uvchr>,
-C<isIDCONT_LC_utf8>, and C<isIDCONT_LC_utf8_safe>.
+an explanation of the variants.
 
-=for apidoc Amh|bool|isIDCONT_A|int ch
-=for apidoc Amh|bool|isIDCONT_L1|int ch
-=for apidoc Amh|bool|isIDCONT_uvchr|int ch
-=for apidoc Amh|bool|isIDCONT_utf8_safe|U8 * s|U8 * end
-=for apidoc Amh|bool|isIDCONT_utf8|U8 * s|U8 * end
-=for apidoc Amh|bool|isIDCONT_LC|int ch
-=for apidoc Amh|bool|isIDCONT_LC_uvchr|int ch
-=for apidoc Amh|bool|isIDCONT_LC_utf8_safe|U8 * s| U8 *end
+=for apidoc_section $numeric
 
-=head1 Miscellaneous Functions
-
 =for apidoc Am|U8|READ_XDIGIT|char str*
 Returns the value of an ASCII-range hex digit and advances the string pointer.
 Behaviour is only well defined when isXDIGIT(*str) is true.
@@ -1081,6 +1197,7 @@
 changing>, that there may be more.)
 
 =for apidoc Am|UV|toUPPER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+=for apidoc_item toUPPER_utf8_safe
 Converts the first UTF-8 encoded character in the sequence starting at C<p> and
 extending no further than S<C<e - 1>> to its uppercase version, and
 stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>.  Note
@@ -1097,8 +1214,7 @@
 croak, or the function may return the REPLACEMENT CHARACTER, at the discretion
 of the implementation, and subject to change in future releases.
 
-=for apidoc Am|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Same as L</toUPPER_utf8>.
+C<toUPPER_utf8_safe> is now just a different spelling of plain C<toUPPER_utf8>
 
 =for apidoc Am|U8|toFOLD|U8 ch
 Converts the specified character to foldcase.  If the input is anything but an
@@ -1118,6 +1234,7 @@
 changing>, that there may be more).
 
 =for apidoc Am|UV|toFOLD_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+=for apidoc_item toFOLD_utf8_safe
 Converts the first UTF-8 encoded character in the sequence starting at C<p> and
 extending no further than S<C<e - 1>> to its foldcase version, and
 stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>.  Note
@@ -1135,52 +1252,65 @@
 function may return the REPLACEMENT CHARACTER, at the discretion of the
 implementation, and subject to change in future releases.
 
-=for apidoc Am|UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Same as L</toFOLD_utf8>.
+C<toFOLD_utf8_safe> is now just a different spelling of plain C<toFOLD_utf8>
 
-=for apidoc Am|U8|toLOWER|U8 ch
-Converts the specified character to lowercase.  If the input is anything but an
-ASCII uppercase character, that input character itself is returned.  Variant
-C<toLOWER_A> is equivalent.
+=for apidoc Am|UV|toLOWER|UV cp
+=for apidoc_item |UV|toLOWER_A|UV cp
+=for apidoc_item |UV|toLOWER_L1|UV cp
+=for apidoc_item |UV|toLOWER_LATIN1|UV cp
+=for apidoc_item |UV|toLOWER_LC|UV cp
+=for apidoc_item |UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp
+=for apidoc_item |UV|toLOWER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+=for apidoc_item |UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
 
-=for apidoc Am|U8|toLOWER_L1|U8 ch
-Converts the specified Latin1 character to lowercase.  The results are
-undefined if the input doesn't fit in a byte.
+These all return the lowercase of a character.  The differences are what domain
+they operate on, and whether the input is specified as a code point (those
+forms with a C<cp> parameter) or as a UTF-8 string (the others).  In the latter
+case, the code point to use is the first one in the buffer of UTF-8 encoded
+code points, delineated by the arguments S<C<p .. e - 1>>.
 
-=for apidoc Am|U8|toLOWER_LC|U8 ch
-Converts the specified character to lowercase using the current locale's rules,
-if possible; otherwise returns the input character itself.
+C<toLOWER> and C<toLOWER_A> are synonyms of each other.  They return the
+lowercase of any uppercase ASCII-range code point.  All other inputs are
+returned unchanged.  Since these are macros, the input type may be any integral
+one, and the output will occupy the same number of bits as the input.
 
-=for apidoc Am|UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp
-Converts the code point C<cp> to its lowercase version, and
-stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>.  The code
-point is interpreted as native if less than 256; otherwise as Unicode.  Note
-that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
-bytes since the lowercase version may be longer than the original character.
+C<toLOWER_L1> and C<toLOWER_LATIN1> are synonyms of each other.  They behave
+identically as C<toLOWER> for ASCII-range input.  But additionally will return
+the lowercase of any uppercase code point in the entire 0..255 range, assuming
+a Latin-1 encoding (or the EBCDIC equivalent on such platforms).
 
-The first code point of the lowercased version is returned
-(but note, as explained at L<the top of this section|/Character case
-changing>, that there may be more).
+C<toLOWER_LC> returns the lowercase of the input code point according to the
+rules of the current POSIX locale.  Input code points outside the range 0..255
+are returned unchanged.
 
-=for apidoc Am|UV|toLOWER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
-Converts the first UTF-8 encoded character in the sequence starting at C<p> and
-extending no further than S<C<e - 1>> to its lowercase version, and
-stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>.  Note
-that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
-bytes since the lowercase version may be longer than the original character.
+C<toLOWER_uvchr> returns the lowercase of any Unicode code point.  The return
+value is identical to that of C<toLOWER_L1> for input code points in the 0..255
+range.  The lowercase of the vast majority of Unicode code points is the same
+as the code point itself.  For these, and for code points above the legal
+Unicode maximum, this returns the input code point unchanged.  It additionally
+stores the UTF-8 of the result into the buffer beginning at C<s>, and its
+length in bytes into C<*lenp>.  The caller must have made C<s> large enough to
+contain at least C<UTF8_MAXBYTES_CASE+1> bytes to avoid possible overflow.
 
-The first code point of the lowercased version is returned
-(but note, as explained at L<the top of this section|/Character case
-changing>, that there may be more).
-It will not attempt to read beyond S<C<e - 1>>, provided that the constraint
-S<C<s E<lt> e>> is true (this is asserted for in C<-DDEBUGGING> builds).  If
-the UTF-8 for the input character is malformed in some way, the program may
-croak, or the function may return the REPLACEMENT CHARACTER, at the discretion
-of the implementation, and subject to change in future releases.
+NOTE: the lowercase of a code point may be more than one code point.  The
+return value of this function is only the first of these.  The entire lowercase
+is returned in C<s>.  To determine if the result is more than a single code
+point, you can do something like this:
 
-=for apidoc Am|UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Same as L</toLOWER_utf8>.
+ uc = toLOWER_uvchr(cp, s, &len);
+ if (len > UTF8SKIP(s)) { is multiple code points }
+ else { is a single code point }
 
+C<toLOWER_utf8> and C<toLOWER_utf8_safe> are synonyms of each other.  The only
+difference between these and C<toLOWER_uvchr> is that the source for these is
+encoded in UTF-8, instead of being a code point.  It is passed as a buffer
+starting at C<p>, with C<e> pointing to one byte beyond its end.  The C<p>
+buffer may certainly contain more than one code point; but only the first one
+(up through S<C<e - 1>>) is examined.  If the UTF-8 for the input character is
+malformed in some way, the program may croak, or the function may return the
+REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to
+change in future releases.
+
 =for apidoc Am|U8|toTITLE|U8 ch
 Converts the specified character to titlecase.  If the input is anything but an
 ASCII lowercase character, that input character itself is returned.  Variant
@@ -1200,7 +1330,8 @@
 changing>, that there may be more).
 
 =for apidoc Am|UV|toTITLE_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
-Converts the first UTF-8 encoded character in the sequence starting at C<p> and
+=for apidoc_item toTITLE_utf8_safe
+Convert the first UTF-8 encoded character in the sequence starting at C<p> and
 extending no further than S<C<e - 1>> to its titlecase version, and
 stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>.  Note
 that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
@@ -1217,8 +1348,7 @@
 function may return the REPLACEMENT CHARACTER, at the discretion of the
 implementation, and subject to change in future releases.
 
-=for apidoc Am|UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Same as L</toTITLE_utf8>.
+C<toTITLE_utf8_safe> is now just a different spelling of plain C<toTITLE_utf8>
 
 =cut
 
@@ -1233,10 +1363,11 @@
 
 /*
    void below because that's the best fit, and works for Devel::PPPort
-=for apidoc AmnU|void|WIDEST_UTYPE
+=for apidoc_section $integer
+=for apidoc AyT||WIDEST_UTYPE
 
 Yields the widest unsigned integer type on the platform, currently either
-C<U32> or C<64>.  This can be used in declarations such as
+C<U32> or C<U64>.  This can be used in declarations such as
 
  WIDEST_UTYPE my_uv;
 
@@ -1278,19 +1409,34 @@
  * needed.  (The NV casts stop any warnings about comparison always being true
  * if called with an unsigned.  The cast preserves the sign, which is all we
  * care about.) */
-#define withinCOUNT(c, l, n) (__ASSERT_((NV) (l) >= 0)                         \
-                              __ASSERT_((NV) (n) >= 0)                         \
-   (((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0)))))
+#define withinCOUNT(c, l, n)  (__ASSERT_((NV) (l) >= 0)                 \
+                               __ASSERT_((NV) (n) >= 0)                 \
+                               withinCOUNT_KNOWN_VALID_((c), (l), (n)))
 
+/* For internal use only, this can be used in places where it is known that the
+ * parameters to withinCOUNT() are valid, to avoid the asserts.  For example,
+ * inRANGE() below, calls this several times, but does all the necessary
+ * asserts itself, once.  The reason that this is necessary is that the
+ * duplicate asserts were exceeding the internal limits of some compilers */
+#define withinCOUNT_KNOWN_VALID_(c, l, n)                                   \
+    (((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0))))
+
 /* Returns true if c is in the range l..u, where 'l' is non-negative
  * Written this way so that after optimization, only one conditional test is
  * needed. */
-#define inRANGE(c, l, u) (__ASSERT_((u) >= (l))                                \
-   (  (sizeof(c) == sizeof(U8))  ? withinCOUNT(((U8)  (c)), (l), ((u) - (l)))  \
-    : (sizeof(c) == sizeof(U32)) ? withinCOUNT(((U32) (c)), (l), ((u) - (l)))  \
-    : (__ASSERT_(sizeof(c) == sizeof(WIDEST_UTYPE))                            \
-                          withinCOUNT(((WIDEST_UTYPE) (c)), (l), ((u) - (l))))))
+#define inRANGE(c, l, u) (__ASSERT_((NV) (l) >= 0) __ASSERT_((u) >= (l))    \
+   (  (sizeof(c) == sizeof(U8))  ? inRANGE_helper_(U8, (c), (l), ((u)))     \
+    : (sizeof(c) == sizeof(U16)) ? inRANGE_helper_(U16,(c), (l), ((u)))     \
+    : (sizeof(c) == sizeof(U32)) ? inRANGE_helper_(U32,(c), (l), ((u)))     \
+             : (__ASSERT_(sizeof(c) == sizeof(WIDEST_UTYPE))                \
+                          inRANGE_helper_(WIDEST_UTYPE,(c), (l), ((u))))))
 
+/* For internal use, this is used by machine-generated code which generates
+ * known valid calls, with a known sizeof().  This avoids the extra code and
+ * asserts that were exceeding internal limits of some compilers. */
+#define inRANGE_helper_(cast, c, l, u)                                      \
+                    withinCOUNT_KNOWN_VALID_(((cast) (c)), (l), ((u) - (l)))
+
 #ifdef EBCDIC
 #   ifndef _ALL_SOURCE
         /* The native libc isascii() et.al. functions return the wrong results
@@ -1372,7 +1518,7 @@
 /* This next group is only used on EBCDIC platforms, so theoretically could be
  * shared with something entirely different that's only on ASCII platforms */
 #  define _CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE 31
-/* Unused: 24-30
+/* Unused: 26-30
  * If more bits are needed, one could add a second word for non-64bit
  * QUAD_IS_INT systems, using some #ifdefs to distinguish between having a 2nd
  * word or not.  The IS_IN_SOME_FOLD bit is the most easily expendable, as it
@@ -1487,16 +1633,21 @@
 #   endif
 
     /* Participates in a single-character fold with a character above 255 */
-#   define _HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(c) ((! cBOOL(FITS_IN_8_BITS(c))) || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_SIMPLE_FOLD)))
+#   if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+#     define HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(c)                          \
+        ((   ! cBOOL(FITS_IN_8_BITS(c)))                                    \
+          || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_SIMPLE_FOLD)))
 
+#   define IS_NON_FINAL_FOLD(c)   _generic_isCC(c, _CC_NON_FINAL_FOLD)
+#   define IS_IN_SOME_FOLD_L1(c)  _generic_isCC(c, _CC_IS_IN_SOME_FOLD)
+#  endif
+
     /* Like the above, but also can be part of a multi-char fold */
-#   define _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(c) ((! cBOOL(FITS_IN_8_BITS(c))) || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_FOLD)))
+#   define HAS_NONLATIN1_FOLD_CLOSURE(c)                                    \
+      (   (! cBOOL(FITS_IN_8_BITS(c)))                                      \
+       || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_FOLD)))
 
 #   define _isQUOTEMETA(c) _generic_isCC(c, _CC_QUOTEMETA)
-#   define _IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
-                                           _generic_isCC(c, _CC_NON_FINAL_FOLD)
-#   define _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
-                                           _generic_isCC(c, _CC_IS_IN_SOME_FOLD)
 
 /* is c a control character for which we have a mnemonic? */
 #  if defined(PERL_CORE) || defined(PERL_EXT)
@@ -2278,22 +2429,29 @@
                          : (LATIN1_TO_NATIVE(((U8) (c)) ^ 64)))))
 #endif
 
-/* Line numbers are unsigned, 32 bits. */
+/*
+=for apidoc Ay||line_t
+The typedef to use to declare variables that are to hold line numbers.
+
+=cut
+
+  Line numbers are unsigned, 32 bits.
+*/
 typedef U32 line_t;
 #define NOLINE ((line_t) 4294967295UL)  /* = FFFFFFFF */
 
 /* Helpful alias for version prescan */
 #define is_LAX_VERSION(a,b) \
-	(a != Perl_prescan_version(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL))
+        (a != Perl_prescan_version(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL))
 
 #define is_STRICT_VERSION(a,b) \
-	(a != Perl_prescan_version(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL))
+        (a != Perl_prescan_version(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL))
 
 #define BADVERSION(a,b,c) \
-	if (b) { \
-	    *b = c; \
-	} \
-	return a;
+        if (b) { \
+            *b = c; \
+        } \
+        return a;
 
 /* Converts a character KNOWN to represent a hexadecimal digit (0-9, A-F, or
  * a-f) to its numeric value without using any branches.  The input is
@@ -2318,7 +2476,7 @@
 #define OCTAL_VALUE(c) (__ASSERT_(isOCTAL(c)) (7 & (c)))
 
 /* Efficiently returns a boolean as to if two native characters are equivalent
- * case-insenstively.  At least one of the characters must be one of [A-Za-z];
+ * case-insensitively.  At least one of the characters must be one of [A-Za-z];
  * the ALPHA in the name is to remind you of that.  This is asserted() in
  * DEBUGGING builds.  Because [A-Za-z] are invariant under UTF-8, this macro
  * works (on valid input) for both non- and UTF-8-encoded bytes.
@@ -2337,7 +2495,7 @@
 #define isALPHA_FOLD_NE(c1, c2) (! isALPHA_FOLD_EQ((c1), (c2)))
 
 /*
-=head1 Memory Management
+=for apidoc_section $memory
 
 =for apidoc Am|void|Newx|void* ptr|int nitems|type
 The XSUB-writer's interface to the C C<malloc> function.
@@ -2378,6 +2536,7 @@
 
 This should B<ONLY> be used on memory obtained using L</"Newx"> and friends.
 
+=for apidoc_section $string
 =for apidoc Am|void|Move|void* src|void* dest|int nitems|type
 The XSUB-writer's interface to the C C<memmove> function.  The C<src> is the
 source, C<dest> is the destination, C<nitems> is the number of items, and
@@ -2410,7 +2569,8 @@
 for encouraging compilers to tail-call
 optimise.
 
-=for apidoc Am|void|StructCopy|type *src|type *dest|type
+=for apidoc_section $utility
+=for apidoc Amu|void|StructCopy|type *src|type *dest|type
 This is an architecture-independent macro to copy one structure to another.
 
 =for apidoc Am|void|PoisonWith|void* dest|int nitems|type|U8 byte
@@ -2479,17 +2639,17 @@
             MEM_SIZE_MAX/sizeof(t)) > MEM_SIZE_MAX/sizeof(t))
 
 #  define MEM_WRAP_CHECK(n,t) \
-	(void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
+        (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
         && (croak_memory_wrap(),0))
 
 #  define MEM_WRAP_CHECK_1(n,t,a) \
-	(void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
-	&& (Perl_croak_nocontext("%s",(a)),0))
+        (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
+        && (Perl_croak_nocontext("%s",(a)),0))
 
 /* "a" arg must be a string literal */
 #  define MEM_WRAP_CHECK_s(n,t,a) \
-	(void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
-	&& (Perl_croak_nocontext("" a ""),0))
+        (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \
+        && (Perl_croak_nocontext("" a ""),0))
 
 #define MEM_WRAP_CHECK_(n,t) MEM_WRAP_CHECK(n,t),
 
@@ -2584,9 +2744,9 @@
 #endif
 
 #define Renew(v,n,t) \
-	  (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
+          (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
 #define Renewc(v,n,t,c) \
-	  (v = (MEM_WRAP_CHECK_(n,t) (c*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
+          (v = (MEM_WRAP_CHECK_(n,t) (c*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))))
 
 #ifdef PERL_POISON
 #define Safefree(d) \
@@ -2621,10 +2781,11 @@
 #  define PERL_POISON_EXPR(x)
 #endif
 
+/* Shallow copy */
 #define StructCopy(s,d,t) (*((t*)(d)) = *((t*)(s)))
 
 /*
-=head1 Handy Values
+=for apidoc_section $utility
 
 =for apidoc Am|STRLEN|C_ARRAY_LENGTH|void *a
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/hv.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/hv.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/hv.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -36,8 +36,8 @@
     HE		*hent_next;	/* next entry in chain */
     HEK		*hent_hek;	/* hash key */
     union {
-	SV	*hent_val;	/* scalar value that was hashed */
-	Size_t	hent_refcount;	/* references for this shared hash key */
+        SV	*hent_val;	/* scalar value that was hashed */
+        Size_t	hent_refcount;	/* references for this shared hash key */
     } he_valu;
 };
 
@@ -140,22 +140,16 @@
 };
 
 /*
-=head1 Hash Manipulation Functions
-
 =for apidoc AmnU||HEf_SVKEY
 This flag, used in the length slot of hash entries and magic structures,
 specifies the structure contains an C<SV*> pointer where a C<char*> pointer
 is to be expected.  (For information only--not to be used).
 
-=head1 Handy Values
-
 =for apidoc ADmnU||Nullhv
 Null HV pointer.
 
 (deprecated - use C<(HV *)NULL> instead)
 
-=head1 Hash Manipulation Functions
-
 =for apidoc Am|char*|HvNAME|HV* stash
 Returns the package name of a stash, or C<NULL> if C<stash> isn't a stash.
 See C<L</SvSTASH>>, C<L</CvSTASH>>.
@@ -163,6 +157,10 @@
 =for apidoc Am|STRLEN|HvNAMELEN|HV *stash
 Returns the length of the stash's name.
 
+Disfavored forms of HvNAME and HvNAMELEN; suppress mention of them
+=for apidoc Cmh|char*|HvNAME_get|HV* stash
+=for apidoc Amh|I32|HvNAMELEN_get|HV* stash
+
 =for apidoc Am|unsigned char|HvNAMEUTF8|HV *stash
 Returns true if the name is in UTF-8 encoding.
 
@@ -306,16 +304,16 @@
  )
 /* This macro may go away without notice.  */
 #define HvNAME_HEK(hv) \
-	(SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvNAME_HEK_NN(hv) : NULL)
+        (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvNAME_HEK_NN(hv) : NULL)
 #define HvNAME_get(hv) \
-	((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
-			 ? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL)
+        ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
+                         ? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL)
 #define HvNAMELEN_get(hv) \
-	((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
-				 ? HEK_LEN(HvNAME_HEK_NN(hv)) : 0)
+        ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
+                                 ? HEK_LEN(HvNAME_HEK_NN(hv)) : 0)
 #define HvNAMEUTF8(hv) \
-	((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
-				 ? HEK_UTF8(HvNAME_HEK_NN(hv)) : 0)
+        ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
+                                 ? HEK_UTF8(HvNAME_HEK_NN(hv)) : 0)
 #define HvENAME_HEK_NN(hv)                                             \
  (                                                                      \
   HvAUX(hv)->xhv_name_count > 0   ? HvAUX(hv)->xhv_name_u.xhvnameu_names[0] : \
@@ -324,16 +322,16 @@
                                     HvAUX(hv)->xhv_name_u.xhvnameu_name \
  )
 #define HvENAME_HEK(hv) \
-	(SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL)
+        (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL)
 #define HvENAME_get(hv) \
    ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
-			 ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL)
+                         ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL)
 #define HvENAMELEN_get(hv) \
    ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
-				 ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0)
+                                 ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0)
 #define HvENAMEUTF8(hv) \
    ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
-				 ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0)
+                                 ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0)
 
 /* the number of keys (including any placeholders) - NOT PART OF THE API */
 #define XHvTOTALKEYS(xhv)	((xhv)->xhv_keys)
@@ -385,24 +383,24 @@
 #define HeVAL(he)		(he)->he_valu.hent_val
 #define HeHASH(he)		HEK_HASH(HeKEY_hek(he))
 #define HePV(he,lp)		((HeKLEN(he) == HEf_SVKEY) ?		\
-				 SvPV(HeKEY_sv(he),lp) :		\
-				 ((lp = HeKLEN(he)), HeKEY(he)))
+                                 SvPV(HeKEY_sv(he),lp) :		\
+                                 ((lp = HeKLEN(he)), HeKEY(he)))
 #define HeUTF8(he)		((HeKLEN(he) == HEf_SVKEY) ?		\
-				 SvUTF8(HeKEY_sv(he)) :			\
-				 (U32)HeKUTF8(he))
+                                 SvUTF8(HeKEY_sv(he)) :			\
+                                 (U32)HeKUTF8(he))
 
 #define HeSVKEY(he)		((HeKEY(he) && 				\
-				  HeKLEN(he) == HEf_SVKEY) ?		\
-				 HeKEY_sv(he) : NULL)
+                                  HeKLEN(he) == HEf_SVKEY) ?		\
+                                 HeKEY_sv(he) : NULL)
 
 #define HeSVKEY_force(he)	(HeKEY(he) ?				\
-				 ((HeKLEN(he) == HEf_SVKEY) ?		\
-				  HeKEY_sv(he) :			\
-				  newSVpvn_flags(HeKEY(he),		\
+                                 ((HeKLEN(he) == HEf_SVKEY) ?		\
+                                  HeKEY_sv(he) :			\
+                                  newSVpvn_flags(HeKEY(he),		\
                                                  HeKLEN(he),            \
                                                  SVs_TEMP |             \
                                       ( HeKUTF8(he) ? SVf_UTF8 : 0 ))) : \
-				 &PL_sv_undef)
+                                 &PL_sv_undef)
 #define HeSVKEY_set(he,sv)	((HeKLEN(he) = HEf_SVKEY), (HeKEY_sv(he) = sv))
 
 #ifndef PERL_CORE
@@ -422,8 +420,8 @@
 #define HVhek_PLACEHOLD	0x200 /* Internal flag to create placeholder.
                                * (may change, but Storable is a core module) */
 #define HVhek_KEYCANONICAL 0x400 /* Internal flag - key is in canonical form.
-				    If the string is UTF-8, it cannot be
-				    converted to bytes. */
+                                    If the string is UTF-8, it cannot be
+                                    converted to bytes. */
 #define HVhek_MASK	0xFF
 
 #define HVhek_ENABLEHVKFLAGS        (HVhek_MASK & ~(HVhek_UNSHARED))
@@ -444,9 +442,9 @@
 #else
 #  define MALLOC_OVERHEAD 16
 #  define PERL_HV_ARRAY_ALLOC_BYTES(size) \
-			(((size) < 64)					\
-			 ? (size) * sizeof(HE*)				\
-			 : (size) * sizeof(HE*) * 2 - MALLOC_OVERHEAD)
+                        (((size) < 64)					\
+                         ? (size) * sizeof(HE*)				\
+                         : (size) * sizeof(HE*) * 2 - MALLOC_OVERHEAD)
 #endif
 
 /* Flags for hv_iternext_flags.  */
@@ -461,33 +459,33 @@
 
 #define share_hek_hek(hek)						\
     (++(((struct shared_he *)(((char *)hek)				\
-			      - STRUCT_OFFSET(struct shared_he,		\
-					      shared_he_hek)))		\
-	->shared_he_he.he_valu.hent_refcount),				\
+                              - STRUCT_OFFSET(struct shared_he,		\
+                                              shared_he_hek)))		\
+        ->shared_he_he.he_valu.hent_refcount),				\
      hek)
 
 #define hv_store_ent(hv, keysv, val, hash)				\
     ((HE *) hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISSTORE,	\
-		      (val), (hash)))
+                      (val), (hash)))
 
 #define hv_exists_ent(hv, keysv, hash)					\
     cBOOL(hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISEXISTS, 0, (hash)))
 #define hv_fetch_ent(hv, keysv, lval, hash)				\
     ((HE *) hv_common((hv), (keysv), NULL, 0, 0,			\
-		      ((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash)))
+                      ((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash)))
 #define hv_delete_ent(hv, key, flags, hash)				\
     (MUTABLE_SV(hv_common((hv), (key), NULL, 0, 0, (flags) | HV_DELETE,	\
-			  NULL, (hash))))
+                          NULL, (hash))))
 
 #define hv_store_flags(hv, key, klen, val, hash, flags)			\
     ((SV**) hv_common((hv), NULL, (key), (klen), (flags),		\
-		      (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val),	\
-		      (hash)))
+                      (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val),	\
+                      (hash)))
 
 #define hv_store(hv, key, klen, val, hash)				\
     ((SV**) hv_common_key_len((hv), (key), (klen),			\
-			      (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV),	\
-			      (val), (hash)))
+                              (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV),	\
+                              (val), (hash)))
 
 
 
@@ -496,12 +494,12 @@
 
 #define hv_fetch(hv, key, klen, lval)					\
     ((SV**) hv_common_key_len((hv), (key), (klen), (lval)		\
-			      ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE)	\
-			      : HV_FETCH_JUST_SV, NULL, 0))
+                              ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE)	\
+                              : HV_FETCH_JUST_SV, NULL, 0))
 
 #define hv_delete(hv, key, klen, flags)					\
     (MUTABLE_SV(hv_common_key_len((hv), (key), (klen),			\
-				  (flags) | HV_DELETE, NULL, 0)))
+                                  (flags) | HV_DELETE, NULL, 0)))
 
 /* Provide 's' suffix subs for constant strings (and avoid needing to count
  * chars). See STR_WITH_LEN in handy.h - because these are macros we cant use
@@ -524,17 +522,17 @@
 #ifdef PERL_CORE
 # define hv_storehek(hv, hek, val) \
     hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek),	\
-	      HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, (val), HEK_HASH(hek))
+              HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, (val), HEK_HASH(hek))
 # define hv_fetchhek(hv, hek, lval) \
     ((SV **)								\
      hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek),	\
-	       (lval)							\
-		? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE)			\
-		: HV_FETCH_JUST_SV,					\
-	       NULL, HEK_HASH(hek)))
+               (lval)							\
+                ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE)			\
+                : HV_FETCH_JUST_SV,					\
+               NULL, HEK_HASH(hek)))
 # define hv_deletehek(hv, hek, flags) \
     hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \
-	      (flags)|HV_DELETE, NULL, HEK_HASH(hek))
+              (flags)|HV_DELETE, NULL, HEK_HASH(hek))
 #endif
 
 /* This refcounted he structure is used for storing the hints used for lexical
@@ -547,9 +545,7 @@
 
 /* flags for the refcounted_he API */
 #define REFCOUNTED_HE_KEY_UTF8		0x00000001
-#ifdef PERL_CORE
-# define REFCOUNTED_HE_EXISTS		0x00000002
-#endif
+#define REFCOUNTED_HE_EXISTS		0x00000002
 
 #ifdef PERL_CORE
 
@@ -563,10 +559,10 @@
     HEK                  *refcounted_he_hek;	/* hint key */
 #endif
     union {
-	IV                refcounted_he_u_iv;
-	UV                refcounted_he_u_uv;
-	STRLEN            refcounted_he_u_len;
-	void		 *refcounted_he_u_ptr;	/* Might be useful in future */
+        IV                refcounted_he_u_iv;
+        UV                refcounted_he_u_uv;
+        STRLEN            refcounted_he_u_len;
+        void		 *refcounted_he_u_ptr;	/* Might be useful in future */
     } refcounted_he_val;
     U32	                  refcounted_he_refcnt;	/* reference count */
     /* First byte is flags. Then NUL-terminated value. Then for ithreads,
@@ -612,9 +608,9 @@
 #ifdef USE_ITHREADS
 /* A big expression to find the key offset */
 #define REF_HE_KEY(chain)						\
-	((((chain->refcounted_he_data[0] & 0x60) == 0x40)		\
-	    ? chain->refcounted_he_val.refcounted_he_u_len + 1 : 0)	\
-	 + 1 + chain->refcounted_he_data)
+        ((((chain->refcounted_he_data[0] & 0x60) == 0x40)		\
+            ? chain->refcounted_he_val.refcounted_he_u_len + 1 : 0)	\
+         + 1 + chain->refcounted_he_data)
 #endif
 
 #  ifdef USE_ITHREADS

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/hv_func.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/hv_func.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/hv_func.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -6,18 +6,17 @@
  * If USE_HASH_SEED is defined, hash randomisation is done by default
  * (see also perl.c:perl_parse() and S_init_tls_and_interp() and util.c:get_hash_seed())
  */
-#ifndef PERL_SEEN_HV_FUNC_H /* compile once */
-#define PERL_SEEN_HV_FUNC_H
+#ifndef PERL_SEEN_HV_FUNC_H_ /* compile once */
+#define PERL_SEEN_HV_FUNC_H_
 #include "hv_macro.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
@@ -36,27 +35,26 @@
 
 #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"
@@ -72,7 +70,18 @@
 #error "__PERL_HASH_FUNC not defined"
 #endif
 
+/* Some siphash static functions are needed by XS::APItest even when
+   siphash isn't the current hash.  For SipHash builds this needs to
+   be before the S_perl_hash_with_seed() definition.
+*/
+#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
@@ -82,9 +91,9 @@
 #else
 
 #define _PERL_HASH_FUNC         "SBOX32_WITH_" __PERL_HASH_FUNC
+/* 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_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) ) )
 
@@ -100,23 +109,19 @@
 
 #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]] ) \
@@ -155,135 +160,13 @@
 #define PERL_HASH_INTERNAL(hash,str,len) PERL_HASH(hash,str,len)
 #endif
 
-/* This is SipHash by Jean-Philippe Aumasson and Daniel J. Bernstein.
- * The authors claim it is relatively secure compared to the alternatives
- * and that performance wise it is a suitable hash for languages like Perl.
- * See:
- *
- * https://www.131002.net/siphash/
- *
- * This implementation seems to perform slightly slower than one-at-a-time for
- * short keys, but degrades slower for longer keys. Murmur Hash outperforms it
- * regardless of keys size.
- *
- * It is 64 bit only.
- */
-
-#ifdef CAN64BITHASH
-
-#define SIPROUND            \
-  STMT_START {              \
-    v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \
-    v2 += v3; v3=ROTL64(v3,16); v3 ^= v2;     \
-    v0 += v3; v3=ROTL64(v3,21); v3 ^= v0;     \
-    v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \
-  } STMT_END
-
-#define SIPHASH_SEED_STATE(key,v0,v1,v2,v3) \
-do {                                    \
-    v0 = v2 = U8TO64_LE(key + 0);       \
-    v1 = v3 = U8TO64_LE(key + 8);       \
-  /* "somepseudorandomlygeneratedbytes" */  \
-    v0 ^= UINT64_C(0x736f6d6570736575);  \
-    v1 ^= UINT64_C(0x646f72616e646f6d);      \
-    v2 ^= UINT64_C(0x6c7967656e657261);      \
-    v3 ^= UINT64_C(0x7465646279746573);      \
-} while (0)
-
-PERL_STATIC_INLINE
-void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned char * state_buf) {
-    U64 *v= (U64*) state_buf;
-    SIPHASH_SEED_STATE(seed_buf, v[0],v[1],v[2],v[3]);
+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);
 }
 
-#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \
-PERL_STATIC_INLINE U64 \
-FNC ## _with_state_64 \
-  (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
-{                                           \
-  const int left = inlen & 7;               \
-  const U8 *end = in + inlen - left;        \
-                                            \
-  U64 b = ( ( U64 )(inlen) ) << 56;         \
-  U64 m;                                    \
-  U64 v0 = U8TO64_LE(state);                \
-  U64 v1 = U8TO64_LE(state+8);              \
-  U64 v2 = U8TO64_LE(state+16);             \
-  U64 v3 = U8TO64_LE(state+24);             \
-                                            \
-  for ( ; in != end; in += 8 )              \
-  {                                         \
-    m = U8TO64_LE( in );                    \
-    v3 ^= m;                                \
-                                            \
-    SIP_ROUNDS;                             \
-                                            \
-    v0 ^= m;                                \
-  }                                         \
-                                            \
-  switch( left )                            \
-  {                                         \
-  case 7: b |= ( ( U64 )in[ 6] )  << 48; /*FALLTHROUGH*/    \
-  case 6: b |= ( ( U64 )in[ 5] )  << 40; /*FALLTHROUGH*/    \
-  case 5: b |= ( ( U64 )in[ 4] )  << 32; /*FALLTHROUGH*/    \
-  case 4: b |= ( ( U64 )in[ 3] )  << 24; /*FALLTHROUGH*/    \
-  case 3: b |= ( ( U64 )in[ 2] )  << 16; /*FALLTHROUGH*/    \
-  case 2: b |= ( ( U64 )in[ 1] )  <<  8; /*FALLTHROUGH*/    \
-  case 1: b |= ( ( U64 )in[ 0] ); break;    \
-  case 0: break;                            \
-  }                                         \
-                                            \
-  v3 ^= b;                                  \
-                                            \
-  SIP_ROUNDS;                               \
-                                            \
-  v0 ^= b;                                  \
-                                            \
-  v2 ^= 0xff;                               \
-                                            \
-  SIP_FINAL_ROUNDS                          \
-                                            \
-  b = v0 ^ v1 ^ v2  ^ v3;                   \
-  return b;                                 \
-}                                           \
-                                            \
-PERL_STATIC_INLINE U32                      \
-FNC ## _with_state                          \
-  (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
-{                                           \
-    union {                                 \
-        U64 h64;                            \
-        U32 h32[2];                         \
-    } h;                                    \
-    h.h64= FNC ## _with_state_64(state,in,inlen); \
-    return h.h32[0] ^ h.h32[1];             \
-}                                           \
-                                            \
-                                            \
-PERL_STATIC_INLINE U32                      \
-FNC (const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) \
-{                                                                   \
-    U64 state[4];                                                   \
-    SIPHASH_SEED_STATE(seed,state[0],state[1],state[2],state[3]);   \
-    return FNC ## _with_state((U8*)state,in,inlen);                 \
-}
-
-
-PERL_SIPHASH_FNC(
-    S_perl_hash_siphash_1_3
-    ,SIPROUND;
-    ,SIPROUND;SIPROUND;SIPROUND;
-)
-
-PERL_SIPHASH_FNC(
-    S_perl_hash_siphash_2_4
-    ,SIPROUND;SIPROUND;
-    ,SIPROUND;SIPROUND;SIPROUND;SIPROUND;
-)
-
-#endif /* defined(CAN64BITHASH) */
-
-
 #endif /*compile once*/
 
 /*

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/hv_macro.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/hv_macro.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/hv_macro.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,5 +1,5 @@
-#ifndef PERL_SEEN_HV_MACRO_H /* compile once */
-#define PERL_SEEN_HV_MACRO_H
+#ifndef PERL_SEEN_HV_MACRO_H_ /* compile once */
+#define PERL_SEEN_HV_MACRO_H_
 
 #if IVSIZE == 8
 #define CAN64BITHASH

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/inline.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/inline.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/inline.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -39,17 +39,33 @@
 
 /* ------------------------------- av.h ------------------------------- */
 
-PERL_STATIC_INLINE SSize_t
-Perl_av_top_index(pTHX_ AV *av)
+/*
+=for apidoc_section $AV
+=for apidoc av_count
+Returns the number of elements in the array C<av>.  This is the true length of
+the array, including any undefined elements.  It is always the same as
+S<C<av_top_index(av) + 1>>.
+
+=cut
+*/
+PERL_STATIC_INLINE Size_t
+Perl_av_count(pTHX_ AV *av)
 {
-    PERL_ARGS_ASSERT_AV_TOP_INDEX;
+    PERL_ARGS_ASSERT_AV_COUNT;
     assert(SvTYPE(av) == SVt_PVAV);
 
-    return AvFILL(av);
+    return AvFILL(av) + 1;
 }
 
 /* ------------------------------- cv.h ------------------------------- */
 
+/*
+=for apidoc_section $CV
+=for apidoc CvGV
+Returns the GV associated with the CV C<sv>, reifying it if necessary.
+
+=cut
+*/
 PERL_STATIC_INLINE GV *
 Perl_CvGV(pTHX_ CV *sv)
 {
@@ -56,8 +72,8 @@
     PERL_ARGS_ASSERT_CVGV;
 
     return CvNAMED(sv)
-	? Perl_cvgv_from_hek(aTHX_ sv)
-	: ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_gv;
+        ? Perl_cvgv_from_hek(aTHX_ sv)
+        : ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_gv;
 }
 
 PERL_STATIC_INLINE I32 *
@@ -89,13 +105,13 @@
     tmpsv = newSVpvn_flags(orig, *len, SVs_TEMP);
     tmps = SvPVX(tmpsv);
     while ((*len)--) {
-	if (!isSPACE(*orig))
-	    *tmps++ = *orig;
-	orig++;
+        if (!isSPACE(*orig))
+            *tmps++ = *orig;
+        orig++;
     }
     *tmps = '\0';
     *len = tmps - SvPVX(tmpsv);
-		return SvPVX(tmpsv);
+                return SvPVX(tmpsv);
 }
 #endif
 
@@ -109,12 +125,12 @@
     assert(mg->mg_type == PERL_MAGIC_regex_global);
     assert(mg->mg_len != -1);
     if (mg->mg_flags & MGf_BYTES || !DO_UTF8(sv))
-	return (STRLEN)mg->mg_len;
+        return (STRLEN)mg->mg_len;
     else {
-	const STRLEN pos = (STRLEN)mg->mg_len;
-	/* Without this check, we may read past the end of the buffer: */
-	if (pos > sv_or_pv_len_utf8(sv, s, len)) return len+1;
-	return sv_or_pv_pos_u2b(sv, s, pos, NULL);
+        const STRLEN pos = (STRLEN)mg->mg_len;
+        /* Without this check, we may read past the end of the buffer: */
+        if (pos > sv_or_pv_len_utf8(sv, s, len)) return len+1;
+        return sv_or_pv_pos_u2b(sv, s, pos, NULL);
     }
 }
 #endif
@@ -131,27 +147,27 @@
      * This is complicated by the fact that PL_cop_seqmax
      * may have wrapped around at some point */
     if (COP_SEQ_RANGE_LOW(pn) == PERL_PADSEQ_INTRO)
-	return FALSE; /* not yet introduced */
+        return FALSE; /* not yet introduced */
 
     if (COP_SEQ_RANGE_HIGH(pn) == PERL_PADSEQ_INTRO) {
     /* in compiling scope */
-	if (
-	    (seq >  COP_SEQ_RANGE_LOW(pn))
-	    ? (seq - COP_SEQ_RANGE_LOW(pn) < (U32_MAX >> 1))
-	    : (COP_SEQ_RANGE_LOW(pn) - seq > (U32_MAX >> 1))
-	)
-	    return TRUE;
+        if (
+            (seq >  COP_SEQ_RANGE_LOW(pn))
+            ? (seq - COP_SEQ_RANGE_LOW(pn) < (U32_MAX >> 1))
+            : (COP_SEQ_RANGE_LOW(pn) - seq > (U32_MAX >> 1))
+        )
+            return TRUE;
     }
     else if (
-	(COP_SEQ_RANGE_LOW(pn) > COP_SEQ_RANGE_HIGH(pn))
-	?
-	    (  seq >  COP_SEQ_RANGE_LOW(pn)
-	    || seq <= COP_SEQ_RANGE_HIGH(pn))
+        (COP_SEQ_RANGE_LOW(pn) > COP_SEQ_RANGE_HIGH(pn))
+        ?
+            (  seq >  COP_SEQ_RANGE_LOW(pn)
+            || seq <= COP_SEQ_RANGE_HIGH(pn))
 
-	:    (  seq >  COP_SEQ_RANGE_LOW(pn)
-	     && seq <= COP_SEQ_RANGE_HIGH(pn))
+        :    (  seq >  COP_SEQ_RANGE_LOW(pn)
+             && seq <= COP_SEQ_RANGE_HIGH(pn))
     )
-	return TRUE;
+        return TRUE;
     return FALSE;
 }
 #endif
@@ -162,9 +178,9 @@
 Perl_TOPMARK(pTHX)
 {
     DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,
-				 "MARK top  %p %" IVdf "\n",
-				  PL_markstack_ptr,
-				  (IV)*PL_markstack_ptr)));
+                                 "MARK top  %p %" IVdf "\n",
+                                  PL_markstack_ptr,
+                                  (IV)*PL_markstack_ptr)));
     return *PL_markstack_ptr;
 }
 
@@ -172,9 +188,9 @@
 Perl_POPMARK(pTHX)
 {
     DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,
-				 "MARK pop  %p %" IVdf "\n",
-				  (PL_markstack_ptr-1),
-				  (IV)*(PL_markstack_ptr-1))));
+                                 "MARK pop  %p %" IVdf "\n",
+                                  (PL_markstack_ptr-1),
+                                  (IV)*(PL_markstack_ptr-1))));
     assert((PL_markstack_ptr > PL_markstack) || !"MARK underflow");
     return *PL_markstack_ptr--;
 }
@@ -196,18 +212,67 @@
 /* ------------------------------- sv.h ------------------------------- */
 
 PERL_STATIC_INLINE bool
-Perl_SvTRUE(pTHX_ SV *sv) {
-    if (!LIKELY(sv))
+Perl_SvTRUE(pTHX_ SV *sv)
+{
+    PERL_ARGS_ASSERT_SVTRUE;
+
+    if (UNLIKELY(sv == NULL))
         return FALSE;
     SvGETMAGIC(sv);
     return SvTRUE_nomg_NN(sv);
 }
 
+PERL_STATIC_INLINE bool
+Perl_SvTRUE_nomg(pTHX_ SV *sv)
+{
+    PERL_ARGS_ASSERT_SVTRUE_NOMG;
+
+    if (UNLIKELY(sv == NULL))
+        return FALSE;
+    return SvTRUE_nomg_NN(sv);
+}
+
+PERL_STATIC_INLINE bool
+Perl_SvTRUE_NN(pTHX_ SV *sv)
+{
+    PERL_ARGS_ASSERT_SVTRUE_NN;
+
+    SvGETMAGIC(sv);
+    return SvTRUE_nomg_NN(sv);
+}
+
+PERL_STATIC_INLINE bool
+Perl_SvTRUE_common(pTHX_ SV * sv, const bool sv_2bool_is_fallback)
+{
+    PERL_ARGS_ASSERT_SVTRUE_COMMON;
+
+    if (UNLIKELY(SvIMMORTAL_INTERP(sv)))
+        return SvIMMORTAL_TRUE(sv);
+
+    if (! SvOK(sv))
+        return FALSE;
+
+    if (SvPOK(sv))
+        return SvPVXtrue(sv);
+
+    if (SvIOK(sv))
+        return SvIVX(sv) != 0; /* casts to bool */
+
+    if (SvROK(sv) && !(SvOBJECT(SvRV(sv)) && HvAMAGIC(SvSTASH(SvRV(sv)))))
+        return TRUE;
+
+    if (sv_2bool_is_fallback)
+        return sv_2bool_nomg(sv);
+
+    return isGV_with_GP(sv);
+}
+
+
 PERL_STATIC_INLINE SV *
 Perl_SvREFCNT_inc(SV *sv)
 {
     if (LIKELY(sv != NULL))
-	SvREFCNT(sv)++;
+        SvREFCNT(sv)++;
     return sv;
 }
 PERL_STATIC_INLINE SV *
@@ -222,17 +287,17 @@
 Perl_SvREFCNT_inc_void(SV *sv)
 {
     if (LIKELY(sv != NULL))
-	SvREFCNT(sv)++;
+        SvREFCNT(sv)++;
 }
 PERL_STATIC_INLINE void
 Perl_SvREFCNT_dec(pTHX_ SV *sv)
 {
     if (LIKELY(sv != NULL)) {
-	U32 rc = SvREFCNT(sv);
-	if (LIKELY(rc > 1))
-	    SvREFCNT(sv) = rc - 1;
-	else
-	    Perl_sv_free2(aTHX_ sv, rc);
+        U32 rc = SvREFCNT(sv);
+        if (LIKELY(rc > 1))
+            SvREFCNT(sv) = rc - 1;
+        else
+            Perl_sv_free2(aTHX_ sv, rc);
     }
 }
 
@@ -244,9 +309,9 @@
     PERL_ARGS_ASSERT_SVREFCNT_DEC_NN;
 
     if (LIKELY(rc > 1))
-	SvREFCNT(sv) = rc - 1;
+        SvREFCNT(sv) = rc - 1;
     else
-	Perl_sv_free2(aTHX_ sv, rc);
+        Perl_sv_free2(aTHX_ sv, rc);
 }
 
 PERL_STATIC_INLINE void
@@ -263,7 +328,7 @@
     PERL_ARGS_ASSERT_SVAMAGIC_OFF;
 
     if (SvROK(sv) && SvOBJECT(SvRV(sv)))
-	HvAMAGIC_off(SvSTASH(SvRV(sv)));
+        HvAMAGIC_off(SvSTASH(SvRV(sv)));
 }
 
 PERL_STATIC_INLINE U32
@@ -284,9 +349,9 @@
 {
     PERL_ARGS_ASSERT_SV_OR_PV_POS_U2B;
     if (SvGAMAGIC(sv)) {
-	U8 *hopped = utf8_hop((U8 *)pv, pos);
-	if (lenp) *lenp = (STRLEN)(utf8_hop(hopped, *lenp) - hopped);
-	return (STRLEN)(hopped - (U8 *)pv);
+        U8 *hopped = utf8_hop((U8 *)pv, pos);
+        if (lenp) *lenp = (STRLEN)(utf8_hop(hopped, *lenp) - hopped);
+        return (STRLEN)(hopped - (U8 *)pv);
     }
     return sv_pos_u2b_flags(sv,pos,lenp,SV_CONST_RETURN);
 }
@@ -295,7 +360,7 @@
 /* ------------------------------- utf8.h ------------------------------- */
 
 /*
-=head1 Unicode Support
+=for apidoc_section $unicode
 */
 
 PERL_STATIC_INLINE void
@@ -340,7 +405,7 @@
 
     /* An invariant is trivially returned */
     if (expectlen == 1) {
-	return uv;
+        return uv;
     }
 
     /* Remove the leading bits that indicate the number of bytes, leaving just
@@ -502,7 +567,7 @@
 
     /* Process per-byte */
     while (x < send) {
-	if (! UTF8_IS_INVARIANT(*x)) {
+        if (! UTF8_IS_INVARIANT(*x)) {
             if (ep) {
                 *ep = x;
             }
@@ -677,7 +742,7 @@
 
     /* Process per-byte */
     while (x < e) {
-	if (! UTF8_IS_INVARIANT(*x)) {
+        if (! UTF8_IS_INVARIANT(*x)) {
             count++;
         }
 
@@ -1506,15 +1571,15 @@
      * In other words: in Perl UTF-8 is not just for Unicode. */
 
     if (off >= 0) {
-	while (off--)
-	    s += UTF8SKIP(s);
+        while (off--)
+            s += UTF8SKIP(s);
     }
     else {
-	while (off++) {
-	    s--;
-	    while (UTF8_IS_CONTINUATION(*s))
-		s--;
-	}
+        while (off++) {
+            s--;
+            while (UTF8_IS_CONTINUATION(*s))
+                s--;
+        }
     }
     GCC_DIAG_IGNORE(-Wcast-qual)
     return (U8 *)s;
@@ -1868,7 +1933,7 @@
 /* ------------------------------- perl.h ----------------------------- */
 
 /*
-=head1 Miscellaneous Functions
+=for apidoc_section $utility
 
 =for apidoc is_safe_syscall
 
@@ -1954,15 +2019,17 @@
 
     PERL_ARGS_ASSERT_LOSSLESS_NV_TO_IV;
 
-#  if  defined(Perl_isnan)
-
+#  if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
+    /* Normally any comparison with a NaN returns false; if we can't rely
+     * on that behaviour, check explicitly */
     if (UNLIKELY(Perl_isnan(nv))) {
         return FALSE;
     }
-
 #  endif
 
-    if (UNLIKELY(nv < IV_MIN) || UNLIKELY(nv > IV_MAX)) {
+    /* Written this way so that with an always-false NaN comparison we
+     * return false */
+    if (!(LIKELY(nv >= (NV) IV_MIN) && LIKELY(nv < IV_MAX_P1))) {
         return FALSE;
     }
 
@@ -1976,36 +2043,6 @@
 
 #endif
 
-/* ------------------ regcomp.c, toke.c ------------ */
-
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-
-/*
- - regcurly - a little FSA that accepts {\d+,?\d*}
-    Pulled from reg.c.
- */
-PERL_STATIC_INLINE bool
-S_regcurly(const char *s)
-{
-    PERL_ARGS_ASSERT_REGCURLY;
-
-    if (*s++ != '{')
-	return FALSE;
-    if (!isDIGIT(*s))
-	return FALSE;
-    while (isDIGIT(*s))
-	s++;
-    if (*s == ',') {
-	s++;
-	while (isDIGIT(*s))
-	    s++;
-    }
-
-    return *s == '}';
-}
-
-#endif
-
 /* ------------------ pp.c, regcomp.c, toke.c, universal.c ------------ */
 
 #if defined(PERL_IN_PP_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C)
@@ -2026,10 +2063,10 @@
         case REGEX_DEPENDS_CHARSET: return DEPENDS_PAT_MODS;
         case REGEX_LOCALE_CHARSET:  return LOCALE_PAT_MODS;
         case REGEX_UNICODE_CHARSET: return UNICODE_PAT_MODS;
-	case REGEX_ASCII_RESTRICTED_CHARSET: return ASCII_RESTRICT_PAT_MODS;
-	case REGEX_ASCII_MORE_RESTRICTED_CHARSET:
-	    *lenp = 2;
-	    return ASCII_MORE_RESTRICT_PAT_MODS;
+        case REGEX_ASCII_RESTRICTED_CHARSET: return ASCII_RESTRICT_PAT_MODS;
+        case REGEX_ASCII_MORE_RESTRICTED_CHARSET:
+            *lenp = 2;
+            return ASCII_MORE_RESTRICT_PAT_MODS;
     }
     /* The NOT_REACHED; hides an assert() which has a rather complex
      * definition in perl.h. */
@@ -2078,7 +2115,7 @@
         return gimme;
     cxix = PL_curstackinfo->si_cxsubix;
     if (cxix < 0)
-        return G_VOID;
+        return PL_curstackinfo->si_type == PERLSI_SORT ? G_SCALAR: G_VOID;
     assert(cxstack[cxix].blk_gimme & G_WANT);
     return (cxstack[cxix].blk_gimme & G_WANT);
 }
@@ -2276,12 +2313,8 @@
 
 
 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;
@@ -2294,8 +2327,31 @@
     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)
 {
     SV *sv;
@@ -2439,7 +2495,7 @@
 /* ------------------ util.h ------------------------------------------- */
 
 /*
-=head1 Miscellaneous Functions
+=for apidoc_section $string
 
 =for apidoc foldEQ
 
@@ -2463,9 +2519,9 @@
     assert(len >= 0);
 
     while (len--) {
-	if (*a != *b && *a != PL_fold[*b])
-	    return 0;
-	a++,b++;
+        if (*a != *b && *a != PL_fold[*b])
+            return 0;
+        a++,b++;
     }
     return 1;
 }
@@ -2486,15 +2542,16 @@
     assert(len >= 0);
 
     while (len--) {
-	if (*a != *b && *a != PL_fold_latin1[*b]) {
-	    return 0;
-	}
-	a++, b++;
+        if (*a != *b && *a != PL_fold_latin1[*b]) {
+            return 0;
+        }
+        a++, b++;
     }
     return 1;
 }
 
 /*
+=for apidoc_section $locale
 =for apidoc foldEQ_locale
 
 Returns true if the leading C<len> bytes of the strings C<s1> and C<s2> are the
@@ -2506,7 +2563,6 @@
 PERL_STATIC_INLINE I32
 Perl_foldEQ_locale(const char *s1, const char *s2, I32 len)
 {
-    dVAR;
     const U8 *a = (const U8 *)s1;
     const U8 *b = (const U8 *)s2;
 
@@ -2515,14 +2571,15 @@
     assert(len >= 0);
 
     while (len--) {
-	if (*a != *b && *a != PL_fold_locale[*b])
-	    return 0;
-	a++,b++;
+        if (*a != *b && *a != PL_fold_locale[*b])
+            return 0;
+        a++,b++;
     }
     return 1;
 }
 
 /*
+=for apidoc_section $string
 =for apidoc my_strnlen
 
 The C library C<strnlen> if available, or a Perl implementation of it.
@@ -2580,24 +2637,32 @@
 {
     /* This implements a (mostly) thread-safe, sequential-call-safe getenv().
      *
-     * It's (mostly) thread-safe because it uses a mutex to prevent
-     * simultaneous access from other threads that use the same mutex, and
-     * makes a copy of the result before releasing that mutex.  All of the Perl
-     * core uses that mutex, but, like all mutexes, everything has to cooperate
-     * for it to completely work.  It is possible for code from, say XS, to not
-     * use this mutex, defeating the safety.
+     * It's (mostly) thread-safe because it uses a mutex to prevent other
+     * threads (that look at this mutex) from destroying the result before this
+     * routine has a chance to copy the result to a place that won't be
+     * destroyed before the caller gets a chance to handle it.  That place is a
+     * mortal SV.  khw chose this over SAVEFREEPV because he is under the
+     * impression that the SV will hang around longer under more circumstances
      *
-     * On some platforms, getenv() is not sequential-call-safe, because
-     * subsequent calls destroy the static storage inside the C library
-     * returned by an earlier call.  The result must be copied or completely
-     * acted upon before a subsequent getenv call.  Those calls could come from
-     * another thread.  Again, making a copy while controlling the mutex
-     * prevents these problems..
+     * The reason it isn't completely thread-safe is that other code could
+     * simply not pay attention to the mutex.  All of the Perl core uses the
+     * mutex, but it is possible for code from, say XS, to not use this mutex,
+     * defeating the safety.
      *
-     * To prevent leaks, the copy is made by creating a new SV containing it,
-     * mortalizing the SV, and returning the SV's string (the copy).  Thus this
-     * is a drop-in replacement for getenv().
+     * getenv() returns, in some implementations, a pointer to a spot in the
+     * **environ array, which could be invalidated at any time by this or
+     * another thread changing the environment.  Other implementations copy the
+     * **environ value to a static buffer, returning a pointer to that.  That
+     * buffer might or might not be invalidated by a getenv() call in another
+     * thread.  If it does get zapped, we need an exclusive lock.  Otherwise,
+     * many getenv() calls can safely be running simultaneously, so a
+     * many-reader (but no simultaneous writers) lock is ok.  There is a
+     * Configure probe to see if another thread destroys the buffer, and the
+     * mutex is defined accordingly.
      *
+     * But in all cases, using the mutex prevents these problems, as long as
+     * all code uses the same mutex..
+     *
      * A complication is that this can be called during phases where the
      * mortalization process isn't available.  These are in interpreter
      * destruction or early in construction.  khw believes that at these times
@@ -2616,8 +2681,137 @@
         return getenv(str);
     }
 
-    ENV_LOCK;
+#ifdef PERL_MEM_LOG
 
+    /* A major complication arises under PERL_MEM_LOG.  When that is active,
+     * every memory allocation may result in logging, depending on the value of
+     * ENV{PERL_MEM_LOG} at the moment.  That means, as we create the SV for
+     * saving ENV{foo}'s value (but before saving it), the logging code will
+     * call us recursively to find out what ENV{PERL_MEM_LOG} is.  Without some
+     * care that could lead to: 1) infinite recursion; or 2) deadlock (trying to
+     * lock a boolean mutex recursively); 3) destroying the getenv() static
+     * buffer; or 4) destroying the temporary created by this for the copy
+     * causes a log entry to be made which could cause a new temporary to be
+     * created, which will need to be destroyed at some point, leading to an
+     * infinite loop.
+     *
+     * The solution adopted here (after some gnashing of teeth) is to detect
+     * the recursive calls and calls from the logger, and treat them specially.
+     * Let's say we want to do getenv("foo").  We first find
+     * getenv(PERL_MEM_LOG) and save it to a fixed-length per-interpreter
+     * variable, so no temporary is required.  Then we do getenv(foo}, and in
+     * the process of creating a temporary to save it, this function will be
+     * called recursively to do a getenv(PERL_MEM_LOG).  On the recursed call,
+     * we detect that it is such a call and return our saved value instead of
+     * locking and doing a new getenv().  This solves all of problems 1), 2),
+     * and 3).  Because all the getenv()s are done while the mutex is locked,
+     * the state cannot have changed.  To solve 4), we don't create a temporary
+     * when this is called from the logging code.  That code disposes of the
+     * return value while the mutex is still locked.
+     *
+     * The value of getenv(PERL_MEM_LOG) can be anything, but only initial
+     * digits and 3 particular letters are significant; the rest are ignored by
+     * the memory logging code.  Thus the per-interpreter variable only needs
+     * to be large enough to save the significant information, the size of
+     * which is known at compile time.  The first byte is extra, reserved for
+     * flags for our use.  To protect against overflowing, only the reserved
+     * byte, as many digits as don't overflow, and the three letters are
+     * stored.
+     *
+     * The reserved byte has two bits:
+     *      0x1 if set indicates that if we get here, it is a recursive call of
+     *          getenv()
+     *      0x2 if set indicates that the call is from the logging code.
+     *
+     * If the flag indicates this is a recursive call, just return the stored
+     * value of PL_mem_log;  An empty value gets turned into NULL. */
+    if (strEQ(str, "PERL_MEM_LOG") && PL_mem_log[0] & 0x1) {
+        if (PL_mem_log[1] == '\0') {
+            return NULL;
+        } else {
+            return PL_mem_log + 1;
+        }
+    }
+
+#endif
+
+    GETENV_LOCK;
+
+#ifdef PERL_MEM_LOG
+
+    /* Here we are in a critical section.  As explained above, we do our own
+     * getenv(PERL_MEM_LOG), saving the result safely. */
+    ret = getenv("PERL_MEM_LOG");
+    if (ret == NULL) {  /* No logging active */
+
+        /* Return that immediately if called from the logging code */
+        if (PL_mem_log[0] & 0x2) {
+            GETENV_UNLOCK;
+            return NULL;
+        }
+
+        PL_mem_log[1] = '\0';
+    }
+    else {
+        char *mem_log_meat = PL_mem_log + 1;    /* first byte reserved */
+
+        /* There is nothing to prevent the value of PERL_MEM_LOG from being an
+         * extremely long string.  But we want only a few characters from it.
+         * PL_mem_log has been made large enough to hold just the ones we need.
+         * First the file descriptor. */
+        if (isDIGIT(*ret)) {
+            const char * s = ret;
+            if (UNLIKELY(*s == '0')) {
+
+                /* Reduce multiple leading zeros to a single one.  This is to
+                 * allow the caller to change what to do with leading zeros. */
+                *mem_log_meat++ = '0';
+                s++;
+                while (*s == '0') {
+                    s++;
+                }
+            }
+
+            /* If the input overflows, copy just enough for the result to also
+             * overflow, plus 1 to make sure */
+            while (isDIGIT(*s) && s < ret + TYPE_DIGITS(UV) + 1) {
+                *mem_log_meat++ = *s++;
+            }
+        }
+
+        /* Then each of the three significant characters */
+        if (strchr(ret, 'm')) {
+            *mem_log_meat++ = 'm';
+        }
+        if (strchr(ret, 's')) {
+            *mem_log_meat++ = 's';
+        }
+        if (strchr(ret, 't')) {
+            *mem_log_meat++ = 't';
+        }
+        *mem_log_meat = '\0';
+
+        assert(mem_log_meat < PL_mem_log + sizeof(PL_mem_log));
+    }
+
+    /* If we are being called from the logger, it only needs the significant
+     * portion of PERL_MEM_LOG, and doesn't need a safe copy */
+    if (PL_mem_log[0] & 0x2) {
+        assert(strEQ(str, "PERL_MEM_LOG"));
+        GETENV_UNLOCK;
+        return PL_mem_log + 1;
+    }
+
+    /* Here is a generic getenv().  This could be a getenv("PERL_MEM_LOG") that
+     * is coming from other than the logging code, so it should be treated the
+     * same as any other getenv(), returning the full value, not just the
+     * significant part, and having its value saved.  Set the flag that
+     * indicates any call to this routine will be a recursion from here */
+    PL_mem_log[0] = 0x1;
+
+#endif
+
+    /* Now get the value of the real desired variable, and save a copy */
     ret = getenv(str);
 
     if (ret != NULL) {
@@ -2624,7 +2818,15 @@
         ret = SvPVX(sv_2mortal(newSVpv(ret, 0)));
     }
 
-    ENV_UNLOCK;
+    GETENV_UNLOCK;
+
+#ifdef PERL_MEM_LOG
+
+    /* Clear the buffer */
+    Zero(PL_mem_log, sizeof(PL_mem_log), char);
+
+#endif
+
     return ret;
 }
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/intrpvar.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/intrpvar.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/intrpvar.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -10,10 +10,6 @@
 
 #include "handy.h"
 
-/*
-=head1 Per-Interpreter Variables
-*/
-
 /* These variables are per-interpreter in threaded/multiplicity builds,
  * global otherwise.
 
@@ -40,7 +36,7 @@
 PERLVAR(I, stack_max,	SV **)
 
 PERLVAR(I, savestack,	ANY *)		/* items that need to be restored when
-					   LEAVEing scopes we've ENTERed */
+                                           LEAVEing scopes we've ENTERed */
 PERLVAR(I, savestack_ix, I32)
 PERLVAR(I, savestack_max, I32)
 
@@ -53,13 +49,13 @@
 PERLVARI(I, tmps_floor,	SSize_t,	-1)
 PERLVAR(I, tmps_max,	SSize_t)        /* first unalloced slot in tmps stack */
 
-PERLVARI(I, sub_generation, U32, 1)	/* incr to invalidate method cache */
-
 PERLVAR(I, markstack,	I32 *)		/* stack_sp locations we're
-					   remembering */
+                                           remembering */
 PERLVAR(I, markstack_ptr, I32 *)
 PERLVAR(I, markstack_max, I32 *)
 
+PERLVARI(I, sub_generation, U32, 1)	/* incr to invalidate method cache */
+
 #ifdef PERL_HASH_RANDOMIZE_KEYS
 #ifdef USE_PERL_PERTURB_KEYS
 PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */
@@ -94,18 +90,7 @@
 PERLVAR(I, delaymagic,	U16)		/* ($<,$>) = ... */
 
 /*
-=for apidoc Amn|GV *|PL_defgv
-
-The GV representing C<*_>.  Useful for access to C<$_>.
-
-=cut
-*/
-
-PERLVAR(I, localizing,	U8)		/* are we processing a local() list? */
-PERLVAR(I, in_eval,	U8)		/* trap "fatal" errors? */
-PERLVAR(I, defgv,	GV *)           /* the *_ glob */
-/*
-
+=for apidoc_section $warning
 =for apidoc mn|U8|PL_dowarn
 
 The C variable that roughly corresponds to Perl's C<$^W> warning variable.
@@ -112,6 +97,10 @@
 However, C<$^W> is treated as a boolean, whereas C<PL_dowarn> is a
 collection of flag bits.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -126,10 +115,30 @@
 #undef PERL___I
 
 /*
+=for apidoc Amn|GV *|PL_defgv
+
+The GV representing C<*_>.  Useful for access to C<$_>.
+
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
+=cut
+*/
+
+PERLVAR(I, localizing,	U8)		/* are we processing a local() list? */
+PERLVAR(I, in_eval,	U8)		/* trap "fatal" errors? */
+PERLVAR(I, defgv,	GV *)           /* the *_ glob */
+
+/*
 =for apidoc Amn|HV*|PL_curstash
 
 The stash for the package code will be compiled into.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -143,6 +152,10 @@
 The currently active COP (control op) roughly representing the current
 statement in the source.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -150,7 +163,7 @@
 PERLVAR(I, curstack,	AV *)		/* THE STACK */
 PERLVAR(I, curstackinfo, PERL_SI *)	/* current stack + context */
 PERLVAR(I, mainstack,	AV *)		/* the stack when nothing funny is
-					   happening */
+                                           happening */
 
 /* memory management */
 PERLVAR(I, sv_count,	IV)		/* how many SV* are currently allocated */
@@ -171,16 +184,18 @@
 PERLVAR(I, comppad,	PAD *)		/* storage for lexically scoped temporaries */
 
 /*
+=for apidoc_section $SV
 =for apidoc Amn|SV|PL_sv_undef
-This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
+This is the C<undef> SV.  It is readonly.  Always refer to this as
+C<&PL_sv_undef>.
 
 =for apidoc Amn|SV|PL_sv_no
-This is the C<false> SV.  See C<L</PL_sv_yes>>.  Always refer to this as
-C<&PL_sv_no>.
+This is the C<false> SV.  It is readonly.  See C<L</PL_sv_yes>>.  Always refer
+to this as C<&PL_sv_no>.
 
 =for apidoc Amn|SV|PL_sv_yes
-This is the C<true> SV.  See C<L</PL_sv_no>>.  Always refer to this as
-C<&PL_sv_yes>.
+This is the C<true> SV.  It is readonly.  See C<L</PL_sv_no>>.  Always refer to
+this as C<&PL_sv_yes>.
 
 =for apidoc Amn|SV|PL_sv_zero
 This readonly SV has a zero numeric value and a C<"0"> string value. It's
@@ -204,7 +219,19 @@
 
 PERLVAR(I, padname_undef,	PADNAME)
 PERLVAR(I, padname_const,	PADNAME)
-PERLVAR(I, Sv,		SV *)		/* used to hold temporary values */
+
+/*
+=for apidoc Cmn||PL_Sv
+
+A scratch pad SV for whatever temporary use you need.  Chiefly used as a
+fallback by macros on platforms where L<perlapi/PERL_USE_GCC_BRACE_GROUPS>> is
+unavailable, and which would otherwise evaluate their SV parameter more than
+once.
+
+=cut
+*/
+PERLVAR(I, Sv,		SV *)
+
 PERLVAR(I, parser,	yy_parser *)	/* current parser state */
 
 PERLVAR(I, stashcache,	HV *)		/* Cache to speed up S_method_common */
@@ -222,7 +249,7 @@
 */
 
 PERLVAR(I, na,		STRLEN)		/* for use in SvPV when length is
-					   Not Applicable */
+                                           Not Applicable */
 
 /* stat stuff */
 PERLVAR(I, statcache,	Stat_t)		/* _ */
@@ -230,18 +257,31 @@
 PERLVARI(I, statname,	SV *,	NULL)
 
 /*
+=for apidoc_section $io
 =for apidoc mn|SV*|PL_rs
 
 The input record separator - C<$/> in Perl space.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =for apidoc mn|GV*|PL_last_in_gv
 
 The GV which was last used for a filehandle input operation.  (C<< <FH> >>)
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =for apidoc mn|GV*|PL_ofsgv
 
 The glob containing the output field separator - C<*,> in Perl space.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -278,9 +318,10 @@
 PERLVAR(I, efloatsize,	STRLEN)
 
 PERLVARI(I, dumpindent,	U16,	4)	/* number of blanks per dump
-					   indentation level */
+                                           indentation level */
 
 /*
+=for apidoc_section $embedding
 =for apidoc Amn|U8|PL_exit_flags
 
 Contains flags controlling perl's behaviour on exit():
@@ -313,6 +354,10 @@
 =for apidoc Amnh||PERL_EXIT_DESTRUCT_END
 =for apidoc Amnh||PERL_EXIT_WARN
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -334,6 +379,7 @@
 PERLVARA(I, colors,6,	char *)		/* values from PERL_RE_COLORS env var */
 
 /*
+=for apidoc_section $optree_construction
 =for apidoc Amn|peep_t|PL_peepp
 
 Pointer to the per-subroutine peephole optimiser.  This is a function
@@ -351,6 +397,10 @@
 structure, rather than just at the top level, it is likely to be more
 convenient to wrap the L</PL_rpeepp> hook.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -375,6 +425,10 @@
 rather than throughout the structure, it is likely to be more convenient
 to wrap the L</PL_peepp> hook.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -389,6 +443,10 @@
 
 When you replace this variable, it is considered a good practice to store the possibly previously installed hook and that you recall it inside your own.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -434,7 +492,7 @@
 PERLVAR(I, basetime,	Time_t)		/* $^T */
 
 PERLVARI(I, maxsysfd,	I32,	MAXSYSFD)
-					/* top fd to pass to subprocesses */
+                                        /* top fd to pass to subprocesses */
 PERLVAR(I, statusvalue,	I32)		/* $? */
 #ifdef VMS
 PERLVAR(I, statusvalue_vms, U32)
@@ -463,6 +521,7 @@
 PERLVAR(I, DBline,	GV *)		/*  *DB::line   */
 
 /*
+=for apidoc_section $debugging
 =for apidoc mn|GV *|PL_DBsub
 When Perl is run in debugging mode, with the B<-d> switch, this GV contains
 the SV which holds the name of the sub being debugged.  This is the C
@@ -469,6 +528,10 @@
 variable which corresponds to Perl's $DB::sub variable.  See
 C<L</PL_DBsingle>>.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =for apidoc mn|SV *|PL_DBsingle
 When Perl is run in debugging mode, with the B<-d> switch, this SV is a
 boolean which indicates whether subs are being single-stepped.
@@ -476,11 +539,19 @@
 variable which corresponds to Perl's $DB::single variable.  See
 C<L</PL_DBsub>>.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =for apidoc mn|SV *|PL_DBtrace
 Trace variable used when Perl is run in debugging mode, with the B<-d>
 switch.  This is the C variable which corresponds to Perl's $DB::trace
 variable.  See C<L</PL_DBsingle>>.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -541,14 +612,15 @@
 PERLVARI(I, laststatval, int,	-1)
 
 PERLVAR(I, modcount,	I32)		/* how much op_lvalue()ification in
-					   assignment? */
+                                           assignment? */
 
 /* interpreter atexit processing */
 PERLVARI(I, exitlistlen, I32, 0)	/* length of same */
 PERLVARI(I, exitlist,	PerlExitListEntry *, NULL)
-					/* list of exit functions */
+                                        /* list of exit functions */
 
 /*
+=for apidoc_section $HV
 =for apidoc Amn|HV*|PL_modglobal
 
 C<PL_modglobal> is a general purpose, interpreter global HV for use by
@@ -557,6 +629,10 @@
 to share data among each other.  It is a good idea to use keys
 prefixed by the package name of the extension that owns the data.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 
@@ -574,7 +650,7 @@
 
 #ifdef HAVE_INTERP_INTERN
 PERLVAR(I, sys_intern,	struct interp_intern)
-					/* platform internals */
+                                        /* platform internals */
 #endif
 
 /* more statics moved here */
@@ -628,14 +704,6 @@
 
 PERLVARI(I, padlist_generation, U32, 1)	/* id to identify padlist clones */
 
-/*
-=for apidoc Amn|runops_proc_t|PL_runops
-
-See L<perlguts/Pluggable runops>.
-
-=cut
-*/
-
 PERLVARI(I, runops,	runops_proc_t, RUNOPS_DEFAULT)
 
 PERLVAR(I, subname,	SV *)		/* name of current subroutine */
@@ -645,7 +713,7 @@
 
 PERLVAR(I, max_intro_pending, PADOFFSET)/* end of vars to introduce */
 PERLVAR(I, padix,	PADOFFSET)	/* lowest unused index - 1
-					   in current "register" pad */
+                                           in current "register" pad */
 PERLVAR(I, constpadix,	PADOFFSET)	/* lowest unused for constants */
 
 PERLVAR(I, padix_floor,	PADOFFSET)	/* how low may inner block reset padix */
@@ -654,6 +722,8 @@
  && defined(USE_THREAD_SAFE_LOCALE)         \
  && ! defined(HAS_QUERYLOCALE)
 
+/* This is the most number of categories we've encountered so far on any
+ * platform */
 PERLVARA(I, curlocales, 12, char *)
 
 #endif
@@ -668,7 +738,7 @@
                             /* Assume until proven otherwise that it works */
 PERLVARI(I, strxfrm_max_cp, U8, 0)      /* Highest collating cp in locale */
 PERLVARI(I, collation_standard, bool, TRUE)
-					/* Assume simple collation */
+                                        /* Assume simple collation */
 #endif /* USE_LOCALE_COLLATE */
 
 PERLVARI(I, langinfo_buf, char *, NULL)
@@ -680,9 +750,6 @@
 PERLVAR(I, sawampersand, U8)		/* must save all match strings */
 #endif
 
-PERLVAR(I, unsafe,	bool)
-PERLVAR(I, colorset,	bool)		/* PERL_RE_COLORS env var is in use */
-
 /* current phase the interpreter is in
    for ordering this structure to remove holes, we're assuming that this is 4
    bytes.  */
@@ -690,7 +757,11 @@
 
 PERLVARI(I, in_load_module, bool, FALSE)	/* to prevent recursions in PerlIO_find_layer */
 
+PERLVAR(I, unsafe,	bool)
+PERLVAR(I, colorset,	bool)		/* PERL_RE_COLORS env var is in use */
+
 /*
+=for apidoc_section $embedding
 =for apidoc Amn|signed char|PL_perl_destruct_level
 
 This value may be set when embedding for full cleanup.
@@ -710,18 +781,27 @@
 If C<$ENV{PERL_DESTRUCT_LEVEL}> is set to an integer greater than the
 value of C<PL_perl_destruct_level> its value is used instead.
 
+On threaded perls, each thread has an independent copy of this variable;
+each initialized at creation time with the current value of the creating
+thread's copy.
+
 =cut
 */
 /* mod_perl is special, and also assigns a meaning -1 */
 PERLVARI(I, perl_destruct_level, signed char,	0)
 
+PERLVAR(I, pad_reset_pending, bool)	/* reset pad on next attempted alloc */
+
+PERLVAR(I, srand_called, bool)
+
 #ifdef USE_LOCALE_NUMERIC
 
-PERLVARI(I, numeric_standard, int, TRUE)
-					/* Assume C locale numerics */
 PERLVARI(I, numeric_underlying, bool, TRUE)
-					/* Assume underlying locale numerics */
+                                        /* Assume underlying locale numerics */
 PERLVARI(I, numeric_underlying_is_standard, bool, TRUE)
+
+PERLVARI(I, numeric_standard, int, TRUE)
+                                        /* Assume C locale numerics */
 PERLVAR(I, numeric_name, char *)	/* Name of current numeric locale */
 PERLVAR(I, numeric_radix_sv, SV *)	/* The radix separator if not '.' */
 
@@ -732,15 +812,6 @@
 #  endif
 #endif /* !USE_LOCALE_NUMERIC */
 
-#ifdef FCRYPT
-PERLVARI(I, cryptseen,	bool,	FALSE)	/* has fast crypt() been initialized? */
-#else
-/* One byte hole in the interpreter structure.  */
-#endif
-
-PERLVAR(I, pad_reset_pending, bool)	/* reset pad on next attempted alloc */
-PERLVAR(I, srand_called, bool)
-
 /* Array of signal handlers, indexed by signal number, through which the C
    signal handler dispatches.  */
 PERLVAR(I, psig_ptr,	SV **)
@@ -769,12 +840,12 @@
 
 #if defined(USE_ITHREADS)
 PERLVAR(I, regex_pad,     SV **)	/* Shortcut into the array of
-					   regex_padav */
+                                           regex_padav */
 PERLVAR(I, regex_padav,   AV *)		/* All regex objects, indexed via the
-					   values in op_pmoffset of pmop.
-					   Entry 0 is an SV whose PV is a
-					   "packed" list of IVs listing
-					   the now-free slots in the array */
+                                           values in op_pmoffset of pmop.
+                                           Entry 0 is an SV whose PV is a
+                                           "packed" list of IVs listing
+                                           the now-free slots in the array */
 PERLVAR(I, stashpad,    HV **)		/* for CopSTASH */
 PERLVARI(I, stashpadmax, PADOFFSET, 64)
 PERLVARI(I, stashpadix, PADOFFSET, 0)
@@ -795,7 +866,7 @@
 
 PERLVARI(I, checkav_save, AV *, NULL)	/* save CHECK{}s when compiling */
 PERLVARI(I, unitcheckav_save, AV *, NULL)
-					/* save UNITCHECK{}s when compiling */
+                                        /* save UNITCHECK{}s when compiling */
 
 PERLVARI(I, clocktick,	long,	0)	/* this many times() ticks in a second */
 
@@ -847,11 +918,13 @@
 /* Hook for File::Glob */
 PERLVARI(I, globhook,	globhook_t, NULL)
 
+#if defined(MULTIPLICITY)
 /* The last unconditional member of the interpreter structure when 5.18.0 was
    released. The offset of the end of this is baked into a global variable in 
    any shared perl library which will allow a sanity test in future perl
    releases.  */
-#define PERL_LAST_5_18_0_INTERP_MEMBER	Iglobhook
+#  define PERL_LAST_5_18_0_INTERP_MEMBER	Iglobhook
+#endif
 
 #ifdef PERL_IMPLICIT_CONTEXT
 PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */
@@ -949,6 +1022,12 @@
 #ifdef HAS_WCRTOMB
 PERLVAR(I, wcrtomb_ps, mbstate_t)
 #endif
+#ifdef PERL_MEM_LOG
+/* Enough space for the reserved byte, 1 for a potential leading 0, then enough
+ * for the longest representable integer plus an extra, the 3 flag characters,
+ * and NUL */
+PERLVARA(I, mem_log, 1 + 1 + TYPE_DIGITS(UV) + 1 + 3 + 1, char);
+#endif
 
 /* If you are adding a U8 or U16, check to see if there are 'Space' comments
  * above on where there are gaps which currently will be structure padding.  */
@@ -957,6 +1036,4 @@
  * this comment, for binary compatibility (the offsets of the old members must
  *  not change).
  * (Don't forget to add your variable also to perl_clone()!)
- * XSUB.h provides wrapper functions via perlapi.h that make this
- * irrelevant, but not all code may be expected to #include XSUB.h.
  */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/invlist_inline.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/invlist_inline.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/invlist_inline.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -145,7 +145,7 @@
     PERL_ARGS_ASSERT_INVLIST_HIGHEST;
 
     if (len == 0) {
-	return 0;
+        return 0;
     }
 
     array = invlist_array(invlist);
@@ -218,8 +218,8 @@
     PERL_ARGS_ASSERT_INVLIST_ITERNEXT;
 
     if (*pos >= len) {
-	*pos = (STRLEN) UV_MAX;	/* Force iterinit() to be required next time */
-	return FALSE;
+        *pos = (STRLEN) UV_MAX;	/* Force iterinit() to be required next time */
+        return FALSE;
     }
 
     array = invlist_array(invlist);
@@ -227,10 +227,10 @@
     *start = array[(*pos)++];
 
     if (*pos >= len) {
-	*end = UV_MAX;
+        *end = UV_MAX;
     }
     else {
-	*end = array[(*pos)++] - 1;
+        *end = array[(*pos)++] - 1;
     }
 
     return TRUE;

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/iperlsys.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/iperlsys.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/iperlsys.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -69,7 +69,7 @@
 typedef FILE*		(*LPStdout)(struct IPerlStdIO*);
 typedef FILE*		(*LPStderr)(struct IPerlStdIO*);
 typedef FILE*		(*LPOpen)(struct IPerlStdIO*, const char*,
-			    const char*);
+                            const char*);
 typedef int		(*LPClose)(struct IPerlStdIO*, FILE*);
 typedef int		(*LPEof)(struct IPerlStdIO*, FILE*);
 typedef int		(*LPError)(struct IPerlStdIO*, FILE*);
@@ -87,12 +87,12 @@
 typedef int		(*LPFileno)(struct IPerlStdIO*, FILE*);
 typedef FILE*		(*LPFdopen)(struct IPerlStdIO*, int, const char*);
 typedef FILE*		(*LPReopen)(struct IPerlStdIO*, const char*,
-			    const char*, FILE*);
+                            const char*, FILE*);
 typedef SSize_t		(*LPRead)(struct IPerlStdIO*, void*, Size_t, Size_t, FILE *);
 typedef SSize_t		(*LPWrite)(struct IPerlStdIO*, const void*, Size_t, Size_t, FILE *);
 typedef void		(*LPSetBuf)(struct IPerlStdIO*, FILE*, char*);
 typedef int		(*LPSetVBuf)(struct IPerlStdIO*, FILE*, char*, int,
-			    Size_t);
+                            Size_t);
 typedef void		(*LPSetCnt)(struct IPerlStdIO*, FILE*, int);
 
 #ifndef NETWARE
@@ -103,9 +103,9 @@
 
 typedef void		(*LPSetlinebuf)(struct IPerlStdIO*, FILE*);
 typedef int		(*LPPrintf)(struct IPerlStdIO*, FILE*, const char*,
-			    ...);
+                            ...);
 typedef int		(*LPVprintf)(struct IPerlStdIO*, FILE*, const char*,
-			    va_list);
+                            va_list);
 typedef Off_t		(*LPTell)(struct IPerlStdIO*, FILE*);
 typedef int		(*LPSeek)(struct IPerlStdIO*, FILE*, Off_t, int);
 typedef void		(*LPRewind)(struct IPerlStdIO*, FILE*);
@@ -112,7 +112,7 @@
 typedef FILE*		(*LPTmpfile)(struct IPerlStdIO*);
 typedef int		(*LPGetpos)(struct IPerlStdIO*, FILE*, Fpos_t*);
 typedef int		(*LPSetpos)(struct IPerlStdIO*, FILE*,
-			    const Fpos_t*);
+                            const Fpos_t*);
 typedef void		(*LPInit)(struct IPerlStdIO*);
 typedef void		(*LPInitOSExtras)(struct IPerlStdIO*);
 typedef FILE*		(*LPFdupopen)(struct IPerlStdIO*, FILE*);
@@ -202,84 +202,84 @@
 /* Now take FILE * via function table */
 
 #define PerlSIO_stdin							\
-	(*PL_StdIO->pStdin)(PL_StdIO)
+        (*PL_StdIO->pStdin)(PL_StdIO)
 #define PerlSIO_stdout							\
-	(*PL_StdIO->pStdout)(PL_StdIO)
+        (*PL_StdIO->pStdout)(PL_StdIO)
 #define PerlSIO_stderr							\
-	(*PL_StdIO->pStderr)(PL_StdIO)
+        (*PL_StdIO->pStderr)(PL_StdIO)
 #define PerlSIO_fopen(x,y)						\
-	(*PL_StdIO->pOpen)(PL_StdIO, (x),(y))
+        (*PL_StdIO->pOpen)(PL_StdIO, (x),(y))
 #define PerlSIO_fclose(f)						\
-	(*PL_StdIO->pClose)(PL_StdIO, (f))
+        (*PL_StdIO->pClose)(PL_StdIO, (f))
 #define PerlSIO_feof(f)							\
-	(*PL_StdIO->pEof)(PL_StdIO, (f))
+        (*PL_StdIO->pEof)(PL_StdIO, (f))
 #define PerlSIO_ferror(f)						\
-	(*PL_StdIO->pError)(PL_StdIO, (f))
+        (*PL_StdIO->pError)(PL_StdIO, (f))
 #define PerlSIO_clearerr(f)						\
-	(*PL_StdIO->pClearerr)(PL_StdIO, (f))
+        (*PL_StdIO->pClearerr)(PL_StdIO, (f))
 #define PerlSIO_fgetc(f)						\
-	(*PL_StdIO->pGetc)(PL_StdIO, (f))
+        (*PL_StdIO->pGetc)(PL_StdIO, (f))
 #define PerlSIO_get_base(f)						\
-	(*PL_StdIO->pGetBase)(PL_StdIO, (f))
+        (*PL_StdIO->pGetBase)(PL_StdIO, (f))
 #define PerlSIO_get_bufsiz(f)						\
-	(*PL_StdIO->pGetBufsiz)(PL_StdIO, (f))
+        (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f))
 #define PerlSIO_get_cnt(f)						\
-	(*PL_StdIO->pGetCnt)(PL_StdIO, (f))
+        (*PL_StdIO->pGetCnt)(PL_StdIO, (f))
 #define PerlSIO_get_ptr(f)						\
-	(*PL_StdIO->pGetPtr)(PL_StdIO, (f))
+        (*PL_StdIO->pGetPtr)(PL_StdIO, (f))
 #define PerlSIO_fputc(c,f)			\
-	(*PL_StdIO->pPutc)(PL_StdIO, (c),(f))
+        (*PL_StdIO->pPutc)(PL_StdIO, (c),(f))
 #define PerlSIO_fputs(s,f)			\
-	(*PL_StdIO->pPuts)(PL_StdIO, (s),(f))
+        (*PL_StdIO->pPuts)(PL_StdIO, (s),(f))
 #define PerlSIO_fflush(f)						\
-	(*PL_StdIO->pFlush)(PL_StdIO, (f))
+        (*PL_StdIO->pFlush)(PL_StdIO, (f))
 #define PerlSIO_fgets(s, n, f)						\
-	(*PL_StdIO->pGets)(PL_StdIO, s, n, (f))
+        (*PL_StdIO->pGets)(PL_StdIO, s, n, (f))
 #define PerlSIO_ungetc(c,f)						\
-	(*PL_StdIO->pUngetc)(PL_StdIO, (c),(f))
+        (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f))
 #define PerlSIO_fileno(f)						\
-	(*PL_StdIO->pFileno)(PL_StdIO, (f))
+        (*PL_StdIO->pFileno)(PL_StdIO, (f))
 #define PerlSIO_fdopen(f, s)						\
-	(*PL_StdIO->pFdopen)(PL_StdIO, (f),(s))
+        (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s))
 #define PerlSIO_freopen(p, m, f)					\
-	(*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f))
+        (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f))
 #define PerlSIO_fread(buf,sz,count,f)					\
-	(*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f))
+        (*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f))
 #define PerlSIO_fwrite(buf,sz,count,f)					\
-	(*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f))
+        (*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f))
 #define PerlSIO_setbuf(f,b)						\
-	(*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b))
+        (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b))
 #define PerlSIO_setvbuf(f,b,t,s)					\
-	(*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s))
+        (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s))
 #define PerlSIO_set_cnt(f,c)						\
-	(*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c))
+        (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c))
 #define PerlSIO_set_ptr(f,p)						\
-	(*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p))
+        (*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p))
 #define PerlSIO_setlinebuf(f)						\
-	(*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
+        (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
 #define PerlSIO_printf		Perl_fprintf_nocontext
 #define PerlSIO_stdoutf		Perl_printf_nocontext
 #define PerlSIO_vprintf(f,fmt,a)						\
-	(*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)
+        (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)
 #define PerlSIO_ftell(f)							\
-	(*PL_StdIO->pTell)(PL_StdIO, (f))
+        (*PL_StdIO->pTell)(PL_StdIO, (f))
 #define PerlSIO_fseek(f,o,w)						\
-	(*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w))
+        (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w))
 #define PerlSIO_fgetpos(f,p)						\
-	(*PL_StdIO->pGetpos)(PL_StdIO, (f),(p))
+        (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p))
 #define PerlSIO_fsetpos(f,p)						\
-	(*PL_StdIO->pSetpos)(PL_StdIO, (f),(p))
+        (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p))
 #define PerlSIO_rewind(f)						\
-	(*PL_StdIO->pRewind)(PL_StdIO, (f))
+        (*PL_StdIO->pRewind)(PL_StdIO, (f))
 #define PerlSIO_tmpfile()						\
-	(*PL_StdIO->pTmpfile)(PL_StdIO)
+        (*PL_StdIO->pTmpfile)(PL_StdIO)
 #define PerlSIO_init()							\
-	(*PL_StdIO->pInit)(PL_StdIO)
+        (*PL_StdIO->pInit)(PL_StdIO)
 #undef 	init_os_extras
 #define init_os_extras()						\
-	(*PL_StdIO->pInitOSExtras)(PL_StdIO)
+        (*PL_StdIO->pInitOSExtras)(PL_StdIO)
 #define PerlSIO_fdupopen(f)						\
-	(*PL_StdIO->pFdupopen)(PL_StdIO, (f))
+        (*PL_StdIO->pFdupopen)(PL_StdIO, (f))
 
 #else	/* PERL_IMPLICIT_SYS */
 
@@ -408,28 +408,28 @@
 };
 
 #define PerlDir_mkdir(name, mode)				\
-	(*PL_Dir->pMakedir)(PL_Dir, (name), (mode))
+        (*PL_Dir->pMakedir)(PL_Dir, (name), (mode))
 #define PerlDir_chdir(name)					\
-	(*PL_Dir->pChdir)(PL_Dir, (name))
+        (*PL_Dir->pChdir)(PL_Dir, (name))
 #define PerlDir_rmdir(name)					\
-	(*PL_Dir->pRmdir)(PL_Dir, (name))
+        (*PL_Dir->pRmdir)(PL_Dir, (name))
 #define PerlDir_close(dir)					\
-	(*PL_Dir->pClose)(PL_Dir, (dir))
+        (*PL_Dir->pClose)(PL_Dir, (dir))
 #define PerlDir_open(name)					\
-	(*PL_Dir->pOpen)(PL_Dir, (name))
+        (*PL_Dir->pOpen)(PL_Dir, (name))
 #define PerlDir_read(dir)					\
-	(*PL_Dir->pRead)(PL_Dir, (dir))
+        (*PL_Dir->pRead)(PL_Dir, (dir))
 #define PerlDir_rewind(dir)					\
-	(*PL_Dir->pRewind)(PL_Dir, (dir))
+        (*PL_Dir->pRewind)(PL_Dir, (dir))
 #define PerlDir_seek(dir, loc)					\
-	(*PL_Dir->pSeek)(PL_Dir, (dir), (loc))
+        (*PL_Dir->pSeek)(PL_Dir, (dir), (loc))
 #define PerlDir_tell(dir)					\
-	(*PL_Dir->pTell)(PL_Dir, (dir))
+        (*PL_Dir->pTell)(PL_Dir, (dir))
 #ifdef WIN32
 #define PerlDir_mapA(dir)					\
-	(*PL_Dir->pMapPathA)(PL_Dir, (dir))
+        (*PL_Dir->pMapPathA)(PL_Dir, (dir))
 #define PerlDir_mapW(dir)					\
-	(*PL_Dir->pMapPathW)(PL_Dir, (dir))
+        (*PL_Dir->pMapPathW)(PL_Dir, (dir))
 #endif
 
 #else	/* PERL_IMPLICIT_SYS */
@@ -466,7 +466,7 @@
 typedef char*		(*LPEnvGetenv)(struct IPerlEnv*, const char*);
 typedef int		(*LPEnvPutenv)(struct IPerlEnv*, const char*);
 typedef char*		(*LPEnvGetenv_len)(struct IPerlEnv*,
-				    const char *varname, unsigned long *len);
+                                    const char *varname, unsigned long *len);
 typedef int		(*LPEnvUname)(struct IPerlEnv*, struct utsname *name);
 typedef void		(*LPEnvClearenv)(struct IPerlEnv*);
 typedef void*		(*LPEnvGetChildenv)(struct IPerlEnv*);
@@ -476,16 +476,16 @@
 #ifdef HAS_ENVGETENV
 typedef char*		(*LPENVGetenv)(struct IPerlEnv*, const char *varname);
 typedef char*		(*LPENVGetenv_len)(struct IPerlEnv*,
-				    const char *varname, unsigned long *len);
+                                    const char *varname, unsigned long *len);
 #endif
 #ifdef WIN32
 typedef unsigned long	(*LPEnvOsID)(struct IPerlEnv*);
 typedef char*		(*LPEnvLibPath)(struct IPerlEnv*, WIN32_NO_REGISTRY_M_(const char*)
-					STRLEN *const len);
+                                        STRLEN *const len);
 typedef char*		(*LPEnvSiteLibPath)(struct IPerlEnv*, const char*,
-					    STRLEN *const len);
+                                            STRLEN *const len);
 typedef char*		(*LPEnvVendorLibPath)(struct IPerlEnv*, const char*,
-					      STRLEN *const len);
+                                              STRLEN *const len);
 typedef void		(*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*);
 #endif
 
@@ -520,45 +520,45 @@
 };
 
 #define PerlEnv_putenv(str)					\
-	(*PL_Env->pPutenv)(PL_Env,(str))
+        (*PL_Env->pPutenv)(PL_Env,(str))
 #define PerlEnv_getenv(str)					\
-	(*PL_Env->pGetenv)(PL_Env,(str))
+        (*PL_Env->pGetenv)(PL_Env,(str))
 #define PerlEnv_getenv_len(str,l)				\
-	(*PL_Env->pGetenv_len)(PL_Env,(str), (l))
+        (*PL_Env->pGetenv_len)(PL_Env,(str), (l))
 #define PerlEnv_clearenv()					\
-	(*PL_Env->pClearenv)(PL_Env)
+        (*PL_Env->pClearenv)(PL_Env)
 #define PerlEnv_get_childenv()					\
-	(*PL_Env->pGetChildenv)(PL_Env)
+        (*PL_Env->pGetChildenv)(PL_Env)
 #define PerlEnv_free_childenv(e)				\
-	(*PL_Env->pFreeChildenv)(PL_Env, (e))
+        (*PL_Env->pFreeChildenv)(PL_Env, (e))
 #define PerlEnv_get_childdir()					\
-	(*PL_Env->pGetChilddir)(PL_Env)
+        (*PL_Env->pGetChilddir)(PL_Env)
 #define PerlEnv_free_childdir(d)				\
-	(*PL_Env->pFreeChilddir)(PL_Env, (d))
+        (*PL_Env->pFreeChilddir)(PL_Env, (d))
 #ifdef HAS_ENVGETENV
 #  define PerlEnv_ENVgetenv(str)				\
-	(*PL_Env->pENVGetenv)(PL_Env,(str))
+        (*PL_Env->pENVGetenv)(PL_Env,(str))
 #  define PerlEnv_ENVgetenv_len(str,l)				\
-	(*PL_Env->pENVGetenv_len)(PL_Env,(str), (l))
+        (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l))
 #else
 #  define PerlEnv_ENVgetenv(str)				\
-	PerlEnv_getenv((str))
+        PerlEnv_getenv((str))
 #  define PerlEnv_ENVgetenv_len(str,l)				\
-	PerlEnv_getenv_len((str),(l))
+        PerlEnv_getenv_len((str),(l))
 #endif
 #define PerlEnv_uname(name)					\
-	(*PL_Env->pEnvUname)(PL_Env,(name))
+        (*PL_Env->pEnvUname)(PL_Env,(name))
 #ifdef WIN32
 #define PerlEnv_os_id()						\
-	(*PL_Env->pEnvOsID)(PL_Env)
+        (*PL_Env->pEnvOsID)(PL_Env)
 #define PerlEnv_lib_path(str, lenp)				\
-	(*PL_Env->pLibPath)(PL_Env,WIN32_NO_REGISTRY_M_(str)(lenp))
+        (*PL_Env->pLibPath)(PL_Env,WIN32_NO_REGISTRY_M_(str)(lenp))
 #define PerlEnv_sitelib_path(str, lenp)				\
-	(*PL_Env->pSiteLibPath)(PL_Env,(str),(lenp))
+        (*PL_Env->pSiteLibPath)(PL_Env,(str),(lenp))
 #define PerlEnv_vendorlib_path(str, lenp)			\
-	(*PL_Env->pVendorLibPath)(PL_Env,(str),(lenp))
+        (*PL_Env->pVendorLibPath)(PL_Env,(str),(lenp))
 #define PerlEnv_get_child_IO(ptr)				\
-	(*PL_Env->pGetChildIO)(PL_Env, ptr)
+        (*PL_Env->pGetChildIO)(PL_Env, ptr)
 #endif
 
 #else	/* below is ! PERL_IMPLICIT_SYS */
@@ -620,7 +620,7 @@
 typedef int		(*LPLIOAccess)(struct IPerlLIO*, const char*, int);
 typedef int		(*LPLIOChmod)(struct IPerlLIO*, const char*, int);
 typedef int		(*LPLIOChown)(struct IPerlLIO*, const char*, uid_t,
-			    gid_t);
+                            gid_t);
 typedef int		(*LPLIOChsize)(struct IPerlLIO*, int, Off_t);
 typedef int		(*LPLIOClose)(struct IPerlLIO*, int);
 typedef int		(*LPLIODup)(struct IPerlLIO*, int);
@@ -628,19 +628,19 @@
 typedef int		(*LPLIOFlock)(struct IPerlLIO*, int, int);
 typedef int		(*LPLIOFileStat)(struct IPerlLIO*, int, Stat_t*);
 typedef int		(*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int,
-			    char*);
+                            char*);
 typedef int		(*LPLIOIsatty)(struct IPerlLIO*, int);
 typedef int		(*LPLIOLink)(struct IPerlLIO*, const char*,
-				     const char *);
+                                     const char *);
 typedef Off_t		(*LPLIOLseek)(struct IPerlLIO*, int, Off_t, int);
 typedef int		(*LPLIOLstat)(struct IPerlLIO*, const char*,
-			    Stat_t*);
+                            Stat_t*);
 typedef char*		(*LPLIOMktemp)(struct IPerlLIO*, char*);
 typedef int		(*LPLIOOpen)(struct IPerlLIO*, const char*, int);	
 typedef int		(*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int);	
 typedef int		(*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int);
 typedef int		(*LPLIORename)(struct IPerlLIO*, const char*,
-			    const char*);
+                            const char*);
 #ifdef NETWARE
 typedef int		(*LPLIOSetmode)(struct IPerlLIO*, FILE*, int);
 #else
@@ -647,13 +647,17 @@
 typedef int		(*LPLIOSetmode)(struct IPerlLIO*, int, int);
 #endif	/* NETWARE */
 typedef int		(*LPLIONameStat)(struct IPerlLIO*, const char*,
-			    Stat_t*);
+                            Stat_t*);
 typedef char*		(*LPLIOTmpnam)(struct IPerlLIO*, char*);
 typedef int		(*LPLIOUmask)(struct IPerlLIO*, int);
 typedef int		(*LPLIOUnlink)(struct IPerlLIO*, const char*);
 typedef int		(*LPLIOUtime)(struct IPerlLIO*, const char*, struct utimbuf*);
 typedef int		(*LPLIOWrite)(struct IPerlLIO*, int, const void*,
-			    unsigned int);
+                            unsigned int);
+typedef int		(*LPLIOSymLink)(struct IPerlLIO*, const char*,
+                                     const char *);
+typedef int		(*LPLIOReadLink)(struct IPerlLIO*, const char*,
+                                         char *, size_t);
 
 struct IPerlLIO
 {
@@ -683,6 +687,8 @@
     LPLIOUnlink		pUnlink;
     LPLIOUtime		pUtime;
     LPLIOWrite		pWrite;
+    LPLIOSymLink        pSymLink;
+    LPLIOReadLink       pReadLink;
 };
 
 struct IPerlLIOInfo
@@ -692,57 +698,61 @@
 };
 
 #define PerlLIO_access(file, mode)					\
-	(*PL_LIO->pAccess)(PL_LIO, (file), (mode))
+        (*PL_LIO->pAccess)(PL_LIO, (file), (mode))
 #define PerlLIO_chmod(file, mode)					\
-	(*PL_LIO->pChmod)(PL_LIO, (file), (mode))
+        (*PL_LIO->pChmod)(PL_LIO, (file), (mode))
 #define PerlLIO_chown(file, owner, group)				\
-	(*PL_LIO->pChown)(PL_LIO, (file), (owner), (group))
+        (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group))
 #define PerlLIO_chsize(fd, size)					\
-	(*PL_LIO->pChsize)(PL_LIO, (fd), (size))
+        (*PL_LIO->pChsize)(PL_LIO, (fd), (size))
 #define PerlLIO_close(fd)						\
-	(*PL_LIO->pClose)(PL_LIO, (fd))
+        (*PL_LIO->pClose)(PL_LIO, (fd))
 #define PerlLIO_dup(fd)							\
-	(*PL_LIO->pDup)(PL_LIO, (fd))
+        (*PL_LIO->pDup)(PL_LIO, (fd))
 #define PerlLIO_dup2(fd1, fd2)						\
-	(*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2))
+        (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2))
 #define PerlLIO_flock(fd, op)						\
-	(*PL_LIO->pFlock)(PL_LIO, (fd), (op))
+        (*PL_LIO->pFlock)(PL_LIO, (fd), (op))
 #define PerlLIO_fstat(fd, buf)						\
-	(*PL_LIO->pFileStat)(PL_LIO, (fd), (buf))
+        (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf))
 #define PerlLIO_ioctl(fd, u, buf)					\
-	(*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf))
+        (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf))
 #define PerlLIO_isatty(fd)						\
-	(*PL_LIO->pIsatty)(PL_LIO, (fd))
+        (*PL_LIO->pIsatty)(PL_LIO, (fd))
 #define PerlLIO_link(oldname, newname)					\
-	(*PL_LIO->pLink)(PL_LIO, (oldname), (newname))
+        (*PL_LIO->pLink)(PL_LIO, (oldname), (newname))
+#define PerlLIO_symlink(oldname, newname)				\
+        (*PL_LIO->pSymLink)(PL_LIO, (oldname), (newname))
+#define PerlLIO_readlink(path, buf, bufsiz)				\
+        (*PL_LIO->pReadLink)(PL_LIO, (path), (buf), (bufsiz))
 #define PerlLIO_lseek(fd, offset, mode)					\
-	(*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode))
+        (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode))
 #define PerlLIO_lstat(name, buf)					\
-	(*PL_LIO->pLstat)(PL_LIO, (name), (buf))
+        (*PL_LIO->pLstat)(PL_LIO, (name), (buf))
 #define PerlLIO_mktemp(file)						\
-	(*PL_LIO->pMktemp)(PL_LIO, (file))
+        (*PL_LIO->pMktemp)(PL_LIO, (file))
 #define PerlLIO_open(file, flag)					\
-	(*PL_LIO->pOpen)(PL_LIO, (file), (flag))
+        (*PL_LIO->pOpen)(PL_LIO, (file), (flag))
 #define PerlLIO_open3(file, flag, perm)					\
-	(*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm))
+        (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm))
 #define PerlLIO_read(fd, buf, count)					\
-	(*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count))
+        (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count))
 #define PerlLIO_rename(oname, newname)					\
-	(*PL_LIO->pRename)(PL_LIO, (oname), (newname))
+        (*PL_LIO->pRename)(PL_LIO, (oname), (newname))
 #define PerlLIO_setmode(fd, mode)					\
-	(*PL_LIO->pSetmode)(PL_LIO, (fd), (mode))
+        (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode))
 #define PerlLIO_stat(name, buf)						\
-	(*PL_LIO->pNameStat)(PL_LIO, (name), (buf))
+        (*PL_LIO->pNameStat)(PL_LIO, (name), (buf))
 #define PerlLIO_tmpnam(str)						\
-	(*PL_LIO->pTmpnam)(PL_LIO, (str))
+        (*PL_LIO->pTmpnam)(PL_LIO, (str))
 #define PerlLIO_umask(mode)						\
-	(*PL_LIO->pUmask)(PL_LIO, (mode))
+        (*PL_LIO->pUmask)(PL_LIO, (mode))
 #define PerlLIO_unlink(file)						\
-	(*PL_LIO->pUnlink)(PL_LIO, (file))
+        (*PL_LIO->pUnlink)(PL_LIO, (file))
 #define PerlLIO_utime(file, time)					\
-	(*PL_LIO->pUtime)(PL_LIO, (file), (time))
+        (*PL_LIO->pUtime)(PL_LIO, (file), (time))
 #define PerlLIO_write(fd, buf, count)					\
-	(*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count))
+        (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count))
 
 #else	/* PERL_IMPLICIT_SYS */
 
@@ -764,6 +774,8 @@
 #define PerlLIO_ioctl(fd, u, buf)	ioctl((fd), (u), (buf))
 #define PerlLIO_isatty(fd)		isatty((fd))
 #define PerlLIO_link(oldname, newname)	link((oldname), (newname))
+#define PerlLIO_symlink(oldname, newname)	symlink((oldname), (newname))
+#define PerlLIO_readlink(path, buf, bufsiz)	readlink((path), (buf), (bufsiz))
 #define PerlLIO_lseek(fd, offset, mode)	lseek((fd), (offset), (mode))
 #define PerlLIO_stat(name, buf)		Stat((name), (buf))
 #ifdef HAS_LSTAT
@@ -821,72 +833,72 @@
 
 /* Interpreter specific memory macros */
 #define PerlMem_malloc(size)				    \
-	(*PL_Mem->pMalloc)(PL_Mem, (size))
+        (*PL_Mem->pMalloc)(PL_Mem, (size))
 #define PerlMem_realloc(buf, size)			    \
-	(*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
+        (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
 #define PerlMem_free(buf)				    \
-	(*PL_Mem->pFree)(PL_Mem, (buf))
+        (*PL_Mem->pFree)(PL_Mem, (buf))
 #define PerlMem_calloc(num, size)			    \
-	(*PL_Mem->pCalloc)(PL_Mem, (num), (size))
+        (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
 #define PerlMem_get_lock()				    \
-	(*PL_Mem->pGetLock)(PL_Mem)
+        (*PL_Mem->pGetLock)(PL_Mem)
 #define PerlMem_free_lock()				    \
-	(*PL_Mem->pFreeLock)(PL_Mem)
+        (*PL_Mem->pFreeLock)(PL_Mem)
 #define PerlMem_is_locked()				    \
-	(*PL_Mem->pIsLocked)(PL_Mem)
+        (*PL_Mem->pIsLocked)(PL_Mem)
 
 /* Shared memory macros */
 #ifdef NETWARE
 
 #define PerlMemShared_malloc(size)			    \
-	(*PL_Mem->pMalloc)(PL_Mem, (size))
+        (*PL_Mem->pMalloc)(PL_Mem, (size))
 #define PerlMemShared_realloc(buf, size)		    \
-	(*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
+        (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
 #define PerlMemShared_free(buf)				    \
-	(*PL_Mem->pFree)(PL_Mem, (buf))
+        (*PL_Mem->pFree)(PL_Mem, (buf))
 #define PerlMemShared_calloc(num, size)			    \
-	(*PL_Mem->pCalloc)(PL_Mem, (num), (size))
+        (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
 #define PerlMemShared_get_lock()			    \
-	(*PL_Mem->pGetLock)(PL_Mem)
+        (*PL_Mem->pGetLock)(PL_Mem)
 #define PerlMemShared_free_lock()			    \
-	(*PL_Mem->pFreeLock)(PL_Mem)
+        (*PL_Mem->pFreeLock)(PL_Mem)
 #define PerlMemShared_is_locked()			    \
-	(*PL_Mem->pIsLocked)(PL_Mem)
+        (*PL_Mem->pIsLocked)(PL_Mem)
 
 #else
 
 #define PerlMemShared_malloc(size)			    \
-	(*PL_MemShared->pMalloc)(PL_MemShared, (size))
+        (*PL_MemShared->pMalloc)(PL_MemShared, (size))
 #define PerlMemShared_realloc(buf, size)		    \
-	(*PL_MemShared->pRealloc)(PL_MemShared, (buf), (size))
+        (*PL_MemShared->pRealloc)(PL_MemShared, (buf), (size))
 #define PerlMemShared_free(buf)				    \
-	(*PL_MemShared->pFree)(PL_MemShared, (buf))
+        (*PL_MemShared->pFree)(PL_MemShared, (buf))
 #define PerlMemShared_calloc(num, size)			    \
-	(*PL_MemShared->pCalloc)(PL_MemShared, (num), (size))
+        (*PL_MemShared->pCalloc)(PL_MemShared, (num), (size))
 #define PerlMemShared_get_lock()			    \
-	(*PL_MemShared->pGetLock)(PL_MemShared)
+        (*PL_MemShared->pGetLock)(PL_MemShared)
 #define PerlMemShared_free_lock()			    \
-	(*PL_MemShared->pFreeLock)(PL_MemShared)
+        (*PL_MemShared->pFreeLock)(PL_MemShared)
 #define PerlMemShared_is_locked()			    \
-	(*PL_MemShared->pIsLocked)(PL_MemShared)
+        (*PL_MemShared->pIsLocked)(PL_MemShared)
 
 #endif
 
 /* Parse tree memory macros */
 #define PerlMemParse_malloc(size)			    \
-	(*PL_MemParse->pMalloc)(PL_MemParse, (size))
+        (*PL_MemParse->pMalloc)(PL_MemParse, (size))
 #define PerlMemParse_realloc(buf, size)			    \
-	(*PL_MemParse->pRealloc)(PL_MemParse, (buf), (size))
+        (*PL_MemParse->pRealloc)(PL_MemParse, (buf), (size))
 #define PerlMemParse_free(buf)				    \
-	(*PL_MemParse->pFree)(PL_MemParse, (buf))
+        (*PL_MemParse->pFree)(PL_MemParse, (buf))
 #define PerlMemParse_calloc(num, size)			    \
-	(*PL_MemParse->pCalloc)(PL_MemParse, (num), (size))
+        (*PL_MemParse->pCalloc)(PL_MemParse, (num), (size))
 #define PerlMemParse_get_lock()				    \
-	(*PL_MemParse->pGetLock)(PL_MemParse)
+        (*PL_MemParse->pGetLock)(PL_MemParse)
 #define PerlMemParse_free_lock()			    \
-	(*PL_MemParse->pFreeLock)(PL_MemParse)
+        (*PL_MemParse->pFreeLock)(PL_MemParse)
 #define PerlMemParse_is_locked()			    \
-	(*PL_MemParse->pIsLocked)(PL_MemParse)
+        (*PL_MemParse->pIsLocked)(PL_MemParse)
 
 
 #else	/* PERL_IMPLICIT_SYS */
@@ -936,18 +948,18 @@
 struct IPerlProcInfo;
 typedef void		(*LPProcAbort)(struct IPerlProc*);
 typedef char*		(*LPProcCrypt)(struct IPerlProc*, const char*,
-			    const char*);
+                            const char*);
 typedef void		(*LPProcExit)(struct IPerlProc*, int)
-			    __attribute__noreturn__;
+                            __attribute__noreturn__;
 typedef void		(*LPProc_Exit)(struct IPerlProc*, int)
-			    __attribute__noreturn__;
+                            __attribute__noreturn__;
 typedef int		(*LPProcExecl)(struct IPerlProc*, const char*,
-			    const char*, const char*, const char*,
-			    const char*);
+                            const char*, const char*, const char*,
+                            const char*);
 typedef int		(*LPProcExecv)(struct IPerlProc*, const char*,
-			    const char*const*);
+                            const char*const*);
 typedef int		(*LPProcExecvp)(struct IPerlProc*, const char*,
-			    const char*const*);
+                            const char*const*);
 typedef Uid_t		(*LPProcGetuid)(struct IPerlProc*);
 typedef Uid_t		(*LPProcGeteuid)(struct IPerlProc*);
 typedef Gid_t		(*LPProcGetgid)(struct IPerlProc*);
@@ -957,9 +969,9 @@
 typedef int		(*LPProcKillpg)(struct IPerlProc*, int, int);
 typedef int		(*LPProcPauseProc)(struct IPerlProc*);
 typedef PerlIO*		(*LPProcPopen)(struct IPerlProc*, const char*,
-			    const char*);
+                            const char*);
 typedef PerlIO*		(*LPProcPopenList)(struct IPerlProc*, const char*,
-			    IV narg, SV **args);
+                            IV narg, SV **args);
 typedef int		(*LPProcPclose)(struct IPerlProc*, PerlIO*);
 typedef int		(*LPProcPipe)(struct IPerlProc*, int*);
 typedef int		(*LPProcSetuid)(struct IPerlProc*, uid_t);
@@ -974,13 +986,13 @@
 #ifdef WIN32
 typedef void*		(*LPProcDynaLoader)(struct IPerlProc*, const char*);
 typedef void		(*LPProcGetOSError)(struct IPerlProc*,
-			    SV* sv, DWORD dwErr);
+                            SV* sv, DWORD dwErr);
 typedef int		(*LPProcSpawnvp)(struct IPerlProc*, int, const char*,
-			    const char*const*);
+                            const char*const*);
 #endif
 typedef int		(*LPProcLastHost)(struct IPerlProc*);
 typedef int		(*LPProcGetTimeOfDay)(struct IPerlProc*,
-					      struct timeval*, void*);
+                                              struct timeval*, void*);
 
 struct IPerlProc
 {
@@ -1028,76 +1040,76 @@
 };
 
 #define PerlProc_abort()						\
-	(*PL_Proc->pAbort)(PL_Proc)
+        (*PL_Proc->pAbort)(PL_Proc)
 #define PerlProc_crypt(c,s)						\
-	(*PL_Proc->pCrypt)(PL_Proc, (c), (s))
+        (*PL_Proc->pCrypt)(PL_Proc, (c), (s))
 #define PerlProc_exit(s)						\
-	(*PL_Proc->pExit)(PL_Proc, (s))
+        (*PL_Proc->pExit)(PL_Proc, (s))
 #define PerlProc__exit(s)						\
-	(*PL_Proc->p_Exit)(PL_Proc, (s))
+        (*PL_Proc->p_Exit)(PL_Proc, (s))
 #define PerlProc_execl(c, w, x, y, z)					\
-	(*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z))
+        (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z))
 #define PerlProc_execv(c, a)						\
-	(*PL_Proc->pExecv)(PL_Proc, (c), (a))
+        (*PL_Proc->pExecv)(PL_Proc, (c), (a))
 #define PerlProc_execvp(c, a)						\
-	(*PL_Proc->pExecvp)(PL_Proc, (c), (a))
+        (*PL_Proc->pExecvp)(PL_Proc, (c), (a))
 #define PerlProc_getuid()						\
-	(*PL_Proc->pGetuid)(PL_Proc)
+        (*PL_Proc->pGetuid)(PL_Proc)
 #define PerlProc_geteuid()						\
-	(*PL_Proc->pGeteuid)(PL_Proc)
+        (*PL_Proc->pGeteuid)(PL_Proc)
 #define PerlProc_getgid()						\
-	(*PL_Proc->pGetgid)(PL_Proc)
+        (*PL_Proc->pGetgid)(PL_Proc)
 #define PerlProc_getegid()						\
-	(*PL_Proc->pGetegid)(PL_Proc)
+        (*PL_Proc->pGetegid)(PL_Proc)
 #define PerlProc_getlogin()						\
-	(*PL_Proc->pGetlogin)(PL_Proc)
+        (*PL_Proc->pGetlogin)(PL_Proc)
 #define PerlProc_kill(i, a)						\
-	(*PL_Proc->pKill)(PL_Proc, (i), (a))
+        (*PL_Proc->pKill)(PL_Proc, (i), (a))
 #define PerlProc_killpg(i, a)						\
-	(*PL_Proc->pKillpg)(PL_Proc, (i), (a))
+        (*PL_Proc->pKillpg)(PL_Proc, (i), (a))
 #define PerlProc_pause()						\
-	(*PL_Proc->pPauseProc)(PL_Proc)
+        (*PL_Proc->pPauseProc)(PL_Proc)
 #define PerlProc_popen(c, m)						\
-	(*PL_Proc->pPopen)(PL_Proc, (c), (m))
+        (*PL_Proc->pPopen)(PL_Proc, (c), (m))
 #define PerlProc_popen_list(m, n, a)					\
-	(*PL_Proc->pPopenList)(PL_Proc, (m), (n), (a))
+        (*PL_Proc->pPopenList)(PL_Proc, (m), (n), (a))
 #define PerlProc_pclose(f)						\
-	(*PL_Proc->pPclose)(PL_Proc, (f))
+        (*PL_Proc->pPclose)(PL_Proc, (f))
 #define PerlProc_pipe(fd)						\
-	(*PL_Proc->pPipe)(PL_Proc, (fd))
+        (*PL_Proc->pPipe)(PL_Proc, (fd))
 #define PerlProc_setuid(u)						\
-	(*PL_Proc->pSetuid)(PL_Proc, (u))
+        (*PL_Proc->pSetuid)(PL_Proc, (u))
 #define PerlProc_setgid(g)						\
-	(*PL_Proc->pSetgid)(PL_Proc, (g))
+        (*PL_Proc->pSetgid)(PL_Proc, (g))
 #define PerlProc_sleep(t)						\
-	(*PL_Proc->pSleep)(PL_Proc, (t))
+        (*PL_Proc->pSleep)(PL_Proc, (t))
 #define PerlProc_times(t)						\
-	(*PL_Proc->pTimes)(PL_Proc, (t))
+        (*PL_Proc->pTimes)(PL_Proc, (t))
 #define PerlProc_wait(t)						\
-	(*PL_Proc->pWait)(PL_Proc, (t))
+        (*PL_Proc->pWait)(PL_Proc, (t))
 #define PerlProc_waitpid(p,s,f)						\
-	(*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f))
+        (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f))
 #define PerlProc_signal(n, h)						\
-	(*PL_Proc->pSignal)(PL_Proc, (n), (h))
+        (*PL_Proc->pSignal)(PL_Proc, (n), (h))
 #define PerlProc_fork()							\
-	(*PL_Proc->pFork)(PL_Proc)
+        (*PL_Proc->pFork)(PL_Proc)
 #define PerlProc_getpid()						\
-	(*PL_Proc->pGetpid)(PL_Proc)
+        (*PL_Proc->pGetpid)(PL_Proc)
 #define PerlProc_setjmp(b, n) Sigsetjmp((b), (n))
 #define PerlProc_longjmp(b, n) Siglongjmp((b), (n))
 
 #ifdef WIN32
 #define PerlProc_DynaLoad(f)						\
-	(*PL_Proc->pDynaLoader)(PL_Proc, (f))
+        (*PL_Proc->pDynaLoader)(PL_Proc, (f))
 #define PerlProc_GetOSError(s,e)					\
-	(*PL_Proc->pGetOSError)(PL_Proc, (s), (e))
+        (*PL_Proc->pGetOSError)(PL_Proc, (s), (e))
 #define PerlProc_spawnvp(m, c, a)					\
-	(*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a))
+        (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a))
 #endif
 #define PerlProc_lasthost()						\
-	(*PL_Proc->pLastHost)(PL_Proc)
+        (*PL_Proc->pLastHost)(PL_Proc)
 #define PerlProc_gettimeofday(t,z)					\
-	(*PL_Proc->pGetTimeOfDay)(PL_Proc,(t),(z))
+        (*PL_Proc->pGetTimeOfDay)(PL_Proc,(t),(z))
 
 #else	/* PERL_IMPLICIT_SYS */
 
@@ -1106,7 +1118,7 @@
 #define PerlProc_exit(s)	exit((s))
 #define PerlProc__exit(s)	_exit((s))
 #define PerlProc_execl(c,w,x,y,z)					\
-	execl((c), (w), (x), (y), (z))
+        execl((c), (w), (x), (y), (z))
 #define PerlProc_execv(c, a)	execv((c), (a))
 #define PerlProc_execvp(c, a)	execvp((c), (a))
 #define PerlProc_getuid()	getuid()
@@ -1136,11 +1148,11 @@
 
 #ifdef WIN32
 #define PerlProc_DynaLoad(f)						\
-	win32_dynaload((f))
+        win32_dynaload((f))
 #define PerlProc_GetOSError(s,e)					\
-	win32_str_os_error((s), (e))
+        win32_str_os_error((s), (e))
 #define PerlProc_spawnvp(m, c, a)					\
-	win32_spawnvp((m), (c), (a))
+        win32_spawnvp((m), (c), (a))
 #undef PerlProc_signal
 #define PerlProc_signal(n, h) win32_signal((n), (h))
 #endif
@@ -1160,11 +1172,11 @@
 typedef u_long		(*LPNtohl)(struct IPerlSock*, u_long);
 typedef u_short		(*LPNtohs)(struct IPerlSock*, u_short);
 typedef SOCKET		(*LPAccept)(struct IPerlSock*, SOCKET,
-			    struct sockaddr*, int*);
+                            struct sockaddr*, int*);
 typedef int		(*LPBind)(struct IPerlSock*, SOCKET,
-			    const struct sockaddr*, int);
+                            const struct sockaddr*, int);
 typedef int		(*LPConnect)(struct IPerlSock*, SOCKET,
-			    const struct sockaddr*, int);
+                            const struct sockaddr*, int);
 typedef void		(*LPEndhostent)(struct IPerlSock*);
 typedef void		(*LPEndnetent)(struct IPerlSock*);
 typedef void		(*LPEndprotoent)(struct IPerlSock*);
@@ -1171,9 +1183,9 @@
 typedef void		(*LPEndservent)(struct IPerlSock*);
 typedef int		(*LPGethostname)(struct IPerlSock*, char*, int);
 typedef int		(*LPGetpeername)(struct IPerlSock*, SOCKET,
-			    struct sockaddr*, int*);
+                            struct sockaddr*, int*);
 typedef struct hostent*	(*LPGethostbyaddr)(struct IPerlSock*, const char*,
-			    int, int);
+                            int, int);
 typedef struct hostent*	(*LPGethostbyname)(struct IPerlSock*, const char*);
 typedef struct hostent*	(*LPGethostent)(struct IPerlSock*);
 typedef struct netent*	(*LPGetnetbyaddr)(struct IPerlSock*, long, int);
@@ -1183,36 +1195,36 @@
 typedef struct protoent*(*LPGetprotobynumber)(struct IPerlSock*, int);
 typedef struct protoent*(*LPGetprotoent)(struct IPerlSock*);
 typedef struct servent*	(*LPGetservbyname)(struct IPerlSock*, const char*,
-			    const char*);
+                            const char*);
 typedef struct servent*	(*LPGetservbyport)(struct IPerlSock*, int,
-			    const char*);
+                            const char*);
 typedef struct servent*	(*LPGetservent)(struct IPerlSock*);
 typedef int		(*LPGetsockname)(struct IPerlSock*, SOCKET,
-			    struct sockaddr*, int*);
+                            struct sockaddr*, int*);
 typedef int		(*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int,
-			    char*, int*);
+                            char*, int*);
 typedef unsigned long	(*LPInetAddr)(struct IPerlSock*, const char*);
 typedef char*		(*LPInetNtoa)(struct IPerlSock*, struct in_addr);
 typedef int		(*LPListen)(struct IPerlSock*, SOCKET, int);
 typedef int		(*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int);
 typedef int		(*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int,
-			    int, struct sockaddr*, int*);
+                            int, struct sockaddr*, int*);
 typedef int		(*LPSelect)(struct IPerlSock*, int, char*, char*,
-			    char*, const struct timeval*);
+                            char*, const struct timeval*);
 typedef int		(*LPSend)(struct IPerlSock*, SOCKET, const char*, int,
-			    int);
+                            int);
 typedef int		(*LPSendto)(struct IPerlSock*, SOCKET, const char*,
-			    int, int, const struct sockaddr*, int);
+                            int, int, const struct sockaddr*, int);
 typedef void		(*LPSethostent)(struct IPerlSock*, int);
 typedef void		(*LPSetnetent)(struct IPerlSock*, int);
 typedef void		(*LPSetprotoent)(struct IPerlSock*, int);
 typedef void		(*LPSetservent)(struct IPerlSock*, int);
 typedef int		(*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int,
-			    const char*, int);
+                            const char*, int);
 typedef int		(*LPShutdown)(struct IPerlSock*, SOCKET, int);
 typedef SOCKET		(*LPSocket)(struct IPerlSock*, int, int, int);
 typedef int		(*LPSocketpair)(struct IPerlSock*, int, int, int,
-			    int*);
+                            int*);
 #ifdef WIN32
 typedef int		(*LPClosesocket)(struct IPerlSock*, SOCKET s);
 #endif
@@ -1274,98 +1286,98 @@
 };
 
 #define PerlSock_htonl(x)						\
-	(*PL_Sock->pHtonl)(PL_Sock, x)
+        (*PL_Sock->pHtonl)(PL_Sock, x)
 #define PerlSock_htons(x)						\
-	(*PL_Sock->pHtons)(PL_Sock, x)
+        (*PL_Sock->pHtons)(PL_Sock, x)
 #define PerlSock_ntohl(x)						\
-	(*PL_Sock->pNtohl)(PL_Sock, x)
+        (*PL_Sock->pNtohl)(PL_Sock, x)
 #define PerlSock_ntohs(x)						\
-	(*PL_Sock->pNtohs)(PL_Sock, x)
+        (*PL_Sock->pNtohs)(PL_Sock, x)
 #define PerlSock_accept(s, a, l)					\
-	(*PL_Sock->pAccept)(PL_Sock, s, a, l)
+        (*PL_Sock->pAccept)(PL_Sock, s, a, l)
 #define PerlSock_bind(s, n, l)						\
-	(*PL_Sock->pBind)(PL_Sock, s, n, l)
+        (*PL_Sock->pBind)(PL_Sock, s, n, l)
 #define PerlSock_connect(s, n, l)					\
-	(*PL_Sock->pConnect)(PL_Sock, s, n, l)
+        (*PL_Sock->pConnect)(PL_Sock, s, n, l)
 #define PerlSock_endhostent()						\
-	(*PL_Sock->pEndhostent)(PL_Sock)
+        (*PL_Sock->pEndhostent)(PL_Sock)
 #define PerlSock_endnetent()						\
-	(*PL_Sock->pEndnetent)(PL_Sock)
+        (*PL_Sock->pEndnetent)(PL_Sock)
 #define PerlSock_endprotoent()						\
-	(*PL_Sock->pEndprotoent)(PL_Sock)
+        (*PL_Sock->pEndprotoent)(PL_Sock)
 #define PerlSock_endservent()						\
-	(*PL_Sock->pEndservent)(PL_Sock)
+        (*PL_Sock->pEndservent)(PL_Sock)
 #define PerlSock_gethostbyaddr(a, l, t)					\
-	(*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t)
+        (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t)
 #define PerlSock_gethostbyname(n)					\
-	(*PL_Sock->pGethostbyname)(PL_Sock, n)
+        (*PL_Sock->pGethostbyname)(PL_Sock, n)
 #define PerlSock_gethostent()						\
-	(*PL_Sock->pGethostent)(PL_Sock)
+        (*PL_Sock->pGethostent)(PL_Sock)
 #define PerlSock_gethostname(n, l)					\
-	(*PL_Sock->pGethostname)(PL_Sock, n, l)
+        (*PL_Sock->pGethostname)(PL_Sock, n, l)
 #define PerlSock_getnetbyaddr(n, t)					\
-	(*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t)
+        (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t)
 #define PerlSock_getnetbyname(c)					\
-	(*PL_Sock->pGetnetbyname)(PL_Sock, c)
+        (*PL_Sock->pGetnetbyname)(PL_Sock, c)
 #define PerlSock_getnetent()						\
-	(*PL_Sock->pGetnetent)(PL_Sock)
+        (*PL_Sock->pGetnetent)(PL_Sock)
 #define PerlSock_getpeername(s, n, l)					\
-	(*PL_Sock->pGetpeername)(PL_Sock, s, n, l)
+        (*PL_Sock->pGetpeername)(PL_Sock, s, n, l)
 #define PerlSock_getprotobyname(n)					\
-	(*PL_Sock->pGetprotobyname)(PL_Sock, n)
+        (*PL_Sock->pGetprotobyname)(PL_Sock, n)
 #define PerlSock_getprotobynumber(n)					\
-	(*PL_Sock->pGetprotobynumber)(PL_Sock, n)
+        (*PL_Sock->pGetprotobynumber)(PL_Sock, n)
 #define PerlSock_getprotoent()						\
-	(*PL_Sock->pGetprotoent)(PL_Sock)
+        (*PL_Sock->pGetprotoent)(PL_Sock)
 #define PerlSock_getservbyname(n, p)					\
-	(*PL_Sock->pGetservbyname)(PL_Sock, n, p)
+        (*PL_Sock->pGetservbyname)(PL_Sock, n, p)
 #define PerlSock_getservbyport(port, p)					\
-	(*PL_Sock->pGetservbyport)(PL_Sock, port, p)
+        (*PL_Sock->pGetservbyport)(PL_Sock, port, p)
 #define PerlSock_getservent()						\
-	(*PL_Sock->pGetservent)(PL_Sock)
+        (*PL_Sock->pGetservent)(PL_Sock)
 #define PerlSock_getsockname(s, n, l)					\
-	(*PL_Sock->pGetsockname)(PL_Sock, s, n, l)
+        (*PL_Sock->pGetsockname)(PL_Sock, s, n, l)
 #define PerlSock_getsockopt(s,l,n,v,i)					\
-	(*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i)
+        (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i)
 #define PerlSock_inet_addr(c)						\
-	(*PL_Sock->pInetAddr)(PL_Sock, c)
+        (*PL_Sock->pInetAddr)(PL_Sock, c)
 #define PerlSock_inet_ntoa(i)						\
-	(*PL_Sock->pInetNtoa)(PL_Sock, i)
+        (*PL_Sock->pInetNtoa)(PL_Sock, i)
 #define PerlSock_listen(s, b)						\
-	(*PL_Sock->pListen)(PL_Sock, s, b)
+        (*PL_Sock->pListen)(PL_Sock, s, b)
 #define PerlSock_recv(s, b, l, f)					\
-	(*PL_Sock->pRecv)(PL_Sock, s, b, l, f)
+        (*PL_Sock->pRecv)(PL_Sock, s, b, l, f)
 #define PerlSock_recvfrom(s,b,l,f,from,fromlen)				\
-	(*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen)
+        (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen)
 #define PerlSock_select(n, r, w, e, t)					\
-	(*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t)
+        (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t)
 #define PerlSock_send(s, b, l, f)					\
-	(*PL_Sock->pSend)(PL_Sock, s, b, l, f)
+        (*PL_Sock->pSend)(PL_Sock, s, b, l, f)
 #define PerlSock_sendto(s, b, l, f, t, tlen)				\
-	(*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen)
+        (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen)
 #define PerlSock_sethostent(f)						\
-	(*PL_Sock->pSethostent)(PL_Sock, f)
+        (*PL_Sock->pSethostent)(PL_Sock, f)
 #define PerlSock_setnetent(f)						\
-	(*PL_Sock->pSetnetent)(PL_Sock, f)
+        (*PL_Sock->pSetnetent)(PL_Sock, f)
 #define PerlSock_setprotoent(f)						\
-	(*PL_Sock->pSetprotoent)(PL_Sock, f)
+        (*PL_Sock->pSetprotoent)(PL_Sock, f)
 #define PerlSock_setservent(f)						\
-	(*PL_Sock->pSetservent)(PL_Sock, f)
+        (*PL_Sock->pSetservent)(PL_Sock, f)
 #define PerlSock_setsockopt(s, l, n, v, len)				\
-	(*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len)
+        (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len)
 #define PerlSock_shutdown(s, h)						\
-	(*PL_Sock->pShutdown)(PL_Sock, s, h)
+        (*PL_Sock->pShutdown)(PL_Sock, s, h)
 #define PerlSock_socket(a, t, p)					\
-	(*PL_Sock->pSocket)(PL_Sock, a, t, p)
+        (*PL_Sock->pSocket)(PL_Sock, a, t, p)
 #define PerlSock_socketpair(a, t, p, f)					\
-	(*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f)
+        (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f)
 
 #ifdef WIN32
 #define	PerlSock_closesocket(s)						\
-	(*PL_Sock->pClosesocket)(PL_Sock, s)
+        (*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)
@@ -1404,17 +1416,17 @@
 #define PerlSock_listen(s, b)		listen(s, b)
 #define PerlSock_recv(s, b, l, f)	recv(s, b, l, f)
 #define PerlSock_recvfrom(s, b, l, f, from, fromlen)			\
-	recvfrom(s, b, l, f, from, fromlen)
+        recvfrom(s, b, l, f, from, fromlen)
 #define PerlSock_select(n, r, w, e, t)	select(n, r, w, e, t)
 #define PerlSock_send(s, b, l, f)	send(s, b, l, f)
 #define PerlSock_sendto(s, b, l, f, t, tlen)				\
-	sendto(s, b, l, f, t, tlen)
+        sendto(s, b, l, f, t, tlen)
 #define PerlSock_sethostent(f)		sethostent(f)
 #define PerlSock_setnetent(f)		setnetent(f)
 #define PerlSock_setprotoent(f)		setprotoent(f)
 #define PerlSock_setservent(f)		setservent(f)
 #define PerlSock_setsockopt(s, l, n, v, len)				\
-	setsockopt(s, l, n, v, len)
+        setsockopt(s, l, n, v, len)
 #define PerlSock_shutdown(s, h)		shutdown(s, h)
 #define PerlSock_socket(a, t, p)	socket(a, t, p)
 #define PerlSock_socketpair(a, t, p, f)	socketpair(a, t, p, f)

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/keywords.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/keywords.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/keywords.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -37,239 +37,241 @@
 #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:
- * f77998a5bc995c1b42d3d080de227ef5f11638bcd329367431d8f193aef2d3cc regen/keywords.pl
+ * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl
  * ex: set ro: */

Deleted: trunk/Master/tlpkg/tlperl/lib/CORE/libperl532.a
===================================================================
(Binary files differ)

Added: trunk/Master/tlpkg/tlperl/lib/CORE/libperl534.a
===================================================================
(Binary files differ)

Index: trunk/Master/tlpkg/tlperl/lib/CORE/libperl534.a
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/libperl534.a	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/libperl534.a	2022-03-14 10:08:50 UTC (rev 62701)

Property changes on: trunk/Master/tlpkg/tlperl/lib/CORE/libperl534.a
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/x-archive
\ No newline at end of property
Modified: trunk/Master/tlpkg/tlperl/lib/CORE/metaconfig.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/metaconfig.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/metaconfig.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -14,4 +14,6 @@
  * they should be removed from here.
  *
  * HAS_WCRTOMB
+ * GETENV_PRESERVES_OTHER_THREAD
+ *
  */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/mg.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/mg.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/mg.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -12,10 +12,10 @@
     int		(*svt_get)	(pTHX_ SV *sv, MAGIC* mg);
     int		(*svt_set)	(pTHX_ SV *sv, MAGIC* mg);
     U32		(*svt_len)	(pTHX_ SV *sv, MAGIC* mg);
-    int		(*svt_clear)(pTHX_ SV *sv, MAGIC* mg);
+    int		(*svt_clear)    (pTHX_ SV *sv, MAGIC* mg);
     int		(*svt_free)	(pTHX_ SV *sv, MAGIC* mg);
     int		(*svt_copy)	(pTHX_ SV *sv, MAGIC* mg,
-    					SV *nsv, const char *name, I32 namlen);
+                                        SV *nsv, const char *name, I32 namlen);
     int		(*svt_dup)	(pTHX_ MAGIC *mg, CLONE_PARAMS *param);
     int		(*svt_local)(pTHX_ SV *nsv, MAGIC *mg);
 };
@@ -46,15 +46,24 @@
 #define MgTAINTEDDIR_on(mg)	(mg->mg_flags |= MGf_TAINTEDDIR)
 #define MgTAINTEDDIR_off(mg)	(mg->mg_flags &= ~MGf_TAINTEDDIR)
 
+/* Extracts the SV stored in mg, or NULL. */
+#define MgSV(mg)		(((int)((mg)->mg_len) == HEf_SVKEY) ?   \
+                                 MUTABLE_SV((mg)->mg_ptr) :	\
+                                 NULL)
+
+/* If mg contains an SV, these extract the PV stored in that SV;
+   otherwise, these extract the mg's mg_ptr/mg_len.
+   These do NOT account for the SV's UTF8 flag, so handle with care.
+*/
 #define MgPV(mg,lp)		((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ?   \
-				 SvPV(MUTABLE_SV((mg)->mg_ptr),lp) :	\
-				 (mg)->mg_ptr)
+                                 SvPV(MUTABLE_SV((mg)->mg_ptr),lp) :	\
+                                 (mg)->mg_ptr)
 #define MgPV_const(mg,lp)	((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \
-				 SvPV_const(MUTABLE_SV((mg)->mg_ptr),lp) :   \
-				 (const char*)(mg)->mg_ptr)
+                                 SvPV_const(MUTABLE_SV((mg)->mg_ptr),lp) :   \
+                                 (const char*)(mg)->mg_ptr)
 #define MgPV_nolen_const(mg)	(((((int)(mg)->mg_len)) == HEf_SVKEY) ?	\
-				 SvPV_nolen_const(MUTABLE_SV((mg)->mg_ptr)) : \
-				 (const char*)(mg)->mg_ptr)
+                                 SvPV_nolen_const(MUTABLE_SV((mg)->mg_ptr)) : \
+                                 (const char*)(mg)->mg_ptr)
 
 #define SvTIED_mg(sv,how) (SvRMAGICAL(sv) ? mg_find((sv),(how)) : NULL)
 #define SvTIED_obj(sv,mg) \
@@ -66,11 +75,11 @@
 # define MgBYTEPOS_set(mg,sv,pv,off) (			 \
     assert_((mg)->mg_type == PERL_MAGIC_regex_global)	  \
     SvPOK(sv) && (!SvGMAGICAL(sv) || sv_only_taint_gmagic(sv))  \
-	? (mg)->mg_len = (off), (mg)->mg_flags |= MGf_BYTES \
-	: ((mg)->mg_len = DO_UTF8(sv)			     \
-	    ? (SSize_t)utf8_length((U8 *)(pv), (U8 *)(pv)+(off)) \
-	    : (SSize_t)(off),					  \
-	   (mg)->mg_flags &= ~MGf_BYTES))
+        ? (mg)->mg_len = (off), (mg)->mg_flags |= MGf_BYTES \
+        : ((mg)->mg_len = DO_UTF8(sv)			     \
+            ? (SSize_t)utf8_length((U8 *)(pv), (U8 *)(pv)+(off)) \
+            : (SSize_t)(off),					  \
+           (mg)->mg_flags &= ~MGf_BYTES))
 #endif
 
 #define whichsig(pv) whichsig_pv(pv)

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/mg_data.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/mg_data.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/mg_data.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,3 +1,12 @@
+/* ..\mg_data.h:
+ * THIS FILE IS AUTO-GENERATED DURING THE BUILD by: ..\generate_uudmap.exe
+ *
+ * These values will populate PL_magic_data[]: this is an array of
+ * per-magic U8 values containing an index into PL_magic_vtables[]
+ * plus two flags:
+ *    PERL_MAGIC_READONLY_ACCEPTABLE
+ *    PERL_MAGIC_VALUE_MAGIC
+*/
 {
     /* sv '\0' Special scalar variable */
     want_vtbl_sv | PERL_MAGIC_READONLY_ACCEPTABLE,

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/mg_vtable.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/mg_vtable.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/mg_vtable.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -158,7 +158,7 @@
   { 0, 0, 0, 0, Perl_magic_killbackrefs, 0, 0, 0 },
   { 0, 0, 0, 0, 0, Perl_magic_copycallchecker, 0, 0 },
 #ifdef USE_LOCALE_COLLATE
-  { 0, Perl_magic_setcollxfrm, 0, 0, 0, 0, 0, 0 },
+  { 0, Perl_magic_setcollxfrm, 0, 0, Perl_magic_freecollxfrm, 0, 0, 0 },
 #else
   { 0, 0, 0, 0, 0, 0, 0, 0 },
 #endif
@@ -172,7 +172,7 @@
   { 0, Perl_magic_setisa, 0, Perl_magic_clearisa, 0, 0, 0, 0 },
   { 0, Perl_magic_setisa, 0, 0, 0, 0, 0, 0 },
   { 0, Perl_magic_setlvref, 0, 0, 0, 0, 0, 0 },
-  { 0, Perl_magic_setmglob, 0, 0, 0, 0, 0, 0 },
+  { 0, Perl_magic_setmglob, 0, 0, Perl_magic_freemglob, 0, 0, 0 },
   { Perl_magic_getnkeys, Perl_magic_setnkeys, 0, 0, 0, 0, 0, 0 },
   { 0, Perl_magic_setnonelem, 0, 0, 0, 0, 0, 0 },
   { 0, 0, 0, 0, Perl_magic_freeovrld, 0, 0, 0 },
@@ -190,7 +190,7 @@
   { Perl_magic_getsubstr, Perl_magic_setsubstr, 0, 0, 0, 0, 0, 0 },
   { Perl_magic_get, Perl_magic_set, 0, 0, 0, 0, 0, 0 },
   { Perl_magic_gettaint, Perl_magic_settaint, 0, 0, 0, 0, 0, 0 },
-  { 0, Perl_magic_setutf8, 0, 0, 0, 0, 0, 0 },
+  { 0, Perl_magic_setutf8, 0, 0, Perl_magic_freeutf8, 0, 0, 0 },
   { Perl_magic_getuvar, Perl_magic_setuvar, 0, 0, 0, 0, 0, 0 },
   { Perl_magic_getvec, Perl_magic_setvec, 0, 0, 0, 0, 0, 0 }
 };

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/op.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/op.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/op.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -65,12 +65,12 @@
 
 /* for efficiency, requires OPf_WANT_VOID == G_VOID etc */
 #define OP_GIMME(op,dfl) \
-	(((op)->op_flags & OPf_WANT) ? ((op)->op_flags & OPf_WANT) : dfl)
+        (((op)->op_flags & OPf_WANT) ? ((op)->op_flags & OPf_WANT) : dfl)
 
 #define OP_GIMME_REVERSE(flags)	((flags) & G_WANT)
 
 /*
-=head1 "Gimme" Values
+=for apidoc_section $callback
 
 =for apidoc Amn|U32|GIMME_V
 The XSUB-writer's equivalent to Perl's C<wantarray>.  Returns C<G_VOID>,
@@ -77,7 +77,7 @@
 C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
 respectively.  See L<perlcall> for a usage example.
 
-=for apidoc Amn|U32|GIMME
+=for apidoc AmnD|U32|GIMME
 A backward-compatible version of C<GIMME_V> which can only return
 C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
 Deprecated.  Use C<GIMME_V> instead.
@@ -95,9 +95,9 @@
 #define  OPf_WANT_LIST	 3	/*   Want list of any length */
 #define OPf_KIDS	4	/* There is a firstborn child. */
 #define OPf_PARENS	8	/* This operator was parenthesized. */
-				/*  (Or block needs explicit scope entry.) */
+                                /*  (Or block needs explicit scope entry.) */
 #define OPf_REF		16	/* Certified reference. */
-				/*  (Return container, not containee). */
+                                /*  (Return container, not containee). */
 #define OPf_MOD		32	/* Will modify (lvalue). */
 
 #define OPf_STACKED	64	/* Some arg is arriving on the stack. */
@@ -106,43 +106,43 @@
                                  */
 
 #define OPf_SPECIAL	128	/* Do something weird for this op: */
-				/*  On local LVAL, don't init local value. */
-				/*  On OP_SORT, subroutine is inlined. */
-				/*  On OP_NOT, inversion was implicit. */
-				/*  On OP_LEAVE, don't restore curpm, e.g.
+                                /*  On local LVAL, don't init local value. */
+                                /*  On OP_SORT, subroutine is inlined. */
+                                /*  On OP_NOT, inversion was implicit. */
+                                /*  On OP_LEAVE, don't restore curpm, e.g.
                                  *      /(...)/ while ...>;  */
-				/*  On truncate, we truncate filehandle */
-				/*  On control verbs, we saw no label */
-				/*  On flipflop, we saw ... instead of .. */
-				/*  On UNOPs, saw bare parens, e.g. eof(). */
-				/*  On OP_CHDIR, handle (or bare parens) */
-				/*  On OP_NULL, saw a "do". */
-				/*  On OP_EXISTS, treat av as av, not avhv.  */
-				/*  On OP_(ENTER|LEAVE)EVAL, don't clear $@ */
-				/*  On regcomp, "use re 'eval'" was in scope */
-				/*  On RV2[ACGHS]V, don't create GV--in
-				    defined()*/
-				/*  On OP_DBSTATE, indicates breakpoint
-				 *    (runtime property) */
-				/*  On OP_REQUIRE, was seen as CORE::require */
-				/*  On OP_(ENTER|LEAVE)WHEN, there's
-				    no condition */
-				/*  On OP_SMARTMATCH, an implicit smartmatch */
-				/*  On OP_ANONHASH and OP_ANONLIST, create a
-				    reference to the new anon hash or array */
-				/*  On OP_HELEM, OP_MULTIDEREF and OP_HSLICE,
+                                /*  On truncate, we truncate filehandle */
+                                /*  On control verbs, we saw no label */
+                                /*  On flipflop, we saw ... instead of .. */
+                                /*  On UNOPs, saw bare parens, e.g. eof(). */
+                                /*  On OP_CHDIR, handle (or bare parens) */
+                                /*  On OP_NULL, saw a "do". */
+                                /*  On OP_EXISTS, treat av as av, not avhv.  */
+                                /*  On OP_(ENTER|LEAVE)EVAL, don't clear $@ */
+                                /*  On regcomp, "use re 'eval'" was in scope */
+                                /*  On RV2[ACGHS]V, don't create GV--in
+                                    defined()*/
+                                /*  On OP_DBSTATE, indicates breakpoint
+                                 *    (runtime property) */
+                                /*  On OP_REQUIRE, was seen as CORE::require */
+                                /*  On OP_(ENTER|LEAVE)WHEN, there's
+                                    no condition */
+                                /*  On OP_SMARTMATCH, an implicit smartmatch */
+                                /*  On OP_ANONHASH and OP_ANONLIST, create a
+                                    reference to the new anon hash or array */
+                                /*  On OP_HELEM, OP_MULTIDEREF and OP_HSLICE,
                                     localization will be followed by assignment,
                                     so do not wipe the target if it is special
                                     (e.g. a glob or a magic SV) */
-				/*  On OP_MATCH, OP_SUBST & OP_TRANS, the
-				    operand of a logical or conditional
-				    that was optimised away, so it should
-				    not be bound via =~ */
-				/*  On OP_CONST, from a constant CV */
-				/*  On OP_GLOB, two meanings:
-				    - Before ck_glob, called as CORE::glob
-				    - After ck_glob, use Perl glob function
-			         */
+                                /*  On OP_MATCH, OP_SUBST & OP_TRANS, the
+                                    operand of a logical or conditional
+                                    that was optimised away, so it should
+                                    not be bound via =~ */
+                                /*  On OP_CONST, from a constant CV */
+                                /*  On OP_GLOB, two meanings:
+                                    - Before ck_glob, called as CORE::glob
+                                    - After ck_glob, use Perl glob function
+                                 */
                                 /*  On OP_PADRANGE, push @_ */
                                 /*  On OP_DUMP, has no label */
                                 /*  On OP_UNSTACK, in a C-style for loop */
@@ -158,11 +158,11 @@
 
 #if !defined(PERL_CORE) && !defined(PERL_EXT)
 #  define GIMME \
-	  (PL_op->op_flags & OPf_WANT					\
-	   ? ((PL_op->op_flags & OPf_WANT) == OPf_WANT_LIST		\
-	      ? G_ARRAY							\
-	      : G_SCALAR)						\
-	   : dowantarray())
+          (PL_op->op_flags & OPf_WANT					\
+           ? ((PL_op->op_flags & OPf_WANT) == OPf_WANT_LIST		\
+              ? G_ARRAY							\
+              : G_SCALAR)						\
+           : dowantarray())
 #endif
 
 
@@ -223,6 +223,12 @@
 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;
 };
 
@@ -259,16 +265,16 @@
 #endif
     U32         op_pmflags;
     union {
-	OP *	op_pmreplroot;		/* For OP_SUBST */
-	PADOFFSET op_pmtargetoff;	/* For OP_SPLIT lex ary or thr GV */
-	GV *	op_pmtargetgv;	        /* For OP_SPLIT non-threaded GV */
+        OP *	op_pmreplroot;		/* For OP_SUBST */
+        PADOFFSET op_pmtargetoff;	/* For OP_SPLIT lex ary or thr GV */
+        GV *	op_pmtargetgv;	        /* For OP_SPLIT non-threaded GV */
     }	op_pmreplrootu;
     union {
-	OP *	op_pmreplstart;	/* Only used in OP_SUBST */
+        OP *	op_pmreplstart;	/* Only used in OP_SUBST */
 #ifdef USE_ITHREADS
-	PADOFFSET op_pmstashoff; /* Only used in OP_MATCH, with PMf_ONCE set */
+        PADOFFSET op_pmstashoff; /* Only used in OP_MATCH, with PMf_ONCE set */
 #else
-	HV *	op_pmstash;
+        HV *	op_pmstash;
 #endif
     }		op_pmstashstartu;
     OP *	op_code_list;	/* list of (?{}) code blocks */
@@ -276,7 +282,7 @@
 
 #ifdef USE_ITHREADS
 #define PM_GETRE(o)	(SvTYPE(PL_regex_pad[(o)->op_pmoffset]) == SVt_REGEXP \
-		 	 ? (REGEXP*)(PL_regex_pad[(o)->op_pmoffset]) : NULL)
+                         ? (REGEXP*)(PL_regex_pad[(o)->op_pmoffset]) : NULL)
 /* The assignment is just to enforce type safety (or at least get a warning).
  */
 /* With first class regexps not via a reference one needs to assign
@@ -288,7 +294,7 @@
 #define PM_SETRE(o,r)	STMT_START {					\
                             REGEXP *const _pm_setre = (r);		\
                             assert(_pm_setre);				\
-			    PL_regex_pad[(o)->op_pmoffset] = MUTABLE_SV(_pm_setre); \
+                            PL_regex_pad[(o)->op_pmoffset] = MUTABLE_SV(_pm_setre); \
                         } STMT_END
 #else
 #define PM_GETRE(o)     ((o)->op_pmregexp)
@@ -390,16 +396,16 @@
                                 ? PL_stashpad[(o)->op_pmstashstartu.op_pmstashoff]   \
                                 : NULL)
 #  define PmopSTASH_set(o,hv)	\
-	(assert_((o)->op_pmflags & PMf_ONCE)				\
-	 (o)->op_pmstashstartu.op_pmstashoff =				\
-	    (hv) ? alloccopstash(hv) : 0)
+        (assert_((o)->op_pmflags & PMf_ONCE)				\
+         (o)->op_pmstashstartu.op_pmstashoff =				\
+            (hv) ? alloccopstash(hv) : 0)
 #else
 #  define PmopSTASH(o)							\
     (((o)->op_pmflags & PMf_ONCE) ? (o)->op_pmstashstartu.op_pmstash : NULL)
-#  if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
 #    define PmopSTASH_set(o,hv)		({				\
-	assert((o)->op_pmflags & PMf_ONCE);				\
-	((o)->op_pmstashstartu.op_pmstash = (hv));			\
+        assert((o)->op_pmflags & PMf_ONCE);				\
+        ((o)->op_pmstashstartu.op_pmstash = (hv));			\
     })
 #  else
 #    define PmopSTASH_set(o,hv)	((o)->op_pmstashstartu.op_pmstash = (hv))
@@ -506,12 +512,12 @@
 #  ifndef PERL_CORE
 #    define	IS_PADGV(v)	(v && isGV(v))
 #    define	IS_PADCONST(v) \
-	(v && (SvREADONLY(v) || (SvIsCOW(v) && !SvLEN(v))))
+        (v && (SvREADONLY(v) || (SvIsCOW(v) && !SvLEN(v))))
 #  endif
 #  define	cSVOPx_sv(v)	(cSVOPx(v)->op_sv \
-				 ? cSVOPx(v)->op_sv : PAD_SVl((v)->op_targ))
+                                 ? cSVOPx(v)->op_sv : PAD_SVl((v)->op_targ))
 #  define	cSVOPx_svp(v)	(cSVOPx(v)->op_sv \
-				 ? &cSVOPx(v)->op_sv : &PAD_SVl((v)->op_targ))
+                                 ? &cSVOPx(v)->op_sv : &PAD_SVl((v)->op_targ))
 #  define	cMETHOPx_rclass(v) PAD_SVl(cMETHOPx(v)->op_rclass_targ)
 #else
 #  define	cGVOPx_gv(o)	((GV*)cSVOPx(o)->op_sv)
@@ -621,9 +627,9 @@
 #define PERL_LOADMOD_DENY		0x1	/* no Module */
 #define PERL_LOADMOD_NOIMPORT		0x2	/* use Module () */
 #define PERL_LOADMOD_IMPORT_OPS		0x4	/* import arguments
-						   are passed as a sin-
-						   gle op tree, not a
-						   list of SVs */
+                                                   are passed as a sin-
+                                                   gle op tree, not a
+                                                   list of SVs */
 
 #if defined(PERL_IN_PERLY_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C)
 #define ref(o, type) doref(o, type, TRUE)
@@ -639,7 +645,7 @@
 
 
 /*
-=head1 Optree Manipulation Functions
+=for apidoc_section $optree_manipulation
 
 =for apidoc Am|OP*|LINKLIST|OP *o
 Given the root of an optree, link the tree in execution order using the
@@ -668,9 +674,9 @@
 #endif
 
 #define NewOp(m,var,c,type)	\
-	(var = (type *) Perl_Slab_Alloc(aTHX_ c*sizeof(type)))
+        (var = (type *) Perl_Slab_Alloc(aTHX_ c*sizeof(type)))
 #define NewOpSz(m,var,size)	\
-	(var = (OP *) Perl_Slab_Alloc(aTHX_ size))
+        (var = (OP *) Perl_Slab_Alloc(aTHX_ size))
 #define FreeOp(p) Perl_Slab_Free(aTHX_ p)
 
 /*
@@ -713,31 +719,33 @@
                                            units) */
 # ifdef PERL_DEBUG_READONLY_OPS
     bool	opslab_readonly;
-    U8          opslab_padding;         /* padding to ensure that opslab_slots is always */
-# else
-    U16         opslab_padding;         /* located at an offset with 32-bit alignment */
 # endif
     OPSLOT	opslab_slots;		/* slots begin here */
 };
 
 # define OPSLOT_HEADER		STRUCT_OFFSET(OPSLOT, opslot_op)
-# define OPSLOT_HEADER_P	(OPSLOT_HEADER/sizeof(I32 *))
 # define OpSLOT(o)		(assert_(o->op_slabbed) \
-				 (OPSLOT *)(((char *)o)-OPSLOT_HEADER))
+                                 (OPSLOT *)(((char *)o)-OPSLOT_HEADER))
 
+/* the slab that owns this op */
+# define OpMySLAB(o) \
+    ((OPSLAB*)((char *)((I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset)-STRUCT_OFFSET(struct opslab, opslab_slots)))
 /* the first (head) opslab of the chain in which this op is allocated */
 # define OpSLAB(o) \
-    (((OPSLAB*)( (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset))->opslab_head)
+    (OpMySLAB(o)->opslab_head)
+/* calculate the slot given the owner slab and an offset */
+#define OpSLOToff(slab, offset) \
+    ((OPSLOT*)(((I32 **)&(slab)->opslab_slots)+(offset)))
 
 # define OpslabREFCNT_dec(slab)      \
-	(((slab)->opslab_refcnt == 1) \
-	 ? opslab_free_nopad(slab)     \
-	 : (void)--(slab)->opslab_refcnt)
+        (((slab)->opslab_refcnt == 1) \
+         ? opslab_free_nopad(slab)     \
+         : (void)--(slab)->opslab_refcnt)
   /* Variant that does not null out the pads */
 # define OpslabREFCNT_dec_padok(slab) \
-	(((slab)->opslab_refcnt == 1)  \
-	 ? opslab_free(slab)		\
-	 : (void)--(slab)->opslab_refcnt)
+        (((slab)->opslab_refcnt == 1)  \
+         ? opslab_free(slab)		\
+         : (void)--(slab)->opslab_refcnt)
 #endif
 
 struct block_hooks {
@@ -749,7 +757,7 @@
 };
 
 /*
-=head1 Compile-time scope hooks
+=for apidoc_section $scope
 
 =for apidoc mx|U32|BhkFLAGS|BHK *hk
 Return the BHK's flags.
@@ -795,39 +803,39 @@
 
 #define BhkENABLE(hk, which) \
     STMT_START { \
-	BhkFLAGS(hk) |= BHKf_ ## which; \
-	assert(BhkENTRY(hk, which)); \
+        BhkFLAGS(hk) |= BHKf_ ## which; \
+        assert(BhkENTRY(hk, which)); \
     } STMT_END
 
 #define BhkDISABLE(hk, which) \
     STMT_START { \
-	BhkFLAGS(hk) &= ~(BHKf_ ## which); \
+        BhkFLAGS(hk) &= ~(BHKf_ ## which); \
     } STMT_END
 
 #define BhkENTRY_set(hk, which, ptr) \
     STMT_START { \
-	(hk)->which = ptr; \
-	BhkENABLE(hk, which); \
+        (hk)->which = ptr; \
+        BhkENABLE(hk, which); \
     } STMT_END
 
 #define CALL_BLOCK_HOOKS(which, arg) \
     STMT_START { \
-	if (PL_blockhooks) { \
-	    SSize_t i; \
-	    for (i = av_tindex(PL_blockhooks); i >= 0; i--) { \
-		SV *sv = AvARRAY(PL_blockhooks)[i]; \
-		BHK *hk; \
-		\
-		assert(SvIOK(sv)); \
-		if (SvUOK(sv)) \
-		    hk = INT2PTR(BHK *, SvUVX(sv)); \
-		else \
-		    hk = INT2PTR(BHK *, SvIVX(sv)); \
-		\
-		if (BhkENTRY(hk, which)) \
-		    BhkENTRY(hk, which)(aTHX_ arg); \
-	    } \
-	} \
+        if (PL_blockhooks) { \
+            SSize_t i; \
+            for (i = av_top_index(PL_blockhooks); i >= 0; i--) { \
+                SV *sv = AvARRAY(PL_blockhooks)[i]; \
+                BHK *hk; \
+                \
+                assert(SvIOK(sv)); \
+                if (SvUOK(sv)) \
+                    hk = INT2PTR(BHK *, SvUVX(sv)); \
+                else \
+                    hk = INT2PTR(BHK *, SvIVX(sv)); \
+                \
+                if (BhkENTRY(hk, which)) \
+                    BhkENTRY(hk, which)(aTHX_ arg); \
+            } \
+        } \
     } STMT_END
 
 /* flags for rv2cv_op_cv */
@@ -835,7 +843,7 @@
 #define RV2CVOPCV_MARK_EARLY     0x00000001
 #define RV2CVOPCV_RETURN_NAME_GV 0x00000002
 #define RV2CVOPCV_RETURN_STUB    0x00000004
-#ifdef PERL_CORE /* behaviour of this flag is subject to change: */
+#if defined(PERL_CORE) || defined(PERL_EXT) /* behaviour of this flag is subject to change: */
 # define RV2CVOPCV_MAYBE_NAME_GV  0x00000008
 #endif
 #define RV2CVOPCV_FLAG_MASK      0x0000000f /* all of the above */
@@ -847,7 +855,7 @@
 #define OP_LVALUE_NO_CROAK 1
 
 /*
-=head1 Custom Operators
+=for apidoc_section $custom
 
 =for apidoc Am|U32|XopFLAGS|XOP *xop
 Return the XOP's flags.
@@ -857,7 +865,7 @@
 indicating which entry to return.  If the member is not set
 this will return a default value.  The return type depends
 on C<which>.  This macro evaluates its arguments more than
-once.  If you are using C<Perl_custom_op_xop> to retreive a
+once.  If you are using C<Perl_custom_op_xop> to retrieve a
 C<XOP *> from a C<OP *>, use the more efficient L</XopENTRYCUSTOM> instead.
 
 =for apidoc Am||XopENTRYCUSTOM|const OP *o|which
@@ -922,8 +930,8 @@
 
 #define XopENTRY_set(xop, which, to) \
     STMT_START { \
-	(xop)->which = (to); \
-	(xop)->xop_flags |= XOPf_ ## which; \
+        (xop)->which = (to); \
+        (xop)->xop_flags |= XOPf_ ## which; \
     } STMT_END
 
 #define XopENTRY(xop, which) \
@@ -935,8 +943,8 @@
 #define XopDISABLE(xop, which) ((xop)->xop_flags &= ~XOPf_ ## which)
 #define XopENABLE(xop, which) \
     STMT_START { \
-	(xop)->xop_flags |= XOPf_ ## which; \
-	assert(XopENTRY(xop, which)); \
+        (xop)->xop_flags |= XOPf_ ## which; \
+        assert(XopENTRY(xop, which)); \
     } STMT_END
 
 #define Perl_custom_op_xop(x) \
@@ -943,7 +951,7 @@
     (Perl_custom_op_get_field(x, XOPe_xop_ptr).xop_ptr)
 
 /*
-=head1 Optree Manipulation Functions
+=for apidoc_section $optree_manipulation
 
 =for apidoc Am|const char *|OP_NAME|OP *o
 Return the name of the provided OP.  For core ops this looks up the name
@@ -1007,13 +1015,13 @@
 
 #define OP_NAME(o) ((o)->op_type == OP_CUSTOM \
                     ? XopENTRYCUSTOM(o, xop_name) \
-		    : PL_op_name[(o)->op_type])
+                    : PL_op_name[(o)->op_type])
 #define OP_DESC(o) ((o)->op_type == OP_CUSTOM \
                     ? XopENTRYCUSTOM(o, xop_desc) \
-		    : PL_op_desc[(o)->op_type])
+                    : PL_op_desc[(o)->op_type])
 #define OP_CLASS(o) ((o)->op_type == OP_CUSTOM \
-		     ? XopENTRYCUSTOM(o, xop_class) \
-		     : (PL_opargs[(o)->op_type] & OA_CLASS_MASK))
+                     ? XopENTRYCUSTOM(o, xop_class) \
+                     : (PL_opargs[(o)->op_type] & OA_CLASS_MASK))
 
 #define OP_TYPE_IS(o, type) ((o) && (o)->op_type == (type))
 #define OP_TYPE_IS_NN(o, type) ((o)->op_type == (type))
@@ -1057,10 +1065,6 @@
 #define newATTRSUB(f, o, p, a, b) Perl_newATTRSUB_x(aTHX_  f, o, p, a, b, FALSE)
 #define newSUB(f, o, p, b)	newATTRSUB((f), (o), (p), NULL, (b))
 
-/*
-=head1 Hook manipulation
-*/
-
 #ifdef USE_ITHREADS
 #  define OP_CHECK_MUTEX_INIT		MUTEX_INIT(&PL_check_mutex)
 #  define OP_CHECK_MUTEX_LOCK		MUTEX_LOCK(&PL_check_mutex)

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -137,8 +137,8 @@
  *  directly in the #define because doing so confuses regcomp.pl.
  *  (2**n - 1) is n 1 bits, so the below gets the contiguous bits between the
  *  beginning and ending shifts */
-#if RXf_PMf_COMPILETIME != (((1 << (_RXf_PMf_SHIFT_COMPILETIME))-1) \
-                            & (~((1 << RXf_PMf_STD_PMMOD_SHIFT)-1)))
+#if RXf_PMf_COMPILETIME != ((nBIT_MASK(_RXf_PMf_SHIFT_COMPILETIME)) \
+                        & (~(nBIT_MASK( RXf_PMf_STD_PMMOD_SHIFT))))
 #   error RXf_PMf_COMPILETIME is invalid
 #endif
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/opcode.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/opcode.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/opcode.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -13,7 +13,7 @@
  * Any changes made here will be lost!
  */
 
-#ifndef PERL_GLOBAL_STRUCT_INIT
+#if defined(PERL_CORE) || defined(PERL_EXT)
 
 #define Perl_pp_scalar Perl_pp_null
 #define Perl_pp_padany Perl_unimplemented_op
@@ -140,6 +140,9 @@
 #define Perl_pp_sgrent Perl_pp_ehostent
 #define Perl_pp_egrent Perl_pp_ehostent
 #define Perl_pp_custom Perl_unimplemented_op
+
+#endif /* End of if defined(PERL_CORE) || defined(PERL_EXT) */
+
 START_EXTERN_C
 
 #ifndef DOINIT
@@ -546,7 +549,11 @@
 	"isa",
 	"cmpchain_and",
 	"cmpchain_dup",
-	"freed",
+	"entertrycatch",
+	"leavetrycatch",
+	"poptry",
+	"catch",
+        "freed",
 };
 #endif
 
@@ -954,25 +961,20 @@
 	"derived class test",
 	"comparison chaining",
 	"comparand shuffling",
-	"freed op",
+	"try {block}",
+	"try {block} exit",
+	"pop try",
+	"catch {} block",
+        "freed op",
 };
 #endif
 
 END_EXTERN_C
 
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
 START_EXTERN_C
 
-#ifdef PERL_GLOBAL_STRUCT_INIT
-#  define PERL_PPADDR_INITED
-static const Perl_ppaddr_t Gppaddr[]
-#elif !defined(PERL_GLOBAL_STRUCT)
-#  define PERL_PPADDR_INITED
 EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
-#endif /* PERL_GLOBAL_STRUCT */
-#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT)
-#  define PERL_PPADDR_INITED
+#if defined(DOINIT)
 = {
 	Perl_pp_null,
 	Perl_pp_stub,
@@ -1374,21 +1376,16 @@
 	Perl_pp_isa,
 	Perl_pp_cmpchain_and,
 	Perl_pp_cmpchain_dup,
+	Perl_pp_entertrycatch,
+	Perl_pp_leavetrycatch,
+	Perl_pp_poptry,
+	Perl_pp_catch,
 }
 #endif
-#ifdef PERL_PPADDR_INITED
 ;
-#endif
 
-#ifdef PERL_GLOBAL_STRUCT_INIT
-#  define PERL_CHECK_INITED
-static const Perl_check_t Gcheck[]
-#elif !defined(PERL_GLOBAL_STRUCT)
-#  define PERL_CHECK_INITED
 EXT Perl_check_t PL_check[] /* or perlvars.h */
-#endif
-#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT)
-#  define PERL_CHECK_INITED
+#if defined(DOINIT)
 = {
 	Perl_ck_null,		/* null */
 	Perl_ck_null,		/* stub */
@@ -1790,14 +1787,14 @@
 	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
-#ifdef PERL_CHECK_INITED
 ;
-#endif /* #ifdef PERL_CHECK_INITED */
 
-#ifndef PERL_GLOBAL_STRUCT_INIT
-
 #ifndef DOINIT
 EXTCONST U32 PL_opargs[];
 #else
@@ -2202,11 +2199,13 @@
 	0x00000204,	/* isa */
 	0x00000300,	/* cmpchain_and */
 	0x00000100,	/* cmpchain_dup */
+	0x00000300,	/* entertrycatch */
+	0x00000400,	/* leavetrycatch */
+	0x00000400,	/* poptry */
+	0x00000300,	/* catch */
 };
 #endif
 
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
 END_EXTERN_C
 
 
@@ -2322,10 +2321,8 @@
 #define OPpTRANS_DELETE         0x80
 START_EXTERN_C
 
-#ifndef PERL_GLOBAL_STRUCT_INIT
+#ifndef DOINIT
 
-#  ifndef DOINIT
-
 /* data about the flags in op_private */
 
 EXTCONST I16  PL_op_private_bitdef_ix[];
@@ -2334,7 +2331,7 @@
 EXTCONST I16  PL_op_private_bitfields[];
 EXTCONST U8   PL_op_private_valid[];
 
-#  else
+#else
 
 
 /* PL_op_private_labels[]: the short descriptions of private flags.
@@ -2873,6 +2870,10 @@
       12, /* isa */
        0, /* cmpchain_and */
        0, /* cmpchain_dup */
+       0, /* entertrycatch */
+      -1, /* leavetrycatch */
+      -1, /* poptry */
+       0, /* catch */
 
 };
 
@@ -2891,7 +2892,7 @@
  */
 
 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 */
@@ -3369,11 +3370,14 @@
     /* ISA        */ (OPpARG2_MASK),
     /* CMPCHAIN_AND */ (OPpARG1_MASK),
     /* CMPCHAIN_DUP */ (OPpARG1_MASK),
+    /* ENTERTRYCATCH */ (OPpARG1_MASK),
+    /* LEAVETRYCATCH */ (0),
+    /* POPTRY     */ (0),
+    /* CATCH      */ (OPpARG1_MASK),
 
 };
 
-#  endif /* !DOINIT */
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
+#endif /* !DOINIT */
 
 END_EXTERN_C
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/opnames.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/opnames.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/opnames.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -414,10 +414,14 @@
 	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

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/pad.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/pad.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/pad.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -11,11 +11,6 @@
  * variables, op targets and constants.
  */
 
-/*
-=head1 Pad Data Structures
-*/
-
-
 /* offsets within a pad */
 
 typedef SSize_t PADOFFSET; /* signed so that -1 is a valid value */
@@ -28,13 +23,13 @@
 struct padlist {
     SSize_t	xpadl_max;	/* max index for which array has space */
     union {
-	PAD **	xpadlarr_alloc; /* Pointer to beginning of array of AVs.
-				   index 0 is a padnamelist *          */
-	struct {
-	    PADNAMELIST * padnl;
-	    PAD * pad_1;        /* this slice of PAD * array always alloced */
-	    PAD * pad_2;        /* maybe unalloced */
-	} * xpadlarr_dbg;       /* for use with a C debugger only */
+        PAD **	xpadlarr_alloc; /* Pointer to beginning of array of AVs.
+                                   index 0 is a padnamelist *          */
+        struct {
+            PADNAMELIST * padnl;
+            PAD * pad_1;        /* this slice of PAD * array always alloced */
+            PAD * pad_2;        /* maybe unalloced */
+        } * xpadlarr_dbg;       /* for use with a C debugger only */
     } xpadl_arr;
     U32		xpadl_id;	/* Semi-unique ID, shared between clones */
     U32		xpadl_outid;	/* ID of outer pad */
@@ -63,8 +58,8 @@
     char *	xpadn_pv;		\
     HV *	xpadn_ourstash;		\
     union {				\
-	HV *	xpadn_typestash;	\
-	CV *	xpadn_protocv;		\
+        HV *	xpadn_typestash;	\
+        CV *	xpadn_protocv;		\
     } xpadn_type_u;			\
     U32		xpadn_low;		\
     U32		xpadn_high;		\
@@ -97,8 +92,8 @@
  */
 #define PERL_PADSEQ_INTRO  U32_MAX
 #define COP_SEQMAX_INC \
-	(PL_cop_seqmax++, \
-	 (void)(PL_cop_seqmax == PERL_PADSEQ_INTRO && PL_cop_seqmax++))
+        (PL_cop_seqmax++, \
+         (void)(PL_cop_seqmax == PERL_PADSEQ_INTRO && PL_cop_seqmax++))
 
 
 /* B.xs needs these for the benefit of B::Deparse */
@@ -124,9 +119,9 @@
 /* values for the pad_tidy() function */
 
 typedef enum {
-	padtidy_SUB,		/* tidy up a pad for a sub, */
-	padtidy_SUBCLONE,	/* a cloned sub, */
-	padtidy_FORMAT		/* or a format */
+        padtidy_SUB,		/* tidy up a pad for a sub, */
+        padtidy_SUBCLONE,	/* a cloned sub, */
+        padtidy_FORMAT		/* or a format */
 } padtidy_type;
 
 /* flags for pad_add_name_pvn. */
@@ -135,7 +130,7 @@
 #define padadd_STATE		0x02	   /* state declaration. */
 #define padadd_NO_DUP_CHECK	0x04	   /* skip warning on dups. */
 #define padadd_STALEOK		0x08	   /* allow stale lexical in active
-					    * sub, but only one level up */
+                                            * sub, but only one level up */
 
 /* ASSERT_CURPAD_LEGAL and ASSERT_CURPAD_ACTIVE respectively determine
  * whether PL_comppad and PL_curpad are consistent and whether they have
@@ -147,15 +142,15 @@
 #  define ASSERT_CURPAD_LEGAL(label) \
     pad_peg(label); \
     if (PL_comppad ? (AvARRAY(PL_comppad) != PL_curpad) : (PL_curpad != 0))  \
-	Perl_croak(aTHX_ "panic: illegal pad in %s: 0x%" UVxf "[0x%" UVxf "]",\
-	    label, PTR2UV(PL_comppad), PTR2UV(PL_curpad));
+        Perl_croak(aTHX_ "panic: illegal pad in %s: 0x%" UVxf "[0x%" UVxf "]",\
+            label, PTR2UV(PL_comppad), PTR2UV(PL_curpad));
 
 
 #  define ASSERT_CURPAD_ACTIVE(label) \
     pad_peg(label); \
     if (!PL_comppad || (AvARRAY(PL_comppad) != PL_curpad))		  \
-	Perl_croak(aTHX_ "panic: invalid pad in %s: 0x%" UVxf "[0x%" UVxf "]",\
-	    label, PTR2UV(PL_comppad), PTR2UV(PL_curpad));
+        Perl_croak(aTHX_ "panic: invalid pad in %s: 0x%" UVxf "[0x%" UVxf "]",\
+            label, PTR2UV(PL_comppad), PTR2UV(PL_curpad));
 #else
 #  define ASSERT_CURPAD_LEGAL(label)
 #  define ASSERT_CURPAD_ACTIVE(label)
@@ -170,7 +165,10 @@
 =for apidoc m|void|SAVEPADSV	|PADOFFSET po
 Save a pad slot (used to restore after an iteration)
 
+=cut
+
 XXX DAPM it would make more sense to make the arg a PADOFFSET
+
 =for apidoc m|void|SAVECLEARSV	|SV **svp
 Clear the pointed to pad value on scope exit.  (i.e. the runtime action of
 C<my>)
@@ -234,7 +232,7 @@
 =for apidoc m|bool|PadnameIsOUR|PADNAME * pn
 Whether this is an "our" variable.
 
-=for apidoc m|HV *|PadnameOURSTASH
+=for apidoc m|HV *|PadnameOURSTASH|PADNAME * pn
 The stash in which this "our" variable was declared.
 
 =for apidoc m|bool|PadnameOUTER|PADNAME * pn
@@ -315,7 +313,7 @@
 #define PadnameLEN(pn)		(pn)->xpadn_len
 #define PadnameUTF8(pn)		1
 #define PadnameSV(pn) \
-	newSVpvn_flags(PadnamePV(pn), PadnameLEN(pn), SVs_TEMP|SVf_UTF8)
+        newSVpvn_flags(PadnamePV(pn), PadnameLEN(pn), SVs_TEMP|SVf_UTF8)
 #define PadnameFLAGS(pn)	(pn)->xpadn_flags
 #define PadnameIsOUR(pn)	(!!(pn)->xpadn_ourstash)
 #define PadnameOURSTASH(pn)	(pn)->xpadn_ourstash
@@ -362,43 +360,43 @@
 #define PAD_SVl(po)       (PL_curpad[po])
 
 #define PAD_BASE_SV(padlist, po) \
-	(PadlistARRAY(padlist)[1])					\
-	    ? AvARRAY(MUTABLE_AV((PadlistARRAY(padlist)[1])))[po] \
-	    : NULL;
+        (PadlistARRAY(padlist)[1])					\
+            ? AvARRAY(MUTABLE_AV((PadlistARRAY(padlist)[1])))[po] \
+            : NULL;
 
 
 #define PAD_SET_CUR_NOSAVE(padlist,nth) \
-	PL_comppad = (PAD*) (PadlistARRAY(padlist)[nth]);	\
-	PL_curpad = AvARRAY(PL_comppad);			\
-	DEBUG_Xv(PerlIO_printf(Perl_debug_log,			\
-	      "Pad 0x%" UVxf "[0x%" UVxf "] set_cur    depth=%d\n",	\
-	      PTR2UV(PL_comppad), PTR2UV(PL_curpad), (int)(nth)));
+        PL_comppad = (PAD*) (PadlistARRAY(padlist)[nth]);	\
+        PL_curpad = AvARRAY(PL_comppad);			\
+        DEBUG_Xv(PerlIO_printf(Perl_debug_log,			\
+              "Pad 0x%" UVxf "[0x%" UVxf "] set_cur    depth=%d\n",	\
+              PTR2UV(PL_comppad), PTR2UV(PL_curpad), (int)(nth)));
 
 
 #define PAD_SET_CUR(padlist,nth) \
-	SAVECOMPPAD();						\
-	PAD_SET_CUR_NOSAVE(padlist,nth);
+        SAVECOMPPAD();						\
+        PAD_SET_CUR_NOSAVE(padlist,nth);
 
 
 #define PAD_SAVE_SETNULLPAD()	SAVECOMPPAD(); \
-	PL_comppad = NULL; PL_curpad = NULL;	\
-	DEBUG_Xv(PerlIO_printf(Perl_debug_log, "Pad set_null\n"));
+        PL_comppad = NULL; PL_curpad = NULL;	\
+        DEBUG_Xv(PerlIO_printf(Perl_debug_log, "Pad set_null\n"));
 
 #define PAD_SAVE_LOCAL(opad,npad) \
-	opad = PL_comppad;					\
-	PL_comppad = (npad);					\
-	PL_curpad =  PL_comppad ? AvARRAY(PL_comppad) : NULL;	\
-	DEBUG_Xv(PerlIO_printf(Perl_debug_log,			\
-	      "Pad 0x%" UVxf "[0x%" UVxf "] save_local\n",		\
-	      PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
+        opad = PL_comppad;					\
+        PL_comppad = (npad);					\
+        PL_curpad =  PL_comppad ? AvARRAY(PL_comppad) : NULL;	\
+        DEBUG_Xv(PerlIO_printf(Perl_debug_log,			\
+              "Pad 0x%" UVxf "[0x%" UVxf "] save_local\n",		\
+              PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
 
 #define PAD_RESTORE_LOCAL(opad) \
         assert(!opad || !SvIS_FREED(opad));					\
-	PL_comppad = opad;						\
-	PL_curpad =  PL_comppad ? AvARRAY(PL_comppad) : NULL;	\
-	DEBUG_Xv(PerlIO_printf(Perl_debug_log,			\
-	      "Pad 0x%" UVxf "[0x%" UVxf "] restore_local\n",	\
-	      PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
+        PL_comppad = opad;						\
+        PL_curpad =  PL_comppad ? AvARRAY(PL_comppad) : NULL;	\
+        DEBUG_Xv(PerlIO_printf(Perl_debug_log,			\
+              "Pad 0x%" UVxf "[0x%" UVxf "] restore_local\n",	\
+              PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
 
 
 /*
@@ -481,7 +479,7 @@
     PL_comppad			= av_dup(proto_perl->Icomppad, param);	\
     PL_curpad = PL_comppad ?  AvARRAY(PL_comppad) : NULL;		\
     PL_comppad_name		=					\
-		  padnamelist_dup(proto_perl->Icomppad_name, param);	\
+                  padnamelist_dup(proto_perl->Icomppad_name, param);	\
     PL_comppad_name_fill	= proto_perl->Icomppad_name_fill;	\
     PL_comppad_name_floor	= proto_perl->Icomppad_name_floor;	\
     PL_min_intro_pending	= proto_perl->Imin_intro_pending;	\

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/parser.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/parser.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/parser.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -56,7 +56,7 @@
     char	*lex_casestack;	/* what kind of case mods in effect */
     U8		lex_defer;	/* state after determined token */
     U8		lex_dojoin;	/* doing an array interpolation
-				   1 = @{...}  2 = ->@ */
+                                   1 = @{...}  2 = ->@ */
     U8		expect;		/* how to interpret ambiguous tokens */
     bool	preambled;
     bool        sub_no_recover; /* can't recover from a sublex error */
@@ -81,8 +81,8 @@
     LEXSHARED	*lex_shared;
     SV		*linestr;	/* current chunk of src text */
     char	*bufptr;	/* carries the cursor (current parsing
-				   position) from one invocation of yylex
-				   to the next */
+                                   position) from one invocation of yylex
+                                   to the next */
     char	*oldbufptr;	/* in yylex, beginning of current token */
     char	*oldoldbufptr;	/* in yylex, beginning of previous token */
     char	*bufend;	
@@ -137,8 +137,8 @@
 # define LEX_START_COPIED	0x00000008
 # define LEX_DONT_CLOSE_RSFP	0x00000010
 # define LEX_START_FLAGS \
-	(LEX_START_SAME_FILTER|LEX_START_COPIED \
-	|LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES|LEX_DONT_CLOSE_RSFP)
+        (LEX_START_SAME_FILTER|LEX_START_COPIED \
+        |LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES|LEX_DONT_CLOSE_RSFP)
 #endif
 
 /* flags for parser API */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/patchlevel.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/patchlevel.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/patchlevel.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -8,6 +8,30 @@
  *
  */
 
+/*
+=for apidoc AmDnU|U8|PERL_REVISION
+The major number component of the perl interpreter currently being compiled or
+executing.  This has been C<5> from 1993 into 2020.
+
+Instead use one of the version comparison macros.  See C<L</PERL_VERSION_EQ>>.
+
+=for apidoc AmDnU|U8|PERL_VERSION
+The minor number component of the perl interpreter currently being compiled or
+executing.  Between 1993 into 2020, this has ranged from 0 to 33.
+
+Instead use one of the version comparison macros.  See C<L</PERL_VERSION_EQ>>.
+
+=for apidoc AmDnU|U8|PERL_SUBVERSION
+The micro number component of the perl interpreter currently being compiled or
+executing.  In stable releases this gives the dot release number for
+maintenance updates.  In development releases this gives a tag for a snapshot
+of the status at various points in the development cycle.
+
+Instead use one of the version comparison macros.  See C<L</PERL_VERSION_EQ>>.
+
+=cut
+*/
+
 #ifndef __PATCHLEVEL_H_INCLUDED__
 
 /* do not adjust the whitespace! Configure expects the numbers to be
@@ -14,8 +38,8 @@
  * exactly on the third column */
 
 #define PERL_REVISION	5		/* age */
-#define PERL_VERSION	32		/* epoch */
-#define PERL_SUBVERSION	1		/* generation */
+#define PERL_VERSION	34		/* epoch */
+#define PERL_SUBVERSION	0		/* generation */
 
 /* The following numbers describe the earliest compatible version of
    Perl ("compatibility" here being defined as sufficient binary/API
@@ -35,7 +59,7 @@
    changing them should not be necessary.
 */
 #define PERL_API_REVISION	5
-#define PERL_API_VERSION	32
+#define PERL_API_VERSION	34
 #define PERL_API_SUBVERSION	0
 /*
    XXX Note:  The selection of non-default Configure options, such
@@ -47,42 +71,42 @@
 #endif
 
 /*
-	local_patches -- list of locally applied less-than-subversion patches.
-	If you're distributing such a patch, please give it a name and a
-	one-line description, placed just before the last NULL in the array
-	below.  If your patch fixes a bug in the perlbug database, please
-	mention the bugid.  If your patch *IS* dependent on a prior patch,
-	please place your applied patch line after its dependencies. This
-	will help tracking of patch dependencies.
+        local_patches -- list of locally applied less-than-subversion patches.
+        If you're distributing such a patch, please give it a name and a
+        one-line description, placed just before the last NULL in the array
+        below.  If your patch fixes a bug in the perlbug database, please
+        mention the bugid.  If your patch *IS* dependent on a prior patch,
+        please place your applied patch line after its dependencies. This
+        will help tracking of patch dependencies.
 
-	Please either use 'diff --unified=0' if your diff supports
-	that or edit the hunk of the diff output which adds your patch
-	to this list, to remove context lines which would give patch
-	problems. For instance, if the original context diff is
+        Please either use 'diff --unified=0' if your diff supports
+        that or edit the hunk of the diff output which adds your patch
+        to this list, to remove context lines which would give patch
+        problems. For instance, if the original context diff is
 
-	   *** patchlevel.h.orig	<date here>
-	   --- patchlevel.h	<date here>
-	   *** 38,43 ***
-	   --- 38,44 ---
-	     	,"FOO1235 - some patch"
-	     	,"BAR3141 - another patch"
-	     	,"BAZ2718 - and another patch"
-	   + 	,"MINE001 - my new patch"
-	     	,NULL
-	     };
+           *** patchlevel.h.orig	<date here>
+           --- patchlevel.h	<date here>
+           *** 38,43 ***
+           --- 38,44 ---
+                ,"FOO1235 - some patch"
+                ,"BAR3141 - another patch"
+                ,"BAZ2718 - and another patch"
+           + 	,"MINE001 - my new patch"
+                ,NULL
+             };
 
-	please change it to
-	   *** patchlevel.h.orig	<date here>
-	   --- patchlevel.h	<date here>
-	   *** 41,43 ***
-	   --- 41,44 ---
-	   + 	,"MINE001 - my new patch"
-	     	,NULL
-	     };
+        please change it to
+           *** patchlevel.h.orig	<date here>
+           --- patchlevel.h	<date here>
+           *** 41,43 ***
+           --- 41,44 ---
+           + 	,"MINE001 - my new patch"
+                ,NULL
+             };
 
-	(Note changes to line numbers as well as removal of context lines.)
-	This will prevent patch from choking if someone has previously
-	applied different patches than you.
+        (Note changes to line numbers as well as removal of context lines.)
+        This will prevent patch from choking if someone has previously
+        applied different patches than you.
 
         History has shown that nobody distributes patches that also
         modify patchlevel.h. Do it yourself. The following perl
@@ -96,8 +120,8 @@
 while (<PLIN>) {
     if (/\t,NULL/ and $seen) {
        while (my $c = shift @ARGV){
-	    $c =~ s|\\|\\\\|g;
-	    $c =~ s|"|\\"|g;
+            $c =~ s|\\|\\\\|g;
+            $c =~ s|"|\\"|g;
             print PLOUT qq{\t,"$c"\n};
        }
     }
@@ -132,12 +156,12 @@
 #include "git_version.h"
 #  endif
 static const char * const local_patches[] = {
-	NULL
+        NULL
 #ifdef PERL_GIT_UNCOMMITTED_CHANGES
-	,"uncommitted-changes"
+        ,"uncommitted-changes"
 #endif
-	PERL_GIT_UNPUSHED_COMMITS    	/* do not remove this line */
-	,NULL
+        PERL_GIT_UNPUSHED_COMMITS    	/* do not remove this line */
+        ,NULL
 };
 
 
@@ -144,7 +168,7 @@
 
 /* Initial space prevents this variable from being inserted in config.sh  */
 #  define	LOCAL_PATCH_COUNT	\
-	((int)(C_ARRAY_LENGTH(local_patches)-2))
+        ((int)(C_ARRAY_LENGTH(local_patches)-2))
 
 /* the old terms of reference, add them only when explicitly included */
 #define PATCHLEVEL		PERL_VERSION

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/perl.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perl.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perl.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -31,11 +31,11 @@
 /* this is used for functions which take a depth trailing
  * argument under debugging */
 #ifdef DEBUGGING
-#define _pDEPTH ,U32 depth
-#define _aDEPTH ,depth
+#  define _pDEPTH ,U32 depth
+#  define _aDEPTH ,depth
 #else
-#define _pDEPTH
-#define _aDEPTH
+#  define _pDEPTH
+#  define _aDEPTH
 #endif
 
 /* NOTE 1: that with gcc -std=c89 the __STDC_VERSION__ is *not* defined
@@ -62,18 +62,6 @@
 #  endif
 #endif
 
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#  ifndef PERL_GLOBAL_STRUCT
-#    define PERL_GLOBAL_STRUCT
-#  endif
-#endif
-
-#ifdef PERL_GLOBAL_STRUCT
-#  ifndef MULTIPLICITY
-#    define MULTIPLICITY
-#  endif
-#endif
-
 #ifdef MULTIPLICITY
 #  ifndef PERL_IMPLICIT_CONTEXT
 #    define PERL_IMPLICIT_CONTEXT
@@ -86,27 +74,6 @@
 #   undef _WIN32
 #endif
 
-#if defined(__SYMBIAN32__) || (defined(__VC32__) && defined(WINS))
-#   ifndef SYMBIAN
-#       define SYMBIAN
-#   endif
-#endif
-
-#ifdef __SYMBIAN32__
-#  include "symbian/symbian_proto.h"
-#endif
-
-/* Any stack-challenged places.  The limit varies (and often
- * is configurable), but using more than a kilobyte of stack
- * is usually dubious in these systems. */
-#if defined(__SYMBIAN32__)
-/* Symbian: need to work around the SDK features. *
- * On WINS: MS VC5 generates calls to _chkstk,         *
- * if a "large" stack frame is allocated.              *
- * gcc on MARM does not generate calls like these.     */
-#   define USE_HEAP_INSTEAD_OF_STACK
-#endif
-
 /* Use the reentrant APIs like localtime_r and getpwent_r */
 /* Win32 has naturally threadsafe libraries, no need to use any _r variants.
  * XXX KEEP makedef.pl copy of this code in sync */
@@ -116,13 +83,40 @@
 
 /* <--- here ends the logic shared by perl.h and makedef.pl */
 
+/*
+=for apidoc_section $directives
+=for apidoc AmnUu|void|EXTERN_C
+When not compiling using C++, expands to nothing.
+Otherwise is used in a declaration of a function to indicate the function
+should have external C linkage.  This is required for things to work for just
+about all functions with external linkage compiled into perl.
+Often, you can use C<L</START_EXTERN_C>> ... C<L</END_EXTERN_C>> blocks
+surrounding all your code that you need to have this linkage.
+
+Example usage:
+
+ EXTERN_C int flock(int fd, int op);
+
+=for apidoc Amnu||START_EXTERN_C
+When not compiling using C++, expands to nothing.
+Otherwise begins a section of code in which every function will effectively
+have C<L</EXTERN_C>> applied to it, that is to have external C linkage.  The
+section is ended by a C<L</END_EXTERN_C>>.
+
+=for apidoc Amnu||END_EXTERN_C
+When not compiling using C++, expands to nothing.
+Otherwise ends a section of code already begun by a C<L</START_EXTERN_C>>.
+
+=cut
+*/
+
 #undef START_EXTERN_C
 #undef END_EXTERN_C
 #undef EXTERN_C
 #ifdef __cplusplus
-#  define START_EXTERN_C extern "C" {
+#  define EXTERN_C extern "C"
+#  define START_EXTERN_C EXTERN_C {
 #  define END_EXTERN_C }
-#  define EXTERN_C extern "C"
 #else
 #  define START_EXTERN_C
 #  define END_EXTERN_C
@@ -141,26 +135,17 @@
 #  endif
 #endif
 
-#if defined(PERL_GLOBAL_STRUCT) && !defined(PERL_GET_VARS)
-#    ifdef PERL_GLOBAL_STRUCT_PRIVATE
-       EXTERN_C struct perl_vars* Perl_GetVarsPrivate();
-#      define PERL_GET_VARS() Perl_GetVarsPrivate() /* see miniperlmain.c */
-#    else
-#      define PERL_GET_VARS() PL_VarsPtr
-#    endif
-#endif
+/*
+=for apidoc_section $concurrency
+=for apidoc AmU|void|dTHXa|PerlInterpreter * a
+On threaded perls, set C<pTHX> to C<a>; on unthreaded perls, do nothing
 
-/* this used to be off by default, now its on, see perlio.h */
-#define PERLIO_FUNCS_CONST
+=for apidoc AmU|void|dTHXoa|PerlInterpreter * a
+Now a synonym for C<L</dTHXa>>.
 
-#define pVAR    struct perl_vars* my_vars PERL_UNUSED_DECL
+=cut
+*/
 
-#ifdef PERL_GLOBAL_STRUCT
-#  define dVAR		pVAR    = (struct perl_vars*)PERL_GET_VARS()
-#else
-#  define dVAR		dNOOP
-#endif
-
 #ifdef PERL_IMPLICIT_CONTEXT
 #  ifndef MULTIPLICITY
 #    define MULTIPLICITY
@@ -169,16 +154,8 @@
 #  define pTHX  tTHX my_perl PERL_UNUSED_DECL
 #  define aTHX	my_perl
 #  define aTHXa(a) aTHX = (tTHX)a
-#  ifdef PERL_GLOBAL_STRUCT
-#    define dTHXa(a)	dVAR; pTHX = (tTHX)a
-#  else
-#    define dTHXa(a)	pTHX = (tTHX)a
-#  endif
-#  ifdef PERL_GLOBAL_STRUCT
-#    define dTHX		dVAR; pTHX = PERL_GET_THX
-#  else
-#    define dTHX		pTHX = PERL_GET_THX
-#  endif
+#  define dTHXa(a)	pTHX = (tTHX)a
+#  define dTHX		pTHX = PERL_GET_THX
 #  define pTHX_		pTHX,
 #  define aTHX_		aTHX,
 #  define pTHX_1	2
@@ -211,16 +188,24 @@
  * implementation of multiplicity using C++ objects. They have been left
  * here solely for the sake of XS code which has incorrectly
  * cargo-culted them.
+ *
+ * The only one Devel::PPPort handles is this; list it as deprecated
+
+=for apidoc_section $concurrency
+=for apidoc AmD|void|CPERLscope|void x
+Now a no-op.
+
+=cut
  */
-#define CPERLscope(x) x
-#define CPERLarg void
-#define CPERLarg_
-#define _CPERLarg
-#define PERL_OBJECT_THIS
-#define _PERL_OBJECT_THIS
-#define PERL_OBJECT_THIS_
-#define CALL_FPTR(fptr) (*fptr)
-#define MEMBER_TO_FPTR(name) name
+#  define CPERLscope(x) x
+#  define CPERLarg void
+#  define CPERLarg_
+#  define _CPERLarg
+#  define PERL_OBJECT_THIS
+#  define _PERL_OBJECT_THIS
+#  define PERL_OBJECT_THIS_
+#  define CALL_FPTR(fptr) (*fptr)
+#  define MEMBER_TO_FPTR(name) name
 #endif /* !PERL_CORE */
 
 #define CALLRUNOPS  PL_runops
@@ -286,10 +271,10 @@
     RX_ENGINE(rx)->qr_package(aTHX_ (rx))
 
 #if defined(USE_ITHREADS)
-#define CALLREGDUPE(prog,param) \
+#  define CALLREGDUPE(prog,param) \
     Perl_re_dup(aTHX_ (prog),(param))
 
-#define CALLREGDUPE_PVT(prog,param) \
+#  define CALLREGDUPE_PVT(prog,param) \
     (prog ? RX_ENGINE(prog)->dupe(aTHX_ (prog),(param)) \
           : (REGEXP *)NULL)
 #endif
@@ -314,42 +299,42 @@
  */
 
 #ifndef PERL_MICRO
-#if defined __GNUC__ && !defined(__INTEL_COMPILER)
-#  if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 /* 3.1 -> */
-#    define HASATTRIBUTE_DEPRECATED
-#  endif
-#  if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */
-#    define HASATTRIBUTE_FORMAT
-#    if defined __MINGW32__
-#      define PRINTF_FORMAT_NULL_OK
+#  if defined __GNUC__ && !defined(__INTEL_COMPILER)
+#    if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 /* 3.1 -> */
+#      define HASATTRIBUTE_DEPRECATED
 #    endif
+#    if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */
+#      define HASATTRIBUTE_FORMAT
+#      if defined __MINGW32__
+#        define PRINTF_FORMAT_NULL_OK
+#      endif
+#    endif
+#    if __GNUC__ >= 3 /* 3.0 -> */
+#      define HASATTRIBUTE_MALLOC
+#    endif
+#    if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */
+#      define HASATTRIBUTE_NONNULL
+#    endif
+#    if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */
+#      define HASATTRIBUTE_NORETURN
+#    endif
+#    if __GNUC__ >= 3 /* gcc 3.0 -> */
+#      define HASATTRIBUTE_PURE
+#    endif
+#    if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
+#      define HASATTRIBUTE_UNUSED
+#    endif
+#    if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus)
+#      define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */
+#    endif
+#    if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
+#      define HASATTRIBUTE_WARN_UNUSED_RESULT
+#    endif
+     /* always_inline is buggy in gcc <= 4.6 and causes compilation errors */
+#    if __GNUC__ == 4 && __GNUC_MINOR__ >= 7 || __GNUC__ > 4 /* 4.7 -> */
+#      define HASATTRIBUTE_ALWAYS_INLINE
+#    endif
 #  endif
-#  if __GNUC__ >= 3 /* 3.0 -> */
-#    define HASATTRIBUTE_MALLOC
-#  endif
-#  if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */
-#    define HASATTRIBUTE_NONNULL
-#  endif
-#  if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */
-#    define HASATTRIBUTE_NORETURN
-#  endif
-#  if __GNUC__ >= 3 /* gcc 3.0 -> */
-#    define HASATTRIBUTE_PURE
-#  endif
-#  if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
-#    define HASATTRIBUTE_UNUSED
-#  endif
-#  if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus)
-#    define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */
-#  endif
-#  if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */
-#    define HASATTRIBUTE_WARN_UNUSED_RESULT
-#  endif
-/* always_inline is buggy in gcc <= 4.6 and causes compilation errors */
-#  if __GNUC__ == 4 && __GNUC_MINOR__ >= 7 || __GNUC__ > 4 /* 4.7 -> */
-#    define HASATTRIBUTE_ALWAYS_INLINE
-#  endif
-#endif
 #endif /* #ifndef PERL_MICRO */
 
 #ifdef HASATTRIBUTE_DEPRECATED
@@ -428,7 +413,25 @@
  * marking unused variables (they need e.g. a #pragma) and therefore
  * cpp macros like PERL_UNUSED_DECL cannot work for this purpose, even
  * if it were PERL_UNUSED_DECL(x), which it cannot be (see above).
- *
+
+=for apidoc_section $directives
+=for apidoc AmnU||PERL_UNUSED_DECL
+Tells the compiler that the parameter in the function prototype just before it
+is not necessarily expected to be used in the function.  Not that many
+compilers understand this, so this should only be used in cases where
+C<L</PERL_UNUSED_ARG>> can't conveniently be used.
+
+Example usage:
+
+=over
+
+ Signal_t
+ Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL,
+                       void *uap PERL_UNUSED_DECL, bool safe)
+
+=back
+
+=cut
  */
 
 #ifndef PERL_UNUSED_DECL
@@ -439,6 +442,24 @@
  * for silencing unused variables that are actually used most of the time,
  * but we cannot quite get rid of, such as "ax" in PPCODE+noargs xsubs,
  * or variables/arguments that are used only in certain configurations.
+
+=for apidoc Ams||PERL_UNUSED_ARG|void x
+This is used to suppress compiler warnings that a parameter to a function is
+not used.  This situation can arise, for example, when a parameter is needed
+under some configuration conditions, but not others, so that C preprocessor
+conditional compilation causes it be used just some times.
+
+=for apidoc Amns||PERL_UNUSED_CONTEXT
+This is used to suppress compiler warnings that the thread context parameter to
+a function is not used.  This situation can arise, for example, when a
+C preprocessor conditional compilation causes it be used just some times.
+
+=for apidoc Ams||PERL_UNUSED_VAR|void x
+This is used to suppress compiler warnings that the variable I<x> is not used.
+This situation can arise, for example, when a C preprocessor conditional
+compilation causes it be used just some times.
+
+=cut
  */
 #ifndef PERL_UNUSED_ARG
 #  define PERL_UNUSED_ARG(x) ((void)sizeof(x))
@@ -447,7 +468,7 @@
 #  define PERL_UNUSED_VAR(x) ((void)sizeof(x))
 #endif
 
-#if defined(USE_ITHREADS) || defined(PERL_GLOBAL_STRUCT)
+#if defined(USE_ITHREADS)
 #  define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
 #else
 #  define PERL_UNUSED_CONTEXT
@@ -466,31 +487,40 @@
 #  endif
 #endif
 
-/* Use PERL_UNUSED_RESULT() to suppress the warnings about unused results
- * of function calls, e.g. PERL_UNUSED_RESULT(foo(a, b)).
- *
- * The main reason for this is that the combination of gcc -Wunused-result
- * (part of -Wall) and the __attribute__((warn_unused_result)) cannot
- * be silenced with casting to void.  This causes trouble when the system
- * header files use the attribute.
- *
- * Use PERL_UNUSED_RESULT sparingly, though, since usually the warning
- * is there for a good reason: you might lose success/failure information,
- * or leak resources, or changes in resources.
- *
- * But sometimes you just want to ignore the return value, e.g. on
- * codepaths soon ending up in abort, or in "best effort" attempts,
- * or in situations where there is no good way to handle failures.
- *
- * Sometimes PERL_UNUSED_RESULT might not be the most natural way:
- * another possibility is that you can capture the return value
- * and use PERL_UNUSED_VAR on that.
- *
- * The __typeof__() is used instead of typeof() since typeof() is not
- * available under strict C89, and because of compilers masquerading
- * as gcc (clang and icc), we want exactly the gcc extension
- * __typeof__ and nothing else.
- */
+/*
+
+=for apidoc Am||PERL_UNUSED_RESULT|void x
+
+This macro indicates to discard the return value of the function call inside
+it, I<e.g.>,
+
+ PERL_UNUSED_RESULT(foo(a, b))
+
+The main reason for this is that the combination of C<gcc -Wunused-result>
+(part of C<-Wall>) and the C<__attribute__((warn_unused_result))> cannot
+be silenced with casting to C<void>.  This causes trouble when the system
+header files use the attribute.
+
+Use C<PERL_UNUSED_RESULT> sparingly, though, since usually the warning
+is there for a good reason: you might lose success/failure information,
+or leak resources, or changes in resources.
+
+But sometimes you just want to ignore the return value, I<e.g.>, on
+codepaths soon ending up in abort, or in "best effort" attempts,
+or in situations where there is no good way to handle failures.
+
+Sometimes C<PERL_UNUSED_RESULT> might not be the most natural way:
+another possibility is that you can capture the return value
+and use C<L</PERL_UNUSED_VAR>> on that.
+
+=cut
+
+The __typeof__() is used instead of typeof() since typeof() is not
+available under strict C89, and because of compilers masquerading
+as gcc (clang and icc), we want exactly the gcc extension
+__typeof__ and nothing else.
+
+*/
 #ifndef PERL_UNUSED_RESULT
 #  if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT)
 #    define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END
@@ -499,9 +529,9 @@
 #  endif
 #endif
 
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && _MSC_VER < 1400
 /* XXX older MSVC versions have a smallish macro buffer */
-#define PERL_SMALL_MACRO_BUFFER
+#  define PERL_SMALL_MACRO_BUFFER
 #endif
 
 /* on gcc (and clang), specify that a warning should be temporarily
@@ -570,6 +600,18 @@
 #define MSVC_DIAG_IGNORE_STMT(x) MSVC_DIAG_IGNORE(x) NOOP
 #define MSVC_DIAG_RESTORE_STMT MSVC_DIAG_RESTORE NOOP
 
+/*
+=for apidoc Amns||NOOP
+Do nothing; typically used as a placeholder to replace something that used to
+do something.
+
+=for apidoc Amns||dNOOP
+Declare nothing; typically used as a placeholder to replace something that used
+to declare something.  Works on compilers that require declarations before any
+code.
+
+=cut
+*/
 #define NOOP /*EMPTY*/(void)0
 #define dNOOP struct Perl___notused_struct
 
@@ -596,18 +638,34 @@
 #  define pTHX_12	12
 #endif
 
-#ifndef dVAR
+/*
+=for apidoc_section $concurrency
+=for apidoc AmnU||dVAR
+This is now a synonym for dNOOP: declare nothing
+
+=for apidoc_section $XS
+=for apidoc Amns||dMY_CXT_SV
+Now a placeholder that declares nothing
+
+=cut
+*/
+
+#ifndef PERL_CORE
+    /* Backwards compatibility macro for XS code. It used to be part of the
+     * PERL_GLOBAL_STRUCT(_PRIVATE) feature, which no longer exists */
 #  define dVAR		dNOOP
-#endif
 
-/* these are only defined for compatibility; should not be used internally */
-#if !defined(pTHXo) && !defined(PERL_CORE)
-#  define pTHXo		pTHX
-#  define pTHXo_	pTHX_
-#  define aTHXo		aTHX
-#  define aTHXo_	aTHX_
-#  define dTHXo		dTHX
-#  define dTHXoa(x)	dTHXa(x)
+    /* these are only defined for compatibility; should not be used internally.
+     * */
+#  define dMY_CXT_SV    dNOOP
+#  ifndef pTHXo
+#    define pTHXo		pTHX
+#    define pTHXo_	pTHX_
+#    define aTHXo		aTHX
+#    define aTHXo_	aTHX_
+#    define dTHXo		dTHX
+#    define dTHXoa(x)	dTHXa(x)
+#  endif
 #endif
 
 #ifndef pTHXx
@@ -622,17 +680,9 @@
  * PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...).
  * dTHXs is therefore needed for all functions using PerlIO_foo(). */
 #ifdef PERL_IMPLICIT_SYS
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#    define dTHXs		dVAR; dTHX
-#  else
 #    define dTHXs		dTHX
-#  endif
 #else
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#    define dTHXs		dVAR
-#  else
 #    define dTHXs		dNOOP
-#  endif
 #endif
 
 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
@@ -642,21 +692,42 @@
 #endif
 
 /*
-=head1 Miscellaneous Functions
-
+=for apidoc_section $directives
 =for apidoc AmnUu|void|STMT_START
+=for apidoc_item ||STMT_END
 
- STMT_START { statements; } STMT_END;
+This allows a series of statements in a macro to be used as a single statement,
+as in
 
-can be used as a single statement, as in
+ if (x) STMT_START { ... } STMT_END else ...
 
- if (x) STMT_START { ... } STMT_END; else ...
+Note that you can't return a value out of them, which limits their utility.
+But see C<L</PERL_USE_GCC_BRACE_GROUPS>>.
 
-These are often used in macro definitions.  Note that you can't return a value
-out of them.
+=for apidoc AmnuU|bool|PERL_USE_GCC_BRACE_GROUPS
 
-=for apidoc AmnUhu|void|STMT_END
+This C pre-processor value, if defined, indicates that it is permissible to use
+the GCC brace groups extension.  This extension, of the form
 
+ ({ statement ... })
+
+turns the block consisting of I<statements ...> into an expression with a
+value, unlike plain C language blocks.  This can present optimization
+possibilities, B<BUT> you generally need to specify an alternative in case this
+ability doesn't exist or has otherwise been forbidden.
+
+Example usage:
+
+=over
+
+ #ifdef PERL_USE_GCC_BRACE_GROUPS
+   ...
+ #else
+   ...
+ #endif
+
+=back
+
 =cut
 
  Trying to select a version that gives no warnings...
@@ -821,16 +892,6 @@
 
 #include <sys/types.h>
 
-/* EVC 4 SDK headers includes a bad definition of MB_CUR_MAX in stdlib.h
-  which is included from stdarg.h. Bad definition not present in SD 2008
-  SDK headers. wince.h is not yet included, so we cant fix this from there
-  since by then MB_CUR_MAX will be defined from stdlib.h.
-  cewchar.h includes a correct definition of MB_CUR_MAX and it is copied here
-  since cewchar.h can't be included this early */
-#if defined(UNDER_CE) && (_MSC_VER < 1300)
-#  define MB_CUR_MAX 1uL
-#endif
-
 #  ifdef I_WCHAR
 #    include <wchar.h>
 #  endif
@@ -922,6 +983,12 @@
 #   if !defined(NO_LOCALE_TELEPHONE) && defined(LC_TELEPHONE)
 #	define USE_LOCALE_TELEPHONE
 #   endif
+#   if !defined(NO_LOCALE_SYNTAX) && defined(LC_SYNTAX)
+#	define USE_LOCALE_SYNTAX
+#   endif
+#   if !defined(NO_LOCALE_TOD) && defined(LC_TOD)
+#	define USE_LOCALE_TOD
+#   endif
 
 /* XXX The next few defines are unfortunately duplicated in makedef.pl, and
  * changes here MUST also be made there */
@@ -1003,10 +1070,6 @@
 #   include <sys/wait.h>
 #endif
 
-#ifdef __SYMBIAN32__
-#   undef _SC_ARG_MAX /* Symbian has _SC_ARG_MAX but no sysconf() */
-#endif
-
 #if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO)
 EXTERN_C int syscall(int, ...);
 #endif
@@ -1015,9 +1078,33 @@
 EXTERN_C int usleep(unsigned int);
 #endif
 
-/* macros for correct constant construction.  These are in C99 <stdint.h>
+/* Macros for correct constant construction.  These are in C99 <stdint.h>
  * (so they will not be available in strict C89 mode), but they are nice, so
- * let's define them if necessary. */
+ * let's define them if necessary.
+=for apidoc_section $integer
+=for apidoc    Am|I16|INT16_C|number
+=for apidoc_item |I32|INT32_C|number
+=for apidoc_item |I64|INT64_C|number
+
+Returns a token the C compiler recognizes for the constant C<number> of the
+corresponding integer type on the machine.
+
+If the machine does not have a 64-bit type, C<INT64_C> is undefined.
+Use C<L</INTMAX_C>> to get the largest type available on the platform.
+
+=for apidoc    Am|U16|UINT16_C|number
+=for apidoc_item |U32|UINT32_C|number
+=for apidoc_item |U64|UINT64_C|number
+
+Returns a token the C compiler recognizes for the constant C<number> of the
+corresponding unsigned integer type on the machine.
+
+If the machine does not have a 64-bit type, C<UINT64_C> is undefined.
+Use C<L</UINTMAX_C>> to get the largest type available on the platform.
+
+
+=cut
+*/
 #ifndef UINT16_C
 #  if INTSIZE >= 2
 #    define UINT16_C(x) ((U16_TYPE)x##U)
@@ -1083,6 +1170,33 @@
 #    define UINT64_C(c) PeRl_UINT64_C(c)
 #  endif
 
+/*
+=for apidoc_section $integer
+=for apidoc Am||INTMAX_C|number
+Returns a token the C compiler recognizes for the constant C<number> of the
+widest integer type on the machine.  For example, if the machine has C<long
+long>s, C<INTMAX_C(-1)> would yield
+
+ -1LL
+
+See also, for example, C<L</INT32_C>>.
+
+Use L</IV> to declare variables of the maximum usable size on this platform.
+
+=for apidoc Am||UINTMAX_C|number
+Returns a token the C compiler recognizes for the constant C<number> of the
+widest unsigned integer type on the machine.  For example, if the machine has
+C<long>s, C<UINTMAX_C(1)> would yield
+
+ 1UL
+
+See also, for example, C<L</UINT32_C>>.
+
+Use L</UV> to declare variables of the maximum usable size on this platform.
+
+=cut
+*/
+
 #  ifndef I_STDINT
     typedef I64TYPE PERL_INTMAX_T;
     typedef U64TYPE PERL_UINTMAX_T;
@@ -1180,7 +1294,7 @@
 #define PERL_USES_PL_PIDSTATUS
 #endif
 
-#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP) && !defined(__SYMBIAN32__)
+#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP)
 #define PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
 #endif
 
@@ -1225,9 +1339,7 @@
 #  define Ptrdiff_t SSize_t
 #endif
 
-#ifndef __SYMBIAN32__
 #  include <string.h>
-#endif
 
 /* This comes after <stdlib.h> so we don't try to change the standard
  * library prototypes; we'll use our own in proto.h instead. */
@@ -1280,6 +1392,12 @@
 #define MALLOC_TOO_LATE_FOR(ch)	TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}")
 #define MALLOC_CHECK_TAINT2(argc,argv)	MALLOC_CHECK_TAINT(argc,argv,NULL)
 
+/*
+=for apidoc Am|void|memzero|void * d|Size_t l
+Set the C<l> bytes starting at C<*d> to all zeroes.
+
+=cut
+*/
 #ifndef memzero
 #   define memzero(d,l) memset(d,0,l)
 #endif
@@ -1396,7 +1514,7 @@
 #endif
 
 /*
-=head1 Errno
+=for apidoc_section $errno
 
 =for apidoc m|void|SETERRNO|int errcode|int vmserrcode
 
@@ -1499,7 +1617,7 @@
 #endif
 
 /*
-=head1 Warning and Dieing
+=for apidoc_section $warning
 
 =for apidoc Amn|SV *|ERRSV
 
@@ -1576,6 +1694,20 @@
 # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
 #endif
 
+/*
+=for apidoc_section $SV
+=for apidoc Amn|SV *|DEFSV
+Returns the SV associated with C<$_>
+
+=for apidoc Am|void|DEFSV_set|SV * sv
+Associate C<sv> with C<$_>
+
+=for apidoc Amn|void|SAVE_DEFSV
+Localize C<$_>.  See L<perlguts/Localizing changes>.
+
+=cut
+*/
+
 #ifndef errno
 	extern int errno;     /* ANSI allows errno to be an lvalue expr.
 			       * For example in multithreaded environments
@@ -1785,8 +1917,7 @@
  * longer need that. XS modules can (and do) use this name, so it must remain
  * a part of the API that's visible to modules.
 
-=head1 Miscellaneous Functions
-
+=for apidoc_section $string
 =for apidoc ATmD|int|my_sprintf|NN char *buffer|NN const char *pat|...
 
 Do NOT use this due to the possibility of overflowing C<buffer>.  Instead use
@@ -1976,6 +2107,8 @@
  *  For int conversions we do not need two casts if pointers are
  *  the same size as IV and UV.   Otherwise we need an explicit
  *  cast (PTRV) to avoid compiler warnings.
+ *
+ *  These are mentioned in perlguts
  */
 #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
 #  define PTRV			UV
@@ -1995,6 +2128,14 @@
 #  define PTR2ul(p)	INT2PTR(unsigned long,p)	
 #endif
 
+/*
+=for apidoc_section Casting
+=for apidoc Cyh|type|NUM2PTR|type|int value
+You probably want to be using L<C</INT2PTR>> instead.
+
+=cut
+*/
+
 #define NUM2PTR(any,d)	(any)(PTRV)(d)
 #define PTR2IV(p)	INT2PTR(IV,p)
 #define PTR2UV(p)	INT2PTR(UV,p)
@@ -2037,7 +2178,22 @@
 #  endif
 #endif
 
-typedef NVTYPE NV;
+/* On MS Windows,with 64-bit mingw-w64 compilers, we
+   need to attend to a __float128 alignment issue if
+   USE_QUADMATH is defined. Otherwise we simply:
+   typedef NVTYPE NV
+   32-bit mingw.org compilers might also require
+   aligned(32) - at least that's what I found with my
+   Math::Foat128 module. But this is as yet untested
+   here, so no allowance is being made for mingw.org
+   compilers at this stage. -- sisyphus January 2021
+*/
+#if defined(USE_QUADMATH) && defined(__MINGW64__)
+   /* 64-bit build, mingw-w64 compiler only */
+   typedef NVTYPE NV __attribute__ ((aligned(8)));
+#else
+   typedef NVTYPE NV;
+#endif
 
 #ifdef I_IEEEFP
 #   include <ieeefp.h>
@@ -2327,7 +2483,7 @@
 #     define FP_QNAN FP_QNAN
 #    endif
 #    include <math.h>
-#    ifdef I_IEEFP
+#    ifdef I_IEEEFP
 #        include <ieeefp.h>
 #    endif
 #    ifdef I_FP
@@ -2442,8 +2598,8 @@
 #    define Perl_fp_class_snan(x) (_fpclass(x) & _FPCLASS_SNAN)
 #    define Perl_fp_class_qnan(x) (_fpclass(x) & _FPCLASS_QNAN)
 #    define Perl_fp_class_nan(x) (_fpclass(x) & (_FPCLASS_SNAN|_FPCLASS_QNAN))
-#    define Perl_fp_class_ninf(x) (_fpclass(x) & _FPCLASS_NINF))
-#    define Perl_fp_class_pinf(x) (_fpclass(x) & _FPCLASS_PINF))
+#    define Perl_fp_class_ninf(x) (_fpclass(x) & _FPCLASS_NINF)
+#    define Perl_fp_class_pinf(x) (_fpclass(x) & _FPCLASS_PINF)
 #    define Perl_fp_class_inf(x) (_fpclass(x) & (_FPCLASS_NINF|_FPCLASS_PINF))
 #    define Perl_fp_class_nnorm(x) (_fpclass(x) & _FPCLASS_NN)
 #    define Perl_fp_class_pnorm(x) (_fpclass(x) & _FPCLASS_PN)
@@ -2536,7 +2692,7 @@
 #        define Perl_isfinitel(x) isfinitel(x)
 #    elif defined(HAS_FINITEL)
 #        define Perl_isfinitel(x) finitel(x)
-#    elif defined(HAS_INFL) && defined(HAS_NANL)
+#    elif defined(HAS_ISINFL) && defined(HAS_ISNANL)
 #        define Perl_isfinitel(x) !(isinfl(x)||isnanl(x))
 #    else
 #        define Perl_isfinitel(x) ((x) * 0 == 0)  /* See Perl_isfinite. */
@@ -2571,6 +2727,41 @@
 #define my_atof2(a,b) my_atof3(a,b,0)
 
 /*
+=for apidoc_section $numeric
+=for apidoc   AmT|NV|Perl_acos|NV x
+=for apidoc_item |NV|Perl_asin|NV x
+=for apidoc_item |NV|Perl_atan|NV x
+=for apidoc_item |NV|Perl_atan2|NV x|NV y
+=for apidoc_item |NV|Perl_ceil|NV x
+=for apidoc_item |NV|Perl_cos|NV x
+=for apidoc_item |NV|Perl_cosh|NV x
+=for apidoc_item |NV|Perl_exp|NV x
+=for apidoc_item |NV|Perl_floor|NV x
+=for apidoc_item |NV|Perl_fmod|NV x|NV y
+=for apidoc_item |NV|Perl_frexp|NV x|int *exp
+=for apidoc_item |IV|Perl_isfinite|NV x
+=for apidoc_item |IV|Perl_isinf|NV x
+=for apidoc_item |IV|Perl_isnan|NV x
+=for apidoc_item |NV|Perl_ldexp|NV x|int exp
+=for apidoc_item |NV|Perl_log|NV x
+=for apidoc_item |NV|Perl_log10|NV x
+=for apidoc_item |NV|Perl_modf|NV x|NV *iptr
+=for apidoc_item |NV|Perl_pow|NV x|NV y
+=for apidoc_item |NV|Perl_sin|NV x
+=for apidoc_item |NV|Perl_sinh|NV x
+=for apidoc_item |NV|Perl_sqrt|NV x
+=for apidoc_item |NV|Perl_tan|NV x
+=for apidoc_item |NV|Perl_tanh|NV x
+
+These perform the corresponding mathematical operation on the operand(s), using
+the libc function designed for the task that has just enough precision for an
+NV on this platform.  If no such function with sufficient precision exists,
+the highest precision one available is used.
+
+=cut
+*/
+
+/*
  * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
  * ambiguous. It may be equivalent to (signed char) or (unsigned char)
  * depending on local options. Until Configure detects this (or at least
@@ -2608,43 +2799,28 @@
 #endif
 
 /*
-=head1 Numeric functions
+=for apidoc_section $integer
 
-=for apidoc AmnUh||PERL_INT_MIN
-=for apidoc AmnUh||PERL_LONG_MAX
-=for apidoc AmnUh||PERL_LONG_MIN
-=for apidoc AmnUh||PERL_QUAD_MAX
-=for apidoc AmnUh||PERL_SHORT_MAX
-=for apidoc AmnUh||PERL_SHORT_MIN
-=for apidoc AmnUh||PERL_UCHAR_MAX
-=for apidoc AmnUh||PERL_UCHAR_MIN
-=for apidoc AmnUh||PERL_UINT_MAX
-=for apidoc AmnUh||PERL_ULONG_MAX
-=for apidoc AmnUh||PERL_ULONG_MIN
-=for apidoc AmnUh||PERL_UQUAD_MAX
-=for apidoc AmnUh||PERL_UQUAD_MIN
-=for apidoc AmnUh||PERL_USHORT_MAX
-=for apidoc AmnUh||PERL_USHORT_MIN
-=for apidoc AmnUh||PERL_QUAD_MIN
 =for apidoc AmnU||PERL_INT_MAX
-This and
-C<PERL_INT_MIN>,
-C<PERL_LONG_MAX>,
-C<PERL_LONG_MIN>,
-C<PERL_QUAD_MAX>,
-C<PERL_SHORT_MAX>,
-C<PERL_SHORT_MIN>,
-C<PERL_UCHAR_MAX>,
-C<PERL_UCHAR_MIN>,
-C<PERL_UINT_MAX>,
-C<PERL_ULONG_MAX>,
-C<PERL_ULONG_MIN>,
-C<PERL_UQUAD_MAX>,
-C<PERL_UQUAD_MIN>,
-C<PERL_USHORT_MAX>,
-C<PERL_USHORT_MIN>,
-C<PERL_QUAD_MIN>
-give the largest and smallest number representable in the current
+=for apidoc_item ||PERL_INT_MIN
+=for apidoc_item ||PERL_LONG_MAX
+=for apidoc_item ||PERL_LONG_MIN
+=for apidoc_item ||PERL_SHORT_MAX
+=for apidoc_item ||PERL_SHORT_MIN
+=for apidoc_item ||PERL_UCHAR_MAX
+=for apidoc_item ||PERL_UCHAR_MIN
+=for apidoc_item ||PERL_UINT_MAX
+=for apidoc_item ||PERL_UINT_MIN
+=for apidoc_item ||PERL_ULONG_MAX
+=for apidoc_item ||PERL_ULONG_MIN
+=for apidoc_item ||PERL_USHORT_MAX
+=for apidoc_item ||PERL_USHORT_MIN
+=for apidoc_item ||PERL_QUAD_MAX
+=for apidoc_item ||PERL_QUAD_MIN
+=for apidoc_item ||PERL_UQUAD_MAX
+=for apidoc_item ||PERL_UQUAD_MIN
+
+These give the largest and smallest number representable in the current
 platform in variables of the corresponding types.
 
 For signed types, the smallest representable number is the most negative
@@ -2701,6 +2877,7 @@
 typedef struct io IO;
 typedef struct context PERL_CONTEXT;
 typedef struct block BLOCK;
+typedef struct invlist INVLIST;
 
 typedef struct magic MAGIC;
 typedef struct xpv XPV;
@@ -2873,8 +3050,6 @@
 #   else
 #     include "vos/vosish.h"
 #   endif
-#elif defined(__SYMBIAN32__)
-#   include "symbian/symbianish.h"
 #elif defined(__HAIKU__)
 #   include "haiku/haikuish.h"
 #else
@@ -2916,37 +3091,6 @@
 #  define USE_ENVIRON_ARRAY
 #endif
 
-#ifdef USE_ITHREADS
-   /* On some platforms it would be safe to use a read/write mutex with many
-    * readers possible at the same time.  On other platforms, notably IBM ones,
-    * subsequent getenv calls destroy earlier ones.  Those platforms would not
-    * be able to handle simultaneous getenv calls */
-#  define ENV_LOCK            MUTEX_LOCK(&PL_env_mutex)
-#  define ENV_UNLOCK          MUTEX_UNLOCK(&PL_env_mutex)
-#  define ENV_INIT            MUTEX_INIT(&PL_env_mutex);
-#  define ENV_TERM            MUTEX_DESTROY(&PL_env_mutex);
-#else
-#  define ENV_LOCK       NOOP;
-#  define ENV_UNLOCK     NOOP;
-#  define ENV_INIT       NOOP;
-#  define ENV_TERM       NOOP;
-#endif
-
-/* Some critical sections need to lock both the locale and the environment.
- * XXX khw intends to change this to lock both mutexes, but that brings up
- * issues of potential deadlock, so should be done at the beginning of a
- * development cycle.  So for now, it just locks the environment.  Note that
- * many modern platforms are locale-thread-safe anyway, so locking the locale
- * mutex is a no-op anyway */
-#define ENV_LOCALE_LOCK     ENV_LOCK
-#define ENV_LOCALE_UNLOCK   ENV_UNLOCK
-
-/* And some critical sections care only that no one else is writing either the
- * locale nor the environment.  XXX Again this is for the future.  This can be
- * simulated with using COND_WAIT in thread.h */
-#define ENV_LOCALE_READ_LOCK     ENV_LOCALE_LOCK
-#define ENV_LOCALE_READ_UNLOCK   ENV_LOCALE_UNLOCK
-
 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
     /* having sigaction(2) means that the OS supports both 1-arg and 3-arg
      * signal handlers. But the perl core itself only fully supports 1-arg
@@ -3045,7 +3189,7 @@
 #endif
 
 /*
-=head1 Miscellaneous Functions
+=for apidoc_section $embedding
 
 =for apidoc Am|void|PERL_SYS_INIT|int *argc|char*** argv
 Provides system-specific tune up of the C runtime environment necessary to
@@ -3094,12 +3238,6 @@
 #  endif
 #endif
 
-/* USE_5005THREADS needs to be after unixish.h as <pthread.h> includes
- * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
- * this results in many functions being undeclared which bothers C++
- * May make sense to have threads after "*ish.h" anyway
- */
-
 /* clang Thread Safety Analysis/Annotations/Attributes
  * http://clang.llvm.org/docs/ThreadSafetyAnalysis.html
  *
@@ -3110,8 +3248,6 @@
  */
 #if defined(USE_ITHREADS) && defined(I_PTHREAD) && \
     defined(__clang__) && \
-    !defined(PERL_GLOBAL_STRUCT) && \
-    !defined(PERL_GLOBAL_STRUCT_PRIVATE) && \
     !defined(SWIG) && \
   ((!defined(__apple_build_version__) &&               \
     ((__clang_major__ == 3 && __clang_minor__ >= 6) || \
@@ -3219,6 +3355,15 @@
 typedef pthread_cond_t	perl_cond;
 typedef pthread_key_t	perl_key;
 #  endif
+
+/* Many readers; single writer */
+typedef struct {
+    perl_mutex lock;
+    perl_cond  wakeup;
+    SSize_t    readers_count;
+} perl_RnW1_mutex_t;
+
+
 #endif /* USE_ITHREADS */
 
 #ifdef PERL_TSA_ACTIVE
@@ -3610,11 +3755,8 @@
 
 #define HEKfARG(p) ((void*)(p))
 
-/*
-=for apidoc Amnh||UTF8f
-=for apidoc Amh||UTF8fARG|bool is_utf8|Size_t byte_len|char *str
-
-=cut
+/* Documented in perlguts
+ *
  * %4p is a custom format
  */
 #ifndef UTF8f
@@ -3626,7 +3768,13 @@
 #define PNfARG(pn) (int)1, (UV)PadnameLEN(pn), (void *)PadnamePV(pn)
 
 #ifdef PERL_CORE
-/* not used; but needed for backward compatibility with XS code? - RMB */
+/* not used; but needed for backward compatibility with XS code? - RMB
+=for apidoc AmnD|const char *|UVf
+
+Obsolete form of C<UVuf>, which you should convert to instead use
+
+=cut
+*/
 #  undef UVf
 #elif !defined(UVf)
 #  define UVf UVuf
@@ -3653,14 +3801,14 @@
 #endif
 
 /*
-=head1 Miscellaneous Functions
+=for apidoc_section $directives
 
-=for apidoc AmU|bool|LIKELY|const bool expr
+=for apidoc Am||LIKELY|bool expr
 
 Returns the input unchanged, but at the same time it gives a branch prediction
 hint to the compiler that this condition is likely to be true.
 
-=for apidoc AmU|bool|UNLIKELY|const bool expr
+=for apidoc Am||UNLIKELY|bool expr
 
 Returns the input unchanged, but at the same time it gives a branch prediction
 hint to the compiler that this condition is likely to be false.
@@ -3716,40 +3864,55 @@
 #  define __has_builtin(x) 0 /* not a clang style compiler */
 #endif
 
-/* ASSUME is like assert(), but it has a benefit in a release build. It is a
-   hint to a compiler about a statement of fact in a function call free
-   expression, which allows the compiler to generate better machine code.
-   In a debug build, ASSUME(x) is a synonym for assert(x). ASSUME(0) means
-   the control path is unreachable. In a for loop, ASSUME can be used to hint
-   that a loop will run at least X times. ASSUME is based off MSVC's __assume
-   intrinsic function, see its documents for more details.
+/*
+=for apidoc Am||ASSUME|bool expr
+C<ASSUME> is like C<assert()>, but it has a benefit in a release build. It is a
+hint to a compiler about a statement of fact in a function call free
+expression, which allows the compiler to generate better machine code.  In a
+debug build, C<ASSUME(x)> is a synonym for C<assert(x)>. C<ASSUME(0)> means the
+control path is unreachable. In a for loop, C<ASSUME> can be used to hint that
+a loop will run at least X times. C<ASSUME> is based off MSVC's C<__assume>
+intrinsic function, see its documents for more details.
+
+=cut
 */
 
-#ifndef DEBUGGING
-#  if __has_builtin(__builtin_unreachable) \
-     || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5 || __GNUC__ > 4) /* 4.5 -> */
+#ifdef DEBUGGING
+#  define ASSUME(x) assert(x)
+#  if __has_builtin(__builtin_unreachable)
+#    define HAS_BUILTIN_UNREACHABLE
+#  elif (defined(__GNUC__) && (   __GNUC__ > 4                              \
+                               || __GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#    define HAS_BUILTIN_UNREACHABLE
+#  endif
+#endif
+
+#if defined(__sun) || (defined(__hpux) && !defined(__GNUC__))
+#  ifndef ASSUME
+#    define ASSUME(x)      /* ASSUME() generates warnings on Solaris */
+#  endif
+#  define NOT_REACHED
+#elif defined(HAS_BUILTIN_UNREACHABLE)
+#  ifndef ASSUME
 #    define ASSUME(x) ((x) ? (void) 0 : __builtin_unreachable())
-#  elif defined(_MSC_VER)
+#  endif
+#  define NOT_REACHED                                                       \
+        STMT_START {                                                        \
+            ASSUME(!"UNREACHABLE"); __builtin_unreachable();                \
+        } STMT_END
+#else
+#  if defined(_MSC_VER)
 #    define ASSUME(x) __assume(x)
 #  elif defined(__ARMCC_VERSION) /* untested */
 #    define ASSUME(x) __promise(x)
 #  else
-/* a random compiler might define assert to its own special optimization token
-   so pass it through to C lib as a last resort */
+    /* a random compiler might define assert to its own special optimization
+     * token so pass it through to C lib as a last resort */
 #    define ASSUME(x) assert(x)
 #  endif
-#else
-#  define ASSUME(x) assert(x)
-#endif
-
-#if defined(__sun)      /* ASSUME() generates warnings on Solaris */
-#  define NOT_REACHED
-#elif defined(DEBUGGING) && (__has_builtin(__builtin_unreachable) \
-     || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5 || __GNUC__ > 4)) /* 4.5 -> */
-#  define NOT_REACHED STMT_START { ASSUME(!"UNREACHABLE"); __builtin_unreachable(); } STMT_END
-#else
 #  define NOT_REACHED ASSUME(!"UNREACHABLE")
 #endif
+#undef HAS_BUILTIN_UNREACHABLE
 
 /* Some unistd.h's give a prototype for pause() even though
    HAS_PAUSE ends up undefined.  This causes the #define
@@ -3825,7 +3988,7 @@
 		&& idx >= AvFILLp(PL_parser->rsfp_filters))
 #define PERL_FILTER_EXISTS(i) \
 	    (PL_parser && PL_parser->rsfp_filters \
-		&& (i) <= av_tindex(PL_parser->rsfp_filters))
+		&& (Size_t) (i) < av_count(PL_parser->rsfp_filters))
 
 #if defined(_AIX) && !defined(_AIX43)
 #if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE)
@@ -3845,7 +4008,7 @@
 
 #ifndef PERL_CALLCONV
 #  ifdef __cplusplus
-#    define PERL_CALLCONV extern "C"
+#    define PERL_CALLCONV  EXTERN_C
 #  else
 #    define PERL_CALLCONV
 #  endif
@@ -3860,8 +4023,9 @@
 #ifndef PERL_STATIC_NO_RET
 #  define PERL_STATIC_NO_RET STATIC
 #endif
-/* PERL_STATIC_NO_RET is supposed to be equivalent to PERL_STATIC_INLINE on
-   builds that dont have a noreturn as a declaration specifier
+
+/* PERL_STATIC_INLINE_NO_RET is supposed to be equivalent to PERL_STATIC_INLINE
+ * on builds that dont have a noreturn as a declaration specifier
 */
 #ifndef PERL_STATIC_INLINE_NO_RET
 #  define PERL_STATIC_INLINE_NO_RET PERL_STATIC_INLINE
@@ -3939,7 +4103,8 @@
 
 typedef struct magic_state MGS;	/* struct magic_state defined in mg.c */
 
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) \
+ || defined(PERL_EXT_RE_BUILD)
 
 /* These have to be predeclared, as they are used in proto.h which is #included
  * before their definitions in regcomp.h. */
@@ -4086,6 +4251,21 @@
 /* This may look like unnecessary jumping through hoops, but converting
    out of range floating point values to integers *is* undefined behaviour,
    and it is starting to bite.
+
+=for apidoc_section $casting
+=for apidoc Am|I32|I_32|NV what
+Cast an NV to I32 while avoiding undefined C behavior
+
+=for apidoc Am|U32|U_32|NV what
+Cast an NV to U32 while avoiding undefined C behavior
+
+=for apidoc Am|IV|I_V|NV what
+Cast an NV to IV while avoiding undefined C behavior
+
+=for apidoc Am|UV|U_V|NV what
+Cast an NV to UV while avoiding undefined C behavior
+
+=cut
 */
 #ifndef CAST_INLINE
 #define I_32(what) (cast_i32((NV)(what)))
@@ -4111,6 +4291,25 @@
 #define U_I(what) ((unsigned int)U_32(what))
 #define U_L(what) U_32(what)
 
+/*
+=for apidoc_section $integer
+=for apidoc Amn|IV|IV_MAX
+The largest signed integer that fits in an IV on this platform.
+
+=for apidoc Amn|IV|IV_MIN
+The negative signed integer furthest away from 0 that fits in an IV on this
+platform.
+
+=for apidoc Amn|UV|UV_MAX
+The largest unsigned integer that fits in a UV on this platform.
+
+=for apidoc Amn|UV|UV_MIN
+The smallest unsigned integer that fits in a UV on this platform.  It should
+equal zero.
+
+=cut
+*/
+
 #ifdef HAS_SIGNBIT
 #  ifndef Perl_signbit
 #    define Perl_signbit signbit
@@ -4131,7 +4330,7 @@
 #endif
 
 #ifndef __cplusplus
-#if !(defined(WIN32) || defined(SYMBIAN))
+#if !defined(WIN32)
 Uid_t getuid (void);
 Uid_t geteuid (void);
 Gid_t getgid (void);
@@ -4188,6 +4387,11 @@
 #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)
@@ -4216,11 +4420,11 @@
 #  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
 
@@ -4283,9 +4487,38 @@
                               }                                         \
     } STMT_END
 
+/* These allow you to customize your debugging output  for specialized,
+ * generally temporary ad-hoc purposes.  For example, if you need 'errno'
+ * preserved, you can add definitions to these macros (either in this file for
+ * the whole program, or before the #include "perl.h" in a particular .c file
+ * you're trying to debug) and recompile:
+ *
+ * #define DEBUG_PRE_STMTS   dSAVE_ERRNO;
+ * #define DEBUG_POST_STMTS  RESTORE_ERRNO;
+ *
+ * Other potential things include displaying timestamps, location information,
+ * which thread, etc.  Heres an example with both errno and location info:
+ *
+ * #define DEBUG_PRE_STMTS   dSAVE_ERRNO;  \
+ *              PerlIO_printf(Perl_debug_log, "%s:%d: ", __FILE__, __LINE__);
+ * #define DEBUG_POST  RESTORE_ERRNO;
+ *
+ * All DEBUG statements in the compiled scope will be have these extra
+ * statements compiled in; they will be executed only for the DEBUG statements
+ * whose flags are turned on.
+ */
+#ifndef DEBUG_PRE_STMTS
+#  define DEBUG_PRE_STMTS
+#endif
+#ifndef DEBUG_POST_STMTS
+#  define DEBUG_POST_STMTS
+#endif
+
 #  define DEBUG__(t, a)                                                 \
         STMT_START {                                                    \
-                if (t) STMT_START {a;} STMT_END;                        \
+            if (t) STMT_START {                                         \
+                DEBUG_PRE_STMTS a; DEBUG_POST_STMTS                     \
+            } STMT_END;                                                 \
         } STMT_END
 
 #  define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a)
@@ -4292,7 +4525,9 @@
 
 /* For re_comp.c, re_exec.c, assume -Dr has been specified */
 #  ifdef PERL_EXT_RE_BUILD
-#    define DEBUG_r(a) STMT_START {a;} STMT_END
+#    define DEBUG_r(a) STMT_START {                                     \
+                            DEBUG_PRE_STMTS a; DEBUG_POST_STMTS         \
+                       } STMT_END;
 #  else
 #    define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a)
 #  endif /* PERL_EXT_RE_BUILD */
@@ -4725,6 +4960,22 @@
   INIT("");
 EXTCONST char PL_Zero[]
   INIT("0");
+
+/*
+=for apidoc_section $numeric
+=for apidoc AmTuU|const char *|PL_hexdigit|U8 value
+
+This array, indexed by an integer, converts that value into the character that
+represents it.  For example, if the input is 8, the return will be a string
+whose first character is '8'.  What is actually returned is a pointer into a
+string.  All you are interested in is the first character of that string.  To
+get uppercase letters (for the values 10..15), add 16 to the index.  Hence,
+C<PL_hexdigit[11]> is C<'b'>, and C<PL_hexdigit[11+16]> is C<'B'>.  Adding 16
+to an index whose representation is '0'..'9' yields the same as not adding 16.
+Indices outside the range 0..31 result in (bad) undedefined behavior.
+
+=cut
+*/
 EXTCONST char PL_hexdigit[]
   INIT("0123456789abcdef0123456789ABCDEF");
 
@@ -4794,10 +5045,10 @@
  * folds such as outside the range or to multiple characters. */
 
 #ifdef DOINIT
-#ifndef EBCDIC
+#  ifndef EBCDIC
 
 /* The EBCDIC fold table depends on the code page, and hence is found in
- * utfebcdic.h */
+ * ebcdic_tables.h */
 
 EXTCONST  unsigned char PL_fold[] = {
 	0,	1,	2,	3,	4,	5,	6,	7,
@@ -4833,6 +5084,42 @@
 	240,	241,	242,	243,	244,	245,	246,	247,
 	248,	249,	250,	251,	252,	253,	254,	255
 };
+
+EXT unsigned char PL_fold_locale[] = { /* Unfortunately not EXTCONST. */
+	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,	'a',	'b',	'c',	'd',	'e',	'f',	'g',
+	'h',	'i',	'j',	'k',	'l',	'm',	'n',	'o',
+	'p',	'q',	'r',	's',	't',	'u',	'v',	'w',
+	'x',	'y',	'z',	91,	92,	93,	94,	95,
+	96,	'A',	'B',	'C',	'D',	'E',	'F',	'G',
+	'H',	'I',	'J',	'K',	'L',	'M',	'N',	'O',
+	'P',	'Q',	'R',	'S',	'T',	'U',	'V',	'W',
+	'X',	'Y',	'Z',	123,	124,	125,	126,	127,
+	128,	129,	130,	131,	132,	133,	134,	135,
+	136,	137,	138,	139,	140,	141,	142,	143,
+	144,	145,	146,	147,	148,	149,	150,	151,
+	152,	153,	154,	155,	156,	157,	158,	159,
+	160,	161,	162,	163,	164,	165,	166,	167,
+	168,	169,	170,	171,	172,	173,	174,	175,
+	176,	177,	178,	179,	180,	181,	182,	183,
+	184,	185,	186,	187,	188,	189,	190,	191,
+	192,	193,	194,	195,	196,	197,	198,	199,
+	200,	201,	202,	203,	204,	205,	206,	207,
+	208,	209,	210,	211,	212,	213,	214,	215,
+	216,	217,	218,	219,	220,	221,	222,	223,
+	224,	225,	226,	227,	228,	229,	230,	231,
+	232,	233,	234,	235,	236,	237,	238,	239,
+	240,	241,	242,	243,	244,	245,	246,	247,
+	248,	249,	250,	251,	252,	253,	254,	255
+};
+
 EXTCONST  unsigned char PL_fold_latin1[] = {
     /* Full latin1 complement folding, except for three problematic code points:
      *	Micro sign (181 = 0xB5) and y with diearesis (255 = 0xFF) have their
@@ -4945,145 +5232,29 @@
 	200,	201,	202,	203,	204,	205,	206,	207,
 	208,	209,	210,	211,	212,	213,	214,	215,
 	216,	217,	218,	219,	220,	221,	222,
-#if    UNICODE_MAJOR_VERSION > 2                                        \
-   || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1		\
-                                  && UNICODE_DOT_DOT_VERSION >= 8)
+#    if    UNICODE_MAJOR_VERSION > 2                                        \
+       || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1           \
+                                      && UNICODE_DOT_DOT_VERSION >= 8)
 	                                                        255 /*sharp s*/,
-#else   /* uc(sharp s) is 'sharp s' itself in early unicode */
+#    else   /* uc(sharp s) is 'sharp s' itself in early unicode */
 	                                                        223,
-#endif
+#    endif
 	224-32,	225-32,	226-32,	227-32,	228-32,	229-32,	230-32,	231-32,
 	232-32,	233-32,	234-32,	235-32,	236-32,	237-32,	238-32,	239-32,
 	240-32,	241-32,	242-32,	243-32,	244-32,	245-32,	246-32,	247,
 	248-32,	249-32,	250-32,	251-32,	252-32,	253-32,	254-32,	255
 };
-#endif  /* !EBCDIC, but still in DOINIT */
+#  endif  /* !EBCDIC, but still in DOINIT */
 #else	/* ! DOINIT */
-#   ifndef EBCDIC
+#  ifndef EBCDIC
 EXTCONST unsigned char PL_fold[];
 EXTCONST unsigned char PL_fold_latin1[];
 EXTCONST unsigned char PL_mod_latin1_uc[];
 EXTCONST unsigned char PL_latin1_lc[];
+EXT      unsigned char PL_fold_locale[]; /* Unfortunately not EXTCONST. */
 #   endif
 #endif
 
-#ifndef PERL_GLOBAL_STRUCT /* or perlvars.h */
-#ifdef DOINIT
-EXT unsigned char PL_fold_locale[256] = { /* Unfortunately not EXTCONST. */
-	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,	'a',	'b',	'c',	'd',	'e',	'f',	'g',
-	'h',	'i',	'j',	'k',	'l',	'm',	'n',	'o',
-	'p',	'q',	'r',	's',	't',	'u',	'v',	'w',
-	'x',	'y',	'z',	91,	92,	93,	94,	95,
-	96,	'A',	'B',	'C',	'D',	'E',	'F',	'G',
-	'H',	'I',	'J',	'K',	'L',	'M',	'N',	'O',
-	'P',	'Q',	'R',	'S',	'T',	'U',	'V',	'W',
-	'X',	'Y',	'Z',	123,	124,	125,	126,	127,
-	128,	129,	130,	131,	132,	133,	134,	135,
-	136,	137,	138,	139,	140,	141,	142,	143,
-	144,	145,	146,	147,	148,	149,	150,	151,
-	152,	153,	154,	155,	156,	157,	158,	159,
-	160,	161,	162,	163,	164,	165,	166,	167,
-	168,	169,	170,	171,	172,	173,	174,	175,
-	176,	177,	178,	179,	180,	181,	182,	183,
-	184,	185,	186,	187,	188,	189,	190,	191,
-	192,	193,	194,	195,	196,	197,	198,	199,
-	200,	201,	202,	203,	204,	205,	206,	207,
-	208,	209,	210,	211,	212,	213,	214,	215,
-	216,	217,	218,	219,	220,	221,	222,	223,	
-	224,	225,	226,	227,	228,	229,	230,	231,
-	232,	233,	234,	235,	236,	237,	238,	239,
-	240,	241,	242,	243,	244,	245,	246,	247,
-	248,	249,	250,	251,	252,	253,	254,	255
-};
-#else
-EXT unsigned char PL_fold_locale[256]; /* Unfortunately not EXTCONST. */
-#endif
-#endif /* !PERL_GLOBAL_STRUCT */
-
-#ifdef DOINIT
-#ifdef EBCDIC
-EXTCONST unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
-    1,      2,      84,     151,    154,    155,    156,    157,
-    165,    246,    250,    3,      158,    7,      18,     29,
-    40,     51,     62,     73,     85,     96,     107,    118,
-    129,    140,    147,    148,    149,    150,    152,    153,
-    255,      6,      8,      9,     10,     11,     12,     13,
-     14,     15,     24,     25,     26,     27,     28,    226,
-     29,     30,     31,     32,     33,     43,     44,     45,
-     46,     47,     48,     49,     50,     76,     77,     78,
-     79,     80,     81,     82,     83,     84,     85,     86,
-     87,     94,     95,    234,    181,    233,    187,    190,
-    180,     96,     97,     98,     99,    100,    101,    102,
-    104,    112,    182,    174,    236,    232,    229,    103,
-    228,    226,    114,    115,    116,    117,    118,    119,
-    120,    121,    122,    235,    176,    230,    194,    162,
-    130,    131,    132,    133,    134,    135,    136,    137,
-    138,    139,    201,    205,    163,    217,    220,    224,
-    5,      248,    227,    244,    242,    255,    241,    231,
-    240,    253,    16,     197,    19,     20,     21,     187,
-    23,     169,    210,    245,    237,    249,    247,    239,
-    168,    252,    34,     196,    36,     37,     38,     39,
-    41,     42,     251,    254,    238,    223,    221,    213,
-    225,    177,    52,     53,     54,     55,     56,     57,
-    58,     59,     60,     61,     63,     64,     65,     66,
-    67,     68,     69,     70,     71,     72,     74,     75,
-    205,    208,    186,    202,    200,    218,    198,    179,
-    178,    214,    88,     89,     90,     91,     92,     93,
-    217,    166,    170,    207,    199,    209,    206,    204,
-    160,    212,    105,    106,    108,    109,    110,    111,
-    203,    113,    216,    215,    192,    175,    193,    243,
-    172,    161,    123,    124,    125,    126,    127,    128,
-    222,    219,    211,    195,    188,    193,    185,    184,
-    191,    183,    141,    142,    143,    144,    145,    146
-};
-#else  /* ascii rather than ebcdic */
-EXTCONST unsigned char PL_freq[] = {	/* letter frequencies for mixed English/C */
-	1,	2,	84,	151,	154,	155,	156,	157,
-	165,	246,	250,	3,	158,	7,	18,	29,
-	40,	51,	62,	73,	85,	96,	107,	118,
-	129,	140,	147,	148,	149,	150,	152,	153,
-	255,	182,	224,	205,	174,	176,	180,	217,
-	233,	232,	236,	187,	235,	228,	234,	226,
-	222,	219,	211,	195,	188,	193,	185,	184,
-	191,	183,	201,	229,	181,	220,	194,	162,
-	163,	208,	186,	202,	200,	218,	198,	179,
-	178,	214,	166,	170,	207,	199,	209,	206,
-	204,	160,	212,	216,	215,	192,	175,	173,
-	243,	172,	161,	190,	203,	189,	164,	230,
-	167,	248,	227,	244,	242,	255,	241,	231,
-	240,	253,	169,	210,	245,	237,	249,	247,
-	239,	168,	252,	251,	254,	238,	223,	221,
-	213,	225,	177,	197,	171,	196,	159,	4,
-	5,	6,	8,	9,	10,	11,	12,	13,
-	14,	15,	16,	17,	19,	20,	21,	22,
-	23,	24,	25,	26,	27,	28,	30,	31,
-	32,	33,	34,	35,	36,	37,	38,	39,
-	41,	42,	43,	44,	45,	46,	47,	48,
-	49,	50,	52,	53,	54,	55,	56,	57,
-	58,	59,	60,	61,	63,	64,	65,	66,
-	67,	68,	69,	70,	71,	72,	74,	75,
-	76,	77,	78,	79,	80,	81,	82,	83,
-	86,	87,	88,	89,	90,	91,	92,	93,
-	94,	95,	97,	98,	99,	100,	101,	102,
-	103,	104,	105,	106,	108,	109,	110,	111,
-	112,	113,	114,	115,	116,	117,	119,	120,
-	121,	122,	123,	124,	125,	126,	127,	128,
-	130,	131,	132,	133,	134,	135,	136,	137,
-	138,	139,	141,	142,	143,	144,	145,	146
-};
-#endif
-#else
-EXTCONST unsigned char PL_freq[];
-#endif
-
 /* Although only used for debugging, these constants must be available in
  * non-debugging builds too, since they're used in ext/re/re_exec.c,
  * which has DEBUGGING enabled always */
@@ -5120,9 +5291,6 @@
 #  ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
 			     " DEBUG_LEAKING_SCALARS_FORK_DUMP"
 #  endif
-#  ifdef FCRYPT
-			     " FCRYPT"
-#  endif
 #  ifdef HAS_TIMES
 			     " HAS_TIMES"
 #  endif
@@ -5144,12 +5312,6 @@
 #  ifdef PERL_DEBUG_READONLY_OPS
 			     " PERL_DEBUG_READONLY_OPS"
 #  endif
-#  ifdef PERL_GLOBAL_STRUCT
-			     " PERL_GLOBAL_STRUCT"
-#  endif
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-			     " PERL_GLOBAL_STRUCT_PRIVATE"
-#  endif
 #  ifdef PERL_IMPLICIT_CONTEXT
 			     " PERL_IMPLICIT_CONTEXT"
 #  endif
@@ -5159,12 +5321,6 @@
 #  ifdef PERL_MICRO
 			     " PERL_MICRO"
 #  endif
-#  ifdef PERL_NEED_APPCTX
-			     " PERL_NEED_APPCTX"
-#  endif
-#  ifdef PERL_NEED_TIMESBASE
-			     " PERL_NEED_TIMESBASE"
-#  endif
 #  ifdef PERL_POISON
 			     " PERL_POISON"
 #  endif
@@ -5358,7 +5514,7 @@
 
 #define HINT_RE_FLAGS		0x02000000 /* re '/xism' pragma */
 
-#define HINT_FEATURE_MASK	0x1c000000 /* 3 bits for feature bundles */
+#define HINT_FEATURE_MASK	0x3c000000 /* 4 bits for feature bundles */
 
 				/* Note: Used for HINT_M_VMSISH_*,
 				   currently defined by vms/vmsish.h:
@@ -5370,6 +5526,16 @@
 #define HINT_SORT_STABLE	0x00000100 /* sort styles */
 #define HINT_SORT_UNSTABLE	0x00000200
 
+#define HINT_ALL_STRICT       HINT_STRICT_REFS \
+                            | HINT_STRICT_SUBS \
+                            | HINT_STRICT_VARS
+
+#ifdef USE_STRICT_BY_DEFAULT
+#define HINTS_DEFAULT            HINT_ALL_STRICT
+#else
+#define HINTS_DEFAULT            0
+#endif
+
 /* flags for PL_sawampersand */
 
 #define SAWAMPERSAND_LEFT       1   /* saw $` */
@@ -5505,34 +5671,6 @@
   INIT(PERL_INTERPRETER_SIZE_UPTO_MEMBER(PERL_LAST_5_18_0_INTERP_MEMBER));
 
 
-#  ifdef PERL_GLOBAL_STRUCT
-/* MULTIPLICITY is automatically defined when PERL_GLOBAL_STRUCT is defined,
-   hence it's safe and sane to nest this within #ifdef MULTIPLICITY  */
-
-struct perl_vars {
-#    include "perlvars.h"
-};
-
-EXTCONST U16 PL_global_struct_size
-  INIT(sizeof(struct perl_vars));
-
-#    ifdef PERL_CORE
-#      ifndef PERL_GLOBAL_STRUCT_PRIVATE
-EXT struct perl_vars PL_Vars;
-EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
-#        undef PERL_GET_VARS
-#        define PERL_GET_VARS() PL_VarsPtr
-#      endif /* !PERL_GLOBAL_STRUCT_PRIVATE */
-#    else /* PERL_CORE */
-#      if !defined(__GNUC__) || !defined(WIN32)
-EXT
-#      endif /* WIN32 */
-struct perl_vars *PL_VarsPtr;
-#      define PL_Vars (*((PL_VarsPtr) \
-		       ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
-#    endif /* PERL_CORE */
-#  endif /* PERL_GLOBAL_STRUCT */
-
 /* Done with PERLVAR macros for now ... */
 #  undef PERLVAR
 #  undef PERLVARA
@@ -5605,13 +5743,11 @@
    define HAVE_INTERP_INTERN  */
 #include "embed.h"
 
-#ifndef PERL_GLOBAL_STRUCT
 START_EXTERN_C
 
 #  include "perlvars.h"
 
 END_EXTERN_C
-#endif
 
 #undef PERLVAR
 #undef PERLVARA
@@ -5653,8 +5789,14 @@
 #define PERL_MAGIC_READONLY_ACCEPTABLE 0x40
 #define PERL_MAGIC_VALUE_MAGIC 0x80
 #define PERL_MAGIC_VTABLE_MASK 0x3F
+
+/* can this type of magic be attached to a readonly SV? */
 #define PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(t) \
     (PL_magic_data[(U8)(t)] & PERL_MAGIC_READONLY_ACCEPTABLE)
+
+/* Is this type of magic container magic (%ENV, $1 etc),
+ * or value magic (pos, taint etc)?
+ */
 #define PERL_MAGIC_TYPE_IS_VALUE_MAGIC(t) \
     (PL_magic_data[(U8)(t)] & PERL_MAGIC_VALUE_MAGIC)
 
@@ -5863,18 +6005,19 @@
  *        byte ones (as they are always legal) are to this state.
  */
 
-#    define NUM_CLASSES 18
-#    define N0 0
-#    define N1 ((N0)   + NUM_CLASSES)
-#    define N2 ((N1)   + NUM_CLASSES)
-#    define N3 ((N2)   + NUM_CLASSES)
-#    define N4 ((N3)   + NUM_CLASSES)
-#    define N5 ((N4)   + NUM_CLASSES)
-#    define N6 ((N5)   + NUM_CLASSES)
-#    define N7 ((N6)   + NUM_CLASSES)
-#    define N8 ((N7)   + NUM_CLASSES)
-#    define N9 ((N8)   + NUM_CLASSES)
-#    define N10 ((N9)  + NUM_CLASSES)
+#    if defined(PERL_CORE)
+#      define NUM_CLASSES 18
+#      define N0 0
+#      define N1 ((N0)   + NUM_CLASSES)
+#      define N2 ((N1)   + NUM_CLASSES)
+#      define N3 ((N2)   + NUM_CLASSES)
+#      define N4 ((N3)   + NUM_CLASSES)
+#      define N5 ((N4)   + NUM_CLASSES)
+#      define N6 ((N5)   + NUM_CLASSES)
+#      define N7 ((N6)   + NUM_CLASSES)
+#      define N8 ((N7)   + NUM_CLASSES)
+#      define N9 ((N8)   + NUM_CLASSES)
+#      define N10 ((N9)  + NUM_CLASSES)
 
 /*Class: 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17  */
 /*N0*/   0, 1,N1,N2,N3,N4,N5, 1, 1, 1, 1, 1, 1,N6,N7,N8,N9,N10,
@@ -6002,30 +6145,30 @@
  *        byte ones (as they are always legal) are to this state.
  */
 
-#    undef N0
-#    undef N1
-#    undef N2
-#    undef N3
-#    undef N4
-#    undef N5
-#    undef N6
-#    undef N7
-#    undef N8
-#    undef N9
-#    undef NUM_CLASSES
-#    define NUM_CLASSES 19
-#    define N0 0
-#    define N1  ((N0)  + NUM_CLASSES)
-#    define N2  ((N1)  + NUM_CLASSES)
-#    define N3  ((N2)  + NUM_CLASSES)
-#    define N4  ((N3)  + NUM_CLASSES)
-#    define N5  ((N4)  + NUM_CLASSES)
-#    define N6  ((N5)  + NUM_CLASSES)
-#    define N7  ((N6)  + NUM_CLASSES)
-#    define N8  ((N7)  + NUM_CLASSES)
-#    define N9  ((N8)  + NUM_CLASSES)
-#    define N10 ((N9)  + NUM_CLASSES)
-#    define N11 ((N10) + NUM_CLASSES)
+#      undef N0
+#      undef N1
+#      undef N2
+#      undef N3
+#      undef N4
+#      undef N5
+#      undef N6
+#      undef N7
+#      undef N8
+#      undef N9
+#      undef NUM_CLASSES
+#      define NUM_CLASSES 19
+#      define N0 0
+#      define N1  ((N0)  + NUM_CLASSES)
+#      define N2  ((N1)  + NUM_CLASSES)
+#      define N3  ((N2)  + NUM_CLASSES)
+#      define N4  ((N3)  + NUM_CLASSES)
+#      define N5  ((N4)  + NUM_CLASSES)
+#      define N6  ((N5)  + NUM_CLASSES)
+#      define N7  ((N6)  + NUM_CLASSES)
+#      define N8  ((N7)  + NUM_CLASSES)
+#      define N9  ((N8)  + NUM_CLASSES)
+#      define N10 ((N9)  + NUM_CLASSES)
+#      define N11 ((N10) + NUM_CLASSES)
 
 /*Class: 0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18 */
 /*N0*/   0,  1, N1, N2, N4, N7, N6, N3, N5,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
@@ -6105,24 +6248,24 @@
  *        byte ones (as they are always legal) are to this state.
  */
 
-#    undef N0
-#    undef N1
-#    undef N2
-#    undef N3
-#    undef N4
-#    undef N5
-#    undef N6
-#    undef N7
-#    undef NUM_CLASSES
-#    define NUM_CLASSES 12
-#    define N0 0
-#    define N1  ((N0)  + NUM_CLASSES)
-#    define N2  ((N1)  + NUM_CLASSES)
-#    define N3  ((N2)  + NUM_CLASSES)
-#    define N4  ((N3)  + NUM_CLASSES)
-#    define N5  ((N4)  + NUM_CLASSES)
-#    define N6  ((N5)  + NUM_CLASSES)
-#    define N7  ((N6)  + NUM_CLASSES)
+#      undef N0
+#      undef N1
+#      undef N2
+#      undef N3
+#      undef N4
+#      undef N5
+#      undef N6
+#      undef N7
+#      undef NUM_CLASSES
+#      define NUM_CLASSES 12
+#      define N0 0
+#      define N1  ((N0)  + NUM_CLASSES)
+#      define N2  ((N1)  + NUM_CLASSES)
+#      define N3  ((N2)  + NUM_CLASSES)
+#      define N4  ((N3)  + NUM_CLASSES)
+#      define N5  ((N4)  + NUM_CLASSES)
+#      define N6  ((N5)  + NUM_CLASSES)
+#      define N7  ((N6)  + NUM_CLASSES)
 
 /*Class: 0   1   2   3   4   5   6   7   8   9  10  11 */
 /*N0*/   0,  1, N1, N2, N5, N7, N3, N4, N6,  1,  1,  1,
@@ -6136,6 +6279,7 @@
 /*N7*/   1,  1,  1,  1,  1,  1,  1,  1,  1, N2,  1,  1,
 };
 
+#    endif /* defined(PERL_CORE) */
 #  else     /* End of is DOINIT */
 
 EXTCONST U8 PL_extended_utf8_dfa_tab[];
@@ -6145,22 +6289,6 @@
 #  endif
 #endif    /* end of isn't EBCDIC */
 
-#ifndef PERL_NO_INLINE_FUNCTIONS
-/* Static inline funcs that depend on includes and declarations above.
-   Some of these reference functions in the perl object files, and some
-   compilers aren't smart enough to eliminate unused static inline
-   functions, so including this file in source code can cause link errors
-   even if the source code uses none of the functions. Hence including these
-   can be suppressed by setting PERL_NO_INLINE_FUNCTIONS. Doing this will
-   (obviously) result in unworkable XS code, but allows simple probing code
-   to continue to work, because it permits tests to include the perl headers
-   for definitions without creating a link dependency on the perl library
-   (which may not exist yet).
-*/
-
-#  include "inline.h"
-#endif
-
 #include "overload.h"
 
 END_EXTERN_C
@@ -6296,7 +6424,7 @@
                         cBOOL(PL_hints & (HINT_LOCALE|HINT_LOCALE_PARTIAL))
 
 /*
-=head1 Locale-related functions and macros
+=for apidoc_section $locale
 
 =for apidoc Amn|bool|IN_LOCALE
 
@@ -6406,52 +6534,77 @@
 #endif
 
 
-/* Locale/thread synchronization macros.  These aren't needed if using
- * thread-safe locale operations, except if something is broken */
-#if    defined(USE_LOCALE)                                                  \
- &&    defined(USE_ITHREADS)                                                \
- && (! defined(USE_THREAD_SAFE_LOCALE) || defined(TS_W32_BROKEN_LOCALECONV))
+/* Locale/thread synchronization macros. */
+#if ! (   defined(USE_LOCALE)                                               \
+       &&    defined(USE_ITHREADS)                                          \
+       && (  ! defined(USE_THREAD_SAFE_LOCALE)                              \
+           || (   defined(HAS_LOCALECONV)                                   \
+               && (  ! defined(HAS_LOCALECONV_L)                            \
+                   ||  defined(TS_W32_BROKEN_LOCALECONV)))                  \
+           || (   defined(HAS_NL_LANGINFO)                                  \
+               && ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L))                 \
+           || (defined(HAS_MBLEN)  && ! defined(HAS_MBRLEN))                \
+           || (defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC))               \
+           || (defined(HAS_WCTOMB) && ! defined(HAS_WCRTOMB))))
 
-/* We have a locale object holding the 'C' locale for Posix 2008 */
-#  ifndef USE_POSIX_2008_LOCALE
-#    define _LOCALE_TERM_POSIX_2008  NOOP
-#  else
-#    define _LOCALE_TERM_POSIX_2008                                         \
-                    STMT_START {                                            \
-                        if (PL_C_locale_obj) {                              \
-                            /* Make sure we aren't using the locale         \
-                             * space we are about to free */                \
-                            uselocale(LC_GLOBAL_LOCALE);                    \
-                            freelocale(PL_C_locale_obj);                    \
-                            PL_C_locale_obj = (locale_t) NULL;              \
-                        }                                                   \
-                    } STMT_END
-#  endif
+/* The whole expression just above was complemented, so here we have no need
+ * for thread synchronization, most likely it would be that this isn't a
+ * threaded build. */
+#  define LOCALE_INIT
+#  define LOCALE_TERM
+#  define LC_NUMERIC_LOCK(cond)     NOOP
+#  define LC_NUMERIC_UNLOCK         NOOP
+#  define LOCALECONV_LOCK           NOOP
+#  define LOCALECONV_UNLOCK         NOOP
+#  define LOCALE_READ_LOCK          NOOP
+#  define LOCALE_READ_UNLOCK        NOOP
+#  define MBLEN_LOCK                NOOP
+#  define MBLEN_UNLOCK              NOOP
+#  define MBTOWC_LOCK               NOOP
+#  define MBTOWC_UNLOCK             NOOP
+#  define NL_LANGINFO_LOCK          NOOP
+#  define NL_LANGINFO_UNLOCK        NOOP
+#  define SETLOCALE_LOCK            NOOP
+#  define SETLOCALE_UNLOCK          NOOP
+#  define WCTOMB_LOCK               NOOP
+#  define WCTOMB_UNLOCK             NOOP
+#else
 
-/* This is used as a generic lock for locale operations.  For example this is
- * used when calling nl_langinfo() so that another thread won't zap the
- * contents of its buffer before it gets saved; and it's called when changing
- * the locale of LC_MESSAGES.  On some systems the latter can cause the
- * nl_langinfo buffer to be zapped under a race condition.
- *
- * If combined with LC_NUMERIC_LOCK, calls to this and its corresponding unlock
- * should be contained entirely within the locked portion of LC_NUMERIC.  This
- * mutex should be used only in very short sections of code, while
- * LC_NUMERIC_LOCK may span more operations.  By always following this
- * convention, deadlock should be impossible.  But if necessary, the two
- * mutexes could be combined.
- *
- * Actually, the two macros just below with the '_V' suffixes are used in just
- * a few places where there is a broken localeconv(), but otherwise things are
- * thread safe, and hence don't need locking.  Just below LOCALE_LOCK and
- * LOCALE_UNLOCK are defined in terms of these for use everywhere else */
-#  define LOCALE_LOCK_V                                                     \
+   /* Here, we will need critical sections in locale handling, because one or
+    * more of the above conditions are true.  This could be because the
+    * platform doesn't have thread-safe locales, or that at least one of the
+    * locale-dependent functions in the core isn't thread-safe.  The latter
+    * case is generally because they return a pointer to a static buffer, which
+    * may be per-process instead of per-thread.  There are supposedly
+    * re-entrant, safe versions for all of them Perl currently uses (which the
+    * #if above checks for), but most platforms don't have all the needed ones
+    * available, and the Posix standard doesn't require nl_langinfo_l() to be
+    * fully thread-safe, so a Configure probe was written.  localeconv_l() is
+    * uncommon, and judging by bug reports on the web, some earlier library
+    * localeconv_l versions were broken, so perhaps a probe is in order for
+    * that, but it would be a pain to write.
+    *
+    * On non-thread-safe systems, some of the above functions are vulnerable to
+    * races should another thread get control and change the locale in the
+    * middle of their execution.
+    *
+    * We currently use a single mutex for all these cases.  This solves both
+    * the problem of another thread changing the locale, and the buffer being
+    * overwritten (the code copies the results to a safe place before releasing
+    * the mutex).  Ideally, for locale thread-safe platforms where the only
+    * issue is another thread clobbering the function's static buffer, there
+    * would be a separate mutex for each such buffer.  Otherwise, things get
+    * locked that don't need to.  But, it is not expected that any of these
+    * will be called frequently, and the locked interval should be short, and
+    * modern platforms will have reentrant versions (which don't lock) for
+    * almost all of them, so khw thinks a single mutex should suffice. */
+#  define LOCALE_LOCK_                                                      \
         STMT_START {                                                        \
             DEBUG_Lv(PerlIO_printf(Perl_debug_log,                          \
                     "%s: %d: locking locale\n", __FILE__, __LINE__));       \
             MUTEX_LOCK(&PL_locale_mutex);                                   \
         } STMT_END
-#  define LOCALE_UNLOCK_V                                                   \
+#  define LOCALE_UNLOCK_                                                    \
         STMT_START {                                                        \
             DEBUG_Lv(PerlIO_printf(Perl_debug_log,                          \
                    "%s: %d: unlocking locale\n", __FILE__, __LINE__));      \
@@ -6458,37 +6611,58 @@
             MUTEX_UNLOCK(&PL_locale_mutex);                                 \
         } STMT_END
 
-/* On windows, we just need the mutex for LOCALE_LOCK */
-#  ifdef TS_W32_BROKEN_LOCALECONV
-#    define LOCALE_LOCK     NOOP
-#    define LOCALE_UNLOCK   NOOP
-#    define LOCALE_INIT     MUTEX_INIT(&PL_locale_mutex);
-#    define LOCALE_TERM     MUTEX_DESTROY(&PL_locale_mutex)
-#    define LC_NUMERIC_LOCK(cond)
-#    define LC_NUMERIC_UNLOCK
+   /* We do define a different macro for each case; then if we want to have
+    * separate mutexes for some of them, the only changes needed are here.
+    * Define just the necessary macros.  The compiler should then croak if the
+    * #ifdef's in the code are incorrect */
+#  if defined(HAS_LOCALECONV) && (  ! defined(HAS_POSIX_2008_LOCALE)        \
+                                 || ! defined(HAS_LOCALECONV_L)             \
+                                 ||   defined(TS_W32_BROKEN_LOCALECONV))
+#    define LOCALECONV_LOCK   LOCALE_LOCK_
+#    define LOCALECONV_UNLOCK LOCALE_UNLOCK_
+#  endif
+#  if defined(HAS_NL_LANGINFO) && (   ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L) \
+                                   || ! defined(HAS_POSIX_2008_LOCALE))
+#    define NL_LANGINFO_LOCK   LOCALE_LOCK_
+#    define NL_LANGINFO_UNLOCK LOCALE_UNLOCK_
+#  endif
+#  if defined(HAS_MBLEN) && ! defined(HAS_MBRLEN)
+#    define MBLEN_LOCK   LOCALE_LOCK_
+#    define MBLEN_UNLOCK LOCALE_UNLOCK_
+#  endif
+#  if defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC)
+#    define MBTOWC_LOCK   LOCALE_LOCK_
+#    define MBTOWC_UNLOCK LOCALE_UNLOCK_
+#  endif
+#  if defined(HAS_WCTOMB) && ! defined(HAS_WCRTOMB)
+#    define WCTOMB_LOCK   LOCALE_LOCK_
+#    define WCTOMB_UNLOCK LOCALE_UNLOCK_
+#  endif
+#  if defined(USE_THREAD_SAFE_LOCALE)
+     /* On locale thread-safe systems, we don't need these workarounds */
+#    define LOCALE_TERM_LC_NUMERIC_   NOOP
+#    define LOCALE_INIT_LC_NUMERIC_   NOOP
+#    define LC_NUMERIC_LOCK(cond)   NOOP
+#    define LC_NUMERIC_UNLOCK       NOOP
+#    define LOCALE_INIT_LC_NUMERIC_ NOOP
+#    define LOCALE_TERM_LC_NUMERIC_ NOOP
+
+     /* There may be instance core where we this is invoked yet should do
+      * nothing.  Rather than have #ifdef's around them, define it here */
+#    define SETLOCALE_LOCK    NOOP
+#    define SETLOCALE_UNLOCK  NOOP
 #  else
-#    define LOCALE_LOCK     LOCALE_LOCK_V
-#    define LOCALE_UNLOCK   LOCALE_UNLOCK_V
+#    define SETLOCALE_LOCK   LOCALE_LOCK_
+#    define SETLOCALE_UNLOCK LOCALE_UNLOCK_
 
-     /* We also need to lock LC_NUMERIC for non-windows (hence Posix 2008)
-      * systems */
-#    define LOCALE_INIT          STMT_START {                               \
-                                    MUTEX_INIT(&PL_locale_mutex);           \
-                                    MUTEX_INIT(&PL_lc_numeric_mutex);       \
-                                } STMT_END
-
-#    define LOCALE_TERM         STMT_START {                                \
-                                    MUTEX_DESTROY(&PL_locale_mutex);        \
-                                    MUTEX_DESTROY(&PL_lc_numeric_mutex);    \
-                                    _LOCALE_TERM_POSIX_2008;                \
-                                } STMT_END
-
-    /* This mutex is used to create critical sections where we want the
-     * LC_NUMERIC locale to be locked into either the C (standard) locale, or
-     * the underlying locale, so that other threads interrupting this one don't
-     * change it to the wrong state before we've had a chance to complete our
-     * operation.  It can stay locked over an entire printf operation, for
-     * example.  And so is made distinct from the LOCALE_LOCK mutex.
+    /* On platforms without per-thread locales, when another thread can switch
+     * our locale, we need another mutex to create critical sections where we
+     * want the LC_NUMERIC locale to be locked into either the C (standard)
+     * locale, or the underlying locale, so that other threads interrupting
+     * this one don't change it to the wrong state before we've had a chance to
+     * complete our operation.  It can stay locked over an entire printf
+     * operation, for example.  And so is made distinct from the LOCALE_LOCK
+     * mutex.
      *
      * This simulates kind of a general semaphore.  The current thread will
      * lock the mutex if the per-thread variable is zero, and then increments
@@ -6502,7 +6676,13 @@
      *
      * Clang improperly gives warnings for this, if not silenced:
      * https://clang.llvm.org/docs/ThreadSafetyAnalysis.html#conditional-locks
-     * */
+     *
+     * If LC_NUMERIC_LOCK is combined with one of the LOCKs above, calls to
+     * that and its corresponding unlock should be contained entirely within
+     * the locked portion of LC_NUMERIC.  Those mutexes should be used only in
+     * very short sections of code, while LC_NUMERIC_LOCK may span more
+     * operations.  By always following this convention, deadlock should be
+     * impossible.  But if necessary, the two mutexes could be combined. */
 #    define LC_NUMERIC_LOCK(cond_to_panic_if_already_locked)                \
         CLANG_DIAG_IGNORE(-Wthread-safety)	     	                    \
         STMT_START {                                                        \
@@ -6544,16 +6724,36 @@
         } STMT_END                                                          \
         CLANG_DIAG_RESTORE
 
-#  endif    /* End of needs locking LC_NUMERIC */
-#else   /* Below is no locale sync needed */
-#  define LOCALE_INIT
-#  define LOCALE_LOCK
-#  define LOCALE_LOCK_V
-#  define LOCALE_UNLOCK
-#  define LOCALE_UNLOCK_V
-#  define LC_NUMERIC_LOCK(cond)
-#  define LC_NUMERIC_UNLOCK
-#  define LOCALE_TERM
+#    define LOCALE_INIT_LC_NUMERIC_   MUTEX_INIT(&PL_lc_numeric_mutex)
+#    define LOCALE_TERM_LC_NUMERIC_   MUTEX_DESTROY(&PL_lc_numeric_mutex)
+#  endif
+
+#  ifdef USE_POSIX_2008_LOCALE
+     /* We have a locale object holding the 'C' locale for Posix 2008 */
+#    define LOCALE_TERM_POSIX_2008_                                         \
+                    STMT_START {                                            \
+                        if (PL_C_locale_obj) {                              \
+                            /* Make sure we aren't using the locale         \
+                             * space we are about to free */                \
+                            uselocale(LC_GLOBAL_LOCALE);                    \
+                            freelocale(PL_C_locale_obj);                    \
+                            PL_C_locale_obj = (locale_t) NULL;              \
+                        }                                                   \
+                    } STMT_END
+#  else
+#    define LOCALE_TERM_POSIX_2008_  NOOP
+#  endif
+
+#  define LOCALE_INIT           STMT_START {                                \
+                                    MUTEX_INIT(&PL_locale_mutex);           \
+                                    LOCALE_INIT_LC_NUMERIC_;                \
+                                } STMT_END
+
+#  define LOCALE_TERM           STMT_START {                                \
+                                    MUTEX_DESTROY(&PL_locale_mutex);        \
+                                    LOCALE_TERM_LC_NUMERIC_;                \
+                                    LOCALE_TERM_POSIX_2008_;                \
+                                } STMT_END
 #endif
 
 #ifdef USE_LOCALE_NUMERIC
@@ -6564,7 +6764,7 @@
  * operations used by Perl, namely the decimal point, and even the thousands
  * separator.)
 
-=head1 Locale-related functions and macros
+=for apidoc_section $locale
 
 =for apidoc Amn|void|DECLARATION_FOR_LC_NUMERIC_MANIPULATION
 
@@ -6803,8 +7003,8 @@
 #  define LOCK_LC_NUMERIC_STANDARD()                                        \
         STMT_START {                                                        \
             DEBUG_Lv(PerlIO_printf(Perl_debug_log,                          \
-                      "%s: %d: lock lc_numeric_standard: new depth=%d\n",   \
-                      __FILE__, __LINE__, PL_numeric_standard + 1));        \
+                    "%s: %d: lc_numeric_standard now locked to depth %d\n", \
+                    __FILE__, __LINE__, PL_numeric_standard));              \
             __ASSERT_(PL_numeric_standard)                                  \
             PL_numeric_standard++;                                          \
         } STMT_END
@@ -6818,8 +7018,13 @@
                 assert(0);                                                  \
             }                                                               \
             DEBUG_Lv(PerlIO_printf(Perl_debug_log,                          \
-            "%s: %d: lc_numeric_standard decrement lock, new depth=%d\n",   \
-            __FILE__, __LINE__, PL_numeric_standard));                      \
+                                   "%s: %d: ",  __FILE__, __LINE__);        \
+                    if (PL_numeric_standard <= 1)                           \
+                        PerlIO_printf(Perl_debug_log,                       \
+                                      "lc_numeric_standard now unlocked\n");\
+                    else PerlIO_printf(Perl_debug_log,                      \
+                     "lc_numeric_standard lock decremented to depth %d\n",  \
+                                                     PL_numeric_standard););\
         } STMT_END
 
 #  define WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric, block)            \
@@ -6853,11 +7058,80 @@
 
 #endif /* !USE_LOCALE_NUMERIC */
 
+#ifdef USE_ITHREADS
+#  define ENV_LOCK            PERL_WRITE_LOCK(&PL_env_mutex)
+#  define ENV_UNLOCK          PERL_WRITE_UNLOCK(&PL_env_mutex)
+#  define ENV_READ_LOCK       PERL_READ_LOCK(&PL_env_mutex)
+#  define ENV_READ_UNLOCK     PERL_READ_UNLOCK(&PL_env_mutex)
+#  define ENV_INIT            PERL_RW_MUTEX_INIT(&PL_env_mutex)
+#  define ENV_TERM            PERL_RW_MUTEX_DESTROY(&PL_env_mutex)
+
+   /* On platforms where the static buffer contained in getenv() is per-thread
+    * rather than process-wide, another thread executing a getenv() at the same
+    * time won't destroy ours before we have copied the result safely away and
+    * unlocked the mutex.  On such platforms (which is most), we can have many
+    * readers of the environment at the same time. */
+#  ifdef GETENV_PRESERVES_OTHER_THREAD
+#    define GETENV_LOCK    ENV_READ_LOCK
+#    define GETENV_UNLOCK  ENV_READ_UNLOCK
+#  else
+     /* If, on the other hand, another thread could zap our getenv() return, we
+      * need to keep them from executing until we are done */
+#    define GETENV_LOCK    ENV_LOCK
+#    define GETENV_UNLOCK  ENV_UNLOCK
+#  endif
+#else
+#  define ENV_LOCK        NOOP
+#  define ENV_UNLOCK      NOOP
+#  define ENV_READ_LOCK   NOOP
+#  define ENV_READ_UNLOCK NOOP
+#  define ENV_INIT        NOOP
+#  define ENV_TERM        NOOP
+#  define GETENV_LOCK     NOOP
+#  define GETENV_UNLOCK   NOOP
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+/* Static inline funcs that depend on includes and declarations above.
+   Some of these reference functions in the perl object files, and some
+   compilers aren't smart enough to eliminate unused static inline
+   functions, so including this file in source code can cause link errors
+   even if the source code uses none of the functions. Hence including these
+   can be suppressed by setting PERL_NO_INLINE_FUNCTIONS. Doing this will
+   (obviously) result in unworkable XS code, but allows simple probing code
+   to continue to work, because it permits tests to include the perl headers
+   for definitions without creating a link dependency on the perl library
+   (which may not exist yet).
+*/
+
+START_EXTERN_C
+
+#  include "inline.h"
+
+END_EXTERN_C
+
+#endif
+
+/* Some critical sections need to lock both the locale and the environment.
+ * XXX khw intends to change this to lock both mutexes, but that brings up
+ * issues of potential deadlock, so should be done at the beginning of a
+ * development cycle.  So for now, it just locks the environment.  Note that
+ * many modern platforms are locale-thread-safe anyway, so locking the locale
+ * mutex is a no-op anyway */
+#define ENV_LOCALE_LOCK     ENV_LOCK
+#define ENV_LOCALE_UNLOCK   ENV_UNLOCK
+
+/* And some critical sections care only that no one else is writing either the
+ * locale nor the environment.  XXX Again this is for the future.  This can be
+ * simulated with using COND_WAIT in thread.h */
+#define ENV_LOCALE_READ_LOCK     ENV_LOCALE_LOCK
+#define ENV_LOCALE_READ_UNLOCK   ENV_LOCALE_UNLOCK
+
 #define Atof				my_atof
 
 /*
 
-=head1 Numeric functions
+=for apidoc_section $numeric
 
 =for apidoc AmTR|NV|Strtod|NN const char * const s|NULLOK char ** e
 
@@ -7049,15 +7323,9 @@
 /* START_MY_CXT must appear in all extensions that define a my_cxt_t structure,
  * right after the definition (i.e. at file scope).  The non-threads
  * case below uses it to declare the data as static. */
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#    define START_MY_CXT
-#    define MY_CXT_INDEX Perl_my_cxt_index(aTHX_ MY_CXT_KEY)
-#    define MY_CXT_INIT_ARG MY_CXT_KEY
-#  else
 #    define START_MY_CXT static int my_cxt_index = -1;
 #    define MY_CXT_INDEX my_cxt_index
 #    define MY_CXT_INIT_ARG &my_cxt_index
-#  endif /* #ifdef PERL_GLOBAL_STRUCT_PRIVATE */
 
 /* Creates and zeroes the per-interpreter data.
  * (We allocate my_cxtp in a Perl SV so that it will be released when
@@ -7101,9 +7369,7 @@
 #  define _aMY_CXT	,aMY_CXT
 
 #else /* PERL_IMPLICIT_CONTEXT */
-
 #  define START_MY_CXT		static my_cxt_t my_cxt;
-#  define dMY_CXT_SV	    	dNOOP
 #  define dMY_CXT		dNOOP
 #  define dMY_CXT_INTERP(my_perl) dNOOP
 #  define MY_CXT_INIT		NOOP
@@ -7191,7 +7457,7 @@
 #define IS_NUMBER_TRAILING            0x40 /* number has trailing trash */
 
 /*
-=head1 Numeric functions
+=for apidoc_section $numeric
 
 =for apidoc AmdR|bool|GROK_NUMERIC_RADIX|NN const char **sp|NN const char *send
 
@@ -7261,6 +7527,8 @@
 
 #define PERL_MAGIC_UTF8_CACHESIZE	2
 
+#ifdef PERL_CORE
+
 #define PERL_UNICODE_STDIN_FLAG			0x0001
 #define PERL_UNICODE_STDOUT_FLAG		0x0002
 #define PERL_UNICODE_STDERR_FLAG		0x0004
@@ -7299,12 +7567,23 @@
 #define PERL_UNICODE_WIDESYSCALLS		'W'
 #define PERL_UNICODE_UTF8CACHEASSERT		'a'
 
+#endif
+
+/*
+=for apidoc_section $signals
+=for apidoc Amn|U32|PERL_SIGNALS_UNSAFE_FLAG
+If this bit in C<PL_signals> is set, the system is uing the pre-Perl 5.8
+unsafe signals.  See L<perlrun/PERL_SIGNALS> and L<perlipc/Deferred Signals
+(Safe Signals)>.
+
+=cut
+*/
 #define PERL_SIGNALS_UNSAFE_FLAG	0x0001
 
 /*
-=head1 Numeric functions
+=for apidoc_section $numeric
 
-=for apidoc Am|int|PERL_ABS|int
+=for apidoc Am|int|PERL_ABS|int x
 
 Typeless C<abs> or C<fabs>, I<etc>.  (The usage below indicates it is for
 integers, but it works for any type.)  Use instead of these, since the C
@@ -7334,7 +7613,7 @@
 
 
 /*
-=head1 Miscellaneous Functions
+=for apidoc_section $utility
 
 =for apidoc Am|bool|IS_SAFE_SYSCALL|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perl_inc_macro.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -24,7 +24,7 @@
 
 #ifdef APPLLIB_EXP
 #	define INCPUSH_APPLLIB_EXP  S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), \
-		      INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+                      INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
 #endif
 
 #ifdef SITEARCH_EXP
@@ -32,7 +32,7 @@
      * DLL-based path intuition to work correctly */
 #  if !defined(WIN32)
 #	define INCPUSH_SITEARCH_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITEARCH_EXP), \
-			  INCPUSH_CAN_RELOCATE);
+                          INCPUSH_CAN_RELOCATE);
 #  endif
 #endif
 
@@ -40,10 +40,10 @@
 #  if defined(WIN32)
     /* this picks up sitearch as well */
 #	  define INCPUSH_SITELIB_EXP s = PerlEnv_sitelib_path(PERL_FS_VERSION, &len); \
-		if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+                if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
 #  else
 #	  define INCPUSH_SITELIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_EXP), \
-		INCPUSH_CAN_RELOCATE);
+                INCPUSH_CAN_RELOCATE);
 #  endif
 #endif
 
@@ -59,7 +59,7 @@
 #  if defined(WIN32)
     /* this picks up vendorarch as well */
 #		define INCPUSH_PERL_VENDORLIB_EXP s = PerlEnv_vendorlib_path(PERL_FS_VERSION, &len); \
-			if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+                        if (s) incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
 #  else
 #		define INCPUSH_PERL_VENDORLIB_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_EXP), INCPUSH_CAN_RELOCATE);
 #  endif
@@ -85,7 +85,7 @@
 
 #ifdef PERL_OTHERLIBDIRS
 #	define INCPUSH_PERL_OTHERLIBDIRS S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \
-		      INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
+                      INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
 #endif
 
 
@@ -106,17 +106,17 @@
 # define _INCPUSH_PERL5LIB_ADD _INCPUSH_PERL5LIB_IF incpush_use_sep(perl5lib, 0, INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR);
 #else
 /* VMS */
-	/* Treat PERL5?LIB as a possible search list logical name -- the
-	 * "natural" VMS idiom for a Unix path string.  We allow each
-	 * element to be a set of |-separated directories for compatibility.
-	 */
+        /* Treat PERL5?LIB as a possible search list logical name -- the
+         * "natural" VMS idiom for a Unix path string.  We allow each
+         * element to be a set of |-separated directories for compatibility.
+         */
 # define _INCPUSH_PERL5LIB_ADD char buf[256]; \
-	int idx = 0; \
-	if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) \
-	    do { \
-		incpush_use_sep(buf, 0, \
-				INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR); \
-	    } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0));
+        int idx = 0; \
+        if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) \
+            do { \
+                incpush_use_sep(buf, 0, \
+                                INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR); \
+            } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0));
 #endif
 
 /* this macro is special and use submacros from above */
@@ -127,13 +127,13 @@
 */
 #ifdef APPLLIB_EXP
 #	define INCPUSH_APPLLIB_OLD_EXP S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), \
-	    INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
+            INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
 #endif
 
 #if defined(SITELIB_STEM) && defined(PERL_INC_VERSION_LIST)
     /* Search for version-specific dirs below here */
 #	define INCPUSH_SITELIB_STEM   S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_STEM), \
-		      INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
+                      INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
 #endif
 
 
@@ -140,12 +140,12 @@
 #if defined(PERL_VENDORLIB_STEM) && defined(PERL_INC_VERSION_LIST)
     /* Search for version-specific dirs below here */
 #	define INCPUSH_PERL_VENDORLIB_STEM    S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_STEM), \
-		      INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
+                      INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
 #endif
 
 #ifdef PERL_OTHERLIBDIRS
 #	define INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY  S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS), \
-		      INCPUSH_ADD_OLD_VERS|INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_CAN_RELOCATE);
+                      INCPUSH_ADD_OLD_VERS|INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_CAN_RELOCATE);
 #endif
 
 

Added: trunk/Master/tlpkg/tlperl/lib/CORE/perl_siphash.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perl_siphash.h	                        (rev 0)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perl_siphash.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -0,0 +1,127 @@
+/* This is SipHash by Jean-Philippe Aumasson and Daniel J. Bernstein.
+ * The authors claim it is relatively secure compared to the alternatives
+ * and that performance wise it is a suitable hash for languages like Perl.
+ * See:
+ *
+ * https://www.131002.net/siphash/
+ *
+ * This implementation seems to perform slightly slower than one-at-a-time for
+ * short keys, but degrades slower for longer keys. Murmur Hash outperforms it
+ * regardless of keys size.
+ *
+ * It is 64 bit only.
+ */
+
+#ifdef CAN64BITHASH
+
+#define SIPROUND            \
+  STMT_START {              \
+    v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \
+    v2 += v3; v3=ROTL64(v3,16); v3 ^= v2;     \
+    v0 += v3; v3=ROTL64(v3,21); v3 ^= v0;     \
+    v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \
+  } STMT_END
+
+#define SIPHASH_SEED_STATE(key,v0,v1,v2,v3) \
+do {                                    \
+    v0 = v2 = U8TO64_LE(key + 0);       \
+    v1 = v3 = U8TO64_LE(key + 8);       \
+  /* "somepseudorandomlygeneratedbytes" */  \
+    v0 ^= UINT64_C(0x736f6d6570736575);  \
+    v1 ^= UINT64_C(0x646f72616e646f6d);      \
+    v2 ^= UINT64_C(0x6c7967656e657261);      \
+    v3 ^= UINT64_C(0x7465646279746573);      \
+} while (0)
+
+PERL_STATIC_INLINE
+void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned char * state_buf) {
+    U64 *v= (U64*) state_buf;
+    SIPHASH_SEED_STATE(seed_buf, v[0],v[1],v[2],v[3]);
+}
+
+#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \
+PERL_STATIC_INLINE U64 \
+FNC ## _with_state_64 \
+  (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
+{                                           \
+  const int left = inlen & 7;               \
+  const U8 *end = in + inlen - left;        \
+                                            \
+  U64 b = ( ( U64 )(inlen) ) << 56;         \
+  U64 m;                                    \
+  U64 v0 = U8TO64_LE(state);                \
+  U64 v1 = U8TO64_LE(state+8);              \
+  U64 v2 = U8TO64_LE(state+16);             \
+  U64 v3 = U8TO64_LE(state+24);             \
+                                            \
+  for ( ; in != end; in += 8 )              \
+  {                                         \
+    m = U8TO64_LE( in );                    \
+    v3 ^= m;                                \
+                                            \
+    SIP_ROUNDS;                             \
+                                            \
+    v0 ^= m;                                \
+  }                                         \
+                                            \
+  switch( left )                            \
+  {                                         \
+  case 7: b |= ( ( U64 )in[ 6] )  << 48; /*FALLTHROUGH*/    \
+  case 6: b |= ( ( U64 )in[ 5] )  << 40; /*FALLTHROUGH*/    \
+  case 5: b |= ( ( U64 )in[ 4] )  << 32; /*FALLTHROUGH*/    \
+  case 4: b |= ( ( U64 )in[ 3] )  << 24; /*FALLTHROUGH*/    \
+  case 3: b |= ( ( U64 )in[ 2] )  << 16; /*FALLTHROUGH*/    \
+  case 2: b |= ( ( U64 )in[ 1] )  <<  8; /*FALLTHROUGH*/    \
+  case 1: b |= ( ( U64 )in[ 0] ); break;    \
+  case 0: break;                            \
+  }                                         \
+                                            \
+  v3 ^= b;                                  \
+                                            \
+  SIP_ROUNDS;                               \
+                                            \
+  v0 ^= b;                                  \
+                                            \
+  v2 ^= 0xff;                               \
+                                            \
+  SIP_FINAL_ROUNDS                          \
+                                            \
+  b = v0 ^ v1 ^ v2  ^ v3;                   \
+  return b;                                 \
+}                                           \
+                                            \
+PERL_STATIC_INLINE U32                      \
+FNC ## _with_state                          \
+  (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
+{                                           \
+    union {                                 \
+        U64 h64;                            \
+        U32 h32[2];                         \
+    } h;                                    \
+    h.h64= FNC ## _with_state_64(state,in,inlen); \
+    return h.h32[0] ^ h.h32[1];             \
+}                                           \
+                                            \
+                                            \
+PERL_STATIC_INLINE U32                      \
+FNC (const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) \
+{                                                                   \
+    U64 state[4];                                                   \
+    SIPHASH_SEED_STATE(seed,state[0],state[1],state[2],state[3]);   \
+    return FNC ## _with_state((U8*)state,in,inlen);                 \
+}
+
+
+PERL_SIPHASH_FNC(
+    S_perl_hash_siphash_1_3
+    ,SIPROUND;
+    ,SIPROUND;SIPROUND;SIPROUND;
+)
+
+PERL_SIPHASH_FNC(
+    S_perl_hash_siphash_2_4
+    ,SIPROUND;SIPROUND;
+    ,SIPROUND;SIPROUND;SIPROUND;SIPROUND;
+)
+
+#endif /* defined(CAN64BITHASH) */


Property changes on: trunk/Master/tlpkg/tlperl/lib/CORE/perl_siphash.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Master/tlpkg/tlperl/lib/CORE/perlapi.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perlapi.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perlapi.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,4 +1,4 @@
-/* -*- buffer-read-only: t -*-
+/*
  *
  *    perlapi.h
  *
@@ -8,221 +8,15 @@
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
  *
- * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
- * This file is built by regen/embed.pl from data in embed.fnc,
- * regen/embed.pl, regen/opcodes, intrpvar.h and perlvars.h.
- * Any changes made here will be lost!
- *
- * Edit those files and run 'make regen_headers' to effect changes.
  */
 
-/* declare accessor functions for Perl variables */
+/*
+ * This file used to declare accessor functions for Perl variables
+ * when PERL_GLOBAL_STRUCT was enabled, but that no longer exists.
+ * This file is kept for backwards compatiblity with XS code that
+ * might include it.
+ */
 #ifndef __perlapi_h__
 #define __perlapi_h__
 
-#if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT)
-
-START_EXTERN_C
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(p,v,t)	EXTERN_C t* Perl_##p##v##_ptr(pTHX);
-#define PERLVARA(p,v,n,t)	typedef t PL_##v##_t[n];		\
-			EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX);
-#define PERLVARI(p,v,t,i)	PERLVAR(p,v,t)
-#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t)
-
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-END_EXTERN_C
-
-#if defined(PERL_CORE)
-
-/* accessor functions for Perl "global" variables */
-
-/* these need to be mentioned here, or most linkers won't put them in
-   the perl executable */
-
-#ifndef PERL_NO_FORCE_LINK
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXTCONST void * const PL_force_link_funcs[];
-#else
-EXTCONST void * const PL_force_link_funcs[] = {
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(p,v,t)		(void*)Perl_##p##v##_ptr,
-#define PERLVARA(p,v,n,t)	PERLVAR(p,v,t)
-#define PERLVARI(p,v,t,i)	PERLVAR(p,v,t)
-#define PERLVARIC(p,v,t,i)	PERLVAR(p,v,t)
-
-/* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
- * cannot cast between void pointers and function pointers without
- * info level warnings.  The PL_force_link_funcs[] would cause a few
- * hundred of those warnings.  In code one can circumnavigate this by using
- * unions that overlay the different pointers, but in declarations one
- * cannot use this trick.  Therefore we just disable the warning here
- * for the duration of the PL_force_link_funcs[] declaration. */
-
-#if defined(__DECC) && defined(__osf__)
-#pragma message save
-#pragma message disable (nonstandcast)
-#endif
-
-#include "perlvars.h"
-
-#if defined(__DECC) && defined(__osf__)
-#pragma message restore
-#endif
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-};
-#endif	/* DOINIT */
-
-END_EXTERN_C
-
-#endif	/* PERL_NO_FORCE_LINK */
-
-#else	/* !PERL_CORE */
-
-#undef  PL_C_locale_obj
-#define PL_C_locale_obj		(*Perl_GC_locale_obj_ptr(NULL))
-#undef  PL_appctx
-#define PL_appctx		(*Perl_Gappctx_ptr(NULL))
-#undef  PL_check
-#define PL_check		(*Perl_Gcheck_ptr(NULL))
-#undef  PL_check_mutex
-#define PL_check_mutex		(*Perl_Gcheck_mutex_ptr(NULL))
-#undef  PL_csighandler1p
-#define PL_csighandler1p	(*Perl_Gcsighandler1p_ptr(NULL))
-#undef  PL_csighandler3p
-#define PL_csighandler3p	(*Perl_Gcsighandler3p_ptr(NULL))
-#undef  PL_csighandlerp
-#define PL_csighandlerp		(*Perl_Gcsighandlerp_ptr(NULL))
-#undef  PL_curinterp
-#define PL_curinterp		(*Perl_Gcurinterp_ptr(NULL))
-#undef  PL_do_undump
-#define PL_do_undump		(*Perl_Gdo_undump_ptr(NULL))
-#undef  PL_dollarzero_mutex
-#define PL_dollarzero_mutex	(*Perl_Gdollarzero_mutex_ptr(NULL))
-#undef  PL_env_mutex
-#define PL_env_mutex		(*Perl_Genv_mutex_ptr(NULL))
-#undef  PL_fold_locale
-#define PL_fold_locale		(*Perl_Gfold_locale_ptr(NULL))
-#undef  PL_hash_chars
-#define PL_hash_chars		(*Perl_Ghash_chars_ptr(NULL))
-#undef  PL_hash_seed
-#define PL_hash_seed		(*Perl_Ghash_seed_ptr(NULL))
-#undef  PL_hash_seed_set
-#define PL_hash_seed_set	(*Perl_Ghash_seed_set_ptr(NULL))
-#undef  PL_hash_state
-#define PL_hash_state		(*Perl_Ghash_state_ptr(NULL))
-#undef  PL_hints_mutex
-#define PL_hints_mutex		(*Perl_Ghints_mutex_ptr(NULL))
-#undef  PL_keyword_plugin
-#define PL_keyword_plugin	(*Perl_Gkeyword_plugin_ptr(NULL))
-#undef  PL_keyword_plugin_mutex
-#define PL_keyword_plugin_mutex	(*Perl_Gkeyword_plugin_mutex_ptr(NULL))
-#undef  PL_lc_numeric_mutex
-#define PL_lc_numeric_mutex	(*Perl_Glc_numeric_mutex_ptr(NULL))
-#undef  PL_locale_mutex
-#define PL_locale_mutex		(*Perl_Glocale_mutex_ptr(NULL))
-#undef  PL_malloc_mutex
-#define PL_malloc_mutex		(*Perl_Gmalloc_mutex_ptr(NULL))
-#undef  PL_mmap_page_size
-#define PL_mmap_page_size	(*Perl_Gmmap_page_size_ptr(NULL))
-#undef  PL_my_ctx_mutex
-#define PL_my_ctx_mutex		(*Perl_Gmy_ctx_mutex_ptr(NULL))
-#undef  PL_my_cxt_index
-#define PL_my_cxt_index		(*Perl_Gmy_cxt_index_ptr(NULL))
-#undef  PL_my_cxt_keys
-#define PL_my_cxt_keys		(*Perl_Gmy_cxt_keys_ptr(NULL))
-#undef  PL_my_cxt_keys_size
-#define PL_my_cxt_keys_size	(*Perl_Gmy_cxt_keys_size_ptr(NULL))
-#undef  PL_op_mutex
-#define PL_op_mutex		(*Perl_Gop_mutex_ptr(NULL))
-#undef  PL_op_seq
-#define PL_op_seq		(*Perl_Gop_seq_ptr(NULL))
-#undef  PL_op_sequence
-#define PL_op_sequence		(*Perl_Gop_sequence_ptr(NULL))
-#undef  PL_perlio_debug_fd
-#define PL_perlio_debug_fd	(*Perl_Gperlio_debug_fd_ptr(NULL))
-#undef  PL_perlio_fd_refcnt
-#define PL_perlio_fd_refcnt	(*Perl_Gperlio_fd_refcnt_ptr(NULL))
-#undef  PL_perlio_fd_refcnt_size
-#define PL_perlio_fd_refcnt_size	(*Perl_Gperlio_fd_refcnt_size_ptr(NULL))
-#undef  PL_perlio_mutex
-#define PL_perlio_mutex		(*Perl_Gperlio_mutex_ptr(NULL))
-#undef  PL_perllib_sep
-#define PL_perllib_sep		(*Perl_Gperllib_sep_ptr(NULL))
-#undef  PL_ppaddr
-#define PL_ppaddr		(*Perl_Gppaddr_ptr(NULL))
-#undef  PL_sh_path
-#define PL_sh_path		(*Perl_Gsh_path_ptr(NULL))
-#undef  PL_sig_defaulting
-#define PL_sig_defaulting	(*Perl_Gsig_defaulting_ptr(NULL))
-#undef  PL_sig_handlers_initted
-#define PL_sig_handlers_initted	(*Perl_Gsig_handlers_initted_ptr(NULL))
-#undef  PL_sig_ignoring
-#define PL_sig_ignoring		(*Perl_Gsig_ignoring_ptr(NULL))
-#undef  PL_sig_trapped
-#define PL_sig_trapped		(*Perl_Gsig_trapped_ptr(NULL))
-#undef  PL_sigfpe_saved
-#define PL_sigfpe_saved		(*Perl_Gsigfpe_saved_ptr(NULL))
-#undef  PL_strategy_accept
-#define PL_strategy_accept	(*Perl_Gstrategy_accept_ptr(NULL))
-#undef  PL_strategy_dup
-#define PL_strategy_dup		(*Perl_Gstrategy_dup_ptr(NULL))
-#undef  PL_strategy_dup2
-#define PL_strategy_dup2	(*Perl_Gstrategy_dup2_ptr(NULL))
-#undef  PL_strategy_mkstemp
-#define PL_strategy_mkstemp	(*Perl_Gstrategy_mkstemp_ptr(NULL))
-#undef  PL_strategy_open
-#define PL_strategy_open	(*Perl_Gstrategy_open_ptr(NULL))
-#undef  PL_strategy_open3
-#define PL_strategy_open3	(*Perl_Gstrategy_open3_ptr(NULL))
-#undef  PL_strategy_pipe
-#define PL_strategy_pipe	(*Perl_Gstrategy_pipe_ptr(NULL))
-#undef  PL_strategy_socket
-#define PL_strategy_socket	(*Perl_Gstrategy_socket_ptr(NULL))
-#undef  PL_strategy_socketpair
-#define PL_strategy_socketpair	(*Perl_Gstrategy_socketpair_ptr(NULL))
-#undef  PL_sv_placeholder
-#define PL_sv_placeholder	(*Perl_Gsv_placeholder_ptr(NULL))
-#undef  PL_thr_key
-#define PL_thr_key		(*Perl_Gthr_key_ptr(NULL))
-#undef  PL_timesbase
-#define PL_timesbase		(*Perl_Gtimesbase_ptr(NULL))
-#undef  PL_use_safe_putenv
-#define PL_use_safe_putenv	(*Perl_Guse_safe_putenv_ptr(NULL))
-#undef  PL_user_def_props
-#define PL_user_def_props	(*Perl_Guser_def_props_ptr(NULL))
-#undef  PL_user_def_props_aTHX
-#define PL_user_def_props_aTHX	(*Perl_Guser_def_props_aTHX_ptr(NULL))
-#undef  PL_user_prop_mutex
-#define PL_user_prop_mutex	(*Perl_Guser_prop_mutex_ptr(NULL))
-#undef  PL_veto_cleanup
-#define PL_veto_cleanup		(*Perl_Gveto_cleanup_ptr(NULL))
-#undef  PL_watch_pvx
-#define PL_watch_pvx		(*Perl_Gwatch_pvx_ptr(NULL))
-
-#endif /* !PERL_CORE */
-#endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */
-
 #endif /* __perlapi_h__ */
-
-/* ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/perlhost.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perlhost.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perlhost.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -32,10 +32,10 @@
     /* Constructors */
     CPerlHost(void);
     CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared,
-		 struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
-		 struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
-		 struct IPerlDir** ppDir, struct IPerlSock** ppSock,
-		 struct IPerlProc** ppProc);
+                 struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
+                 struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
+                 struct IPerlDir** ppDir, struct IPerlSock** ppSock,
+                 struct IPerlProc** ppProc);
     CPerlHost(CPerlHost& host);
     ~CPerlHost(void);
 
@@ -61,11 +61,11 @@
     inline void Free(void* ptr) { m_pVMem->Free(ptr); };
     inline void* Calloc(size_t num, size_t size)
     {
-	size_t count = num*size;
-	void* lpVoid = Malloc(count);
-	if (lpVoid)
-	    ZeroMemory(lpVoid, count);
-	return lpVoid;
+        size_t count = num*size;
+        void* lpVoid = Malloc(count);
+        if (lpVoid)
+            ZeroMemory(lpVoid, count);
+        return lpVoid;
     };
     inline void GetLock(void) { m_pVMem->GetLock(); };
     inline void FreeLock(void) { m_pVMem->FreeLock(); };
@@ -78,33 +78,33 @@
     inline int IsLockedShared(void) { return m_pVMemShared->IsLocked(); };
     inline void* MallocShared(size_t size)
     {
-	void *result;
-	GetLockShared();
-	result = m_pVMemShared->Malloc(size);
-	FreeLockShared();
-	return result;
+        void *result;
+        GetLockShared();
+        result = m_pVMemShared->Malloc(size);
+        FreeLockShared();
+        return result;
     };
     inline void* ReallocShared(void* ptr, size_t size)
     {
-	void *result;
-	GetLockShared();
-	result = m_pVMemShared->Realloc(ptr, size);
-	FreeLockShared();
-	return result;
+        void *result;
+        GetLockShared();
+        result = m_pVMemShared->Realloc(ptr, size);
+        FreeLockShared();
+        return result;
     };
     inline void FreeShared(void* ptr)
     {
-	GetLockShared();
-	m_pVMemShared->Free(ptr);
-	FreeLockShared();
+        GetLockShared();
+        m_pVMemShared->Free(ptr);
+        FreeLockShared();
     };
     inline void* CallocShared(size_t num, size_t size)
     {
-	size_t count = num*size;
-	void* lpVoid = MallocShared(count);
-	if (lpVoid)
-	    ZeroMemory(lpVoid, count);
-	return lpVoid;
+        size_t count = num*size;
+        void* lpVoid = MallocShared(count);
+        if (lpVoid)
+            ZeroMemory(lpVoid, count);
+        return lpVoid;
     };
 
 /* IPerlMemParse */
@@ -119,11 +119,11 @@
     inline void FreeParse(void* ptr) { m_pVMemParse->Free(ptr); };
     inline void* CallocParse(size_t num, size_t size)
     {
-	size_t count = num*size;
-	void* lpVoid = MallocParse(count);
-	if (lpVoid)
-	    ZeroMemory(lpVoid, count);
-	return lpVoid;
+        size_t count = num*size;
+        void* lpVoid = MallocParse(count);
+        if (lpVoid)
+            ZeroMemory(lpVoid, count);
+        return lpVoid;
     };
 
 /* IPerlEnv */
@@ -131,11 +131,11 @@
     int Putenv(const char *envstring);
     inline char *Getenv(const char *varname, unsigned long *len)
     {
-	*len = 0;
-	char *e = Getenv(varname);
-	if (e)
-	    *len = strlen(e);
-	return e;
+        *len = 0;
+        char *e = Getenv(varname);
+        if (e)
+            *len = strlen(e);
+        return e;
     }
     void* CreateChildEnv(void) { return CreateLocalEnvironmentStrings(*m_pvDir); };
     void FreeChildEnv(void* pStr) { FreeLocalEnvironmentStrings((char*)pStr); };
@@ -146,12 +146,12 @@
 
     inline LPSTR GetIndex(DWORD &dwIndex)
     {
-	if(dwIndex < m_dwEnvCount)
-	{
-	    ++dwIndex;
-	    return m_lppEnvList[dwIndex-1];
-	}
-	return NULL;
+        if(dwIndex < m_dwEnvCount)
+        {
+            ++dwIndex;
+            return m_lppEnvList[dwIndex-1];
+        }
+        return NULL;
     };
 
 protected:
@@ -524,7 +524,7 @@
 
 char*
 PerlEnvVendorLibPath(struct IPerlEnv* piPerl, const char *pl,
-		     STRLEN *const len)
+                     STRLEN *const len)
 {
     return win32_get_vendorlib(pl, len);
 }
@@ -833,17 +833,17 @@
 
     /* open the file in the same mode */
     if (PERLIO_FILE_flag(pf) & PERLIO_FILE_flag_RD) {
-	mode[0] = 'r';
-	mode[1] = 0;
+        mode[0] = 'r';
+        mode[1] = 0;
     }
     else if (PERLIO_FILE_flag(pf) & PERLIO_FILE_flag_WR) {
-	mode[0] = 'a';
-	mode[1] = 0;
+        mode[0] = 'a';
+        mode[1] = 0;
     }
     else if (PERLIO_FILE_flag(pf) & PERLIO_FILE_flag_RW) {
-	mode[0] = 'r';
-	mode[1] = '+';
-	mode[2] = 0;
+        mode[0] = 'r';
+        mode[1] = '+';
+        mode[2] = 0;
     }
 
     /* it appears that the binmode is attached to the
@@ -854,7 +854,7 @@
 
     /* move the file pointer to the same position */
     if (!fgetpos(pf, &pos)) {
-	fsetpos(pfdup, &pos);
+        fsetpos(pfdup, &pos);
     }
     return pfdup;
 }
@@ -986,6 +986,18 @@
     return win32_link(oldname, newname);
 }
 
+int
+PerlLIOSymLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname)
+{
+    return win32_symlink(oldname, newname);
+}
+
+int
+PerlLIOReadLink(struct IPerlLIO* piPerl, const char *path, char *buf, size_t bufsiz)
+{
+    return win32_readlink(path, buf, bufsiz);
+}
+
 Off_t
 PerlLIOLseek(struct IPerlLIO* piPerl, int handle, Off_t offset, int origin)
 {
@@ -995,7 +1007,7 @@
 int
 PerlLIOLstat(struct IPerlLIO* piPerl, const char *path, Stat_t *buffer)
 {
-    return win32_stat(path, buffer);
+    return win32_lstat(path, buffer);
 }
 
 char*
@@ -1098,6 +1110,8 @@
     PerlLIOUnlink,
     PerlLIOUtime,
     PerlLIOWrite,
+    PerlLIOSymLink,
+    PerlLIOReadLink
 };
 
 
@@ -1710,10 +1724,10 @@
 
     /* push a zero on the stack (we are the child) */
     {
-	dSP;
-	dTARGET;
-	PUSHi(0);
-	PUTBACK;
+        dSP;
+        dTARGET;
+        PUSHi(0);
+        PUTBACK;
     }
 
     /* continue from next op */
@@ -1720,14 +1734,14 @@
     PL_op = PL_op->op_next;
 
     {
-	dJMPENV;
-	volatile int oldscope = 1; /* We are responsible for all scopes */
+        dJMPENV;
+        volatile int oldscope = 1; /* We are responsible for all scopes */
 
 restart:
-	JMPENV_PUSH(status);
-	switch (status) {
-	case 0:
-	    CALLRUNOPS(aTHX);
+        JMPENV_PUSH(status);
+        switch (status) {
+        case 0:
+            CALLRUNOPS(aTHX);
             /* We may have additional unclosed scopes if fork() was called
              * from within a BEGIN block.  See perlfork.pod for more details.
              * We cannot clean up these other scopes because they belong to a
@@ -1738,48 +1752,48 @@
                 PL_scopestack[oldscope-1] = PL_scopestack[PL_scopestack_ix-1];
                 PL_scopestack_ix = oldscope;
             }
-	    status = 0;
-	    break;
-	case 2:
-	    while (PL_scopestack_ix > oldscope)
-		LEAVE;
-	    FREETMPS;
-	    PL_curstash = PL_defstash;
-	    if (PL_curstash != PL_defstash) {
-		SvREFCNT_dec(PL_curstash);
-		PL_curstash = (HV *)SvREFCNT_inc(PL_defstash);
-	    }
-	    if (PL_endav && !PL_minus_c) {
-		PERL_SET_PHASE(PERL_PHASE_END);
-		call_list(oldscope, PL_endav);
-	    }
-	    status = STATUS_EXIT;
-	    break;
-	case 3:
-	    if (PL_restartop) {
-		POPSTACK_TO(PL_mainstack);
-		PL_op = PL_restartop;
-		PL_restartop = (OP*)NULL;
-		goto restart;
-	    }
-	    PerlIO_printf(Perl_error_log, "panic: restartop\n");
-	    FREETMPS;
-	    status = 1;
-	    break;
-	}
-	JMPENV_POP;
+            status = 0;
+            break;
+        case 2:
+            while (PL_scopestack_ix > oldscope)
+                LEAVE;
+            FREETMPS;
+            PL_curstash = PL_defstash;
+            if (PL_curstash != PL_defstash) {
+                SvREFCNT_dec(PL_curstash);
+                PL_curstash = (HV *)SvREFCNT_inc(PL_defstash);
+            }
+            if (PL_endav && !PL_minus_c) {
+                PERL_SET_PHASE(PERL_PHASE_END);
+                call_list(oldscope, PL_endav);
+            }
+            status = STATUS_EXIT;
+            break;
+        case 3:
+            if (PL_restartop) {
+                POPSTACK_TO(PL_mainstack);
+                PL_op = PL_restartop;
+                PL_restartop = (OP*)NULL;
+                goto restart;
+            }
+            PerlIO_printf(Perl_error_log, "panic: restartop\n");
+            FREETMPS;
+            status = 1;
+            break;
+        }
+        JMPENV_POP;
 
-	/* XXX hack to avoid perl_destruct() freeing optree */
+        /* XXX hack to avoid perl_destruct() freeing optree */
         win32_checkTLS(my_perl);
-	PL_main_root = (OP*)NULL;
+        PL_main_root = (OP*)NULL;
     }
 
     win32_checkTLS(my_perl);
     /* close the std handles to avoid fd leaks */
     {
-	do_close(PL_stdingv, FALSE);
-	do_close(gv_fetchpv("STDOUT", TRUE, SVt_PVIO), FALSE); /* PL_stdoutgv - ISAGN */
-	do_close(PL_stderrgv, FALSE);
+        do_close(PL_stdingv, FALSE);
+        do_close(gv_fetchpv("STDOUT", TRUE, SVt_PVIO), FALSE); /* PL_stdoutgv - ISAGN */
+        do_close(PL_stderrgv, FALSE);
     }
 
     /* destroy everything (waits for any pseudo-forked children) */
@@ -1806,22 +1820,22 @@
     CPerlHost *h;
 
     if (w32_num_pseudo_children >= MAXIMUM_WAIT_OBJECTS) {
-	errno = EAGAIN;
-	return -1;
+        errno = EAGAIN;
+        return -1;
     }
     h = new CPerlHost(*(CPerlHost*)w32_internal_host);
     PerlInterpreter *new_perl = perl_clone_using((PerlInterpreter*)aTHX,
-						 CLONEf_COPY_STACKS,
-						 h->m_pHostperlMem,
-						 h->m_pHostperlMemShared,
-						 h->m_pHostperlMemParse,
-						 h->m_pHostperlEnv,
-						 h->m_pHostperlStdIO,
-						 h->m_pHostperlLIO,
-						 h->m_pHostperlDir,
-						 h->m_pHostperlSock,
-						 h->m_pHostperlProc
-						 );
+                                                 CLONEf_COPY_STACKS,
+                                                 h->m_pHostperlMem,
+                                                 h->m_pHostperlMemShared,
+                                                 h->m_pHostperlMemParse,
+                                                 h->m_pHostperlEnv,
+                                                 h->m_pHostperlStdIO,
+                                                 h->m_pHostperlLIO,
+                                                 h->m_pHostperlDir,
+                                                 h->m_pHostperlSock,
+                                                 h->m_pHostperlProc
+                                                 );
     new_perl->Isys_intern.internal_host = h;
     h->host_perl = new_perl;
 #  ifdef PERL_SYNC_FORK
@@ -1835,15 +1849,15 @@
         (w32_message_hwnd == NULL) ? (HWND)NULL : (HWND)INVALID_HANDLE_VALUE;
 #    ifdef USE_RTL_THREAD_API
     handle = (HANDLE)_beginthreadex((void*)NULL, 0, win32_start_child,
-				    (void*)new_perl, 0, (unsigned*)&id);
+                                    (void*)new_perl, 0, (unsigned*)&id);
 #    else
     handle = CreateThread(NULL, 0, win32_start_child,
-			  (LPVOID)new_perl, 0, &id);
+                          (LPVOID)new_perl, 0, &id);
 #    endif
     PERL_SET_THX(aTHX);	/* XXX perl_clone*() set TLS */
     if (!handle) {
-	errno = EAGAIN;
-	return -1;
+        errno = EAGAIN;
+        return -1;
     }
     w32_pseudo_child_handles[w32_num_pseudo_children] = handle;
     w32_pseudo_child_pids[w32_num_pseudo_children] = id;
@@ -1971,20 +1985,20 @@
 
 #define SETUPEXCHANGE(xptr, iptr, table) \
     STMT_START {				\
-	if (xptr) {				\
-	    iptr = *xptr;			\
-	    *xptr = &table;			\
-	}					\
-	else {					\
-	    iptr = &table;			\
-	}					\
+        if (xptr) {				\
+            iptr = *xptr;			\
+            *xptr = &table;			\
+        }					\
+        else {					\
+            iptr = &table;			\
+        }					\
     } STMT_END
 
 CPerlHost::CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared,
-		 struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
-		 struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
-		 struct IPerlDir** ppDir, struct IPerlSock** ppSock,
-		 struct IPerlProc** ppProc)
+                 struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
+                 struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
+                 struct IPerlDir** ppDir, struct IPerlSock** ppSock,
+                 struct IPerlProc** ppProc)
 {
     InterlockedIncrement(&num_hosts);
     m_pvDir = new VDir(0);
@@ -2059,7 +2073,7 @@
     LPSTR lpPtr;
     DWORD dwIndex = 0;
     while(lpPtr = host.GetIndex(dwIndex))
-	Add(lpPtr);
+        Add(lpPtr);
 }
 
 CPerlHost::~CPerlHost(void)
@@ -2078,13 +2092,13 @@
     LPSTR lpPtr;
     LPSTR* lppPtr = Lookup(lpStr);
     if(lppPtr != NULL) {
-	for(lpPtr = *lppPtr; *lpPtr != '\0' && *lpPtr != '='; ++lpPtr)
-	    ;
+        for(lpPtr = *lppPtr; *lpPtr != '\0' && *lpPtr != '='; ++lpPtr)
+            ;
 
-	if(*lpPtr == '=')
-	    ++lpPtr;
+        if(*lpPtr == '=')
+            ++lpPtr;
 
-	return lpPtr;
+        return lpPtr;
     }
     return NULL;
 }
@@ -2098,26 +2112,26 @@
     ptr1 = *(char**)arg1;
     ptr2 = *(char**)arg2;
     for(;;) {
-	c1 = *ptr1++;
-	c2 = *ptr2++;
-	if(c1 == '\0' || c1 == '=') {
-	    if(c2 == '\0' || c2 == '=')
-		break;
+        c1 = *ptr1++;
+        c2 = *ptr2++;
+        if(c1 == '\0' || c1 == '=') {
+            if(c2 == '\0' || c2 == '=')
+                break;
 
-	    return -1; // string 1 < string 2
-	}
-	else if(c2 == '\0' || c2 == '=')
-	    return 1; // string 1 > string 2
-	else if(c1 != c2) {
-	    c1 = toupper(c1);
-	    c2 = toupper(c2);
-	    if(c1 != c2) {
-		if(c1 < c2)
-		    return -1; // string 1 < string 2
+            return -1; // string 1 < string 2
+        }
+        else if(c2 == '\0' || c2 == '=')
+            return 1; // string 1 > string 2
+        else if(c1 != c2) {
+            c1 = toupper(c1);
+            c2 = toupper(c2);
+            if(c1 != c2) {
+                if(c1 < c2)
+                    return -1; // string 1 < string 2
 
-		return 1; // string 1 > string 2
-	    }
-	}
+                return 1; // string 1 > string 2
+            }
+        }
     }
     return 0;
 }
@@ -2126,7 +2140,7 @@
 CPerlHost::Lookup(LPCSTR lpStr)
 {
     if (!lpStr)
-	return NULL;
+        return NULL;
     return (LPSTR*)bsearch(&lpStr, m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), lookup);
 }
 
@@ -2139,26 +2153,26 @@
     ptr1 = *(char**)arg1;
     ptr2 = *(char**)arg2;
     for(;;) {
-	c1 = *ptr1++;
-	c2 = *ptr2++;
-	if(c1 == '\0' || c1 == '=') {
-	    if(c1 == c2)
-		break;
+        c1 = *ptr1++;
+        c2 = *ptr2++;
+        if(c1 == '\0' || c1 == '=') {
+            if(c1 == c2)
+                break;
 
-	    return -1; // string 1 < string 2
-	}
-	else if(c2 == '\0' || c2 == '=')
-	    return 1; // string 1 > string 2
-	else if(c1 != c2) {
-	    c1 = toupper(c1);
-	    c2 = toupper(c2);
-	    if(c1 != c2) {
-		if(c1 < c2)
-		    return -1; // string 1 < string 2
+            return -1; // string 1 < string 2
+        }
+        else if(c2 == '\0' || c2 == '=')
+            return 1; // string 1 > string 2
+        else if(c1 != c2) {
+            c1 = toupper(c1);
+            c2 = toupper(c2);
+            if(c1 != c2) {
+                if(c1 < c2)
+                    return -1; // string 1 < string 2
 
-		return 1; // string 1 > string 2
-	    }
-	}
+                return 1; // string 1 > string 2
+            }
+        }
     }
     return 0;
 }
@@ -2172,23 +2186,23 @@
     // replacing ?
     lpPtr = Lookup(lpStr);
     if (lpPtr != NULL) {
-	// must allocate things via host memory allocation functions 
-	// rather than perl's Renew() et al, as the perl interpreter
-	// may either not be initialized enough when we allocate these,
-	// or may already be dead when we go to free these
-	*lpPtr = (char*)Realloc(*lpPtr, length * sizeof(char));
-	strcpy(*lpPtr, lpStr);
+        // must allocate things via host memory allocation functions 
+        // rather than perl's Renew() et al, as the perl interpreter
+        // may either not be initialized enough when we allocate these,
+        // or may already be dead when we go to free these
+        *lpPtr = (char*)Realloc(*lpPtr, length * sizeof(char));
+        strcpy(*lpPtr, lpStr);
     }
     else {
-	m_lppEnvList = (LPSTR*)Realloc(m_lppEnvList, (m_dwEnvCount+1) * sizeof(LPSTR));
-	if (m_lppEnvList) {
-	    m_lppEnvList[m_dwEnvCount] = (char*)Malloc(length * sizeof(char));
-	    if (m_lppEnvList[m_dwEnvCount] != NULL) {
-		strcpy(m_lppEnvList[m_dwEnvCount], lpStr);
-		++m_dwEnvCount;
-		qsort(m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), compare);
-	    }
-	}
+        m_lppEnvList = (LPSTR*)Realloc(m_lppEnvList, (m_dwEnvCount+1) * sizeof(LPSTR));
+        if (m_lppEnvList) {
+            m_lppEnvList[m_dwEnvCount] = (char*)Malloc(length * sizeof(char));
+            if (m_lppEnvList[m_dwEnvCount] != NULL) {
+                strcpy(m_lppEnvList[m_dwEnvCount], lpStr);
+                ++m_dwEnvCount;
+                qsort(m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), compare);
+            }
+        }
     }
 }
 
@@ -2198,7 +2212,7 @@
     DWORD index;
     DWORD dwSize = 0;
     for(index = 0; index < m_dwEnvCount; ++index)
-	dwSize += strlen(m_lppEnvList[index]) + 1;
+        dwSize += strlen(m_lppEnvList[index]) + 1;
 
     return dwSize;
 }
@@ -2243,13 +2257,13 @@
 
     // step over current directory stuff
     while(*lpTmp == '=')
-	lpTmp += strlen(lpTmp) + 1;
+        lpTmp += strlen(lpTmp) + 1;
 
     // save the start of the environment strings
     lpEnvPtr = lpTmp;
     for(dwSize = 1; *lpTmp != '\0'; lpTmp += strlen(lpTmp) + 1) {
-	// calculate the size of the environment strings
-	dwSize += strlen(lpTmp) + 1;
+        // calculate the size of the environment strings
+        dwSize += strlen(lpTmp) + 1;
     }
 
     // add the size of current directories
@@ -2261,57 +2275,57 @@
     Newx(lpStr, dwSize, char);
     lpPtr = lpStr;
     if(lpStr != NULL) {
-	// build the local environment
-	lpStr = vDir.BuildEnvironmentSpace(lpStr);
+        // build the local environment
+        lpStr = vDir.BuildEnvironmentSpace(lpStr);
 
-	dwEnvIndex = 0;
-	lpLocalEnv = GetIndex(dwEnvIndex);
-	while(*lpEnvPtr != '\0') {
-	    if(!lpLocalEnv) {
-		// all environment overrides have been added
-		// so copy string into place
-		strcpy(lpStr, lpEnvPtr);
-		nLength = strlen(lpEnvPtr) + 1;
-		lpStr += nLength;
-		lpEnvPtr += nLength;
-	    }
-	    else {
-		// determine which string to copy next
-		compVal = compare(&lpEnvPtr, &lpLocalEnv);
-		if(compVal < 0) {
-		    strcpy(lpStr, lpEnvPtr);
-		    nLength = strlen(lpEnvPtr) + 1;
-		    lpStr += nLength;
-		    lpEnvPtr += nLength;
-		}
-		else {
-		    char *ptr = strchr(lpLocalEnv, '=');
-		    if(ptr && ptr[1]) {
-			strcpy(lpStr, lpLocalEnv);
-			lpStr += strlen(lpLocalEnv) + 1;
-		    }
-		    lpLocalEnv = GetIndex(dwEnvIndex);
-		    if(compVal == 0) {
-			// this string was replaced
-			lpEnvPtr += strlen(lpEnvPtr) + 1;
-		    }
-		}
-	    }
-	}
+        dwEnvIndex = 0;
+        lpLocalEnv = GetIndex(dwEnvIndex);
+        while(*lpEnvPtr != '\0') {
+            if(!lpLocalEnv) {
+                // all environment overrides have been added
+                // so copy string into place
+                strcpy(lpStr, lpEnvPtr);
+                nLength = strlen(lpEnvPtr) + 1;
+                lpStr += nLength;
+                lpEnvPtr += nLength;
+            }
+            else {
+                // determine which string to copy next
+                compVal = compare(&lpEnvPtr, &lpLocalEnv);
+                if(compVal < 0) {
+                    strcpy(lpStr, lpEnvPtr);
+                    nLength = strlen(lpEnvPtr) + 1;
+                    lpStr += nLength;
+                    lpEnvPtr += nLength;
+                }
+                else {
+                    char *ptr = strchr(lpLocalEnv, '=');
+                    if(ptr && ptr[1]) {
+                        strcpy(lpStr, lpLocalEnv);
+                        lpStr += strlen(lpLocalEnv) + 1;
+                    }
+                    lpLocalEnv = GetIndex(dwEnvIndex);
+                    if(compVal == 0) {
+                        // this string was replaced
+                        lpEnvPtr += strlen(lpEnvPtr) + 1;
+                    }
+                }
+            }
+        }
 
-	while(lpLocalEnv) {
-	    // still have environment overrides to add
-	    // so copy the strings into place if not an override
-	    char *ptr = strchr(lpLocalEnv, '=');
-	    if(ptr && ptr[1]) {
-		strcpy(lpStr, lpLocalEnv);
-		lpStr += strlen(lpLocalEnv) + 1;
-	    }
-	    lpLocalEnv = GetIndex(dwEnvIndex);
-	}
+        while(lpLocalEnv) {
+            // still have environment overrides to add
+            // so copy the strings into place if not an override
+            char *ptr = strchr(lpLocalEnv, '=');
+            if(ptr && ptr[1]) {
+                strcpy(lpStr, lpLocalEnv);
+                lpStr += strlen(lpLocalEnv) + 1;
+            }
+            lpLocalEnv = GetIndex(dwEnvIndex);
+        }
 
-	// add final NULL
-	*lpStr = '\0';
+        // add final NULL
+        *lpStr = '\0';
     }
 
     // release the process environment strings
@@ -2324,10 +2338,10 @@
 CPerlHost::Reset(void)
 {
     if(m_lppEnvList != NULL) {
-	for(DWORD index = 0; index < m_dwEnvCount; ++index) {
-	    Free(m_lppEnvList[index]);
-	    m_lppEnvList[index] = NULL;
-	}
+        for(DWORD index = 0; index < m_dwEnvCount; ++index) {
+            Free(m_lppEnvList[index]);
+            m_lppEnvList[index] = NULL;
+        }
     }
     m_dwEnvCount = 0;
     Free(m_lppEnvList);
@@ -2340,13 +2354,13 @@
     char ch;
     LPSTR lpPtr, lpStr, lpEnvPtr;
     if (m_lppEnvList != NULL) {
-	/* set every entry to an empty string */
-	for(DWORD index = 0; index < m_dwEnvCount; ++index) {
-	    char* ptr = strchr(m_lppEnvList[index], '=');
-	    if(ptr) {
-		*++ptr = 0;
-	    }
-	}
+        /* set every entry to an empty string */
+        for(DWORD index = 0; index < m_dwEnvCount; ++index) {
+            char* ptr = strchr(m_lppEnvList[index], '=');
+            if(ptr) {
+                *++ptr = 0;
+            }
+        }
     }
 
     /* get the process environment strings */
@@ -2354,19 +2368,19 @@
 
     /* step over current directory stuff */
     while(*lpStr == '=')
-	lpStr += strlen(lpStr) + 1;
+        lpStr += strlen(lpStr) + 1;
 
     while(*lpStr) {
-	lpPtr = strchr(lpStr, '=');
-	if(lpPtr) {
-	    ch = *++lpPtr;
-	    *lpPtr = 0;
-	    Add(lpStr);
-	    if (m_bTopLevel)
-		(void)win32_putenv(lpStr);
-	    *lpPtr = ch;
-	}
-	lpStr += strlen(lpStr) + 1;
+        lpPtr = strchr(lpStr, '=');
+        if(lpPtr) {
+            ch = *++lpPtr;
+            *lpPtr = 0;
+            Add(lpStr);
+            if (m_bTopLevel)
+                (void)win32_putenv(lpStr);
+            *lpPtr = ch;
+        }
+        lpStr += strlen(lpStr) + 1;
     }
 
     win32_freeenvironmentstrings(lpEnvPtr);
@@ -2377,9 +2391,9 @@
 CPerlHost::Getenv(const char *varname)
 {
     if (!m_bTopLevel) {
-	char *pEnv = Find(varname);
-	if (pEnv && *pEnv)
-	    return pEnv;
+        char *pEnv = Find(varname);
+        if (pEnv && *pEnv)
+            return pEnv;
     }
     return win32_getenv(varname);
 }
@@ -2389,7 +2403,7 @@
 {
     Add(envstring);
     if (m_bTopLevel)
-	return win32_putenv(envstring);
+        return win32_putenv(envstring);
 
     return 0;
 }
@@ -2399,12 +2413,12 @@
 {
     int ret;
     if (!dirname) {
-	errno = ENOENT;
-	return -1;
+        errno = ENOENT;
+        return -1;
     }
     ret = m_pvDir->SetCurrentDirectoryA((char*)dirname);
     if(ret < 0) {
-	errno = ENOENT;
+        errno = ENOENT;
     }
     return ret;
 }

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/perlio.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perlio.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perlio.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -63,22 +63,15 @@
 #define PerlIO PerlIO
 #define PERLIO_LAYERS 1
 
-/* PERLIO_FUNCS_CONST is now on by default for efficiency, PERLIO_FUNCS_CONST
-   can be removed 1 day once stable & then PerlIO vtables are permanently RO */
-#ifdef PERLIO_FUNCS_CONST
 #define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
 #define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
-#else
-#define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
-#define PERLIO_FUNCS_CAST(funcs) (funcs)
-#endif
 
 PERL_CALLCONV void PerlIO_define_layer(pTHX_ PerlIO_funcs *tab);
 PERL_CALLCONV PerlIO_funcs *PerlIO_find_layer(pTHX_ const char *name,
                                               STRLEN len,
-				              int load);
+                                              int load);
 PERL_CALLCONV PerlIO *PerlIO_push(pTHX_ PerlIO *f, PERLIO_FUNCS_DECL(*tab),
-			          const char *mode, SV *arg);
+                                  const char *mode, SV *arg);
 PERL_CALLCONV void PerlIO_pop(pTHX_ PerlIO *f);
 PERL_CALLCONV AV* PerlIO_get_layers(pTHX_ PerlIO *f);
 PERL_CALLCONV void PerlIO_clone(pTHX_ PerlInterpreter *proto,
@@ -189,8 +182,8 @@
 #endif
 #ifndef PerlIO_openn
 PERL_CALLCONV PerlIO *PerlIO_openn(pTHX_ const char *layers, const char *mode,
-				   int fd, int imode, int perm, PerlIO *old,
-				   int narg, SV **arg);
+                                   int fd, int imode, int perm, PerlIO *old,
+                                   int narg, SV **arg);
 #endif
 #ifndef PerlIO_eof
 PERL_CALLCONV int PerlIO_eof(PerlIO *);
@@ -315,11 +308,11 @@
 #endif
 #ifndef PerlIO_apply_layers
 PERL_CALLCONV int PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode,
-				      const char *names);
+                                      const char *names);
 #endif
 #ifndef PerlIO_binmode
 PERL_CALLCONV int PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int omode,
-			  	 const char *names);
+                                 const char *names);
 #endif
 #ifndef PerlIO_getname
 PERL_CALLCONV char *PerlIO_getname(PerlIO *, char *);

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/perliol.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perliol.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perliol.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -21,10 +21,10 @@
     IV (*Pushed) (pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
     IV (*Popped) (pTHX_ PerlIO *f);
     PerlIO *(*Open) (pTHX_ PerlIO_funcs *tab,
-		     PerlIO_list_t *layers, IV n,
-		     const char *mode,
-		     int fd, int imode, int perm,
-		     PerlIO *old, int narg, SV **args);
+                     PerlIO_list_t *layers, IV n,
+                     const char *mode,
+                     int fd, int imode, int perm,
+                     PerlIO *old, int narg, SV **args);
     IV (*Binmode)(pTHX_ PerlIO *f);
     SV *(*Getarg) (pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags);
     IV (*Fileno) (pTHX_ PerlIO *f);
@@ -106,23 +106,16 @@
 #define PerlIOValid(f)     ((f) && *(f))
 
 /*--------------------------------------------------------------------------------------*/
-/* Data exports - EXTCONST rather than extern is needed for Cygwin */
-#undef EXTPERLIO 
-#ifdef PERLIO_FUNCS_CONST
-#define EXTPERLIO EXTCONST
-#else
-#define EXTPERLIO EXT
-#endif
-EXTPERLIO PerlIO_funcs PerlIO_unix;
-EXTPERLIO PerlIO_funcs PerlIO_perlio;
-EXTPERLIO PerlIO_funcs PerlIO_stdio;
-EXTPERLIO PerlIO_funcs PerlIO_crlf;
-EXTPERLIO PerlIO_funcs PerlIO_utf8;
-EXTPERLIO PerlIO_funcs PerlIO_byte;
-EXTPERLIO PerlIO_funcs PerlIO_raw;
-EXTPERLIO PerlIO_funcs PerlIO_pending;
+EXTCONST PerlIO_funcs PerlIO_unix;
+EXTCONST PerlIO_funcs PerlIO_perlio;
+EXTCONST PerlIO_funcs PerlIO_stdio;
+EXTCONST PerlIO_funcs PerlIO_crlf;
+EXTCONST PerlIO_funcs PerlIO_utf8;
+EXTCONST PerlIO_funcs PerlIO_byte;
+EXTCONST PerlIO_funcs PerlIO_raw;
+EXTCONST PerlIO_funcs PerlIO_pending;
 #ifdef WIN32
-EXTPERLIO PerlIO_funcs PerlIO_win32;
+EXTCONST PerlIO_funcs PerlIO_win32;
 #endif
 PERL_CALLCONV PerlIO *PerlIO_allocate(pTHX);
 PERL_CALLCONV SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n);
@@ -151,7 +144,7 @@
 } PerlIOBuf;
 
 PERL_CALLCONV int PerlIO_apply_layera(pTHX_ PerlIO *f, const char *mode,
-		    PerlIO_list_t *layers, IV n, IV max);
+                    PerlIO_list_t *layers, IV n, IV max);
 PERL_CALLCONV int PerlIO_parse_layers(pTHX_ PerlIO_list_t *av, const char *names);
 PERL_CALLCONV PerlIO_funcs *PerlIO_layer_fetch(pTHX_ PerlIO_list_t *av, IV n, PerlIO_funcs *def);
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/perlvars.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perlvars.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perlvars.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -38,9 +38,9 @@
 PERLVAR(G, op_mutex,	perl_mutex)	/* Mutex for op refcounting */
 #endif
 PERLVARI(G, curinterp,	PerlInterpreter *, NULL)
-					/* currently running interpreter
-					 * (initial parent interpreter under
-					 * useithreads) */
+                                        /* currently running interpreter
+                                         * (initial parent interpreter under
+                                         * useithreads) */
 #if defined(USE_ITHREADS)
 PERLVAR(G, thr_key,	perl_key)	/* key to retrieve per-thread struct */
 #endif
@@ -57,7 +57,7 @@
 #endif
 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
 PERLVARA(G, sig_ignoring, SIG_SIZE, int)
-					/* which signals we are ignoring */
+                                        /* which signals we are ignoring */
 #endif
 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
 PERLVARA(G, sig_defaulting, SIG_SIZE, int)
@@ -104,10 +104,8 @@
 
 #if defined(USE_ITHREADS)
 PERLVAR(G, hints_mutex, perl_mutex)    /* Mutex for refcounted he refcounting */
-PERLVAR(G, env_mutex, perl_mutex)      /* Mutex for accessing ENV */
-#  if ! defined(USE_THREAD_SAFE_LOCALE) || defined(TS_W32_BROKEN_LOCALECONV)
-PERLVAR(G, locale_mutex, perl_mutex)   /* Mutex for setlocale() changing */
-#  endif
+PERLVAR(G, env_mutex, perl_RnW1_mutex_t)      /* Mutex for accessing ENV */
+PERLVAR(G, locale_mutex, perl_mutex)   /* Mutex related to locale handling */
 #  ifndef USE_THREAD_SAFE_LOCALE
 PERLVAR(G, lc_numeric_mutex, perl_mutex)   /* Mutex for switching LC_NUMERIC */
 #  endif
@@ -172,20 +170,7 @@
 #if defined(USE_ITHREADS)
 PERLVAR(G, check_mutex,	perl_mutex)	/* Mutex for PL_check */
 #endif
-#ifdef PERL_GLOBAL_STRUCT 
-PERLVAR(G, ppaddr,	Perl_ppaddr_t *) /* or opcode.h */
-PERLVAR(G, check,	Perl_check_t *) /* or opcode.h */
-PERLVARA(G, fold_locale, 256, unsigned char) /* or perl.h */
-#endif
 
-#ifdef PERL_NEED_APPCTX
-PERLVAR(G, appctx,	void*)		/* the application context */
-#endif
-
-#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE)
-PERLVAR(G, timesbase,	struct tms)
-#endif
-
 /* allocate a unique index to every module that calls MY_CXT_INIT */
 
 #ifdef PERL_IMPLICIT_CONTEXT
@@ -205,9 +190,9 @@
 Function pointer, pointing at a function used to handle extended keywords.
 The function should be declared as
 
-	int keyword_plugin_function(pTHX_
-		char *keyword_ptr, STRLEN keyword_len,
-		OP **op_ptr)
+        int keyword_plugin_function(pTHX_
+                char *keyword_ptr, STRLEN keyword_len,
+                OP **op_ptr)
 
 The function is called from the tokeniser, whenever a possible keyword
 is seen.  C<keyword_ptr> points at the word in the parser's input
@@ -279,9 +264,9 @@
 #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 */
@@ -320,13 +305,3 @@
 PERLVARI(G, strategy_accept,     int, 0)	/* doio.c */
 PERLVARI(G, strategy_pipe,       int, 0)	/* doio.c */
 PERLVARI(G, strategy_socketpair, int, 0)	/* doio.c */
-
-#ifdef PERL_IMPLICIT_CONTEXT
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-/* per-module array of pointers to MY_CXT_KEY constants.
- * It simulates each module having a static my_cxt_index var on builds
- * which don't allow static vars */
-PERLVARI(G, my_cxt_keys, const char **, NULL)
-PERLVARI(G, my_cxt_keys_size, int,	0)	/* size of PL_my_cxt_keys */
-#  endif
-#endif

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/perly.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/perly.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/perly.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -7,7 +7,7 @@
 #define PERL_BISON_VERSION  30003
 
 #ifdef PERL_CORE
-/* A Bison parser, made by GNU Bison 3.3.2.  */
+/* A Bison parser, made by GNU Bison 3.3.  */
 
 /* Bison interface for Yacc-like parsers in C
 
@@ -63,86 +63,109 @@
     GRAMFULLSTMT = 262,
     GRAMSTMTSEQ = 263,
     GRAMSUBSIGNATURE = 264,
-    BAREWORD = 265,
-    METHOD = 266,
-    FUNCMETH = 267,
-    THING = 268,
-    PMFUNC = 269,
-    PRIVATEREF = 270,
-    QWLIST = 271,
-    FUNC0OP = 272,
-    FUNC0SUB = 273,
-    UNIOPSUB = 274,
-    LSTOPSUB = 275,
-    PLUGEXPR = 276,
-    PLUGSTMT = 277,
-    LABEL = 278,
-    FORMAT = 279,
-    SUB = 280,
-    SIGSUB = 281,
-    ANONSUB = 282,
-    ANON_SIGSUB = 283,
-    PACKAGE = 284,
-    USE = 285,
-    WHILE = 286,
-    UNTIL = 287,
-    IF = 288,
-    UNLESS = 289,
-    ELSE = 290,
-    ELSIF = 291,
-    CONTINUE = 292,
-    FOR = 293,
-    GIVEN = 294,
-    WHEN = 295,
-    DEFAULT = 296,
-    LOOPEX = 297,
-    DOTDOT = 298,
-    YADAYADA = 299,
-    FUNC0 = 300,
-    FUNC1 = 301,
-    FUNC = 302,
-    UNIOP = 303,
-    LSTOP = 304,
-    MULOP = 305,
-    ADDOP = 306,
-    DOLSHARP = 307,
-    DO = 308,
-    HASHBRACK = 309,
-    NOAMP = 310,
-    LOCAL = 311,
-    MY = 312,
-    REQUIRE = 313,
-    COLONATTR = 314,
-    FORMLBRACK = 315,
-    FORMRBRACK = 316,
-    SUBLEXSTART = 317,
-    SUBLEXEND = 318,
-    PREC_LOW = 319,
-    OROP = 320,
-    DOROP = 321,
-    ANDOP = 322,
-    NOTOP = 323,
-    ASSIGNOP = 324,
-    OROR = 325,
-    DORDOR = 326,
-    ANDAND = 327,
-    BITOROP = 328,
-    BITANDOP = 329,
-    CHEQOP = 330,
-    NCEQOP = 331,
-    CHRELOP = 332,
-    NCRELOP = 333,
-    SHIFTOP = 334,
-    MATCHOP = 335,
-    UMINUS = 336,
-    REFGEN = 337,
-    POWOP = 338,
-    PREINC = 339,
-    PREDEC = 340,
-    POSTINC = 341,
-    POSTDEC = 342,
-    POSTJOIN = 343,
-    ARROW = 344
+    PERLY_AMPERSAND = 265,
+    PERLY_BRACE_OPEN = 266,
+    PERLY_BRACE_CLOSE = 267,
+    PERLY_BRACKET_OPEN = 268,
+    PERLY_BRACKET_CLOSE = 269,
+    PERLY_COMMA = 270,
+    PERLY_DOLLAR = 271,
+    PERLY_DOT = 272,
+    PERLY_EQUAL_SIGN = 273,
+    PERLY_MINUS = 274,
+    PERLY_PERCENT_SIGN = 275,
+    PERLY_PLUS = 276,
+    PERLY_SEMICOLON = 277,
+    PERLY_SLASH = 278,
+    PERLY_SNAIL = 279,
+    PERLY_STAR = 280,
+    BAREWORD = 281,
+    METHOD = 282,
+    FUNCMETH = 283,
+    THING = 284,
+    PMFUNC = 285,
+    PRIVATEREF = 286,
+    QWLIST = 287,
+    FUNC0OP = 288,
+    FUNC0SUB = 289,
+    UNIOPSUB = 290,
+    LSTOPSUB = 291,
+    PLUGEXPR = 292,
+    PLUGSTMT = 293,
+    LABEL = 294,
+    FORMAT = 295,
+    SUB = 296,
+    SIGSUB = 297,
+    ANONSUB = 298,
+    ANON_SIGSUB = 299,
+    PACKAGE = 300,
+    USE = 301,
+    WHILE = 302,
+    UNTIL = 303,
+    IF = 304,
+    UNLESS = 305,
+    ELSE = 306,
+    ELSIF = 307,
+    CONTINUE = 308,
+    FOR = 309,
+    GIVEN = 310,
+    WHEN = 311,
+    DEFAULT = 312,
+    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
 
@@ -195,6 +218,6 @@
 
 
 /* Generated from:
- * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
- * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
+ * 427b422b0ce1154d834dc461973a3254729575694f98ab600032f67ccab7b9e5 perly.y
+ * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl
  * ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/pp.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/pp.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/pp.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -11,7 +11,7 @@
 #define PP(s) OP * Perl_##s(pTHX)
 
 /*
-=head1 Stack Manipulation Macros
+=for apidoc_section $stack
 
 =for apidoc AmnU||SP
 Stack pointer.  This is usually handled by C<xsubpp>.  See C<L</dSP>> and
@@ -53,6 +53,16 @@
 #undef SP /* Solaris 2.7 i386 has this in /usr/include/sys/reg.h */
 #define SP sp
 #define MARK mark
+
+/*
+=for apidoc Amns||TARG
+
+C<TARG> is short for "target".  It is an entry in the pad that an OPs
+C<op_targ> refers to.  It is scratchpad space, often used as a return
+value for the OP, but some use it for other purposes.
+
+=cut
+*/
 #define TARG targ
 
 #define PUSHMARK(p) \
@@ -60,7 +70,7 @@
         I32 * mark_stack_entry;                                       \
         if (UNLIKELY((mark_stack_entry = ++PL_markstack_ptr)          \
                                            == PL_markstack_max))      \
-	    mark_stack_entry = markstack_grow();                      \
+            mark_stack_entry = markstack_grow();                      \
         *mark_stack_entry  = (I32)((p) - PL_stack_base);              \
         DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,                 \
                 "MARK push %p %" IVdf "\n",                           \
@@ -91,6 +101,13 @@
 #define dTARGETSTACKED SV * GETTARGETSTACKED
 
 #define GETTARGET targ = PAD_SV(PL_op->op_targ)
+
+/*
+=for apidoc Amns||dTARGET
+Declare that this function uses C<TARG>
+
+=cut
+*/
 #define dTARGET SV * GETTARGET
 
 #define GETATARGET targ = (PL_op->op_flags & OPf_STACKED ? sp[-1] : PAD_SV(PL_op->op_targ))
@@ -503,7 +520,7 @@
 #define dPOPXiirl(X)	IV right = POPi; IV left = CAT2(X,i)
 
 #define USE_LEFT(sv) \
-	(SvOK(sv) || !(PL_op->op_flags & OPf_STACKED))
+        (SvOK(sv) || !(PL_op->op_flags & OPf_STACKED))
 #define dPOPXiirl_ul_nomg(X) \
     IV right = (sp--, SvIV_nomg(TOPp1s));		\
     SV *leftsv = CAT2(X,s);				\
@@ -537,18 +554,18 @@
 
 #define SWITCHSTACK(f,t) \
     STMT_START {							\
-	AvFILLp(f) = sp - PL_stack_base;				\
-	PL_stack_base = AvARRAY(t);					\
-	PL_stack_max = PL_stack_base + AvMAX(t);			\
-	sp = PL_stack_sp = PL_stack_base + AvFILLp(t);			\
-	PL_curstack = t;						\
+        AvFILLp(f) = sp - PL_stack_base;				\
+        PL_stack_base = AvARRAY(t);					\
+        PL_stack_max = PL_stack_base + AvMAX(t);			\
+        sp = PL_stack_sp = PL_stack_base + AvFILLp(t);			\
+        PL_curstack = t;						\
     } STMT_END
 
 #define EXTEND_MORTAL(n) \
     STMT_START {						\
-	SSize_t eMiX = PL_tmps_ix + (n);			\
-	if (UNLIKELY(eMiX >= PL_tmps_max))			\
-	    (void)Perl_tmps_grow_p(aTHX_ eMiX);			\
+        SSize_t eMiX = PL_tmps_ix + (n);			\
+        if (UNLIKELY(eMiX >= PL_tmps_max))			\
+            (void)Perl_tmps_grow_p(aTHX_ eMiX);			\
     } STMT_END
 
 #define AMGf_noright	1
@@ -564,14 +581,14 @@
 /* do SvGETMAGIC on the stack args before checking for overload */
 
 #define tryAMAGICun_MG(method, flags) STMT_START { \
-	if ( UNLIKELY((SvFLAGS(TOPs) & (SVf_ROK|SVs_GMG))) \
-		&& Perl_try_amagic_un(aTHX_ method, flags)) \
-	    return NORMAL; \
+        if ( UNLIKELY((SvFLAGS(TOPs) & (SVf_ROK|SVs_GMG))) \
+                && Perl_try_amagic_un(aTHX_ method, flags)) \
+            return NORMAL; \
     } STMT_END
 #define tryAMAGICbin_MG(method, flags) STMT_START { \
-	if ( UNLIKELY(((SvFLAGS(TOPm1s)|SvFLAGS(TOPs)) & (SVf_ROK|SVs_GMG))) \
-		&& Perl_try_amagic_bin(aTHX_ method, flags)) \
-	    return NORMAL; \
+        if ( UNLIKELY(((SvFLAGS(TOPm1s)|SvFLAGS(TOPs)) & (SVf_ROK|SVs_GMG))) \
+                && Perl_try_amagic_bin(aTHX_ method, flags)) \
+            return NORMAL; \
     } STMT_END
 
 #define AMG_CALLunary(sv,meth) \
@@ -582,16 +599,16 @@
 
 #define tryAMAGICunTARGETlist(meth, jump)			\
     STMT_START {						\
-	dSP;							\
-	SV *tmpsv;						\
-	SV *arg= *sp;						\
+        dSP;							\
+        SV *tmpsv;						\
+        SV *arg= *sp;						\
         U8 gimme = GIMME_V;                                    \
-	if (UNLIKELY(SvAMAGIC(arg) &&				\
-	    (tmpsv = amagic_call(arg, &PL_sv_undef, meth,	\
-				 AMGf_want_list | AMGf_noright	\
-				|AMGf_unary))))                 \
+        if (UNLIKELY(SvAMAGIC(arg) &&				\
+            (tmpsv = amagic_call(arg, &PL_sv_undef, meth,	\
+                                 AMGf_want_list | AMGf_noright	\
+                                |AMGf_unary))))                 \
         {                                       		\
-	    SPAGAIN;						\
+            SPAGAIN;						\
             if (gimme == G_VOID) {                              \
                 NOOP;                                           \
             }                                                   \
@@ -599,7 +616,7 @@
                 SSize_t i;                                      \
                 SSize_t len;                                    \
                 assert(SvTYPE(tmpsv) == SVt_PVAV);              \
-                len = av_tindex((AV *)tmpsv) + 1;               \
+                len = av_count((AV *)tmpsv);                    \
                 (void)POPs; /* get rid of the arg */            \
                 EXTEND(sp, len);                                \
                 for (i = 0; i < len; ++i)                       \
@@ -612,17 +629,17 @@
                     sp--;                                       \
                 SETTARG;                                        \
             }                                                   \
-	    PUTBACK;						\
-	    if (jump) {						\
-	        OP *jump_o = NORMAL->op_next;                   \
-		while (jump_o->op_type == OP_NULL)		\
-		    jump_o = jump_o->op_next;			\
-		assert(jump_o->op_type == OP_ENTERSUB);		\
-		(void)POPMARK;                                        \
-		return jump_o->op_next;				\
-	    }							\
-	    return NORMAL;					\
-	}							\
+            PUTBACK;						\
+            if (jump) {						\
+                OP *jump_o = NORMAL->op_next;                   \
+                while (jump_o->op_type == OP_NULL)		\
+                    jump_o = jump_o->op_next;			\
+                assert(jump_o->op_type == OP_ENTERSUB);		\
+                (void)POPMARK;                                        \
+                return jump_o->op_next;				\
+            }							\
+            return NORMAL;					\
+        }							\
     } STMT_END
 
 /* This is no longer used anywhere in the core. You might wish to consider
@@ -629,8 +646,8 @@
    calling amagic_deref_call() directly, as it has a cleaner interface.  */
 #define tryAMAGICunDEREF(meth)						\
     STMT_START {							\
-	sv = amagic_deref_call(*sp, CAT2(meth,_amg));			\
-	SPAGAIN;							\
+        sv = amagic_deref_call(*sp, CAT2(meth,_amg));			\
+        SPAGAIN;							\
     } STMT_END
 
 
@@ -665,13 +682,13 @@
 /* Used in various places that need to dereference a glob or globref */
 #  define MAYBE_DEREF_GV_flags(sv,phlags)                          \
     (                                                               \
-	(void)(phlags & SV_GMAGIC && (SvGETMAGIC(sv),0)),            \
-	isGV_with_GP(sv)                                              \
-	  ? (GV *)(sv)                                                \
-	  : SvROK(sv) && SvTYPE(SvRV(sv)) <= SVt_PVLV &&               \
-	    (SvGETMAGIC(SvRV(sv)), isGV_with_GP(SvRV(sv)))              \
-	     ? (GV *)SvRV(sv)                                            \
-	     : NULL                                                       \
+        (void)(phlags & SV_GMAGIC && (SvGETMAGIC(sv),0)),            \
+        isGV_with_GP(sv)                                              \
+          ? (GV *)(sv)                                                \
+          : SvROK(sv) && SvTYPE(SvRV(sv)) <= SVt_PVLV &&               \
+            (SvGETMAGIC(SvRV(sv)), isGV_with_GP(SvRV(sv)))              \
+             ? (GV *)SvRV(sv)                                            \
+             : NULL                                                       \
     )
 #  define MAYBE_DEREF_GV(sv)      MAYBE_DEREF_GV_flags(sv,SV_GMAGIC)
 #  define MAYBE_DEREF_GV_nomg(sv) MAYBE_DEREF_GV_flags(sv,0)

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/pp_proto.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/pp_proto.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/pp_proto.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -34,6 +34,7 @@
 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_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_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_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);

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/proto.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/proto.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/proto.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -117,6 +117,24 @@
 #define PERL_ARGS_ASSERT_SVREFCNT_INC_VOID
 #endif
 #ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool	Perl_SvTRUE(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVTRUE
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool	Perl_SvTRUE_NN(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVTRUE_NN	\
+	assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool	Perl_SvTRUE_common(pTHX_ SV *sv, const bool sv_2bool_is_fallback);
+#define PERL_ARGS_ASSERT_SVTRUE_COMMON	\
+	assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool	Perl_SvTRUE_nomg(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVTRUE_NOMG
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
 PERL_STATIC_INLINE I32	Perl_TOPMARK(pTHX);
 #define PERL_ARGS_ASSERT_TOPMARK
 #endif
@@ -219,6 +237,13 @@
 PERL_CALLCONV void	Perl_av_clear(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_CLEAR	\
 	assert(av)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE Size_t	Perl_av_count(pTHX_ AV *av)
+			__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_AV_COUNT	\
+	assert(av)
+#endif
+
 PERL_CALLCONV void	Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val);
 #define PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH	\
 	assert(avp); assert(val)
@@ -284,12 +309,9 @@
 			__attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_AV_TINDEX
 
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE SSize_t	Perl_av_top_index(pTHX_ AV *av)
-			__attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_AV_TOP_INDEX	\
-	assert(av)
-#endif
+/* PERL_CALLCONV SSize_t	av_top_index(pTHX_ AV *av)
+			__attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_AV_TOP_INDEX
 
 PERL_CALLCONV void	Perl_av_undef(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_UNDEF	\
@@ -630,6 +652,11 @@
 #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	\
@@ -833,12 +860,12 @@
 
 PERL_CALLCONV void	Perl_delete_eval_scope(pTHX);
 #define PERL_ARGS_ASSERT_DELETE_EVAL_SCOPE
-PERL_CALLCONV char*	Perl_delimcpy(char* to, const char* toend, const char* from, const char* fromend, int delim, I32* retlen);
+PERL_CALLCONV char*	Perl_delimcpy(char* to, const char* to_end, const char* from, const char* from_end, const int delim, I32* retlen);
 #define PERL_ARGS_ASSERT_DELIMCPY	\
-	assert(to); assert(toend); assert(from); assert(fromend); assert(retlen)
-PERL_CALLCONV char*	Perl_delimcpy_no_escape(char* to, const char* toend, const char* from, const char* fromend, int delim, I32* retlen);
+	assert(to); assert(to_end); assert(from); assert(from_end); assert(retlen)
+PERL_CALLCONV char*	Perl_delimcpy_no_escape(char* to, const char* to_end, const char* from, const char* from_end, const int delim, I32* retlen);
 #define PERL_ARGS_ASSERT_DELIMCPY_NO_ESCAPE	\
-	assert(to); assert(toend); assert(from); assert(fromend); assert(retlen)
+	assert(to); assert(to_end); assert(from); assert(from_end); assert(retlen)
 PERL_CALLCONV void	Perl_despatch_signals(pTHX);
 #define PERL_ARGS_ASSERT_DESPATCH_SIGNALS
 PERL_CALLCONV_NO_RET OP*	Perl_die(pTHX_ const char* pat, ...)
@@ -1097,7 +1124,7 @@
 #define PERL_ARGS_ASSERT_FREE_TIED_HV_POOL
 PERL_CALLCONV void	Perl_free_tmps(pTHX);
 #define PERL_ARGS_ASSERT_FREE_TMPS
-PERL_CALLCONV SV*	Perl_get_and_check_backslash_N_name(pTHX_ const char* s, const char* const e, const bool is_utf8, const char** error_msg)
+PERL_CALLCONV SV*	Perl_get_and_check_backslash_N_name(pTHX_ const char* s, const char* e, const bool is_utf8, const char** error_msg)
 			__attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_GET_AND_CHECK_BACKSLASH_N_NAME	\
 	assert(s); assert(e); assert(error_msg)
@@ -1309,7 +1336,7 @@
 PERL_CALLCONV GV*	Perl_gv_fetchmethod_sv_flags(pTHX_ HV* stash, SV* namesv, U32 flags);
 #define PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS	\
 	assert(stash); assert(namesv)
-PERL_CALLCONV GV*	Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type);
+PERL_CALLCONV GV*	Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 flags, const svtype sv_type);
 #define PERL_ARGS_ASSERT_GV_FETCHPV	\
 	assert(nambeg)
 PERL_CALLCONV GV*	Perl_gv_fetchpvn_flags(pTHX_ const char* name, STRLEN len, I32 flags, const svtype sv_type);
@@ -1354,9 +1381,9 @@
 PERL_CALLCONV GV *	Perl_gv_override(pTHX_ const char * const name, const STRLEN len);
 #define PERL_ARGS_ASSERT_GV_OVERRIDE	\
 	assert(name)
-PERL_CALLCONV void	Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr);
+PERL_CALLCONV void	Perl_gv_setref(pTHX_ SV *const dsv, SV *const ssv);
 #define PERL_ARGS_ASSERT_GV_SETREF	\
-	assert(dstr); assert(sstr)
+	assert(dsv); assert(ssv)
 PERL_CALLCONV HV*	Perl_gv_stashpv(pTHX_ const char* name, I32 flags);
 #define PERL_ARGS_ASSERT_GV_STASHPV	\
 	assert(name)
@@ -1853,9 +1880,15 @@
 PERL_CALLCONV int	Perl_magic_freearylen_p(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P	\
 	assert(sv); assert(mg)
+PERL_CALLCONV int	Perl_magic_freemglob(pTHX_ SV* sv, MAGIC* mg);
+#define PERL_ARGS_ASSERT_MAGIC_FREEMGLOB	\
+	assert(sv); assert(mg)
 PERL_CALLCONV int	Perl_magic_freeovrld(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_FREEOVRLD	\
 	assert(sv); assert(mg)
+PERL_CALLCONV int	Perl_magic_freeutf8(pTHX_ SV* sv, MAGIC* mg);
+#define PERL_ARGS_ASSERT_MAGIC_FREEUTF8	\
+	assert(sv); assert(mg)
 PERL_CALLCONV int	Perl_magic_get(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_GET	\
 	assert(sv); assert(mg)
@@ -2128,10 +2161,8 @@
 #define PERL_ARGS_ASSERT_MY_FFLUSH_ALL
 PERL_CALLCONV Pid_t	Perl_my_fork(void);
 #define PERL_ARGS_ASSERT_MY_FORK
-#ifndef NO_MATHOMS
-PERL_CALLCONV I32	Perl_my_lstat(pTHX);
+/* PERL_CALLCONV I32	my_lstat(pTHX); */
 #define PERL_ARGS_ASSERT_MY_LSTAT
-#endif
 PERL_CALLCONV I32	Perl_my_lstat_flags(pTHX_ const U32 flags);
 #define PERL_ARGS_ASSERT_MY_LSTAT_FLAGS
 PERL_CALLCONV int	Perl_my_mkostemp_cloexec(char *templte, int flags)
@@ -2156,10 +2187,8 @@
 
 PERL_CALLCONV int	Perl_my_socketpair(int family, int type, int protocol, int fd[2]);
 #define PERL_ARGS_ASSERT_MY_SOCKETPAIR
-#ifndef NO_MATHOMS
-PERL_CALLCONV I32	Perl_my_stat(pTHX);
+/* PERL_CALLCONV I32	my_stat(pTHX); */
 #define PERL_ARGS_ASSERT_MY_STAT
-#endif
 PERL_CALLCONV I32	Perl_my_stat_flags(pTHX_ const U32 flags);
 #define PERL_ARGS_ASSERT_MY_STAT_FLAGS
 PERL_CALLCONV char*	Perl_my_strerror(pTHX_ const int errnum);
@@ -2459,6 +2488,11 @@
 			__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
@@ -2509,6 +2543,9 @@
 #define PERL_ARGS_ASSERT_NINSTR	\
 	assert(big); assert(bigend); assert(little); assert(lend)
 
+PERL_CALLCONV void	Perl_no_bareword_filehandle(pTHX_ const char *fhname);
+#define PERL_ARGS_ASSERT_NO_BAREWORD_FILEHANDLE	\
+	assert(fhname)
 PERL_CALLCONV_NO_RET void	Perl_noperl_die(const char* pat, ...)
 			__attribute__noreturn__
 			__attribute__format__(__printf__,1,2);
@@ -2579,10 +2616,12 @@
 #define PERL_ARGS_ASSERT_OPTIMIZE_OPTREE	\
 	assert(o)
 #ifndef NO_MATHOMS
-PERL_CALLCONV void	Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags);
+PERL_CALLCONV void	Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags)
+			__attribute__deprecated__;
 #define PERL_ARGS_ASSERT_PACK_CAT	\
 	assert(cat); assert(pat); assert(patend); assert(beglist); assert(endlist); assert(next_in_list)
 #endif
+
 PERL_CALLCONV void	Perl_package(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_PACKAGE	\
 	assert(o)
@@ -2613,6 +2652,7 @@
 #define PERL_ARGS_ASSERT_PAD_BLOCK_START
 #ifndef NO_MATHOMS
 PERL_CALLCONV HV*	Perl_pad_compname_type(pTHX_ const PADOFFSET po)
+			__attribute__deprecated__
 			__attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_PAD_COMPNAME_TYPE
 #endif
@@ -3241,7 +3281,7 @@
 #define PERL_ARGS_ASSERT_SV_2PV	\
 	assert(sv)
 #endif
-PERL_CALLCONV char*	Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags);
+PERL_CALLCONV char*	Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags);
 #define PERL_ARGS_ASSERT_SV_2PV_FLAGS	\
 	assert(sv)
 #ifndef NO_MATHOMS
@@ -3298,15 +3338,15 @@
 PERL_CALLCONV bool	Perl_sv_cat_decode(pTHX_ SV* dsv, SV *encoding, SV *ssv, int *offset, char* tstr, int tlen);
 #define PERL_ARGS_ASSERT_SV_CAT_DECODE	\
 	assert(dsv); assert(encoding); assert(ssv); assert(offset); assert(tstr)
-PERL_CALLCONV void	Perl_sv_catpv(pTHX_ SV *const sv, const char* ptr);
+PERL_CALLCONV void	Perl_sv_catpv(pTHX_ SV *const dsv, const char* sstr);
 #define PERL_ARGS_ASSERT_SV_CATPV	\
-	assert(sv)
-PERL_CALLCONV void	Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags);
+	assert(dsv)
+PERL_CALLCONV void	Perl_sv_catpv_flags(pTHX_ SV *dsv, const char *sstr, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_CATPV_FLAGS	\
-	assert(dstr); assert(sstr)
-PERL_CALLCONV void	Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr);
+	assert(dsv); assert(sstr)
+PERL_CALLCONV void	Perl_sv_catpv_mg(pTHX_ SV *const dsv, const char *const sstr);
 #define PERL_ARGS_ASSERT_SV_CATPV_MG	\
-	assert(sv)
+	assert(dsv)
 PERL_CALLCONV void	Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
 			__attribute__format__(__printf__,pTHX_2,pTHX_3);
 #define PERL_ARGS_ASSERT_SV_CATPVF	\
@@ -3322,24 +3362,24 @@
 #define PERL_ARGS_ASSERT_SV_CATPVN	\
 	assert(dsv); assert(sstr)
 #endif
-PERL_CALLCONV void	Perl_sv_catpvn_flags(pTHX_ SV *const dstr, const char *sstr, const STRLEN len, const I32 flags);
+PERL_CALLCONV void	Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN len, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_CATPVN_FLAGS	\
-	assert(dstr); assert(sstr)
+	assert(dsv); assert(sstr)
 #ifndef NO_MATHOMS
-PERL_CALLCONV void	Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len);
+PERL_CALLCONV void	Perl_sv_catpvn_mg(pTHX_ SV *dsv, const char *sstr, STRLEN len);
 #define PERL_ARGS_ASSERT_SV_CATPVN_MG	\
-	assert(sv); assert(ptr)
+	assert(dsv); assert(sstr)
 #endif
 #ifndef NO_MATHOMS
-PERL_CALLCONV void	Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr);
+PERL_CALLCONV void	Perl_sv_catsv(pTHX_ SV *dsv, SV *sstr);
 #define PERL_ARGS_ASSERT_SV_CATSV	\
-	assert(dstr)
+	assert(dsv)
 #endif
-PERL_CALLCONV void	Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags);
+PERL_CALLCONV void	Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const sstr, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_CATSV_FLAGS	\
 	assert(dsv)
 #ifndef NO_MATHOMS
-PERL_CALLCONV void	Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *ssv);
+PERL_CALLCONV void	Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *sstr);
 #define PERL_ARGS_ASSERT_SV_CATSV_MG	\
 	assert(dsv)
 #endif
@@ -3589,7 +3629,7 @@
 #define PERL_ARGS_ASSERT_SV_PVN_FORCE	\
 	assert(sv)
 #endif
-PERL_CALLCONV char*	Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags);
+PERL_CALLCONV char*	Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags);
 #define PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS	\
 	assert(sv)
 #ifndef NO_MATHOMS
@@ -3716,16 +3756,16 @@
 #define PERL_ARGS_ASSERT_SV_SETREF_UV	\
 	assert(rv)
 #ifndef NO_MATHOMS
-PERL_CALLCONV void	Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr);
+PERL_CALLCONV void	Perl_sv_setsv(pTHX_ SV *dsv, SV *ssv);
 #define PERL_ARGS_ASSERT_SV_SETSV	\
-	assert(dstr)
+	assert(dsv)
 #endif
-PERL_CALLCONV void	Perl_sv_setsv_flags(pTHX_ SV *dstr, SV *sstr, const I32 flags);
+PERL_CALLCONV void	Perl_sv_setsv_flags(pTHX_ SV *dsv, SV *ssv, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_SETSV_FLAGS	\
-	assert(dstr)
-PERL_CALLCONV void	Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr);
+	assert(dsv)
+PERL_CALLCONV void	Perl_sv_setsv_mg(pTHX_ SV *const dsv, SV *const ssv);
 #define PERL_ARGS_ASSERT_SV_SETSV_MG	\
-	assert(dstr)
+	assert(dsv)
 PERL_CALLCONV void	Perl_sv_setuv(pTHX_ SV *const sv, const UV num);
 #define PERL_ARGS_ASSERT_SV_SETUV	\
 	assert(sv)
@@ -4186,13 +4226,6 @@
 #define PERL_ARGS_ASSERT_DO_EXEC	\
 	assert(cmd)
 #endif
-#if !(defined(PERL_GLOBAL_STRUCT_PRIVATE))
-#  if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV void*	Perl_my_cxt_init(pTHX_ int *indexp, size_t size);
-#define PERL_ARGS_ASSERT_MY_CXT_INIT	\
-	assert(indexp)
-#  endif
-#endif
 #if !(defined(PERL_USE_3ARG_SIGHANDLER))
 PERL_CALLCONV Signal_t	Perl_csighandler(int sig);
 #define PERL_ARGS_ASSERT_CSIGHANDLER
@@ -4446,6 +4479,11 @@
 	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)
@@ -4477,6 +4515,10 @@
 	assert(rsfp)
 #  endif
 #endif
+#if !defined(USE_ITHREADS)
+/* PERL_CALLCONV void	CopFILEGV_set(pTHX_ COP * c, GV * gv); */
+#define PERL_ARGS_ASSERT_COPFILEGV_SET
+#endif
 #if !defined(UV_IS_QUAD)
 #  if defined(PERL_IN_UTF8_C)
 STATIC int	S_is_utf8_cp_above_31_bits(const U8 * const s, const U8 * const e, const bool consider_overlongs)
@@ -4697,9 +4739,9 @@
 
 #endif
 #if defined(PERL_ANY_COW)
-PERL_CALLCONV SV*	Perl_sv_setsv_cow(pTHX_ SV* dstr, SV* sstr);
+PERL_CALLCONV SV*	Perl_sv_setsv_cow(pTHX_ SV* dsv, SV* ssv);
 #define PERL_ARGS_ASSERT_SV_SETSV_COW	\
-	assert(sstr)
+	assert(ssv)
 #endif
 #if defined(PERL_CORE)
 PERL_CALLCONV void	Perl_opslab_force_free(pTHX_ OPSLAB *slab);
@@ -4795,25 +4837,6 @@
 #define PERL_ARGS_ASSERT_GV_SVADD
 #endif
 #endif
-#if defined(PERL_GLOBAL_STRUCT)
-PERL_CALLCONV struct perl_vars *	Perl_GetVars(pTHX);
-#define PERL_ARGS_ASSERT_GETVARS
-PERL_CALLCONV void	Perl_free_global_struct(pTHX_ struct perl_vars *plvarsp);
-#define PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT	\
-	assert(plvarsp)
-PERL_CALLCONV struct perl_vars*	Perl_init_global_struct(pTHX);
-#define PERL_ARGS_ASSERT_INIT_GLOBAL_STRUCT
-#endif
-#if defined(PERL_GLOBAL_STRUCT_PRIVATE)
-#  if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV int	Perl_my_cxt_index(pTHX_ const char *my_cxt_key);
-#define PERL_ARGS_ASSERT_MY_CXT_INDEX	\
-	assert(my_cxt_key)
-PERL_CALLCONV void*	Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size);
-#define PERL_ARGS_ASSERT_MY_CXT_INIT	\
-	assert(my_cxt_key)
-#  endif
-#endif
 #if defined(PERL_IMPLICIT_CONTEXT)
 PERL_CALLCONV_NO_RET void	Perl_croak_nocontext(const char* pat, ...)
 			__attribute__noreturn__
@@ -4851,6 +4874,9 @@
 #define PERL_ARGS_ASSERT_MESS_NOCONTEXT	\
 	assert(pat)
 
+PERL_CALLCONV void*	Perl_my_cxt_init(pTHX_ int *indexp, size_t size);
+#define PERL_ARGS_ASSERT_MY_CXT_INIT	\
+	assert(indexp)
 PERL_CALLCONV SV*	Perl_newSVpvf_nocontext(const char *const pat, ...)
 			__attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT	\
@@ -5750,6 +5776,9 @@
 STATIC SV*	S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state, const regnode_charclass* const node);
 #define PERL_ARGS_ASSERT_GET_ANYOF_CP_LIST_FOR_SSC	\
 	assert(pRExC_state); assert(node)
+STATIC U32	S_get_quantifier_value(pTHX_ RExC_state_t *pRExC_state, const char * start, const char * end);
+#define PERL_ARGS_ASSERT_GET_QUANTIFIER_VALUE	\
+	assert(pRExC_state); assert(start); assert(end)
 STATIC bool	S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state, regnode_offset* nodep, UV *code_point_p, int* cp_count, I32 *flagp, const bool strict, const U32 depth);
 #define PERL_ARGS_ASSERT_GROK_BSLASH_N	\
 	assert(pRExC_state); assert(flagp)
@@ -5803,11 +5832,6 @@
 STATIC I32	S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *first, regnode *last, regnode *tail, U32 word_count, U32 flags, U32 depth);
 #define PERL_ARGS_ASSERT_MAKE_TRIE	\
 	assert(pRExC_state); assert(startbranch); assert(first); assert(last); assert(tail)
-STATIC bool	S_new_regcurly(const char *s, const char *e)
-			__attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_NEW_REGCURLY	\
-	assert(s); assert(e)
-
 STATIC void	S_nextchar(pTHX_ RExC_state_t *pRExC_state);
 #define PERL_ARGS_ASSERT_NEXTCHAR	\
 	assert(pRExC_state)
@@ -6138,12 +6162,10 @@
 	assert(invlist)
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool	S_regcurly(const char *s)
+PERL_CALLCONV bool	Perl_regcurly(const char *s, const char *e, const char * result[5])
 			__attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_REGCURLY	\
-	assert(s)
-#endif
+	assert(s); assert(e)
 
 #endif
 #if defined(PERL_IN_REGEXEC_C)
@@ -6207,6 +6229,10 @@
 #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	\
@@ -6288,12 +6314,6 @@
 #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
@@ -6331,9 +6351,9 @@
 STATIC bool	S_glob_2number(pTHX_ GV* const gv);
 #define PERL_ARGS_ASSERT_GLOB_2NUMBER	\
 	assert(gv)
-STATIC void	S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype);
+STATIC void	S_glob_assign_glob(pTHX_ SV *const dsv, SV *const ssv, const int dtype);
 #define PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB	\
-	assert(dstr); assert(sstr)
+	assert(dsv); assert(ssv)
 STATIC SV *	S_more_sv(pTHX);
 #define PERL_ARGS_ASSERT_MORE_SV
 STATIC void	S_not_a_number(pTHX_ SV *const sv);
@@ -6390,10 +6410,10 @@
 #define PERL_ARGS_ASSERT_VISIT	\
 	assert(f)
 #  if defined(USE_ITHREADS)
-STATIC SV*	S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
+STATIC SV*	S_sv_dup_common(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
 			__attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DUP_COMMON	\
-	assert(sstr); assert(param)
+	assert(ssv); assert(param)
 
 STATIC SV **	S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest, SSize_t items, CLONE_PARAMS *const param);
 #define PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE	\
@@ -6768,9 +6788,9 @@
 PERL_CALLCONV void*	Perl_regdupe_internal(pTHX_ REGEXP * const r, CLONE_PARAMS* param);
 #define PERL_ARGS_ASSERT_REGDUPE_INTERNAL	\
 	assert(r); assert(param)
-PERL_CALLCONV void	Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param);
+PERL_CALLCONV void	Perl_rvpv_dup(pTHX_ SV *const dsv, const SV *const ssv, CLONE_PARAMS *const param);
 #define PERL_ARGS_ASSERT_RVPV_DUP	\
-	assert(dstr); assert(sstr); assert(param)
+	assert(dsv); assert(ssv); assert(param)
 PERL_CALLCONV PERL_SI*	Perl_si_dup(pTHX_ PERL_SI* si, CLONE_PARAMS* param)
 			__attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SI_DUP	\
@@ -6781,12 +6801,12 @@
 #define PERL_ARGS_ASSERT_SS_DUP	\
 	assert(proto_perl); assert(param)
 
-PERL_CALLCONV SV*	Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
+PERL_CALLCONV SV*	Perl_sv_dup(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
 			__attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DUP	\
 	assert(param)
 
-PERL_CALLCONV SV*	Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
+PERL_CALLCONV SV*	Perl_sv_dup_inc(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
 			__attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_SV_DUP_INC	\
 	assert(param)
@@ -6797,6 +6817,9 @@
 #define PERL_ARGS_ASSERT__IS_CUR_LC_CATEGORY_UTF8
 #endif
 #if defined(USE_LOCALE_COLLATE)
+PERL_CALLCONV int	Perl_magic_freecollxfrm(pTHX_ SV* sv, MAGIC* mg);
+#define PERL_ARGS_ASSERT_MAGIC_FREECOLLXFRM	\
+	assert(sv); assert(mg)
 PERL_CALLCONV int	Perl_magic_setcollxfrm(pTHX_ SV* sv, MAGIC* mg);
 #define PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM	\
 	assert(sv); assert(mg)
@@ -6894,7 +6917,7 @@
 	assert(fname)
 
 #endif
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 PERL_CALLCONV int	Perl_do_aspawn(pTHX_ SV* really, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_ASPAWN	\
 	assert(mark); assert(sp)

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/reentr.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/reentr.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/reentr.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -41,6 +41,12 @@
 
 #ifdef USE_REENTRANT_API
 
+/* For thread-safe builds, alternative methods are used to make calls to this
+ * safe. */
+#ifdef USE_THREAD_SAFE_LOCALE
+#   undef HAS_SETLOCALE_R
+#endif
+ 
 /* Deprecations: some platforms have the said reentrant interfaces
  * but they are declared obsolete and are not to be used.  Often this
  * means that the platform has threadsafed the interfaces (hopefully).
@@ -647,165 +653,165 @@
 typedef struct {
 
 #  ifdef HAS_ASCTIME_R
-	char*	_asctime_buffer;
-	size_t	_asctime_size;
+        char*	_asctime_buffer;
+        size_t	_asctime_size;
 #  endif /* HAS_ASCTIME_R */
 
 #  ifdef HAS_CRYPT_R
 #  if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
-	CRYPTD* _crypt_data;
+        CRYPTD* _crypt_data;
 #  else
-	struct crypt_data *_crypt_struct_buffer;
+        struct crypt_data *_crypt_struct_buffer;
 #  endif
 #  endif /* HAS_CRYPT_R */
 
 #  ifdef HAS_CTIME_R
-	char*	_ctime_buffer;
-	size_t	_ctime_size;
+        char*	_ctime_buffer;
+        size_t	_ctime_size;
 #  endif /* HAS_CTIME_R */
 
 #  ifdef HAS_GETGRNAM_R
-	struct group	_grent_struct;
-	char*	_grent_buffer;
-	size_t	_grent_size;
+        struct group	_grent_struct;
+        char*	_grent_buffer;
+        size_t	_grent_size;
 #   ifdef USE_GRENT_PTR
-	struct group*	_grent_ptr;
+        struct group*	_grent_ptr;
 #   endif
 #   ifdef USE_GRENT_FPTR
-	FILE*	_grent_fptr;
+        FILE*	_grent_fptr;
 #   endif
 #  endif /* HAS_GETGRNAM_R */
 
 #  ifdef HAS_GETHOSTBYNAME_R
-	struct hostent	_hostent_struct;
+        struct hostent	_hostent_struct;
 #   if GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
-	struct hostent_data	_hostent_data;
+        struct hostent_data	_hostent_data;
 #   else
-	char*	_hostent_buffer;
-	size_t	_hostent_size;
+        char*	_hostent_buffer;
+        size_t	_hostent_size;
 #   endif
 #   ifdef USE_HOSTENT_PTR
-	struct hostent*	_hostent_ptr;
+        struct hostent*	_hostent_ptr;
 #   endif
 #   ifdef USE_HOSTENT_ERRNO
-	int	_hostent_errno;
+        int	_hostent_errno;
 #   endif
 #  endif /* HAS_GETHOSTBYNAME_R */
 
 #  ifdef HAS_GETLOGIN_R
-	char*	_getlogin_buffer;
-	size_t	_getlogin_size;
+        char*	_getlogin_buffer;
+        size_t	_getlogin_size;
 #  endif /* HAS_GETLOGIN_R */
 
 #  ifdef HAS_GETNETBYNAME_R
-	struct netent	_netent_struct;
+        struct netent	_netent_struct;
 #   if GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
-	struct netent_data	_netent_data;
+        struct netent_data	_netent_data;
 #   else
-	char*	_netent_buffer;
-	size_t	_netent_size;
+        char*	_netent_buffer;
+        size_t	_netent_size;
 #   endif
 #   ifdef USE_NETENT_PTR
-	struct netent*	_netent_ptr;
+        struct netent*	_netent_ptr;
 #   endif
 #   ifdef USE_NETENT_ERRNO
-	int	_netent_errno;
+        int	_netent_errno;
 #   endif
 #  endif /* HAS_GETNETBYNAME_R */
 
 #  ifdef HAS_GETPROTOBYNAME_R
-	struct protoent	_protoent_struct;
+        struct protoent	_protoent_struct;
 #   if GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
-	struct protoent_data	_protoent_data;
+        struct protoent_data	_protoent_data;
 #   else
-	char*	_protoent_buffer;
-	size_t	_protoent_size;
+        char*	_protoent_buffer;
+        size_t	_protoent_size;
 #   endif
 #   ifdef USE_PROTOENT_PTR
-	struct protoent*	_protoent_ptr;
+        struct protoent*	_protoent_ptr;
 #   endif
 #   ifdef USE_PROTOENT_ERRNO
-	int	_protoent_errno;
+        int	_protoent_errno;
 #   endif
 #  endif /* HAS_GETPROTOBYNAME_R */
 
 #  ifdef HAS_GETPWNAM_R
-	struct passwd	_pwent_struct;
-	char*	_pwent_buffer;
-	size_t	_pwent_size;
+        struct passwd	_pwent_struct;
+        char*	_pwent_buffer;
+        size_t	_pwent_size;
 #   ifdef USE_PWENT_PTR
-	struct passwd*	_pwent_ptr;
+        struct passwd*	_pwent_ptr;
 #   endif
 #   ifdef USE_PWENT_FPTR
-	FILE*	_pwent_fptr;
+        FILE*	_pwent_fptr;
 #   endif
 #  endif /* HAS_GETPWNAM_R */
 
 #  ifdef HAS_GETSERVBYNAME_R
-	struct servent	_servent_struct;
+        struct servent	_servent_struct;
 #   if GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD
-	struct servent_data	_servent_data;
+        struct servent_data	_servent_data;
 #   else
-	char*	_servent_buffer;
-	size_t	_servent_size;
+        char*	_servent_buffer;
+        size_t	_servent_size;
 #   endif
 #   ifdef USE_SERVENT_PTR
-	struct servent*	_servent_ptr;
+        struct servent*	_servent_ptr;
 #   endif
 #   ifdef USE_SERVENT_ERRNO
-	int	_servent_errno;
+        int	_servent_errno;
 #   endif
 #  endif /* HAS_GETSERVBYNAME_R */
 
 #  ifdef HAS_GETSPNAM_R
-	struct spwd	_spent_struct;
-	char*	_spent_buffer;
-	size_t	_spent_size;
+        struct spwd	_spent_struct;
+        char*	_spent_buffer;
+        size_t	_spent_size;
 #   ifdef USE_SPENT_PTR
-	struct spwd*	_spent_ptr;
+        struct spwd*	_spent_ptr;
 #   endif
 #   ifdef USE_SPENT_FPTR
-	FILE*	_spent_fptr;
+        FILE*	_spent_fptr;
 #   endif
 #  endif /* HAS_GETSPNAM_R */
 
 #  ifdef HAS_GMTIME_R
-	struct tm _gmtime_struct;
+        struct tm _gmtime_struct;
 #  endif /* HAS_GMTIME_R */
 
 #  ifdef HAS_LOCALTIME_R
-	struct tm _localtime_struct;
+        struct tm _localtime_struct;
 #  endif /* HAS_LOCALTIME_R */
 
 #  ifdef HAS_READDIR_R
-	struct dirent*	_readdir_struct;
-	size_t	_readdir_size;
+        struct dirent*	_readdir_struct;
+        size_t	_readdir_size;
 #   if READDIR_R_PROTO == REENTRANT_PROTO_I_TSR
-	struct dirent*	_readdir_ptr;
+        struct dirent*	_readdir_ptr;
 #   endif
 #  endif /* HAS_READDIR_R */
 
 #  ifdef HAS_READDIR64_R
-	struct dirent64*	_readdir64_struct;
-	size_t	_readdir64_size;
+        struct dirent64*	_readdir64_struct;
+        size_t	_readdir64_size;
 #   if READDIR64_R_PROTO == REENTRANT_PROTO_I_TSR
-	struct dirent64*	_readdir64_ptr;
+        struct dirent64*	_readdir64_ptr;
 #   endif
 #  endif /* HAS_READDIR64_R */
 
 #  ifdef HAS_SETLOCALE_R
-	char*	_setlocale_buffer;
-	size_t	_setlocale_size;
+        char*	_setlocale_buffer;
+        size_t	_setlocale_size;
 #  endif /* HAS_SETLOCALE_R */
 
 #  ifdef HAS_STRERROR_R
-	char*	_strerror_buffer;
-	size_t	_strerror_size;
+        char*	_strerror_buffer;
+        size_t	_strerror_size;
 #  endif /* HAS_STRERROR_R */
 
 #  ifdef HAS_TTYNAME_R
-	char*	_ttyname_buffer;
-	size_t	_ttyname_size;
+        char*	_ttyname_buffer;
+        size_t	_ttyname_size;
 #  endif /* HAS_TTYNAME_R */
 
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/regcharclass.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/regcharclass.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/regcharclass.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -28,23 +28,23 @@
 /*** GENERATED CODE ***/
 #define is_LNBREAK_safe(s,e,is_utf8)                                        \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) ) ? 1                       \
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') ) ? 1            \
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : ( is_utf8 ) ?                                                         \
 	( ( 0xC2 == ((const U8*)s)[0] ) ?                                   \
 	    ( ( 0x85 == ((const U8*)s)[1] ) ? 2 : 0 )                       \
-	: ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) ) ) ? 3 : 0 )\
+	: ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) ) ) ? 3 : 0 )\
     : ( 0x85 == ((const U8*)s)[0] ) )                                       \
 : ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) ) ? 1                       \
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') ) ? 1            \
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : ( is_utf8 ) ?                                                         \
 	( ( ( 0xC2 == ((const U8*)s)[0] ) && ( 0x85 == ((const U8*)s)[1] ) ) ? 2 : 0 )\
     : ( 0x85 == ((const U8*)s)[0] ) )                                       \
 : ((e)-(s) > 0) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0D ) ) ? 1                       \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\r') ) ? 1            \
     : ( !( is_utf8 ) ) ?                                                    \
 	( 0x85 == ((const U8*)s)[0] )                                       \
     : 0 )                                                                   \
@@ -53,30 +53,30 @@
 /*** GENERATED CODE ***/
 #define is_LNBREAK_utf8_safe(s,e)                                           \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) ) ? 1                       \
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') ) ? 1            \
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : ( 0xC2 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x85 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
-    : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) ) ) ? 3 : 0 )\
+    : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) ) ? 1                       \
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') ) ? 1            \
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : ( ( 0xC2 == ((const U8*)s)[0] ) && ( 0x85 == ((const U8*)s)[1] ) ) ? 2 : 0 )\
 : ((e)-(s) > 0) ?                                                           \
-    ( inRANGE(((const U8*)s)[0], 0x0A, 0x0D ) )                             \
+    ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\r') )                  \
 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_LNBREAK_latin1_safe(s,e)                                         \
 ( ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0A, 0x0C ) || 0x85 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x0A == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\f') || 0x85 == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( inRANGE(((const U8*)s)[0], 0x0A, 0x0D ) || 0x85 == ((const U8*)s)[0] )\
+    ( inRANGE_helper_(U8, ((const U8*)s)[0], '\n', '\r') || 0x85 == ((const U8*)s)[0] )\
 : 0 )
 
 /*
@@ -90,7 +90,7 @@
     ( ( ( 0x9A == ((const U8*)s)[1] ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xE2 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x80 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x80, 0x8A ) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x8A) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( ( 0x81 == ((const U8*)s)[1] ) && ( 0x9F == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( ( ( 0xE3 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )
 
@@ -97,7 +97,7 @@
 /*** GENERATED CODE ***/
 #define is_HORIZWS_cp_high(cp)                                              \
 ( 0x1680 == cp || ( 0x1680 < cp &&                                          \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp &&               \
 ( 0x202F == cp || ( 0x202F < cp &&                                          \
 ( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) )
 
@@ -108,11 +108,11 @@
 */
 /*** GENERATED CODE ***/
 #define is_VERTWS_high(s)                                                   \
-( ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) ) ) ? 3 : 0 )
+( ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) ) ) ? 3 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_VERTWS_cp_high(cp)                                               \
-( 0x2028 == cp || 0x2029 == cp )
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) )
 
 /*
 	XDIGIT: Hexadecimal digits
@@ -123,14 +123,14 @@
 #define is_XDIGIT_high(s)                                                   \
 ( ( 0xEF == ((const U8*)s)[0] ) ?                                           \
     ( ( 0xBC == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x90, 0x99 ) || inRANGE(((const U8*)s)[2], 0xA1, 0xA6 ) ) ? 3 : 0 )\
-    : ( ( 0xBD == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x81, 0x86 ) ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x90, 0x99) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xA1, 0xA6) ) ? 3 : 0 )\
+    : ( ( 0xBD == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x81, 0x86) ) ) ? 3 : 0 )\
 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_XDIGIT_cp_high(cp)                                               \
-( inRANGE(cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp &&                           \
-( inRANGE(cp, 0xFF21, 0xFF26) || inRANGE(cp, 0xFF41, 0xFF46) ) ) )
+( inRANGE_helper_(UV, cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp &&               \
+( inRANGE_helper_(UV, cp, 0xFF21, 0xFF26) || inRANGE_helper_(UV, cp, 0xFF41, 0xFF46) ) ) )
 
 /*
 	XPERLSPACE: \p{XPerlSpace}
@@ -143,7 +143,7 @@
     ( ( ( 0x9A == ((const U8*)s)[1] ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xE2 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x80 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x80, 0x8A ) || inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x8A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( ( 0x81 == ((const U8*)s)[1] ) && ( 0x9F == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( ( ( 0xE3 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )
 
@@ -150,11 +150,10 @@
 /*** GENERATED CODE ***/
 #define is_XPERLSPACE_cp_high(cp)                                           \
 ( 0x1680 == cp || ( 0x1680 < cp &&                                          \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp &&                           \
-( 0x2028 == cp || ( 0x2028 < cp &&                                          \
-( 0x2029 == cp || ( 0x2029 < cp &&                                          \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp &&               \
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) || ( 0x2029 < cp &&               \
 ( 0x202F == cp || ( 0x202F < cp &&                                          \
-( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) ) ) )
+( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) )
 
 /*
 	NONCHAR: Non character code points
@@ -165,13 +164,13 @@
 #define is_NONCHAR_utf8_safe(s,e)                                           \
 ( ( ( LIKELY((e) > (s)) ) && ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ) ? ( ( 0xEF == ((const U8*)s)[0] ) ?\
 	    ( ( 0xB7 == ((const U8*)s)[1] ) ?                               \
-		( ( inRANGE(((const U8*)s)[2], 0x90, 0xAF ) ) ? 3 : 0 )     \
-	    : ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0xBE, 0xBF ) ) ) ? 3 : 0 )\
+		( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x90, 0xAF) ) ? 3 : 0 )\
+	    : ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xBE, 0xBF) ) ) ? 3 : 0 )\
 	: ( 0xF0 == ((const U8*)s)[0] ) ?                                   \
-	    ( ( ( ( ((const U8*)s)[1] == 0x9F || ( ( ((const U8*)s)[1] & 0xEF ) == 0xAF ) ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0xBE, 0xBF ) ) ) ? 4 : 0 )\
-	: ( inRANGE(((const U8*)s)[0], 0xF1, 0xF3 ) ) ?                     \
-	    ( ( ( ( ( ((const U8*)s)[1] & 0xCF ) == 0x8F ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0xBE, 0xBF ) ) ) ? 4 : 0 )\
-	: ( ( ( ( 0xF4 == ((const U8*)s)[0] ) && ( 0x8F == ((const U8*)s)[1] ) ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0xBE, 0xBF ) ) ) ? 4 : 0 ) : 0 )
+	    ( ( ( ( ((const U8*)s)[1] == 0x9F || ( ( ((const U8*)s)[1] & 0xEF ) == 0xAF ) ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xBE, 0xBF) ) ) ? 4 : 0 )\
+	: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xF1, 0xF3) ) ?          \
+	    ( ( ( ( ( ((const U8*)s)[1] & 0xCF ) == 0x8F ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xBE, 0xBF) ) ) ? 4 : 0 )\
+	: ( ( ( ( 0xF4 == ((const U8*)s)[0] ) && ( 0x8F == ((const U8*)s)[1] ) ) && ( 0xBF == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xBE, 0xBF) ) ) ? 4 : 0 ) : 0 )
 
 /*
 	SURROGATE: Surrogate code points
@@ -180,7 +179,7 @@
 */
 /*** GENERATED CODE ***/
 #define is_SURROGATE_utf8_safe(s,e)                                         \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( 0xED == ((const U8*)s)[0] ) ) && ( inRANGE(((const U8*)s)[1], 0xA0, 0xBF ) ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0xBF ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( 0xED == ((const U8*)s)[0] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 0xA0, 0xBF) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xBF) ) ) ? 3 : 0 )
 
 /*
 	QUOTEMETA: Meta-characters that \Q should quote
@@ -195,95 +194,120 @@
     ( ( 0x9C == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xE1 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x85 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x9F, 0xA0 ) ) ? 3 : 0 )             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x9F, 0xA0) ) ? 3 : 0 )  \
     : ( 0x9A == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x80 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
     : ( 0x9E == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0xB4, 0xB5 ) ) ? 3 : 0 )             \
-    : ( ( 0xA0 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x8B, 0x8E ) ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xB4, 0xB5) ) ? 3 : 0 )  \
+    : ( ( 0xA0 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x8B, 0x8E) ) ) ? 3 : 0 )\
 : ( 0xE2 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x80 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x80, 0xBE ) ) ? 3 : 0 )             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xBE) ) ? 3 : 0 )  \
     : ( 0x81 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x81, 0x93 ) || inRANGE(((const U8*)s)[2], 0x95, 0xAF ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x81, 0x93) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x95, 0xAF) ) ? 3 : 0 )\
     : ( 0x86 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x90, 0xBF ) ) ? 3 : 0 )             \
-    : ( inRANGE(((const U8*)s)[1], 0x87, 0x90 ) || inRANGE(((const U8*)s)[1], 0x94, 0x9C ) || inRANGE(((const U8*)s)[1], 0x9F, 0xAF ) || inRANGE(((const U8*)s)[1], 0xB8, 0xB9 ) ) ?\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x90, 0xBF) ) ? 3 : 0 )  \
+    : ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x87, 0x90) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x94, 0x9C) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x9F, 0xAF) || inRANGE_helper_(U8, ((const U8*)s)[1], 0xB8, 0xB9) ) ?\
 	3                                                                   \
     : ( 0x91 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x80, 0x9F ) ) ? 3 : 0 )             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x9F) ) ? 3 : 0 )  \
     : ( 0x9D == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x80, 0xB5 ) ) ? 3 : 0 )             \
-    : ( ( 0x9E == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x94, 0xBF ) ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xB5) ) ? 3 : 0 )  \
+    : ( ( 0x9E == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x94, 0xBF) ) ) ? 3 : 0 )\
 : ( 0xE3 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x80 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x80, 0x83 ) || inRANGE(((const U8*)s)[2], 0x88, 0xA0 ) || 0xB0 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x83) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x88, 0xA0) || 0xB0 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( ( 0x85 == ((const U8*)s)[1] ) && ( 0xA4 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xEF == ((const U8*)s)[0] ) ?                                           \
     ( ( 0xB4 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0xBE, 0xBF ) ) ? 3 : 0 )             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xBE, 0xBF) ) ? 3 : 0 )  \
     : ( 0xB8 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x80, 0x8F ) ) ? 3 : 0 )             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x8F) ) ? 3 : 0 )  \
     : ( 0xB9 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x85, 0x86 ) ) ? 3 : 0 )             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x85, 0x86) ) ? 3 : 0 )  \
     : ( 0xBB == ((const U8*)s)[1] ) ?                                       \
 	( ( 0xBF == ((const U8*)s)[2] ) ? 3 : 0 )                           \
     : ( 0xBE == ((const U8*)s)[1] ) ?                                       \
 	( ( 0xA0 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
-    : ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0xB0, 0xB8 ) ) ) ? 3 : 0 )\
+    : ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xB0, 0xB8) ) ) ? 3 : 0 )\
 : ( 0xF0 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x9B == ((const U8*)s)[1] ) ?                                       \
-	( ( ( 0xB2 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0xA0, 0xA3 ) ) ) ? 4 : 0 )\
-    : ( ( ( 0x9D == ((const U8*)s)[1] ) && ( 0x85 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0xB3, 0xBA ) ) ) ? 4 : 0 )\
+	( ( ( 0xB2 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xA0, 0xA3) ) ) ? 4 : 0 )\
+    : ( ( ( 0x9D == ((const U8*)s)[1] ) && ( 0x85 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0xB3, 0xBA) ) ) ? 4 : 0 )\
 : ( ( 0xF3 == ((const U8*)s)[0] ) && ( 0xA0 == ((const U8*)s)[1] ) ) ? 4 : 0 )
 
 /*
 	MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+	%regcharclass_multi_char_folds::multi_char_folds('u', 'a')
 */
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                             \
-( ( 0x61 == ((const U8*)s)[0] ) ?                                           \
-	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x66 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x68 == ((const U8*)s)[0] ) ?                                       \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e)                            \
+( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                                 \
+	    ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e)                            \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                                 \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x69 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x6A == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x73 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ? 2 : 0 )             \
-    : ( 0x74 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ? 2\
+	: ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ?\
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0xBF == ((const U8*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+	( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[2], 's', 't') ) ? 3\
+	    : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+	: 0 )                                                               \
     : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0xBC == ((const U8*)s)[1] ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 3 : 0 )\
     : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
 	( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ?                        \
 	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( 0xB1 == ((const U8*)s)[1] || 0xB7 == ((const U8*)s)[1] ) ?      \
 	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
-		( ( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+		( ( 0x82 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
+		: 0 )                                                       \
 	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-	: ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+	: ( 0xB9 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+		( ( 0x88 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 0 )\
+		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
+		: 0 )                                                       \
+	    : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+	: 0 )                                                               \
     : ( 0xCF == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x81 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( 0x85 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
-		( ( 0x93 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+		( ( 0x88 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 0 )\
+		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
+		: ( 0x93 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 4 )\
+		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
+		: 0 )                                                       \
 	    : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( 0x89 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
-		( ( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+		( ( 0x82 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
+		: 0 )                                                       \
 	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : ( 0xD5 == ((const U8*)s)[0] ) ?                                       \
@@ -300,30 +324,33 @@
 
 
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e)                             \
-( ((e)-(s) > 3) ?                                                           \
-    ( ( 0x61 == ((const U8*)s)[0] ) ?                                       \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e)                            \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                                 \
 	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x66 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x68 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x69 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x6A == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x73 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ? 2 : 0 )             \
-    : ( 0x74 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ? 2\
+	: ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ?\
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0xBF == ((const U8*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+	( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[2], 's', 't') ) ? 3\
+	    : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+	: 0 )                                                               \
     : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0xBC == ((const U8*)s)[1] ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 3 : 0 )\
     : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
 	( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ?                        \
 	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -350,31 +377,38 @@
 	: ( 0xB4 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( ( 0xD5 == ((const U8*)s)[2] ) && ( ( ( ((const U8*)s)[3] & 0xF7 ) == 0xA5 ) || ((const U8*)s)[3] == 0xAB || ((const U8*)s)[3] == 0xB6 ) ) ? 4 : 0 )\
 	: ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-    : 0 )                                                                   \
-: ((e)-(s) > 2) ?                                                           \
-    ( ( 0x61 == ((const U8*)s)[0] ) ?                                       \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e)                            \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                             \
 	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x66 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x68 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x69 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x6A == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x73 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ? 2 : 0 )             \
-    : ( 0x74 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ? 2\
+	: ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ?\
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC == ((const U8*)s)[1] ) ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0xBF == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[2], 's', 't') ) ) ? 3 : 0 )\
+    : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x66 == ((const U8*)s)[1] || 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( ( 0x73 == ((const U8*)s)[0] ) && ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ) ? 2 : 0 )\
 : 0 )
 
 
@@ -381,66 +415,54 @@
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_utf8_safe(s,e)                                   \
 ( ((e)-(s) > 5) ?                                                           \
-    ( ( 0x61 == ((const U8*)s)[0] ) ?                                       \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                             \
 	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x66 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x69 == ((const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x68 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )\
+: ((e)-(s) > 4) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                             \
+	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x69 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x6A == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x73 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ? 2 : 0 )             \
-    : ( 0x74 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ? 2\
+	: ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ?\
 	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0xBF == ((const U8*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+	( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[2], 's', 't') ) ? 3\
+	    : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+	: 0 )                                                               \
     : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0xBC == ((const U8*)s)[1] ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 3 : 0 )\
     : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
 	( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ?                        \
 	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( 0xB1 == ((const U8*)s)[1] || 0xB7 == ((const U8*)s)[1] ) ?      \
 	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
-		( ( 0x82 == ((const U8*)s)[3] ) ?                           \
-		    ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
-		: 0 )                                                       \
+		( ( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
 	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-	: ( 0xB9 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
-		( ( 0x88 == ((const U8*)s)[3] ) ?                           \
-		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 0 )\
-		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
-		: 0 )                                                       \
-	    : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-	: 0 )                                                               \
+	: ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : ( 0xCF == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x81 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( 0x85 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
-		( ( 0x88 == ((const U8*)s)[3] ) ?                           \
-		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 0 )\
-		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
-		: ( 0x93 == ((const U8*)s)[3] ) ?                           \
-		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 4 )\
-		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
-		: 0 )                                                       \
+		( ( 0x93 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
 	    : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( 0x89 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
-		( ( 0x82 == ((const U8*)s)[3] ) ?                           \
-		    ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
-		: 0 )                                                       \
+		( ( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
 	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : ( 0xD5 == ((const U8*)s)[0] ) ?                                       \
@@ -454,72 +476,524 @@
 	    ( ( ( ( ( ((const U8*)s)[2] & 0xD8 ) == 0x80 ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
 	: ( ( ( ( 0xBD == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) || ( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)s)[2] == 0xBC ) ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
     : 0 )                                                                   \
-: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )
+: ((e)-(s) > 3) ? is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e)                          \
+( ( 0x81 == ((const U8*)s)[1] ) ?                                           \
+	    ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x85 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+		( ( 0x88 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+			( ( 0x80 == ((const U8*)s)[5] ) ? 0x1FE2            \
+			: ( 0x81 == ((const U8*)s)[5] ) ? 0x3B0 : 0 )       \
+		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+		: ( 0x93 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+			( ( 0x80 == ((const U8*)s)[5] ) ? 0x1F52            \
+			: ( 0x81 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+		: 0 )                                                       \
+	    : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x89 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+		: 0 )                                                       \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e)                          \
+( ( 0xD5 == ((const U8*)s)[0] ) ?                                           \
+	( ( 0xA5 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+	: ( 0xB4 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xD5 == ((const U8*)s)[2] ) ?                               \
+		( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14                    \
+		: ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15                    \
+		: ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17                    \
+		: ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 )              \
+	    : 0 )                                                           \
+	: ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+    : ( 0xE1 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBC == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x80 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+	    : ( 0x81 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+	    : ( 0x82 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+	    : ( 0x83 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+	    : ( 0x84 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+	    : ( 0x85 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+	    : ( 0x86 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+	    : ( 0x87 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+	    : ( 0xA0 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+	    : ( 0xA1 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+	    : ( 0xA2 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+	    : ( 0xA3 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+	    : ( 0xA4 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+	    : ( 0xA5 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+	    : ( 0xA6 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+	    : ( ( ( 0xA7 == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+	: ( 0xBD == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xA0 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+	    : ( 0xA1 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+	    : ( 0xA2 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+	    : ( 0xA3 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+	    : ( 0xA4 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+	    : ( 0xA5 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+	    : ( 0xA6 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+	    : ( 0xA7 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+	    : ( 0xB0 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+	    : ( 0xB4 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+	    : ( ( ( 0xBC == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+	: 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e)                          \
+( ( 0x81 == ((const U8*)s)[1] ) ?                                           \
+	    ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x85 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+		( ( 0x93 == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+	    : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x89 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e)                          \
+( ( 0xD5 == ((const U8*)s)[0] ) ?                                           \
+	( ( 0xA5 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+	: ( 0xB4 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xD5 == ((const U8*)s)[2] ) ?                               \
+		( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14                    \
+		: ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15                    \
+		: ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17                    \
+		: ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 )              \
+	    : 0 )                                                           \
+	: ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+    : ( 0xE1 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBC == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x80 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+	    : ( 0x81 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+	    : ( 0x82 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+	    : ( 0x83 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+	    : ( 0x84 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+	    : ( 0x85 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+	    : ( 0x86 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+	    : ( 0x87 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+	    : ( 0xA0 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+	    : ( 0xA1 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+	    : ( 0xA2 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+	    : ( 0xA3 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+	    : ( 0xA4 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+	    : ( 0xA5 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+	    : ( 0xA6 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+	    : ( ( ( 0xA7 == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+	: ( 0xBD == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xA0 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+	    : ( 0xA1 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+	    : ( 0xA2 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+	    : ( 0xA3 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+	    : ( 0xA4 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+	    : ( 0xA5 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+	    : ( 0xA6 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+	    : ( 0xA7 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+	    : ( 0xB0 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+	    : ( 0xB4 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+	    : ( ( ( 0xBC == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+	: 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e)                          \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                                 \
+	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05                  \
+	: ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF                \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05              \
+	    : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+	: 0 )                                                               \
+    : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+    : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xAC == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0xAE == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0xB1 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0xB7 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xCF == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x81 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x85 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+		( ( 0x93 == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+	    : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x89 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : ( 0xD5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xA5 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+	: ( 0xB4 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xD5 == ((const U8*)s)[2] ) ?                               \
+		( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14                    \
+		: ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15                    \
+		: ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17                    \
+		: ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 )              \
+	    : 0 )                                                           \
+	: ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e)                          \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                             \
+	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05                  \
+	: ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF                \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 0xFB00                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e)                          \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                                 \
+	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05                  \
+	: ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF                \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05              \
+	    : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+	: 0 )                                                               \
+    : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+    : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xAC == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0xAE == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0xB1 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+		: 0 )                                                       \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0xB7 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+		: 0 )                                                       \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( 0xB9 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+		( ( 0x88 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+			( ( 0x80 == ((const U8*)s)[5] ) ? 0x1FD2            \
+			: ( 0x81 == ((const U8*)s)[5] ) ? 0x390 : 0 )       \
+		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+		: 0 )                                                       \
+	    : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+	: 0 )                                                               \
+    : ( 0xCF == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e)                          \
+( ((e)-(s) > 4) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                             \
+	( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05                  \
+	: ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ?                             \
+	( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF                \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05              \
+	    : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+	: 0 )                                                               \
+    : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+    : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xAC == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0xAE == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0xB1 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0xB7 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+	    : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xCF == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e)                                 \
+( ((e)-(s) > 5) ? what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) )
+
 /*
 	MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+	%regcharclass_multi_char_folds::multi_char_folds('l', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_latin1_safe(s,e)                                 \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ?                            \
-	( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) ?                        \
-	    ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[2] & 0xDF ) == 0x4C ) ) ? 3 : 2 )\
-	: ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xDF ) == 0x4C ) ) ? 2 : 0 )\
-    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x53 ) && ( inRANGE(((const U8*)s)[1], 0x53, 0x54 ) || inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ) ? 2 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ?                            \
-	( ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) || ( ( ((const U8*)s)[1] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xDF ) == 0x4C ) ) ? 2 : 0 )\
-    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x53 ) && ( inRANGE(((const U8*)s)[1], 0x53, 0x54 ) || inRANGE(((const U8*)s)[1], 0x73, 0x74 ) ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ) ? 2 : 0 )\
 : 0 )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e)                               \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 0xFB00                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+	: ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
 /*
 	THREE_CHAR_FOLD: A three-character multi-char fold
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', '3')
+	%regcharclass_multi_char_folds::multi_char_folds('u', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_utf8_safe(s,e)                                   \
 ( ((e)-(s) > 5) ?                                                           \
-    ( ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x66 == ((const U8*)s)[1] ) && ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) && ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ) ? 3 : 0 )\
     : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
 	( ( 0xB1 == ((const U8*)s)[1] || 0xB7 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) && ( 0xCE == ((const U8*)s)[4] ) ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 	: ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCC == ((const U8*)s)[2] ) ) && ( 0x88 == ((const U8*)s)[3] ) ) ? ( ( 0xCC == ((const U8*)s)[4] ) ?\
-			( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 0 )\
 		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
     : ( 0xCF == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x85 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x88 == ((const U8*)s)[3] || 0x93 == ((const U8*)s)[3] ) ) ? ( ( 0xCC == ((const U8*)s)[4] ) ?\
-			( ( inRANGE(((const U8*)s)[5], 0x80, 0x81 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x80, 0x81) ) ? 6 : 0 )\
 		    : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
 	: ( ( ( ( ( 0x89 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) && ( 0xCE == ((const U8*)s)[4] ) ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
     : 0 )                                                                   \
-: ( ( ( ((e)-(s) > 2) && ( 0x66 == ((const U8*)s)[0] ) ) && ( 0x66 == ((const U8*)s)[1] ) ) && ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8*)s)[2] ) ) ? 3 : 0 )
+: ( ( ( ((e)-(s) > 2) && ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ) && ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ) && ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ) ? 3 : 0 )
 
 /*
 	THREE_CHAR_FOLD: A three-character multi-char fold
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', '3')
+	%regcharclass_multi_char_folds::multi_char_folds('l', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_latin1_safe(s,e)                                 \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ) && ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) ) && ( ( ( ((const U8*)s)[2] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[2] & 0xDF ) == 0x4C ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ) && ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ) && ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) || ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ) ) ? 3 : 0 )
 
 /*
 	THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+	%regcharclass_multi_char_folds::multi_char_folds('u', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e)                              \
 ( ((e)-(s) > 3) ?                                                           \
-    ( ( 0x61 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x68, 0x6A ) || inRANGE(((const U8*)s)[0], 0x73, 0x74 ) || 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x66 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 2 : 1 )                 \
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBF == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
 	( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
@@ -544,9 +1018,11 @@
 	: ( ( 0xBD == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) || ( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)s)[2] == 0xBC ) ) ? 3 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 2) ?                                                           \
-    ( ( 0x61 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x68, 0x6A ) || inRANGE(((const U8*)s)[0], 0x73, 0x74 ) || 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x66 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 2 : 1 )                 \
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBF == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
 	( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
@@ -561,9 +1037,11 @@
 	: ( ( 0xBD == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) || ( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)s)[2] == 0xBC ) ) ? 3 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 1) ?                                                           \
-    ( ( 0x61 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x68, 0x6A ) || inRANGE(((const U8*)s)[0], 0x73, 0x74 ) || 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x66 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x66 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 2 : 1 )                 \
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0xBF == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
 	( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
@@ -572,23 +1050,23 @@
 	( ( ( ( ((const U8*)s)[1] & 0xFB ) == 0x81 ) || ((const U8*)s)[1] == 0x89 || ((const U8*)s)[1] == 0x8E ) ? 2 : 0 )\
     : ( ( 0xD5 == ((const U8*)s)[0] ) && ( 0xA5 == ((const U8*)s)[1] || 0xB4 == ((const U8*)s)[1] || 0xBE == ((const U8*)s)[1] ) ) ? 2 : 0 )\
 : ((e)-(s) > 0) ?                                                           \
-    ( 0x61 == ((const U8*)s)[0] || 0x66 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x68, 0x6A ) || inRANGE(((const U8*)s)[0], 0x73, 0x74 ) || 0x77 == ((const U8*)s)[0] || 0x79 == ((const U8*)s)[0] )\
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) )\
 : 0 )
 
 /*
 	THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+	%regcharclass_multi_char_folds::multi_char_folds('l', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e)                            \
 ( ((e)-(s) > 1) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x41 ) || ( ( ((const U8*)s)[0] & 0xDE ) == 0x48 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x4A ) || ( ( ((const U8*)s)[0] & 0xDB ) == 0x53 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x54 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x59 ) ) ? 1\
-    : ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ?                            \
-	( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) ? 2 : 1 )                \
+    ( ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 2 : 1 )                 \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x41 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) || ( ( ((const U8*)s)[0] & 0xDE ) == 0x48 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x4A ) || ( ( ((const U8*)s)[0] & 0xDB ) == 0x53 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x54 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x59 ) )\
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) || ( ( ((const U8*)s)[0] & 0xDE ) == 'H' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) || ( ( ((const U8*)s)[0] & 0xDB ) == 'S' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) || ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) )\
 : 0 )
 
 /*
@@ -610,13 +1088,13 @@
     ( ( 0x87 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xE1 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0xBA == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x96, 0x9A ) || 0x9E == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x96, 0x9A) || 0x9E == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0xBD == ((const U8*)s)[1] ) ?                                       \
 	( ( ( ((const U8*)s)[2] & 0xF9 ) == 0x90 ) ? 3 : 0 )                \
     : ( 0xBE == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x80, 0xAF ) || inRANGE(((const U8*)s)[2], 0xB2, 0xB4 ) || inRANGE(((const U8*)s)[2], 0xB6, 0xB7 ) || 0xBC == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xAF) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xB2, 0xB4) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xB6, 0xB7) || 0xBC == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( ( 0xBF == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xCA ) == 0x82 ) || ( ( ((const U8*)s)[2] & 0xF7 ) == 0x84 ) || ((const U8*)s)[2] == 0xA4 || ( ( ((const U8*)s)[2] & 0xF7 ) == 0xB4 ) ) ) ? 3 : 0 )\
-: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0x86 ) || inRANGE(((const U8*)s)[2], 0x93, 0x97 ) ) ) ? 3 : 0 )
+: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x86) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x93, 0x97) ) ) ? 3 : 0 )
 
 /*
 	PROBLEMATIC_LOCALE_FOLD: characters whose fold is problematic under locale
@@ -626,10 +1104,10 @@
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLD_utf8(s)                                  \
 ( ( ((const U8*)s)[0] <= 0x7F ) ? 1                                         \
-: ( inRANGE(((const U8*)s)[0], 0xC2, 0xC3 ) ) ?                             \
+: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xC2, 0xC3) ) ?                  \
     2                                                                       \
 : ( 0xC4 == ((const U8*)s)[0] ) ?                                           \
-    ( ( inRANGE(((const U8*)s)[1], 0xB0, 0xB1 ) ) ? 2 : 0 )                 \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0xB0, 0xB1) ) ? 2 : 0 )      \
 : ( 0xC5 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x89 == ((const U8*)s)[1] || 0xB8 == ((const U8*)s)[1] || 0xBF == ((const U8*)s)[1] ) ? 2 : 0 )\
 : ( 0xC7 == ((const U8*)s)[0] ) ?                                           \
@@ -639,16 +1117,15 @@
 : ( 0xCE == ((const U8*)s)[0] ) ?                                           \
     ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x9C ) ? 2 : 0 )                    \
 : ( 0xE1 == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0xBA == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x96, 0x9A ) || 0x9E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( 0xBA == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x96, 0x9A) || 0x9E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xE2 == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x84 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0xAA, 0xAB ) ) ) ? 3 : 0 )\
-: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0x86 ) ) ) ? 3 : 0 )
+    ( ( ( 0x84 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xAA, 0xAB) ) ) ? 3 : 0 )\
+: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x86) ) ) ? 3 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLD_cp(cp)                                   \
 ( cp <= 0xFF || ( 0xFF < cp &&                                              \
-( 0x130 == cp || ( 0x130 < cp &&                                            \
-( 0x131 == cp || ( 0x131 < cp &&                                            \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp &&                  \
 ( 0x149 == cp || ( 0x149 < cp &&                                            \
 ( 0x178 == cp || ( 0x178 < cp &&                                            \
 ( 0x17F == cp || ( 0x17F < cp &&                                            \
@@ -656,10 +1133,9 @@
 ( 0x307 == cp || ( 0x307 < cp &&                                            \
 ( 0x39C == cp || ( 0x39C < cp &&                                            \
 ( 0x3BC == cp || ( 0x3BC < cp &&                                            \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&               \
 ( 0x1E9E == cp || ( 0x1E9E < cp &&                                          \
-( 0x212A == cp || ( 0x212A < cp &&                                          \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 
 /*
 	PROBLEMATIC_LOCALE_FOLDEDS_START: The first folded character of folds which are problematic under locale
@@ -669,10 +1145,10 @@
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLDEDS_START_utf8(s)                         \
 ( ( ((const U8*)s)[0] <= 0x7F ) ? 1                                         \
-: ( inRANGE(((const U8*)s)[0], 0xC2, 0xC3 ) ) ?                             \
+: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xC2, 0xC3) ) ?                  \
     2                                                                       \
 : ( 0xC4 == ((const U8*)s)[0] ) ?                                           \
-    ( ( inRANGE(((const U8*)s)[1], 0xB0, 0xB1 ) ) ? 2 : 0 )                 \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0xB0, 0xB1) ) ? 2 : 0 )      \
 : ( 0xC5 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x89 == ((const U8*)s)[1] || 0xB8 == ((const U8*)s)[1] || 0xBF == ((const U8*)s)[1] ) ? 2 : 0 )\
 : ( 0xC7 == ((const U8*)s)[0] ) ?                                           \
@@ -682,16 +1158,15 @@
 : ( 0xCE == ((const U8*)s)[0] ) ?                                           \
     ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x9C ) ? 2 : 0 )                    \
 : ( 0xE1 == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0xBA == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x96, 0x9A ) || 0x9E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( 0xBA == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x96, 0x9A) || 0x9E == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xE2 == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x84 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0xAA, 0xAB ) ) ) ? 3 : 0 )\
-: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0x86 ) ) ) ? 3 : 0 )
+    ( ( ( 0x84 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0xAA, 0xAB) ) ) ? 3 : 0 )\
+: ( ( ( 0xEF == ((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0x86) ) ) ? 3 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp(cp)                          \
 ( cp <= 0xFF || ( 0xFF < cp &&                                              \
-( 0x130 == cp || ( 0x130 < cp &&                                            \
-( 0x131 == cp || ( 0x131 < cp &&                                            \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp &&                  \
 ( 0x149 == cp || ( 0x149 < cp &&                                            \
 ( 0x178 == cp || ( 0x178 < cp &&                                            \
 ( 0x17F == cp || ( 0x17F < cp &&                                            \
@@ -699,10 +1174,9 @@
 ( 0x2BC == cp || ( 0x2BC < cp &&                                            \
 ( 0x39C == cp || ( 0x39C < cp &&                                            \
 ( 0x3BC == cp || ( 0x3BC < cp &&                                            \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&               \
 ( 0x1E9E == cp || ( 0x1E9E < cp &&                                          \
-( 0x212A == cp || ( 0x212A < cp &&                                          \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 
 /*
 	PATWS: pattern white space
@@ -712,25 +1186,16 @@
 /*** GENERATED CODE ***/
 #define is_PATWS_safe(s,e,is_utf8)                                          \
 ( ( LIKELY((e) > (s)) ) ?                                                   \
-    ( ( inRANGE(((const U8*)s)[0], 0x09, 0x0D ) || 0x20 == ((const U8*)s)[0] ) ? 1\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\t', '\r') || ' ' == ((const U8*)s)[0] ) ? 1\
     : (! is_utf8 ) ?                                                        \
 	    ( 0x85 == ((const U8*)s)[0] )                                   \
 	: ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ?                          \
 	    ( ( 0xC2 == ((const U8*)s)[0] ) ?                               \
 		( ( 0x85 == ((const U8*)s)[1] ) ? 2 : 0 )                   \
-	    : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x8E, 0x8F ) || inRANGE(((const U8*)s)[2], 0xA8, 0xA9 ) ) ) ? 3 : 0 )\
+	    : ( ( ( 0xE2 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x8E, 0x8F) || inRANGE_helper_(U8, ((const U8*)s)[2], 0xA8, 0xA9) ) ) ? 3 : 0 )\
 	: 0 )                                                               \
 : 0 )
 
-/*** GENERATED CODE ***/
-#define is_PATWS_cp(cp)                                                     \
-( inRANGE(cp, 0x09, 0x0D) || ( 0x0D < cp &&                                 \
-( 0x20 == cp || ( 0x20 < cp &&                                              \
-( 0x85 == cp || ( 0x85 < cp &&                                              \
-( 0x200E == cp || ( 0x200E < cp &&                                          \
-( 0x200F == cp || ( 0x200F < cp &&                                          \
-( 0x2028 == cp || 0x2029 == cp ) ) ) ) ) ) ) ) ) ) )
-
 /*
 	HANGUL_ED: Hangul syllables whose first character is \xED
 
@@ -738,7 +1203,7 @@
 */
 /*** GENERATED CODE ***/
 #define is_HANGUL_ED_utf8_safe(s,e)                                         \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( 0xED == ((const U8*)s)[0] ) ) && ( inRANGE(((const U8*)s)[1], 0x80, 0x9F ) ) ) && ( inRANGE(((const U8*)s)[2], 0x80, 0xBF ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( 0xED == ((const U8*)s)[0] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x80, 0x9F) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x80, 0xBF) ) ) ? 3 : 0 )
 
 #endif	/* ASCII/Latin1 */
 
@@ -755,44 +1220,44 @@
 /*** GENERATED CODE ***/
 #define is_LNBREAK_safe(s,e,is_utf8)                                        \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
-    : ( ( ( ( is_utf8 ) && ( 0xCA == ((const U8*)s)[0] ) ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    : ( ( ( ( is_utf8 ) && ( 0xCA == ((const U8*)s)[0] ) ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+    ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_LNBREAK_utf8_safe(s,e)                                           \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
-    : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+    ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_LNBREAK_latin1_safe(s,e)                                         \
 ( ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x15 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+    ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
 : 0 )
 
 /*
@@ -806,7 +1271,7 @@
     ( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x41 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
     : ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
@@ -815,7 +1280,7 @@
 /*** GENERATED CODE ***/
 #define is_HORIZWS_cp_high(cp)                                              \
 ( 0x1680 == cp || ( 0x1680 < cp &&                                          \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp &&               \
 ( 0x202F == cp || ( 0x202F < cp &&                                          \
 ( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) )
 
@@ -826,11 +1291,11 @@
 */
 /*** GENERATED CODE ***/
 #define is_VERTWS_high(s)                                                   \
-( ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )
+( ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_VERTWS_cp_high(cp)                                               \
-( 0x2028 == cp || 0x2029 == cp )
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) )
 
 /*
 	XDIGIT: Hexadecimal digits
@@ -840,13 +1305,13 @@
 /*** GENERATED CODE ***/
 #define is_XDIGIT_high(s)                                                   \
 ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x73 == ((const U8*)s)[1] ) ) ? ( ( 0x67 == ((const U8*)s)[2] ) ?\
-	    ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x68 ) ) ? 4 : 0 )\
-	: ( ( inRANGE(((const U8*)s)[2], 0x68, 0x69 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x68) ) ? 4 : 0 )\
+	: ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x68, 0x69) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x42, 0x47) ) ) ? 4 : 0 ) : 0 )
 
 /*** GENERATED CODE ***/
 #define is_XDIGIT_cp_high(cp)                                               \
-( inRANGE(cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp &&                           \
-( inRANGE(cp, 0xFF21, 0xFF26) || inRANGE(cp, 0xFF41, 0xFF46) ) ) )
+( inRANGE_helper_(UV, cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp &&               \
+( inRANGE_helper_(UV, cp, 0xFF21, 0xFF26) || inRANGE_helper_(UV, cp, 0xFF41, 0xFF46) ) ) )
 
 /*
 	XPERLSPACE: \p{XPerlSpace}
@@ -859,9 +1324,9 @@
     ( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x41 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) || 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) || 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )
 
@@ -868,11 +1333,10 @@
 /*** GENERATED CODE ***/
 #define is_XPERLSPACE_cp_high(cp)                                           \
 ( 0x1680 == cp || ( 0x1680 < cp &&                                          \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp &&                           \
-( 0x2028 == cp || ( 0x2028 < cp &&                                          \
-( 0x2029 == cp || ( 0x2029 < cp &&                                          \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp &&               \
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) || ( 0x2029 < cp &&               \
 ( 0x202F == cp || ( 0x202F < cp &&                                          \
-( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) ) ) )
+( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) )
 
 /*
 	NONCHAR: Non character code points
@@ -884,16 +1348,16 @@
 ( ( ( LIKELY((e) > (s)) ) && ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ) ? ( ( 0xDD == ((const U8*)s)[0] ) ?\
 	    ( ( 0x73 == ((const U8*)s)[1] ) ?                               \
 		( ( 0x55 == ((const U8*)s)[2] ) ?                           \
-		    ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x73 ) ) ? 4 : 0 )\
+		    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x73) ) ? 4 : 0 )\
 		: ( 0x56 == ((const U8*)s)[2] ) ?                           \
-		    ( ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x56 ) ) ? 4 : 0 )\
-		: ( ( 0x73 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x72, 0x73 ) ) ) ? 4 : 0 )\
+		    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x56) ) ? 4 : 0 )\
+		: ( ( 0x73 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x72, 0x73) ) ) ? 4 : 0 )\
 	    : 0 )                                                           \
 	: ( 0xDF == ((const U8*)s)[0] || 0xEA == ((const U8*)s)[0] || 0xEC == ((const U8*)s)[0] ) ?\
-	    ( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x72, 0x73 ) ) ) ? 4 : 0 )\
+	    ( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x72, 0x73) ) ) ? 4 : 0 )\
 	: ( 0xED == ((const U8*)s)[0] ) ?                                   \
-	    ( ( ( ( ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x62 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x64 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x68 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x71 ) ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) && ( inRANGE(((const U8*)s)[4], 0x72, 0x73 ) ) ) ? 5 : 0 )\
-	: ( ( ( ( ( 0xEE == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) && ( inRANGE(((const U8*)s)[4], 0x72, 0x73 ) ) ) ? 5 : 0 ) : 0 )
+	    ( ( ( ( ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x62 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x64 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x68 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x71 ) ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x72, 0x73) ) ) ? 5 : 0 )\
+	: ( ( ( ( ( 0xEE == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( 0x73 == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x72, 0x73) ) ) ? 5 : 0 ) : 0 )
 
 /*
 	SURROGATE: Surrogate code points
@@ -902,7 +1366,7 @@
 */
 /*** GENERATED CODE ***/
 #define is_SURROGATE_utf8_safe(s,e)                                         \
-( ( ( ( ( ( ((e) - (s)) >= 4 ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( inRANGE(((const U8*)s)[1], 0x65, 0x66 ) ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x73 ) ) ) ? 4 : 0 )
+( ( ( ( ( ( ((e) - (s)) >= 4 ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x65, 0x66) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x73) ) ) ? 4 : 0 )
 
 /*
 	QUOTEMETA: Meta-characters that \Q should quote
@@ -910,44 +1374,39 @@
 	\p{_Perl_Quotemeta}
 */
 /*** GENERATED CODE ***/
-#define is_QUOTEMETA_high(s)                                                \
-( ( 0xB1 == ((const U8*)s)[0] ) ?                                           \
-    ( ( 0x56 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
-: ( 0xB8 == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x57 == ((const U8*)s)[1] ) && ( 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-: ( 0xBB == ((const U8*)s)[0] ) ?                                           \
-    ( ( 0x51 == ((const U8*)s)[1] ) ?                                       \
-	( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
-    : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-: ( 0xBC == ((const U8*)s)[0] ) ?                                           \
-    ( ( 0x63 == ((const U8*)s)[1] ) ?                                       \
+#define is_QUOTEMETA_high_part0_(s)                                         \
+( ( 0x63 == ((const U8*)s)[1] ) ?                                           \
 	( ( 0x41 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
-    : ( ( 0x71 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x63, 0x64 ) ) ) ? 3 : 0 )\
-: ( 0xBE == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x41 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x52, 0x55 ) ) ) ? 3 : 0 )\
+    : ( ( 0x71 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x63, 0x64) ) ) ? 3 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define is_QUOTEMETA_high_part1_(s)                                         \
+( ( 0xBE == ((const U8*)s)[0] ) ?                                           \
+    ( ( ( 0x41 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x52, 0x55) ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
-    ( ( 0x41 == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x54, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x73 ) ) ?\
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+    ( ( 0x41 == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x54, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x73) ) ?\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
     : ( 0x43 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x42, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x62 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x64, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x42, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x62 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
     : ( 0x44 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x56 ) ) ? 3 : 0 )\
-    : ( ( 0x53 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x57, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x56) ) ? 3 : 0 )\
+    : ( ( 0x53 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x57, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) ? 3 : 0 )\
 : ( 0xCB == ((const U8*)s)[0] ) ?                                           \
-    ( ( inRANGE(((const U8*)s)[1], 0x41, 0x43 ) || inRANGE(((const U8*)s)[1], 0x49, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x69 ) || inRANGE(((const U8*)s)[1], 0x71, 0x73 ) ) ?\
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x43) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x49, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x69) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x71, 0x73) ) ?\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
     : ( 0x6A == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x64 ) ) ? 3 : 0 )\
-    : ( ( 0x70 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x63, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x64) ) ? 3 : 0 )\
+    : ( ( 0x70 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x63, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) ? 3 : 0 )\
 : ( 0xCC == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x73 ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) ? 3 : 0 )\
+    ( ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x73) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) ? 3 : 0 )\
 : ( 0xCD == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( inRANGE(((const U8*)s)[1], 0x57, 0x59 ) || 0x62 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ) ? 3 : 0 )\
+    ( ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x59) || 0x62 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ) ? 3 : 0 )\
 : ( 0xCE == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x41 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x44 ) || inRANGE(((const U8*)s)[2], 0x49, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x44) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x41 == ((const U8*)s)[2] || 0x57 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x45 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
@@ -954,53 +1413,66 @@
 : ( 0xDD == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x73 == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x4A == ((const U8*)s)[2] ) ?                                   \
-	    ( ( inRANGE(((const U8*)s)[3], 0x72, 0x73 ) ) ? 4 : 0 )         \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x72, 0x73) ) ? 4 : 0 )\
 	: ( 0x57 == ((const U8*)s)[2] ) ?                                   \
-	    ( ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x56 ) ) ? 4 : 0 )\
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x56) ) ? 4 : 0 )\
 	: ( 0x59 == ((const U8*)s)[2] ) ?                                   \
-	    ( ( inRANGE(((const U8*)s)[3], 0x46, 0x47 ) ) ? 4 : 0 )         \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x46, 0x47) ) ? 4 : 0 )\
 	: ( 0x66 == ((const U8*)s)[2] ) ?                                   \
 	    ( ( 0x73 == ((const U8*)s)[3] ) ? 4 : 0 )                       \
 	: ( 0x71 == ((const U8*)s)[2] ) ?                                   \
 	    ( ( 0x41 == ((const U8*)s)[3] ) ? 4 : 0 )                       \
-	: ( ( 0x73 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x67 ) ) ) ? 4 : 0 )\
+	: ( ( 0x73 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x67) ) ) ? 4 : 0 )\
     : 0 )                                                                   \
 : ( 0xDF == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x56 == ((const U8*)s)[1] ) ?                                       \
-	( ( ( 0x46 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x44 ) ) ) ? 4 : 0 )\
-    : ( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x52 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x62, 0x69 ) ) ) ? 4 : 0 )\
-: ( ( ( ( ( 0xED == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x44 ) ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x73 ) ) ) && ( inRANGE(((const U8*)s)[4], 0x41, 0x4A ) || inRANGE(((const U8*)s)[4], 0x51, 0x59 ) || inRANGE(((const U8*)s)[4], 0x62, 0x6A ) || inRANGE(((const U8*)s)[4], 0x70, 0x73 ) ) ) ? 5 : 0 )
+	( ( ( 0x46 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x44) ) ) ? 4 : 0 )\
+    : ( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x52 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x69) ) ) ? 4 : 0 )\
+: ( ( ( ( ( 0xED == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x44) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x73) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x70, 0x73) ) ) ? 5 : 0 )
 
+
+/*** GENERATED CODE ***/
+#define is_QUOTEMETA_high(s)                                                \
+( ( 0xB1 == ((const U8*)s)[0] ) ?                                           \
+    ( ( 0x56 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
+: ( 0xB8 == ((const U8*)s)[0] ) ?                                           \
+    ( ( ( 0x57 == ((const U8*)s)[1] ) && ( 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+: ( 0xBB == ((const U8*)s)[0] ) ?                                           \
+    ( ( 0x51 == ((const U8*)s)[1] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
+    : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+: ( 0xBC == ((const U8*)s)[0] ) ? is_QUOTEMETA_high_part0_(s) : is_QUOTEMETA_high_part1_(s) )
+
 /*
 	MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+	%regcharclass_multi_char_folds::multi_char_folds('u', 'a')
 */
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                             \
-( ( 0x86 == ((const U8*)s)[1] ) ?                                           \
-	    ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )
+#define is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e)                            \
+( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )
 
 
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e)                             \
-( ( 0x88 == ((const U8*)s)[0] ) ?                                           \
-	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x89 == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x8F == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-    : ( 0x91 == ((const U8*)s)[0] ) ?                                       \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e)                            \
+( ( 0x8F == ((const U8*)s)[0] ) ?                                           \
+	( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+		( ( 0x73 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+	    : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 )             \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA2 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 )             \
-    : ( 0xA3 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 )                       \
+	: ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 )                 \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x70 == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
     : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1014,7 +1486,7 @@
 	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
 		( ( 0x49 == ((const U8*)s)[3] ) ?                           \
 		    ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
 		    : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 		: 0 )                                                       \
 	    : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1026,11 +1498,11 @@
 	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
 		( ( 0x49 == ((const U8*)s)[3] ) ?                           \
 		    ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
 		    : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 		: ( 0x62 == ((const U8*)s)[3] ) ?                           \
 		    ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 4 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 4 )\
 		    : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
 		: 0 )                                                       \
 	    : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1050,36 +1522,42 @@
 	    : ( ( ( ( 0x72 == ((const U8*)s)[2] ) && ( 0xB8 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x65 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 	: 0 )                                                               \
     : ( 0xBF == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x67, 0x68 ) ) ?                     \
-	    ( ( ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
-	: ( ( ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x67, 0x68) ) ?          \
+	    ( ( ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+	: ( ( ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
     : 0 )
 
 
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e)                             \
-( ( 0x81 == ((const U8*)s)[0] ) ?                                           \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e)                            \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                                 \
 	( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x88 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
 	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x89 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x8F == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-    : ( 0x91 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+		( ( 0x73 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+	    : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 )             \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA2 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 )             \
-    : ( 0xA3 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 )                       \
+	: ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 )                 \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x70 == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
     : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1101,37 +1579,43 @@
 	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : ( 0xBF == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x67, 0x68 ) ) ?                     \
-	    ( ( ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
-	: ( ( ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x67, 0x68) ) ?          \
+	    ( ( ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+	: ( ( ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
     : 0 )
 
 
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e)                             \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e)                            \
 ( ((e)-(s) > 3) ?                                                           \
-    ( ( 0x81 == ((const U8*)s)[0] ) ?                                       \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
 	( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x88 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
 	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x89 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0x73 == ((const U8*)s)[1] ) && ( 0x8F == ((const U8*)s)[2] ) ) && ( 0x73 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-    : ( 0x91 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+		( ( 0x73 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+	    : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 )             \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA2 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 )             \
-    : ( 0xA3 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 )                       \
+	: ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 )                 \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x70 == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
     : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1154,29 +1638,33 @@
 	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 2) ?                                                           \
-    ( ( 0x81 == ((const U8*)s)[0] ) ?                                       \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
 	( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x88 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
 	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x89 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x91 == ((const U8*)s)[0] ) ?                                       \
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0x73 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA2 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 )             \
-    : ( 0xA3 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x73 == ((const U8*)s)[2] ) ? 3 : 0 )                       \
+	: ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 )                 \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
 	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( ( ( 0xAB == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ( 0xAB == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] || 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( ( 0xA2 == ((const U8*)s)[0] ) && ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
 : 0 )
 
 
@@ -1183,75 +1671,518 @@
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_utf8_safe(s,e)                                   \
 ( ((e)-(s) > 5) ?                                                           \
-    ( ( 0x81 == ((const U8*)s)[0] ) ?                                       \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
 	( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x86 == ((const U8*)s)[0] ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )\
-: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )\
+: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e)                          \
+( ( 0x52 == ((const U8*)s)[1] ) ?                                           \
+	    ( ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( ( 0xB8 == ((const U8*)s)[3] ) && ( 0x53 == ((const U8*)s)[4] ) ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x587 : 0 )\
+	    : ( 0x63 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB8 == ((const U8*)s)[3] ) && ( 0x52 == ((const U8*)s)[4] ) ) ? ( ( 0x46 == ((const U8*)s)[5] ) ? 0xFB14\
+			: ( 0x52 == ((const U8*)s)[5] ) ? 0xFB15            \
+			: ( 0x54 == ((const U8*)s)[5] ) ? 0xFB17            \
+			: ( 0x65 == ((const U8*)s)[5] ) ? 0xFB13 : 0 ) : 0 )\
+	    : ( ( ( ( 0x72 == ((const U8*)s)[2] ) && ( 0xB8 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x65 == ((const U8*)s)[5] ) ) ? 0xFB16 : 0 )\
+	: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e)                          \
+( ( 0xBF == ((const U8*)s)[0] ) ?                                           \
+	( ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+	    : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+	: ( 0x68 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+	    : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+	: ( 0x6A == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+	    : ( 0x48 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+	    : ( 0x57 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+	    : ( 0x63 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+	    : ( ( ( 0x70 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+	: 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e)                          \
+( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                                 \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e)                          \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                                 \
+	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+		( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+		: 0 )                                                       \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+		: 0 )                                                       \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( 0x68 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x49 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
+			( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FD2            \
+			: ( 0x42 == ((const U8*)s)[5] ) ? 0x390 : 0 )       \
+		    : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+		: 0 )                                                       \
+	    : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+	: 0 )                                                               \
+    : ( 0xB5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x42 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x49 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
+			( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FE2            \
+			: ( 0x42 == ((const U8*)s)[5] ) ? 0x3B0 : 0 )       \
+		    : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+		: ( 0x62 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
+			( ( 0x41 == ((const U8*)s)[5] ) ? 0x1F52            \
+			: ( 0x42 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+		    : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+		: 0 )                                                       \
+	    : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+		: 0 )                                                       \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : ( 0xB8 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e)                          \
+( ( 0x42 == ((const U8*)s)[1] ) ?                                           \
+	    ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x62 == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+	    : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e)                          \
+( ( 0xBF == ((const U8*)s)[0] ) ?                                           \
+	( ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+	    : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+	: ( 0x68 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+	    : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+	: ( 0x6A == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+	    : ( 0x48 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+	    : ( 0x57 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+	    : ( 0x63 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+	    : ( ( ( 0x70 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+	: 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e)                          \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                                 \
+	( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+		( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( ( ( 0x68 == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xB5 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x42 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x62 == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+	    : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e)                          \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+	( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( ( ( 0xAB == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e)                                 \
+( ((e)-(s) > 5) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+	( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )\
+: ((e)-(s) > 4) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+	( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+	( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+		( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+	( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+	    : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( ( ( 0x68 == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xB5 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) )
+
 /*
 	MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+	%regcharclass_multi_char_folds::multi_char_folds('l', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_latin1_safe(s,e)                                 \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ?                            \
-	( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ?                        \
-	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[2] & 0xBF ) == 0x93 ) ) ? 3 : 2 )\
-	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x93 ) ) ? 2 : 0 )\
-    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 0xA2 ) && ( ( ((const U8*)s)[1] & 0xBE ) == 0xA2 ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ?                            \
-	( ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x93 ) ) ? 2 : 0 )\
-    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 0xA2 ) && ( ( ((const U8*)s)[1] & 0xBE ) == 0xA2 ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
 : 0 )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e)                               \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
 /*
 	THREE_CHAR_FOLD: A three-character multi-char fold
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', '3')
+	%regcharclass_multi_char_folds::multi_char_folds('u', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_utf8_safe(s,e)                                   \
 ( ((e)-(s) > 5) ?                                                           \
-    ( ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x86 == ((const U8*)s)[1] ) && ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )\
     : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x58 == ((const U8*)s)[1] || 0x66 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) && ( 0xB4 == ((const U8*)s)[4] ) ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 	: ( ( ( 0x68 == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x49 == ((const U8*)s)[3] ) ) ? ( ( 0xAF == ((const U8*)s)[4] ) ?\
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
 		    : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
     : ( 0xB5 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x46 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x49 == ((const U8*)s)[3] || 0x62 == ((const U8*)s)[3] ) ) ? ( ( 0xAF == ((const U8*)s)[4] ) ?\
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
 		    : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
 	: ( ( ( ( ( 0x4A == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) && ( 0xB4 == ((const U8*)s)[4] ) ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
     : 0 )                                                                   \
-: ( ( ( ((e)-(s) > 2) && ( 0x86 == ((const U8*)s)[0] ) ) && ( 0x86 == ((const U8*)s)[1] ) ) && ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ) ? 3 : 0 )
+: ( ( ( ((e)-(s) > 2) && ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )
 
 /*
 	THREE_CHAR_FOLD: A three-character multi-char fold
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', '3')
+	%regcharclass_multi_char_folds::multi_char_folds('l', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_latin1_safe(s,e)                                 \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[2] & 0xBF ) == 0x93 ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )
 
 /*
 	THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+	%regcharclass_multi_char_folds::multi_char_folds('u', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e)                              \
 ( ((e)-(s) > 3) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 )                 \
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
@@ -1271,14 +2202,16 @@
     : ( 0xB8 == ((const U8*)s)[0] ) ?                                       \
 	( ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x46 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xBF == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x67, 0x68 ) ) ?                     \
-	    ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) ? 3 : 0 )         \
-	: ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x67, 0x68) ) ?          \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) ? 3 : 0 )\
+	: ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 2) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 )                 \
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
@@ -1288,14 +2221,16 @@
     : ( 0xB8 == ((const U8*)s)[0] ) ?                                       \
 	( ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x46 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xBF == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x67, 0x68 ) ) ?                     \
-	    ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) ? 3 : 0 )         \
-	: ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x67, 0x68) ) ?          \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) ? 3 : 0 )\
+	: ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 1) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 )                 \
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x73 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
@@ -1302,23 +2237,23 @@
 	( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] || 0x58 == ((const U8*)s)[1] || 0x66 == ((const U8*)s)[1] || 0x68 == ((const U8*)s)[1] ) ? 2 : 0 )\
     : ( ( 0xB5 == ((const U8*)s)[0] ) && ( ( ( ((const U8*)s)[1] & 0xFB ) == 0x42 ) || ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x55 ) ) ? 2 : 0 )\
 : ((e)-(s) > 0) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x86 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA8 )\
+    ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0x9F ) == 'f' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) )\
 : 0 )
 
 /*
 	THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+	%regcharclass_multi_char_folds::multi_char_folds('l', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e)                            \
 ( ((e)-(s) > 1) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0xA2 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA6 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA8 ) ) ? 1\
-    : ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ?                            \
-	( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ? 2 : 1 )                \
+    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 )                 \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xAF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0x9F ) == 0x86 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0xA2 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA8 ) )\
+    ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0x9F ) == 'f' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) )\
 : 0 )
 
 /*
@@ -1330,7 +2265,7 @@
 #define is_FOLDS_TO_MULTI_utf8(s)                                           \
 ( ( 0x8A == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x73 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
-: ( 0x8D == ((const U8*)s)[0] || 0x9C == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xB3, 0xB4 ) ) ?\
+: ( 0x8D == ((const U8*)s)[0] || 0x9C == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0xB3, 0xB4) ) ?\
     ( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0x8E == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 )                               \
@@ -1338,17 +2273,17 @@
     ( ( ( 0x53 == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xBF == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x63 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x65, 0x69 ) || 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x69) || 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x69 == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x57 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x63 == ((const U8*)s)[2] || 0x65 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x70 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x73 ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x73) ) ? 3 : 0 )\
     : ( 0x71 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x56 ) || 0x59 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x63 ) || inRANGE(((const U8*)s)[2], 0x65, 0x66 ) || 0x70 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x56) || 0x59 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x63) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x66) || 0x70 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x72 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x43, 0x45 ) || inRANGE(((const U8*)s)[2], 0x47, 0x48 ) || 0x53 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x65, 0x66 ) ) ? 3 : 0 )\
-    : ( ( 0x73 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x43, 0x45 ) || inRANGE(((const U8*)s)[2], 0x47, 0x48 ) || 0x59 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x63 ) || inRANGE(((const U8*)s)[2], 0x65, 0x66 ) || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) || inRANGE(((const U8*)s)[3], 0x62, 0x66 ) ) ) ? 4 : 0 )
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x43, 0x45) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x47, 0x48) || 0x53 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x66) ) ? 3 : 0 )\
+    : ( ( 0x73 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x43, 0x45) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x47, 0x48) || 0x59 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x63) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x66) || 0x70 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x66) ) ) ? 4 : 0 )
 
 /*
 	PROBLEMATIC_LOCALE_FOLD: characters whose fold is problematic under locale
@@ -1357,11 +2292,11 @@
 */
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLD_utf8(s)                                  \
-( ( ( ((const U8*)s)[0] <= 0x40 ) || inRANGE(((const U8*)s)[0], 0x4B, 0x50 ) || inRANGE(((const U8*)s)[0], 0x5A, 0x61 ) || inRANGE(((const U8*)s)[0], 0x6B, 0x6F ) || inRANGE(((const U8*)s)[0], 0x79, 0x7F ) || inRANGE(((const U8*)s)[0], 0x81, 0x89 ) || inRANGE(((const U8*)s)[0], 0x91, 0x99 ) || inRANGE(((const U8*)s)[0], 0xA1, 0xA9 ) || 0xAD == ((const U8*)s)[0] || 0xBD == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xC0, 0xC9 ) || inRANGE(((const U8*)s)[0], 0xD0, 0xD9 ) || 0xE0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xE2, 0xE9 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) || 0xFF == ((const U8*)s)[0] ) ? 1\
-: ( 0x80 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x8A, 0x8B ) ) ?\
-    ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x73 ) ) ? 2 : 0 )\
+( ( ( ((const U8*)s)[0] <= ' ' ) || inRANGE_helper_(U8, ((const U8*)s)[0], '.', '&') || inRANGE_helper_(U8, ((const U8*)s)[0], '!', '/') || inRANGE_helper_(U8, ((const U8*)s)[0], ',', '?') || inRANGE_helper_(U8, ((const U8*)s)[0], '`', '"') || inRANGE_helper_(U8, ((const U8*)s)[0], 'a', 'i') || inRANGE_helper_(U8, ((const U8*)s)[0], 'j', 'r') || inRANGE_helper_(U8, ((const U8*)s)[0], '~', 'z') || '[' == ((const U8*)s)[0] || ']' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '{', 'I') || inRANGE_helper_(U8, ((const U8*)s)[0], '}', 'R') || '\\' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 'S', 'Z') || inRANGE_helper_(U8, ((const U8*)s)[0], '0', '9') || 0xFF == ((const U8*)s)[0] ) ? 1\
+: ( 0x80 == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0x8A, 0x8B) ) ?\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x73) ) ? 2 : 0 )\
 : ( 0x8D == ((const U8*)s)[0] ) ?                                           \
-    ( ( inRANGE(((const U8*)s)[1], 0x57, 0x58 ) ) ? 2 : 0 )                 \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x58) ) ? 2 : 0 )      \
 : ( 0x8E == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0x8F == ((const U8*)s)[0] ) ?                                           \
@@ -1370,19 +2305,18 @@
     ( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xAF == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x48 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
-: ( inRANGE(((const U8*)s)[0], 0xB3, 0xB4 ) ) ?                             \
+: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xB3, 0xB4) ) ?                  \
     ( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xBF == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x63 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x65, 0x69 ) || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( 0x63 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x69) || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x51, 0x52 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) ) ) ? 4 : 0 )
+    ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x52) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) ) ) ? 4 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLD_cp(cp)                                   \
 ( cp <= 0xFF || ( 0xFF < cp &&                                              \
-( 0x130 == cp || ( 0x130 < cp &&                                            \
-( 0x131 == cp || ( 0x131 < cp &&                                            \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp &&                  \
 ( 0x149 == cp || ( 0x149 < cp &&                                            \
 ( 0x178 == cp || ( 0x178 < cp &&                                            \
 ( 0x17F == cp || ( 0x17F < cp &&                                            \
@@ -1390,10 +2324,9 @@
 ( 0x307 == cp || ( 0x307 < cp &&                                            \
 ( 0x39C == cp || ( 0x39C < cp &&                                            \
 ( 0x3BC == cp || ( 0x3BC < cp &&                                            \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&               \
 ( 0x1E9E == cp || ( 0x1E9E < cp &&                                          \
-( 0x212A == cp || ( 0x212A < cp &&                                          \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 
 /*
 	PROBLEMATIC_LOCALE_FOLDEDS_START: The first folded character of folds which are problematic under locale
@@ -1402,11 +2335,11 @@
 */
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLDEDS_START_utf8(s)                         \
-( ( ( ((const U8*)s)[0] <= 0x40 ) || inRANGE(((const U8*)s)[0], 0x4B, 0x50 ) || inRANGE(((const U8*)s)[0], 0x5A, 0x61 ) || inRANGE(((const U8*)s)[0], 0x6B, 0x6F ) || inRANGE(((const U8*)s)[0], 0x79, 0x7F ) || inRANGE(((const U8*)s)[0], 0x81, 0x89 ) || inRANGE(((const U8*)s)[0], 0x91, 0x99 ) || inRANGE(((const U8*)s)[0], 0xA1, 0xA9 ) || 0xAD == ((const U8*)s)[0] || 0xBD == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xC0, 0xC9 ) || inRANGE(((const U8*)s)[0], 0xD0, 0xD9 ) || 0xE0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xE2, 0xE9 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) || 0xFF == ((const U8*)s)[0] ) ? 1\
-: ( 0x80 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x8A, 0x8B ) ) ?\
-    ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x73 ) ) ? 2 : 0 )\
+( ( ( ((const U8*)s)[0] <= ' ' ) || inRANGE_helper_(U8, ((const U8*)s)[0], '.', '&') || inRANGE_helper_(U8, ((const U8*)s)[0], '!', '/') || inRANGE_helper_(U8, ((const U8*)s)[0], ',', '?') || inRANGE_helper_(U8, ((const U8*)s)[0], '`', '"') || inRANGE_helper_(U8, ((const U8*)s)[0], 'a', 'i') || inRANGE_helper_(U8, ((const U8*)s)[0], 'j', 'r') || inRANGE_helper_(U8, ((const U8*)s)[0], '~', 'z') || '[' == ((const U8*)s)[0] || ']' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '{', 'I') || inRANGE_helper_(U8, ((const U8*)s)[0], '}', 'R') || '\\' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 'S', 'Z') || inRANGE_helper_(U8, ((const U8*)s)[0], '0', '9') || 0xFF == ((const U8*)s)[0] ) ? 1\
+: ( 0x80 == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0x8A, 0x8B) ) ?\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x73) ) ? 2 : 0 )\
 : ( 0x8D == ((const U8*)s)[0] ) ?                                           \
-    ( ( inRANGE(((const U8*)s)[1], 0x57, 0x58 ) ) ? 2 : 0 )                 \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x58) ) ? 2 : 0 )      \
 : ( 0x8E == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0x8F == ((const U8*)s)[0] ) ?                                           \
@@ -1413,19 +2346,18 @@
     ( ( 0x67 == ((const U8*)s)[1] || 0x73 == ((const U8*)s)[1] ) ? 2 : 0 )  \
 : ( 0x9C == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
-: ( 0xAB == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xB3, 0xB4 ) ) ?\
+: ( 0xAB == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0xB3, 0xB4) ) ?\
     ( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xBF == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x63 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x65, 0x69 ) || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( 0x63 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x65, 0x69) || 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x51, 0x52 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) ) ) ? 4 : 0 )
+    ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x52) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) && ( 0x67 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) ) ) ? 4 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp(cp)                          \
 ( cp <= 0xFF || ( 0xFF < cp &&                                              \
-( 0x130 == cp || ( 0x130 < cp &&                                            \
-( 0x131 == cp || ( 0x131 < cp &&                                            \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp &&                  \
 ( 0x149 == cp || ( 0x149 < cp &&                                            \
 ( 0x178 == cp || ( 0x178 < cp &&                                            \
 ( 0x17F == cp || ( 0x17F < cp &&                                            \
@@ -1433,10 +2365,9 @@
 ( 0x2BC == cp || ( 0x2BC < cp &&                                            \
 ( 0x39C == cp || ( 0x39C < cp &&                                            \
 ( 0x3BC == cp || ( 0x3BC < cp &&                                            \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&               \
 ( 0x1E9E == cp || ( 0x1E9E < cp &&                                          \
-( 0x212A == cp || ( 0x212A < cp &&                                          \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 
 /*
 	PATWS: pattern white space
@@ -1446,23 +2377,12 @@
 /*** GENERATED CODE ***/
 #define is_PATWS_safe(s,e,is_utf8)                                          \
 ( ( LIKELY((e) > (s)) ) ?                                                   \
-    ( ( 0x05 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1\
+    ( ( '\t' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || '\n' == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] || ' ' == ((const U8*)s)[0] ) ? 1\
     : ( ( is_utf8 && LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xCA == ((const U8*)s)[0] ) ) ? ( ( 0x41 == ((const U8*)s)[1] ) ?\
-		    ( ( inRANGE(((const U8*)s)[2], 0x55, 0x56 ) ) ? 3 : 0 ) \
-		: ( ( 0x42 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 ) : 0 )\
+		    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x55, 0x56) ) ? 3 : 0 )\
+		: ( ( 0x42 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 ) : 0 )\
 : 0 )
 
-/*** GENERATED CODE ***/
-#define is_PATWS_cp(cp)                                                     \
-( 0x05 == cp || ( 0x05 < cp &&                                              \
-( inRANGE(cp, 0x0B, 0x0D) || ( 0x0D < cp &&                                 \
-( 0x15 == cp || ( 0x15 < cp &&                                              \
-( 0x25 == cp || ( 0x25 < cp &&                                              \
-( 0x40 == cp || ( 0x40 < cp &&                                              \
-( 0x200E == cp || ( 0x200E < cp &&                                          \
-( 0x200F == cp || ( 0x200F < cp &&                                          \
-( 0x2028 == cp || 0x2029 == cp ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
-
 #endif	/* EBCDIC 1047 */
 
 #if 'A' == 193 /* EBCDIC 037 */ \
@@ -1478,44 +2398,44 @@
 /*** GENERATED CODE ***/
 #define is_LNBREAK_safe(s,e,is_utf8)                                        \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
-    : ( ( ( ( is_utf8 ) && ( 0xCA == ((const U8*)s)[0] ) ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    : ( ( ( ( is_utf8 ) && ( 0xCA == ((const U8*)s)[0] ) ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+    ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] )\
 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_LNBREAK_utf8_safe(s,e)                                           \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
-    : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+    ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] )\
 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_LNBREAK_latin1_safe(s,e)                                         \
 ( ((e)-(s) > 1) ?                                                           \
-    ( ( inRANGE(((const U8*)s)[0], 0x0B, 0x0C ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] ) ? 1\
-    : ( 0x0D == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x25 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\f') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] ) ? 1\
+    : ( '\r' == ((const U8*)s)[0] ) ?                                       \
+	( ( '\n' == ((const U8*)s)[1] ) ? 2 : 1 )                           \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] )\
+    ( inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] )\
 : 0 )
 
 /*
@@ -1529,7 +2449,7 @@
     ( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x41 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
     : ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
@@ -1538,7 +2458,7 @@
 /*** GENERATED CODE ***/
 #define is_HORIZWS_cp_high(cp)                                              \
 ( 0x1680 == cp || ( 0x1680 < cp &&                                          \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp &&               \
 ( 0x202F == cp || ( 0x202F < cp &&                                          \
 ( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) )
 
@@ -1549,11 +2469,11 @@
 */
 /*** GENERATED CODE ***/
 #define is_VERTWS_high(s)                                                   \
-( ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 )
+( ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_VERTWS_cp_high(cp)                                               \
-( 0x2028 == cp || 0x2029 == cp )
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) )
 
 /*
 	XDIGIT: Hexadecimal digits
@@ -1563,13 +2483,13 @@
 /*** GENERATED CODE ***/
 #define is_XDIGIT_high(s)                                                   \
 ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x72 == ((const U8*)s)[1] ) ) ? ( ( 0x66 == ((const U8*)s)[2] ) ?\
-	    ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x67 ) ) ? 4 : 0 )\
-	: ( ( inRANGE(((const U8*)s)[2], 0x67, 0x68 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x67) ) ? 4 : 0 )\
+	: ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x67, 0x68) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x42, 0x47) ) ) ? 4 : 0 ) : 0 )
 
 /*** GENERATED CODE ***/
 #define is_XDIGIT_cp_high(cp)                                               \
-( inRANGE(cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp &&                           \
-( inRANGE(cp, 0xFF21, 0xFF26) || inRANGE(cp, 0xFF41, 0xFF46) ) ) )
+( inRANGE_helper_(UV, cp, 0xFF10, 0xFF19) || ( 0xFF19 < cp &&               \
+( inRANGE_helper_(UV, cp, 0xFF21, 0xFF26) || inRANGE_helper_(UV, cp, 0xFF41, 0xFF46) ) ) )
 
 /*
 	XPERLSPACE: \p{XPerlSpace}
@@ -1582,9 +2502,9 @@
     ( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x41 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) || 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) || 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )
 
@@ -1591,11 +2511,10 @@
 /*** GENERATED CODE ***/
 #define is_XPERLSPACE_cp_high(cp)                                           \
 ( 0x1680 == cp || ( 0x1680 < cp &&                                          \
-( inRANGE(cp, 0x2000, 0x200A) || ( 0x200A < cp &&                           \
-( 0x2028 == cp || ( 0x2028 < cp &&                                          \
-( 0x2029 == cp || ( 0x2029 < cp &&                                          \
+( inRANGE_helper_(UV, cp, 0x2000, 0x200A) || ( 0x200A < cp &&               \
+( inRANGE_helper_(UV, cp, 0x2028, 0x2029) || ( 0x2029 < cp &&               \
 ( 0x202F == cp || ( 0x202F < cp &&                                          \
-( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) ) ) )
+( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) )
 
 /*
 	NONCHAR: Non character code points
@@ -1607,16 +2526,16 @@
 ( ( ( LIKELY((e) > (s)) ) && ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ) ? ( ( 0xDD == ((const U8*)s)[0] ) ?\
 	    ( ( 0x72 == ((const U8*)s)[1] ) ?                               \
 		( ( 0x55 == ((const U8*)s)[2] ) ?                           \
-		    ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x72 ) ) ? 4 : 0 )\
+		    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x72) ) ? 4 : 0 )\
 		: ( 0x56 == ((const U8*)s)[2] ) ?                           \
-		    ( ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x56 ) ) ? 4 : 0 )\
-		: ( ( 0x72 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x71, 0x72 ) ) ) ? 4 : 0 )\
+		    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x56) ) ? 4 : 0 )\
+		: ( ( 0x72 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x71, 0x72) ) ) ? 4 : 0 )\
 	    : 0 )                                                           \
 	: ( 0xDF == ((const U8*)s)[0] || 0xEA == ((const U8*)s)[0] || 0xEC == ((const U8*)s)[0] ) ?\
-	    ( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x71, 0x72 ) ) ) ? 4 : 0 )\
+	    ( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x71, 0x72) ) ) ? 4 : 0 )\
 	: ( 0xED == ((const U8*)s)[0] ) ?                                   \
-	    ( ( ( ( ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x5F || ((const U8*)s)[1] == 0x63 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) || ((const U8*)s)[1] == 0x69 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x70 ) ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) && ( inRANGE(((const U8*)s)[4], 0x71, 0x72 ) ) ) ? 5 : 0 )\
-	: ( ( ( ( ( 0xEE == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) && ( inRANGE(((const U8*)s)[4], 0x71, 0x72 ) ) ) ? 5 : 0 ) : 0 )
+	    ( ( ( ( ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x5F || ((const U8*)s)[1] == 0x63 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) || ((const U8*)s)[1] == 0x69 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x70 ) ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x71, 0x72) ) ) ? 5 : 0 )\
+	: ( ( ( ( ( 0xEE == ((const U8*)s)[0] ) && ( 0x42 == ((const U8*)s)[1] ) ) && ( 0x72 == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x71, 0x72) ) ) ? 5 : 0 ) : 0 )
 
 /*
 	SURROGATE: Surrogate code points
@@ -1625,7 +2544,7 @@
 */
 /*** GENERATED CODE ***/
 #define is_SURROGATE_utf8_safe(s,e)                                         \
-( ( ( ( ( ( ((e) - (s)) >= 4 ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( inRANGE(((const U8*)s)[1], 0x64, 0x65 ) ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x72 ) ) ) ? 4 : 0 )
+( ( ( ( ( ( ((e) - (s)) >= 4 ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x64, 0x65) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x72) ) ) ? 4 : 0 )
 
 /*
 	QUOTEMETA: Meta-characters that \Q should quote
@@ -1633,43 +2552,33 @@
 	\p{_Perl_Quotemeta}
 */
 /*** GENERATED CODE ***/
-#define is_QUOTEMETA_high_part0(s)                                          \
-( ( 0x51 == ((const U8*)s)[1] ) ?                                           \
-	( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
-    : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )
+#define is_QUOTEMETA_high_part0_(s)                                         \
+( ( 0x41 == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x54, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) ?\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
+    : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x71) ) ? 3 : 0 )\
+    : ( 0x43 == ((const U8*)s)[1] ) ?                                       \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x42, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x63, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
+    : ( 0x44 == ((const U8*)s)[1] ) ?                                       \
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x56) ) ? 3 : 0 )\
+    : ( ( 0x53 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x57, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) ? 3 : 0 )
 
 
 /*** GENERATED CODE ***/
-#define is_QUOTEMETA_high_part1(s)                                          \
-( ( 0xBD == ((const U8*)s)[0] ) ?                                           \
-    ( ( 0x62 == ((const U8*)s)[1] ) ?                                       \
-	( ( 0x41 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
-    : ( ( 0x70 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x62, 0x63 ) ) ) ? 3 : 0 )\
-: ( 0xBE == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x41 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x52, 0x55 ) ) ) ? 3 : 0 )\
-: ( 0xCA == ((const U8*)s)[0] ) ?                                           \
-    ( ( 0x41 == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x54, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) ?\
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
-    : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x71 ) ) ? 3 : 0 )\
-    : ( 0x43 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x42, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x63, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
-    : ( 0x44 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x56 ) ) ? 3 : 0 )\
-    : ( ( 0x53 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) ? 3 : 0 )\
-: ( 0xCB == ((const U8*)s)[0] ) ?                                           \
-    ( ( inRANGE(((const U8*)s)[1], 0x41, 0x43 ) || inRANGE(((const U8*)s)[1], 0x49, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x68 ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) ?\
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+#define is_QUOTEMETA_high_part1_(s)                                         \
+( ( 0xCB == ((const U8*)s)[0] ) ?                                           \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x43) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x49, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x68) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) ?\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
     : ( 0x69 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x63 ) ) ? 3 : 0 )\
-    : ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x63) ) ? 3 : 0 )\
+    : ( ( 0x6A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) ? 3 : 0 )\
 : ( 0xCC == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) ? 3 : 0 )\
+    ( ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) ? 3 : 0 )\
 : ( 0xCD == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( inRANGE(((const U8*)s)[1], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ) ? 3 : 0 )\
+    ( ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x59) || 0x5F == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ) ? 3 : 0 )\
 : ( 0xCE == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x41 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x44 ) || inRANGE(((const U8*)s)[2], 0x49, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x44) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x41 == ((const U8*)s)[2] || 0x57 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x45 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
@@ -1676,22 +2585,22 @@
 : ( 0xDD == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x72 == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x4A == ((const U8*)s)[2] ) ?                                   \
-	    ( ( inRANGE(((const U8*)s)[3], 0x71, 0x72 ) ) ? 4 : 0 )         \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x71, 0x72) ) ? 4 : 0 )\
 	: ( 0x57 == ((const U8*)s)[2] ) ?                                   \
-	    ( ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x56 ) ) ? 4 : 0 )\
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x56) ) ? 4 : 0 )\
 	: ( 0x59 == ((const U8*)s)[2] ) ?                                   \
-	    ( ( inRANGE(((const U8*)s)[3], 0x46, 0x47 ) ) ? 4 : 0 )         \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x46, 0x47) ) ? 4 : 0 )\
 	: ( 0x65 == ((const U8*)s)[2] ) ?                                   \
 	    ( ( 0x72 == ((const U8*)s)[3] ) ? 4 : 0 )                       \
 	: ( 0x70 == ((const U8*)s)[2] ) ?                                   \
 	    ( ( 0x41 == ((const U8*)s)[3] ) ? 4 : 0 )                       \
-	: ( ( 0x72 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x66 ) ) ) ? 4 : 0 )\
+	: ( ( 0x72 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x57, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x66) ) ) ? 4 : 0 )\
     : 0 )                                                                   \
 : ( 0xDF == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x56 == ((const U8*)s)[1] ) ?                                       \
-	( ( ( 0x46 == ((const U8*)s)[2] ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x44 ) ) ) ? 4 : 0 )\
-    : ( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x52 == ((const U8*)s)[2] ) ) && ( 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x68 ) ) ) ? 4 : 0 )\
-: ( ( ( ( ( 0xED == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x44 ) ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x4A ) || inRANGE(((const U8*)s)[3], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x6A ) || inRANGE(((const U8*)s)[3], 0x70, 0x72 ) ) ) && ( inRANGE(((const U8*)s)[4], 0x41, 0x4A ) || inRANGE(((const U8*)s)[4], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[4] || inRANGE(((const U8*)s)[4], 0x62, 0x6A ) || inRANGE(((const U8*)s)[4], 0x70, 0x72 ) ) ) ? 5 : 0 )
+	( ( ( 0x46 == ((const U8*)s)[2] ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x44) ) ) ? 4 : 0 )\
+    : ( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x52 == ((const U8*)s)[2] ) ) && ( 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x68) ) ) ? 4 : 0 )\
+: ( ( ( ( ( 0xED == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x44) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x51, 0x59) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[3], 0x70, 0x72) ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[4], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x51, 0x59) || 0x5F == ((const U8*)s)[4] || inRANGE_helper_(U8, ((const U8*)s)[4], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[4], 0x70, 0x72) ) ) ? 5 : 0 )
 
 
 /*** GENERATED CODE ***/
@@ -1700,38 +2609,48 @@
     ( ( 0x56 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xB7 == ((const U8*)s)[0] ) ?                                           \
     ( ( ( 0x57 == ((const U8*)s)[1] ) && ( 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-: ( 0xBC == ((const U8*)s)[0] ) ? is_QUOTEMETA_high_part0(s) : is_QUOTEMETA_high_part1(s) )
+: ( 0xBC == ((const U8*)s)[0] ) ?                                           \
+    ( ( 0x51 == ((const U8*)s)[1] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
+    : ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+: ( 0xBD == ((const U8*)s)[0] ) ?                                           \
+    ( ( 0x62 == ((const U8*)s)[1] ) ?                                       \
+	( ( 0x41 == ((const U8*)s)[2] ) ? 3 : 0 )                           \
+    : ( ( 0x70 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x63) ) ) ? 3 : 0 )\
+: ( 0xBE == ((const U8*)s)[0] ) ?                                           \
+    ( ( ( 0x41 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x52, 0x55) ) ) ? 3 : 0 )\
+: ( 0xCA == ((const U8*)s)[0] ) ? is_QUOTEMETA_high_part0_(s) : is_QUOTEMETA_high_part1_(s) )
 
 /*
 	MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+	%regcharclass_multi_char_folds::multi_char_folds('u', 'a')
 */
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                             \
-( ( 0x86 == ((const U8*)s)[1] ) ?                                           \
-	    ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )
+#define is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e)                            \
+( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )
 
 
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e)                             \
-( ( 0x88 == ((const U8*)s)[0] ) ?                                           \
-	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x89 == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x8E == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-    : ( 0x91 == ((const U8*)s)[0] ) ?                                       \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e)                            \
+( ( 0x8E == ((const U8*)s)[0] ) ?                                           \
+	( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+		( ( 0x72 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+	    : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 )             \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA2 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 )             \
-    : ( 0xA3 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )                       \
+	: ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 )                 \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x6A == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
     : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1745,7 +2664,7 @@
 	    ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
 		( ( 0x49 == ((const U8*)s)[3] ) ?                           \
 		    ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
 		    : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 		: 0 )                                                       \
 	    : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1757,11 +2676,11 @@
 	    ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
 		( ( 0x49 == ((const U8*)s)[3] ) ?                           \
 		    ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
 		    : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 		: ( 0x5F == ((const U8*)s)[3] ) ?                           \
 		    ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 4 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 4 )\
 		    : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 4 )\
 		: 0 )                                                       \
 	    : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1781,36 +2700,42 @@
 	    : ( ( ( ( 0x71 == ((const U8*)s)[2] ) && ( 0xB7 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x64 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 	: 0 )                                                               \
     : ( 0xBF == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x66, 0x67 ) ) ?                     \
-	    ( ( ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
-	: ( ( ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x66, 0x67) ) ?          \
+	    ( ( ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+	: ( ( ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
     : 0 )
 
 
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e)                             \
-( ( 0x81 == ((const U8*)s)[0] ) ?                                           \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e)                            \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                                 \
 	( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x88 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
 	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x89 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x8E == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-    : ( 0x91 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+		( ( 0x72 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+	    : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 )             \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA2 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 )             \
-    : ( 0xA3 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )                       \
+	: ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 )                 \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x6A == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
     : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1832,37 +2757,43 @@
 	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
 	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : ( 0xBF == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x66, 0x67 ) ) ?                     \
-	    ( ( ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
-	: ( ( ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x66, 0x67) ) ?          \
+	    ( ( ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+	: ( ( ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
     : 0 )
 
 
 /*** GENERATED CODE ***/
-#define is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e)                             \
+#define is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e)                            \
 ( ((e)-(s) > 3) ?                                                           \
-    ( ( 0x81 == ((const U8*)s)[0] ) ?                                       \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
 	( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x88 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
 	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x89 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
-	( ( ( ( 0x72 == ((const U8*)s)[1] ) && ( 0x8E == ((const U8*)s)[2] ) ) && ( 0x72 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
-    : ( 0x91 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+		( ( 0x72 == ((const U8*)s)[3] ) ? 4 : 0 )                   \
+	    : ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ? 3 : 0 )             \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA2 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 )             \
-    : ( 0xA3 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )                       \
+	: ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 )                 \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x6A == ((const U8*)s)[1] ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
     : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
@@ -1885,29 +2816,33 @@
 	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 2) ?                                                           \
-    ( ( 0x81 == ((const U8*)s)[0] ) ?                                       \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
 	( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ?                                   \
-	    ( ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ? 3 : 2 )\
-	: ( 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( 0x88 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
 	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x89 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x91 == ((const U8*)s)[0] ) ?                                       \
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0x72 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBE ) == 's' ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA2 == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ? 2 : 0 )             \
-    : ( 0xA3 == ((const U8*)s)[0] ) ?                                       \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x72 == ((const U8*)s)[2] ) ? 3 : 0 )                       \
+	: ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ? 2 : 0 )                 \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0xA6 == ((const U8*)s)[0] || 0xA8 == ((const U8*)s)[0] ) ?          \
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ?\
 	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( ( ( 0xAA == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( 0x95 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ( 0xAA == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] || 0x89 == ((const U8*)s)[1] || 0x93 == ((const U8*)s)[1] ) ? 2 : 0 )\
-    : ( ( 0xA2 == ((const U8*)s)[0] ) && ( inRANGE(((const U8*)s)[1], 0xA2, 0xA3 ) ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
 : 0 )
 
 
@@ -1914,75 +2849,518 @@
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_utf8_safe(s,e)                                   \
 ( ((e)-(s) > 5) ?                                                           \
-    ( ( 0x81 == ((const U8*)s)[0] ) ?                                       \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
 	( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
-    : ( 0x86 == ((const U8*)s)[0] ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )\
-: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )\
+: ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e)                          \
+( ( 0x52 == ((const U8*)s)[1] ) ?                                           \
+	    ( ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( ( 0xB7 == ((const U8*)s)[3] ) && ( 0x53 == ((const U8*)s)[4] ) ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x587 : 0 )\
+	    : ( 0x62 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB7 == ((const U8*)s)[3] ) && ( 0x52 == ((const U8*)s)[4] ) ) ? ( ( 0x46 == ((const U8*)s)[5] ) ? 0xFB14\
+			: ( 0x52 == ((const U8*)s)[5] ) ? 0xFB15            \
+			: ( 0x54 == ((const U8*)s)[5] ) ? 0xFB17            \
+			: ( 0x64 == ((const U8*)s)[5] ) ? 0xFB13 : 0 ) : 0 )\
+	    : ( ( ( ( 0x71 == ((const U8*)s)[2] ) && ( 0xB7 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x64 == ((const U8*)s)[5] ) ) ? 0xFB16 : 0 )\
+	: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e)                          \
+( ( 0xBF == ((const U8*)s)[0] ) ?                                           \
+	( ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+	    : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+	: ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+	    : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+	: ( 0x69 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+	    : ( 0x48 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+	    : ( 0x57 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+	    : ( 0x62 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+	    : ( ( ( 0x6A == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+	: 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e)                          \
+( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                                 \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e)                          \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                                 \
+	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+		( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+		: 0 )                                                       \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0x65 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+		: 0 )                                                       \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x49 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
+			( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FD2            \
+			: ( 0x42 == ((const U8*)s)[5] ) ? 0x390 : 0 )       \
+		    : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+		: 0 )                                                       \
+	    : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+	: 0 )                                                               \
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x42 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x49 == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
+			( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FE2            \
+			: ( 0x42 == ((const U8*)s)[5] ) ? 0x3B0 : 0 )       \
+		    : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+		: ( 0x5F == ((const U8*)s)[3] ) ?                           \
+		    ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
+			( ( 0x41 == ((const U8*)s)[5] ) ? 0x1F52            \
+			: ( 0x42 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+		    : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+		: 0 )                                                       \
+	    : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+		    ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+		: 0 )                                                       \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : ( 0xB7 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1_(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e)                          \
+( ( 0x42 == ((const U8*)s)[1] ) ?                                           \
+	    ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x5F == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+	    : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e)                          \
+( ( 0xBF == ((const U8*)s)[0] ) ?                                           \
+	( ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+	    : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+	: ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+	    : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+	: ( 0x69 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+	    : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+	    : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+	    : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+	    : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+	    : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+	    : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+	    : ( 0x48 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+	    : ( 0x57 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+	    : ( 0x62 == ((const U8*)s)[2] ) ?                               \
+		( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+	    : ( ( ( 0x6A == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+	: 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e)                          \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                                 \
+	( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+		( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0x65 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( ( ( 0x67 == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x42 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+	: ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
+		( ( 0x5F == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+	    : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+	: ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+	: ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e)                          \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+	( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( ( ( 0xAA == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e)                                 \
+( ((e)-(s) > 5) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+	( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3_(s,e) )\
+: ((e)-(s) > 4) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+	( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+	( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+		( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+	: 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+	( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
+	( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+	: ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+	: ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+	: ( 0x65 == ((const U8*)s)[1] ) ?                                   \
+	    ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+		( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+	    : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+	: ( ( ( 0x67 == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part4_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5_(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part6_(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7_(s,e) )
+
 /*
 	MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+	%regcharclass_multi_char_folds::multi_char_folds('l', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_latin1_safe(s,e)                                 \
 ( ((e)-(s) > 2) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ?                            \
-	( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ?                        \
-	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[2] & 0xBF ) == 0x93 ) ) ? 3 : 2 )\
-	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x93 ) ) ? 2 : 0 )\
-    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 0xA2 ) && ( ( ((const U8*)s)[1] & 0xBE ) == 0xA2 ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ? 3 : 2 )\
+	: ( ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ?                            \
-	( ( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[1] & 0xBF ) == 0x93 ) ) ? 2 : 0 )\
-    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 0xA2 ) && ( ( ((const U8*)s)[1] & 0xBE ) == 0xA2 ) ) ? 2 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ) ? 2 : 0 )\
+    : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
 : 0 )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e)                               \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+	    ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+	    : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+	: ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
 /*
 	THREE_CHAR_FOLD: A three-character multi-char fold
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', '3')
+	%regcharclass_multi_char_folds::multi_char_folds('u', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_utf8_safe(s,e)                                   \
 ( ((e)-(s) > 5) ?                                                           \
-    ( ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( ( 0x86 == ((const U8*)s)[1] ) && ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )\
     : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x58 == ((const U8*)s)[1] || 0x65 == ((const U8*)s)[1] ) ?      \
 	    ( ( ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) && ( 0xB3 == ((const U8*)s)[4] ) ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
 	: ( ( ( 0x67 == ((const U8*)s)[1] ) && ( 0xAD == ((const U8*)s)[2] ) ) && ( 0x49 == ((const U8*)s)[3] ) ) ? ( ( 0xAD == ((const U8*)s)[4] ) ?\
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
 		    : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
     : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x46 == ((const U8*)s)[1] ) ?                                   \
 	    ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x49 == ((const U8*)s)[3] || 0x5F == ((const U8*)s)[3] ) ) ? ( ( 0xAD == ((const U8*)s)[4] ) ?\
-			( ( inRANGE(((const U8*)s)[5], 0x41, 0x42 ) ) ? 6 : 0 )\
+			( ( inRANGE_helper_(U8, ((const U8*)s)[5], 0x41, 0x42) ) ? 6 : 0 )\
 		    : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 6 : 0 ) : 0 )\
 	: ( ( ( ( ( 0x4A == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) && ( 0xB3 == ((const U8*)s)[4] ) ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 6 : 0 )\
     : 0 )                                                                   \
-: ( ( ( ((e)-(s) > 2) && ( 0x86 == ((const U8*)s)[0] ) ) && ( 0x86 == ((const U8*)s)[1] ) ) && ( 0x89 == ((const U8*)s)[2] || 0x93 == ((const U8*)s)[2] ) ) ? 3 : 0 )
+: ( ( ( ((e)-(s) > 2) && ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )
 
 /*
 	THREE_CHAR_FOLD: A three-character multi-char fold
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', '3')
+	%regcharclass_multi_char_folds::multi_char_folds('l', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_latin1_safe(s,e)                                 \
-( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 0x89 ) || ( ( ((const U8*)s)[2] & 0xBF ) == 0x93 ) ) ) ? 3 : 0 )
+( ( ( ( ( ((e) - (s)) >= 3 ) && ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ) && ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ) && ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) || ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ) ) ? 3 : 0 )
 
 /*
 	THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-	&regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+	%regcharclass_multi_char_folds::multi_char_folds('u', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e)                              \
 ( ((e)-(s) > 3) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 )                 \
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
@@ -2002,14 +3380,16 @@
     : ( 0xB7 == ((const U8*)s)[0] ) ?                                       \
 	( ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x46 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xBF == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x66, 0x67 ) ) ?                     \
-	    ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) ? 3 : 0 )         \
-	: ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x66, 0x67) ) ?          \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) ? 3 : 0 )\
+	: ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 2) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 )                 \
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
@@ -2019,14 +3399,16 @@
     : ( 0xB7 == ((const U8*)s)[0] ) ?                                       \
 	( ( ( 0x52 == ((const U8*)s)[1] ) && ( 0x46 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xBF == ((const U8*)s)[0] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[1], 0x66, 0x67 ) ) ?                     \
-	    ( ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) ) ? 3 : 0 )         \
-	: ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x41, 0x48 ) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x66, 0x67) ) ?          \
+	    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) ) ? 3 : 0 )\
+	: ( ( 0x69 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x48) || 0x57 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x6A == ((const U8*)s)[2] ) ) ? 3 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 1) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA6 || ((const U8*)s)[0] == 0xA8 ) ? 1\
-    : ( 0x86 == ((const U8*)s)[0] ) ?                                       \
-	( ( 0x86 == ((const U8*)s)[1] ) ? 2 : 1 )                           \
+    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 )                 \
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+	( ( 0x72 == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
 	( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 )                           \
     : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
@@ -2033,23 +3415,23 @@
 	( ( ((const U8*)s)[1] == 0x53 || ((const U8*)s)[1] == 0x55 || ((const U8*)s)[1] == 0x58 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) ) ? 2 : 0 )\
     : ( ( 0xB4 == ((const U8*)s)[0] ) && ( ( ( ((const U8*)s)[1] & 0xFB ) == 0x42 ) || ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x55 ) ) ? 2 : 0 )\
 : ((e)-(s) > 0) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xEF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xDF ) == 0x86 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xFE ) == 0xA2 ) || ((const U8*)s)[0] == 0xA8 )\
+    ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0x9F ) == 'f' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) )\
 : 0 )
 
 /*
 	THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-	&regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+	%regcharclass_multi_char_folds::multi_char_folds('l', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e)                            \
 ( ((e)-(s) > 1) ?                                                           \
-    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0xA2 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA6 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA8 ) ) ? 1\
-    : ( ( ((const U8*)s)[0] & 0xBF ) == 0x86 ) ?                            \
-	( ( ( ((const U8*)s)[1] & 0xBF ) == 0x86 ) ? 2 : 1 )                \
+    ( ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ) ? 1\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+	( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 2 : 1 )                 \
     : 0 )                                                                   \
 : ((e)-(s) > 0) ?                                                           \
-    ( ( ( ((const U8*)s)[0] & 0xAF ) == 0x81 ) || ( ( ((const U8*)s)[0] & 0x9F ) == 0x86 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0x88 ) || ( ( ((const U8*)s)[0] & 0xBE ) == 0xA2 ) || ( ( ((const U8*)s)[0] & 0xBF ) == 0xA8 ) )\
+    ( ( ( ((const U8*)s)[0] & 0xAF ) == 'a' ) || ( ( ((const U8*)s)[0] & 0x9F ) == 'f' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 'h' ) || ( ( ((const U8*)s)[0] & 0xBE ) == 's' ) || ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) )\
 : 0 )
 
 /*
@@ -2061,7 +3443,7 @@
 #define is_FOLDS_TO_MULTI_utf8(s)                                           \
 ( ( 0x80 == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x72 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
-: ( 0x8C == ((const U8*)s)[0] || 0x9B == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xB2, 0xB3 ) ) ?\
+: ( 0x8C == ((const U8*)s)[0] || 0x9B == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0xB2, 0xB3) ) ?\
     ( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0x8D == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 )                               \
@@ -2069,17 +3451,17 @@
     ( ( ( 0x53 == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xBF == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x62 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x64, 0x68 ) || 0x71 == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x68) || 0x71 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x68 == ((const U8*)s)[1] ) ?                                       \
 	( ( 0x57 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || 0x64 == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x6A == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x62, 0x6A ) || inRANGE(((const U8*)s)[2], 0x70, 0x72 ) ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x59) || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x70, 0x72) ) ? 3 : 0 )\
     : ( 0x70 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || inRANGE(((const U8*)s)[2], 0x51, 0x56 ) || 0x59 == ((const U8*)s)[2] || 0x5F == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x64, 0x65 ) || 0x6A == ((const U8*)s)[2] ) ? 3 : 0 )\
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x56) || 0x59 == ((const U8*)s)[2] || 0x5F == ((const U8*)s)[2] || 0x62 == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x65) || 0x6A == ((const U8*)s)[2] ) ? 3 : 0 )\
     : ( 0x71 == ((const U8*)s)[1] ) ?                                       \
-	( ( inRANGE(((const U8*)s)[2], 0x43, 0x45 ) || inRANGE(((const U8*)s)[2], 0x47, 0x48 ) || 0x53 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x5F == ((const U8*)s)[2] || inRANGE(((const U8*)s)[2], 0x64, 0x65 ) ) ? 3 : 0 )\
-    : ( ( 0x72 == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xFB ) == 0x43 ) || ( ( ((const U8*)s)[2] & 0xDE ) == 0x44 ) || ((const U8*)s)[2] == 0x48 || ((const U8*)s)[2] == 0x59 || ((const U8*)s)[2] == 0x5F || ( ( ((const U8*)s)[2] & 0xF7 ) == 0x62 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x65 ) ) ) ? 4 : 0 )
+	( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x43, 0x45) || inRANGE_helper_(U8, ((const U8*)s)[2], 0x47, 0x48) || 0x53 == ((const U8*)s)[2] || 0x59 == ((const U8*)s)[2] || 0x5F == ((const U8*)s)[2] || inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x65) ) ? 3 : 0 )\
+    : ( ( 0x72 == ((const U8*)s)[1] ) && ( ( ( ((const U8*)s)[2] & 0xFB ) == 0x43 ) || ( ( ((const U8*)s)[2] & 0xDE ) == 0x44 ) || ((const U8*)s)[2] == 0x48 || ((const U8*)s)[2] == 0x59 || ((const U8*)s)[2] == 0x5F || ( ( ((const U8*)s)[2] & '7' ) == 0x62 ) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) || 0x5F == ((const U8*)s)[3] || inRANGE_helper_(U8, ((const U8*)s)[3], 0x62, 0x65) ) ) ? 4 : 0 )
 
 /*
 	PROBLEMATIC_LOCALE_FOLD: characters whose fold is problematic under locale
@@ -2088,11 +3470,11 @@
 */
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLD_utf8(s)                                  \
-( ( ( ((const U8*)s)[0] <= 0x40 ) || inRANGE(((const U8*)s)[0], 0x4B, 0x50 ) || inRANGE(((const U8*)s)[0], 0x5A, 0x5E ) || inRANGE(((const U8*)s)[0], 0x60, 0x61 ) || inRANGE(((const U8*)s)[0], 0x6B, 0x6F ) || inRANGE(((const U8*)s)[0], 0x79, 0x7F ) || inRANGE(((const U8*)s)[0], 0x81, 0x89 ) || inRANGE(((const U8*)s)[0], 0x91, 0x99 ) || inRANGE(((const U8*)s)[0], 0xA1, 0xA9 ) || 0xB0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xBA, 0xBB ) || inRANGE(((const U8*)s)[0], 0xC0, 0xC9 ) || inRANGE(((const U8*)s)[0], 0xD0, 0xD9 ) || 0xE0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xE2, 0xE9 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) || 0xFF == ((const U8*)s)[0] ) ? 1\
+( ( ( ((const U8*)s)[0] <= ' ' ) || inRANGE_helper_(U8, ((const U8*)s)[0], '.', '&') || inRANGE_helper_(U8, ((const U8*)s)[0], '!', ';') || inRANGE_helper_(U8, ((const U8*)s)[0], '-', '/') || inRANGE_helper_(U8, ((const U8*)s)[0], ',', '?') || inRANGE_helper_(U8, ((const U8*)s)[0], '`', '"') || inRANGE_helper_(U8, ((const U8*)s)[0], 'a', 'i') || inRANGE_helper_(U8, ((const U8*)s)[0], 'j', 'r') || inRANGE_helper_(U8, ((const U8*)s)[0], '~', 'z') || '^' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '[', ']') || inRANGE_helper_(U8, ((const U8*)s)[0], '{', 'I') || inRANGE_helper_(U8, ((const U8*)s)[0], '}', 'R') || '\\' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 'S', 'Z') || inRANGE_helper_(U8, ((const U8*)s)[0], '0', '9') || 0xFF == ((const U8*)s)[0] ) ? 1\
 : ( 0x78 == ((const U8*)s)[0] || 0x80 == ((const U8*)s)[0] || 0x8A == ((const U8*)s)[0] ) ?\
-    ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) ? 2 : 0 )\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) ? 2 : 0 )\
 : ( 0x8C == ((const U8*)s)[0] ) ?                                           \
-    ( ( inRANGE(((const U8*)s)[1], 0x57, 0x58 ) ) ? 2 : 0 )                 \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x58) ) ? 2 : 0 )      \
 : ( 0x8D == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0x8E == ((const U8*)s)[0] ) ?                                           \
@@ -2101,19 +3483,18 @@
     ( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xAD == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x48 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
-: ( inRANGE(((const U8*)s)[0], 0xB2, 0xB3 ) ) ?                             \
+: ( inRANGE_helper_(U8, ((const U8*)s)[0], 0xB2, 0xB3) ) ?                  \
     ( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xBF == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x62 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x64, 0x68 ) || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( 0x62 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x68) || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x51, 0x52 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) ) ) ? 4 : 0 )
+    ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x52) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) ) ) ? 4 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLD_cp(cp)                                   \
 ( cp <= 0xFF || ( 0xFF < cp &&                                              \
-( 0x130 == cp || ( 0x130 < cp &&                                            \
-( 0x131 == cp || ( 0x131 < cp &&                                            \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp &&                  \
 ( 0x149 == cp || ( 0x149 < cp &&                                            \
 ( 0x178 == cp || ( 0x178 < cp &&                                            \
 ( 0x17F == cp || ( 0x17F < cp &&                                            \
@@ -2121,10 +3502,9 @@
 ( 0x307 == cp || ( 0x307 < cp &&                                            \
 ( 0x39C == cp || ( 0x39C < cp &&                                            \
 ( 0x3BC == cp || ( 0x3BC < cp &&                                            \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&               \
 ( 0x1E9E == cp || ( 0x1E9E < cp &&                                          \
-( 0x212A == cp || ( 0x212A < cp &&                                          \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 
 /*
 	PROBLEMATIC_LOCALE_FOLDEDS_START: The first folded character of folds which are problematic under locale
@@ -2133,11 +3513,11 @@
 */
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLDEDS_START_utf8(s)                         \
-( ( ( ((const U8*)s)[0] <= 0x40 ) || inRANGE(((const U8*)s)[0], 0x4B, 0x50 ) || inRANGE(((const U8*)s)[0], 0x5A, 0x5E ) || inRANGE(((const U8*)s)[0], 0x60, 0x61 ) || inRANGE(((const U8*)s)[0], 0x6B, 0x6F ) || inRANGE(((const U8*)s)[0], 0x79, 0x7F ) || inRANGE(((const U8*)s)[0], 0x81, 0x89 ) || inRANGE(((const U8*)s)[0], 0x91, 0x99 ) || inRANGE(((const U8*)s)[0], 0xA1, 0xA9 ) || 0xB0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xBA, 0xBB ) || inRANGE(((const U8*)s)[0], 0xC0, 0xC9 ) || inRANGE(((const U8*)s)[0], 0xD0, 0xD9 ) || 0xE0 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xE2, 0xE9 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) || 0xFF == ((const U8*)s)[0] ) ? 1\
+( ( ( ((const U8*)s)[0] <= ' ' ) || inRANGE_helper_(U8, ((const U8*)s)[0], '.', '&') || inRANGE_helper_(U8, ((const U8*)s)[0], '!', ';') || inRANGE_helper_(U8, ((const U8*)s)[0], '-', '/') || inRANGE_helper_(U8, ((const U8*)s)[0], ',', '?') || inRANGE_helper_(U8, ((const U8*)s)[0], '`', '"') || inRANGE_helper_(U8, ((const U8*)s)[0], 'a', 'i') || inRANGE_helper_(U8, ((const U8*)s)[0], 'j', 'r') || inRANGE_helper_(U8, ((const U8*)s)[0], '~', 'z') || '^' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '[', ']') || inRANGE_helper_(U8, ((const U8*)s)[0], '{', 'I') || inRANGE_helper_(U8, ((const U8*)s)[0], '}', 'R') || '\\' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 'S', 'Z') || inRANGE_helper_(U8, ((const U8*)s)[0], '0', '9') || 0xFF == ((const U8*)s)[0] ) ? 1\
 : ( 0x78 == ((const U8*)s)[0] || 0x80 == ((const U8*)s)[0] || 0x8A == ((const U8*)s)[0] ) ?\
-    ( ( inRANGE(((const U8*)s)[1], 0x41, 0x4A ) || inRANGE(((const U8*)s)[1], 0x51, 0x59 ) || 0x5F == ((const U8*)s)[1] || inRANGE(((const U8*)s)[1], 0x62, 0x6A ) || inRANGE(((const U8*)s)[1], 0x70, 0x72 ) ) ? 2 : 0 )\
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x41, 0x4A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x51, 0x59) || 0x5F == ((const U8*)s)[1] || inRANGE_helper_(U8, ((const U8*)s)[1], 0x62, 0x6A) || inRANGE_helper_(U8, ((const U8*)s)[1], 0x70, 0x72) ) ? 2 : 0 )\
 : ( 0x8C == ((const U8*)s)[0] ) ?                                           \
-    ( ( inRANGE(((const U8*)s)[1], 0x57, 0x58 ) ) ? 2 : 0 )                 \
+    ( ( inRANGE_helper_(U8, ((const U8*)s)[1], 0x57, 0x58) ) ? 2 : 0 )      \
 : ( 0x8D == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x4A == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0x8E == ((const U8*)s)[0] ) ?                                           \
@@ -2144,19 +3524,18 @@
     ( ( 0x66 == ((const U8*)s)[1] || 0x72 == ((const U8*)s)[1] ) ? 2 : 0 )  \
 : ( 0x9B == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x57 == ((const U8*)s)[1] ) ? 2 : 0 )                               \
-: ( 0xAA == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0xB2, 0xB3 ) ) ?\
+: ( 0xAA == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], 0xB2, 0xB3) ) ?\
     ( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 )                               \
 : ( 0xBF == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x62 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x64, 0x68 ) || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+    ( ( ( 0x62 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x64, 0x68) || 0x71 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xCA == ((const U8*)s)[0] ) ?                                           \
-    ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x51, 0x52 ) ) ) ? 3 : 0 )\
-: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE(((const U8*)s)[3], 0x41, 0x47 ) ) ) ? 4 : 0 )
+    ( ( ( 0x4A == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x51, 0x52) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xDD == ((const U8*)s)[0] ) && ( 0x71 == ((const U8*)s)[1] ) ) && ( 0x66 == ((const U8*)s)[2] ) ) && ( inRANGE_helper_(U8, ((const U8*)s)[3], 0x41, 0x47) ) ) ? 4 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp(cp)                          \
 ( cp <= 0xFF || ( 0xFF < cp &&                                              \
-( 0x130 == cp || ( 0x130 < cp &&                                            \
-( 0x131 == cp || ( 0x131 < cp &&                                            \
+( inRANGE_helper_(UV, cp, 0x130, 0x131) || ( 0x131 < cp &&                  \
 ( 0x149 == cp || ( 0x149 < cp &&                                            \
 ( 0x178 == cp || ( 0x178 < cp &&                                            \
 ( 0x17F == cp || ( 0x17F < cp &&                                            \
@@ -2164,10 +3543,9 @@
 ( 0x2BC == cp || ( 0x2BC < cp &&                                            \
 ( 0x39C == cp || ( 0x39C < cp &&                                            \
 ( 0x3BC == cp || ( 0x3BC < cp &&                                            \
-( inRANGE(cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&                           \
+( inRANGE_helper_(UV, cp, 0x1E96, 0x1E9A) || ( 0x1E9A < cp &&               \
 ( 0x1E9E == cp || ( 0x1E9E < cp &&                                          \
-( 0x212A == cp || ( 0x212A < cp &&                                          \
-( 0x212B == cp || inRANGE(cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( inRANGE_helper_(UV, cp, 0x212A, 0x212B) || inRANGE_helper_(UV, cp, 0xFB00, 0xFB06) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 
 /*
 	PATWS: pattern white space
@@ -2177,23 +3555,12 @@
 /*** GENERATED CODE ***/
 #define is_PATWS_safe(s,e,is_utf8)                                          \
 ( ( LIKELY((e) > (s)) ) ?                                                   \
-    ( ( 0x05 == ((const U8*)s)[0] || inRANGE(((const U8*)s)[0], 0x0B, 0x0D ) || 0x15 == ((const U8*)s)[0] || 0x25 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1\
+    ( ( '\t' == ((const U8*)s)[0] || inRANGE_helper_(U8, ((const U8*)s)[0], '\v', '\r') || 0x15 == ((const U8*)s)[0] || '\n' == ((const U8*)s)[0] || ' ' == ((const U8*)s)[0] ) ? 1\
     : ( ( is_utf8 && LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xCA == ((const U8*)s)[0] ) ) ? ( ( 0x41 == ((const U8*)s)[1] ) ?\
-		    ( ( inRANGE(((const U8*)s)[2], 0x55, 0x56 ) ) ? 3 : 0 ) \
-		: ( ( 0x42 == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x49, 0x4A ) ) ) ? 3 : 0 ) : 0 )\
+		    ( ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x55, 0x56) ) ? 3 : 0 )\
+		: ( ( 0x42 == ((const U8*)s)[1] ) && ( inRANGE_helper_(U8, ((const U8*)s)[2], 0x49, 0x4A) ) ) ? 3 : 0 ) : 0 )\
 : 0 )
 
-/*** GENERATED CODE ***/
-#define is_PATWS_cp(cp)                                                     \
-( 0x05 == cp || ( 0x05 < cp &&                                              \
-( inRANGE(cp, 0x0B, 0x0D) || ( 0x0D < cp &&                                 \
-( 0x15 == cp || ( 0x15 < cp &&                                              \
-( 0x25 == cp || ( 0x25 < cp &&                                              \
-( 0x40 == cp || ( 0x40 < cp &&                                              \
-( 0x200E == cp || ( 0x200E < cp &&                                          \
-( 0x200F == cp || ( 0x200F < cp &&                                          \
-( 0x2028 == cp || 0x2029 == cp ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
-
 #endif	/* EBCDIC 037 */
 
 #endif /* PERL_REGCHARCLASS_H_ */
@@ -2247,9 +3614,9 @@
  * baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
  * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
  * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 28076ceb3f4e2514ea9db243f4b918b9a7c2807b036237e2276b99b2659d9474 lib/unicore/mktables
  * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
- * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * f9a393e7add8c7c2728356473ce5b52246d51295b2da0c48fb6f0aa21799e2bb regen/regcharclass.pl
- * b549b9989c6987563dad8f8ad6b984c8026cdc283d60ea34457959c5d4b4ade0 regen/regcharclass_multi_char_folds.pl
+ * 24120d5e0c9685c442c93bc1dbea9b85ef973bf8e9474baf0e55b160c288226b regen/charset_translations.pl
+ * 3635c6e564558e965018947bdab45f37d9a4fa82eb05b2694eae1a04bf7e65a3 regen/regcharclass.pl
+ * b2f896452d2b30da3e04800f478c60c1fd0b03d6b668689b020f1e3cf1f1cdd9 regen/regcharclass_multi_char_folds.pl
  * ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/regcomp.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/regcomp.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/regcomp.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -8,7 +8,8 @@
  *
  */
 
-#ifndef PERL_REGCOMP_H_
+#if ! defined(PERL_REGCOMP_H_) && (   defined(PERL_CORE)            \
+                                   || defined(PERL_EXT_RE_BUILD))
 #define PERL_REGCOMP_H_
 
 #include "regcharclass.h"
@@ -66,7 +67,7 @@
 
  typedef struct regexp_internal {
         union {
-	    U32 *offsets;           /* offset annotations 20001228 MJD
+            U32 *offsets;           /* offset annotations 20001228 MJD
                                        data about mapping the program to the
                                        string -
                                        offsets[0] is proglen when this is used
@@ -80,9 +81,9 @@
                                    Used to make it easier to clone and free arbitrary
                                    data that the regops need. Often the ARG field of
                                    a regop is an index into this structure */
-	struct reg_code_blocks *code_blocks;/* positions of literal (?{}) */
+        struct reg_code_blocks *code_blocks;/* positions of literal (?{}) */
         int name_list_idx;	/* Optional data index of an array of paren names */
-	regnode program[1];	/* Unwarranted chumminess with compiler. */
+        regnode program[1];	/* Unwarranted chumminess with compiler. */
 } regexp_internal;
 
 #define RXi_SET(x,y) (x)->pprivate = (void*)(y)   
@@ -255,11 +256,11 @@
    ((1<<32)-1), while on the Cray T90, sizeof(short)==8 and U16_MAX is
    ((1<<64)-1).  To limit stack growth to reasonable sizes, supply a
    smaller default.
-	--Andy Dougherty  11 June 1998
+        --Andy Dougherty  11 June 1998
 */
 #if SHORTSIZE > 2
 #  ifndef REG_INFTY
-#    define REG_INFTY ((1<<16)-1)
+#    define REG_INFTY  nBIT_UMAX(16)
 #  endif
 #endif
 
@@ -310,8 +311,8 @@
 
 #define	OP(p)		((p)->type)
 #define FLAGS(p)	((p)->flags)	/* Caution: Doesn't apply to all      \
-					   regnode types.  For some, it's the \
-					   character set of the regnode */
+                                           regnode types.  For some, it's the \
+                                           character set of the regnode */
 #define	STR_LENs(p)	(__ASSERT_(OP(p) != LEXACT && OP(p) != LEXACT_REQ8)  \
                                     ((struct regnode_string *)p)->str_len)
 #define	STRINGs(p)	(__ASSERT_(OP(p) != LEXACT && OP(p) != LEXACT_REQ8)  \
@@ -359,7 +360,7 @@
     } STMT_END
 
 #define ANYOFR_BASE_BITS    20
-#define ANYOFRbase(p)   (ARG(p) & ((1 << ANYOFR_BASE_BITS) - 1))
+#define ANYOFRbase(p)   (ARG(p) & nBIT_MASK(ANYOFR_BASE_BITS))
 #define ANYOFRdelta(p)  (ARG(p) >> ANYOFR_BASE_BITS)
 
 #undef NODE_ALIGN
@@ -697,12 +698,12 @@
      } STMT_END
 
 /* Shifts a bit to get, eg. 0x4000_0000, then subtracts 1 to get 0x3FFF_FFFF */
-#define ANYOF_POSIXL_SETALL(ret) STMT_START { ((regnode_charclass_posixl*) (ret))->classflags = ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1; } STMT_END
+#define ANYOF_POSIXL_SETALL(ret) STMT_START { ((regnode_charclass_posixl*) (ret))->classflags = nBIT_MASK(ANYOF_POSIXL_MAX); } STMT_END
 #define ANYOF_CLASS_SETALL(ret) ANYOF_POSIXL_SETALL(ret)
 
 #define ANYOF_POSIXL_TEST_ANY_SET(p)                               \
         ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL)                           \
-	 && (((regnode_charclass_posixl*)(p))->classflags))
+         && (((regnode_charclass_posixl*)(p))->classflags))
 #define ANYOF_CLASS_TEST_ANY_SET(p) ANYOF_POSIXL_TEST_ANY_SET(p)
 
 /* Since an SSC always has this field, we don't have to test for that; nor do
@@ -711,12 +712,12 @@
                             cBOOL(((regnode_ssc*)(p))->classflags)
 #define ANYOF_POSIXL_SSC_TEST_ALL_SET(p) /* Are all bits set? */       \
         (((regnode_ssc*) (p))->classflags                              \
-                        == ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1)
+                                        == nBIT_MASK(ANYOF_POSIXL_MAX))
 
 #define ANYOF_POSIXL_TEST_ALL_SET(p)                                   \
-        ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL)                               \
+        ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL)                       \
          && ((regnode_charclass_posixl*) (p))->classflags              \
-                        == ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1)
+                                    == nBIT_MASK(ANYOF_POSIXL_MAX))
 
 #define ANYOF_POSIXL_OR(source, dest) STMT_START { (dest)->classflags |= (source)->classflags ; } STMT_END
 #define ANYOF_CLASS_OR(source, dest) ANYOF_POSIXL_OR((source), (dest))
@@ -731,9 +732,9 @@
 #define ANYOF_BITMAP_TEST(p, c)	cBOOL(ANYOF_BITMAP_BYTE(p, c) &   ANYOF_BIT(c))
 
 #define ANYOF_BITMAP_SETALL(p)		\
-	memset (ANYOF_BITMAP(p), 255, ANYOF_BITMAP_SIZE)
+        memset (ANYOF_BITMAP(p), 255, ANYOF_BITMAP_SIZE)
 #define ANYOF_BITMAP_CLEARALL(p)	\
-	Zero (ANYOF_BITMAP(p), ANYOF_BITMAP_SIZE)
+        Zero (ANYOF_BITMAP(p), ANYOF_BITMAP_SIZE)
 
 /*
  * Utility definitions.
@@ -883,9 +884,9 @@
 /* info per word; indexed by wordnum */
 typedef struct {
     U16  prev;	/* previous word in acceptance chain; eg in
-		 * zzz|abc|ab/ after matching the chars abc, the
-		 * accepted word is #2, and the previous accepted
-		 * word is #3 */
+                 * zzz|abc|ab/ after matching the chars abc, the
+                 * accepted word is #2, and the previous accepted
+                 * word is #3 */
     U32 len;	/* how many chars long is this word? */
     U32 accept;	/* accept state for this word */
 } reg_trie_wordinfo;
@@ -1120,7 +1121,7 @@
  * 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; \
@@ -1131,7 +1132,7 @@
                             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))
 
@@ -1175,11 +1176,11 @@
 #define FIRST_NON_ASCII_DECIMAL_DIGIT 0x660  /* ARABIC_INDIC_DIGIT_ZERO */
 
 typedef enum {
-	TRADITIONAL_BOUND = _CC_WORDCHAR,
-	GCB_BOUND,
-	LB_BOUND,
-	SB_BOUND,
-	WB_BOUND
+        TRADITIONAL_BOUND = _CC_WORDCHAR,
+        GCB_BOUND,
+        LB_BOUND,
+        SB_BOUND,
+        WB_BOUND
 } bound_type;
 
 /* This unpacks the FLAGS field of ANYOF[HR]x nodes.  The value it contains

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/regexp.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/regexp.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/regexp.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -18,7 +18,7 @@
 /* we don't want to include this stuff if we are inside of
    an external regex engine based on the core one - like re 'debug'*/
 
-#include "utf8.h"
+#  include "utf8.h"
 
 typedef SSize_t regnode_offset;
 
@@ -49,11 +49,11 @@
     struct reg_substr_datum data[3];	/* Actual array */
 };
 
-#ifdef PERL_ANY_COW
-#define SV_SAVED_COPY   SV *saved_copy; /* If non-NULL, SV which is COW from original */
-#else
-#define SV_SAVED_COPY
-#endif
+#  ifdef PERL_ANY_COW
+#    define SV_SAVED_COPY   SV *saved_copy; /* If non-NULL, SV which is COW from original */
+#  else
+#    define SV_SAVED_COPY
+#  endif
 
 /* offsets within a string of a particular /(.)/ capture */
 
@@ -69,14 +69,14 @@
     SSize_t start_tmp;
 } regexp_paren_pair;
 
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
-#define _invlist_union(a, b, output) _invlist_union_maybe_complement_2nd(a, b, FALSE, output)
-#define _invlist_intersection(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, FALSE, output)
+#  if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
+#    define _invlist_union(a, b, output) _invlist_union_maybe_complement_2nd(a, b, FALSE, output)
+#    define _invlist_intersection(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, FALSE, output)
 
 /* Subtracting b from a leaves in a everything that was there that isn't in b,
  * that is the intersection of a with b's complement */
-#define _invlist_subtract(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, TRUE, output)
-#endif
+#    define _invlist_subtract(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, TRUE, output)
+#  endif
 
 /* record the position of a (?{...}) within a pattern */
 
@@ -97,6 +97,7 @@
 
 
 /*
+= for apidoc AyT||regexp
   The regexp/REGEXP struct, see L<perlreapi> for further documentation
   on the individual fields. The struct is ordered so that the most
   commonly used fields are placed at the start.
@@ -166,7 +167,7 @@
 } regexp;
 
 
-#define RXp_PAREN_NAMES(rx)	((rx)->paren_names)
+#  define RXp_PAREN_NAMES(rx)	((rx)->paren_names)
 
 /* used for high speed searches */
 typedef struct re_scream_pos_data_s
@@ -204,9 +205,9 @@
     SV*     (*named_buff_iter) (pTHX_ REGEXP * const rx, const SV * const lastkey,
                                 const U32 flags);
     SV*     (*qr_package)(pTHX_ REGEXP * const rx);
-#ifdef USE_ITHREADS
+#  ifdef USE_ITHREADS
     void*   (*dupe) (pTHX_ REGEXP * const rx, CLONE_PARAMS *param);
-#endif
+#  endif
     REGEXP* (*op_comp) (pTHX_ SV ** const patternp, int pat_count,
 		    OP *expr, const struct regexp_engine* eng,
 		    REGEXP *old_re,
@@ -218,12 +219,12 @@
   paren name. >= 1 is reserved for actual numbered captures, i.e. $1,
   $2 etc.
 */
-#define RX_BUFF_IDX_CARET_PREMATCH  -5 /* ${^PREMATCH}  */
-#define RX_BUFF_IDX_CARET_POSTMATCH -4 /* ${^POSTMATCH} */
-#define RX_BUFF_IDX_CARET_FULLMATCH -3 /* ${^MATCH}     */
-#define RX_BUFF_IDX_PREMATCH        -2 /* $` */
-#define RX_BUFF_IDX_POSTMATCH       -1 /* $' */
-#define RX_BUFF_IDX_FULLMATCH        0 /* $& */
+#  define RX_BUFF_IDX_CARET_PREMATCH  -5 /* ${^PREMATCH}  */
+#  define RX_BUFF_IDX_CARET_POSTMATCH -4 /* ${^POSTMATCH} */
+#  define RX_BUFF_IDX_CARET_FULLMATCH -3 /* ${^MATCH}     */
+#  define RX_BUFF_IDX_PREMATCH        -2 /* $` */
+#  define RX_BUFF_IDX_POSTMATCH       -1 /* $' */
+#  define RX_BUFF_IDX_FULLMATCH        0 /* $& */
 
 /*
   Flags that are passed to the named_buff and named_buff_iter
@@ -233,27 +234,25 @@
 */
 
 /* The Tie::Hash::NamedCapture operation this is part of, if any */
-#define RXapif_FETCH     0x0001
-#define RXapif_STORE     0x0002
-#define RXapif_DELETE    0x0004
-#define RXapif_CLEAR     0x0008
-#define RXapif_EXISTS    0x0010
-#define RXapif_SCALAR    0x0020
-#define RXapif_FIRSTKEY  0x0040
-#define RXapif_NEXTKEY   0x0080
+#  define RXapif_FETCH     0x0001
+#  define RXapif_STORE     0x0002
+#  define RXapif_DELETE    0x0004
+#  define RXapif_CLEAR     0x0008
+#  define RXapif_EXISTS    0x0010
+#  define RXapif_SCALAR    0x0020
+#  define RXapif_FIRSTKEY  0x0040
+#  define RXapif_NEXTKEY   0x0080
 
 /* Whether %+ or %- is being operated on */
-#define RXapif_ONE       0x0100 /* %+ */
-#define RXapif_ALL       0x0200 /* %- */
+#  define RXapif_ONE       0x0100 /* %+ */
+#  define RXapif_ALL       0x0200 /* %- */
 
 /* Whether this is being called from a re:: function */
-#define RXapif_REGNAME         0x0400
-#define RXapif_REGNAMES        0x0800
-#define RXapif_REGNAMES_COUNT  0x1000
+#  define RXapif_REGNAME         0x0400
+#  define RXapif_REGNAMES        0x0800
+#  define RXapif_REGNAMES_COUNT  0x1000
 
 /*
-=head1 REGEXP Functions
-
 =for apidoc Am|REGEXP *|SvRX|SV *sv
 
 Convenience macro to get the REGEXP from a SV.  This is approximately
@@ -279,8 +278,8 @@
 =cut
 */
 
-#define SvRX(sv)   (Perl_get_re_arg(aTHX_ sv))
-#define SvRXOK(sv) cBOOL(Perl_get_re_arg(aTHX_ sv))
+#  define SvRX(sv)   (Perl_get_re_arg(aTHX_ sv))
+#  define SvRXOK(sv) cBOOL(Perl_get_re_arg(aTHX_ sv))
 
 
 /* Flags stored in regexp->extflags
@@ -294,11 +293,11 @@
  *
  */
 
-#include "op_reg_common.h"
+#  include "op_reg_common.h"
 
-#define RXf_PMf_STD_PMMOD	(RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_FOLD|RXf_PMf_EXTENDED|RXf_PMf_EXTENDED_MORE|RXf_PMf_NOCAPTURE)
+#  define RXf_PMf_STD_PMMOD	(RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_FOLD|RXf_PMf_EXTENDED|RXf_PMf_EXTENDED_MORE|RXf_PMf_NOCAPTURE)
 
-#define CASE_STD_PMMOD_FLAGS_PARSE_SET(pmfl, x_count)                       \
+#  define CASE_STD_PMMOD_FLAGS_PARSE_SET(pmfl, x_count)                       \
     case IGNORE_PAT_MOD:    *(pmfl) |= RXf_PMf_FOLD;       break;           \
     case MULTILINE_PAT_MOD: *(pmfl) |= RXf_PMf_MULTILINE;  break;           \
     case SINGLE_PAT_MOD:    *(pmfl) |= RXf_PMf_SINGLELINE; break;           \
@@ -314,7 +313,7 @@
     case NOCAPTURE_PAT_MOD: *(pmfl) |= RXf_PMf_NOCAPTURE; break;
 
 /* Note, includes charset ones, assumes 0 is the default for them */
-#define STD_PMMOD_FLAGS_CLEAR(pmfl)                        \
+#  define STD_PMMOD_FLAGS_CLEAR(pmfl)                        \
     *(pmfl) &= ~(RXf_PMf_FOLD|RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_EXTENDED|RXf_PMf_EXTENDED_MORE|RXf_PMf_CHARSET|RXf_PMf_NOCAPTURE)
 
 /* chars and strings used as regex pattern modifiers
@@ -324,51 +323,51 @@
  * for compatibility reasons with Regexp::Common which highjacked (?k:...)
  * for its own uses. So 'k' is out as well.
  */
-#define DEFAULT_PAT_MOD      '^'    /* Short for all the default modifiers */
-#define EXEC_PAT_MOD         'e'
-#define KEEPCOPY_PAT_MOD     'p'
-#define NOCAPTURE_PAT_MOD    'n'
-#define ONCE_PAT_MOD         'o'
-#define GLOBAL_PAT_MOD       'g'
-#define CONTINUE_PAT_MOD     'c'
-#define MULTILINE_PAT_MOD    'm'
-#define SINGLE_PAT_MOD       's'
-#define IGNORE_PAT_MOD       'i'
-#define XTENDED_PAT_MOD      'x'
-#define NONDESTRUCT_PAT_MOD  'r'
-#define LOCALE_PAT_MOD       'l'
-#define UNICODE_PAT_MOD      'u'
-#define DEPENDS_PAT_MOD      'd'
-#define ASCII_RESTRICT_PAT_MOD 'a'
+#  define DEFAULT_PAT_MOD      '^'    /* Short for all the default modifiers */
+#  define EXEC_PAT_MOD         'e'
+#  define KEEPCOPY_PAT_MOD     'p'
+#  define NOCAPTURE_PAT_MOD    'n'
+#  define ONCE_PAT_MOD         'o'
+#  define GLOBAL_PAT_MOD       'g'
+#  define CONTINUE_PAT_MOD     'c'
+#  define MULTILINE_PAT_MOD    'm'
+#  define SINGLE_PAT_MOD       's'
+#  define IGNORE_PAT_MOD       'i'
+#  define XTENDED_PAT_MOD      'x'
+#  define NONDESTRUCT_PAT_MOD  'r'
+#  define LOCALE_PAT_MOD       'l'
+#  define UNICODE_PAT_MOD      'u'
+#  define DEPENDS_PAT_MOD      'd'
+#  define ASCII_RESTRICT_PAT_MOD 'a'
 
-#define ONCE_PAT_MODS        "o"
-#define KEEPCOPY_PAT_MODS    "p"
-#define NOCAPTURE_PAT_MODS   "n"
-#define EXEC_PAT_MODS        "e"
-#define LOOP_PAT_MODS        "gc"
-#define NONDESTRUCT_PAT_MODS "r"
-#define LOCALE_PAT_MODS      "l"
-#define UNICODE_PAT_MODS     "u"
-#define DEPENDS_PAT_MODS     "d"
-#define ASCII_RESTRICT_PAT_MODS "a"
-#define ASCII_MORE_RESTRICT_PAT_MODS "aa"
+#  define ONCE_PAT_MODS        "o"
+#  define KEEPCOPY_PAT_MODS    "p"
+#  define NOCAPTURE_PAT_MODS   "n"
+#  define EXEC_PAT_MODS        "e"
+#  define LOOP_PAT_MODS        "gc"
+#  define NONDESTRUCT_PAT_MODS "r"
+#  define LOCALE_PAT_MODS      "l"
+#  define UNICODE_PAT_MODS     "u"
+#  define DEPENDS_PAT_MODS     "d"
+#  define ASCII_RESTRICT_PAT_MODS "a"
+#  define ASCII_MORE_RESTRICT_PAT_MODS "aa"
 
 /* This string is expected by regcomp.c to be ordered so that the first
  * character is the flag in bit RXf_PMf_STD_PMMOD_SHIFT of extflags; the next
  * character is bit +1, etc. */
-#define STD_PAT_MODS        "msixxn"
+#  define STD_PAT_MODS        "msixxn"
 
-#define CHARSET_PAT_MODS    ASCII_RESTRICT_PAT_MODS DEPENDS_PAT_MODS LOCALE_PAT_MODS UNICODE_PAT_MODS
+#  define CHARSET_PAT_MODS    ASCII_RESTRICT_PAT_MODS DEPENDS_PAT_MODS LOCALE_PAT_MODS UNICODE_PAT_MODS
 
 /* This string is expected by XS_re_regexp_pattern() in universal.c to be ordered
  * so that the first character is the flag in bit RXf_PMf_STD_PMMOD_SHIFT of
  * extflags; the next character is in bit +1, etc. */
-#define INT_PAT_MODS    STD_PAT_MODS    KEEPCOPY_PAT_MODS
+#  define INT_PAT_MODS    STD_PAT_MODS    KEEPCOPY_PAT_MODS
 
-#define EXT_PAT_MODS    ONCE_PAT_MODS   KEEPCOPY_PAT_MODS  NOCAPTURE_PAT_MODS
-#define QR_PAT_MODS     STD_PAT_MODS    EXT_PAT_MODS	   CHARSET_PAT_MODS
-#define M_PAT_MODS      QR_PAT_MODS     LOOP_PAT_MODS
-#define S_PAT_MODS      M_PAT_MODS      EXEC_PAT_MODS      NONDESTRUCT_PAT_MODS
+#  define EXT_PAT_MODS    ONCE_PAT_MODS   KEEPCOPY_PAT_MODS  NOCAPTURE_PAT_MODS
+#  define QR_PAT_MODS     STD_PAT_MODS    EXT_PAT_MODS	   CHARSET_PAT_MODS
+#  define M_PAT_MODS      QR_PAT_MODS     LOOP_PAT_MODS
+#  define S_PAT_MODS      M_PAT_MODS      EXEC_PAT_MODS      NONDESTRUCT_PAT_MODS
 
 /*
  * NOTE: if you modify any RXf flags you should run regen.pl or
@@ -380,7 +379,7 @@
   Set in Perl_pmruntime for a split. Will be used by regex engines to
   check whether they should set RXf_SKIPWHITE
 */
-#define RXf_SPLIT   RXf_PMf_SPLIT
+#  define RXf_SPLIT   RXf_PMf_SPLIT
 
 /* Currently the regex flags occupy a single 32-bit word.  Not all bits are
  * currently used.  The lower bits are shared with their corresponding PMf flag
@@ -415,50 +414,50 @@
  * For the regexp bits, PL_reg_extflags_name[] in regnodes.h has a comment
  * giving which bits are used/unused */
 
-#define RXf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT + 2)
+#  define RXf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT + 2)
 
 /* What we have seen */
-#define RXf_NO_INPLACE_SUBST    (1U<<(RXf_BASE_SHIFT+2))
-#define RXf_EVAL_SEEN   	(1U<<(RXf_BASE_SHIFT+3))
+#  define RXf_NO_INPLACE_SUBST  (1U<<(RXf_BASE_SHIFT+2))
+#  define RXf_EVAL_SEEN   	(1U<<(RXf_BASE_SHIFT+3))
 
 /* Special */
-#define RXf_UNBOUNDED_QUANTIFIER_SEEN   (1U<<(RXf_BASE_SHIFT+4))
-#define RXf_CHECK_ALL   	(1U<<(RXf_BASE_SHIFT+5))
+#  define RXf_UNBOUNDED_QUANTIFIER_SEEN   (1U<<(RXf_BASE_SHIFT+4))
+#  define RXf_CHECK_ALL   	(1U<<(RXf_BASE_SHIFT+5))
 
 /* UTF8 related */
-#define RXf_MATCH_UTF8  	(1U<<(RXf_BASE_SHIFT+6)) /* $1 etc are utf8 */
+#  define RXf_MATCH_UTF8  	(1U<<(RXf_BASE_SHIFT+6)) /* $1 etc are utf8 */
 
 /* Intuit related */
-#define RXf_USE_INTUIT_NOML	(1U<<(RXf_BASE_SHIFT+7))
-#define RXf_USE_INTUIT_ML	(1U<<(RXf_BASE_SHIFT+8))
-#define RXf_INTUIT_TAIL 	(1U<<(RXf_BASE_SHIFT+9))
-#define RXf_USE_INTUIT		(RXf_USE_INTUIT_NOML|RXf_USE_INTUIT_ML)
+#  define RXf_USE_INTUIT_NOML	(1U<<(RXf_BASE_SHIFT+7))
+#  define RXf_USE_INTUIT_ML	(1U<<(RXf_BASE_SHIFT+8))
+#  define RXf_INTUIT_TAIL 	(1U<<(RXf_BASE_SHIFT+9))
+#  define RXf_USE_INTUIT        (RXf_USE_INTUIT_NOML|RXf_USE_INTUIT_ML)
 
 /* Do we have some sort of anchor? */
-#define RXf_IS_ANCHORED         (1U<<(RXf_BASE_SHIFT+10))
+#  define RXf_IS_ANCHORED       (1U<<(RXf_BASE_SHIFT+10))
 
 /* Copy and tainted info */
-#define RXf_COPY_DONE   	(1U<<(RXf_BASE_SHIFT+11))
+#  define RXf_COPY_DONE   	(1U<<(RXf_BASE_SHIFT+11))
 
 /* post-execution: $1 et al are tainted */
-#define RXf_TAINTED_SEEN	(1U<<(RXf_BASE_SHIFT+12))
+#  define RXf_TAINTED_SEEN	(1U<<(RXf_BASE_SHIFT+12))
 /* this pattern was tainted during compilation */
-#define RXf_TAINTED		(1U<<(RXf_BASE_SHIFT+13))
+#  define RXf_TAINTED		(1U<<(RXf_BASE_SHIFT+13))
 
 /* Flags indicating special patterns */
-#define RXf_START_ONLY		(1U<<(RXf_BASE_SHIFT+14)) /* Pattern is /^/ */
-#define RXf_SKIPWHITE           (1U<<(RXf_BASE_SHIFT+15)) /* Pattern is for a */
+#  define RXf_START_ONLY        (1U<<(RXf_BASE_SHIFT+14)) /* Pattern is /^/ */
+#  define RXf_SKIPWHITE         (1U<<(RXf_BASE_SHIFT+15)) /* Pattern is for a */
                                                           /* split " " */
-#define RXf_WHITE		(1U<<(RXf_BASE_SHIFT+16)) /* Pattern is /\s+/ */
-#define RXf_NULL		(1U<<(RXf_BASE_SHIFT+17)) /* Pattern is // */
+#  define RXf_WHITE		(1U<<(RXf_BASE_SHIFT+16)) /* Pattern is /\s+/ */
+#  define RXf_NULL		(1U<<(RXf_BASE_SHIFT+17)) /* Pattern is // */
 
 /* See comments at the beginning of these defines about adding bits.  The
  * highest bit position should be used, so that if RXf_BASE_SHIFT gets
  * increased, the #error below will be triggered so that you will be reminded
  * to adjust things at the other end to keep the bit positions unchanged */
-#if RXf_BASE_SHIFT+17 > 31
-#   error Too many RXf_PMf bits used.  See comments at beginning of these for what to do
-#endif
+#  if RXf_BASE_SHIFT+17 > 31
+#     error Too many RXf_PMf bits used.  See comments at beginning of these for what to do
+#  endif
 
 /*
  * NOTE: if you modify any RXf flags you should run regen.pl or
@@ -466,92 +465,92 @@
  *
  */
 
-#ifdef NO_TAINT_SUPPORT
-#  define RX_ISTAINTED(rx_sv)           0
-#  define RXp_ISTAINTED(prog)           0
-#  define RX_TAINT_on(rx_sv)            NOOP
-#  define RXp_MATCH_TAINTED(prog)       0
-#  define RX_MATCH_TAINTED(rx_sv)       0
-#  define RXp_MATCH_TAINTED_on(prog)    NOOP
-#  define RX_MATCH_TAINTED_on(rx_sv)    NOOP
-#  define RXp_MATCH_TAINTED_off(prog)   NOOP
-#  define RX_MATCH_TAINTED_off(rx_sv)   NOOP
-#else
-#  define RX_ISTAINTED(rx_sv)           (RX_EXTFLAGS(rx_sv) & RXf_TAINTED)
-#  define RXp_ISTAINTED(prog)           (RXp_EXTFLAGS(prog) & RXf_TAINTED)
-#  define RX_TAINT_on(rx_sv)            (RX_EXTFLAGS(rx_sv) |= RXf_TAINTED)
-#  define RXp_MATCH_TAINTED(prog)       (RXp_EXTFLAGS(prog) & RXf_TAINTED_SEEN)
-#  define RX_MATCH_TAINTED(rx_sv)       (RX_EXTFLAGS(rx_sv) & RXf_TAINTED_SEEN)
-#  define RXp_MATCH_TAINTED_on(prog)    (RXp_EXTFLAGS(prog) |= RXf_TAINTED_SEEN)
-#  define RX_MATCH_TAINTED_on(rx_sv)    (RX_EXTFLAGS(rx_sv) |= RXf_TAINTED_SEEN)
-#  define RXp_MATCH_TAINTED_off(prog)   (RXp_EXTFLAGS(prog) &= ~RXf_TAINTED_SEEN)
-#  define RX_MATCH_TAINTED_off(rx_sv)   (RX_EXTFLAGS(rx_sv) &= ~RXf_TAINTED_SEEN)
-#endif
+#  ifdef NO_TAINT_SUPPORT
+#    define RX_ISTAINTED(rx_sv)           0
+#    define RXp_ISTAINTED(prog)           0
+#    define RX_TAINT_on(rx_sv)            NOOP
+#    define RXp_MATCH_TAINTED(prog)       0
+#    define RX_MATCH_TAINTED(rx_sv)       0
+#    define RXp_MATCH_TAINTED_on(prog)    NOOP
+#    define RX_MATCH_TAINTED_on(rx_sv)    NOOP
+#    define RXp_MATCH_TAINTED_off(prog)   NOOP
+#    define RX_MATCH_TAINTED_off(rx_sv)   NOOP
+#  else
+#    define RX_ISTAINTED(rx_sv)           (RX_EXTFLAGS(rx_sv) & RXf_TAINTED)
+#    define RXp_ISTAINTED(prog)           (RXp_EXTFLAGS(prog) & RXf_TAINTED)
+#    define RX_TAINT_on(rx_sv)            (RX_EXTFLAGS(rx_sv) |= RXf_TAINTED)
+#    define RXp_MATCH_TAINTED(prog)       (RXp_EXTFLAGS(prog) & RXf_TAINTED_SEEN)
+#    define RX_MATCH_TAINTED(rx_sv)       (RX_EXTFLAGS(rx_sv) & RXf_TAINTED_SEEN)
+#    define RXp_MATCH_TAINTED_on(prog)    (RXp_EXTFLAGS(prog) |= RXf_TAINTED_SEEN)
+#    define RX_MATCH_TAINTED_on(rx_sv)    (RX_EXTFLAGS(rx_sv) |= RXf_TAINTED_SEEN)
+#    define RXp_MATCH_TAINTED_off(prog)   (RXp_EXTFLAGS(prog) &= ~RXf_TAINTED_SEEN)
+#    define RX_MATCH_TAINTED_off(rx_sv)   (RX_EXTFLAGS(rx_sv) &= ~RXf_TAINTED_SEEN)
+#  endif
 
-#define RXp_HAS_CUTGROUP(prog)          ((prog)->intflags & PREGf_CUTGROUP_SEEN)
+#  define RXp_HAS_CUTGROUP(prog)          ((prog)->intflags & PREGf_CUTGROUP_SEEN)
 
-#define RX_MATCH_TAINTED_set(rx_sv, t)  ((t) \
+#  define RX_MATCH_TAINTED_set(rx_sv, t)  ((t) \
                                         ? RX_MATCH_TAINTED_on(rx_sv) \
                                         : RX_MATCH_TAINTED_off(rx_sv))
 
-#define RXp_MATCH_COPIED(prog)          (RXp_EXTFLAGS(prog) & RXf_COPY_DONE)
-#define RX_MATCH_COPIED(rx_sv)          (RX_EXTFLAGS(rx_sv) & RXf_COPY_DONE)
-#define RXp_MATCH_COPIED_on(prog)       (RXp_EXTFLAGS(prog) |= RXf_COPY_DONE)
-#define RX_MATCH_COPIED_on(rx_sv)       (RX_EXTFLAGS(rx_sv) |= RXf_COPY_DONE)
-#define RXp_MATCH_COPIED_off(prog)      (RXp_EXTFLAGS(prog) &= ~RXf_COPY_DONE)
-#define RX_MATCH_COPIED_off(rx_sv)      (RX_EXTFLAGS(rx_sv) &= ~RXf_COPY_DONE)
-#define RX_MATCH_COPIED_set(rx_sv,t)    ((t) \
+#  define RXp_MATCH_COPIED(prog)          (RXp_EXTFLAGS(prog) & RXf_COPY_DONE)
+#  define RX_MATCH_COPIED(rx_sv)          (RX_EXTFLAGS(rx_sv) & RXf_COPY_DONE)
+#  define RXp_MATCH_COPIED_on(prog)       (RXp_EXTFLAGS(prog) |= RXf_COPY_DONE)
+#  define RX_MATCH_COPIED_on(rx_sv)       (RX_EXTFLAGS(rx_sv) |= RXf_COPY_DONE)
+#  define RXp_MATCH_COPIED_off(prog)      (RXp_EXTFLAGS(prog) &= ~RXf_COPY_DONE)
+#  define RX_MATCH_COPIED_off(rx_sv)      (RX_EXTFLAGS(rx_sv) &= ~RXf_COPY_DONE)
+#  define RX_MATCH_COPIED_set(rx_sv,t)    ((t) \
                                          ? RX_MATCH_COPIED_on(rx_sv) \
                                          : RX_MATCH_COPIED_off(rx_sv))
 
-#define RXp_EXTFLAGS(rx)                ((rx)->extflags)
-#define RXp_COMPFLAGS(rx)               ((rx)->compflags)
+#  define RXp_EXTFLAGS(rx)                ((rx)->extflags)
+#  define RXp_COMPFLAGS(rx)               ((rx)->compflags)
 
 /* For source compatibility. We used to store these explicitly.  */
-#define RX_PRECOMP(rx_sv)              (RX_WRAPPED(rx_sv) \
+#  define RX_PRECOMP(rx_sv)              (RX_WRAPPED(rx_sv) \
                                             + ReANY(rx_sv)->pre_prefix)
-#define RX_PRECOMP_const(rx_sv)        (RX_WRAPPED_const(rx_sv) \
+#  define RX_PRECOMP_const(rx_sv)        (RX_WRAPPED_const(rx_sv) \
                                             + ReANY(rx_sv)->pre_prefix)
 /* FIXME? Are we hardcoding too much here and constraining plugin extension
    writers? Specifically, the value 1 assumes that the wrapped version always
    has exactly one character at the end, a ')'. Will that always be true?  */
-#define RX_PRELEN(rx_sv)                (RX_WRAPLEN(rx_sv) \
+#  define RX_PRELEN(rx_sv)                (RX_WRAPLEN(rx_sv) \
                                             - ReANY(rx_sv)->pre_prefix - 1)
 
-#define RX_WRAPPED(rx_sv)               SvPVX(rx_sv)
-#define RX_WRAPPED_const(rx_sv)         SvPVX_const(rx_sv)
-#define RX_WRAPLEN(rx_sv)               SvCUR(rx_sv)
-#define RX_CHECK_SUBSTR(rx_sv)          (ReANY(rx_sv)->check_substr)
-#define RX_REFCNT(rx_sv)                SvREFCNT(rx_sv)
-#define RX_EXTFLAGS(rx_sv)              RXp_EXTFLAGS(ReANY(rx_sv))
-#define RX_COMPFLAGS(rx_sv)             RXp_COMPFLAGS(ReANY(rx_sv))
-#define RXp_ENGINE(prog)                ((prog)->engine)
-#define RX_ENGINE(rx_sv)                (RXp_ENGINE(ReANY(rx_sv)))
-#define RXp_SUBBEG(prog)                (prog->subbeg)
-#define RX_SUBBEG(rx_sv)                (RXp_SUBBEG(ReANY(rx_sv)))
-#define RXp_SUBOFFSET(prog)             (prog->suboffset)
-#define RX_SUBOFFSET(rx_sv)             (RXp_SUBOFFSET(ReANY(rx_sv)))
-#define RX_SUBCOFFSET(rx_sv)            (ReANY(rx_sv)->subcoffset)
-#define RXp_OFFS(prog)                  (prog->offs)
-#define RX_OFFS(rx_sv)                  (RXp_OFFS(ReANY(rx_sv)))
-#define RXp_NPARENS(prog)               (prog->nparens)
-#define RX_NPARENS(rx_sv)               (RXp_NPARENS(ReANY(rx_sv)))
-#define RX_SUBLEN(rx_sv)                (ReANY(rx_sv)->sublen)
-#define RXp_MINLEN(prog)                (prog->minlen)
-#define RX_MINLEN(rx_sv)                (RXp_MINLEN(ReANY(rx_sv)))
-#define RXp_MINLENRET(prog)             (prog->minlenret)
-#define RX_MINLENRET(rx_sv)             (RXp_MINLENRET(ReANY(rx_sv)))
-#define RXp_GOFS(prog)                  (prog->gofs)
-#define RX_GOFS(rx_sv)                  (RXp_GOFS(ReANY(rx_sv)))
-#define RX_LASTPAREN(rx_sv)             (ReANY(rx_sv)->lastparen)
-#define RX_LASTCLOSEPAREN(rx_sv)        (ReANY(rx_sv)->lastcloseparen)
-#define RXp_SAVED_COPY(prog)            (prog->saved_copy)
-#define RX_SAVED_COPY(rx_sv)            (RXp_SAVED_COPY(ReANY(rx_sv)))
+#  define RX_WRAPPED(rx_sv)               SvPVX(rx_sv)
+#  define RX_WRAPPED_const(rx_sv)         SvPVX_const(rx_sv)
+#  define RX_WRAPLEN(rx_sv)               SvCUR(rx_sv)
+#  define RX_CHECK_SUBSTR(rx_sv)          (ReANY(rx_sv)->check_substr)
+#  define RX_REFCNT(rx_sv)                SvREFCNT(rx_sv)
+#  define RX_EXTFLAGS(rx_sv)              RXp_EXTFLAGS(ReANY(rx_sv))
+#  define RX_COMPFLAGS(rx_sv)             RXp_COMPFLAGS(ReANY(rx_sv))
+#  define RXp_ENGINE(prog)                ((prog)->engine)
+#  define RX_ENGINE(rx_sv)                (RXp_ENGINE(ReANY(rx_sv)))
+#  define RXp_SUBBEG(prog)                (prog->subbeg)
+#  define RX_SUBBEG(rx_sv)                (RXp_SUBBEG(ReANY(rx_sv)))
+#  define RXp_SUBOFFSET(prog)             (prog->suboffset)
+#  define RX_SUBOFFSET(rx_sv)             (RXp_SUBOFFSET(ReANY(rx_sv)))
+#  define RX_SUBCOFFSET(rx_sv)            (ReANY(rx_sv)->subcoffset)
+#  define RXp_OFFS(prog)                  (prog->offs)
+#  define RX_OFFS(rx_sv)                  (RXp_OFFS(ReANY(rx_sv)))
+#  define RXp_NPARENS(prog)               (prog->nparens)
+#  define RX_NPARENS(rx_sv)               (RXp_NPARENS(ReANY(rx_sv)))
+#  define RX_SUBLEN(rx_sv)                (ReANY(rx_sv)->sublen)
+#  define RXp_MINLEN(prog)                (prog->minlen)
+#  define RX_MINLEN(rx_sv)                (RXp_MINLEN(ReANY(rx_sv)))
+#  define RXp_MINLENRET(prog)             (prog->minlenret)
+#  define RX_MINLENRET(rx_sv)             (RXp_MINLENRET(ReANY(rx_sv)))
+#  define RXp_GOFS(prog)                  (prog->gofs)
+#  define RX_GOFS(rx_sv)                  (RXp_GOFS(ReANY(rx_sv)))
+#  define RX_LASTPAREN(rx_sv)             (ReANY(rx_sv)->lastparen)
+#  define RX_LASTCLOSEPAREN(rx_sv)        (ReANY(rx_sv)->lastcloseparen)
+#  define RXp_SAVED_COPY(prog)            (prog->saved_copy)
+#  define RX_SAVED_COPY(rx_sv)            (RXp_SAVED_COPY(ReANY(rx_sv)))
 /* last match was zero-length */
-#define RXp_ZERO_LEN(prog) \
+#  define RXp_ZERO_LEN(prog) \
         (RXp_OFFS(prog)[0].start + (SSize_t)RXp_GOFS(prog) \
           == RXp_OFFS(prog)[0].end)
-#define RX_ZERO_LEN(rx_sv)              (RXp_ZERO_LEN(ReANY(rx_sv)))
+#  define RX_ZERO_LEN(rx_sv)              (RXp_ZERO_LEN(ReANY(rx_sv)))
 
 #endif /* PLUGGABLE_RE_EXTENSION */
 
@@ -558,7 +557,7 @@
 /* Stuff that needs to be included in the pluggable extension goes below here */
 
 #ifdef PERL_ANY_COW
-#define RXp_MATCH_COPY_FREE(prog) \
+#  define RXp_MATCH_COPY_FREE(prog) \
 	STMT_START {if (RXp_SAVED_COPY(prog)) { \
 	    SV_CHECK_THINKFIRST_COW_DROP(RXp_SAVED_COPY(prog)); \
 	} \
@@ -567,7 +566,7 @@
 	    RXp_MATCH_COPIED_off(prog); \
 	}} STMT_END
 #else
-#define RXp_MATCH_COPY_FREE(prog) \
+#  define RXp_MATCH_COPY_FREE(prog) \
 	STMT_START {if (RXp_MATCH_COPIED(prog)) { \
 	    Safefree(RXp_SUBBEG(prog)); \
 	    RXp_MATCH_COPIED_off(prog); \
@@ -608,7 +607,7 @@
                                         the start pos (so s/.\G// would fail
                                         on second iteration */
 
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#if defined(PERL_USE_GCC_BRACE_GROUPS)
 #  define ReREFCNT_inc(re)						\
     ({									\
 	/* This is here to generate a casting warning if incorrect.  */	\
@@ -675,13 +674,18 @@
 } regmatch_info_aux;
 
 
-/* some basic information about the current match that is created by
- * Perl_regexec_flags and then passed to regtry(), regmatch() etc.
- * It is allocated as a local var on the stack, so nothing should be
- * stored in it that needs preserving or clearing up on croak().
- * For that, see the aux_info and aux_info_eval members of the
- * regmatch_state union. */
+/*
+=for apidoc Ay||regmatch_info
+Some basic information about the current match that is created by
+Perl_regexec_flags and then passed to regtry(), regmatch() etc.
+It is allocated as a local var on the stack, so nothing should be
+stored in it that needs preserving or clearing up on croak().
+For that, see the aux_info and aux_info_eval members of the
+regmatch_state union.
 
+=cut
+*/
+
 typedef struct {
     REGEXP *prog;        /* the regex being executed */
     const char * strbeg; /* real start of string */
@@ -705,9 +709,36 @@
 /* structures for holding and saving the state maintained by regmatch() */
 
 #ifndef MAX_RECURSE_EVAL_NOCHANGE_DEPTH
-#define MAX_RECURSE_EVAL_NOCHANGE_DEPTH 10
+#  define MAX_RECURSE_EVAL_NOCHANGE_DEPTH 10
 #endif
 
+/* The +1 is because everything matches itself, which isn't included in
+ * MAX_FOLD_FROMS; the +2 is based on the current Unicode standards needs, and
+ * is unlikely to change.  An assertion should fail in regexec.c if it is too
+ * low.  It is needed for certain edge cases involving multi-character folds
+ * when the first component also participates in a fold individually. */
+#define MAX_MATCHES (MAX_FOLD_FROMS + 1 + 2)
+
+struct next_matchable_info {
+    U8     first_byte_mask;
+    U8     first_byte_anded;
+    U32    mask32;
+    U32    anded32;
+    PERL_INT_FAST8_T count; /* Negative means not initialized */
+    PERL_UINT_FAST8_T min_length;
+    PERL_UINT_FAST8_T max_length;
+    PERL_UINT_FAST8_T initial_definitive;
+    PERL_UINT_FAST8_T initial_exact;
+    PERL_UINT_FAST8_T lengths[MAX_MATCHES];
+
+    /* The size is from trial and error, and could change with new Unicode
+     * standards, in which case there is an assertion that should start
+     * failing.  This size could be calculated in one of the regen scripts
+     * dealing with Unicode, but khw thinks the likelihood of it changing is
+     * low enough that it isn't worth the effort. */
+    U8 matches[18];
+};
+
 typedef I32 CHECKPOINT;
 
 typedef struct regmatch_state {
@@ -856,7 +887,6 @@
 	struct {
 	    /* this first element must match u.yes */
 	    struct regmatch_state *prev_yes_state;
-	    int c1, c2;		/* case fold search */
 	    CHECKPOINT cp;
 	    U32 lastparen;
 	    U32 lastcloseparen;
@@ -865,8 +895,7 @@
 	    bool minmod;
 	    regnode *A, *B;	/* the nodes corresponding to /A*B/  */
 	    regnode *me;	/* the curlym node */
-            U8 c1_utf8[UTF8_MAXBYTES+1];  /* */
-            U8 c2_utf8[UTF8_MAXBYTES+1];
+            struct next_matchable_info Binfo;
 	} curlym;
 
 	struct {
@@ -874,14 +903,12 @@
 	    CHECKPOINT cp;
 	    U32 lastparen;
 	    U32 lastcloseparen;
-	    int c1, c2;		/* case fold search */
 	    char *maxpos;	/* highest possible point in string to match */
 	    char *oldloc;	/* the previous locinput */
 	    int count;
 	    int min, max;	/* {m,n} */
 	    regnode *A, *B;	/* the nodes corresponding to /A*B/  */
-            U8 c1_utf8[UTF8_MAXBYTES+1];  /* */
-            U8 c2_utf8[UTF8_MAXBYTES+1];
+            struct next_matchable_info Binfo;
 	} curly; /* and CURLYN/PLUS/STAR */
 
     } u;

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/regnodes.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/regnodes.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/regnodes.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -4,165 +4,1095 @@
    Any changes made here will be lost!
  */
 
+#if defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD)
+
 /* Regops and State definitions */
 
 #define REGNODE_MAX           	109
 #define REGMATCH_STATE_MAX    	149
 
-#define	END                   	0	/* 0000 End of program. */
-#define	SUCCEED               	1	/* 0x01 Return from a subroutine, basically. */
-#define	SBOL                  	2	/* 0x02 Match "" at beginning of line: /^/, /\A/ */
-#define	BOL                   	2	/* 0x02 type alias */
-#define	MBOL                  	3	/* 0x03 Same, assuming multiline: /^/m */
-#define	SEOL                  	4	/* 0x04 Match "" at end of line: /$/ */
-#define	EOL                   	4	/* 0x04 type alias */
-#define	MEOL                  	5	/* 0x05 Same, assuming multiline: /$/m */
-#define	EOS                   	6	/* 0x06 Match "" at end of string: /\z/ */
-#define	GPOS                  	7	/* 0x07 Matches where last m//g left off. */
-#define	BOUND                 	8	/* 0x08 Like BOUNDA for non-utf8, otherwise like BOUNDU */
-#define	BOUNDL                	9	/* 0x09 Like BOUND/BOUNDU, but \w and \W are defined by current locale */
-#define	BOUNDU                	10	/* 0x0a Match "" at any boundary of a given type using /u rules. */
-#define	BOUNDA                	11	/* 0x0b Match "" at any boundary between \w\W or \W\w, where \w is [_a-zA-Z0-9] */
-#define	NBOUND                	12	/* 0x0c Like NBOUNDA for non-utf8, otherwise like BOUNDU */
-#define	NBOUNDL               	13	/* 0x0d Like NBOUND/NBOUNDU, but \w and \W are defined by current locale */
-#define	NBOUNDU               	14	/* 0x0e Match "" at any non-boundary of a given type using using /u rules. */
-#define	NBOUNDA               	15	/* 0x0f Match "" betweeen any \w\w or \W\W, where \w is [_a-zA-Z0-9] */
-#define	REG_ANY               	16	/* 0x10 Match any one character (except newline). */
-#define	SANY                  	17	/* 0x11 Match any one character. */
-#define	ANYOF                 	18	/* 0x12 Match character in (or not in) this class, single char match only */
-#define	ANYOFD                	19	/* 0x13 Like ANYOF, but /d is in effect */
-#define	ANYOFL                	20	/* 0x14 Like ANYOF, but /l is in effect */
-#define	ANYOFPOSIXL           	21	/* 0x15 Like ANYOFL, but matches [[:posix:]] classes */
-#define	ANYOFH                	22	/* 0x16 Like ANYOF, but only has "High" matches, none in the bitmap; the flags field contains the lowest matchable UTF-8 start byte */
-#define	ANYOFHb               	23	/* 0x17 Like ANYOFH, but all matches share the same UTF-8 start byte, given in the flags field */
-#define	ANYOFHr               	24	/* 0x18 Like ANYOFH, but the flags field contains packed bounds for all matchable UTF-8 start bytes. */
-#define	ANYOFHs               	25	/* 0x19 Like ANYOFHb, but has a string field that gives the leading matchable UTF-8 bytes; flags field is len */
-#define	ANYOFR                	26	/* 0x1a Matches any character in the range given by its packed args: upper 12 bits is the max delta from the base lower 20; the flags field contains the lowest matchable UTF-8 start byte */
-#define	ANYOFRb               	27	/* 0x1b Like ANYOFR, but all matches share the same UTF-8 start byte, given in the flags field */
-#define	ANYOFM                	28	/* 0x1c Like ANYOF, but matches an invariant byte as determined by the mask and arg */
-#define	NANYOFM               	29	/* 0x1d complement of ANYOFM */
-#define	POSIXD                	30	/* 0x1e Some [[:class:]] under /d; the FLAGS field gives which one */
-#define	POSIXL                	31	/* 0x1f Some [[:class:]] under /l; the FLAGS field gives which one */
-#define	POSIXU                	32	/* 0x20 Some [[:class:]] under /u; the FLAGS field gives which one */
-#define	POSIXA                	33	/* 0x21 Some [[:class:]] under /a; the FLAGS field gives which one */
-#define	NPOSIXD               	34	/* 0x22 complement of POSIXD, [[:^class:]] */
-#define	NPOSIXL               	35	/* 0x23 complement of POSIXL, [[:^class:]] */
-#define	NPOSIXU               	36	/* 0x24 complement of POSIXU, [[:^class:]] */
-#define	NPOSIXA               	37	/* 0x25 complement of POSIXA, [[:^class:]] */
-#define	CLUMP                 	38	/* 0x26 Match any extended grapheme cluster sequence */
-#define	BRANCH                	39	/* 0x27 Match this alternative, or the next... */
-#define	EXACT                 	40	/* 0x28 Match this string (flags field is the length). */
-#define	LEXACT                	41	/* 0x29 Match this long string (preceded by length; flags unused). */
-#define	EXACTL                	42	/* 0x2a Like EXACT, but /l is in effect (used so locale-related warnings can be checked for) */
-#define	EXACTF                	43	/* 0x2b Like EXACT, but match using /id rules; (string not UTF-8, ASCII folded; non-ASCII not) */
-#define	EXACTFL               	44	/* 0x2c Like EXACT, but match using /il rules; (string not likely to be folded) */
-#define	EXACTFU               	45	/* 0x2d Like EXACT, but match using /iu rules; (string folded) */
-#define	EXACTFAA              	46	/* 0x2e Like EXACT, but match using /iaa rules; (string folded except in non-UTF8 patterns: MICRO, SHARP S; folded length <= unfolded) */
-#define	EXACTFUP              	47	/* 0x2f Like EXACT, but match using /iu rules; (string not UTF-8, folded except MICRO, SHARP S: hence Problematic) */
-#define	EXACTFLU8             	48	/* 0x30 Like EXACTFU, but use /il, UTF-8, (string is folded, and everything in it is above 255 */
-#define	EXACTFAA_NO_TRIE      	49	/* 0x31 Like EXACT, but match using /iaa rules (string not UTF-8, not guaranteed to be folded, not currently trie-able) */
-#define	EXACT_REQ8            	50	/* 0x32 Like EXACT, but only UTF-8 encoded targets can match */
-#define	LEXACT_REQ8           	51	/* 0x33 Like LEXACT, but only UTF-8 encoded targets can match */
-#define	EXACTFU_REQ8          	52	/* 0x34 Like EXACTFU, but only UTF-8 encoded targets can match */
-#define	EXACTFU_S_EDGE        	53	/* 0x35 /di rules, but nothing in it precludes /ui, except begins and/or ends with [Ss]; (string not UTF-8; compile-time only) */
-#define	NOTHING               	54	/* 0x36 Match empty string. */
-#define	TAIL                  	55	/* 0x37 Match empty string. Can jump here from outside. */
-#define	STAR                  	56	/* 0x38 Match this (simple) thing 0 or more times. */
-#define	PLUS                  	57	/* 0x39 Match this (simple) thing 1 or more times. */
-#define	CURLY                 	58	/* 0x3a Match this simple thing {n,m} times. */
-#define	CURLYN                	59	/* 0x3b Capture next-after-this simple thing */
-#define	CURLYM                	60	/* 0x3c Capture this medium-complex thing {n,m} times. */
-#define	CURLYX                	61	/* 0x3d Match this complex thing {n,m} times. */
-#define	WHILEM                	62	/* 0x3e Do curly processing and see if rest matches. */
-#define	OPEN                  	63	/* 0x3f Mark this point in input as start of #n. */
-#define	CLOSE                 	64	/* 0x40 Close corresponding OPEN of #n. */
-#define	SROPEN                	65	/* 0x41 Same as OPEN, but for script run */
-#define	SRCLOSE               	66	/* 0x42 Close preceding SROPEN */
-#define	REF                   	67	/* 0x43 Match some already matched string */
-#define	REFF                  	68	/* 0x44 Match already matched string, using /di rules. */
-#define	REFFL                 	69	/* 0x45 Match already matched string, using /li rules. */
-#define	REFFU                 	70	/* 0x46 Match already matched string, usng /ui. */
-#define	REFFA                 	71	/* 0x47 Match already matched string, using /aai rules. */
-#define	REFN                  	72	/* 0x48 Match some already matched string */
-#define	REFFN                 	73	/* 0x49 Match already matched string, using /di rules. */
-#define	REFFLN                	74	/* 0x4a Match already matched string, using /li rules. */
-#define	REFFUN                	75	/* 0x4b Match already matched string, using /ui rules. */
-#define	REFFAN                	76	/* 0x4c Match already matched string, using /aai rules. */
-#define	LONGJMP               	77	/* 0x4d Jump far away. */
-#define	BRANCHJ               	78	/* 0x4e BRANCH with long offset. */
-#define	IFMATCH               	79	/* 0x4f Succeeds if the following matches; non-zero flags "f", next_off "o" means lookbehind assertion starting "f..(f-o)" characters before current */
-#define	UNLESSM               	80	/* 0x50 Fails if the following matches; non-zero flags "f", next_off "o" means lookbehind assertion starting "f..(f-o)" characters before current */
-#define	SUSPEND               	81	/* 0x51 "Independent" sub-RE. */
-#define	IFTHEN                	82	/* 0x52 Switch, should be preceded by switcher. */
-#define	GROUPP                	83	/* 0x53 Whether the group matched. */
-#define	EVAL                  	84	/* 0x54 Execute some Perl code. */
-#define	MINMOD                	85	/* 0x55 Next operator is not greedy. */
-#define	LOGICAL               	86	/* 0x56 Next opcode should set the flag only. */
-#define	RENUM                 	87	/* 0x57 Group with independently numbered parens. */
-#define	TRIE                  	88	/* 0x58 Match many EXACT(F[ALU]?)? at once. flags==type */
-#define	TRIEC                 	89	/* 0x59 Same as TRIE, but with embedded charclass data */
-#define	AHOCORASICK           	90	/* 0x5a Aho Corasick stclass. flags==type */
-#define	AHOCORASICKC          	91	/* 0x5b Same as AHOCORASICK, but with embedded charclass data */
-#define	GOSUB                 	92	/* 0x5c recurse to paren arg1 at (signed) ofs arg2 */
-#define	GROUPPN               	93	/* 0x5d Whether the group matched. */
-#define	INSUBP                	94	/* 0x5e Whether we are in a specific recurse. */
-#define	DEFINEP               	95	/* 0x5f Never execute directly. */
-#define	ENDLIKE               	96	/* 0x60 Used only for the type field of verbs */
-#define	OPFAIL                	97	/* 0x61 Same as (?!), but with verb arg */
-#define	ACCEPT                	98	/* 0x62 Accepts the current matched string, with verbar */
-#define	VERB                  	99	/* 0x63 Used only for the type field of verbs */
-#define	PRUNE                 	100	/* 0x64 Pattern fails at this startpoint if no-backtracking through this */
-#define	MARKPOINT             	101	/* 0x65 Push the current location for rollback by cut. */
-#define	SKIP                  	102	/* 0x66 On failure skip forward (to the mark) before retrying */
-#define	COMMIT                	103	/* 0x67 Pattern fails outright if backtracking through this */
-#define	CUTGROUP              	104	/* 0x68 On failure go to the next alternation in the group */
-#define	KEEPS                 	105	/* 0x69 $& begins here. */
-#define	LNBREAK               	106	/* 0x6a generic newline pattern */
-#define	OPTIMIZED             	107	/* 0x6b Placeholder for dump. */
-#define	PSEUDO                	108	/* 0x6c Pseudo opcode for internal use. */
-#define	REGEX_SET             	109	/* 0x6d Regex set, temporary node used in pre-optimization compilation */
+/* -- For regexec.c to switch on target being utf8 (t8) or not (tb, b='byte');
+ *    same with pattern (p8, pb) -- */
+#define with_tp_UTF8ness(op, t_utf8, p_utf8)                        \
+		(((op) << 2) + (cBOOL(t_utf8) << 1) + cBOOL(p_utf8))
+
+/* The #defines below give both the basic regnode and the expanded version for
+   switching on utf8ness */
+#define END                           0     /* 0x00 End of program. */
+#define END_tb_pb                        0  /*      0x000 */
+#define END_tb_p8                        1  /*      0x001 */
+#define END_t8_pb                        2  /*      0x002 */
+#define END_t8_p8                        3  /*      0x003 */
+
+#define SUCCEED                       1     /* 0x01 Return from a subroutine,
+                                               basically. */
+#define SUCCEED_tb_pb                    4  /*      0x004 */
+#define SUCCEED_tb_p8                    5  /*      0x005 */
+#define SUCCEED_t8_pb                    6  /*      0x006 */
+#define SUCCEED_t8_p8                    7  /*      0x007 */
+
+#define SBOL                          2     /* 0x02 Match "" at beginning of
+                                               line: /^/, /\A/ */
+#define SBOL_tb_pb                       8  /*      0x008 */
+#define SBOL_tb_p8                       9  /*      0x009 */
+#define SBOL_t8_pb                      10  /*      0x00a */
+#define SBOL_t8_p8                      11  /*      0x00b */
+
+#define BOL                           2     /* 0x02 Match "" at beginning of
+                                               line: /^/, /\A/ */
+#define BOL_tb_pb                        8  /*      0x008 */
+#define BOL_tb_p8                        9  /*      0x009 */
+#define BOL_t8_pb                       10  /*      0x00a */
+#define BOL_t8_p8                       11  /*      0x00b */
+
+#define MBOL                          3     /* 0x03 Same, assuming multiline:
+                                               /^/m */
+#define MBOL_tb_pb                      12  /*      0x00c */
+#define MBOL_tb_p8                      13  /*      0x00d */
+#define MBOL_t8_pb                      14  /*      0x00e */
+#define MBOL_t8_p8                      15  /*      0x00f */
+
+#define SEOL                          4     /* 0x04 Match "" at end of line:
+                                               /$/ */
+#define SEOL_tb_pb                      16  /*      0x010 */
+#define SEOL_tb_p8                      17  /*      0x011 */
+#define SEOL_t8_pb                      18  /*      0x012 */
+#define SEOL_t8_p8                      19  /*      0x013 */
+
+#define EOL                           4     /* 0x04 Match "" at end of line:
+                                               /$/ */
+#define EOL_tb_pb                       16  /*      0x010 */
+#define EOL_tb_p8                       17  /*      0x011 */
+#define EOL_t8_pb                       18  /*      0x012 */
+#define EOL_t8_p8                       19  /*      0x013 */
+
+#define MEOL                          5     /* 0x05 Same, assuming multiline:
+                                               /$/m */
+#define MEOL_tb_pb                      20  /*      0x014 */
+#define MEOL_tb_p8                      21  /*      0x015 */
+#define MEOL_t8_pb                      22  /*      0x016 */
+#define MEOL_t8_p8                      23  /*      0x017 */
+
+#define EOS                           6     /* 0x06 Match "" at end of string:
+                                               /\z/ */
+#define EOS_tb_pb                       24  /*      0x018 */
+#define EOS_tb_p8                       25  /*      0x019 */
+#define EOS_t8_pb                       26  /*      0x01a */
+#define EOS_t8_p8                       27  /*      0x01b */
+
+#define GPOS                          7     /* 0x07 Matches where last m//g
+                                               left off. */
+#define GPOS_tb_pb                      28  /*      0x01c */
+#define GPOS_tb_p8                      29  /*      0x01d */
+#define GPOS_t8_pb                      30  /*      0x01e */
+#define GPOS_t8_p8                      31  /*      0x01f */
+
+#define BOUND                         8     /* 0x08 Like BOUNDA for non-utf8,
+                                               otherwise like BOUNDU */
+#define BOUND_tb_pb                     32  /*      0x020 */
+#define BOUND_tb_p8                     33  /*      0x021 */
+#define BOUND_t8_pb                     34  /*      0x022 */
+#define BOUND_t8_p8                     35  /*      0x023 */
+
+#define BOUNDL                        9     /* 0x09 Like BOUND/BOUNDU, but \w
+                                               and \W are defined by current
+                                               locale */
+#define BOUNDL_tb_pb                    36  /*      0x024 */
+#define BOUNDL_tb_p8                    37  /*      0x025 */
+#define BOUNDL_t8_pb                    38  /*      0x026 */
+#define BOUNDL_t8_p8                    39  /*      0x027 */
+
+#define BOUNDU                       10     /* 0x0a Match "" at any boundary
+                                               of a given type using /u rules.
+                                            */
+#define BOUNDU_tb_pb                    40  /*      0x028 */
+#define BOUNDU_tb_p8                    41  /*      0x029 */
+#define BOUNDU_t8_pb                    42  /*      0x02a */
+#define BOUNDU_t8_p8                    43  /*      0x02b */
+
+#define BOUNDA                       11     /* 0x0b Match "" at any boundary
+                                               between \w\W or \W\w, where \w
+                                               is [_a-zA-Z0-9] */
+#define BOUNDA_tb_pb                    44  /*      0x02c */
+#define BOUNDA_tb_p8                    45  /*      0x02d */
+#define BOUNDA_t8_pb                    46  /*      0x02e */
+#define BOUNDA_t8_p8                    47  /*      0x02f */
+
+#define NBOUND                       12     /* 0x0c Like NBOUNDA for non-utf8,
+                                               otherwise like BOUNDU */
+#define NBOUND_tb_pb                    48  /*      0x030 */
+#define NBOUND_tb_p8                    49  /*      0x031 */
+#define NBOUND_t8_pb                    50  /*      0x032 */
+#define NBOUND_t8_p8                    51  /*      0x033 */
+
+#define NBOUNDL                      13     /* 0x0d Like NBOUND/NBOUNDU, but
+                                               \w and \W are defined by
+                                               current locale */
+#define NBOUNDL_tb_pb                   52  /*      0x034 */
+#define NBOUNDL_tb_p8                   53  /*      0x035 */
+#define NBOUNDL_t8_pb                   54  /*      0x036 */
+#define NBOUNDL_t8_p8                   55  /*      0x037 */
+
+#define NBOUNDU                      14     /* 0x0e Match "" at any
+                                               non-boundary of a given type
+                                               using using /u rules. */
+#define NBOUNDU_tb_pb                   56  /*      0x038 */
+#define NBOUNDU_tb_p8                   57  /*      0x039 */
+#define NBOUNDU_t8_pb                   58  /*      0x03a */
+#define NBOUNDU_t8_p8                   59  /*      0x03b */
+
+#define NBOUNDA                      15     /* 0x0f Match "" betweeen any \w\w
+                                               or \W\W, where \w is
+                                               [_a-zA-Z0-9] */
+#define NBOUNDA_tb_pb                   60  /*      0x03c */
+#define NBOUNDA_tb_p8                   61  /*      0x03d */
+#define NBOUNDA_t8_pb                   62  /*      0x03e */
+#define NBOUNDA_t8_p8                   63  /*      0x03f */
+
+#define REG_ANY                      16     /* 0x10 Match any one character
+                                               (except newline). */
+#define REG_ANY_tb_pb                   64  /*      0x040 */
+#define REG_ANY_tb_p8                   65  /*      0x041 */
+#define REG_ANY_t8_pb                   66  /*      0x042 */
+#define REG_ANY_t8_p8                   67  /*      0x043 */
+
+#define SANY                         17     /* 0x11 Match any one character.
+                                            */
+#define SANY_tb_pb                      68  /*      0x044 */
+#define SANY_tb_p8                      69  /*      0x045 */
+#define SANY_t8_pb                      70  /*      0x046 */
+#define SANY_t8_p8                      71  /*      0x047 */
+
+#define ANYOF                        18     /* 0x12 Match character in (or not
+                                               in) this class, single char
+                                               match only */
+#define ANYOF_tb_pb                     72  /*      0x048 */
+#define ANYOF_tb_p8                     73  /*      0x049 */
+#define ANYOF_t8_pb                     74  /*      0x04a */
+#define ANYOF_t8_p8                     75  /*      0x04b */
+
+#define ANYOFD                       19     /* 0x13 Like ANYOF, but /d is in
+                                               effect */
+#define ANYOFD_tb_pb                    76  /*      0x04c */
+#define ANYOFD_tb_p8                    77  /*      0x04d */
+#define ANYOFD_t8_pb                    78  /*      0x04e */
+#define ANYOFD_t8_p8                    79  /*      0x04f */
+
+#define ANYOFL                       20     /* 0x14 Like ANYOF, but /l is in
+                                               effect */
+#define ANYOFL_tb_pb                    80  /*      0x050 */
+#define ANYOFL_tb_p8                    81  /*      0x051 */
+#define ANYOFL_t8_pb                    82  /*      0x052 */
+#define ANYOFL_t8_p8                    83  /*      0x053 */
+
+#define ANYOFPOSIXL                  21     /* 0x15 Like ANYOFL, but matches
+                                               [[:posix:]] classes */
+#define ANYOFPOSIXL_tb_pb               84  /*      0x054 */
+#define ANYOFPOSIXL_tb_p8               85  /*      0x055 */
+#define ANYOFPOSIXL_t8_pb               86  /*      0x056 */
+#define ANYOFPOSIXL_t8_p8               87  /*      0x057 */
+
+#define ANYOFH                       22     /* 0x16 Like ANYOF, but only has
+                                               "High" matches, none in the
+                                               bitmap; the flags field
+                                               contains the lowest matchable
+                                               UTF-8 start byte */
+#define ANYOFH_tb_pb                    88  /*      0x058 */
+#define ANYOFH_tb_p8                    89  /*      0x059 */
+#define ANYOFH_t8_pb                    90  /*      0x05a */
+#define ANYOFH_t8_p8                    91  /*      0x05b */
+
+#define ANYOFHb                      23     /* 0x17 Like ANYOFH, but all
+                                               matches share the same UTF-8
+                                               start byte, given in the flags
+                                               field */
+#define ANYOFHb_tb_pb                   92  /*      0x05c */
+#define ANYOFHb_tb_p8                   93  /*      0x05d */
+#define ANYOFHb_t8_pb                   94  /*      0x05e */
+#define ANYOFHb_t8_p8                   95  /*      0x05f */
+
+#define ANYOFHr                      24     /* 0x18 Like ANYOFH, but the flags
+                                               field contains packed bounds
+                                               for all matchable UTF-8 start
+                                               bytes. */
+#define ANYOFHr_tb_pb                   96  /*      0x060 */
+#define ANYOFHr_tb_p8                   97  /*      0x061 */
+#define ANYOFHr_t8_pb                   98  /*      0x062 */
+#define ANYOFHr_t8_p8                   99  /*      0x063 */
+
+#define ANYOFHs                      25     /* 0x19 Like ANYOFHb, but has a
+                                               string field that gives the
+                                               leading matchable UTF-8 bytes;
+                                               flags field is len */
+#define ANYOFHs_tb_pb                  100  /*      0x064 */
+#define ANYOFHs_tb_p8                  101  /*      0x065 */
+#define ANYOFHs_t8_pb                  102  /*      0x066 */
+#define ANYOFHs_t8_p8                  103  /*      0x067 */
+
+#define ANYOFR                       26     /* 0x1a Matches any character in
+                                               the range given by its packed
+                                               args: upper 12 bits is the max
+                                               delta from the base lower 20;
+                                               the flags field contains the
+                                               lowest matchable UTF-8 start
+                                               byte */
+#define ANYOFR_tb_pb                   104  /*      0x068 */
+#define ANYOFR_tb_p8                   105  /*      0x069 */
+#define ANYOFR_t8_pb                   106  /*      0x06a */
+#define ANYOFR_t8_p8                   107  /*      0x06b */
+
+#define ANYOFRb                      27     /* 0x1b Like ANYOFR, but all
+                                               matches share the same UTF-8
+                                               start byte, given in the flags
+                                               field */
+#define ANYOFRb_tb_pb                  108  /*      0x06c */
+#define ANYOFRb_tb_p8                  109  /*      0x06d */
+#define ANYOFRb_t8_pb                  110  /*      0x06e */
+#define ANYOFRb_t8_p8                  111  /*      0x06f */
+
+#define ANYOFM                       28     /* 0x1c Like ANYOF, but matches an
+                                               invariant byte as determined by
+                                               the mask and arg */
+#define ANYOFM_tb_pb                   112  /*      0x070 */
+#define ANYOFM_tb_p8                   113  /*      0x071 */
+#define ANYOFM_t8_pb                   114  /*      0x072 */
+#define ANYOFM_t8_p8                   115  /*      0x073 */
+
+#define NANYOFM                      29     /* 0x1d complement of ANYOFM */
+#define NANYOFM_tb_pb                  116  /*      0x074 */
+#define NANYOFM_tb_p8                  117  /*      0x075 */
+#define NANYOFM_t8_pb                  118  /*      0x076 */
+#define NANYOFM_t8_p8                  119  /*      0x077 */
+
+#define POSIXD                       30     /* 0x1e Some [[:class:]] under /d;
+                                               the FLAGS field gives which one
+                                            */
+#define POSIXD_tb_pb                   120  /*      0x078 */
+#define POSIXD_tb_p8                   121  /*      0x079 */
+#define POSIXD_t8_pb                   122  /*      0x07a */
+#define POSIXD_t8_p8                   123  /*      0x07b */
+
+#define POSIXL                       31     /* 0x1f Some [[:class:]] under /l;
+                                               the FLAGS field gives which one
+                                            */
+#define POSIXL_tb_pb                   124  /*      0x07c */
+#define POSIXL_tb_p8                   125  /*      0x07d */
+#define POSIXL_t8_pb                   126  /*      0x07e */
+#define POSIXL_t8_p8                   127  /*      0x07f */
+
+#define POSIXU                       32     /* 0x20 Some [[:class:]] under /u;
+                                               the FLAGS field gives which one
+                                            */
+#define POSIXU_tb_pb                   128  /*      0x080 */
+#define POSIXU_tb_p8                   129  /*      0x081 */
+#define POSIXU_t8_pb                   130  /*      0x082 */
+#define POSIXU_t8_p8                   131  /*      0x083 */
+
+#define POSIXA                       33     /* 0x21 Some [[:class:]] under /a;
+                                               the FLAGS field gives which one
+                                            */
+#define POSIXA_tb_pb                   132  /*      0x084 */
+#define POSIXA_tb_p8                   133  /*      0x085 */
+#define POSIXA_t8_pb                   134  /*      0x086 */
+#define POSIXA_t8_p8                   135  /*      0x087 */
+
+#define NPOSIXD                      34     /* 0x22 complement of POSIXD,
+                                               [[:^class:]] */
+#define NPOSIXD_tb_pb                  136  /*      0x088 */
+#define NPOSIXD_tb_p8                  137  /*      0x089 */
+#define NPOSIXD_t8_pb                  138  /*      0x08a */
+#define NPOSIXD_t8_p8                  139  /*      0x08b */
+
+#define NPOSIXL                      35     /* 0x23 complement of POSIXL,
+                                               [[:^class:]] */
+#define NPOSIXL_tb_pb                  140  /*      0x08c */
+#define NPOSIXL_tb_p8                  141  /*      0x08d */
+#define NPOSIXL_t8_pb                  142  /*      0x08e */
+#define NPOSIXL_t8_p8                  143  /*      0x08f */
+
+#define NPOSIXU                      36     /* 0x24 complement of POSIXU,
+                                               [[:^class:]] */
+#define NPOSIXU_tb_pb                  144  /*      0x090 */
+#define NPOSIXU_tb_p8                  145  /*      0x091 */
+#define NPOSIXU_t8_pb                  146  /*      0x092 */
+#define NPOSIXU_t8_p8                  147  /*      0x093 */
+
+#define NPOSIXA                      37     /* 0x25 complement of POSIXA,
+                                               [[:^class:]] */
+#define NPOSIXA_tb_pb                  148  /*      0x094 */
+#define NPOSIXA_tb_p8                  149  /*      0x095 */
+#define NPOSIXA_t8_pb                  150  /*      0x096 */
+#define NPOSIXA_t8_p8                  151  /*      0x097 */
+
+#define CLUMP                        38     /* 0x26 Match any extended
+                                               grapheme cluster sequence */
+#define CLUMP_tb_pb                    152  /*      0x098 */
+#define CLUMP_tb_p8                    153  /*      0x099 */
+#define CLUMP_t8_pb                    154  /*      0x09a */
+#define CLUMP_t8_p8                    155  /*      0x09b */
+
+#define BRANCH                       39     /* 0x27 Match this alternative, or
+                                               the next... */
+#define BRANCH_tb_pb                   156  /*      0x09c */
+#define BRANCH_tb_p8                   157  /*      0x09d */
+#define BRANCH_t8_pb                   158  /*      0x09e */
+#define BRANCH_t8_p8                   159  /*      0x09f */
+
+#define EXACT                        40     /* 0x28 Match this string (flags
+                                               field is the length). */
+#define EXACT_tb_pb                    160  /*      0x0a0 */
+#define EXACT_tb_p8                    161  /*      0x0a1 */
+#define EXACT_t8_pb                    162  /*      0x0a2 */
+#define EXACT_t8_p8                    163  /*      0x0a3 */
+
+#define LEXACT                       41     /* 0x29 Match this long string
+                                               (preceded by length; flags
+                                               unused). */
+#define LEXACT_tb_pb                   164  /*      0x0a4 */
+#define LEXACT_tb_p8                   165  /*      0x0a5 */
+#define LEXACT_t8_pb                   166  /*      0x0a6 */
+#define LEXACT_t8_p8                   167  /*      0x0a7 */
+
+#define EXACTL                       42     /* 0x2a Like EXACT, but /l is in
+                                               effect (used so locale-related
+                                               warnings can be checked for) */
+#define EXACTL_tb_pb                   168  /*      0x0a8 */
+#define EXACTL_tb_p8                   169  /*      0x0a9 */
+#define EXACTL_t8_pb                   170  /*      0x0aa */
+#define EXACTL_t8_p8                   171  /*      0x0ab */
+
+#define EXACTF                       43     /* 0x2b Like EXACT, but match
+                                               using /id rules; (string not
+                                               UTF-8, ASCII folded; non-ASCII
+                                               not) */
+#define EXACTF_tb_pb                   172  /*      0x0ac */
+#define EXACTF_tb_p8                   173  /*      0x0ad */
+#define EXACTF_t8_pb                   174  /*      0x0ae */
+#define EXACTF_t8_p8                   175  /*      0x0af */
+
+#define EXACTFL                      44     /* 0x2c Like EXACT, but match
+                                               using /il rules; (string not
+                                               likely to be folded) */
+#define EXACTFL_tb_pb                  176  /*      0x0b0 */
+#define EXACTFL_tb_p8                  177  /*      0x0b1 */
+#define EXACTFL_t8_pb                  178  /*      0x0b2 */
+#define EXACTFL_t8_p8                  179  /*      0x0b3 */
+
+#define EXACTFU                      45     /* 0x2d Like EXACT, but match
+                                               using /iu rules; (string
+                                               folded) */
+#define EXACTFU_tb_pb                  180  /*      0x0b4 */
+#define EXACTFU_tb_p8                  181  /*      0x0b5 */
+#define EXACTFU_t8_pb                  182  /*      0x0b6 */
+#define EXACTFU_t8_p8                  183  /*      0x0b7 */
+
+#define EXACTFAA                     46     /* 0x2e Like EXACT, but match
+                                               using /iaa rules; (string
+                                               folded except MICRO in non-UTF8
+                                               patterns; doesn't contain SHARP
+                                               S unless UTF-8; folded length
+                                               <= unfolded) */
+#define EXACTFAA_tb_pb                 184  /*      0x0b8 */
+#define EXACTFAA_tb_p8                 185  /*      0x0b9 */
+#define EXACTFAA_t8_pb                 186  /*      0x0ba */
+#define EXACTFAA_t8_p8                 187  /*      0x0bb */
+
+#define EXACTFAA_NO_TRIE             47     /* 0x2f Like EXACTFAA, (string not
+                                               UTF-8, folded except: MICRO,
+                                               SHARP S; folded length <=
+                                               unfolded, not currently
+                                               trie-able) */
+#define EXACTFAA_NO_TRIE_tb_pb         188  /*      0x0bc */
+#define EXACTFAA_NO_TRIE_tb_p8         189  /*      0x0bd */
+#define EXACTFAA_NO_TRIE_t8_pb         190  /*      0x0be */
+#define EXACTFAA_NO_TRIE_t8_p8         191  /*      0x0bf */
+
+#define EXACTFUP                     48     /* 0x30 Like EXACT, but match
+                                               using /iu rules; (string not
+                                               UTF-8, folded except MICRO:
+                                               hence Problematic) */
+#define EXACTFUP_tb_pb                 192  /*      0x0c0 */
+#define EXACTFUP_tb_p8                 193  /*      0x0c1 */
+#define EXACTFUP_t8_pb                 194  /*      0x0c2 */
+#define EXACTFUP_t8_p8                 195  /*      0x0c3 */
+
+#define EXACTFLU8                    49     /* 0x31 Like EXACTFU, but use /il,
+                                               UTF-8, (string is folded, and
+                                               everything in it is above 255
+                                            */
+#define EXACTFLU8_tb_pb                196  /*      0x0c4 */
+#define EXACTFLU8_tb_p8                197  /*      0x0c5 */
+#define EXACTFLU8_t8_pb                198  /*      0x0c6 */
+#define EXACTFLU8_t8_p8                199  /*      0x0c7 */
+
+#define EXACT_REQ8                   50     /* 0x32 Like EXACT, but only UTF-8
+                                               encoded targets can match */
+#define EXACT_REQ8_tb_pb               200  /*      0x0c8 */
+#define EXACT_REQ8_tb_p8               201  /*      0x0c9 */
+#define EXACT_REQ8_t8_pb               202  /*      0x0ca */
+#define EXACT_REQ8_t8_p8               203  /*      0x0cb */
+
+#define LEXACT_REQ8                  51     /* 0x33 Like LEXACT, but only
+                                               UTF-8 encoded targets can match
+                                            */
+#define LEXACT_REQ8_tb_pb              204  /*      0x0cc */
+#define LEXACT_REQ8_tb_p8              205  /*      0x0cd */
+#define LEXACT_REQ8_t8_pb              206  /*      0x0ce */
+#define LEXACT_REQ8_t8_p8              207  /*      0x0cf */
+
+#define EXACTFU_REQ8                 52     /* 0x34 Like EXACTFU, but only
+                                               UTF-8 encoded targets can match
+                                            */
+#define EXACTFU_REQ8_tb_pb             208  /*      0x0d0 */
+#define EXACTFU_REQ8_tb_p8             209  /*      0x0d1 */
+#define EXACTFU_REQ8_t8_pb             210  /*      0x0d2 */
+#define EXACTFU_REQ8_t8_p8             211  /*      0x0d3 */
+
+#define EXACTFU_S_EDGE               53     /* 0x35 /di rules, but nothing in
+                                               it precludes /ui, except begins
+                                               and/or ends with [Ss]; (string
+                                               not UTF-8; compile-time only)
+                                            */
+#define EXACTFU_S_EDGE_tb_pb           212  /*      0x0d4 */
+#define EXACTFU_S_EDGE_tb_p8           213  /*      0x0d5 */
+#define EXACTFU_S_EDGE_t8_pb           214  /*      0x0d6 */
+#define EXACTFU_S_EDGE_t8_p8           215  /*      0x0d7 */
+
+#define LNBREAK                      54     /* 0x36 generic newline pattern */
+#define LNBREAK_tb_pb                  216  /*      0x0d8 */
+#define LNBREAK_tb_p8                  217  /*      0x0d9 */
+#define LNBREAK_t8_pb                  218  /*      0x0da */
+#define LNBREAK_t8_p8                  219  /*      0x0db */
+
+#define TRIE                         55     /* 0x37 Match many EXACT(F[ALU]?)?
+                                               at once. flags==type */
+#define TRIE_tb_pb                     220  /*      0x0dc */
+#define TRIE_tb_p8                     221  /*      0x0dd */
+#define TRIE_t8_pb                     222  /*      0x0de */
+#define TRIE_t8_p8                     223  /*      0x0df */
+
+#define TRIEC                        56     /* 0x38 Same as TRIE, but with
+                                               embedded charclass data */
+#define TRIEC_tb_pb                    224  /*      0x0e0 */
+#define TRIEC_tb_p8                    225  /*      0x0e1 */
+#define TRIEC_t8_pb                    226  /*      0x0e2 */
+#define TRIEC_t8_p8                    227  /*      0x0e3 */
+
+#define AHOCORASICK                  57     /* 0x39 Aho Corasick stclass.
+                                               flags==type */
+#define AHOCORASICK_tb_pb              228  /*      0x0e4 */
+#define AHOCORASICK_tb_p8              229  /*      0x0e5 */
+#define AHOCORASICK_t8_pb              230  /*      0x0e6 */
+#define AHOCORASICK_t8_p8              231  /*      0x0e7 */
+
+#define AHOCORASICKC                 58     /* 0x3a Same as AHOCORASICK, but
+                                               with embedded charclass data */
+#define AHOCORASICKC_tb_pb             232  /*      0x0e8 */
+#define AHOCORASICKC_tb_p8             233  /*      0x0e9 */
+#define AHOCORASICKC_t8_pb             234  /*      0x0ea */
+#define AHOCORASICKC_t8_p8             235  /*      0x0eb */
+
+#define NOTHING                      59     /* 0x3b Match empty string. */
+#define NOTHING_tb_pb                  236  /*      0x0ec */
+#define NOTHING_tb_p8                  237  /*      0x0ed */
+#define NOTHING_t8_pb                  238  /*      0x0ee */
+#define NOTHING_t8_p8                  239  /*      0x0ef */
+
+#define TAIL                         60     /* 0x3c Match empty string. Can
+                                               jump here from outside. */
+#define TAIL_tb_pb                     240  /*      0x0f0 */
+#define TAIL_tb_p8                     241  /*      0x0f1 */
+#define TAIL_t8_pb                     242  /*      0x0f2 */
+#define TAIL_t8_p8                     243  /*      0x0f3 */
+
+#define STAR                         61     /* 0x3d Match this (simple) thing
+                                               0 or more times. */
+#define STAR_tb_pb                     244  /*      0x0f4 */
+#define STAR_tb_p8                     245  /*      0x0f5 */
+#define STAR_t8_pb                     246  /*      0x0f6 */
+#define STAR_t8_p8                     247  /*      0x0f7 */
+
+#define PLUS                         62     /* 0x3e Match this (simple) thing
+                                               1 or more times. */
+#define PLUS_tb_pb                     248  /*      0x0f8 */
+#define PLUS_tb_p8                     249  /*      0x0f9 */
+#define PLUS_t8_pb                     250  /*      0x0fa */
+#define PLUS_t8_p8                     251  /*      0x0fb */
+
+#define CURLY                        63     /* 0x3f Match this simple thing
+                                               {n,m} times. */
+#define CURLY_tb_pb                    252  /*      0x0fc */
+#define CURLY_tb_p8                    253  /*      0x0fd */
+#define CURLY_t8_pb                    254  /*      0x0fe */
+#define CURLY_t8_p8                    255  /*      0x0ff */
+
+#define CURLYN                       64     /* 0x40 Capture next-after-this
+                                               simple thing */
+#define CURLYN_tb_pb                   256  /*      0x100 */
+#define CURLYN_tb_p8                   257  /*      0x101 */
+#define CURLYN_t8_pb                   258  /*      0x102 */
+#define CURLYN_t8_p8                   259  /*      0x103 */
+
+#define CURLYM                       65     /* 0x41 Capture this
+                                               medium-complex thing {n,m}
+                                               times. */
+#define CURLYM_tb_pb                   260  /*      0x104 */
+#define CURLYM_tb_p8                   261  /*      0x105 */
+#define CURLYM_t8_pb                   262  /*      0x106 */
+#define CURLYM_t8_p8                   263  /*      0x107 */
+
+#define CURLYX                       66     /* 0x42 Match this complex thing
+                                               {n,m} times. */
+#define CURLYX_tb_pb                   264  /*      0x108 */
+#define CURLYX_tb_p8                   265  /*      0x109 */
+#define CURLYX_t8_pb                   266  /*      0x10a */
+#define CURLYX_t8_p8                   267  /*      0x10b */
+
+#define WHILEM                       67     /* 0x43 Do curly processing and
+                                               see if rest matches. */
+#define WHILEM_tb_pb                   268  /*      0x10c */
+#define WHILEM_tb_p8                   269  /*      0x10d */
+#define WHILEM_t8_pb                   270  /*      0x10e */
+#define WHILEM_t8_p8                   271  /*      0x10f */
+
+#define OPEN                         68     /* 0x44 Mark this point in input
+                                               as start of #n. */
+#define OPEN_tb_pb                     272  /*      0x110 */
+#define OPEN_tb_p8                     273  /*      0x111 */
+#define OPEN_t8_pb                     274  /*      0x112 */
+#define OPEN_t8_p8                     275  /*      0x113 */
+
+#define CLOSE                        69     /* 0x45 Close corresponding OPEN
+                                               of #n. */
+#define CLOSE_tb_pb                    276  /*      0x114 */
+#define CLOSE_tb_p8                    277  /*      0x115 */
+#define CLOSE_t8_pb                    278  /*      0x116 */
+#define CLOSE_t8_p8                    279  /*      0x117 */
+
+#define SROPEN                       70     /* 0x46 Same as OPEN, but for
+                                               script run */
+#define SROPEN_tb_pb                   280  /*      0x118 */
+#define SROPEN_tb_p8                   281  /*      0x119 */
+#define SROPEN_t8_pb                   282  /*      0x11a */
+#define SROPEN_t8_p8                   283  /*      0x11b */
+
+#define SRCLOSE                      71     /* 0x47 Close preceding SROPEN */
+#define SRCLOSE_tb_pb                  284  /*      0x11c */
+#define SRCLOSE_tb_p8                  285  /*      0x11d */
+#define SRCLOSE_t8_pb                  286  /*      0x11e */
+#define SRCLOSE_t8_p8                  287  /*      0x11f */
+
+#define REF                          72     /* 0x48 Match some already matched
+                                               string */
+#define REF_tb_pb                      288  /*      0x120 */
+#define REF_tb_p8                      289  /*      0x121 */
+#define REF_t8_pb                      290  /*      0x122 */
+#define REF_t8_p8                      291  /*      0x123 */
+
+#define REFF                         73     /* 0x49 Match already matched
+                                               string, using /di rules. */
+#define REFF_tb_pb                     292  /*      0x124 */
+#define REFF_tb_p8                     293  /*      0x125 */
+#define REFF_t8_pb                     294  /*      0x126 */
+#define REFF_t8_p8                     295  /*      0x127 */
+
+#define REFFL                        74     /* 0x4a Match already matched
+                                               string, using /li rules. */
+#define REFFL_tb_pb                    296  /*      0x128 */
+#define REFFL_tb_p8                    297  /*      0x129 */
+#define REFFL_t8_pb                    298  /*      0x12a */
+#define REFFL_t8_p8                    299  /*      0x12b */
+
+#define REFFU                        75     /* 0x4b Match already matched
+                                               string, usng /ui. */
+#define REFFU_tb_pb                    300  /*      0x12c */
+#define REFFU_tb_p8                    301  /*      0x12d */
+#define REFFU_t8_pb                    302  /*      0x12e */
+#define REFFU_t8_p8                    303  /*      0x12f */
+
+#define REFFA                        76     /* 0x4c Match already matched
+                                               string, using /aai rules. */
+#define REFFA_tb_pb                    304  /*      0x130 */
+#define REFFA_tb_p8                    305  /*      0x131 */
+#define REFFA_t8_pb                    306  /*      0x132 */
+#define REFFA_t8_p8                    307  /*      0x133 */
+
+#define REFN                         77     /* 0x4d Match some already matched
+                                               string */
+#define REFN_tb_pb                     308  /*      0x134 */
+#define REFN_tb_p8                     309  /*      0x135 */
+#define REFN_t8_pb                     310  /*      0x136 */
+#define REFN_t8_p8                     311  /*      0x137 */
+
+#define REFFN                        78     /* 0x4e Match already matched
+                                               string, using /di rules. */
+#define REFFN_tb_pb                    312  /*      0x138 */
+#define REFFN_tb_p8                    313  /*      0x139 */
+#define REFFN_t8_pb                    314  /*      0x13a */
+#define REFFN_t8_p8                    315  /*      0x13b */
+
+#define REFFLN                       79     /* 0x4f Match already matched
+                                               string, using /li rules. */
+#define REFFLN_tb_pb                   316  /*      0x13c */
+#define REFFLN_tb_p8                   317  /*      0x13d */
+#define REFFLN_t8_pb                   318  /*      0x13e */
+#define REFFLN_t8_p8                   319  /*      0x13f */
+
+#define REFFUN                       80     /* 0x50 Match already matched
+                                               string, using /ui rules. */
+#define REFFUN_tb_pb                   320  /*      0x140 */
+#define REFFUN_tb_p8                   321  /*      0x141 */
+#define REFFUN_t8_pb                   322  /*      0x142 */
+#define REFFUN_t8_p8                   323  /*      0x143 */
+
+#define REFFAN                       81     /* 0x51 Match already matched
+                                               string, using /aai rules. */
+#define REFFAN_tb_pb                   324  /*      0x144 */
+#define REFFAN_tb_p8                   325  /*      0x145 */
+#define REFFAN_t8_pb                   326  /*      0x146 */
+#define REFFAN_t8_p8                   327  /*      0x147 */
+
+#define LONGJMP                      82     /* 0x52 Jump far away. */
+#define LONGJMP_tb_pb                  328  /*      0x148 */
+#define LONGJMP_tb_p8                  329  /*      0x149 */
+#define LONGJMP_t8_pb                  330  /*      0x14a */
+#define LONGJMP_t8_p8                  331  /*      0x14b */
+
+#define BRANCHJ                      83     /* 0x53 BRANCH with long offset.
+                                            */
+#define BRANCHJ_tb_pb                  332  /*      0x14c */
+#define BRANCHJ_tb_p8                  333  /*      0x14d */
+#define BRANCHJ_t8_pb                  334  /*      0x14e */
+#define BRANCHJ_t8_p8                  335  /*      0x14f */
+
+#define IFMATCH                      84     /* 0x54 Succeeds if the following
+                                               matches; non-zero flags "f",
+                                               next_off "o" means lookbehind
+                                               assertion starting "f..(f-o)"
+                                               characters before current */
+#define IFMATCH_tb_pb                  336  /*      0x150 */
+#define IFMATCH_tb_p8                  337  /*      0x151 */
+#define IFMATCH_t8_pb                  338  /*      0x152 */
+#define IFMATCH_t8_p8                  339  /*      0x153 */
+
+#define UNLESSM                      85     /* 0x55 Fails if the following
+                                               matches; non-zero flags "f",
+                                               next_off "o" means lookbehind
+                                               assertion starting "f..(f-o)"
+                                               characters before current */
+#define UNLESSM_tb_pb                  340  /*      0x154 */
+#define UNLESSM_tb_p8                  341  /*      0x155 */
+#define UNLESSM_t8_pb                  342  /*      0x156 */
+#define UNLESSM_t8_p8                  343  /*      0x157 */
+
+#define SUSPEND                      86     /* 0x56 "Independent" sub-RE. */
+#define SUSPEND_tb_pb                  344  /*      0x158 */
+#define SUSPEND_tb_p8                  345  /*      0x159 */
+#define SUSPEND_t8_pb                  346  /*      0x15a */
+#define SUSPEND_t8_p8                  347  /*      0x15b */
+
+#define IFTHEN                       87     /* 0x57 Switch, should be preceded
+                                               by switcher. */
+#define IFTHEN_tb_pb                   348  /*      0x15c */
+#define IFTHEN_tb_p8                   349  /*      0x15d */
+#define IFTHEN_t8_pb                   350  /*      0x15e */
+#define IFTHEN_t8_p8                   351  /*      0x15f */
+
+#define GROUPP                       88     /* 0x58 Whether the group matched.
+                                            */
+#define GROUPP_tb_pb                   352  /*      0x160 */
+#define GROUPP_tb_p8                   353  /*      0x161 */
+#define GROUPP_t8_pb                   354  /*      0x162 */
+#define GROUPP_t8_p8                   355  /*      0x163 */
+
+#define EVAL                         89     /* 0x59 Execute some Perl code. */
+#define EVAL_tb_pb                     356  /*      0x164 */
+#define EVAL_tb_p8                     357  /*      0x165 */
+#define EVAL_t8_pb                     358  /*      0x166 */
+#define EVAL_t8_p8                     359  /*      0x167 */
+
+#define MINMOD                       90     /* 0x5a Next operator is not
+                                               greedy. */
+#define MINMOD_tb_pb                   360  /*      0x168 */
+#define MINMOD_tb_p8                   361  /*      0x169 */
+#define MINMOD_t8_pb                   362  /*      0x16a */
+#define MINMOD_t8_p8                   363  /*      0x16b */
+
+#define LOGICAL                      91     /* 0x5b Next opcode should set the
+                                               flag only. */
+#define LOGICAL_tb_pb                  364  /*      0x16c */
+#define LOGICAL_tb_p8                  365  /*      0x16d */
+#define LOGICAL_t8_pb                  366  /*      0x16e */
+#define LOGICAL_t8_p8                  367  /*      0x16f */
+
+#define RENUM                        92     /* 0x5c Group with independently
+                                               numbered parens. */
+#define RENUM_tb_pb                    368  /*      0x170 */
+#define RENUM_tb_p8                    369  /*      0x171 */
+#define RENUM_t8_pb                    370  /*      0x172 */
+#define RENUM_t8_p8                    371  /*      0x173 */
+
+#define GOSUB                        93     /* 0x5d recurse to paren arg1 at
+                                               (signed) ofs arg2 */
+#define GOSUB_tb_pb                    372  /*      0x174 */
+#define GOSUB_tb_p8                    373  /*      0x175 */
+#define GOSUB_t8_pb                    374  /*      0x176 */
+#define GOSUB_t8_p8                    375  /*      0x177 */
+
+#define GROUPPN                      94     /* 0x5e Whether the group matched.
+                                            */
+#define GROUPPN_tb_pb                  376  /*      0x178 */
+#define GROUPPN_tb_p8                  377  /*      0x179 */
+#define GROUPPN_t8_pb                  378  /*      0x17a */
+#define GROUPPN_t8_p8                  379  /*      0x17b */
+
+#define INSUBP                       95     /* 0x5f Whether we are in a
+                                               specific recurse. */
+#define INSUBP_tb_pb                   380  /*      0x17c */
+#define INSUBP_tb_p8                   381  /*      0x17d */
+#define INSUBP_t8_pb                   382  /*      0x17e */
+#define INSUBP_t8_p8                   383  /*      0x17f */
+
+#define DEFINEP                      96     /* 0x60 Never execute directly. */
+#define DEFINEP_tb_pb                  384  /*      0x180 */
+#define DEFINEP_tb_p8                  385  /*      0x181 */
+#define DEFINEP_t8_pb                  386  /*      0x182 */
+#define DEFINEP_t8_p8                  387  /*      0x183 */
+
+#define ENDLIKE                      97     /* 0x61 Used only for the type
+                                               field of verbs */
+#define ENDLIKE_tb_pb                  388  /*      0x184 */
+#define ENDLIKE_tb_p8                  389  /*      0x185 */
+#define ENDLIKE_t8_pb                  390  /*      0x186 */
+#define ENDLIKE_t8_p8                  391  /*      0x187 */
+
+#define OPFAIL                       98     /* 0x62 Same as (?!), but with
+                                               verb arg */
+#define OPFAIL_tb_pb                   392  /*      0x188 */
+#define OPFAIL_tb_p8                   393  /*      0x189 */
+#define OPFAIL_t8_pb                   394  /*      0x18a */
+#define OPFAIL_t8_p8                   395  /*      0x18b */
+
+#define ACCEPT                       99     /* 0x63 Accepts the current
+                                               matched string, with verbar */
+#define ACCEPT_tb_pb                   396  /*      0x18c */
+#define ACCEPT_tb_p8                   397  /*      0x18d */
+#define ACCEPT_t8_pb                   398  /*      0x18e */
+#define ACCEPT_t8_p8                   399  /*      0x18f */
+
+#define VERB                        100     /* 0x64 Used only for the type
+                                               field of verbs */
+#define VERB_tb_pb                     400  /*      0x190 */
+#define VERB_tb_p8                     401  /*      0x191 */
+#define VERB_t8_pb                     402  /*      0x192 */
+#define VERB_t8_p8                     403  /*      0x193 */
+
+#define PRUNE                       101     /* 0x65 Pattern fails at this
+                                               startpoint if no-backtracking
+                                               through this */
+#define PRUNE_tb_pb                    404  /*      0x194 */
+#define PRUNE_tb_p8                    405  /*      0x195 */
+#define PRUNE_t8_pb                    406  /*      0x196 */
+#define PRUNE_t8_p8                    407  /*      0x197 */
+
+#define MARKPOINT                   102     /* 0x66 Push the current location
+                                               for rollback by cut. */
+#define MARKPOINT_tb_pb                408  /*      0x198 */
+#define MARKPOINT_tb_p8                409  /*      0x199 */
+#define MARKPOINT_t8_pb                410  /*      0x19a */
+#define MARKPOINT_t8_p8                411  /*      0x19b */
+
+#define SKIP                        103     /* 0x67 On failure skip forward
+                                               (to the mark) before retrying
+                                            */
+#define SKIP_tb_pb                     412  /*      0x19c */
+#define SKIP_tb_p8                     413  /*      0x19d */
+#define SKIP_t8_pb                     414  /*      0x19e */
+#define SKIP_t8_p8                     415  /*      0x19f */
+
+#define COMMIT                      104     /* 0x68 Pattern fails outright if
+                                               backtracking through this */
+#define COMMIT_tb_pb                   416  /*      0x1a0 */
+#define COMMIT_tb_p8                   417  /*      0x1a1 */
+#define COMMIT_t8_pb                   418  /*      0x1a2 */
+#define COMMIT_t8_p8                   419  /*      0x1a3 */
+
+#define CUTGROUP                    105     /* 0x69 On failure go to the next
+                                               alternation in the group */
+#define CUTGROUP_tb_pb                 420  /*      0x1a4 */
+#define CUTGROUP_tb_p8                 421  /*      0x1a5 */
+#define CUTGROUP_t8_pb                 422  /*      0x1a6 */
+#define CUTGROUP_t8_p8                 423  /*      0x1a7 */
+
+#define KEEPS                       106     /* 0x6a $& begins here. */
+#define KEEPS_tb_pb                    424  /*      0x1a8 */
+#define KEEPS_tb_p8                    425  /*      0x1a9 */
+#define KEEPS_t8_pb                    426  /*      0x1aa */
+#define KEEPS_t8_p8                    427  /*      0x1ab */
+
+#define OPTIMIZED                   107     /* 0x6b Placeholder for dump. */
+#define OPTIMIZED_tb_pb                428  /*      0x1ac */
+#define OPTIMIZED_tb_p8                429  /*      0x1ad */
+#define OPTIMIZED_t8_pb                430  /*      0x1ae */
+#define OPTIMIZED_t8_p8                431  /*      0x1af */
+
+#define PSEUDO                      108     /* 0x6c Pseudo opcode for internal
+                                               use. */
+#define PSEUDO_tb_pb                   432  /*      0x1b0 */
+#define PSEUDO_tb_p8                   433  /*      0x1b1 */
+#define PSEUDO_t8_pb                   434  /*      0x1b2 */
+#define PSEUDO_t8_p8                   435  /*      0x1b3 */
+
+#define REGEX_SET                   109     /* 0x6d Regex set, temporary node
+                                               used in pre-optimization
+                                               compilation */
+#define REGEX_SET_tb_pb                436  /*      0x1b4 */
+#define REGEX_SET_tb_p8                437  /*      0x1b5 */
+#define REGEX_SET_t8_pb                438  /*      0x1b6 */
+#define REGEX_SET_t8_p8                439  /*      0x1b7 */
+
 	/* ------------ States ------------- */
-#define	TRIE_next             	(REGNODE_MAX + 1)	/* state for TRIE */
-#define	TRIE_next_fail        	(REGNODE_MAX + 2)	/* state for TRIE */
-#define	EVAL_B                	(REGNODE_MAX + 3)	/* state for EVAL */
-#define	EVAL_B_fail           	(REGNODE_MAX + 4)	/* state for EVAL */
-#define	EVAL_postponed_AB     	(REGNODE_MAX + 5)	/* state for EVAL */
-#define	EVAL_postponed_AB_fail	(REGNODE_MAX + 6)	/* state for EVAL */
-#define	CURLYX_end            	(REGNODE_MAX + 7)	/* state for CURLYX */
-#define	CURLYX_end_fail       	(REGNODE_MAX + 8)	/* state for CURLYX */
-#define	WHILEM_A_pre          	(REGNODE_MAX + 9)	/* state for WHILEM */
-#define	WHILEM_A_pre_fail     	(REGNODE_MAX + 10)	/* state for WHILEM */
-#define	WHILEM_A_min          	(REGNODE_MAX + 11)	/* state for WHILEM */
-#define	WHILEM_A_min_fail     	(REGNODE_MAX + 12)	/* state for WHILEM */
-#define	WHILEM_A_max          	(REGNODE_MAX + 13)	/* state for WHILEM */
-#define	WHILEM_A_max_fail     	(REGNODE_MAX + 14)	/* state for WHILEM */
-#define	WHILEM_B_min          	(REGNODE_MAX + 15)	/* state for WHILEM */
-#define	WHILEM_B_min_fail     	(REGNODE_MAX + 16)	/* state for WHILEM */
-#define	WHILEM_B_max          	(REGNODE_MAX + 17)	/* state for WHILEM */
-#define	WHILEM_B_max_fail     	(REGNODE_MAX + 18)	/* state for WHILEM */
-#define	BRANCH_next           	(REGNODE_MAX + 19)	/* state for BRANCH */
-#define	BRANCH_next_fail      	(REGNODE_MAX + 20)	/* state for BRANCH */
-#define	CURLYM_A              	(REGNODE_MAX + 21)	/* state for CURLYM */
-#define	CURLYM_A_fail         	(REGNODE_MAX + 22)	/* state for CURLYM */
-#define	CURLYM_B              	(REGNODE_MAX + 23)	/* state for CURLYM */
-#define	CURLYM_B_fail         	(REGNODE_MAX + 24)	/* state for CURLYM */
-#define	IFMATCH_A             	(REGNODE_MAX + 25)	/* state for IFMATCH */
-#define	IFMATCH_A_fail        	(REGNODE_MAX + 26)	/* state for IFMATCH */
-#define	CURLY_B_min           	(REGNODE_MAX + 27)	/* state for CURLY */
-#define	CURLY_B_min_fail      	(REGNODE_MAX + 28)	/* state for CURLY */
-#define	CURLY_B_max           	(REGNODE_MAX + 29)	/* state for CURLY */
-#define	CURLY_B_max_fail      	(REGNODE_MAX + 30)	/* state for CURLY */
-#define	COMMIT_next           	(REGNODE_MAX + 31)	/* state for COMMIT */
-#define	COMMIT_next_fail      	(REGNODE_MAX + 32)	/* state for COMMIT */
-#define	MARKPOINT_next        	(REGNODE_MAX + 33)	/* state for MARKPOINT */
-#define	MARKPOINT_next_fail   	(REGNODE_MAX + 34)	/* state for MARKPOINT */
-#define	SKIP_next             	(REGNODE_MAX + 35)	/* state for SKIP */
-#define	SKIP_next_fail        	(REGNODE_MAX + 36)	/* state for SKIP */
-#define	CUTGROUP_next         	(REGNODE_MAX + 37)	/* state for CUTGROUP */
-#define	CUTGROUP_next_fail    	(REGNODE_MAX + 38)	/* state for CUTGROUP */
-#define	KEEPS_next            	(REGNODE_MAX + 39)	/* state for KEEPS */
-#define	KEEPS_next_fail       	(REGNODE_MAX + 40)	/* state for KEEPS */
+#define TRIE_next                   110     /* 0x6e state for TRIE */
+#define TRIE_next_tb_pb                440  /*      0x1b8 */
+#define TRIE_next_tb_p8                441  /*      0x1b9 */
+#define TRIE_next_t8_pb                442  /*      0x1ba */
+#define TRIE_next_t8_p8                443  /*      0x1bb */
 
+#define TRIE_next_fail              111     /* 0x6f state for TRIE */
+#define TRIE_next_fail_tb_pb           444  /*      0x1bc */
+#define TRIE_next_fail_tb_p8           445  /*      0x1bd */
+#define TRIE_next_fail_t8_pb           446  /*      0x1be */
+#define TRIE_next_fail_t8_p8           447  /*      0x1bf */
+
+#define EVAL_B                      112     /* 0x70 state for EVAL */
+#define EVAL_B_tb_pb                   448  /*      0x1c0 */
+#define EVAL_B_tb_p8                   449  /*      0x1c1 */
+#define EVAL_B_t8_pb                   450  /*      0x1c2 */
+#define EVAL_B_t8_p8                   451  /*      0x1c3 */
+
+#define EVAL_B_fail                 113     /* 0x71 state for EVAL */
+#define EVAL_B_fail_tb_pb              452  /*      0x1c4 */
+#define EVAL_B_fail_tb_p8              453  /*      0x1c5 */
+#define EVAL_B_fail_t8_pb              454  /*      0x1c6 */
+#define EVAL_B_fail_t8_p8              455  /*      0x1c7 */
+
+#define EVAL_postponed_AB           114     /* 0x72 state for EVAL */
+#define EVAL_postponed_AB_tb_pb        456  /*      0x1c8 */
+#define EVAL_postponed_AB_tb_p8        457  /*      0x1c9 */
+#define EVAL_postponed_AB_t8_pb        458  /*      0x1ca */
+#define EVAL_postponed_AB_t8_p8        459  /*      0x1cb */
+
+#define EVAL_postponed_AB_fail      115     /* 0x73 state for EVAL */
+#define EVAL_postponed_AB_fail_tb_pb   460  /*      0x1cc */
+#define EVAL_postponed_AB_fail_tb_p8   461  /*      0x1cd */
+#define EVAL_postponed_AB_fail_t8_pb   462  /*      0x1ce */
+#define EVAL_postponed_AB_fail_t8_p8   463  /*      0x1cf */
+
+#define CURLYX_end                  116     /* 0x74 state for CURLYX */
+#define CURLYX_end_tb_pb               464  /*      0x1d0 */
+#define CURLYX_end_tb_p8               465  /*      0x1d1 */
+#define CURLYX_end_t8_pb               466  /*      0x1d2 */
+#define CURLYX_end_t8_p8               467  /*      0x1d3 */
+
+#define CURLYX_end_fail             117     /* 0x75 state for CURLYX */
+#define CURLYX_end_fail_tb_pb          468  /*      0x1d4 */
+#define CURLYX_end_fail_tb_p8          469  /*      0x1d5 */
+#define CURLYX_end_fail_t8_pb          470  /*      0x1d6 */
+#define CURLYX_end_fail_t8_p8          471  /*      0x1d7 */
+
+#define WHILEM_A_pre                118     /* 0x76 state for WHILEM */
+#define WHILEM_A_pre_tb_pb             472  /*      0x1d8 */
+#define WHILEM_A_pre_tb_p8             473  /*      0x1d9 */
+#define WHILEM_A_pre_t8_pb             474  /*      0x1da */
+#define WHILEM_A_pre_t8_p8             475  /*      0x1db */
+
+#define WHILEM_A_pre_fail           119     /* 0x77 state for WHILEM */
+#define WHILEM_A_pre_fail_tb_pb        476  /*      0x1dc */
+#define WHILEM_A_pre_fail_tb_p8        477  /*      0x1dd */
+#define WHILEM_A_pre_fail_t8_pb        478  /*      0x1de */
+#define WHILEM_A_pre_fail_t8_p8        479  /*      0x1df */
+
+#define WHILEM_A_min                120     /* 0x78 state for WHILEM */
+#define WHILEM_A_min_tb_pb             480  /*      0x1e0 */
+#define WHILEM_A_min_tb_p8             481  /*      0x1e1 */
+#define WHILEM_A_min_t8_pb             482  /*      0x1e2 */
+#define WHILEM_A_min_t8_p8             483  /*      0x1e3 */
+
+#define WHILEM_A_min_fail           121     /* 0x79 state for WHILEM */
+#define WHILEM_A_min_fail_tb_pb        484  /*      0x1e4 */
+#define WHILEM_A_min_fail_tb_p8        485  /*      0x1e5 */
+#define WHILEM_A_min_fail_t8_pb        486  /*      0x1e6 */
+#define WHILEM_A_min_fail_t8_p8        487  /*      0x1e7 */
+
+#define WHILEM_A_max                122     /* 0x7a state for WHILEM */
+#define WHILEM_A_max_tb_pb             488  /*      0x1e8 */
+#define WHILEM_A_max_tb_p8             489  /*      0x1e9 */
+#define WHILEM_A_max_t8_pb             490  /*      0x1ea */
+#define WHILEM_A_max_t8_p8             491  /*      0x1eb */
+
+#define WHILEM_A_max_fail           123     /* 0x7b state for WHILEM */
+#define WHILEM_A_max_fail_tb_pb        492  /*      0x1ec */
+#define WHILEM_A_max_fail_tb_p8        493  /*      0x1ed */
+#define WHILEM_A_max_fail_t8_pb        494  /*      0x1ee */
+#define WHILEM_A_max_fail_t8_p8        495  /*      0x1ef */
+
+#define WHILEM_B_min                124     /* 0x7c state for WHILEM */
+#define WHILEM_B_min_tb_pb             496  /*      0x1f0 */
+#define WHILEM_B_min_tb_p8             497  /*      0x1f1 */
+#define WHILEM_B_min_t8_pb             498  /*      0x1f2 */
+#define WHILEM_B_min_t8_p8             499  /*      0x1f3 */
+
+#define WHILEM_B_min_fail           125     /* 0x7d state for WHILEM */
+#define WHILEM_B_min_fail_tb_pb        500  /*      0x1f4 */
+#define WHILEM_B_min_fail_tb_p8        501  /*      0x1f5 */
+#define WHILEM_B_min_fail_t8_pb        502  /*      0x1f6 */
+#define WHILEM_B_min_fail_t8_p8        503  /*      0x1f7 */
+
+#define WHILEM_B_max                126     /* 0x7e state for WHILEM */
+#define WHILEM_B_max_tb_pb             504  /*      0x1f8 */
+#define WHILEM_B_max_tb_p8             505  /*      0x1f9 */
+#define WHILEM_B_max_t8_pb             506  /*      0x1fa */
+#define WHILEM_B_max_t8_p8             507  /*      0x1fb */
+
+#define WHILEM_B_max_fail           127     /* 0x7f state for WHILEM */
+#define WHILEM_B_max_fail_tb_pb        508  /*      0x1fc */
+#define WHILEM_B_max_fail_tb_p8        509  /*      0x1fd */
+#define WHILEM_B_max_fail_t8_pb        510  /*      0x1fe */
+#define WHILEM_B_max_fail_t8_p8        511  /*      0x1ff */
+
+#define BRANCH_next                 128     /* 0x80 state for BRANCH */
+#define BRANCH_next_tb_pb              512  /*      0x200 */
+#define BRANCH_next_tb_p8              513  /*      0x201 */
+#define BRANCH_next_t8_pb              514  /*      0x202 */
+#define BRANCH_next_t8_p8              515  /*      0x203 */
+
+#define BRANCH_next_fail            129     /* 0x81 state for BRANCH */
+#define BRANCH_next_fail_tb_pb         516  /*      0x204 */
+#define BRANCH_next_fail_tb_p8         517  /*      0x205 */
+#define BRANCH_next_fail_t8_pb         518  /*      0x206 */
+#define BRANCH_next_fail_t8_p8         519  /*      0x207 */
+
+#define CURLYM_A                    130     /* 0x82 state for CURLYM */
+#define CURLYM_A_tb_pb                 520  /*      0x208 */
+#define CURLYM_A_tb_p8                 521  /*      0x209 */
+#define CURLYM_A_t8_pb                 522  /*      0x20a */
+#define CURLYM_A_t8_p8                 523  /*      0x20b */
+
+#define CURLYM_A_fail               131     /* 0x83 state for CURLYM */
+#define CURLYM_A_fail_tb_pb            524  /*      0x20c */
+#define CURLYM_A_fail_tb_p8            525  /*      0x20d */
+#define CURLYM_A_fail_t8_pb            526  /*      0x20e */
+#define CURLYM_A_fail_t8_p8            527  /*      0x20f */
+
+#define CURLYM_B                    132     /* 0x84 state for CURLYM */
+#define CURLYM_B_tb_pb                 528  /*      0x210 */
+#define CURLYM_B_tb_p8                 529  /*      0x211 */
+#define CURLYM_B_t8_pb                 530  /*      0x212 */
+#define CURLYM_B_t8_p8                 531  /*      0x213 */
+
+#define CURLYM_B_fail               133     /* 0x85 state for CURLYM */
+#define CURLYM_B_fail_tb_pb            532  /*      0x214 */
+#define CURLYM_B_fail_tb_p8            533  /*      0x215 */
+#define CURLYM_B_fail_t8_pb            534  /*      0x216 */
+#define CURLYM_B_fail_t8_p8            535  /*      0x217 */
+
+#define IFMATCH_A                   134     /* 0x86 state for IFMATCH */
+#define IFMATCH_A_tb_pb                536  /*      0x218 */
+#define IFMATCH_A_tb_p8                537  /*      0x219 */
+#define IFMATCH_A_t8_pb                538  /*      0x21a */
+#define IFMATCH_A_t8_p8                539  /*      0x21b */
+
+#define IFMATCH_A_fail              135     /* 0x87 state for IFMATCH */
+#define IFMATCH_A_fail_tb_pb           540  /*      0x21c */
+#define IFMATCH_A_fail_tb_p8           541  /*      0x21d */
+#define IFMATCH_A_fail_t8_pb           542  /*      0x21e */
+#define IFMATCH_A_fail_t8_p8           543  /*      0x21f */
+
+#define CURLY_B_min                 136     /* 0x88 state for CURLY */
+#define CURLY_B_min_tb_pb              544  /*      0x220 */
+#define CURLY_B_min_tb_p8              545  /*      0x221 */
+#define CURLY_B_min_t8_pb              546  /*      0x222 */
+#define CURLY_B_min_t8_p8              547  /*      0x223 */
+
+#define CURLY_B_min_fail            137     /* 0x89 state for CURLY */
+#define CURLY_B_min_fail_tb_pb         548  /*      0x224 */
+#define CURLY_B_min_fail_tb_p8         549  /*      0x225 */
+#define CURLY_B_min_fail_t8_pb         550  /*      0x226 */
+#define CURLY_B_min_fail_t8_p8         551  /*      0x227 */
+
+#define CURLY_B_max                 138     /* 0x8a state for CURLY */
+#define CURLY_B_max_tb_pb              552  /*      0x228 */
+#define CURLY_B_max_tb_p8              553  /*      0x229 */
+#define CURLY_B_max_t8_pb              554  /*      0x22a */
+#define CURLY_B_max_t8_p8              555  /*      0x22b */
+
+#define CURLY_B_max_fail            139     /* 0x8b state for CURLY */
+#define CURLY_B_max_fail_tb_pb         556  /*      0x22c */
+#define CURLY_B_max_fail_tb_p8         557  /*      0x22d */
+#define CURLY_B_max_fail_t8_pb         558  /*      0x22e */
+#define CURLY_B_max_fail_t8_p8         559  /*      0x22f */
+
+#define COMMIT_next                 140     /* 0x8c state for COMMIT */
+#define COMMIT_next_tb_pb              560  /*      0x230 */
+#define COMMIT_next_tb_p8              561  /*      0x231 */
+#define COMMIT_next_t8_pb              562  /*      0x232 */
+#define COMMIT_next_t8_p8              563  /*      0x233 */
+
+#define COMMIT_next_fail            141     /* 0x8d state for COMMIT */
+#define COMMIT_next_fail_tb_pb         564  /*      0x234 */
+#define COMMIT_next_fail_tb_p8         565  /*      0x235 */
+#define COMMIT_next_fail_t8_pb         566  /*      0x236 */
+#define COMMIT_next_fail_t8_p8         567  /*      0x237 */
+
+#define MARKPOINT_next              142     /* 0x8e state for MARKPOINT */
+#define MARKPOINT_next_tb_pb           568  /*      0x238 */
+#define MARKPOINT_next_tb_p8           569  /*      0x239 */
+#define MARKPOINT_next_t8_pb           570  /*      0x23a */
+#define MARKPOINT_next_t8_p8           571  /*      0x23b */
+
+#define MARKPOINT_next_fail         143     /* 0x8f state for MARKPOINT */
+#define MARKPOINT_next_fail_tb_pb      572  /*      0x23c */
+#define MARKPOINT_next_fail_tb_p8      573  /*      0x23d */
+#define MARKPOINT_next_fail_t8_pb      574  /*      0x23e */
+#define MARKPOINT_next_fail_t8_p8      575  /*      0x23f */
+
+#define SKIP_next                   144     /* 0x90 state for SKIP */
+#define SKIP_next_tb_pb                576  /*      0x240 */
+#define SKIP_next_tb_p8                577  /*      0x241 */
+#define SKIP_next_t8_pb                578  /*      0x242 */
+#define SKIP_next_t8_p8                579  /*      0x243 */
+
+#define SKIP_next_fail              145     /* 0x91 state for SKIP */
+#define SKIP_next_fail_tb_pb           580  /*      0x244 */
+#define SKIP_next_fail_tb_p8           581  /*      0x245 */
+#define SKIP_next_fail_t8_pb           582  /*      0x246 */
+#define SKIP_next_fail_t8_p8           583  /*      0x247 */
+
+#define CUTGROUP_next               146     /* 0x92 state for CUTGROUP */
+#define CUTGROUP_next_tb_pb            584  /*      0x248 */
+#define CUTGROUP_next_tb_p8            585  /*      0x249 */
+#define CUTGROUP_next_t8_pb            586  /*      0x24a */
+#define CUTGROUP_next_t8_p8            587  /*      0x24b */
+
+#define CUTGROUP_next_fail          147     /* 0x93 state for CUTGROUP */
+#define CUTGROUP_next_fail_tb_pb       588  /*      0x24c */
+#define CUTGROUP_next_fail_tb_p8       589  /*      0x24d */
+#define CUTGROUP_next_fail_t8_pb       590  /*      0x24e */
+#define CUTGROUP_next_fail_t8_p8       591  /*      0x24f */
+
+#define KEEPS_next                  148     /* 0x94 state for KEEPS */
+#define KEEPS_next_tb_pb               592  /*      0x250 */
+#define KEEPS_next_tb_p8               593  /*      0x251 */
+#define KEEPS_next_t8_pb               594  /*      0x252 */
+#define KEEPS_next_t8_p8               595  /*      0x253 */
+
+#define KEEPS_next_fail             149     /* 0x95 state for KEEPS */
+#define KEEPS_next_fail_tb_pb          596  /*      0x254 */
+#define KEEPS_next_fail_tb_p8          597  /*      0x255 */
+#define KEEPS_next_fail_t8_pb          598  /*      0x256 */
+#define KEEPS_next_fail_t8_p8          599  /*      0x257 */
+
+
 /* PL_regkind[] What type of regop or state is this. */
 
 #ifndef DOINIT
@@ -216,13 +1146,18 @@
 	EXACT,    	/* EXACTFL                */
 	EXACT,    	/* EXACTFU                */
 	EXACT,    	/* EXACTFAA               */
+	EXACT,    	/* EXACTFAA_NO_TRIE       */
 	EXACT,    	/* EXACTFUP               */
 	EXACT,    	/* EXACTFLU8              */
-	EXACT,    	/* EXACTFAA_NO_TRIE       */
 	EXACT,    	/* EXACT_REQ8             */
 	EXACT,    	/* LEXACT_REQ8            */
 	EXACT,    	/* EXACTFU_REQ8           */
 	EXACT,    	/* EXACTFU_S_EDGE         */
+	LNBREAK,  	/* LNBREAK                */
+	TRIE,     	/* TRIE                   */
+	TRIE,     	/* TRIEC                  */
+	TRIE,     	/* AHOCORASICK            */
+	TRIE,     	/* AHOCORASICKC           */
 	NOTHING,  	/* NOTHING                */
 	NOTHING,  	/* TAIL                   */
 	STAR,     	/* STAR                   */
@@ -257,10 +1192,6 @@
 	MINMOD,   	/* MINMOD                 */
 	LOGICAL,  	/* LOGICAL                */
 	BRANCHJ,  	/* RENUM                  */
-	TRIE,     	/* TRIE                   */
-	TRIE,     	/* TRIEC                  */
-	TRIE,     	/* AHOCORASICK            */
-	TRIE,     	/* AHOCORASICKC           */
 	GOSUB,    	/* GOSUB                  */
 	GROUPPN,  	/* GROUPPN                */
 	INSUBP,   	/* INSUBP                 */
@@ -275,7 +1206,6 @@
 	VERB,     	/* COMMIT                 */
 	VERB,     	/* CUTGROUP               */
 	KEEPS,    	/* KEEPS                  */
-	LNBREAK,  	/* LNBREAK                */
 	NOTHING,  	/* OPTIMIZED              */
 	PSEUDO,   	/* PSEUDO                 */
 	REGEX_SET,	/* REGEX_SET              */
@@ -375,13 +1305,18 @@
 	0,                                   	/* EXACTFL      */
 	0,                                   	/* EXACTFU      */
 	0,                                   	/* EXACTFAA     */
+	0,                                   	/* EXACTFAA_NO_TRIE */
 	0,                                   	/* EXACTFUP     */
 	0,                                   	/* EXACTFLU8    */
-	0,                                   	/* EXACTFAA_NO_TRIE */
 	0,                                   	/* EXACT_REQ8   */
 	EXTRA_SIZE(struct regnode_1),        	/* LEXACT_REQ8  */
 	0,                                   	/* EXACTFU_REQ8 */
 	0,                                   	/* EXACTFU_S_EDGE */
+	0,                                   	/* LNBREAK      */
+	EXTRA_SIZE(struct regnode_1),        	/* TRIE         */
+	EXTRA_SIZE(struct regnode_charclass),	/* TRIEC        */
+	EXTRA_SIZE(struct regnode_1),        	/* AHOCORASICK  */
+	EXTRA_SIZE(struct regnode_charclass),	/* AHOCORASICKC */
 	0,                                   	/* NOTHING      */
 	0,                                   	/* TAIL         */
 	0,                                   	/* STAR         */
@@ -416,10 +1351,6 @@
 	0,                                   	/* MINMOD       */
 	0,                                   	/* LOGICAL      */
 	EXTRA_SIZE(struct regnode_1),        	/* RENUM        */
-	EXTRA_SIZE(struct regnode_1),        	/* TRIE         */
-	EXTRA_SIZE(struct regnode_charclass),	/* TRIEC        */
-	EXTRA_SIZE(struct regnode_1),        	/* AHOCORASICK  */
-	EXTRA_SIZE(struct regnode_charclass),	/* AHOCORASICKC */
 	EXTRA_SIZE(struct regnode_2L),       	/* GOSUB        */
 	EXTRA_SIZE(struct regnode_1),        	/* GROUPPN      */
 	EXTRA_SIZE(struct regnode_1),        	/* INSUBP       */
@@ -434,7 +1365,6 @@
 	EXTRA_SIZE(struct regnode_1),        	/* COMMIT       */
 	EXTRA_SIZE(struct regnode_1),        	/* CUTGROUP     */
 	0,                                   	/* KEEPS        */
-	0,                                   	/* LNBREAK      */
 	0,                                   	/* OPTIMIZED    */
 	0,                                   	/* PSEUDO       */
 	EXTRA_SIZE(struct regnode_p),        	/* REGEX_SET    */
@@ -490,13 +1420,18 @@
 	0,	/* EXACTFL      */
 	0,	/* EXACTFU      */
 	0,	/* EXACTFAA     */
+	0,	/* EXACTFAA_NO_TRIE */
 	0,	/* EXACTFUP     */
 	0,	/* EXACTFLU8    */
-	0,	/* EXACTFAA_NO_TRIE */
 	0,	/* EXACT_REQ8   */
 	0,	/* LEXACT_REQ8  */
 	0,	/* EXACTFU_REQ8 */
 	0,	/* EXACTFU_S_EDGE */
+	0,	/* LNBREAK      */
+	0,	/* TRIE         */
+	0,	/* TRIEC        */
+	0,	/* AHOCORASICK  */
+	0,	/* AHOCORASICKC */
 	0,	/* NOTHING      */
 	0,	/* TAIL         */
 	0,	/* STAR         */
@@ -531,10 +1466,6 @@
 	0,	/* MINMOD       */
 	0,	/* LOGICAL      */
 	1,	/* RENUM        */
-	0,	/* TRIE         */
-	0,	/* TRIEC        */
-	0,	/* AHOCORASICK  */
-	0,	/* AHOCORASICKC */
 	0,	/* GOSUB        */
 	0,	/* GROUPPN      */
 	0,	/* INSUBP       */
@@ -549,7 +1480,6 @@
 	0,	/* COMMIT       */
 	0,	/* CUTGROUP     */
 	0,	/* KEEPS        */
-	0,	/* LNBREAK      */
 	0,	/* OPTIMIZED    */
 	0,	/* PSEUDO       */
 	0,	/* REGEX_SET    */
@@ -611,66 +1541,66 @@
 	"EXACTFL",               	/* 0x2c */
 	"EXACTFU",               	/* 0x2d */
 	"EXACTFAA",              	/* 0x2e */
-	"EXACTFUP",              	/* 0x2f */
-	"EXACTFLU8",             	/* 0x30 */
-	"EXACTFAA_NO_TRIE",      	/* 0x31 */
+	"EXACTFAA_NO_TRIE",      	/* 0x2f */
+	"EXACTFUP",              	/* 0x30 */
+	"EXACTFLU8",             	/* 0x31 */
 	"EXACT_REQ8",            	/* 0x32 */
 	"LEXACT_REQ8",           	/* 0x33 */
 	"EXACTFU_REQ8",          	/* 0x34 */
 	"EXACTFU_S_EDGE",        	/* 0x35 */
-	"NOTHING",               	/* 0x36 */
-	"TAIL",                  	/* 0x37 */
-	"STAR",                  	/* 0x38 */
-	"PLUS",                  	/* 0x39 */
-	"CURLY",                 	/* 0x3a */
-	"CURLYN",                	/* 0x3b */
-	"CURLYM",                	/* 0x3c */
-	"CURLYX",                	/* 0x3d */
-	"WHILEM",                	/* 0x3e */
-	"OPEN",                  	/* 0x3f */
-	"CLOSE",                 	/* 0x40 */
-	"SROPEN",                	/* 0x41 */
-	"SRCLOSE",               	/* 0x42 */
-	"REF",                   	/* 0x43 */
-	"REFF",                  	/* 0x44 */
-	"REFFL",                 	/* 0x45 */
-	"REFFU",                 	/* 0x46 */
-	"REFFA",                 	/* 0x47 */
-	"REFN",                  	/* 0x48 */
-	"REFFN",                 	/* 0x49 */
-	"REFFLN",                	/* 0x4a */
-	"REFFUN",                	/* 0x4b */
-	"REFFAN",                	/* 0x4c */
-	"LONGJMP",               	/* 0x4d */
-	"BRANCHJ",               	/* 0x4e */
-	"IFMATCH",               	/* 0x4f */
-	"UNLESSM",               	/* 0x50 */
-	"SUSPEND",               	/* 0x51 */
-	"IFTHEN",                	/* 0x52 */
-	"GROUPP",                	/* 0x53 */
-	"EVAL",                  	/* 0x54 */
-	"MINMOD",                	/* 0x55 */
-	"LOGICAL",               	/* 0x56 */
-	"RENUM",                 	/* 0x57 */
-	"TRIE",                  	/* 0x58 */
-	"TRIEC",                 	/* 0x59 */
-	"AHOCORASICK",           	/* 0x5a */
-	"AHOCORASICKC",          	/* 0x5b */
-	"GOSUB",                 	/* 0x5c */
-	"GROUPPN",               	/* 0x5d */
-	"INSUBP",                	/* 0x5e */
-	"DEFINEP",               	/* 0x5f */
-	"ENDLIKE",               	/* 0x60 */
-	"OPFAIL",                	/* 0x61 */
-	"ACCEPT",                	/* 0x62 */
-	"VERB",                  	/* 0x63 */
-	"PRUNE",                 	/* 0x64 */
-	"MARKPOINT",             	/* 0x65 */
-	"SKIP",                  	/* 0x66 */
-	"COMMIT",                	/* 0x67 */
-	"CUTGROUP",              	/* 0x68 */
-	"KEEPS",                 	/* 0x69 */
-	"LNBREAK",               	/* 0x6a */
+	"LNBREAK",               	/* 0x36 */
+	"TRIE",                  	/* 0x37 */
+	"TRIEC",                 	/* 0x38 */
+	"AHOCORASICK",           	/* 0x39 */
+	"AHOCORASICKC",          	/* 0x3a */
+	"NOTHING",               	/* 0x3b */
+	"TAIL",                  	/* 0x3c */
+	"STAR",                  	/* 0x3d */
+	"PLUS",                  	/* 0x3e */
+	"CURLY",                 	/* 0x3f */
+	"CURLYN",                	/* 0x40 */
+	"CURLYM",                	/* 0x41 */
+	"CURLYX",                	/* 0x42 */
+	"WHILEM",                	/* 0x43 */
+	"OPEN",                  	/* 0x44 */
+	"CLOSE",                 	/* 0x45 */
+	"SROPEN",                	/* 0x46 */
+	"SRCLOSE",               	/* 0x47 */
+	"REF",                   	/* 0x48 */
+	"REFF",                  	/* 0x49 */
+	"REFFL",                 	/* 0x4a */
+	"REFFU",                 	/* 0x4b */
+	"REFFA",                 	/* 0x4c */
+	"REFN",                  	/* 0x4d */
+	"REFFN",                 	/* 0x4e */
+	"REFFLN",                	/* 0x4f */
+	"REFFUN",                	/* 0x50 */
+	"REFFAN",                	/* 0x51 */
+	"LONGJMP",               	/* 0x52 */
+	"BRANCHJ",               	/* 0x53 */
+	"IFMATCH",               	/* 0x54 */
+	"UNLESSM",               	/* 0x55 */
+	"SUSPEND",               	/* 0x56 */
+	"IFTHEN",                	/* 0x57 */
+	"GROUPP",                	/* 0x58 */
+	"EVAL",                  	/* 0x59 */
+	"MINMOD",                	/* 0x5a */
+	"LOGICAL",               	/* 0x5b */
+	"RENUM",                 	/* 0x5c */
+	"GOSUB",                 	/* 0x5d */
+	"GROUPPN",               	/* 0x5e */
+	"INSUBP",                	/* 0x5f */
+	"DEFINEP",               	/* 0x60 */
+	"ENDLIKE",               	/* 0x61 */
+	"OPFAIL",                	/* 0x62 */
+	"ACCEPT",                	/* 0x63 */
+	"VERB",                  	/* 0x64 */
+	"PRUNE",                 	/* 0x65 */
+	"MARKPOINT",             	/* 0x66 */
+	"SKIP",                  	/* 0x67 */
+	"COMMIT",                	/* 0x68 */
+	"CUTGROUP",              	/* 0x69 */
+	"KEEPS",                 	/* 0x6a */
 	"OPTIMIZED",             	/* 0x6b */
 	"PSEUDO",                	/* 0x6c */
 	"REGEX_SET",             	/* 0x6d */
@@ -808,7 +1738,7 @@
 EXTCONST U8 PL_varies_bitmask[];
 #else
 EXTCONST U8 PL_varies_bitmask[] = {
-    0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x7F, 0xF8, 0x5F, 0x06, 0x00, 0x00, 0x00
+    0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xE0, 0x0F, 0xFF, 0xCB, 0x00, 0x00, 0x00
 };
 #endif /* DOINIT */
 
@@ -835,4 +1765,20 @@
 };
 #endif /* DOINIT */
 
+/* Is 'op', known to be of type EXACT, folding? */
+#define isEXACTFish(op) (__ASSERT_(PL_regkind[op] == EXACT) (PL_EXACTFish_bitmask & (1U << (op - EXACT))))
+
+/* Do only UTF-8 target strings match 'op', known to be of type EXACT? */
+#define isEXACT_REQ8(op) (__ASSERT_(PL_regkind[op] == EXACT) (PL_EXACT_REQ8_bitmask & (1U << (op - EXACT))))
+
+#ifndef DOINIT
+EXTCONST U32 PL_EXACTFish_bitmask;
+EXTCONST U32 PL_EXACT_REQ8_bitmask;
+#else
+EXTCONST U32 PL_EXACTFish_bitmask = 0x33F8;
+EXTCONST U32 PL_EXACT_REQ8_bitmask = 0x1E00;
+#endif /* DOINIT */
+
+#endif /* defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD) */
+
 /* ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/sbox32_hash.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -27,7 +27,7 @@
 #define SBOX32_WARN2(pat,v0,v1)
 #endif
 
-#ifndef PERL_SEEN_HV_FUNC_H
+#ifndef PERL_SEEN_HV_FUNC_H_
 #if !defined(U32) 
 #include <stdint.h>
 #define U32 uint32_t

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/scope.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/scope.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/scope.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -38,43 +38,45 @@
 #define SAVEt_STACK_POS		20
 #define SAVEt_READONLY_OFF	21
 #define SAVEt_FREEPADNAME	22
+#define SAVEt_STRLEN_SMALL      23
 
 /* two args */
 
-#define SAVEt_AV		23
-#define SAVEt_DESTRUCTOR	24
-#define SAVEt_DESTRUCTOR_X	25
-#define SAVEt_GENERIC_PVREF	26
-#define SAVEt_GENERIC_SVREF	27
-#define SAVEt_GP		28
-#define SAVEt_GVSV		29
-#define SAVEt_HINTS		30
-#define SAVEt_HPTR		31
-#define SAVEt_HV		32
-#define SAVEt_I32		33
-#define SAVEt_INT		34
-#define SAVEt_ITEM		35
-#define SAVEt_IV		36
-#define SAVEt_LONG		37
-#define SAVEt_PPTR		38
-#define SAVEt_SAVESWITCHSTACK	39
-#define SAVEt_SHARED_PVREF	40
-#define SAVEt_SPTR		41
-#define SAVEt_STRLEN		42
-#define SAVEt_SV		43
-#define SAVEt_SVREF		44
-#define SAVEt_VPTR		45
-#define SAVEt_ADELETE		46
-#define SAVEt_APTR		47
+#define SAVEt_AV		24
+#define SAVEt_DESTRUCTOR	25
+#define SAVEt_DESTRUCTOR_X	26
+#define SAVEt_GENERIC_PVREF	27
+#define SAVEt_GENERIC_SVREF	28
+#define SAVEt_GP		29
+#define SAVEt_GVSV		30
+#define SAVEt_HINTS		31
+#define SAVEt_HPTR		32
+#define SAVEt_HV		33
+#define SAVEt_I32		34
+#define SAVEt_INT		35
+#define SAVEt_ITEM		36
+#define SAVEt_IV		37
+#define SAVEt_LONG		38
+#define SAVEt_PPTR		39
+#define SAVEt_SAVESWITCHSTACK	40
+#define SAVEt_SHARED_PVREF	41
+#define SAVEt_SPTR		42
+#define SAVEt_STRLEN		43
+#define SAVEt_SV		44
+#define SAVEt_SVREF		45
+#define SAVEt_VPTR		46
+#define SAVEt_ADELETE		47
+#define SAVEt_APTR		48
 
 /* three args */
 
-#define SAVEt_HELEM		48
-#define SAVEt_PADSV_AND_MORTALIZE 49
-#define SAVEt_SET_SVFLAGS	50
-#define SAVEt_GVSLOT		51
-#define SAVEt_AELEM		52
-#define SAVEt_DELETE		53
+#define SAVEt_HELEM		49
+#define SAVEt_PADSV_AND_MORTALIZE 50
+#define SAVEt_SET_SVFLAGS	51
+#define SAVEt_GVSLOT		52
+#define SAVEt_AELEM		53
+#define SAVEt_DELETE		54
+#define SAVEt_HINTS_HH		55
 
 
 #define SAVEf_SETMAGIC		1
@@ -151,7 +153,7 @@
 
 
 /*
-=head1 Callback Functions
+=for apidoc_section $callback
 
 =for apidoc Amns||SAVETMPS
 Opening bracket for temporaries on a callback.  See C<L</FREETMPS>> and
@@ -187,30 +189,30 @@
 #ifdef DEBUGGING
 #define ENTER							\
     STMT_START {						\
-	push_scope();						\
-	DEBUG_SCOPE("ENTER")					\
+        push_scope();						\
+        DEBUG_SCOPE("ENTER")					\
     } STMT_END
 #define LEAVE							\
     STMT_START {						\
-	DEBUG_SCOPE("LEAVE")					\
-	pop_scope();						\
+        DEBUG_SCOPE("LEAVE")					\
+        pop_scope();						\
     } STMT_END
 #define ENTER_with_name(name)						\
     STMT_START {							\
-	push_scope();							\
-	if (PL_scopestack_name)						\
-	    PL_scopestack_name[PL_scopestack_ix-1] = name;		\
-	DEBUG_SCOPE("ENTER \"" name "\"")				\
+        push_scope();							\
+        if (PL_scopestack_name)						\
+            PL_scopestack_name[PL_scopestack_ix-1] = name;		\
+        DEBUG_SCOPE("ENTER \"" name "\"")				\
     } STMT_END
 #define LEAVE_with_name(name)						\
     STMT_START {							\
-	DEBUG_SCOPE("LEAVE \"" name "\"")				\
-	if (PL_scopestack_name)	{					\
-	    assert(((char*)PL_scopestack_name[PL_scopestack_ix-1]	\
-			== (char*)name)					\
-		    || strEQ(PL_scopestack_name[PL_scopestack_ix-1], name));        \
-	}								\
-	pop_scope();							\
+        DEBUG_SCOPE("LEAVE \"" name "\"")				\
+        if (PL_scopestack_name)	{					\
+            assert(((char*)PL_scopestack_name[PL_scopestack_ix-1]	\
+                        == (char*)name)					\
+                    || strEQ(PL_scopestack_name[PL_scopestack_ix-1], name));        \
+        }								\
+        pop_scope();							\
     } STMT_END
 #else
 #define ENTER push_scope()
@@ -219,7 +221,7 @@
 #define LEAVE_with_name(name) LEAVE
 #endif
 #define LEAVE_SCOPE(old) STMT_START { \
-	if (PL_savestack_ix > old) leave_scope(old); \
+        if (PL_savestack_ix > old) leave_scope(old); \
     } STMT_END
 
 #define SAVEI8(i)	save_I8((I8*)&(i))
@@ -245,16 +247,16 @@
 #define SAVESETSVFLAGS(sv,mask,val)	save_set_svflags(sv,mask,val)
 #define SAVEFREECOPHH(h)	save_pushptr((void *)(h), SAVEt_FREECOPHH)
 #define SAVEDELETE(h,k,l) \
-	  save_delete(MUTABLE_HV(h), (char*)(k), (I32)(l))
+          save_delete(MUTABLE_HV(h), (char*)(k), (I32)(l))
 #define SAVEHDELETE(h,s) \
-	  save_hdelete(MUTABLE_HV(h), (s))
+          save_hdelete(MUTABLE_HV(h), (s))
 #define SAVEADELETE(a,k) \
-	  save_adelete(MUTABLE_AV(a), (SSize_t)(k))
+          save_adelete(MUTABLE_AV(a), (SSize_t)(k))
 #define SAVEDESTRUCTOR(f,p) \
-	  save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), (void*)(p))
+          save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), (void*)(p))
 
 #define SAVEDESTRUCTOR_X(f,p) \
-	  save_destructor_x((DESTRUCTORFUNC_t)(f), (void*)(p))
+          save_destructor_x((DESTRUCTORFUNC_t)(f), (void*)(p))
 
 #define SAVESTACK_POS() \
     STMT_START {				   \
@@ -272,9 +274,9 @@
 
 #define SAVESWITCHSTACK(f,t) \
     STMT_START {					\
-	save_pushptrptr(MUTABLE_SV(f), MUTABLE_SV(t), SAVEt_SAVESWITCHSTACK); \
-	SWITCHSTACK((f),(t));				\
-	PL_curstackinfo->si_stack = (t);		\
+        save_pushptrptr(MUTABLE_SV(f), MUTABLE_SV(t), SAVEt_SAVESWITCHSTACK); \
+        SWITCHSTACK((f),(t));				\
+        PL_curstackinfo->si_stack = (t);		\
     } STMT_END
 
 /* Need to do the cop warnings like this, rather than a "SAVEFREESHAREDPV",

Deleted: trunk/Master/tlpkg/tlperl/lib/CORE/stadtx_hash.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/stadtx_hash.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/stadtx_hash.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -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

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/sv.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/sv.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/sv.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -13,9 +13,9 @@
 #endif
 
 /*
-=head1 SV Flags
+=for apidoc_section $SV_flags
 
-=for apidoc AmnU||svtype
+=for apidoc Ay||svtype
 An enum of flags for Perl types.  These are found in the file F<sv.h>
 in the C<svtype> enum.  Test these flags with the C<SvTYPE> macro.
 
@@ -265,11 +265,16 @@
     _SV_HEAD_UNION;
 };
 
+struct invlist {
+    _SV_HEAD(XINVLIST*);       /* pointer to xpvinvlist body */
+    _SV_HEAD_UNION;
+};
+
 #undef _SV_HEAD
 #undef _SV_HEAD_UNION		/* ensure no pollution */
 
 /*
-=head1 SV Manipulation Functions
+=for apidoc_section $SV
 
 =for apidoc Am|U32|SvREFCNT|SV* sv
 Returns the value of the object's reference count. Exposed
@@ -276,53 +281,51 @@
 to perl code via Internals::SvREFCNT().
 
 =for apidoc SvREFCNT_inc
-Increments the reference count of the given SV, returning the SV.
+=for apidoc_item SvREFCNT_inc_NN
+=for apidoc_item SvREFCNT_inc_void
+=for apidoc_item |void|SvREFCNT_inc_void_NN|SV* sv
+=for apidoc_item |SV*|SvREFCNT_inc_simple|SV* sv
+=for apidoc_item |SV*|SvREFCNT_inc_simple_NN|SV* sv
+=for apidoc_item |void|SvREFCNT_inc_simple_void|SV* sv
+=for apidoc_item |void|SvREFCNT_inc_simple_void_NN|SV* sv
 
-All of the following C<SvREFCNT_inc>* are optimized versions of
-C<SvREFCNT_inc>, and can be replaced with C<SvREFCNT_inc>.
+These all increment the reference count of the given SV.
+The ones without C<void> in their names return the SV.
 
-=for apidoc SvREFCNT_inc_NN
-Same as C<SvREFCNT_inc>, but can only be used if you know C<sv>
-is not C<NULL>.  Since we don't have to check the NULLness, it's faster
-and smaller.
+C<SvREFCNT_inc> is the base operation; the rest are optimizations if various
+input constraints are known to be true; hence, all can be replaced with
+C<SvREFCNT_inc>.
 
-=for apidoc SvREFCNT_inc_void
-Same as C<SvREFCNT_inc>, but can only be used if you don't need the
+C<SvREFCNT_inc_NN> can only be used if you know C<sv> is not C<NULL>.  Since we
+don't have to check the NULLness, it's faster and smaller.
+
+C<SvREFCNT_inc_void> can only be used if you don't need the
 return value.  The macro doesn't need to return a meaningful value.
 
-=for apidoc Am|void|SvREFCNT_inc_void_NN|SV* sv
-Same as C<SvREFCNT_inc>, but can only be used if you don't need the return
-value, and you know that C<sv> is not C<NULL>.  The macro doesn't need
-to return a meaningful value, or check for NULLness, so it's smaller
-and faster.
+C<SvREFCNT_inc_void_NN> can only be used if you both don't need the return
+value, and you know that C<sv> is not C<NULL>.  The macro doesn't need to
+return a meaningful value, or check for NULLness, so it's smaller and faster.
 
-=for apidoc Am|SV*|SvREFCNT_inc_simple|SV* sv
-Same as C<SvREFCNT_inc>, but can only be used with expressions without side
+C<SvREFCNT_inc_simple> can only be used with expressions without side
 effects.  Since we don't have to store a temporary value, it's faster.
 
-=for apidoc Am|SV*|SvREFCNT_inc_simple_NN|SV* sv
-Same as C<SvREFCNT_inc_simple>, but can only be used if you know C<sv>
-is not C<NULL>.  Since we don't have to check the NULLness, it's faster
-and smaller.
+C<SvREFCNT_inc_simple_NN> can only be used with expressions without side
+effects and you know C<sv> is not C<NULL>.  Since we don't have to store a
+temporary value, nor check for NULLness, it's faster and smaller.
 
-=for apidoc Am|void|SvREFCNT_inc_simple_void|SV* sv
-Same as C<SvREFCNT_inc_simple>, but can only be used if you don't need the
-return value.  The macro doesn't need to return a meaningful value.
+C<SvREFCNT_inc_simple_void> can only be used with expressions without side
+effects and you don't need the return value.
 
-=for apidoc Am|void|SvREFCNT_inc_simple_void_NN|SV* sv
-Same as C<SvREFCNT_inc>, but can only be used if you don't need the return
-value, and you know that C<sv> is not C<NULL>.  The macro doesn't need
-to return a meaningful value, or check for NULLness, so it's smaller
-and faster.
+C<SvREFCNT_inc_simple_void_NN> can only be used with expressions without side
+effects, you don't need the return value, and you know C<sv> is not C<NULL>.
 
 =for apidoc SvREFCNT_dec
-Decrements the reference count of the given SV.  C<sv> may be C<NULL>.
+=for apidoc_item SvREFCNT_dec_NN
 
-=for apidoc SvREFCNT_dec_NN
-Same as C<SvREFCNT_dec>, but can only be used if you know C<sv>
-is not C<NULL>.  Since we don't have to check the NULLness, it's faster
-and smaller.
+These decrement the reference count of the given SV.
 
+C<SvREFCNT_dec_NN> may only be used when C<sv> is known to not be C<NULL>.
+
 =for apidoc Am|svtype|SvTYPE|SV* sv
 Returns the type of the SV.  See C<L</svtype>>.
 
@@ -744,7 +747,7 @@
 =for apidoc Am|U32|SvOOK|SV* sv
 Returns a U32 indicating whether the pointer to the string buffer is offset.
 This hack is used internally to speed up removal of characters from the
-beginning of a C<SvPV>.  When C<SvOOK> is true, then the start of the
+beginning of a C<L</SvPV>>.  When C<SvOOK> is true, then the start of the
 allocated string buffer is actually C<SvOOK_offset()> bytes before C<SvPVX>.
 This offset used to be stored in C<SvIVX>, but is now stored within the spare
 part of the buffer.
@@ -777,16 +780,30 @@
 Only use when you are sure C<SvNOK> is true.  See also C<L</SvNV>>.
 
 =for apidoc Am|char*|SvPVX|SV* sv
-Returns a pointer to the physical string in the SV.  The SV must contain a
-string.  Prior to 5.9.3 it is not safe
-to execute this macro unless the SV's
+=for apidoc_item |char*|SvPVXx|SV* sv
+=for apidoc_item |const char*|SvPVX_const|SV* sv
+=for apidoc_item |char*|SvPVX_mutable|SV* sv
+
+These return a pointer to the physical string in the SV.  The SV must contain a
+string.  Prior to 5.9.3 it is not safe to execute these unless the SV's
 type >= C<SVt_PV>.
 
-This is also used to store the name of an autoloaded subroutine in an XS
+These are also used to store the name of an autoloaded subroutine in an XS
 AUTOLOAD routine.  See L<perlguts/Autoloading with XSUBs>.
 
+C<SvPVXx> is identical to C<SvPVX>.
+
+C<SvPVX_mutable> is merely a synonym for C<SvPVX>, but its name emphasizes that
+the string is modifiable by the caller.
+
+C<SvPVX_const> differs in that the return value has been cast so that the
+compiler will complain if you were to try to modify the contents of the string,
+(unless you cast away const yourself).
+
 =for apidoc Am|STRLEN|SvCUR|SV* sv
-Returns the length of the string which is in the SV.  See C<L</SvLEN>>.
+Returns the length, in bytes, of the PV inside the SV.
+Note that this may not match Perl's C<length>; for that, use
+C<sv_len_utf8(sv)>. See C<L</SvLEN>> also.
 
 =for apidoc Am|STRLEN|SvLEN|SV* sv
 Returns the size of the string buffer in the SV, not including any part
@@ -824,8 +841,8 @@
 Beware that the existing pointer may be involved in copy-on-write or other
 mischief, so do C<SvOOK_off(sv)> and use C<sv_force_normal> or
 C<SvPV_force> (or check the C<SvIsCOW> flag) first to make sure this
-modification is safe. Then finally, if it is not a COW, call C<SvPV_free> to
-free the previous PV buffer.
+modification is safe. Then finally, if it is not a COW, call
+C<L</SvPV_free>> to free the previous PV buffer.
 
 =for apidoc Am|void|SvUV_set|SV* sv|UV val
 Set the value of the UV pointer in C<sv> to val.  See C<L</SvIV_set>>.
@@ -840,8 +857,8 @@
 Set the value of the STASH pointer in C<sv> to val.  See C<L</SvIV_set>>.
 
 =for apidoc Am|void|SvCUR_set|SV* sv|STRLEN len
-Set the current length of the string which is in the SV.  See C<L</SvCUR>>
-and C<SvIV_set>>.
+Sets the current length, in bytes, of the C string which is in the SV.
+See C<L</SvCUR>> and C<SvIV_set>>.
 
 =for apidoc Am|void|SvLEN_set|SV* sv|STRLEN len
 Set the size of the string buffer for the SV. See C<L</SvLEN>>.
@@ -907,7 +924,7 @@
 =for apidoc Am|U32|SvUTF8|SV* sv
 Returns a U32 value indicating the UTF-8 status of an SV.  If things are set-up
 properly, this indicates whether or not the SV contains UTF-8 encoded data.
-You should use this I<after> a call to C<SvPV()> or one of its variants, in
+You should use this I<after> a call to C<L</SvPV>> or one of its variants, in
 case any call to string overloading updates the internal flag.
 
 If you want to take into account the L<bytes> pragma, use C<L</DO_UTF8>>
@@ -949,12 +966,28 @@
 
 #define SvVOK(sv)		(SvMAGICAL(sv)				\
 				 && mg_find(sv,PERL_MAGIC_vstring))
-/* returns the vstring magic, if any */
+/*
+=for apidoc Am|MAGIC*|SvVSTRING_mg|SV * sv
+
+Returns the vstring magic, or NULL if none
+
+=cut
+*/
 #define SvVSTRING_mg(sv)	(SvMAGICAL(sv) \
 				 ? mg_find(sv,PERL_MAGIC_vstring) : NULL)
 
 #define SvOOK(sv)		(SvFLAGS(sv) & SVf_OOK)
 #define SvOOK_on(sv)		(SvFLAGS(sv) |= SVf_OOK)
+
+
+/*
+=for apidoc Am|void|SvOOK_off|SV * sv
+
+Remove any string offset.
+
+=cut
+*/
+
 #define SvOOK_off(sv)		((void)(SvOOK(sv) && (sv_backoff(sv),0)))
 
 #define SvFAKE(sv)		(SvFLAGS(sv) & SVf_FAKE)
@@ -1131,7 +1164,7 @@
 #endif
 
 
-#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
 #  define SvTAIL(sv)	({ const SV *const _svtail = (const SV *)(sv);	\
 			    assert(SvTYPE(_svtail) != SVt_PVAV);	\
 			    assert(SvTYPE(_svtail) != SVt_PVHV);	\
@@ -1175,7 +1208,7 @@
 
 #  define SvMAGIC(sv)	(0 + *(assert_(SvTYPE(sv) >= SVt_PVMG) &((XPVMG*)  SvANY(sv))->xmg_u.xmg_magic))
 #  define SvSTASH(sv)	(0 + *(assert_(SvTYPE(sv) >= SVt_PVMG) &((XPVMG*)  SvANY(sv))->xmg_stash))
-#else
+#else   /* Below is not PERL_DEBUG_COW */
 # ifdef PERL_CORE
 #  define SvLEN(sv) (0 + ((XPV*) SvANY(sv))->xpv_len)
 # else
@@ -1183,7 +1216,7 @@
 # endif
 #  define SvEND(sv) ((sv)->sv_u.svu_pv + ((XPV*)SvANY(sv))->xpv_cur)
 
-#  if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
 /* These get expanded inside other macros that already use a variable _sv  */
 #    define SvPVX(sv)							\
 	(*({ SV *const _svpvx = MUTABLE_SV(sv);				\
@@ -1256,7 +1289,7 @@
 	    assert(SvTYPE(_svstash) >= SVt_PVMG);			\
 	    &(((XPVMG*) MUTABLE_PTR(SvANY(_svstash)))->xmg_stash);	\
 	  }))
-#  else
+#  else     /* Below is not DEBUGGING or can't use brace groups */
 #    define SvPVX(sv) ((sv)->sv_u.svu_pv)
 #    define SvCUR(sv) ((XPV*) SvANY(sv))->xpv_cur
 #    define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv
@@ -1271,7 +1304,7 @@
 
 #ifndef PERL_POISON
 /* Given that these two are new, there can't be any existing code using them
- *  as LVALUEs  */
+ *  as LVALUEs, so prevent that from happening  */
 #  define SvPVX_mutable(sv)	(0 + (sv)->sv_u.svu_pv)
 #  define SvPVX_const(sv)	((const char*)(0 + (sv)->sv_u.svu_pv))
 #else
@@ -1352,6 +1385,17 @@
 	STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
 		SvCUR_set(sv, (val) - SvPVX(sv)); } STMT_END
 
+/*
+=for apidoc Am|void|SvPV_renew|SV* sv|STRLEN len
+Low level micro optimization of C<L</SvGROW>>.  It is generally better to use
+C<SvGROW> instead.  This is because C<SvPV_renew> ignores potential issues that
+C<SvGROW> handles.  C<sv> needs to have a real C<PV> that is unencombered by
+things like COW.  Using C<SV_CHECK_THINKFIRST> or
+C<SV_CHECK_THINKFIRST_COW_DROP> before calling this should clean it up, but
+why not just use C<SvGROW> if you're not sure about the provenance?
+
+=cut
+*/
 #define SvPV_renew(sv,n) \
 	STMT_START { SvLEN_set(sv, n); \
 		SvPV_set((sv), (MEM_WRAP_CHECK_(n,char)			\
@@ -1364,6 +1408,14 @@
 		   SvPV_renew(sv, _lEnGtH); \
 		 } STMT_END
 
+/*
+=for apidoc Am|void|SvPV_free|SV * sv
+
+Frees the PV buffer in C<sv>, leaving things in a precarious state, so should
+only be used as part of a larger operation
+
+=cut
+*/
 #define SvPV_free(sv)							\
     STMT_START {							\
 		     assert(SvTYPE(sv) >= SVt_PV);			\
@@ -1398,7 +1450,7 @@
 #  define BmFLAGS(sv)		(SvTAIL(sv) ? FBMcf_TAIL : 0)
 #endif
 
-#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
 #  define BmUSEFUL(sv)							\
 	(*({ SV *const _bmuseful = MUTABLE_SV(sv);			\
 	    assert(SvTYPE(_bmuseful) >= SVt_PVIV);			\
@@ -1503,10 +1555,24 @@
 
 /*
 =for apidoc Am|char*|SvPV_force|SV* sv|STRLEN len
-Like C<SvPV> but will force the SV into containing a string (C<SvPOK>), and
-only a string (C<SvPOK_only>), by hook or by crook.  You need force if you are
-going to update the C<SvPVX> directly.  Processes get magic.
+=for apidoc_item ||SvPV_force_nolen|SV* sv
+=for apidoc_item ||SvPVx_force|SV* sv|STRLEN len
+=for apidoc_item ||SvPV_force_nomg|SV* sv|STRLEN len
+=for apidoc_item ||SvPV_force_nomg_nolen|SV * sv
+=for apidoc_item ||SvPV_force_mutable|SV * sv|STRLEN len
+=for apidoc_item ||SvPV_force_flags|SV * sv|STRLEN len|U32 flags
+=for apidoc_item ||SvPV_force_flags_nolen|SV * sv|U32 flags
+=for apidoc_item ||SvPV_force_flags_mutable|SV * sv|STRLEN len|U32 flags
+=for apidoc_item ||SvPVbyte_force
+=for apidoc_item ||SvPVbytex_force
+=for apidoc_item ||SvPVutf8_force
+=for apidoc_item ||SvPVutf8x_force
 
+These are like C<L</SvPV>>, returning the string in the SV, but will force the
+SV into containing a string (C<L</SvPOK>>), and only a string
+(C<L</SvPOK_only>>), by hook or by crook.  You need to use one of these
+C<force> routines if you are going to update the C<L</SvPVX>> directly.
+
 Note that coercing an arbitrary scalar into a plain PV will potentially
 strip useful data from it.  For example if the SV was C<SvROK>, then the
 referent will have its reference count decremented, and the SV itself may
@@ -1513,115 +1579,205 @@
 be converted to an C<SvPOK> scalar with a string buffer containing a value
 such as C<"ARRAY(0x1234)">.
 
-=for apidoc Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
-Like C<SvPV_force>, but doesn't process get magic.
+The differences between the forms are:
 
+The forms with C<flags> in their names allow you to use the C<flags> parameter
+to specify to perform 'get' magic (by setting the C<SV_GMAGIC> flag) or to skip
+'get' magic (by clearing it).  The other forms do perform 'get' magic, except
+for the ones with C<nomg> in their names, which skip 'get' magic.
+
+The forms that take a C<len> parameter will set that variable to the byte
+length of the resultant string (these are macros, so don't use C<&len>).
+
+The forms with C<nolen> in their names indicate they don't have a C<len>
+parameter.  They should be used only when it is known that the PV is a C
+string, terminated by a NUL byte, and without intermediate NUL characters; or
+when you don't care about its length.
+
+The forms with C<mutable> in their names are effectively the same as those without,
+but the name emphasizes that the string is modifiable by the caller, which it is
+in all the forms.
+
+C<SvPVutf8_force> is like C<SvPV_force>, but converts C<sv> to UTF-8 first if
+not already UTF-8.
+
+C<SvPVutf8x_force> is like C<SvPVutf8_force>, but guarantees to evaluate C<sv>
+only once; use the more efficient C<SvPVutf8_force> otherwise.
+
+C<SvPVbyte_force> is like C<SvPV_force>, but converts C<sv> to byte
+representation first if currently encoded as UTF-8.  If the SV cannot be
+downgraded from UTF-8, this croaks.
+
+C<SvPVbytex_force> is like C<SvPVbyte_force>, but guarantees to evaluate C<sv>
+only once; use the more efficient C<SvPVbyte_force> otherwise.
+
 =for apidoc Am|char*|SvPV|SV* sv|STRLEN len
-Returns a pointer to the string in the SV, or a stringified form of
-the SV if the SV does not contain a string.  The SV may cache the
-stringified version becoming C<SvPOK>.  Handles 'get' magic.  The
-C<len> variable will be set to the length of the string (this is a macro, so
-don't use C<&len>).  See also C<L</SvPVx>> for a version which guarantees to
-evaluate C<sv> only once.
+=for apidoc_item |char*|SvPVx|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPV_nomg|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPV_nolen|SV* sv
+=for apidoc_item |char*|SvPVx_nolen|SV* sv
+=for apidoc_item |char*|SvPV_nomg_nolen|SV* sv
+=for apidoc_item |char*|SvPV_mutable|SV* sv|STRLEN len
+=for apidoc_item |const char*|SvPV_const|SV* sv|STRLEN len
+=for apidoc_item |const char*|SvPVx_const|SV* sv|STRLEN len
+=for apidoc_item |const char*|SvPV_nolen_const|SV* sv
+=for apidoc_item |const char*|SvPVx_nolen_const|SV* sv
+=for apidoc_item |const char*|SvPV_nomg_const|SV* sv|STRLEN len
+=for apidoc_item |const char*|SvPV_nomg_const_nolen|SV* sv
+=for apidoc_item |char *|SvPV_flags|SV * sv|STRLEN len|U32 flags
+=for apidoc_item |const char *|SvPV_flags_const|SV * sv|STRLEN len|U32 flags
+=for apidoc_item |char *|SvPV_flags_mutable|SV * sv|STRLEN len|U32 flags
+=for apidoc_item |char*|SvPVbyte|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVbyte_nomg|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVbyte_nolen|SV* sv
+=for apidoc_item |char*|SvPVbytex_nolen|SV* sv
+=for apidoc_item |char*|SvPVbytex|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVbyte_or_null|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVbyte_or_null_nomg|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8x|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8_nomg|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8_nolen|SV* sv
+=for apidoc_item |char*|SvPVutf8_or_null|SV* sv|STRLEN len
+=for apidoc_item |char*|SvPVutf8_or_null_nomg|SV* sv|STRLEN len
 
-Note that there is no guarantee that the return value of C<SvPV()> is
-equal to C<SvPVX(sv)>, or that C<SvPVX(sv)> contains valid data, or that
-successive calls to C<SvPV(sv)> will return the same pointer value each
-time.  This is due to the way that things like overloading and
-Copy-On-Write are handled.  In these cases, the return value may point to
-a temporary buffer or similar.  If you absolutely need the C<SvPVX> field to
-be valid (for example, if you intend to write to it), then see
-C<L</SvPV_force>>.
+All these return a pointer to the string in C<sv>, or a stringified form of
+C<sv> if it does not contain a string.  The SV may cache the stringified
+version becoming C<SvPOK>.
 
-=for apidoc Am|char*|SvPVx|SV* sv|STRLEN len
-A version of C<SvPV> which guarantees to evaluate C<sv> only once.
-Only use this if C<sv> is an expression with side effects, otherwise use the
-more efficient C<SvPV>.
+This is a very basic and common operation, so there are lots of slightly
+different versions of it.
 
-=for apidoc Am|char*|SvPV_nomg|SV* sv|STRLEN len
-Like C<SvPV> but doesn't process magic.
+Note that there is no guarantee that the return value of C<SvPV(sv)>, for
+example, is equal to C<SvPVX(sv)>, or that C<SvPVX(sv)> contains valid data, or
+that successive calls to C<SvPV(sv)> (or another of these forms) will return
+the same pointer value each time.  This is due to the way that things like
+overloading and Copy-On-Write are handled.  In these cases, the return value
+may point to a temporary buffer or similar.  If you absolutely need the
+C<SvPVX> field to be valid (for example, if you intend to write to it), then
+see C<L</SvPV_force>>.
 
-=for apidoc Am|char*|SvPV_nolen|SV* sv
-Like C<SvPV> but doesn't set a length variable.
+The differences between the forms are:
 
-=for apidoc Am|char*|SvPV_nomg_nolen|SV* sv
-Like C<SvPV_nolen> but doesn't process magic.
+The forms with neither C<byte> nor C<utf8> in their names (e.g., C<SvPV> or
+C<SvPV_nolen>) can expose the SV's internal string buffer. If
+that buffer consists entirely of bytes 0-255 and includes any bytes above
+127, then you B<MUST> consult C<SvUTF8> to determine the actual code points
+the string is meant to contain. Generally speaking, it is probably safer to
+prefer C<SvPVbyte>, C<SvPVutf8>, and the like. See
+L<perlguts/How do I pass a Perl string to a C library?> for more details.
 
-=for apidoc Am|IV|SvIV|SV* sv
-Coerces the given SV to IV and returns it.  The returned value in many
-circumstances will get stored in C<sv>'s IV slot, but not in all cases.  (Use
-C<L</sv_setiv>> to make sure it does).
+The forms with C<flags> in their names allow you to use the C<flags> parameter
+to specify to process 'get' magic (by setting the C<SV_GMAGIC> flag) or to skip
+'get' magic (by clearing it).  The other forms process 'get' magic, except for
+the ones with C<nomg> in their names, which skip 'get' magic.
 
-See C<L</SvIVx>> for a version which guarantees to evaluate C<sv> only once.
+The forms that take a C<len> parameter will set that variable to the byte
+length of the resultant string (these are macros, so don't use C<&len>).
 
-=for apidoc Am|IV|SvIV_nomg|SV* sv
-Like C<SvIV> but doesn't process magic.
+The forms with C<nolen> in their names indicate they don't have a C<len>
+parameter.  They should be used only when it is known that the PV is a C
+string, terminated by a NUL byte, and without intermediate NUL characters; or
+when you don't care about its length.
 
-=for apidoc Am|IV|SvIVx|SV* sv
-Coerces the given SV to IV and returns it.  The returned value in many
+The forms with C<const> in their names return S<C<const char *>> so that the
+compiler will hopefully complain if you were to try to modify the contents of
+the string (unless you cast away const yourself).
+
+The other forms return a mutable pointer so that the string is modifiable by
+the caller; this is emphasized for the ones with C<mutable> in their names.
+
+The forms whose name ends in C<x> are the same as the corresponding form
+without the C<x>, but the C<x> form is guaranteed to evaluate C<sv> exactly
+once, with a slight loss of efficiency.  Use this if C<sv> is an expression
+with side effects.
+
+C<SvPVutf8> is like C<SvPV>, but converts C<sv> to UTF-8 first if not already
+UTF-8.  Similiarly, the other forms with C<utf8> in their names correspond to
+their respective forms without.
+
+C<SvPVutf8_or_null> and C<SvPVutf8_or_null_nomg> don't have corresponding
+non-C<utf8> forms.  Instead they are like C<SvPVutf8_nomg>, but when C<sv> is
+undef, they return C<NULL>.
+
+C<SvPVbyte> is like C<SvPV>, but converts C<sv> to byte representation first if
+currently encoded as UTF-8.  If C<sv> cannot be downgraded from UTF-8, it
+croaks.  Similiarly, the other forms with C<byte> in their names correspond to
+their respective forms without.
+
+C<SvPVbyte_or_null> doesn't have a corresponding non-C<byte> form.  Instead it
+is like C<SvPVbyte>, but when C<sv> is undef, it returns C<NULL>.
+
+=for apidoc Am|IV|SvIV|SV* sv
+=for apidoc_item SvIVx
+=for apidoc_item SvIV_nomg
+
+These coerce the given SV to IV and return it.  The returned value in many
 circumstances will get stored in C<sv>'s IV slot, but not in all cases.  (Use
 C<L</sv_setiv>> to make sure it does).
 
-This form guarantees to evaluate C<sv> only once.  Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvIV>.
+C<SvIVx> is different from the others in that it is guaranteed to evaluate
+C<sv> exactly once; the others may evaluate it multiple times.  Only use this
+form if C<sv> is an expression with side effects, otherwise use the more
+efficient C<SvIV>.
 
+C<SvIV_nomg> is the same as C<SvIV>, but does not perform 'get' magic.
+
 =for apidoc Am|NV|SvNV|SV* sv
-Coerces the given SV to NV and returns it.  The returned value in many
+=for apidoc_item SvNVx
+=for apidoc_item SvNV_nomg
+
+These coerce the given SV to NV and return it.  The returned value in many
 circumstances will get stored in C<sv>'s NV slot, but not in all cases.  (Use
 C<L</sv_setnv>> to make sure it does).
 
-See C<L</SvNVx>> for a version which guarantees to evaluate C<sv> only once.
+C<SvNVx> is different from the others in that it is guaranteed to evaluate
+C<sv> exactly once; the others may evaluate it multiple times.  Only use this
+form if C<sv> is an expression with side effects, otherwise use the more
+efficient C<SvNV>.
 
-=for apidoc Am|NV|SvNV_nomg|SV* sv
-Like C<SvNV> but doesn't process magic.
+C<SvNV_nomg> is the same as C<SvNV>, but does not perform 'get' magic.
 
-=for apidoc Am|NV|SvNVx|SV* sv
-Coerces the given SV to NV and returns it.  The returned value in many
-circumstances will get stored in C<sv>'s NV slot, but not in all cases.  (Use
-C<L</sv_setnv>> to make sure it does).
+=for apidoc Am|UV|SvUV|SV* sv
+=for apidoc_item SvUVx
+=for apidoc_item SvUV_nomg
 
-This form guarantees to evaluate C<sv> only once.  Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvNV>.
-
-=for apidoc Am|UV|SvUV|SV* sv
-Coerces the given SV to UV and returns it.  The returned value in many
+These coerce the given SV to UV and return it.  The returned value in many
 circumstances will get stored in C<sv>'s UV slot, but not in all cases.  (Use
 C<L</sv_setuv>> to make sure it does).
 
-See C<L</SvUVx>> for a version which guarantees to evaluate C<sv> only once.
+C<SvUVx> is different from the others in that it is guaranteed to evaluate
+C<sv> exactly once; the others may evaluate it multiple times.  Only use this
+form if C<sv> is an expression with side effects, otherwise use the more
+efficient C<SvUV>.
 
-=for apidoc Am|UV|SvUV_nomg|SV* sv
-Like C<SvUV> but doesn't process magic.
+C<SvUV_nomg> is the same as C<SvUV>, but does not perform 'get' magic.
 
-=for apidoc Am|UV|SvUVx|SV* sv
-Coerces the given SV to UV and returns it.  The returned value in many
-circumstances will get stored in C<sv>'s UV slot, but not in all cases.  (Use
-C<L</sv_setuv>> to make sure it does).
+=for apidoc SvTRUE
+=for apidoc_item SvTRUEx
+=for apidoc_item SvTRUE_nomg
+=for apidoc_item SvTRUE_NN
+=for apidoc_item SvTRUE_nomg_NN
 
-This form guarantees to evaluate C<sv> only once.  Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvUV>.
+These return a boolean indicating whether Perl would evaluate the SV as true or
+false.  See C<L</SvOK>> for a defined/undefined test.
 
-=for apidoc Am|bool|SvTRUE|SV* sv
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false.  See C<L</SvOK>> for a defined/undefined test.  Handles 'get' magic
-unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
-private flags).
+As of Perl 5.32, all are guaranteed to evaluate C<sv> only once.  Prior to that
+release, only C<SvTRUEx> guaranteed single evaluation; now C<SvTRUEx> is
+identical to C<SvTRUE>.
 
-See C<L</SvTRUEx>> for a version which guarantees to evaluate C<sv> only once.
+C<SvTRUE_nomg> and C<TRUE_nomg_NN> do not perform 'get' magic; the others do
+unless the scalar is already C<SvPOK>, C<SvIOK>, or C<SvNOK> (the public, not
+the private flags).
 
-=for apidoc Am|bool|SvTRUE_nomg|SV* sv
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false.  See C<L</SvOK>> for a defined/undefined test.  Does not handle 'get' magic.
+C<SvTRUE_NN> is like C<L</SvTRUE>>, but C<sv> is assumed to be
+non-null (NN).  If there is a possibility that it is NULL, use plain
+C<SvTRUE>.
 
-=for apidoc Am|bool|SvTRUEx|SV* sv
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false.  See C<L</SvOK>> for a defined/undefined test.  Handles 'get' magic
-unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
-private flags).
+C<SvTRUE_nomg_NN> is like C<L</SvTRUE_nomg>>, but C<sv> is assumed to be
+non-null (NN).  If there is a possibility that it is NULL, use plain
+C<SvTRUE_nomg>.
 
-This form guarantees to evaluate C<sv> only once.  Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvTRUE>.
-
 =for apidoc Am|char*|SvPVutf8_force|SV* sv|STRLEN len
 Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
 
@@ -1661,26 +1817,6 @@
 Like C<SvPV_nolen>, but converts C<sv> to byte representation first if
 necessary.  If the SV cannot be downgraded from UTF-8, this croaks.
 
-=for apidoc Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
-Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
-Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVutf8_force>
-otherwise.
-
-=for apidoc Am|char*|SvPVutf8x|SV* sv|STRLEN len
-Like C<SvPV>, but converts C<sv> to UTF-8 first if necessary.
-Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVutf8>
-otherwise.
-
-=for apidoc Am|char*|SvPVbytex_force|SV* sv|STRLEN len
-Like C<SvPV_force>, but converts C<sv> to byte representation first if necessary.
-Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte_force>
-otherwise.  If the SV cannot be downgraded from UTF-8, this croaks.
-
-=for apidoc Am|char*|SvPVbytex|SV* sv|STRLEN len
-Like C<SvPV>, but converts C<sv> to byte representation first if necessary.
-Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte>
-otherwise.  If the SV cannot be downgraded from UTF-8, this croaks.
-
 =for apidoc Am|U32|SvIsCOW|SV* sv
 Returns a U32 value indicating whether the SV is Copy-On-Write (either shared
 hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for
@@ -1690,18 +1826,6 @@
 Returns a boolean indicating whether the SV is Copy-On-Write shared hash key
 scalar.
 
-=for apidoc Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
-Like C<sv_catpvn> but doesn't process magic.
-
-=for apidoc Am|void|sv_catpv_nomg|SV* sv|const char* ptr
-Like C<sv_catpv> but doesn't process magic.
-
-=for apidoc Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
-Like C<sv_setsv> but doesn't process magic.
-
-=for apidoc Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
-Like C<sv_catsv> but doesn't process magic.
-
 =cut
 */
 
@@ -1711,50 +1835,50 @@
 #define SvNV(sv) (SvNOK_nog(sv) ? SvNVX(sv) : sv_2nv(sv))
 
 #define SvIV_nomg(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv_flags(sv, 0))
-#define SvUV_nomg(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
+#define SvUV_nomg(sv) (SvUOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
 #define SvNV_nomg(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv_flags(sv, 0))
 
 /* ----*/
 
-#define SvPV(sv, lp)         SvPV_flags(sv, lp, SV_GMAGIC)
-#define SvPV_const(sv, lp)   SvPV_flags_const(sv, lp, SV_GMAGIC)
-#define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
+#define SvPV(sv, len)         SvPV_flags(sv, len, SV_GMAGIC)
+#define SvPV_const(sv, len)   SvPV_flags_const(sv, len, SV_GMAGIC)
+#define SvPV_mutable(sv, len) SvPV_flags_mutable(sv, len, SV_GMAGIC)
 
-#define SvPV_flags(sv, lp, flags) \
+#define SvPV_flags(sv, len, flags) \
     (SvPOK_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
-#define SvPV_flags_const(sv, lp, flags) \
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &len, flags))
+#define SvPV_flags_const(sv, len, flags) \
     (SvPOK_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
-     (const char*) sv_2pv_flags(sv, &lp, (flags|SV_CONST_RETURN)))
+     ? ((len = SvCUR(sv)), SvPVX_const(sv)) : \
+     (const char*) sv_2pv_flags(sv, &len, (flags|SV_CONST_RETURN)))
 #define SvPV_flags_const_nolen(sv, flags) \
     (SvPOK_nog(sv) \
      ? SvPVX_const(sv) : \
      (const char*) sv_2pv_flags(sv, 0, (flags|SV_CONST_RETURN)))
-#define SvPV_flags_mutable(sv, lp, flags) \
+#define SvPV_flags_mutable(sv, len, flags) \
     (SvPOK_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
-     sv_2pv_flags(sv, &lp, (flags|SV_MUTABLE_RETURN)))
+     ? ((len = SvCUR(sv)), SvPVX_mutable(sv)) : \
+     sv_2pv_flags(sv, &len, (flags|SV_MUTABLE_RETURN)))
 
-#define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
+#define SvPV_force(sv, len) SvPV_force_flags(sv, len, SV_GMAGIC)
 #define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
-#define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
+#define SvPV_force_mutable(sv, len) SvPV_force_flags_mutable(sv, len, SV_GMAGIC)
 
-#define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
+#define SvPV_force_nomg(sv, len) SvPV_force_flags(sv, len, 0)
 #define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
 
-#define SvPV_force_flags(sv, lp, flags) \
+#define SvPV_force_flags(sv, len, flags) \
     (SvPOK_pure_nogthink(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &len, flags))
 
 #define SvPV_force_flags_nolen(sv, flags) \
     (SvPOK_pure_nogthink(sv) \
      ? SvPVX(sv) : sv_pvn_force_flags(sv, 0, flags))
 
-#define SvPV_force_flags_mutable(sv, lp, flags) \
+#define SvPV_force_flags_mutable(sv, len, flags) \
     (SvPOK_pure_nogthink(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
-     : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
+     ? ((len = SvCUR(sv)), SvPVX_mutable(sv)) \
+     : sv_pvn_force_flags(sv, &len, flags|SV_MUTABLE_RETURN))
 
 #define SvPV_nolen(sv) \
     (SvPOK_nog(sv) \
@@ -1769,33 +1893,33 @@
     (SvPOK_nog(sv) \
      ? SvPVX_const(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC|SV_CONST_RETURN))
 
-#define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
-#define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
+#define SvPV_nomg(sv, len) SvPV_flags(sv, len, 0)
+#define SvPV_nomg_const(sv, len) SvPV_flags_const(sv, len, 0)
 #define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
 
 /* ----*/
 
-#define SvPVutf8(sv, lp) \
+#define SvPVutf8(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &len))
 
-#define SvPVutf8_or_null(sv, lp) \
+#define SvPVutf8_or_null(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
-     ? sv_2pvutf8_flags(sv, &lp, 0) : ((lp = 0), NULL))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
+     ? sv_2pvutf8_flags(sv, &len, 0) : ((len = 0), NULL))
 
-#define SvPVutf8_nomg(sv, lp) \
+#define SvPVutf8_nomg(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8_flags(sv, &lp, 0))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8_flags(sv, &len, 0))
 
-#define SvPVutf8_or_null_nomg(sv, lp) \
+#define SvPVutf8_or_null_nomg(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
-     ? sv_2pvutf8_flags(sv, &lp, 0) : ((lp = 0), NULL))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
+     ? sv_2pvutf8_flags(sv, &len, 0) : ((len = 0), NULL))
 
-#define SvPVutf8_force(sv, lp) \
+#define SvPVutf8_force(sv, len) \
     (SvPOK_utf8_pure_nogthink(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &len))
 
 #define SvPVutf8_nolen(sv) \
     (SvPOK_utf8_nog(sv) \
@@ -1803,27 +1927,27 @@
 
 /* ----*/
 
-#define SvPVbyte(sv, lp) \
+#define SvPVbyte(sv, len) \
     (SvPOK_byte_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &len))
 
-#define SvPVbyte_or_null(sv, lp) \
+#define SvPVbyte_or_null(sv, len) \
     (SvPOK_byte_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
-     ? sv_2pvbyte_flags(sv, &lp, 0) : ((lp = 0), NULL))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
+     ? sv_2pvbyte_flags(sv, &len, 0) : ((len = 0), NULL))
 
-#define SvPVbyte_nomg(sv, lp) \
+#define SvPVbyte_nomg(sv, len) \
     (SvPOK_byte_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte_flags(sv, &lp, 0))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte_flags(sv, &len, 0))
 
-#define SvPVbyte_or_null_nomg(sv, lp) \
+#define SvPVbyte_or_null_nomg(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
-     ? sv_2pvbyte_flags(sv, &lp, 0) : ((lp = 0), NULL))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
+     ? sv_2pvbyte_flags(sv, &len, 0) : ((len = 0), NULL))
 
-#define SvPVbyte_force(sv, lp) \
+#define SvPVbyte_force(sv, len) \
     (SvPOK_byte_pure_nogthink(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &lp))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &len))
 
 #define SvPVbyte_nolen(sv) \
     (SvPOK_byte_nog(sv) \
@@ -1835,43 +1959,26 @@
  * failing that, call a function to do the work
  */
 
-#define SvPVx_force(sv, lp) sv_pvn_force(sv, &lp)
-#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
-#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
+#define SvPVx_force(sv, len) sv_pvn_force(sv, &len)
+#define SvPVutf8x_force(sv, len) sv_pvutf8n_force(sv, &len)
+#define SvPVbytex_force(sv, len) sv_pvbyten_force(sv, &len)
 
-#define SvTRUE(sv)         Perl_SvTRUE(aTHX_ sv)
-#define SvTRUE_nomg(sv)    (LIKELY(sv) && SvTRUE_nomg_NN(sv))
-#define SvTRUE_NN(sv)      (SvGETMAGIC(sv), SvTRUE_nomg_NN(sv))
-#define SvTRUE_nomg_NN(sv) (SvTRUE_common(sv, sv_2bool_nomg(sv)))
+#define SvTRUEx(sv)        SvTRUE(sv)
+#define SvTRUEx_nomg(sv)   SvTRUE_nomg(sv)
+#define SvTRUE_nomg_NN(sv) SvTRUE_common(sv, TRUE)
 
-#define SvTRUE_common(sv,fallback) (			\
-      SvIMMORTAL_INTERP(sv)                             \
-        ? SvIMMORTAL_TRUE(sv)                           \
-    : !SvOK(sv)						\
-	? 0						\
-    : SvPOK(sv)						\
-	? SvPVXtrue(sv)					\
-    : SvIOK(sv)                			        \
-        ? (SvIVX(sv) != 0 /* cast to bool */)           \
-    : (SvROK(sv) && !(   SvOBJECT(SvRV(sv))             \
-                      && HvAMAGIC(SvSTASH(SvRV(sv)))))  \
-        ? TRUE                                          \
-    : (fallback))
+#if defined(PERL_USE_GCC_BRACE_GROUPS)
 
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
-
 #  define SvIVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvIV(_sv); })
 #  define SvUVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvUV(_sv); })
 #  define SvNVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvNV(_sv); })
-#  define SvPVx(sv, lp) ({SV *_sv = (sv); SvPV(_sv, lp); })
-#  define SvPVx_const(sv, lp) ({SV *_sv = (sv); SvPV_const(_sv, lp); })
+#  define SvPVx(sv, len) ({SV *_sv = (sv); SvPV(_sv, len); })
+#  define SvPVx_const(sv, len) ({SV *_sv = (sv); SvPV_const(_sv, len); })
 #  define SvPVx_nolen(sv) ({SV *_sv = (sv); SvPV_nolen(_sv); })
 #  define SvPVx_nolen_const(sv) ({SV *_sv = (sv); SvPV_nolen_const(_sv); })
-#  define SvPVutf8x(sv, lp) ({SV *_sv = (sv); SvPVutf8(_sv, lp); })
-#  define SvPVbytex(sv, lp) ({SV *_sv = (sv); SvPVbyte(_sv, lp); })
+#  define SvPVutf8x(sv, len) ({SV *_sv = (sv); SvPVutf8(_sv, len); })
+#  define SvPVbytex(sv, len) ({SV *_sv = (sv); SvPVbyte(_sv, len); })
 #  define SvPVbytex_nolen(sv) ({SV *_sv = (sv); SvPVbyte_nolen(_sv); })
-#  define SvTRUEx(sv)      ({SV *_sv = (sv); SvTRUE(_sv); })
-#  define SvTRUEx_nomg(sv) ({SV *_sv = (sv); SvTRUE_nomg(_sv); })
 
 #else /* __GNUC__ */
 
@@ -1881,15 +1988,13 @@
 #  define SvIVx(sv) ((PL_Sv = (sv)), SvIV(PL_Sv))
 #  define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
 #  define SvNVx(sv) ((PL_Sv = (sv)), SvNV(PL_Sv))
-#  define SvPVx(sv, lp) ((PL_Sv = (sv)), SvPV(PL_Sv, lp))
-#  define SvPVx_const(sv, lp) ((PL_Sv = (sv)), SvPV_const(PL_Sv, lp))
+#  define SvPVx(sv, len) ((PL_Sv = (sv)), SvPV(PL_Sv, len))
+#  define SvPVx_const(sv, len) ((PL_Sv = (sv)), SvPV_const(PL_Sv, len))
 #  define SvPVx_nolen(sv) ((PL_Sv = (sv)), SvPV_nolen(PL_Sv))
 #  define SvPVx_nolen_const(sv) ((PL_Sv = (sv)), SvPV_nolen_const(PL_Sv))
-#  define SvPVutf8x(sv, lp) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, lp))
-#  define SvPVbytex(sv, lp) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, lp))
+#  define SvPVutf8x(sv, len) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, len))
+#  define SvPVbytex(sv, len) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, len))
 #  define SvPVbytex_nolen(sv) ((PL_Sv = (sv)), SvPVbyte_nolen(PL_Sv))
-#  define SvTRUEx(sv)      ((PL_Sv = (sv)), SvTRUE(PL_Sv))
-#  define SvTRUEx_nomg(sv) ((PL_Sv = (sv)), SvTRUE_nomg(PL_Sv))
 #endif /* __GNU__ */
 
 #define SvPVXtrue(sv)	(					\
@@ -1910,10 +2015,23 @@
 
 #define SvSHARED_HEK_FROM_PV(pvx) \
 	((struct hek*)(pvx - STRUCT_OFFSET(struct hek, hek_key)))
+/*
+=for apidoc Am|struct hek*|SvSHARED_HASH|SV * sv
+Returns the hash for C<sv> created by C<L</newSVpvn_share>>.
+
+=cut
+*/
 #define SvSHARED_HASH(sv) (0 + SvSHARED_HEK_FROM_PV(SvPVX_const(sv))->hek_hash)
 
 /* flag values for sv_*_flags functions */
 #define SV_UTF8_NO_ENCODING	0       /* No longer used */
+
+/*
+=for apidoc AmnhD||SV_UTF8_NO_ENCODING
+
+=cut
+*/
+
 #define SV_IMMEDIATE_UNREF	1
 #define SV_GMAGIC		2
 #define SV_COW_DROP_PV		4
@@ -1976,7 +2094,7 @@
 			    && SvCUR(sv)+1 < SvLEN(sv))
    /* Note: To allow 256 COW "copies", a refcnt of 0 means 1. */
 #   define CowREFCNT(sv)	(*(U8 *)(SvPVX(sv)+SvLEN(sv)-1))
-#   define SV_COW_REFCNT_MAX	((1 << sizeof(U8)*8) - 1)
+#   define SV_COW_REFCNT_MAX	nBIT_UMAX(sizeof(U8) * CHARBITS)
 #   define CAN_COW_MASK	(SVf_POK|SVf_ROK|SVp_POK|SVf_FAKE| \
 			 SVf_OOK|SVf_BREAK|SVf_READONLY|SVf_PROTECT)
 #endif
@@ -2007,7 +2125,7 @@
 #define sv_catsv_nomg(dsv, ssv) sv_catsv_flags(dsv, ssv, 0)
 #define sv_catsv_mg(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC|SV_SMAGIC)
 #define sv_catpvn(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC)
-#define sv_catpvn_mg(sv, sstr, slen) sv_catpvn_flags(sv, sstr, slen, SV_GMAGIC|SV_SMAGIC);
+#define sv_catpvn_mg(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC|SV_SMAGIC);
 #define sv_copypv(dsv, ssv) sv_copypv_flags(dsv, ssv, SV_GMAGIC)
 #define sv_copypv_nomg(dsv, ssv) sv_copypv_flags(dsv, ssv, 0)
 #define sv_2pv(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC)
@@ -2025,7 +2143,7 @@
 #define sv_eq(sv1, sv2) sv_eq_flags(sv1, sv2, SV_GMAGIC)
 #define sv_cmp(sv1, sv2) sv_cmp_flags(sv1, sv2, SV_GMAGIC)
 #define sv_cmp_locale(sv1, sv2) sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC)
-#define sv_collxfrm(sv, nxp) sv_cmp_flags(sv, nxp, SV_GMAGIC)
+#define sv_collxfrm(sv, nxp) sv_collxfrm_flags(sv, nxp, SV_GMAGIC)
 #define sv_2bool(sv) sv_2bool_flags(sv, SV_GMAGIC)
 #define sv_2bool_nomg(sv) sv_2bool_flags(sv, 0)
 #define sv_insert(bigstr, offset, len, little, littlelen)		\
@@ -2062,10 +2180,11 @@
 #endif
 
 /*
-=for apidoc Am|SV*|newRV_inc|SV* sv
+=for apidoc newRV
+=for apidoc_item ||newRV_inc|
 
-Creates an RV wrapper for an SV.  The reference count for the original SV is
-incremented.
+These are identical.  They create an RV wrapper for an SV.  The reference count
+for the original SV is incremented.
 
 =cut
 */
@@ -2075,33 +2194,36 @@
 /* the following macros update any magic values this C<sv> is associated with */
 
 /*
-=head1 Magical Functions
+=for apidoc_section $SV
 
 =for apidoc Am|void|SvGETMAGIC|SV* sv
-Invokes C<mg_get> on an SV if it has 'get' magic.  For example, this
+Invokes C<L</mg_get>> on an SV if it has 'get' magic.  For example, this
 will call C<FETCH> on a tied variable.  This macro evaluates its
 argument more than once.
 
 =for apidoc Am|void|SvSETMAGIC|SV* sv
-Invokes C<mg_set> on an SV if it has 'set' magic.  This is necessary
+Invokes C<L</mg_set>> on an SV if it has 'set' magic.  This is necessary
 after modifying a scalar, in case it is a magical variable like C<$|>
 or a tied variable (it calls C<STORE>).  This macro evaluates its
 argument more than once.
 
 =for apidoc Am|void|SvSetSV|SV* dsv|SV* ssv
-Calls C<sv_setsv> if C<dsv> is not the same as C<ssv>.  May evaluate arguments
-more than once.  Does not handle 'set' magic on the destination SV.
+=for apidoc_item SvSetMagicSV
+=for apidoc_item SvSetSV_nosteal
+=for apidoc_item SvSetMagicSV_nosteal
 
-=for apidoc Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
-Calls a non-destructive version of C<sv_setsv> if C<dsv> is not the same as
-C<ssv>.  May evaluate arguments more than once.
+if C<dsv> is the same as C<ssv>, these do nothing.  Otherwise they all call
+some form of C<L</sv_setsv>>.  They may evaluate their arguments more than
+once.
 
-=for apidoc Am|void|SvSetMagicSV|SV* dsv|SV* ssv
-Like C<SvSetSV>, but does any set magic required afterwards.
+The only differences are:
 
-=for apidoc Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
-Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
+C<SvSetMagicSV> and C<SvSetMagicSV_nosteal> perform any required 'set' magic
+afterwards on the destination SV; C<SvSetSV> and C<SvSetSV_nosteal> do not.
 
+C<SvSetSV_nosteal> C<SvSetMagicSV_nosteal> call a non-destructive version of
+C<sv_setsv>.
+
 =for apidoc Am|void|SvSHARE|SV* sv
 Arranges for C<sv> to be shared between threads if a suitable module
 has been loaded.
@@ -2114,7 +2236,7 @@
 Releases a mutual exclusion lock on C<sv> if a suitable module
 has been loaded.
 
-=head1 SV Manipulation Functions
+=for apidoc_section $SV
 
 =for apidoc Am|char *|SvGROW|SV* sv|STRLEN len
 Expands the character buffer in the SV so that it has room for the
@@ -2212,6 +2334,13 @@
 #define isGV(sv) (SvTYPE(sv) == SVt_PVGV)
 /* If I give every macro argument a different name, then there won't be bugs
    where nested macros get confused. Been there, done that.  */
+/*
+=for apidoc Am|bool|isGV_with_GP|SV * sv
+Returns a boolean as to whether or not C<sv> is a GV with a pointer to a GP
+(glob pointer).
+
+=cut
+*/
 #define isGV_with_GP(pwadak) \
 	(((SvFLAGS(pwadak) & (SVp_POK|SVpgv_GP)) == SVpgv_GP)	\
 	&& (SvTYPE(pwadak) == SVt_PVGV || SvTYPE(pwadak) == SVt_PVLV))
@@ -2305,7 +2434,7 @@
 10:28 <+meta> Nicholas: crash
 */
 #  define SvOOK_offset(sv, offset) STMT_START {				\
-	assert(sizeof(offset) == sizeof(STRLEN));			\
+	STATIC_ASSERT_STMT(sizeof(offset) == sizeof(STRLEN));		\
 	if (SvOOK(sv)) {						\
 	    const U8 *_crash = (U8*)SvPVX_const(sv);			\
 	    (offset) = *--_crash;					\
@@ -2329,7 +2458,7 @@
 #else
     /* This is the same code, but avoids using any temporary variables:  */
 #  define SvOOK_offset(sv, offset) STMT_START {				\
-	assert(sizeof(offset) == sizeof(STRLEN));			\
+	STATIC_ASSERT_STMT(sizeof(offset) == sizeof(STRLEN));		\
 	if (SvOOK(sv)) {						\
 	    (offset) = ((U8*)SvPVX_const(sv))[-1];			\
 	    if (!(offset)) {						\
@@ -2344,51 +2473,54 @@
 
 #define newIO()	MUTABLE_IO(newSV_type(SVt_PVIO))
 
-#define SV_CONST(name) \
+#if defined(PERL_CORE) || defined(PERL_EXT)
+
+#  define SV_CONST(name) \
 	PL_sv_consts[SV_CONST_##name] \
 		? PL_sv_consts[SV_CONST_##name] \
 		: (PL_sv_consts[SV_CONST_##name] = newSVpv_share(#name, 0))
 
-#define SV_CONST_TIESCALAR 0
-#define SV_CONST_TIEARRAY 1
-#define SV_CONST_TIEHASH 2
-#define SV_CONST_TIEHANDLE 3
+#  define SV_CONST_TIESCALAR 0
+#  define SV_CONST_TIEARRAY 1
+#  define SV_CONST_TIEHASH 2
+#  define SV_CONST_TIEHANDLE 3
 
-#define SV_CONST_FETCH 4
-#define SV_CONST_FETCHSIZE 5
-#define SV_CONST_STORE 6
-#define SV_CONST_STORESIZE 7
-#define SV_CONST_EXISTS 8
+#  define SV_CONST_FETCH 4
+#  define SV_CONST_FETCHSIZE 5
+#  define SV_CONST_STORE 6
+#  define SV_CONST_STORESIZE 7
+#  define SV_CONST_EXISTS 8
 
-#define SV_CONST_PUSH 9
-#define SV_CONST_POP 10
-#define SV_CONST_SHIFT 11
-#define SV_CONST_UNSHIFT 12
-#define SV_CONST_SPLICE 13
-#define SV_CONST_EXTEND 14
+#  define SV_CONST_PUSH 9
+#  define SV_CONST_POP 10
+#  define SV_CONST_SHIFT 11
+#  define SV_CONST_UNSHIFT 12
+#  define SV_CONST_SPLICE 13
+#  define SV_CONST_EXTEND 14
 
-#define SV_CONST_FIRSTKEY 15
-#define SV_CONST_NEXTKEY 16
-#define SV_CONST_SCALAR 17
+#  define SV_CONST_FIRSTKEY 15
+#  define SV_CONST_NEXTKEY 16
+#  define SV_CONST_SCALAR 17
 
-#define SV_CONST_OPEN 18
-#define SV_CONST_WRITE 19
-#define SV_CONST_PRINT 20
-#define SV_CONST_PRINTF 21
-#define SV_CONST_READ 22
-#define SV_CONST_READLINE 23
-#define SV_CONST_GETC 24
-#define SV_CONST_SEEK 25
-#define SV_CONST_TELL 26
-#define SV_CONST_EOF 27
-#define SV_CONST_BINMODE 28
-#define SV_CONST_FILENO 29
-#define SV_CONST_CLOSE 30
+#  define SV_CONST_OPEN 18
+#  define SV_CONST_WRITE 19
+#  define SV_CONST_PRINT 20
+#  define SV_CONST_PRINTF 21
+#  define SV_CONST_READ 22
+#  define SV_CONST_READLINE 23
+#  define SV_CONST_GETC 24
+#  define SV_CONST_SEEK 25
+#  define SV_CONST_TELL 26
+#  define SV_CONST_EOF 27
+#  define SV_CONST_BINMODE 28
+#  define SV_CONST_FILENO 29
+#  define SV_CONST_CLOSE 30
 
-#define SV_CONST_DELETE 31
-#define SV_CONST_CLEAR 32
-#define SV_CONST_UNTIE 33
-#define SV_CONST_DESTROY 34
+#  define SV_CONST_DELETE 31
+#  define SV_CONST_CLEAR 32
+#  define SV_CONST_UNTIE 33
+#  define SV_CONST_DESTROY 34
+#endif
 
 #define SV_CONSTS_COUNT 35
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/sys/socket.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/sys/socket.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/sys/socket.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -73,7 +73,7 @@
 int win32_recvfrom (SOCKET s, char * buf, int len, int flags,
                          struct sockaddr *from, int * fromlen);
 int win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
-		  const struct timeval *timeout);
+                  const struct timeval *timeout);
 int win32_send (SOCKET s, const char * buf, int len, int flags);
 int win32_sendto (SOCKET s, const char * buf, int len, int flags,
                        const struct sockaddr *to, int tolen);

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/thread.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/thread.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/thread.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -22,12 +22,12 @@
 #  ifdef OLD_PTHREADS_API /* Here be dragons. */
 #    define DETACH(t) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_detach(&(t)->self))) {		\
-	    MUTEX_UNLOCK(&(t)->mutex);				\
-	    Perl_croak_nocontext("panic: DETACH (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
-	}							\
+        int _eC_;						\
+        if ((_eC_ = pthread_detach(&(t)->self))) {		\
+            MUTEX_UNLOCK(&(t)->mutex);				\
+            Perl_croak_nocontext("panic: DETACH (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
+        }							\
     } STMT_END
 
 #    define PERL_GET_CONTEXT	Perl_get_context()
@@ -106,13 +106,13 @@
 
 #define MUTEX_INIT(m) \
     STMT_START {						\
-	*m = mutex_alloc();					\
-	if (*m) {						\
-	    mutex_init(*m);					\
-	} else {						\
-	    Perl_croak_nocontext("panic: MUTEX_INIT [%s:%d]",	\
-				 __FILE__, __LINE__);		\
-	}							\
+        *m = mutex_alloc();					\
+        if (*m) {						\
+            mutex_init(*m);					\
+        } else {						\
+            Perl_croak_nocontext("panic: MUTEX_INIT [%s:%d]",	\
+                                 __FILE__, __LINE__);		\
+        }							\
     } STMT_END
 
 #define MUTEX_LOCK(m)			mutex_lock(*m)
@@ -119,20 +119,20 @@
 #define MUTEX_UNLOCK(m)			mutex_unlock(*m)
 #define MUTEX_DESTROY(m) \
     STMT_START {						\
-	mutex_free(*m);						\
-	*m = 0;							\
+        mutex_free(*m);						\
+        *m = 0;							\
     } STMT_END
 
 #define COND_INIT(c) \
     STMT_START {						\
-	*c = condition_alloc();					\
-	if (*c) {						\
-	    condition_init(*c);					\
-	}							\
-	else {							\
-	    Perl_croak_nocontext("panic: COND_INIT [%s:%d]",	\
-				 __FILE__, __LINE__);		\
-	}							\
+        *c = condition_alloc();					\
+        if (*c) {						\
+            condition_init(*c);					\
+        }							\
+        else {							\
+            Perl_croak_nocontext("panic: COND_INIT [%s:%d]",	\
+                                 __FILE__, __LINE__);		\
+        }							\
     } STMT_END
 
 #define COND_SIGNAL(c)		condition_signal(*c)
@@ -140,15 +140,11 @@
 #define COND_WAIT(c, m)		condition_wait(*c, *m)
 #define COND_DESTROY(c) \
     STMT_START {						\
-	condition_free(*c);					\
-	*c = 0;							\
+        condition_free(*c);					\
+        *c = 0;							\
     } STMT_END
 
-#define THREAD_CREATE(thr, f)	(thr->self = cthread_fork(f, thr), 0)
-#define THREAD_POST_CREATE(thr)	NOOP
-
 #define THREAD_RET_TYPE		any_t
-#define THREAD_RET_CAST(x)	((any_t) x)
 
 #define DETACH(t)		cthread_detach(t->self)
 #define JOIN(t, avp)		(*(avp) = MUTABLE_AV(cthread_join(t->self)))
@@ -186,19 +182,19 @@
     /* Temporary workaround, true bug is deeper. --jhi 1999-02-25 */
 #    define MUTEX_INIT(m) \
     STMT_START {						\
-	int _eC_;						\
-	Zero((m), 1, perl_mutex);                               \
- 	if ((_eC_ = pthread_mutex_init((m), pthread_mutexattr_default)))	\
-	    Perl_croak_nocontext("panic: MUTEX_INIT (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        Zero((m), 1, perl_mutex);                               \
+        if ((_eC_ = pthread_mutex_init((m), pthread_mutexattr_default)))	\
+            Perl_croak_nocontext("panic: MUTEX_INIT (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 #  else
 #    define MUTEX_INIT(m) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_mutex_init((m), pthread_mutexattr_default)))	\
-	    Perl_croak_nocontext("panic: MUTEX_INIT (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_mutex_init((m), pthread_mutexattr_default)))	\
+            Perl_croak_nocontext("panic: MUTEX_INIT (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 #  endif
 
@@ -212,26 +208,26 @@
 
 #  define MUTEX_LOCK(m) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = perl_pthread_mutex_lock((m))))			\
-	    Perl_croak_nocontext("panic: MUTEX_LOCK (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = perl_pthread_mutex_lock((m))))			\
+            Perl_croak_nocontext("panic: MUTEX_LOCK (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 
 #  define MUTEX_UNLOCK(m) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = perl_pthread_mutex_unlock((m))))			\
-	    Perl_croak_nocontext("panic: MUTEX_UNLOCK (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = perl_pthread_mutex_unlock((m))))			\
+            Perl_croak_nocontext("panic: MUTEX_UNLOCK (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 
 #  define MUTEX_DESTROY(m) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_mutex_destroy((m))))		\
-	    Perl_croak_nocontext("panic: MUTEX_DESTROY (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_mutex_destroy((m))))		\
+            Perl_croak_nocontext("panic: MUTEX_DESTROY (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 #endif /* MUTEX_INIT */
 
@@ -238,55 +234,124 @@
 #ifndef COND_INIT
 #  define COND_INIT(c) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_cond_init((c), pthread_condattr_default)))	\
-	    Perl_croak_nocontext("panic: COND_INIT (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_cond_init((c), pthread_condattr_default)))	\
+            Perl_croak_nocontext("panic: COND_INIT (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 
 #  define COND_SIGNAL(c) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_cond_signal((c))))			\
-	    Perl_croak_nocontext("panic: COND_SIGNAL (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_cond_signal((c))))			\
+            Perl_croak_nocontext("panic: COND_SIGNAL (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 
 #  define COND_BROADCAST(c) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_cond_broadcast((c))))		\
-	    Perl_croak_nocontext("panic: COND_BROADCAST (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_cond_broadcast((c))))		\
+            Perl_croak_nocontext("panic: COND_BROADCAST (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 
 #  define COND_WAIT(c, m) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_cond_wait((c), (m))))		\
-	    Perl_croak_nocontext("panic: COND_WAIT (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_cond_wait((c), (m))))		\
+            Perl_croak_nocontext("panic: COND_WAIT (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 
 #  define COND_DESTROY(c) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_cond_destroy((c))))			\
-	    Perl_croak_nocontext("panic: COND_DESTROY (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_cond_destroy((c))))			\
+            Perl_croak_nocontext("panic: COND_DESTROY (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 #endif /* COND_INIT */
 
+#if defined(MUTEX_LOCK) && defined(MUTEX_UNLOCK)                \
+ && defined(COND_SIGNAL) && defined(COND_WAIT)
+
+/* These emulate native many-reader/1-writer locks.
+ * Basically a locking reader just locks the semaphore long enough to increment
+ * a counter; and similarly decrements it when when through.  Any writer will
+ * run only when the count of readers is 0.  That is because it blocks on that
+ * semaphore (doing a COND_WAIT) until it gets control of it, which won't
+ * happen unless the count becomes 0.  ALL readers and other writers are then
+ * blocked until it releases the semaphore.  The reader whose unlocking causes
+ * the count to become 0 signals any waiting writers, and the system guarantees
+ * that only one gets control at a time */
+
+#  define PERL_READ_LOCK(mutex)                                     \
+    STMT_START {                                                    \
+        MUTEX_LOCK(&(mutex)->lock);                                 \
+        (mutex)->readers_count++;                                   \
+        MUTEX_UNLOCK(&(mutex)->lock);                               \
+    } STMT_END
+
+#  define PERL_READ_UNLOCK(mutex)                                   \
+    STMT_START {                                                    \
+        MUTEX_LOCK(&(mutex)->lock);                                 \
+        (mutex)->readers_count--;                                   \
+        if ((mutex)->readers_count <= 0) {                          \
+            assert((mutex)->readers_count == 0);                    \
+            COND_SIGNAL(&(mutex)->wakeup);                          \
+            (mutex)->readers_count = 0;                             \
+        }                                                           \
+        MUTEX_UNLOCK(&(mutex)->lock);                               \
+    } STMT_END
+
+#  define PERL_WRITE_LOCK(mutex)                                    \
+    STMT_START {                                                    \
+        MUTEX_LOCK(&(mutex)->lock);                                 \
+        do {                                                        \
+            if ((mutex)->readers_count <= 0) {                      \
+                assert((mutex)->readers_count == 0);                \
+                (mutex)->readers_count = 0;                         \
+                break;                                              \
+            }                                                       \
+            COND_WAIT(&(mutex)->wakeup, &(mutex)->lock);            \
+        }                                                           \
+        while (1);                                                  \
+                                                                    \
+        /* Here, the mutex is locked, with no readers */            \
+    } STMT_END
+
+#  define PERL_WRITE_UNLOCK(mutex)                                  \
+    STMT_START {                                                    \
+        COND_SIGNAL(&(mutex)->wakeup);                              \
+        MUTEX_UNLOCK(&(mutex)->lock);                               \
+    } STMT_END
+
+#  define PERL_RW_MUTEX_INIT(mutex)                                 \
+    STMT_START {                                                    \
+        MUTEX_INIT(&(mutex)->lock);                                 \
+        COND_INIT(&(mutex)->wakeup);                                \
+        (mutex)->readers_count = 0;                                 \
+    } STMT_END
+
+#  define PERL_RW_MUTEX_DESTROY(mutex)                              \
+    STMT_START {                                                    \
+        COND_DESTROY(&(mutex)->wakeup);                             \
+        MUTEX_DESTROY(&(mutex)->lock);                              \
+    } STMT_END
+
+#endif
+
 /* DETACH(t) must only be called while holding t->mutex */
 #ifndef DETACH
 #  define DETACH(t) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_detach((t)->self))) {		\
-	    MUTEX_UNLOCK(&(t)->mutex);				\
-	    Perl_croak_nocontext("panic: DETACH (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
-	}							\
+        int _eC_;						\
+        if ((_eC_ = pthread_detach((t)->self))) {		\
+            MUTEX_UNLOCK(&(t)->mutex);				\
+            Perl_croak_nocontext("panic: DETACH (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
+        }							\
     } STMT_END
 #endif /* DETACH */
 
@@ -293,10 +358,10 @@
 #ifndef JOIN
 #  define JOIN(t, avp) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_join((t)->self, (void**)(avp))))	\
-	    Perl_croak_nocontext("panic: pthread_join (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_join((t)->self, (void**)(avp))))	\
+            Perl_croak_nocontext("panic: pthread_join (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 #endif /* JOIN */
 
@@ -321,10 +386,10 @@
 #ifndef PERL_SET_CONTEXT
 #  define PERL_SET_CONTEXT(t) \
     STMT_START {						\
-	int _eC_;						\
-	if ((_eC_ = pthread_setspecific(PL_thr_key, (void *)(t))))	\
-	    Perl_croak_nocontext("panic: pthread_setspecific (%d) [%s:%d]",	\
-				 _eC_, __FILE__, __LINE__);	\
+        int _eC_;						\
+        if ((_eC_ = pthread_setspecific(PL_thr_key, (void *)(t))))	\
+            Perl_croak_nocontext("panic: pthread_setspecific (%d) [%s:%d]",	\
+                                 _eC_, __FILE__, __LINE__);	\
     } STMT_END
 #endif /* PERL_SET_CONTEXT */
 
@@ -337,10 +402,10 @@
 #ifndef ALLOC_THREAD_KEY
 #  define ALLOC_THREAD_KEY \
     STMT_START {						\
-	if (pthread_key_create(&PL_thr_key, 0)) {		\
+        if (pthread_key_create(&PL_thr_key, 0)) {		\
             PERL_UNUSED_RESULT(write(2, STR_WITH_LEN("panic: pthread_key_create failed\n"))); \
-	    exit(1);						\
-	}							\
+            exit(1);						\
+        }							\
     } STMT_END
 #endif
 
@@ -347,7 +412,7 @@
 #ifndef FREE_THREAD_KEY
 #  define FREE_THREAD_KEY \
     STMT_START {						\
-	pthread_key_delete(PL_thr_key);				\
+        pthread_key_delete(PL_thr_key);				\
     } STMT_END
 #endif
 
@@ -354,16 +419,15 @@
 #ifndef PTHREAD_ATFORK
 #  ifdef HAS_PTHREAD_ATFORK
 #    define PTHREAD_ATFORK(prepare,parent,child)		\
-	pthread_atfork(prepare,parent,child)
+        pthread_atfork(prepare,parent,child)
 #  else
 #    define PTHREAD_ATFORK(prepare,parent,child)		\
-	NOOP
+        NOOP
 #  endif
 #endif
 
 #ifndef THREAD_RET_TYPE
 #  define THREAD_RET_TYPE	void *
-#  define THREAD_RET_CAST(p)	((void *)(p))
 #endif /* THREAD_RET */
 
 #  define LOCK_DOLLARZERO_MUTEX		MUTEX_LOCK(&PL_dollarzero_mutex)
@@ -407,6 +471,15 @@
 #  define COND_DESTROY(c)         NOOP
 #endif
 
+#ifndef PERL_READ_LOCK
+#  define PERL_READ_LOCK          NOOP
+#  define PERL_READ_UNLOCK        NOOP
+#  define PERL_WRITE_LOCK         NOOP
+#  define PERL_WRITE_UNLOCK       NOOP
+#  define PERL_RW_MUTEX_INIT      NOOP
+#  define PERL_RW_MUTEX_DESTROY   NOOP
+#endif
+
 #ifndef LOCK_DOLLARZERO_MUTEX
 #  define LOCK_DOLLARZERO_MUTEX   NOOP
 #endif

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/time64.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/time64.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/time64.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -28,15 +28,7 @@
 #endif
 
 #ifdef HAS_TM_TM_ZONE
-/* If glibc is defined or we are on QNX, use const.
- * Otherwise, if we are on android, use const but
- * not with g++.
- */
-#  if defined(__GLIBC__) || (defined(__ANDROID__) && !defined(__cplusplus)) \
-    || defined(__QNX__) || defined(__CYGWIN__)
-        const
-#  endif
-        char    *tm_zone;
+        const char *tm_zone;
 #endif
 };
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/time64_config.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/time64_config.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/time64_config.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,6 +1,8 @@
 #ifndef PERL_TIME64_CONFIG_H_
 #    define PERL_TIME64_CONFIG_H_
 
+#include "reentr.h"
+
 /* Configuration
    -------------
    Define as appropriate for your system.

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/uconfig.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/uconfig.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/uconfig.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -220,7 +220,7 @@
 
 /* HAS_MBLEN:
  *	This symbol, if defined, indicates that the mblen routine is available
- *	to find the number of bytes in a multibye character.
+ *	to find the number of bytes in a multibyte character.
  */
 /*#define HAS_MBLEN		/ **/
 
@@ -1229,8 +1229,8 @@
  *	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 "/usr/local/lib/perl5/5.32/unknown"		/ **/
-/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.32/unknown"		/ **/
+/*#define ARCHLIB "/usr/local/lib/perl5/5.34/unknown"		/ **/
+/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.34/unknown"		/ **/
 
 /* BIN:
  *	This symbol holds the path of the bin directory where the package will
@@ -1283,8 +1283,8 @@
  *	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 "/usr/local/lib/perl5/5.32"		/**/
-#define PRIVLIB_EXP "/usr/local/lib/perl5/5.32"		/**/
+#define PRIVLIB "/usr/local/lib/perl5/5.34"		/**/
+#define PRIVLIB_EXP "/usr/local/lib/perl5/5.34"		/**/
 
 /* SITEARCH:
  *	This symbol contains the name of the private library for this package.
@@ -1301,8 +1301,8 @@
  *	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 "/usr/local/lib/perl5/5.32/unknown"		/ **/
-/*#define SITEARCH_EXP "/usr/local/lib/perl5/5.32/unknown"		/ **/
+/*#define SITEARCH "/usr/local/lib/perl5/5.34/unknown"		/ **/
+/*#define SITEARCH_EXP "/usr/local/lib/perl5/5.34/unknown"		/ **/
 
 /* SITELIB:
  *	This symbol contains the name of the private library for this package.
@@ -1324,8 +1324,8 @@
  *	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 "/usr/local/lib/perl5/5.32"		/**/
-#define SITELIB_EXP "/usr/local/lib/perl5/5.32"		/**/
+#define SITELIB "/usr/local/lib/perl5/5.34"		/**/
+#define SITELIB_EXP "/usr/local/lib/perl5/5.34"		/**/
 #define SITELIB_STEM "/usr/local/lib/perl5"		/**/
 
 /* PERL_VENDORARCH:
@@ -1732,6 +1732,8 @@
  *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
  *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
  *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
+ *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
+ *	LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
  *	LONG_DOUBLE_IS_VAX_H_FLOAT
  *	LONG_DOUBLE_IS_UNKNOWN_FORMAT
  *	It is only defined if the system supports long doubles.
@@ -1969,11 +1971,11 @@
  *	This symbol, if defined, indicates that the union semun is
  *	defined by including <sys/sem.h>.  If not, the user code
  *	probably needs to define it as:
- *	union semun {
+ *	 union semun {
  *	    int val;
  *	    struct semid_ds *buf;
  *	    unsigned short *array;
- *	}
+ *	 }
  */
 /* USE_SEMCTL_SEMUN:
  *	This symbol, if defined, indicates that union semun is
@@ -2984,7 +2986,7 @@
 
 /* HAS_MEMMEM:
  *	This symbol, if defined, indicates that the memmem routine is
- *	available to return a pointer to the start of the first occurance
+ *	available to return a pointer to the start of the first occurrence
  *	of a substring in a memory area (or NULL if not found).
  *	In glibc, memmem is a GNU extension.  The function is visible in
  *	libc, but the prototype is only visible if _GNU_SOURCE is #defined.
@@ -4212,6 +4214,12 @@
  */
 /*#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.
@@ -4532,6 +4540,19 @@
 /*#define HAS_ENDSERVENT_R	/ **/
 #define ENDSERVENT_R_PROTO 0	/**/
 
+/* GETENV_PRESERVES_OTHER_THREAD:
+ *	This symbol, if defined, indicates that the getenv system call doesn't
+ *	zap the static buffer of getenv() in a different thread.
+ *
+ *	The typical getenv() implementation will return a pointer to the proper
+ *	position in **environ.  But some may instead copy them to a static
+ *	buffer in getenv().  If there is a per-thread instance of that buffer,
+ *	or the return points to **environ, then a many-reader/1-writer mutex
+ *	will work; otherwise an exclusive locking mutex is required to prevent
+ *	races.
+ */
+#define GETENV_PRESERVES_OTHER_THREAD	/**/
+
 /* HAS_GETGRENT_R:
  *	This symbol, if defined, indicates that the getgrent_r routine
  *	is available to getgrent re-entrantly.
@@ -4828,6 +4849,9 @@
 #define L_R_TZSET
 #endif
 
+/* L_R_TZSET:
+ *	If localtime_r() needs tzset, it is defined in this define
+ */
 /* LOCALTIME_R_PROTO:
  *	This symbol encodes the prototype of localtime_r.
  *	It is zero if d_localtime_r is undef, and one of the
@@ -5119,10 +5143,11 @@
  *	This symbol, if defined, indicates that Perl should be built to
  *	use the interpreter-based threading implementation.
  */
-/* USE_5005THREADS:
- *	This symbol, if defined, indicates that Perl should be built to
- *	use the 5.005-based threading implementation.
- *	Only valid up to 5.8.x.
+/* USE_THREADS:
+ *	This symbol, if defined, indicates that Perl should
+ *	be built to use threads.  At present, it is a synonym for
+ *	and USE_ITHREADS, but eventually the source ought to be
+ *	changed to use this to mean _any_ threading implementation.
  */
 /* OLD_PTHREADS_API:
  *	This symbol, if defined, indicates that Perl should
@@ -5133,11 +5158,8 @@
  *	try to use the various _r versions of library functions.
  *	This is extremely experimental.
  */
-/*#define	USE_5005THREADS		/ **/
 /*#define	USE_ITHREADS		/ **/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define		USE_THREADS		/* until src is revised*/
-#endif
+/*#define		USE_THREADS		/ **/
 /*#define	OLD_PTHREADS_API		/ **/
 /*#define	USE_REENTRANT_API	/ **/
 
@@ -5260,6 +5282,6 @@
 #endif
 
 /* Generated from:
- * 14796a77fb4ae3335f5e589a98445bc6e838b688194f6f112537495f0814f5d5 config_h.SH
- * 6e8898de349ca5bd5102aa12be91e6884110157cb9267e661f6fc797bbd54649 uconfig.sh
+ * 6edd641b187b02d0daa8cb53f5d22f2dcca115a0d3e744f51b0292d2db484ca5 config_h.SH
+ * a9ec40c778a205e0256475b5ef025389f7ea06d75d09ac92414f6b99839577e8 uconfig.sh
  * ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/uni_keywords.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/uni_keywords.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/uni_keywords.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -4,6 +4,9 @@
  * Any changes made here will be lost!
  */
 
+
+#if defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD)
+
 #define MPH_VALt I16
 
 /*
@@ -7488,6 +7491,8 @@
     return 0;
 }
 
+#endif /* #if defined(PERL_CORE) || defined(PERL_EXT_RE_BUILD) */
+
 /* Generated from:
  * d60b1a3dffe16c4aaaf3f00d21993bb320d05e9828b106182214764d4c69935c lib/Unicode/UCD.pm
  * ce96627d4fc91b4fd886c409caeb9b76cf7bd345e12f05c6701add7f233f6437 lib/unicore/ArabicShaping.txt
@@ -7537,10 +7542,10 @@
  * baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
  * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
  * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
- * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 28076ceb3f4e2514ea9db243f4b918b9a7c2807b036237e2276b99b2659d9474 lib/unicore/mktables
  * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
- * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
- * 7a7e778e903508b1c244a77bae57ec57606ab775bb5f81719dbb122eb66d4259 regen/mk_invlists.pl
+ * 24120d5e0c9685c442c93bc1dbea9b85ef973bf8e9474baf0e55b160c288226b regen/charset_translations.pl
+ * 9f74e34278592ddf58fef8c32236b294e94ea5e12627f911f4563e8040a07292 regen/mk_PL_charclass.pl
+ * 5eb9e6c825496cc9aa705e3cd33bc6d5a9657dcca16d4c4acc4824ff30b34a26 regen/mk_invlists.pl
  * cf1d68efb7d919d302c4005641eae8d36da6d7850816ad374b0c00b45e609f43 regen/mph.pl
  * ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/unicode_constants.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/unicode_constants.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/unicode_constants.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -22,7 +22,7 @@
  *                with no additional suffix are both string constants */
 
 /*
-=head1 Unicode Support
+=for apidoc_section $unicode
 
 =for apidoc AmnU|const char *|BOM_UTF8
 
@@ -82,12 +82,16 @@
 #   define VT_NATIVE  0x0B    /* U+000B */
 #   define ESC_NATIVE  0x1B    /* U+001B */
 #   define LATIN_SMALL_LETTER_SHARP_S_NATIVE  0xDF    /* U+00DF */
+#   define LATIN_SMALL_LETTER_SHARP_S_UTF8  "\xC3\x9F"    /* U+00DF */
 #   define LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_NATIVE  0xE5    /* U+00E5 */
 #   define LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_NATIVE  0xC5    /* U+00C5 */
 #   define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS_NATIVE  0xFF    /* U+00FF */
 #   define MICRO_SIGN_NATIVE  0xB5    /* U+00B5 */
-#   define MAX_PRINT_A_FOR_USE_ONLY_BY_REGCOMP_DOT_C   0x7E   /* The max code point that isPRINT_A */
+#   define MICRO_SIGN_UTF8  "\xC2\xB5"    /* U+00B5 */
 
+#    ifdef PERL_IN_REGCOMP_C
+#      define MAX_PRINT_A  0x7E   /* The max code point that isPRINT_A */
+#    endif
 #endif	/* ASCII/Latin1 */
 
 #if 'A' == 193 /* EBCDIC 1047 */ \
@@ -125,12 +129,16 @@
 #   define VT_NATIVE  0x0B    /* U+000B */
 #   define ESC_NATIVE  0x27    /* U+001B */
 #   define LATIN_SMALL_LETTER_SHARP_S_NATIVE  0x59    /* U+00DF */
+#   define LATIN_SMALL_LETTER_SHARP_S_UTF8  "\x8A\x73"    /* U+00DF */
 #   define LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_NATIVE  0x47    /* U+00E5 */
 #   define LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_NATIVE  0x67    /* U+00C5 */
 #   define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS_NATIVE  0xDF    /* U+00FF */
 #   define MICRO_SIGN_NATIVE  0xA0    /* U+00B5 */
-#   define MAX_PRINT_A_FOR_USE_ONLY_BY_REGCOMP_DOT_C   0xF9   /* The max code point that isPRINT_A */
+#   define MICRO_SIGN_UTF8  "\x80\x64"    /* U+00B5 */
 
+#    ifdef PERL_IN_REGCOMP_C
+#      define MAX_PRINT_A  0xF9   /* The max code point that isPRINT_A */
+#    endif
 #endif	/* EBCDIC 1047 */
 
 #if 'A' == 193 /* EBCDIC 037 */ \
@@ -168,19 +176,27 @@
 #   define VT_NATIVE  0x0B    /* U+000B */
 #   define ESC_NATIVE  0x27    /* U+001B */
 #   define LATIN_SMALL_LETTER_SHARP_S_NATIVE  0x59    /* U+00DF */
+#   define LATIN_SMALL_LETTER_SHARP_S_UTF8  "\x80\x72"    /* U+00DF */
 #   define LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_NATIVE  0x47    /* U+00E5 */
 #   define LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_NATIVE  0x67    /* U+00C5 */
 #   define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS_NATIVE  0xDF    /* U+00FF */
 #   define MICRO_SIGN_NATIVE  0xA0    /* U+00B5 */
-#   define MAX_PRINT_A_FOR_USE_ONLY_BY_REGCOMP_DOT_C   0xF9   /* The max code point that isPRINT_A */
+#   define MICRO_SIGN_UTF8  "\x78\x63"    /* U+00B5 */
 
+#    ifdef PERL_IN_REGCOMP_C
+#      define MAX_PRINT_A  0xF9   /* The max code point that isPRINT_A */
+#    endif
 #endif	/* EBCDIC 037 */
 
 /* The number of code points not matching \pC */
-#define NON_OTHER_COUNT_FOR_USE_ONLY_BY_REGCOMP_DOT_C  143698
+#ifdef PERL_IN_REGCOMP_C
+#  define NON_OTHER_COUNT  143698
+#endif
 
 /* The highest code point that has any type of case change */
-#define HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C  0x1E943
+#ifdef PERL_IN_UTF8_C
+#  define HIGHEST_CASE_CHANGING_CP  0x1E943
+#endif
 
 #endif /* PERL_UNICODE_CONSTANTS_H_ */
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/unixish.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/unixish.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/unixish.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -137,7 +137,7 @@
 
 #if defined(__amigaos4__)
 #  define PERL_SYS_INIT_BODY(c,v)					\
-	MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT; amigaos4_init_fork_array(); amigaos4_init_environ_sema();
+        MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT; amigaos4_init_fork_array(); amigaos4_init_environ_sema();
 #  define PERL_SYS_TERM_BODY()                         \
     HINTS_REFCNT_TERM; KEYWORD_PLUGIN_MUTEX_TERM;      \
     OP_CHECK_MUTEX_TERM; OP_REFCNT_TERM; PERLIO_TERM;  \
@@ -148,7 +148,7 @@
 
 #ifndef PERL_SYS_INIT_BODY
 #  define PERL_SYS_INIT_BODY(c,v)					\
-	MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT
+        MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT
 #endif
 
 #ifndef PERL_SYS_TERM_BODY

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/utf8.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/utf8.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/utf8.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -35,14 +35,6 @@
 #define FOLD_FLAGS_NOMIX_ASCII  0x4
 
 /*
-=head1 Unicode Support
-L<perlguts/Unicode Support> has an introduction to this API.
-
-See also L</Character classification>,
-and L</Character case changing>.
-Various functions outside this section also work specially with Unicode.
-Search for the string "utf8" in this document.
-
 =for apidoc is_ascii_string
 
 This is a misleadingly-named synonym for L</is_utf8_invariant_string>.
@@ -78,7 +70,7 @@
 #define to_uni_fold(c, p, lenp) _to_uni_fold_flags(c, p, lenp, FOLD_FLAGS_FULL)
 
 #define foldEQ_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2) \
-		    foldEQ_utf8_flags(s1, pe1, l1, u1, s2, pe2, l2, u2, 0)
+                    foldEQ_utf8_flags(s1, pe1, l1, u1, s2, pe2, l2, u2, 0)
 #define FOLDEQ_UTF8_NOMIX_ASCII   (1 << 0)
 #define FOLDEQ_LOCALE             (1 << 1)
 #define FOLDEQ_S1_ALREADY_FOLDED  (1 << 2)
@@ -86,9 +78,6 @@
 #define FOLDEQ_S1_FOLDS_SANE      (1 << 4)
 #define FOLDEQ_S2_FOLDS_SANE      (1 << 5)
 
-#define ibcmp_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2) \
-		    cBOOL(! foldEQ_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2))
-
 #ifdef EBCDIC
 /* The equivalent of these macros but implementing UTF-EBCDIC
    are in the following header file:
@@ -283,7 +272,7 @@
 /* 2**UTF_ACCUMULATION_SHIFT - 1.  This masks out all but the bits that carry
  * real information in a continuation byte.  This turns out to be 0x3F in
  * UTF-8, 0x1F in UTF-EBCDIC. */
-#define UTF_CONTINUATION_MASK  ((U8) ((1U << UTF_ACCUMULATION_SHIFT) - 1))
+#define UTF_CONTINUATION_MASK  ((U8) (nBIT_MASK(UTF_ACCUMULATION_SHIFT)))
 
 /* For use in UTF8_IS_CONTINUATION().  This turns out to be 0xC0 in UTF-8,
  * E0 in UTF-EBCDIC */
@@ -353,7 +342,9 @@
  * ASCII platforms, everything is representable by 7 bytes */
 #if defined(UV_IS_QUAD) || defined(EBCDIC)
 #   define __BASE_UNI_SKIP(uv) (__COMMON_UNI_SKIP(uv)                       \
-     (UV) (uv) < ((UV) 1U << (6 * UTF_ACCUMULATION_SHIFT)) ? 7 : UTF8_MAXBYTES)
+     LIKELY((UV) (uv) < ((UV) 1U << (6 * UTF_ACCUMULATION_SHIFT)))          \
+     ? 7                                                                    \
+     : UTF8_MAXBYTES)
 #else
 #   define __BASE_UNI_SKIP(uv) (__COMMON_UNI_SKIP(uv) 7)
 #endif
@@ -417,7 +408,7 @@
 /* The largest code point representable by two UTF-8 bytes on any platform that
  * Perl runs on.  This value is constrained by EBCDIC which has 5 bits per
  * continuation byte */
-#define MAX_PORTABLE_UTF8_TWO_BYTE (32 * (1U << 5) - 1)
+#define MAX_PORTABLE_UTF8_TWO_BYTE (32 * nBIT_UMAX(5))
 
 /*
 
@@ -461,12 +452,14 @@
  * UTF-8 encoded character that mark it as a start byte and give the number of
  * bytes that comprise the character. 'len' is the number of bytes in the
  * multi-byte sequence. */
-#define UTF_START_MARK(len) (((len) >  7) ? 0xFF : ((U8) (0xFE << (7-(len)))))
+#define UTF_START_MARK(len) (UNLIKELY((len) >  7)           \
+                            ? 0xFF                          \
+                            : ((U8) (0xFE << (7-(len)))))
 
 /* Masks out the initial one bits in a start byte, leaving the real data ones.
  * Doesn't work on an invariant byte.  'len' is the number of bytes in the
  * multi-byte sequence that comprises the character. */
-#define UTF_START_MASK(len) (((len) >= 7) ? 0x00 : (0x1F >> ((len)-2)))
+#define UTF_START_MASK(len) (UNLIKELY((len) >= 7) ? 0x00 : (0x1F >> ((len)-2)))
 
 /* Adds a UTF8 continuation byte 'new' of information to a running total code
  * point 'old' of all the continuation bytes so far.  This is designed to be
@@ -538,16 +531,16 @@
 
 =over
 
-=item L</C<UTF8_SAFE_SKIP>> if you know the maximum ending pointer in the
+=item C<L</UTF8_SAFE_SKIP>> if you know the maximum ending pointer in the
 buffer pointed to by C<s>; or
 
-=item L</C<UTF8_CHK_SKIP>> if you don't know it.
+=item C<L</UTF8_CHK_SKIP>> if you don't know it.
 
 =back
 
 It is better to restructure your code so the end pointer is passed down so that
 you know what it actually is at the point of this call, but if that isn't
-possible, L</C<UTF8_CHK_SKIP>> can minimize the chance of accessing beyond the end
+possible, C<L</UTF8_CHK_SKIP>> can minimize the chance of accessing beyond the end
 of the input buffer.
 
 =cut
@@ -556,7 +549,7 @@
 
 /*
 =for apidoc Am|STRLEN|UTF8_SKIP|char* s
-This is a synonym for L</C<UTF8SKIP>>
+This is a synonym for C<L</UTF8SKIP>>
 
 =cut
 */
@@ -566,8 +559,8 @@
 /*
 =for apidoc Am|STRLEN|UTF8_CHK_SKIP|char* s
 
-This is a safer version of L</C<UTF8SKIP>>, but still not as safe as
-L</C<UTF8_SAFE_SKIP>>.  This version doesn't blindly assume that the input
+This is a safer version of C<L</UTF8SKIP>>, but still not as safe as
+C<L</UTF8_SAFE_SKIP>>.  This version doesn't blindly assume that the input
 string pointed to by C<s> is well-formed, but verifies that there isn't a NUL
 terminating character before the expected end of the next character in C<s>.
 The length C<UTF8_CHK_SKIP> returns stops just before any such NUL.
@@ -578,13 +571,13 @@
 
 This macro is intended to be used by XS modules where the inputs could be
 malformed, and it isn't feasible to restructure to use the safer
-L</C<UTF8_SAFE_SKIP>>, for example when interfacing with a C library.
+C<L</UTF8_SAFE_SKIP>>, for example when interfacing with a C library.
 
 =cut
 */
 
 #define UTF8_CHK_SKIP(s)                                                       \
-            (s[0] == '\0' ? 1 : MIN(UTF8SKIP(s),                               \
+            (UNLIKELY(s[0] == '\0') ? 1 : MIN(UTF8SKIP(s),                     \
                                     my_strnlen((char *) (s), UTF8SKIP(s))))
 /*
 
@@ -596,7 +589,7 @@
 =cut
  */
 #define UTF8_SAFE_SKIP(s, e)  (__ASSERT_((e) >= (s))                \
-                              ((e) - (s)) <= 0                      \
+                              UNLIKELY(((e) - (s)) <= 0)            \
                                ? 0                                  \
                                : MIN(((e) - (s)), UTF8_SKIP(s)))
 
@@ -727,7 +720,7 @@
  * within 'use bytes'.  UTF-8 locales are not tested for here, but perhaps
  * could be */
 #define IN_UNI_8_BIT                                                    \
-	    ((    (      (CopHINTS_get(PL_curcop) & HINT_UNI_8_BIT))    \
+            ((    (      (CopHINTS_get(PL_curcop) & HINT_UNI_8_BIT))    \
                    || (   CopHINTS_get(PL_curcop) & HINT_LOCALE_PARTIAL \
                             /* -1 below is for :not_characters */       \
                        && _is_in_locale_category(FALSE, -1)))           \
@@ -875,17 +868,18 @@
  */
 #ifdef EBCDIC
 #   define UTF8_IS_SUPER(s, e)                                              \
-                  ((    LIKELY((e) > (s) + 4)                               \
-                    &&      NATIVE_UTF8_TO_I8(*(s)) >= 0xF9                 \
-                    && (    NATIVE_UTF8_TO_I8(*(s)) >  0xF9                 \
-                        || (NATIVE_UTF8_TO_I8(*((s) + 1)) >= 0xA2))         \
-                    &&  LIKELY((s) + UTF8SKIP(s) <= (e)))                   \
-                    ?  is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
+                 ((    ((e) > (s) + 4)                                      \
+                   &&          (NATIVE_UTF8_TO_I8(*(s)) >= 0xF9)            \
+                   &&  UNLIKELY(    NATIVE_UTF8_TO_I8(*(s)) >  0xF9         \
+                                || (NATIVE_UTF8_TO_I8(*((s) + 1)) >= 0xA2)) \
+                   &&  LIKELY((s) + UTF8SKIP(s) <= (e)))                    \
+                 ?  is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
 #else
 #   define UTF8_IS_SUPER(s, e)                                              \
-                   ((    LIKELY((e) > (s) + 3)                              \
+                   ((    ((e) > (s) + 3)                                    \
                      &&  (*(U8*) (s)) >= 0xF4                               \
-                     && ((*(U8*) (s)) >  0xF4 || (*((U8*) (s) + 1) >= 0x90))\
+                     && (UNLIKELY(   ((*(U8*) (s)) >  0xF4)                 \
+                                  || (*((U8*) (s) + 1) >= 0x90)))           \
                      &&  LIKELY((s) + UTF8SKIP(s) <= (e)))                  \
                     ?  is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
 #endif
@@ -958,21 +952,22 @@
 
 /* This matches the 2048 code points between UNICODE_SURROGATE_FIRST (0xD800) and
  * UNICODE_SURROGATE_LAST (0xDFFF) */
-#define UNICODE_IS_SURROGATE(uv)        (((UV) (uv) & (~0xFFFF | 0xF800))       \
+#define UNICODE_IS_SURROGATE(uv)  UNLIKELY(((UV) (uv) & (~0xFFFF | 0xF800))     \
                                                                     == 0xD800)
 
-#define UNICODE_IS_REPLACEMENT(uv)	((UV) (uv) == UNICODE_REPLACEMENT)
-#define UNICODE_IS_BYTE_ORDER_MARK(uv)	((UV) (uv) == UNICODE_BYTE_ORDER_MARK)
+#define UNICODE_IS_REPLACEMENT(uv)  UNLIKELY((UV) (uv) == UNICODE_REPLACEMENT)
+#define UNICODE_IS_BYTE_ORDER_MARK(uv)	UNLIKELY((UV) (uv)                      \
+                                                    == UNICODE_BYTE_ORDER_MARK)
 
 /* Is 'uv' one of the 32 contiguous-range noncharacters? */
-#define UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv)      ((UV) (uv) >= 0xFDD0         \
-                                                 && (UV) (uv) <= 0xFDEF)
+#define UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv)   UNLIKELY((UV) (uv) >= 0xFDD0    \
+                                                      && (UV) (uv) <= 0xFDEF)
 
 /* Is 'uv' one of the 34 plane-ending noncharacters 0xFFFE, 0xFFFF, 0x1FFFE,
  * 0x1FFFF, ... 0x10FFFE, 0x10FFFF, given that we know that 'uv' is not above
  * the Unicode legal max */
 #define UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv)                        \
-                                              (((UV) (uv) & 0xFFFE) == 0xFFFE)
+                                      UNLIKELY(((UV) (uv) & 0xFFFE) == 0xFFFE)
 
 #define UNICODE_IS_NONCHAR(uv)                                                  \
     (   UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv)                                   \
@@ -979,7 +974,7 @@
      || (   LIKELY( ! UNICODE_IS_SUPER(uv))                                     \
          && UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv)))
 
-#define UNICODE_IS_SUPER(uv)    ((UV) (uv) > PERL_UNICODE_MAX)
+#define UNICODE_IS_SUPER(uv)    UNLIKELY((UV) (uv) > PERL_UNICODE_MAX)
 
 #define LATIN_SMALL_LETTER_SHARP_S      LATIN_SMALL_LETTER_SHARP_S_NATIVE
 #define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS                                  \
@@ -1018,13 +1013,7 @@
 /* Character classes could also allow \b, but not patterns in general */
 #define UNI_DISPLAY_REGEX	(UNI_DISPLAY_ISPRINT|UNI_DISPLAY_BACKSLASH)
 
-#define ANYOF_FOLD_SHARP_S(node, input, end)	\
-	(ANYOF_BITMAP_TEST(node, LATIN_SMALL_LETTER_SHARP_S) && \
-	 (ANYOF_NONBITMAP(node)) && \
-	 (ANYOF_FLAGS(node) & ANYOF_LOC_NONBITMAP_FOLD) && \
-	 ((end) > (input) + 1) && \
-	 isALPHA_FOLD_EQ((input)[0], 's'))
-
+/* Should be removed; maybe deprecated, but not used in CPAN */
 #define SHARP_S_SKIP 2
 
 #define is_utf8_char_buf(buf, buf_end) isUTF8_CHAR(buf, buf_end)

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -242,7 +242,7 @@
 #if '^' == 95 /* CP 1047 */
 /*      UTF8_CHAR: Matches legal UTF-EBCDIC variant code points up through 0x1FFFFFF
 
-	0xA0 - 0x1FFFFF
+        0xA0 - 0x1FFFFF
 */
 
 /*** GENERATED CODE ***/
@@ -264,11 +264,11 @@
 /*** GENERATED CODE ***/
 #define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part0(s)                  \
 ( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x72 ) ) ?\
-	( LIKELY( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
+        ( LIKELY( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
     : ( 0x73 == ((const U8*)s)[1] ) ?                                             \
-	( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
-	    ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
-	: LIKELY( ( 0x73 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ) ? 4 : 0 )\
+        ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
+            ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
+        : LIKELY( ( 0x73 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ) ? 4 : 0 )\
     : 0 )
 
 
@@ -276,27 +276,27 @@
 #define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part1(s)                  \
 ( ( 0xED == ((const U8*)s)[0] ) ?                                                 \
     ( ( ( ( ((const U8*)s)[1] & 0xEF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xF9 ) == 0x51 ) || ((const U8*)s)[1] == 0x63 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) || ((const U8*)s)[1] == 0x69 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x70 ) ) ?\
-	( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
+        ( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
     : ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x62 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x64 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x68 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x71 ) ) ?\
-	( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
-	    ( LIKELY( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
-	: ( 0x73 == ((const U8*)s)[2] ) ?                                         \
-	    ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ?\
-		( LIKELY( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ? 5 : 0 )\
-	    : LIKELY( ( 0x73 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFE ) == 0x70 ) ) ? 5 : 0 )\
-	: 0 )                                                               \
+        ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
+            ( LIKELY( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
+        : ( 0x73 == ((const U8*)s)[2] ) ?                                         \
+            ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ?\
+                ( LIKELY( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ? 5 : 0 )\
+            : LIKELY( ( 0x73 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFE ) == 0x70 ) ) ? 5 : 0 )\
+        : 0 )                                                               \
     : 0 )                                                                   \
 : ( 0xEE == ((const U8*)s)[0] ) ?                                                 \
     ( ( 0x41 == ((const U8*)s)[1] ) ?                                             \
-	( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
+        ( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                             \
-	( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
-	    ( LIKELY( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
-	: ( 0x73 == ((const U8*)s)[2] ) ?                                         \
-	    ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ?\
-		( LIKELY( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ? 5 : 0 )\
-	    : LIKELY( ( 0x73 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFE ) == 0x70 ) ) ? 5 : 0 )\
-	: 0 )                                                               \
+        ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
+            ( LIKELY( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ) ? 5 : 0 )\
+        : ( 0x73 == ((const U8*)s)[2] ) ?                                         \
+            ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ?\
+                ( LIKELY( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFC ) == 0x70 ) ? 5 : 0 )\
+            : LIKELY( ( 0x73 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( ((const U8*)s)[4] & 0xFE ) == 0x70 ) ) ? 5 : 0 )\
+        : 0 )                                                               \
     : 0 )                                                                   \
 : 0 )
 
@@ -311,15 +311,15 @@
     ( LIKELY( ( ( ( 0x57 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( ((const U8*)s)[1] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
 : ( 0xDD == ((const U8*)s)[0] ) ?                                                 \
     ( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x64 ) || ( 0x67 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x72 ) ) ?\
-	( LIKELY( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
+        ( LIKELY( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
     : ( 0x73 == ((const U8*)s)[1] ) ?                                             \
-	( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x54 ) || ( 0x57 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
-	    ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
-	: ( 0x55 == ((const U8*)s)[2] ) ?                                         \
-	    ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x56 ) ) ? 4 : 0 )\
-	: ( 0x56 == ((const U8*)s)[2] ) ?                                         \
-	    ( LIKELY( ( 0x57 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
-	: LIKELY( ( 0x73 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ) ? 4 : 0 )\
+        ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x54 ) || ( 0x57 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ?\
+            ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
+        : ( 0x55 == ((const U8*)s)[2] ) ?                                         \
+            ( LIKELY( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x56 ) ) ? 4 : 0 )\
+        : ( 0x56 == ((const U8*)s)[2] ) ?                                         \
+            ( LIKELY( ( 0x57 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ? 4 : 0 )\
+        : LIKELY( ( 0x73 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ) ? 4 : 0 )\
     : 0 )                                                                   \
 : ( 0xDE == ((const U8*)s)[0] || 0xE1 == ((const U8*)s)[0] || 0xEB == ((const U8*)s)[0] ) ?   \
     ( LIKELY( ( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( ((const U8*)s)[1] & 0xFC ) == 0x70 ) && ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFC ) == 0x70 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFC ) == 0x70 ) ) ? 4 : 0 )\
@@ -327,8 +327,8 @@
 
 /*      C9_STRICT_UTF8_CHAR: Matches legal Unicode UTF-8 variant code points
                              including non-character code points, no surrogates
-	0x00A0 - 0xD7FF
-	0xE000 - 0x10FFFF
+        0x00A0 - 0xD7FF
+        0xE000 - 0x10FFFF
 */
 /*** GENERATED CODE ***/
 #define is_C9_STRICT_UTF8_CHAR_utf8_no_length_checks(s)             \
@@ -368,15 +368,15 @@
 /*** GENERATED CODE ***/
 #define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part0(s)                  \
 ( ( ( ( ((const U8*)s)[1] & 0xEF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xF9 ) == 0x51 ) || ((const U8*)s)[1] == 0x62 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x64 ) || ( ( ((const U8*)s)[1] & 0xFD ) == 0x68 ) || ((const U8*)s)[1] == 0x71 ) ?\
-	( ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
+        ( ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
     : ( ((const U8*)s)[1] == 0x4A || ((const U8*)s)[1] == 0x52 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x54 ) || ((const U8*)s)[1] == 0x58 || ((const U8*)s)[1] == 0x5F || ((const U8*)s)[1] == 0x63 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x65 ) || ((const U8*)s)[1] == 0x69 || ( ( ((const U8*)s)[1] & 0xFD ) == 0x70 ) ) ?\
-	( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
-	    ( ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
-	: ( 0x72 == ((const U8*)s)[2] ) ?                                   \
-	    ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ?\
-		( ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ? 5 : 0 )\
-	    : ( ( 0x72 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || 0x70 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
-	: 0 )                                                               \
+        ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
+            ( ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
+        : ( 0x72 == ((const U8*)s)[2] ) ?                                   \
+            ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ?\
+                ( ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ? 5 : 0 )\
+            : ( ( 0x72 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || 0x70 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+        : 0 )                                                               \
     : 0 )
 
 
@@ -384,15 +384,15 @@
 #define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part1(s)                  \
 ( ( 0xEE == ((const U8*)s)[0] ) ?                                           \
     ( ( 0x41 == ((const U8*)s)[1] ) ?                                       \
-	( ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
+        ( ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
     : ( 0x42 == ((const U8*)s)[1] ) ?                                       \
-	( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
-	    ( ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
-	: ( 0x72 == ((const U8*)s)[2] ) ?                                   \
-	    ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ?\
-		( ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ? 5 : 0 )\
-	    : ( ( 0x72 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || 0x70 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
-	: 0 )                                                               \
+        ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
+            ( ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ) ? 5 : 0 )\
+        : ( 0x72 == ((const U8*)s)[2] ) ?                                   \
+            ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( ((const U8*)s)[3] & 0xFE ) == 0x70 ) ?\
+                ( ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x72 ) ) ? 5 : 0 )\
+            : ( ( 0x72 == ((const U8*)s)[3] ) && ( ( 0x41 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x59 ) || 0x5F == ((const U8*)s)[4] || ( 0x62 <= ((const U8*)s)[4] && ((const U8*)s)[4] <= 0x6A ) || 0x70 == ((const U8*)s)[4] ) ) ? 5 : 0 )\
+        : 0 )                                                               \
     : 0 )                                                                   \
 : 0 )
 
@@ -406,25 +406,25 @@
 #define is_STRICT_UTF8_CHAR_utf8_no_length_checks_part3(s)                  \
 ( ( 0xDD == ((const U8*)s)[0] ) ?                                           \
     ( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || 0x5F == ((const U8*)s)[1] || ( ((const U8*)s)[1] & 0xFE ) == 0x62 || ( 0x66 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( ((const U8*)s)[1] & 0xFE ) == 0x70 ) ?\
-	( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
+        ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
     : ( 0x72 == ((const U8*)s)[1] ) ?                                       \
-	( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x54 ) || ( 0x57 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
-	    ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
-	: ( 0x55 == ((const U8*)s)[2] ) ?                                   \
-	    ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x56 ) ) ? 4 : 0 )\
-	: ( 0x56 == ((const U8*)s)[2] ) ?                                   \
-	    ( ( ( 0x57 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
-	: ( ( 0x72 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || 0x70 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+        ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x54 ) || ( 0x57 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
+            ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
+        : ( 0x55 == ((const U8*)s)[2] ) ?                                   \
+            ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x56 ) ) ? 4 : 0 )\
+        : ( 0x56 == ((const U8*)s)[2] ) ?                                   \
+            ( ( ( 0x57 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
+        : ( ( 0x72 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || 0x70 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : 0 )                                                                   \
 : ( 0xDE == ((const U8*)s)[0] || 0xE1 == ((const U8*)s)[0] || 0xEB == ((const U8*)s)[0] ) ?\
     ( ( ( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || 0x5F == ((const U8*)s)[1] || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
 : ( 0xDF == ((const U8*)s)[0] || 0xEA == ((const U8*)s)[0] || 0xEC == ((const U8*)s)[0] ) ?\
     ( ( ( 0x41 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x59 ) || 0x5F == ((const U8*)s)[1] || ( 0x62 <= ((const U8*)s)[1] && ((const U8*)s)[1] <= 0x6A ) || ( ((const U8*)s)[1] & 0xFE ) == 0x70 ) ?\
-	( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
+        ( ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x72 ) ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ) ? 4 : 0 )\
     : ( 0x72 == ((const U8*)s)[1] ) ?                                       \
-	( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
-	    ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
-	: ( ( 0x72 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || 0x70 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
+        ( ( ( 0x41 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x59 ) || 0x5F == ((const U8*)s)[2] || ( 0x62 <= ((const U8*)s)[2] && ((const U8*)s)[2] <= 0x6A ) || ( ((const U8*)s)[2] & 0xFE ) == 0x70 ) ?\
+            ( ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || ( 0x70 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x72 ) ) ? 4 : 0 )\
+        : ( ( 0x72 == ((const U8*)s)[2] ) && ( ( 0x41 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x4A ) || ( 0x51 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x59 ) || 0x5F == ((const U8*)s)[3] || ( 0x62 <= ((const U8*)s)[3] && ((const U8*)s)[3] <= 0x6A ) || 0x70 == ((const U8*)s)[3] ) ) ? 4 : 0 )\
     : 0 )                                                                   \
 : ( 0xED == ((const U8*)s)[0] ) ? is_STRICT_UTF8_CHAR_utf8_no_length_checks_part0(s) : is_STRICT_UTF8_CHAR_utf8_no_length_checks_part1(s) )
 
@@ -439,8 +439,8 @@
 
 /*      C9_STRICT_UTF8_CHAR: Matches legal Unicode UTF-8 variant code points
                              including non-character code points, no surrogates
-	0x00A0 - 0xD7FF
-	0xE000 - 0x10FFFF
+        0x00A0 - 0xD7FF
+        0xE000 - 0x10FFFF
 */
 /*** GENERATED CODE ***/
 #define is_C9_STRICT_UTF8_CHAR_utf8_no_length_checks_part0(s)               \

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/util.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/util.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/util.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -14,30 +14,30 @@
 
 #ifdef VMS
 #  define PERL_FILE_IS_ABSOLUTE(f) \
-	(*(f) == '/'							\
-	 || (strchr(f,':')						\
-	     || ((*(f) == '[' || *(f) == '<')				\
-		 && (isWORDCHAR((f)[1]) || memCHRs("$-_]>",(f)[1])))))
+        (*(f) == '/'							\
+         || (strchr(f,':')						\
+             || ((*(f) == '[' || *(f) == '<')				\
+                 && (isWORDCHAR((f)[1]) || memCHRs("$-_]>",(f)[1])))))
 
 #elif defined(WIN32) || defined(__CYGWIN__)
 #  define PERL_FILE_IS_ABSOLUTE(f) \
-	(*(f) == '/' || *(f) == '\\'		/* UNC/rooted path */	\
-	 || ((f)[0] && (f)[1] == ':'))		/* drive name */
+        (*(f) == '/' || *(f) == '\\'		/* UNC/rooted path */	\
+         || ((f)[0] && (f)[1] == ':'))		/* drive name */
 #elif defined(NETWARE)
 #  define PERL_FILE_IS_ABSOLUTE(f) \
-	(((f)[0] && (f)[1] == ':')		/* drive name */	\
-	 || ((f)[0] == '\\' && (f)[1] == '\\')	/* UNC path */	\
-	 ||	((f)[3] == ':'))				/* volume name, currently only sys */
-#elif defined(DOSISH) || defined(__SYMBIAN32__)
+        (((f)[0] && (f)[1] == ':')		/* drive name */	\
+         || ((f)[0] == '\\' && (f)[1] == '\\')	/* UNC path */	\
+         ||	((f)[3] == ':'))				/* volume name, currently only sys */
+#elif defined(DOSISH)
 #  define PERL_FILE_IS_ABSOLUTE(f) \
-	(*(f) == '/'							\
-	 || ((f)[0] && (f)[1] == ':'))		/* drive name */
-#else	/* NEITHER DOSISH NOR SYMBIANISH */
+        (*(f) == '/'							\
+         || ((f)[0] && (f)[1] == ':'))		/* drive name */
+#else	/* NOT DOSISH */
 #  define PERL_FILE_IS_ABSOLUTE(f)	(*(f) == '/')
 #endif
 
 /*
-=head1 Miscellaneous Functions
+=for apidoc_section $string
 
 =for apidoc ibcmp
 
@@ -47,10 +47,16 @@
 
 This is a synonym for S<C<(! foldEQ_locale())>>
 
+=for apidoc ibcmp_utf8
+
+This is a synonym for S<C<(! foldEQ_utf8())>>
+
 =cut
 */
 #define ibcmp(s1, s2, len)         cBOOL(! foldEQ(s1, s2, len))
 #define ibcmp_locale(s1, s2, len)  cBOOL(! foldEQ_locale(s1, s2, len))
+#define ibcmp_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2) \
+                    cBOOL(! foldEQ_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2))
 
 /* outside the core, perl.h undefs HAS_QUAD if IV isn't 64-bit
    We can't swap this to HAS_QUAD, because the logic here affects the type of
@@ -242,7 +248,7 @@
 */
 
 
-#define instr(haystack, needle) strstr(haystack, needle)
+#define instr(haystack, needle) strstr((char *) haystack, (char *) needle)
 
 #ifdef HAS_MEMMEM
 #   define ninstr(big, bigend, little, lend)                                \

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/uudmap.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/uudmap.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/uudmap.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,3 +1,8 @@
+/* ..\uudmap.h:
+ * THIS FILE IS AUTO-GENERATED DURING THE BUILD by: ..\generate_uudmap.exe
+ *
+ * These values will populate PL_uumap[], as used by unpack('u')
+*/
 {
     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, 0, 0, 0, 0, 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/vdir.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/vdir.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/vdir.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -34,25 +34,25 @@
 
     inline char* GetCurrentDirectoryA(int dwBufSize, char *lpBuffer)
     {
-	char* ptr = dirTableA[nDefault];
-	while (--dwBufSize)
-	{
-	    if ((*lpBuffer++ = *ptr++) == '\0')
-		break;
-	}
+        char* ptr = dirTableA[nDefault];
+        while (--dwBufSize)
+        {
+            if ((*lpBuffer++ = *ptr++) == '\0')
+                break;
+        }
         *lpBuffer = '\0';
-	return /* unused */ NULL;
+        return /* unused */ NULL;
     };
     inline WCHAR* GetCurrentDirectoryW(int dwBufSize, WCHAR *lpBuffer)
     {
-	WCHAR* ptr = dirTableW[nDefault];
-	while (--dwBufSize)
-	{
-	    if ((*lpBuffer++ = *ptr++) == '\0')
-		break;
-	}
+        WCHAR* ptr = dirTableW[nDefault];
+        while (--dwBufSize)
+        {
+            if ((*lpBuffer++ = *ptr++) == '\0')
+                break;
+        }
         *lpBuffer = '\0';
-	return /* unused */ NULL;
+        return /* unused */ NULL;
     };
 
     DWORD CalculateEnvironmentSpace(void);
@@ -66,54 +66,54 @@
 
     inline const char *GetDefaultDirA(void)
     {
-	return dirTableA[nDefault];
+        return dirTableA[nDefault];
     };
     inline void SetDefaultDirA(char const *pPath, int index)
     {
-	SetDirA(pPath, index);
-	nDefault = index;
+        SetDirA(pPath, index);
+        nDefault = index;
     };
     inline const WCHAR *GetDefaultDirW(void)
     {
-	return dirTableW[nDefault];
+        return dirTableW[nDefault];
     };
     inline void SetDefaultDirW(WCHAR const *pPath, int index)
     {
-	SetDirW(pPath, index);
-	nDefault = index;
+        SetDirW(pPath, index);
+        nDefault = index;
     };
     inline const char *GetDirA(int index)
     {
-	char *ptr = dirTableA[index];
-	if (!ptr) {
-	    /* simulate the existence of this drive */
-	    ptr = szLocalBufferA;
-	    ptr[0] = 'A' + index;
-	    ptr[1] = ':';
-	    ptr[2] = '\\';
-	    ptr[3] = 0;
-	}
-	return ptr;
+        char *ptr = dirTableA[index];
+        if (!ptr) {
+            /* simulate the existence of this drive */
+            ptr = szLocalBufferA;
+            ptr[0] = 'A' + index;
+            ptr[1] = ':';
+            ptr[2] = '\\';
+            ptr[3] = 0;
+        }
+        return ptr;
     };
     inline const WCHAR *GetDirW(int index)
     {
-	WCHAR *ptr = dirTableW[index];
-	if (!ptr) {
-	    /* simulate the existence of this drive */
-	    ptr = szLocalBufferW;
-	    ptr[0] = 'A' + index;
-	    ptr[1] = ':';
-	    ptr[2] = '\\';
-	    ptr[3] = 0;
-	}
-	return ptr;
+        WCHAR *ptr = dirTableW[index];
+        if (!ptr) {
+            /* simulate the existence of this drive */
+            ptr = szLocalBufferW;
+            ptr[0] = 'A' + index;
+            ptr[1] = ':';
+            ptr[2] = '\\';
+            ptr[3] = 0;
+        }
+        return ptr;
     };
 
     inline int DriveIndex(char chr)
     {
-	if (chr == '\\' || chr == '/')
-	    return ('Z'-'A')+1;
-	return (chr | 0x20)-'a';
+        if (chr == '\\' || chr == '/')
+            return ('Z'-'A')+1;
+        return (chr | 0x20)-'a';
     };
 
     VMem *pMem;
@@ -139,16 +139,16 @@
 
     pMem = p;
     if (pDir) {
-	for (index = 0; index < driveCount; ++index) {
-	    SetDirW(pDir->GetDirW(index), index);
-	}
-	nDefault = pDir->GetDefault();
+        for (index = 0; index < driveCount; ++index) {
+            SetDirW(pDir->GetDirW(index), index);
+        }
+        nDefault = pDir->GetDefault();
     }
     else {
-	int bSave = bManageDirectory;
-	DWORD driveBits = GetLogicalDrives();
+        int bSave = bManageDirectory;
+        DWORD driveBits = GetLogicalDrives();
 
-	bManageDirectory = 0;
+        bManageDirectory = 0;
         WCHAR szBuffer[MAX_PATH*driveCount];
         if (GetLogicalDriveStringsW(sizeof(szBuffer), szBuffer)) {
             WCHAR* pEnv = GetEnvironmentStringsW();
@@ -162,7 +162,7 @@
             FreeEnvironmentStringsW(pEnv);
         }
         SetDefaultW(L".");
-	bManageDirectory = bSave;
+        bManageDirectory = bSave;
   }
 }
 
@@ -172,30 +172,30 @@
     int length = 0;
     WCHAR wBuffer[MAX_PATH+1];
     if (index < driveCount && pPath != NULL) {
-	length = strlen(pPath);
-	pMem->Free(dirTableA[index]);
-	ptr = dirTableA[index] = (char*)pMem->Malloc(length+2);
-	if (ptr != NULL) {
-	    strcpy(ptr, pPath);
-	    ptr += length-1;
-	    chr = *ptr++;
-	    if (chr != '\\' && chr != '/') {
-		*ptr++ = '\\';
-		*ptr = '\0';
-	    }
-	    MultiByteToWideChar(CP_ACP, 0, dirTableA[index], -1,
-		    wBuffer, (sizeof(wBuffer)/sizeof(WCHAR)));
-	    length = wcslen(wBuffer);
-	    pMem->Free(dirTableW[index]);
-	    dirTableW[index] = (WCHAR*)pMem->Malloc((length+1)*2);
-	    if (dirTableW[index] != NULL) {
-		wcscpy(dirTableW[index], wBuffer);
-	    }
-	}
+        length = strlen(pPath);
+        pMem->Free(dirTableA[index]);
+        ptr = dirTableA[index] = (char*)pMem->Malloc(length+2);
+        if (ptr != NULL) {
+            strcpy(ptr, pPath);
+            ptr += length-1;
+            chr = *ptr++;
+            if (chr != '\\' && chr != '/') {
+                *ptr++ = '\\';
+                *ptr = '\0';
+            }
+            MultiByteToWideChar(CP_ACP, 0, dirTableA[index], -1,
+                    wBuffer, (sizeof(wBuffer)/sizeof(WCHAR)));
+            length = wcslen(wBuffer);
+            pMem->Free(dirTableW[index]);
+            dirTableW[index] = (WCHAR*)pMem->Malloc((length+1)*2);
+            if (dirTableW[index] != NULL) {
+                wcscpy(dirTableW[index], wBuffer);
+            }
+        }
     }
 
     if(bManageDirectory)
-	::SetCurrentDirectoryA(pPath);
+        ::SetCurrentDirectoryA(pPath);
 
     return length;
 }
@@ -203,13 +203,13 @@
 void VDir::FromEnvA(char *pEnv, int index)
 {   /* gets the directory for index from the environment variable. */
     while (*pEnv != '\0') {
-	if ((pEnv[0] == '=') && (DriveIndex(pEnv[1]) == index)
+        if ((pEnv[0] == '=') && (DriveIndex(pEnv[1]) == index)
             && pEnv[2] == ':' && pEnv[3] == '=') {
-	    SetDirA(&pEnv[4], index);
-	    break;
-	}
-	else
-	    pEnv += strlen(pEnv)+1;
+            SetDirA(&pEnv[4], index);
+            break;
+        }
+        else
+            pEnv += strlen(pEnv)+1;
     }
 }
 
@@ -216,13 +216,13 @@
 void VDir::FromEnvW(WCHAR *pEnv, int index)
 {   /* gets the directory for index from the environment variable. */
     while (*pEnv != '\0') {
-	if ((pEnv[0] == '=') && (DriveIndex((char)pEnv[1]) == index)
+        if ((pEnv[0] == '=') && (DriveIndex((char)pEnv[1]) == index)
             && pEnv[2] == ':' && pEnv[3] == '=') {
-	    SetDirW(&pEnv[4], index);
-	    break;
-	}
-	else
-	    pEnv += wcslen(pEnv)+1;
+            SetDirW(&pEnv[4], index);
+            break;
+        }
+        else
+            pEnv += wcslen(pEnv)+1;
     }
 }
 
@@ -233,9 +233,9 @@
 
     if (GetFullPathNameA(pDefault, sizeof(szBuffer), szBuffer, &pPtr)) {
         if (*pDefault != '.' && pPtr != NULL)
-	    *pPtr = '\0';
+            *pPtr = '\0';
 
-	SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0]));
+        SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0]));
     }
 }
 
@@ -244,31 +244,31 @@
     WCHAR chr, *ptr;
     int length = 0;
     if (index < driveCount && pPath != NULL) {
-	length = wcslen(pPath);
-	pMem->Free(dirTableW[index]);
-	ptr = dirTableW[index] = (WCHAR*)pMem->Malloc((length+2)*2);
-	if (ptr != NULL) {
+        length = wcslen(pPath);
+        pMem->Free(dirTableW[index]);
+        ptr = dirTableW[index] = (WCHAR*)pMem->Malloc((length+2)*2);
+        if (ptr != NULL) {
             char *ansi;
-	    wcscpy(ptr, pPath);
-	    ptr += length-1;
-	    chr = *ptr++;
-	    if (chr != '\\' && chr != '/') {
-		*ptr++ = '\\';
-		*ptr = '\0';
-	    }
+            wcscpy(ptr, pPath);
+            ptr += length-1;
+            chr = *ptr++;
+            if (chr != '\\' && chr != '/') {
+                *ptr++ = '\\';
+                *ptr = '\0';
+            }
             ansi = win32_ansipath(dirTableW[index]);
-	    length = strlen(ansi);
-	    pMem->Free(dirTableA[index]);
-	    dirTableA[index] = (char*)pMem->Malloc(length+1);
-	    if (dirTableA[index] != NULL) {
-		strcpy(dirTableA[index], ansi);
-	    }
+            length = strlen(ansi);
+            pMem->Free(dirTableA[index]);
+            dirTableA[index] = (char*)pMem->Malloc(length+1);
+            if (dirTableA[index] != NULL) {
+                strcpy(dirTableA[index], ansi);
+            }
             win32_free(ansi);
-	}
+        }
     }
 
     if(bManageDirectory)
-	::SetCurrentDirectoryW(pPath);
+        ::SetCurrentDirectoryW(pPath);
 
     return length;
 }
@@ -280,9 +280,9 @@
 
     if (GetFullPathNameW(pDefault, (sizeof(szBuffer)/sizeof(WCHAR)), szBuffer, &pPtr)) {
         if (*pDefault != '.' && pPtr != NULL)
-	    *pPtr = '\0';
+            *pPtr = '\0';
 
-	SetDefaultDirW(szBuffer, DriveIndex((char)szBuffer[0]));
+        SetDefaultDirW(szBuffer, DriveIndex((char)szBuffer[0]));
     }
 }
 
@@ -314,69 +314,69 @@
     char ch = (pName[0] & ~0x20);
     switch (ch)
     {
-	case 'A': /* AUX */
-	    if (((pName[1] & ~0x20) == 'U')
-		&& ((pName[2] & ~0x20) == 'X')
-		&& !pName[3])
-		    return true;
-	    break;
-	case 'C': /* CLOCK$, COMx,  CON, CONIN$ CONOUT$ */
-	    ch = (pName[1] & ~0x20);
-	    switch (ch)
-	    {
-		case 'L': /* CLOCK$ */
-		    if (((pName[2] & ~0x20) == 'O')
-			&& ((pName[3] & ~0x20) == 'C')
-			&& ((pName[4] & ~0x20) == 'K')
-			&& (pName[5] == '$')
-			&& !pName[6])
-			    return true;
-		    break;
-		case 'O': /* COMx,  CON, CONIN$ CONOUT$ */
-		    if ((pName[2] & ~0x20) == 'M') {
-			if (    inRANGE(pName[3], '1', '9')
-			    && !pName[4])
-			    return true;
-		    }
-		    else if ((pName[2] & ~0x20) == 'N') {
-			if (!pName[3])
-			    return true;
-			else if ((pName[3] & ~0x20) == 'I') {
-			    if (((pName[4] & ~0x20) == 'N')
-				&& (pName[5] == '$')
-				&& !pName[6])
-			    return true;
-			}
-			else if ((pName[3] & ~0x20) == 'O') {
-			    if (((pName[4] & ~0x20) == 'U')
-				&& ((pName[5] & ~0x20) == 'T')
-				&& (pName[6] == '$')
-				&& !pName[7])
-			    return true;
-			}
-		    }
-		    break;
-	    }
-	    break;
-	case 'L': /* LPTx */
-	    if (((pName[1] & ~0x20) == 'U')
-		&& ((pName[2] & ~0x20) == 'X')
-		&&  inRANGE(pName[3], '1', '9')
-		&& !pName[4])
-		    return true;
-	    break;
-	case 'N': /* NUL */
-	    if (((pName[1] & ~0x20) == 'U')
-		&& ((pName[2] & ~0x20) == 'L')
-		&& !pName[3])
-		    return true;
-	    break;
-	case 'P': /* PRN */
-	    if (((pName[1] & ~0x20) == 'R')
-		&& ((pName[2] & ~0x20) == 'N')
-		&& !pName[3])
-		    return true;
-	    break;
+        case 'A': /* AUX */
+            if (((pName[1] & ~0x20) == 'U')
+                && ((pName[2] & ~0x20) == 'X')
+                && !pName[3])
+                    return true;
+            break;
+        case 'C': /* CLOCK$, COMx,  CON, CONIN$ CONOUT$ */
+            ch = (pName[1] & ~0x20);
+            switch (ch)
+            {
+                case 'L': /* CLOCK$ */
+                    if (((pName[2] & ~0x20) == 'O')
+                        && ((pName[3] & ~0x20) == 'C')
+                        && ((pName[4] & ~0x20) == 'K')
+                        && (pName[5] == '$')
+                        && !pName[6])
+                            return true;
+                    break;
+                case 'O': /* COMx,  CON, CONIN$ CONOUT$ */
+                    if ((pName[2] & ~0x20) == 'M') {
+                        if (    inRANGE(pName[3], '1', '9')
+                            && !pName[4])
+                            return true;
+                    }
+                    else if ((pName[2] & ~0x20) == 'N') {
+                        if (!pName[3])
+                            return true;
+                        else if ((pName[3] & ~0x20) == 'I') {
+                            if (((pName[4] & ~0x20) == 'N')
+                                && (pName[5] == '$')
+                                && !pName[6])
+                            return true;
+                        }
+                        else if ((pName[3] & ~0x20) == 'O') {
+                            if (((pName[4] & ~0x20) == 'U')
+                                && ((pName[5] & ~0x20) == 'T')
+                                && (pName[6] == '$')
+                                && !pName[7])
+                            return true;
+                        }
+                    }
+                    break;
+            }
+            break;
+        case 'L': /* LPTx */
+            if (((pName[1] & ~0x20) == 'U')
+                && ((pName[2] & ~0x20) == 'X')
+                &&  inRANGE(pName[3], '1', '9')
+                && !pName[4])
+                    return true;
+            break;
+        case 'N': /* NUL */
+            if (((pName[1] & ~0x20) == 'U')
+                && ((pName[2] & ~0x20) == 'L')
+                && !pName[3])
+                    return true;
+            break;
+        case 'P': /* PRN */
+            if (((pName[1] & ~0x20) == 'R')
+                && ((pName[2] & ~0x20) == 'N')
+                && !pName[3])
+                    return true;
+            break;
     }
     return false;
 }
@@ -392,66 +392,66 @@
     int length = strlen(pInName);
 
     if (!length)
-	return (char*)pInName;
+        return (char*)pInName;
 
     if (length > MAX_PATH) {
-	strncpy(szlBuf, pInName, MAX_PATH);
-	if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) {   
-	    /* absolute path - reduce length by 2 for drive specifier */
-	    szlBuf[MAX_PATH-2] = '\0';
-	}
-	else
-	    szlBuf[MAX_PATH] = '\0';
-	pInName = szlBuf;
+        strncpy(szlBuf, pInName, MAX_PATH);
+        if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) {   
+            /* absolute path - reduce length by 2 for drive specifier */
+            szlBuf[MAX_PATH-2] = '\0';
+        }
+        else
+            szlBuf[MAX_PATH] = '\0';
+        pInName = szlBuf;
     }
     /* strlen(pInName) is now <= MAX_PATH */
 
     if (length > 1 && pInName[1] == ':') {
-	/* has drive letter */
-	if (length > 2 && IsPathSep(pInName[2])) {
-	    /* absolute with drive letter */
-	    DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
-	}
-	else {
-	    /* relative path with drive letter */
+        /* has drive letter */
+        if (length > 2 && IsPathSep(pInName[2])) {
+            /* absolute with drive letter */
+            DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
+        }
+        else {
+            /* relative path with drive letter */
             driveIndex = DriveIndex(*pInName);
             if (driveIndex < 0 || driveIndex >= driveLetterCount)
                 return (char *)pInName;
-	    strcpy(szBuffer, GetDirA(driveIndex));
-	    strcat(szBuffer, &pInName[2]);
-	    if(strlen(szBuffer) > MAX_PATH)
-		szBuffer[MAX_PATH] = '\0';
+            strcpy(szBuffer, GetDirA(driveIndex));
+            strcat(szBuffer, &pInName[2]);
+            if(strlen(szBuffer) > MAX_PATH)
+                szBuffer[MAX_PATH] = '\0';
 
-	    DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
-	}
+            DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
+        }
     }
     else {
-	/* no drive letter */
-	if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
-	    /* UNC name */
-	    DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
-	}
-	else {
-	    strcpy(szBuffer, GetDefaultDirA());
-	    if (IsPathSep(pInName[0])) {
-		/* absolute path */
-		strcpy(&szBuffer[2], pInName);
-		DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
-	    }
-	    else {
-		/* relative path */
-		if (IsSpecialFileName(pInName)) {
-		    return (char*)pInName;
-		}
-		else {
-		    strcat(szBuffer, pInName);
-		    if (strlen(szBuffer) > MAX_PATH)
-			szBuffer[MAX_PATH] = '\0';
+        /* no drive letter */
+        if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
+            /* UNC name */
+            DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
+        }
+        else {
+            strcpy(szBuffer, GetDefaultDirA());
+            if (IsPathSep(pInName[0])) {
+                /* absolute path */
+                strcpy(&szBuffer[2], pInName);
+                DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
+            }
+            else {
+                /* relative path */
+                if (IsSpecialFileName(pInName)) {
+                    return (char*)pInName;
+                }
+                else {
+                    strcat(szBuffer, pInName);
+                    if (strlen(szBuffer) > MAX_PATH)
+                        szBuffer[MAX_PATH] = '\0';
 
-		    DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
-		}
-	    }
-	}
+                    DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA);
+                }
+            }
+        }
     }
 
     return szLocalBufferA;
@@ -465,17 +465,17 @@
     pPtr = MapPathA(lpBuffer);
     length = strlen(pPtr);
     if(length > 3 && IsPathSep(pPtr[length-1])) {
-	/* don't remove the trailing slash from 'x:\'  */
-	pPtr[length-1] = '\0';
+        /* don't remove the trailing slash from 'x:\'  */
+        pPtr[length-1] = '\0';
     }
 
     DWORD r = GetFileAttributesA(pPtr);
     if ((r != 0xffffffff) && (r & FILE_ATTRIBUTE_DIRECTORY))
     {
-	char szBuffer[(MAX_PATH+1)*2];
-	DoGetFullPathNameA(pPtr, sizeof(szBuffer), szBuffer);
-	SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0]));
-	nRet = 0;
+        char szBuffer[(MAX_PATH+1)*2];
+        DoGetFullPathNameA(pPtr, sizeof(szBuffer), szBuffer);
+        SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0]));
+        nRet = 0;
     }
 
     return nRet;
@@ -486,9 +486,9 @@
     int index;
     DWORD dwSize = 0;
     for (index = 0; index < driveCount; ++index) {
-	if (dirTableA[index] != NULL) {
-	    dwSize += strlen(dirTableA[index]) + 5;  /* add 1 for trailing NULL and 4 for '=D:=' */
-	}
+        if (dirTableA[index] != NULL) {
+            dwSize += strlen(dirTableA[index]) + 5;  /* add 1 for trailing NULL and 4 for '=D:=' */
+        }
     }
     return dwSize;
 }
@@ -498,22 +498,22 @@
     int index, length;
     LPSTR lpDirStr;
     for (index = 0; index < driveCount; ++index) {
-	lpDirStr = dirTableA[index];
-	if (lpDirStr != NULL) {
-	    lpStr[0] = '=';
-	    lpStr[1] = lpDirStr[0];
-	    lpStr[2] = '\0';
-	    CharUpper(&lpStr[1]);
-	    lpStr[2] = ':';
-	    lpStr[3] = '=';
-	    strcpy(&lpStr[4], lpDirStr);
-	    length = strlen(lpDirStr);
-	    lpStr += length + 5; /* add 1 for trailing NULL and 4 for '=D:=' */
-	    if (length > 3 && IsPathSep(lpStr[-2])) {
-		lpStr[-2] = '\0';   /* remove the trailing path separator */
-		--lpStr;
-	    }
-	}
+        lpDirStr = dirTableA[index];
+        if (lpDirStr != NULL) {
+            lpStr[0] = '=';
+            lpStr[1] = lpDirStr[0];
+            lpStr[2] = '\0';
+            CharUpper(&lpStr[1]);
+            lpStr[2] = ':';
+            lpStr[3] = '=';
+            strcpy(&lpStr[4], lpDirStr);
+            length = strlen(lpDirStr);
+            lpStr += length + 5; /* add 1 for trailing NULL and 4 for '=D:=' */
+            if (length > 3 && IsPathSep(lpStr[-2])) {
+                lpStr[-2] = '\0';   /* remove the trailing path separator */
+                --lpStr;
+            }
+        }
     }
     return lpStr;
 }
@@ -546,69 +546,69 @@
     WCHAR ch = (pName[0] & ~0x20);
     switch (ch)
     {
-	case 'A': /* AUX */
-	    if (((pName[1] & ~0x20) == 'U')
-		&& ((pName[2] & ~0x20) == 'X')
-		&& !pName[3])
-		    return true;
-	    break;
-	case 'C': /* CLOCK$, COMx,  CON, CONIN$ CONOUT$ */
-	    ch = (pName[1] & ~0x20);
-	    switch (ch)
-	    {
-		case 'L': /* CLOCK$ */
-		    if (((pName[2] & ~0x20) == 'O')
-			&& ((pName[3] & ~0x20) == 'C')
-			&& ((pName[4] & ~0x20) == 'K')
-			&& (pName[5] == '$')
-			&& !pName[6])
-			    return true;
-		    break;
-		case 'O': /* COMx,  CON, CONIN$ CONOUT$ */
-		    if ((pName[2] & ~0x20) == 'M') {
-		        if (    inRANGE(pName[3], '1', '9')
-			    && !pName[4])
-			    return true;
-		    }
-		    else if ((pName[2] & ~0x20) == 'N') {
-			if (!pName[3])
-			    return true;
-			else if ((pName[3] & ~0x20) == 'I') {
-			    if (((pName[4] & ~0x20) == 'N')
-				&& (pName[5] == '$')
-				&& !pName[6])
-			    return true;
-			}
-			else if ((pName[3] & ~0x20) == 'O') {
-			    if (((pName[4] & ~0x20) == 'U')
-				&& ((pName[5] & ~0x20) == 'T')
-				&& (pName[6] == '$')
-				&& !pName[7])
-			    return true;
-			}
-		    }
-		    break;
-	    }
-	    break;
-	case 'L': /* LPTx */
-	    if (((pName[1] & ~0x20) == 'U')
-		&& ((pName[2] & ~0x20) == 'X')
-		&&  inRANGE(pName[3], '1', '9')
-		&& !pName[4])
-		    return true;
-	    break;
-	case 'N': /* NUL */
-	    if (((pName[1] & ~0x20) == 'U')
-		&& ((pName[2] & ~0x20) == 'L')
-		&& !pName[3])
-		    return true;
-	    break;
-	case 'P': /* PRN */
-	    if (((pName[1] & ~0x20) == 'R')
-		&& ((pName[2] & ~0x20) == 'N')
-		&& !pName[3])
-		    return true;
-	    break;
+        case 'A': /* AUX */
+            if (((pName[1] & ~0x20) == 'U')
+                && ((pName[2] & ~0x20) == 'X')
+                && !pName[3])
+                    return true;
+            break;
+        case 'C': /* CLOCK$, COMx,  CON, CONIN$ CONOUT$ */
+            ch = (pName[1] & ~0x20);
+            switch (ch)
+            {
+                case 'L': /* CLOCK$ */
+                    if (((pName[2] & ~0x20) == 'O')
+                        && ((pName[3] & ~0x20) == 'C')
+                        && ((pName[4] & ~0x20) == 'K')
+                        && (pName[5] == '$')
+                        && !pName[6])
+                            return true;
+                    break;
+                case 'O': /* COMx,  CON, CONIN$ CONOUT$ */
+                    if ((pName[2] & ~0x20) == 'M') {
+                        if (    inRANGE(pName[3], '1', '9')
+                            && !pName[4])
+                            return true;
+                    }
+                    else if ((pName[2] & ~0x20) == 'N') {
+                        if (!pName[3])
+                            return true;
+                        else if ((pName[3] & ~0x20) == 'I') {
+                            if (((pName[4] & ~0x20) == 'N')
+                                && (pName[5] == '$')
+                                && !pName[6])
+                            return true;
+                        }
+                        else if ((pName[3] & ~0x20) == 'O') {
+                            if (((pName[4] & ~0x20) == 'U')
+                                && ((pName[5] & ~0x20) == 'T')
+                                && (pName[6] == '$')
+                                && !pName[7])
+                            return true;
+                        }
+                    }
+                    break;
+            }
+            break;
+        case 'L': /* LPTx */
+            if (((pName[1] & ~0x20) == 'U')
+                && ((pName[2] & ~0x20) == 'X')
+                &&  inRANGE(pName[3], '1', '9')
+                && !pName[4])
+                    return true;
+            break;
+        case 'N': /* NUL */
+            if (((pName[1] & ~0x20) == 'U')
+                && ((pName[2] & ~0x20) == 'L')
+                && !pName[3])
+                    return true;
+            break;
+        case 'P': /* PRN */
+            if (((pName[1] & ~0x20) == 'R')
+                && ((pName[2] & ~0x20) == 'N')
+                && !pName[3])
+                    return true;
+            break;
     }
     return false;
 }
@@ -624,66 +624,66 @@
     int length = wcslen(pInName);
 
     if (!length)
-	return (WCHAR*)pInName;
+        return (WCHAR*)pInName;
 
     if (length > MAX_PATH) {
-	wcsncpy(szlBuf, pInName, MAX_PATH);
-	if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) {   
-	    /* absolute path - reduce length by 2 for drive specifier */
-	    szlBuf[MAX_PATH-2] = '\0';
-	}
-	else
-	    szlBuf[MAX_PATH] = '\0';
-	pInName = szlBuf;
+        wcsncpy(szlBuf, pInName, MAX_PATH);
+        if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) {   
+            /* absolute path - reduce length by 2 for drive specifier */
+            szlBuf[MAX_PATH-2] = '\0';
+        }
+        else
+            szlBuf[MAX_PATH] = '\0';
+        pInName = szlBuf;
     }
     /* strlen(pInName) is now <= MAX_PATH */
 
     if (length > 1 && pInName[1] == ':') {
-	/* has drive letter */
-	if (IsPathSep(pInName[2])) {
-	    /* absolute with drive letter */
-	    DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
-	}
-	else {
-	    /* relative path with drive letter */
+        /* has drive letter */
+        if (IsPathSep(pInName[2])) {
+            /* absolute with drive letter */
+            DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+        }
+        else {
+            /* relative path with drive letter */
             driveIndex = DriveIndex(*pInName);
             if (driveIndex < 0 || driveIndex >= driveLetterCount)
                 return (WCHAR *)pInName;
-	    wcscpy(szBuffer, GetDirW(driveIndex));
-	    wcscat(szBuffer, &pInName[2]);
-	    if(wcslen(szBuffer) > MAX_PATH)
-		szBuffer[MAX_PATH] = '\0';
+            wcscpy(szBuffer, GetDirW(driveIndex));
+            wcscat(szBuffer, &pInName[2]);
+            if(wcslen(szBuffer) > MAX_PATH)
+                szBuffer[MAX_PATH] = '\0';
 
-	    DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
-	}
+            DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+        }
     }
     else {
-	/* no drive letter */
-	if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
-	    /* UNC name */
-	    DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
-	}
-	else {
-	    wcscpy(szBuffer, GetDefaultDirW());
-	    if (IsPathSep(pInName[0])) {
-		/* absolute path */
-		wcscpy(&szBuffer[2], pInName);
-		DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
-	    }
-	    else {
-		/* relative path */
-		if (IsSpecialFileName(pInName)) {
-		    return (WCHAR*)pInName;
-		}
-		else {
-		    wcscat(szBuffer, pInName);
-		    if (wcslen(szBuffer) > MAX_PATH)
-			szBuffer[MAX_PATH] = '\0';
+        /* no drive letter */
+        if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
+            /* UNC name */
+            DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+        }
+        else {
+            wcscpy(szBuffer, GetDefaultDirW());
+            if (IsPathSep(pInName[0])) {
+                /* absolute path */
+                wcscpy(&szBuffer[2], pInName);
+                DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+            }
+            else {
+                /* relative path */
+                if (IsSpecialFileName(pInName)) {
+                    return (WCHAR*)pInName;
+                }
+                else {
+                    wcscat(szBuffer, pInName);
+                    if (wcslen(szBuffer) > MAX_PATH)
+                        szBuffer[MAX_PATH] = '\0';
 
-		    DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
-		}
-	    }
-	}
+                    DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
+                }
+            }
+        }
     }
     return szLocalBufferW;
 }
@@ -696,17 +696,17 @@
     pPtr = MapPathW(lpBuffer);
     length = wcslen(pPtr);
     if(length > 3 && IsPathSep(pPtr[length-1])) {
-	/* don't remove the trailing slash from 'x:\'  */
-	pPtr[length-1] = '\0';
+        /* don't remove the trailing slash from 'x:\'  */
+        pPtr[length-1] = '\0';
     }
 
     DWORD r = GetFileAttributesW(pPtr);
     if ((r != 0xffffffff) && (r & FILE_ATTRIBUTE_DIRECTORY))
     {
-	WCHAR wBuffer[(MAX_PATH+1)*2];
-	DoGetFullPathNameW(pPtr, (sizeof(wBuffer)/sizeof(WCHAR)), wBuffer);
-	SetDefaultDirW(wBuffer, DriveIndex((char)wBuffer[0]));
-	nRet = 0;
+        WCHAR wBuffer[(MAX_PATH+1)*2];
+        DoGetFullPathNameW(pPtr, (sizeof(wBuffer)/sizeof(WCHAR)), wBuffer);
+        SetDefaultDirW(wBuffer, DriveIndex((char)wBuffer[0]));
+        nRet = 0;
     }
 
     return nRet;

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/vmem.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/vmem.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/vmem.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -93,7 +93,7 @@
 
     inline BOOL CreateOk(void)
     {
-	return TRUE;
+        return TRUE;
     };
 
 protected:
@@ -100,19 +100,19 @@
 #ifdef _USE_LINKED_LIST
     void LinkBlock(PMEMORY_BLOCK_HEADER ptr)
     {
-	PMEMORY_BLOCK_HEADER next = m_Dummy.pNext;
-	m_Dummy.pNext = ptr;
-	ptr->pPrev = &m_Dummy;
-	ptr->pNext = next;
+        PMEMORY_BLOCK_HEADER next = m_Dummy.pNext;
+        m_Dummy.pNext = ptr;
+        ptr->pPrev = &m_Dummy;
+        ptr->pNext = next;
         ptr->owner = this;
-	next->pPrev = ptr;
+        next->pPrev = ptr;
     }
     void UnlinkBlock(PMEMORY_BLOCK_HEADER ptr)
     {
-	PMEMORY_BLOCK_HEADER next = ptr->pNext;
-	PMEMORY_BLOCK_HEADER prev = ptr->pPrev;
-	prev->pNext = next;
-	next->pPrev = prev;
+        PMEMORY_BLOCK_HEADER next = ptr->pNext;
+        PMEMORY_BLOCK_HEADER prev = ptr->pPrev;
+        prev->pNext = next;
+        next->pPrev = prev;
     }
 
     MEMORY_BLOCK_HEADER	m_Dummy;
@@ -136,7 +136,7 @@
 {
 #ifdef _USE_LINKED_LIST
     while (m_Dummy.pNext != &m_Dummy) {
-	Free(m_Dummy.pNext+1);
+        Free(m_Dummy.pNext+1);
     }
     DeleteCriticalSection(&m_cs);
 #endif
@@ -148,8 +148,8 @@
     GetLock();
     PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)malloc(size+sizeof(MEMORY_BLOCK_HEADER));
     if (!ptr) {
-	FreeLock();
-	return NULL;
+        FreeLock();
+        return NULL;
     }
     LinkBlock(ptr);
     FreeLock();
@@ -163,11 +163,11 @@
 {
 #ifdef _USE_LINKED_LIST
     if (!pMem)
-	return Malloc(size);
+        return Malloc(size);
 
     if (!size) {
-	Free(pMem);
-	return NULL;
+        Free(pMem);
+        return NULL;
     }
 
     GetLock();
@@ -175,8 +175,8 @@
     UnlinkBlock(ptr);
     ptr = (PMEMORY_BLOCK_HEADER)realloc(ptr, size+sizeof(MEMORY_BLOCK_HEADER));
     if (!ptr) {
-	FreeLock();
-	return NULL;
+        FreeLock();
+        return NULL;
     }
     LinkBlock(ptr);
     FreeLock();
@@ -191,25 +191,25 @@
 {
 #ifdef _USE_LINKED_LIST
     if (pMem) {
-	PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)(((char*)pMem)-sizeof(MEMORY_BLOCK_HEADER));
+        PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)(((char*)pMem)-sizeof(MEMORY_BLOCK_HEADER));
         if (ptr->owner != this) {
-	    if (ptr->owner) {
+            if (ptr->owner) {
 #if 1
-	    	int *nowhere = NULL;
-	    	Perl_warn_nocontext("Free to wrong pool %p not %p",this,ptr->owner);
-            	*nowhere = 0; /* this segfault is deliberate, 
-            	                 so you can see the stack trace */
+                int *nowhere = NULL;
+                Perl_warn_nocontext("Free to wrong pool %p not %p",this,ptr->owner);
+                *nowhere = 0; /* this segfault is deliberate, 
+                                 so you can see the stack trace */
 #else
                 ptr->owner->Free(pMem);	
 #endif
-	    }
-	    return;
+            }
+            return;
         }
-	GetLock();
-	UnlinkBlock(ptr);
-	ptr->owner = NULL;
-	free(ptr);
-	FreeLock();
+        GetLock();
+        UnlinkBlock(ptr);
+        ptr->owner = NULL;
+        free(ptr);
+        FreeLock();
     }
 #else /*_USE_LINKED_LIST*/
     free(pMem);
@@ -238,7 +238,7 @@
      * skirt the issue for now. */
     BOOL bAccessed = TryEnterCriticalSection(&m_cs);
     if(bAccessed) {
-	LeaveCriticalSection(&m_cs);
+        LeaveCriticalSection(&m_cs);
     }
     return !bAccessed;
 #else
@@ -251,7 +251,7 @@
 {
     long lCount = InterlockedDecrement(&m_lRefCount);
     if(!lCount)
-	delete this;
+        delete this;
     return lCount;
 }
 
@@ -411,9 +411,9 @@
     inline BOOL CreateOk(void)
     {
 #ifdef _USE_BUDDY_BLOCKS
-	return TRUE;
+        return TRUE;
 #else
-	return m_hHeap != NULL;
+        return m_hHeap != NULL;
 #endif
     };
 
@@ -425,7 +425,7 @@
 
     int HeapAdd(void* ptr, size_t size
 #ifdef USE_BIGBLOCK_ALLOC
-	, BOOL bBigBlock
+        , BOOL bBigBlock
 #endif
     );
 
@@ -434,35 +434,35 @@
 #ifdef _USE_BUDDY_BLOCKS
     inline PBLOCK GetFreeListLink(int index)
     {
-	if (index >= nListEntries)
-	    index = nListEntries-1;
-	return &m_FreeList[index].Dummy[sizeofTag];
+        if (index >= nListEntries)
+            index = nListEntries-1;
+        return &m_FreeList[index].Dummy[sizeofTag];
     }
     inline PBLOCK GetOverSizeFreeList(void)
     {
-	return &m_FreeList[nListEntries-1].Dummy[sizeofTag];
+        return &m_FreeList[nListEntries-1].Dummy[sizeofTag];
     }
     inline PBLOCK GetEOLFreeList(void)
     {
-	return &m_FreeList[nListEntries].Dummy[sizeofTag];
+        return &m_FreeList[nListEntries].Dummy[sizeofTag];
     }
 
     void AddToFreeList(PBLOCK block, size_t size)
     {
-	PBLOCK pFreeList = GetFreeListLink(CalcEntry(size));
-	PBLOCK next = NEXT(pFreeList);
-	NEXT(pFreeList) = block;
-	SetLink(block, pFreeList, next);
-	PREV(next) = block;
+        PBLOCK pFreeList = GetFreeListLink(CalcEntry(size));
+        PBLOCK next = NEXT(pFreeList);
+        NEXT(pFreeList) = block;
+        SetLink(block, pFreeList, next);
+        PREV(next) = block;
     }
 #endif
     inline size_t CalcAllocSize(size_t size)
     {
-	/*
-	 * Adjust the real size of the block to be a multiple of sizeof(long), and add
-	 * the overhead for the boundary tags.  Disallow negative or zero sizes.
-	 */
-	return (size < minBlockSize) ? minAllocSize : (size_t)ROUND_UP(size) + blockOverhead;
+        /*
+         * Adjust the real size of the block to be a multiple of sizeof(long), and add
+         * the overhead for the boundary tags.  Disallow negative or zero sizes.
+         */
+        return (size < minBlockSize) ? minAllocSize : (size_t)ROUND_UP(size) + blockOverhead;
     }
 
 #ifdef _USE_BUDDY_BLOCKS
@@ -491,8 +491,8 @@
     m_lRefCount = 1;
 #ifndef _USE_BUDDY_BLOCKS
     BOOL bRet = (NULL != (m_hHeap = HeapCreate(HEAP_NO_SERIALIZE,
-				lAllocStart,	/* initial size of heap */
-				0)));		/* no upper limit on size of heap */
+                                lAllocStart,	/* initial size of heap */
+                                0)));		/* no upper limit on size of heap */
     ASSERT(bRet);
 #endif
 
@@ -514,14 +514,14 @@
     DeleteCriticalSection(&m_cs);
 #ifdef _USE_BUDDY_BLOCKS
     for(int index = 0; index < m_nHeaps; ++index) {
-	VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
+        VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
     }
 #else /* !_USE_BUDDY_BLOCKS */
 #ifdef USE_BIGBLOCK_ALLOC
     for(int index = 0; index < m_nHeaps; ++index) {
-	if (m_heaps[index].bBigBlock) {
-	    VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
-	}
+        if (m_heaps[index].bBigBlock) {
+            VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
+        }
     }
 #endif
     BOOL bRet = HeapDestroy(m_hHeap);
@@ -533,15 +533,15 @@
 {
     for(int index = 0; index < m_nHeaps; ++index) {
 #ifdef _USE_BUDDY_BLOCKS
-	VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
+        VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
 #else
 #ifdef USE_BIGBLOCK_ALLOC
-	if (m_heaps[index].bBigBlock) {
-	    VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
-	}
-	else
+        if (m_heaps[index].bBigBlock) {
+            VirtualFree(m_heaps[index].base, 0, MEM_RELEASE);
+        }
+        else
 #endif
-	    HeapFree(m_hHeap, HEAP_NO_SERIALIZE, m_heaps[index].base);
+            HeapFree(m_hHeap, HEAP_NO_SERIALIZE, m_heaps[index].base);
 #endif /* _USE_BUDDY_BLOCKS */
     }
 
@@ -559,9 +559,9 @@
      * Set the next allocation size.
      */
     for (int index = 0; index < nListEntries; ++index) {
-	pFreeList = GetFreeListLink(index);
-	SIZE(pFreeList) = PSIZE(pFreeList+minAllocSize) = 0;
-	PREV(pFreeList) = NEXT(pFreeList) = pFreeList;
+        pFreeList = GetFreeListLink(index);
+        SIZE(pFreeList) = PSIZE(pFreeList+minAllocSize) = 0;
+        PREV(pFreeList) = NEXT(pFreeList) = pFreeList;
     }
     pFreeList = GetEOLFreeList();
     SIZE(pFreeList) = PSIZE(pFreeList+minAllocSize) = 0;
@@ -592,7 +592,7 @@
      */
     size_t realsize = CalcAllocSize(size);
     if((int)realsize < minAllocSize || size == 0)
-	return NULL;
+        return NULL;
 
 #ifdef _USE_BUDDY_BLOCKS
     /*
@@ -602,78 +602,78 @@
      * split the block if needed, stop at end of list marker
      */
     {
-	int index = CalcEntry(realsize);
-	if (index < nListEntries-1) {
-	    ptr = GetFreeListLink(index);
-	    lsize = SIZE(ptr);
-	    if (lsize >= realsize) {
-		rem = lsize - realsize;
-		if(rem < minAllocSize) {
-		    /* Unlink the block from the free list. */
-		    Unlink(ptr);
-		}
-		else {
-		    /*
-		     * split the block
-		     * The remainder is big enough to split off into a new block.
-		     * Use the end of the block, resize the beginning of the block
-		     * no need to change the free list.
-		     */
-		    SetTags(ptr, rem);
-		    ptr += SIZE(ptr);
-		    lsize = realsize;
-		}
-		SetTags(ptr, lsize | 1);
-		return ptr;
-	    }
-	    ptr = m_pRover;
-	    lsize = SIZE(ptr);
-	    if (lsize >= realsize) {
-		rem = lsize - realsize;
-		if(rem < minAllocSize) {
-		    /* Unlink the block from the free list. */
-		    Unlink(ptr);
-		}
-		else {
-		    /*
-		     * split the block
-		     * The remainder is big enough to split off into a new block.
-		     * Use the end of the block, resize the beginning of the block
-		     * no need to change the free list.
-		     */
-		    SetTags(ptr, rem);
-		    ptr += SIZE(ptr);
-		    lsize = realsize;
-		}
-		SetTags(ptr, lsize | 1);
-		return ptr;
-	    }
-	    ptr = GetFreeListLink(index+1);
-	    while (NEXT(ptr)) {
-		lsize = SIZE(ptr);
-		if (lsize >= realsize) {
-		    size_t rem = lsize - realsize;
-		    if(rem < minAllocSize) {
-			/* Unlink the block from the free list. */
-			Unlink(ptr);
-		    }
-		    else {
-			/*
-			 * split the block
-			 * The remainder is big enough to split off into a new block.
-			 * Use the end of the block, resize the beginning of the block
-			 * no need to change the free list.
-			 */
-			SetTags(ptr, rem);
-			ptr += SIZE(ptr);
-			lsize = realsize;
-		    }
-		    SetTags(ptr, lsize | 1);
-		    return ptr;
-		}
-		ptr += sizeof(FREE_LIST_ENTRY);
-	    }
-	}
+        int index = CalcEntry(realsize);
+        if (index < nListEntries-1) {
+            ptr = GetFreeListLink(index);
+            lsize = SIZE(ptr);
+            if (lsize >= realsize) {
+                rem = lsize - realsize;
+                if(rem < minAllocSize) {
+                    /* Unlink the block from the free list. */
+                    Unlink(ptr);
+                }
+                else {
+                    /*
+                     * split the block
+                     * The remainder is big enough to split off into a new block.
+                     * Use the end of the block, resize the beginning of the block
+                     * no need to change the free list.
+                     */
+                    SetTags(ptr, rem);
+                    ptr += SIZE(ptr);
+                    lsize = realsize;
+                }
+                SetTags(ptr, lsize | 1);
+                return ptr;
+            }
+            ptr = m_pRover;
+            lsize = SIZE(ptr);
+            if (lsize >= realsize) {
+                rem = lsize - realsize;
+                if(rem < minAllocSize) {
+                    /* Unlink the block from the free list. */
+                    Unlink(ptr);
+                }
+                else {
+                    /*
+                     * split the block
+                     * The remainder is big enough to split off into a new block.
+                     * Use the end of the block, resize the beginning of the block
+                     * no need to change the free list.
+                     */
+                    SetTags(ptr, rem);
+                    ptr += SIZE(ptr);
+                    lsize = realsize;
+                }
+                SetTags(ptr, lsize | 1);
+                return ptr;
+            }
+            ptr = GetFreeListLink(index+1);
+            while (NEXT(ptr)) {
+                lsize = SIZE(ptr);
+                if (lsize >= realsize) {
+                    size_t rem = lsize - realsize;
+                    if(rem < minAllocSize) {
+                        /* Unlink the block from the free list. */
+                        Unlink(ptr);
+                    }
+                    else {
+                        /*
+                         * split the block
+                         * The remainder is big enough to split off into a new block.
+                         * Use the end of the block, resize the beginning of the block
+                         * no need to change the free list.
+                         */
+                        SetTags(ptr, rem);
+                        ptr += SIZE(ptr);
+                        lsize = realsize;
+                    }
+                    SetTags(ptr, lsize | 1);
+                    return ptr;
+                }
+                ptr += sizeof(FREE_LIST_ENTRY);
+            }
+        }
     }
 #endif
 
@@ -684,46 +684,46 @@
     ptr = m_pRover;	/* start searching at rover */
     int loops = 2;	/* allow two times through the loop  */
     for(;;) {
-	lsize = SIZE(ptr);
-	ASSERT((lsize&1)==0);
-	/* is block big enough? */
-	if(lsize >= realsize) {	
-	    /* if the remainder is too small, don't bother splitting the block. */
-	    rem = lsize - realsize;
-	    if(rem < minAllocSize) {
-		if(m_pRover == ptr)
-		    m_pRover = NEXT(ptr);
+        lsize = SIZE(ptr);
+        ASSERT((lsize&1)==0);
+        /* is block big enough? */
+        if(lsize >= realsize) {	
+            /* if the remainder is too small, don't bother splitting the block. */
+            rem = lsize - realsize;
+            if(rem < minAllocSize) {
+                if(m_pRover == ptr)
+                    m_pRover = NEXT(ptr);
 
-		/* Unlink the block from the free list. */
-		Unlink(ptr);
-	    }
-	    else {
-		/*
-		 * split the block
-		 * The remainder is big enough to split off into a new block.
-		 * Use the end of the block, resize the beginning of the block
-		 * no need to change the free list.
-		 */
-		SetTags(ptr, rem);
-		ptr += SIZE(ptr);
-		lsize = realsize;
-	    }
-	    /* Set the boundary tags to mark it as allocated. */
-	    SetTags(ptr, lsize | 1);
-	    return ((void *)ptr);
-	}
+                /* Unlink the block from the free list. */
+                Unlink(ptr);
+            }
+            else {
+                /*
+                 * split the block
+                 * The remainder is big enough to split off into a new block.
+                 * Use the end of the block, resize the beginning of the block
+                 * no need to change the free list.
+                 */
+                SetTags(ptr, rem);
+                ptr += SIZE(ptr);
+                lsize = realsize;
+            }
+            /* Set the boundary tags to mark it as allocated. */
+            SetTags(ptr, lsize | 1);
+            return ((void *)ptr);
+        }
 
-	/*
-	 * This block was unsuitable.  If we've gone through this list once already without
-	 * finding anything, allocate some new memory from the heap and try again.
-	 */
-	ptr = NEXT(ptr);
-	if(ptr == m_pRover) {
-	    if(!(loops-- && Getmem(realsize))) {
-		return NULL;
-	    }
-	    ptr = m_pRover;
-	}
+        /*
+         * This block was unsuitable.  If we've gone through this list once already without
+         * finding anything, allocate some new memory from the heap and try again.
+         */
+        ptr = NEXT(ptr);
+        if(ptr == m_pRover) {
+            if(!(loops-- && Getmem(realsize))) {
+                return NULL;
+            }
+            ptr = m_pRover;
+        }
     }
 }
 
@@ -733,13 +733,13 @@
 
     /* if size is zero, free the block. */
     if(size == 0) {
-	Free(block);
-	return (NULL);
+        Free(block);
+        return (NULL);
     }
 
     /* if block pointer is NULL, do a Malloc(). */
     if(block == NULL)
-	return Malloc(size);
+        return Malloc(size);
 
     /*
      * Grow or shrink the block in place.
@@ -746,11 +746,11 @@
      * if the block grows then the next block will be used if free
      */
     if(Expand(block, size) != NULL)
-	return block;
+        return block;
 
     size_t realsize = CalcAllocSize(size);
     if((int)realsize < minAllocSize)
-	return NULL;
+        return NULL;
 
     /*
      * see if the previous block is free, and is it big enough to cover the new size
@@ -760,46 +760,46 @@
     size_t cursize = SIZE(ptr) & ~1;
     size_t psize = PSIZE(ptr);
     if((psize&1) == 0 && (psize + cursize) >= realsize) {
-	PBLOCK prev = ptr - psize;
-	if(m_pRover == prev)
-	    m_pRover = NEXT(prev);
+        PBLOCK prev = ptr - psize;
+        if(m_pRover == prev)
+            m_pRover = NEXT(prev);
 
-	/* Unlink the next block from the free list. */
-	Unlink(prev);
+        /* Unlink the next block from the free list. */
+        Unlink(prev);
 
-	/* Copy contents of old block to new location, make it the current block. */
-	memmove(prev, ptr, cursize);
-	cursize += psize;	/* combine sizes */
-	ptr = prev;
+        /* Copy contents of old block to new location, make it the current block. */
+        memmove(prev, ptr, cursize);
+        cursize += psize;	/* combine sizes */
+        ptr = prev;
 
-	size_t rem = cursize - realsize;
-	if(rem >= minAllocSize) {
-	    /*
-	     * The remainder is big enough to be a new block.  Set boundary
-	     * tags for the resized block and the new block.
-	     */
-	    prev = ptr + realsize;
-	    /*
-	     * add the new block to the free list.
-	     * next block cannot be free
-	     */
-	    SetTags(prev, rem);
+        size_t rem = cursize - realsize;
+        if(rem >= minAllocSize) {
+            /*
+             * The remainder is big enough to be a new block.  Set boundary
+             * tags for the resized block and the new block.
+             */
+            prev = ptr + realsize;
+            /*
+             * add the new block to the free list.
+             * next block cannot be free
+             */
+            SetTags(prev, rem);
 #ifdef _USE_BUDDY_BLOCKS
-	    AddToFreeList(prev, rem);
+            AddToFreeList(prev, rem);
 #else
-	    AddToFreeList(prev, m_pFreeList);
+            AddToFreeList(prev, m_pFreeList);
 #endif
-	    cursize = realsize;
+            cursize = realsize;
         }
-	/* Set the boundary tags to mark it as allocated. */
-	SetTags(ptr, cursize | 1);
+        /* Set the boundary tags to mark it as allocated. */
+        SetTags(ptr, cursize | 1);
         return ((void *)ptr);
     }
 
     /* Allocate a new block, copy the old to the new, and free the old. */
     if((ptr = (PBLOCK)Malloc(size)) != NULL) {
-	memmove(ptr, block, cursize-blockOverhead);
-	Free(block);
+        memmove(ptr, block, cursize-blockOverhead);
+        Free(block);
     }
     return ((void *)ptr);
 }
@@ -810,7 +810,7 @@
 
     /* Ignore null pointer. */
     if(p == NULL)
-	return;
+        return;
 
     PBLOCK ptr = (PBLOCK)p;
 
@@ -817,8 +817,8 @@
     /* Check for attempt to free a block that's already free. */
     size_t size = SIZE(ptr);
     if((size&1) == 0) {
-	MEMODSlx("Attempt to free previously freed block", (long)p);
-	return;
+        MEMODSlx("Attempt to free previously freed block", (long)p);
+        return;
     }
     size &= ~1;	/* remove allocated tag */
 
@@ -828,12 +828,12 @@
 #endif
     size_t psize = PSIZE(ptr);
     if((psize&1) == 0) {
-	ptr -= psize;	/* point to previous block */
-	size += psize;	/* merge the sizes of the two blocks */
+        ptr -= psize;	/* point to previous block */
+        size += psize;	/* merge the sizes of the two blocks */
 #ifdef _USE_BUDDY_BLOCKS
-	Unlink(ptr);
+        Unlink(ptr);
 #else
-	linked = TRUE;	/* it's already on the free list */
+        linked = TRUE;	/* it's already on the free list */
 #endif
     }
 
@@ -841,15 +841,15 @@
     PBLOCK next = ptr + size;	/* point to next physical block */
     size_t nsize = SIZE(next);
     if((nsize&1) == 0) {
-	/* block is free move rover if needed */
-	if(m_pRover == next)
-	    m_pRover = NEXT(next);
+        /* block is free move rover if needed */
+        if(m_pRover == next)
+            m_pRover = NEXT(next);
 
-	/* unlink the next block from the free list. */
-	Unlink(next);
+        /* unlink the next block from the free list. */
+        Unlink(next);
 
-	/* merge the sizes of this block and the next block. */
-	size += nsize;
+        /* merge the sizes of this block and the next block. */
+        size += nsize;
     }
 
     /* Set the boundary tags for the block; */
@@ -857,10 +857,10 @@
 
     /* Link the block to the head of the free list. */
 #ifdef _USE_BUDDY_BLOCKS
-	AddToFreeList(ptr, size);
+        AddToFreeList(ptr, size);
 #else
     if(!linked) {
-	AddToFreeList(ptr, m_pFreeList);
+        AddToFreeList(ptr, m_pFreeList);
     }
 #endif
 }
@@ -883,7 +883,7 @@
      * skirt the issue for now. */
     BOOL bAccessed = TryEnterCriticalSection(&m_cs);
     if(bAccessed) {
-	LeaveCriticalSection(&m_cs);
+        LeaveCriticalSection(&m_cs);
     }
     return !bAccessed;
 #else
@@ -897,7 +897,7 @@
 {
     long lCount = InterlockedDecrement(&m_lRefCount);
     if(!lCount)
-	delete this;
+        delete this;
     return lCount;
 }
 
@@ -923,30 +923,30 @@
      * adjust up
      */
     if(size < (unsigned long)m_lAllocSize)
-	size = m_lAllocSize;
+        size = m_lAllocSize;
 
     /* Update the size to allocate on the next request */
     if(m_lAllocSize != lAllocMax)
-	m_lAllocSize <<= 2;
+        m_lAllocSize <<= 2;
 
 #ifndef _USE_BUDDY_BLOCKS
     if(m_nHeaps != 0
 #ifdef USE_BIGBLOCK_ALLOC
-	&& !m_heaps[m_nHeaps-1].bBigBlock
+        && !m_heaps[m_nHeaps-1].bBigBlock
 #endif
-		    ) {
-	/* Expand the last allocated heap */
-	ptr = HeapReAlloc(m_hHeap, HEAP_REALLOC_IN_PLACE_ONLY|HEAP_NO_SERIALIZE,
-		m_heaps[m_nHeaps-1].base,
-		m_heaps[m_nHeaps-1].len + size);
-	if(ptr != 0) {
-	    HeapAdd(((char*)ptr) + m_heaps[m_nHeaps-1].len, size
+                    ) {
+        /* Expand the last allocated heap */
+        ptr = HeapReAlloc(m_hHeap, HEAP_REALLOC_IN_PLACE_ONLY|HEAP_NO_SERIALIZE,
+                m_heaps[m_nHeaps-1].base,
+                m_heaps[m_nHeaps-1].len + size);
+        if(ptr != 0) {
+            HeapAdd(((char*)ptr) + m_heaps[m_nHeaps-1].len, size
 #ifdef USE_BIGBLOCK_ALLOC
-		, FALSE
+                , FALSE
 #endif
-		);
-	    return -1;
-	}
+                );
+            return -1;
+        }
     }
 #endif /* _USE_BUDDY_BLOCKS */
 
@@ -957,7 +957,7 @@
      * the above ROUND_UP64K may not have added any memory to include this.
      */
     if(size == requestSize)
-	size = (size_t)ROUND_UP64K(requestSize+(blockOverhead));
+        size = (size_t)ROUND_UP64K(requestSize+(blockOverhead));
 
 Restart:
 #ifdef _USE_BUDDY_BLOCKS
@@ -966,8 +966,8 @@
 #ifdef USE_BIGBLOCK_ALLOC
     bBigBlock = FALSE;
     if (size >= nMaxHeapAllocSize) {
-	bBigBlock = TRUE;
-	ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
+        bBigBlock = TRUE;
+        ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
     }
     else
 #endif
@@ -975,28 +975,28 @@
 #endif /* _USE_BUDDY_BLOCKS */
 
     if (!ptr) {
-	/* try to allocate a smaller chunk */
-	size >>= 1;
-	if(size > requestSize)
-	    goto Restart;
+        /* try to allocate a smaller chunk */
+        size >>= 1;
+        if(size > requestSize)
+            goto Restart;
     }
 
     if(ptr == 0) {
-	MEMODSlx("HeapAlloc failed on size!!!", size);
-	return 0;
+        MEMODSlx("HeapAlloc failed on size!!!", size);
+        return 0;
     }
 
 #ifdef _USE_BUDDY_BLOCKS
     if (HeapAdd(ptr, size)) {
-	VirtualFree(ptr, 0, MEM_RELEASE);
-	return 0;
+        VirtualFree(ptr, 0, MEM_RELEASE);
+        return 0;
     }
 #else
 #ifdef USE_BIGBLOCK_ALLOC
     if (HeapAdd(ptr, size, bBigBlock)) {
-	if (bBigBlock) {
-	    VirtualFree(ptr, 0, MEM_RELEASE);
-	}
+        if (bBigBlock) {
+            VirtualFree(ptr, 0, MEM_RELEASE);
+        }
     }
 #else
     HeapAdd(ptr, size);
@@ -1015,7 +1015,7 @@
 
     /* Check size, then round size down to next long word boundary. */
     if(size < minAllocSize)
-	return -1;
+        return -1;
 
     size = (size_t)ROUND_DOWN(size);
     PBLOCK ptr = (PBLOCK)p;
@@ -1023,47 +1023,47 @@
 #ifdef USE_BIGBLOCK_ALLOC
     if (!bBigBlock) {
 #endif
-	/*
-	 * Search for another heap area that's contiguous with the bottom of this new area.
-	 * (It should be extremely unusual to find one that's contiguous with the top).
-	 */
-	for(index = 0; index < m_nHeaps; ++index) {
-	    if(ptr == m_heaps[index].base + (int)m_heaps[index].len) {
-		/*
-		 * The new block is contiguous with a previously allocated heap area.  Add its
-		 * length to that of the previous heap.  Merge it with the dummy end-of-heap
-		 * area marker of the previous heap.
-		 */
-		m_heaps[index].len += size;
-		break;
-	    }
-	}
+        /*
+         * Search for another heap area that's contiguous with the bottom of this new area.
+         * (It should be extremely unusual to find one that's contiguous with the top).
+         */
+        for(index = 0; index < m_nHeaps; ++index) {
+            if(ptr == m_heaps[index].base + (int)m_heaps[index].len) {
+                /*
+                 * The new block is contiguous with a previously allocated heap area.  Add its
+                 * length to that of the previous heap.  Merge it with the dummy end-of-heap
+                 * area marker of the previous heap.
+                 */
+                m_heaps[index].len += size;
+                break;
+            }
+        }
 #ifdef USE_BIGBLOCK_ALLOC
     }
     else {
-	index = m_nHeaps;
+        index = m_nHeaps;
     }
 #endif
 
     if(index == m_nHeaps) {
-	/* The new block is not contiguous, or is BigBlock.  Add it to the heap list. */
-	if(m_nHeaps == maxHeaps) {
-	    return -1;	/* too many non-contiguous heaps */
-	}
-	m_heaps[m_nHeaps].base = ptr;
-	m_heaps[m_nHeaps].len = size;
+        /* The new block is not contiguous, or is BigBlock.  Add it to the heap list. */
+        if(m_nHeaps == maxHeaps) {
+            return -1;	/* too many non-contiguous heaps */
+        }
+        m_heaps[m_nHeaps].base = ptr;
+        m_heaps[m_nHeaps].len = size;
 #ifdef USE_BIGBLOCK_ALLOC
-	m_heaps[m_nHeaps].bBigBlock = bBigBlock;
+        m_heaps[m_nHeaps].bBigBlock = bBigBlock;
 #endif
-	m_nHeaps++;
+        m_nHeaps++;
 
-	/*
-	 * Reserve the first LONG in the block for the ending boundary tag of a dummy
-	 * block at the start of the heap area.
-	 */
-	size -= blockOverhead;
-	ptr += blockOverhead;
-	PSIZE(ptr) = 1;	/* mark the dummy previous block as allocated */
+        /*
+         * Reserve the first LONG in the block for the ending boundary tag of a dummy
+         * block at the start of the heap area.
+         */
+        size -= blockOverhead;
+        ptr += blockOverhead;
+        PSIZE(ptr) = 1;	/* mark the dummy previous block as allocated */
     }
 
     /*
@@ -1091,7 +1091,7 @@
      */
     size_t realsize = CalcAllocSize(size);
     if((int)realsize < minAllocSize || size == 0)
-	return NULL;
+        return NULL;
 
     PBLOCK ptr = (PBLOCK)block; 
 
@@ -1098,29 +1098,29 @@
     /* if the current size is the same as requested, do nothing. */
     size_t cursize = SIZE(ptr) & ~1;
     if(cursize == realsize) {
-	return block;
+        return block;
     }
 
     /* if the block is being shrunk, convert the remainder of the block into a new free block. */
     if(realsize <= cursize) {
-	size_t nextsize = cursize - realsize;	/* size of new remainder block */
-	if(nextsize >= minAllocSize) {
-	    /*
-	     * Split the block
-	     * Set boundary tags for the resized block and the new block.
-	     */
-	    SetTags(ptr, realsize | 1);
-	    ptr += realsize;
+        size_t nextsize = cursize - realsize;	/* size of new remainder block */
+        if(nextsize >= minAllocSize) {
+            /*
+             * Split the block
+             * Set boundary tags for the resized block and the new block.
+             */
+            SetTags(ptr, realsize | 1);
+            ptr += realsize;
 
-	    /*
-	     * add the new block to the free list.
-	     * call Free to merge this block with next block if free
-	     */
-	    SetTags(ptr, nextsize | 1);
-	    Free(ptr);
-	}
+            /*
+             * add the new block to the free list.
+             * call Free to merge this block with next block if free
+             */
+            SetTags(ptr, nextsize | 1);
+            Free(ptr);
+        }
 
-	return block;
+        return block;
     }
 
     PBLOCK next = ptr + cursize;
@@ -1128,39 +1128,39 @@
 
     /* Check the next block for consistency.*/
     if((nextsize&1) == 0 && (nextsize + cursize) >= realsize) {
-	/*
-	 * The next block is free and big enough.  Add the part that's needed
-	 * to our block, and split the remainder off into a new block.
-	 */
-	if(m_pRover == next)
-	    m_pRover = NEXT(next);
+        /*
+         * The next block is free and big enough.  Add the part that's needed
+         * to our block, and split the remainder off into a new block.
+         */
+        if(m_pRover == next)
+            m_pRover = NEXT(next);
 
-	/* Unlink the next block from the free list. */
-	Unlink(next);
-	cursize += nextsize;	/* combine sizes */
+        /* Unlink the next block from the free list. */
+        Unlink(next);
+        cursize += nextsize;	/* combine sizes */
 
-	size_t rem = cursize - realsize;	/* size of remainder */
-	if(rem >= minAllocSize) {
-	    /*
-	     * The remainder is big enough to be a new block.
-	     * Set boundary tags for the resized block and the new block.
-	     */
-	    next = ptr + realsize;
-	    /*
-	     * add the new block to the free list.
-	     * next block cannot be free
-	     */
-	    SetTags(next, rem);
+        size_t rem = cursize - realsize;	/* size of remainder */
+        if(rem >= minAllocSize) {
+            /*
+             * The remainder is big enough to be a new block.
+             * Set boundary tags for the resized block and the new block.
+             */
+            next = ptr + realsize;
+            /*
+             * add the new block to the free list.
+             * next block cannot be free
+             */
+            SetTags(next, rem);
 #ifdef _USE_BUDDY_BLOCKS
-	    AddToFreeList(next, rem);
+            AddToFreeList(next, rem);
 #else
-	    AddToFreeList(next, m_pFreeList);
+            AddToFreeList(next, m_pFreeList);
 #endif
-	    cursize = realsize;
+            cursize = realsize;
         }
-	/* Set the boundary tags to mark it as allocated. */
-	SetTags(ptr, cursize | 1);
-	return ((void *)ptr);
+        /* Set the boundary tags to mark it as allocated. */
+        SetTags(ptr, cursize | 1);
+        return ((void *)ptr);
     }
     return NULL;
 }
@@ -1172,17 +1172,17 @@
 {
     char szBuffer[512];
     if(str) {
-	if(!m_pLog)
-	    m_pLog = fopen(LOG_FILENAME, "w");
-	sprintf(szBuffer, str, x, y, c);
-	fputs(szBuffer, m_pLog);
+        if(!m_pLog)
+            m_pLog = fopen(LOG_FILENAME, "w");
+        sprintf(szBuffer, str, x, y, c);
+        fputs(szBuffer, m_pLog);
     }
     else {
-	if(m_pLog) {
-	    fflush(m_pLog);
-	    fclose(m_pLog);
-	    m_pLog = 0;
-	}
+        if(m_pLog) {
+            fflush(m_pLog);
+            fclose(m_pLog);
+            m_pLog = 0;
+        }
     }
 }
 
@@ -1189,53 +1189,53 @@
 void VMem::WalkHeap(int complete)
 {
     if(complete) {
-	MemoryUsageMessage(NULL, 0, 0, 0);
-	size_t total = 0;
-	for(int i = 0; i < m_nHeaps; ++i) {
-	    total += m_heaps[i].len;
-	}
-	MemoryUsageMessage("VMem heaps used %d. Total memory %08x\n", m_nHeaps, total, 0);
+        MemoryUsageMessage(NULL, 0, 0, 0);
+        size_t total = 0;
+        for(int i = 0; i < m_nHeaps; ++i) {
+            total += m_heaps[i].len;
+        }
+        MemoryUsageMessage("VMem heaps used %d. Total memory %08x\n", m_nHeaps, total, 0);
 
-	/* Walk all the heaps - verify structures */
-	for(int index = 0; index < m_nHeaps; ++index) {
-	    PBLOCK ptr = m_heaps[index].base;
-	    size_t size = m_heaps[index].len;
+        /* Walk all the heaps - verify structures */
+        for(int index = 0; index < m_nHeaps; ++index) {
+            PBLOCK ptr = m_heaps[index].base;
+            size_t size = m_heaps[index].len;
 #ifndef _USE_BUDDY_BLOCKS
 #ifdef USE_BIGBLOCK_ALLOC
-	    if (!m_heaps[m_nHeaps].bBigBlock)
+            if (!m_heaps[m_nHeaps].bBigBlock)
 #endif
-		ASSERT(HeapValidate(m_hHeap, HEAP_NO_SERIALIZE, ptr));
+                ASSERT(HeapValidate(m_hHeap, HEAP_NO_SERIALIZE, ptr));
 #endif
 
-	    /* set over reserved header block */
-	    size -= blockOverhead;
-	    ptr += blockOverhead;
-	    PBLOCK pLast = ptr + size;
-	    ASSERT(PSIZE(ptr) == 1); /* dummy previous block is allocated */
-	    ASSERT(SIZE(pLast) == 1); /* dummy next block is allocated */
-	    while(ptr < pLast) {
-		ASSERT(ptr > m_heaps[index].base);
-		size_t cursize = SIZE(ptr) & ~1;
-		ASSERT((PSIZE(ptr+cursize) & ~1) == cursize);
-		MemoryUsageMessage("Memory Block %08x: Size %08x %c\n", (long)ptr, cursize, (SIZE(ptr)&1) ? 'x' : ' ');
-		if(!(SIZE(ptr)&1)) {
-		    /* this block is on the free list */
-		    PBLOCK tmp = NEXT(ptr);
-		    while(tmp != ptr) {
-			ASSERT((SIZE(tmp)&1)==0);
-			if(tmp == m_pFreeList)
-			    break;
-			ASSERT(NEXT(tmp));
-			tmp = NEXT(tmp);
-		    }
-		    if(tmp == ptr) {
-			MemoryUsageMessage("Memory Block %08x: Size %08x free but not in free list\n", (long)ptr, cursize, 0);
-		    }
-		}
-		ptr += cursize;
-	    }
-	}
-	MemoryUsageMessage(NULL, 0, 0, 0);
+            /* set over reserved header block */
+            size -= blockOverhead;
+            ptr += blockOverhead;
+            PBLOCK pLast = ptr + size;
+            ASSERT(PSIZE(ptr) == 1); /* dummy previous block is allocated */
+            ASSERT(SIZE(pLast) == 1); /* dummy next block is allocated */
+            while(ptr < pLast) {
+                ASSERT(ptr > m_heaps[index].base);
+                size_t cursize = SIZE(ptr) & ~1;
+                ASSERT((PSIZE(ptr+cursize) & ~1) == cursize);
+                MemoryUsageMessage("Memory Block %08x: Size %08x %c\n", (long)ptr, cursize, (SIZE(ptr)&1) ? 'x' : ' ');
+                if(!(SIZE(ptr)&1)) {
+                    /* this block is on the free list */
+                    PBLOCK tmp = NEXT(ptr);
+                    while(tmp != ptr) {
+                        ASSERT((SIZE(tmp)&1)==0);
+                        if(tmp == m_pFreeList)
+                            break;
+                        ASSERT(NEXT(tmp));
+                        tmp = NEXT(tmp);
+                    }
+                    if(tmp == ptr) {
+                        MemoryUsageMessage("Memory Block %08x: Size %08x free but not in free list\n", (long)ptr, cursize, 0);
+                    }
+                }
+                ptr += cursize;
+            }
+        }
+        MemoryUsageMessage(NULL, 0, 0, 0);
     }
 }
 #endif	/* _DEBUG_MEM */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/vutil.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/vutil.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/vutil.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -1,10 +1,6 @@
 /* This file is part of the "version" CPAN distribution.  Please avoid
    editing it in the perl core. */
 
-#ifndef PERL_CORE
-#  include "ppport.h"
-#endif
-
 /* The MUTABLE_*() macros cast pointers to the types shown, in such a way
  * (compiler permitting) that casting away const-ness will give a warning;
  * e.g.:
@@ -20,12 +16,24 @@
 #  else
 #    define MUTABLE_PTR(p) ((void *) (p))
 #  endif
+#endif
 
+#ifndef MUTABLE_AV
 #  define MUTABLE_AV(p)	((AV *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_CV
 #  define MUTABLE_CV(p)	((CV *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_GV
 #  define MUTABLE_GV(p)	((GV *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_HV
 #  define MUTABLE_HV(p)	((HV *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_IO
 #  define MUTABLE_IO(p)	((IO *)MUTABLE_PTR(p))
+#endif
+#ifndef MUTABLE_SV
 #  define MUTABLE_SV(p)	((SV *)MUTABLE_PTR(p))
 #endif
 
@@ -75,14 +83,6 @@
 #  endif
 #endif
 
-#define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
-#define PERL_DECIMAL_VERSION \
-	PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
-#define PERL_VERSION_LT(r,v,s) \
-	(PERL_DECIMAL_VERSION < PERL_VERSION_DECIMAL(r,v,s))
-#define PERL_VERSION_GE(r,v,s) \
-	(PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
-
 #if PERL_VERSION_LT(5,15,4)
 #  define ISA_VERSION_OBJ(v) (sv_isobject(v) && sv_derived_from(v,"version"))
 #else
@@ -89,7 +89,6 @@
 #  define ISA_VERSION_OBJ(v) (sv_isobject(v) && sv_derived_from_pvn(v,"version",7,0))
 #endif
 
-
 #ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
 #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
 
@@ -224,7 +223,7 @@
 
 
 #if PERL_VERSION_LT(5,27,9)
-#  define LC_NUMERIC_LOCK
+#  define LC_NUMERIC_LOCK(cond)
 #  define LC_NUMERIC_UNLOCK
 #  if PERL_VERSION_LT(5,19,0)
 #    undef STORE_LC_NUMERIC_SET_STANDARD

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/warnings.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/warnings.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/warnings.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -5,9 +5,9 @@
  */
 
 
-#define Off(x)			((x) / 8)
-#define Bit(x)			(1 << ((x) % 8))
-#define IsSet(a, x)		((a)[Off(x)] & Bit(x))
+#define Perl_Warn_Off_(x)           ((x) / 8)
+#define Perl_Warn_Bit_(x)           (1 << ((x) % 8))
+#define PerlWarnIsSet_(a, x)        ((a)[Perl_Warn_Off_(x)] & Perl_Warn_Bit_(x))
 
 
 #define G_WARN_OFF		0 	/* $^W == 0 */
@@ -22,7 +22,7 @@
 #define pWARN_NONE		(STRLEN *) &PL_WARN_NONE   /* no  warnings 'all' */
 
 #define specialWARN(x)		((x) == pWARN_STD || (x) == pWARN_ALL ||	\
-				 (x) == pWARN_NONE)
+                                 (x) == pWARN_NONE)
 
 /* if PL_warnhook is set to this value, then warnings die */
 #define PERL_WARNHOOK_FATAL	(&PL_sv_placeholder)
@@ -131,8 +131,118 @@
 
 #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"
+
+#define isLEXWARN_on \
+        cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD)
+#define isLEXWARN_off \
+        cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD)
+#define isWARN_ONCE	(PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
+#define isWARN_on(c,x)	(PerlWarnIsSet_((U8 *)(c + 1), 2*(x)))
+#define isWARNf_on(c,x)	(PerlWarnIsSet_((U8 *)(c + 1), 2*(x)+1))
+
+#define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
+
+#define free_and_set_cop_warnings(cmp,w) STMT_START { \
+  if (!specialWARN((cmp)->cop_warnings)) PerlMemShared_free((cmp)->cop_warnings); \
+  (cmp)->cop_warnings = w; \
+} STMT_END
+
 /*
+
+=head1 Warning and Dieing
+
+In all these calls, the C<U32 wI<n>> parameters are warning category
+constants.  You can see the ones currently available in
+L<warnings/Category Hierarchy>, just capitalize all letters in the names
+and prefix them by C<WARN_>.  So, for example, the category C<void> used in a
+perl program becomes C<WARN_VOID> when used in XS code and passed to one of
+the calls below.
+
+=for apidoc Am|bool|ckWARN|U32 w
+=for apidoc_item ||ckWARN2|U32 w1|U32 w2
+=for apidoc_item ||ckWARN3|U32 w1|U32 w2|U32 w3
+=for apidoc_item ||ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
+These return a boolean as to whether or not warnings are enabled for any of
+the warning category(ies) parameters:  C<w>, C<w1>, ....
+
+Should any of the categories by default be enabled even if not within the
+scope of S<C<use warnings>>, instead use the C<L</ckWARN_d>> macros.
+
+The categories must be completely independent, one may not be subclassed from
+the other.
+
+=for apidoc Am|bool|ckWARN_d|U32 w
+=for apidoc_item ||ckWARN2_d|U32 w1|U32 w2
+=for apidoc_item ||ckWARN3_d|U32 w1|U32 w2|U32 w3
+=for apidoc_item ||ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
+
+Like C<L</ckWARN>>, but for use if and only if the warning category(ies) is by
+default enabled even if not within the scope of S<C<use warnings>>.
+
+=for apidoc Am|U32|packWARN|U32 w1
+=for apidoc_item ||packWARN2|U32 w1|U32 w2
+=for apidoc_item ||packWARN3|U32 w1|U32 w2|U32 w3
+=for apidoc_item ||packWARN4|U32 w1|U32 w2|U32 w3|U32 w4
+
+These macros are used to pack warning categories into a single U32 to pass to
+macros and functions that take a warning category parameter.  The number of
+categories to pack is given by the name, with a corresponding number of
+category parameters passed.
+
+=cut
+
+*/
+
+#define ckWARN(w)		Perl_ckwarn(aTHX_ packWARN(w))
+
+/* The w1, w2 ... should be independent warnings categories; one shouldn't be
+ * a subcategory of any other */
+
+#define ckWARN2(w1,w2)		Perl_ckwarn(aTHX_ packWARN2(w1,w2))
+#define ckWARN3(w1,w2,w3)	Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4(w1,w2,w3,w4)	Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define ckWARN_d(w)		Perl_ckwarn_d(aTHX_ packWARN(w))
+#define ckWARN2_d(w1,w2)	Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
+#define ckWARN3_d(w1,w2,w3)	Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4_d(w1,w2,w3,w4)	Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define WARNshift		8
+
+#define packWARN(a)		(a                                      )
+
+/* The a, b, ... should be independent warnings categories; one shouldn't be
+ * a subcategory of any other */
+
+#define packWARN2(a,b)		((a) | ((b)<<8)                         )
+#define packWARN3(a,b,c)	((a) | ((b)<<8) | ((c)<<16)             )
+#define packWARN4(a,b,c,d)	((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
+
+#define unpackWARN1(x)		((x)        & 0xFF)
+#define unpackWARN2(x)		(((x) >>8)  & 0xFF)
+#define unpackWARN3(x)		(((x) >>16) & 0xFF)
+#define unpackWARN4(x)		(((x) >>24) & 0xFF)
+
+#define ckDEAD(x)							\
+   (PL_curcop &&                                                        \
+    !specialWARN(PL_curcop->cop_warnings) &&			        \
+    (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) ||	        \
+      (unpackWARN2(x) &&                                                \
+        (isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) ||	        \
+          (unpackWARN3(x) &&                                            \
+            (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) ||	\
+              (unpackWARN4(x) &&                                        \
+                isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x)))))))))
+
+
+
+/*
 =for apidoc Amnh||WARN_ALL
 =for apidoc Amnh||WARN_CLOSURE
 =for apidoc Amnh||WARN_DEPRECATED
@@ -207,135 +317,11 @@
 =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
 */
 
-#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"
-
-#define isLEXWARN_on \
-	cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD)
-#define isLEXWARN_off \
-	cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD)
-#define isWARN_ONCE	(PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
-#define isWARN_on(c,x)	(IsSet((U8 *)(c + 1), 2*(x)))
-#define isWARNf_on(c,x)	(IsSet((U8 *)(c + 1), 2*(x)+1))
-
-#define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
-
-#define free_and_set_cop_warnings(cmp,w) STMT_START { \
-  if (!specialWARN((cmp)->cop_warnings)) PerlMemShared_free((cmp)->cop_warnings); \
-  (cmp)->cop_warnings = w; \
-} STMT_END
-
-/*
-
-=head1 Warning and Dieing
-
-In all these calls, the C<U32 wI<n>> parameters are warning category
-constants.  You can see the ones currently available in
-L<warnings/Category Hierarchy>, just capitalize all letters in the names
-and prefix them by C<WARN_>.  So, for example, the category C<void> used in a
-perl program becomes C<WARN_VOID> when used in XS code and passed to one of
-the calls below.
-
-=for apidoc Am|bool|ckWARN|U32 w
-
-Returns a boolean as to whether or not warnings are enabled for the warning
-category C<w>.  If the category is by default enabled even if not within the
-scope of S<C<use warnings>>, instead use the L</ckWARN_d> macro.
-
-=for apidoc Am|bool|ckWARN_d|U32 w
-
-Like C<L</ckWARN>>, but for use if and only if the warning category is by
-default enabled even if not within the scope of S<C<use warnings>>.
-
-=for apidoc Am|bool|ckWARN2|U32 w1|U32 w2
-
-Like C<L</ckWARN>>, but takes two warnings categories as input, and returns
-TRUE if either is enabled.  If either category is by default enabled even if
-not within the scope of S<C<use warnings>>, instead use the L</ckWARN2_d>
-macro.  The categories must be completely independent, one may not be
-subclassed from the other.
-
-=for apidoc Am|bool|ckWARN2_d|U32 w1|U32 w2
-
-Like C<L</ckWARN2>>, but for use if and only if either warning category is by
-default enabled even if not within the scope of S<C<use warnings>>.
-
-=for apidoc Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3
-
-Like C<L</ckWARN2>>, but takes three warnings categories as input, and returns
-TRUE if any is enabled.  If any of the categories is by default enabled even
-if not within the scope of S<C<use warnings>>, instead use the L</ckWARN3_d>
-macro.  The categories must be completely independent, one may not be
-subclassed from any other.
-
-=for apidoc Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
-
-Like C<L</ckWARN3>>, but for use if and only if any of the warning categories
-is by default enabled even if not within the scope of S<C<use warnings>>.
-
-=for apidoc Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
-
-Like C<L</ckWARN3>>, but takes four warnings categories as input, and returns
-TRUE if any is enabled.  If any of the categories is by default enabled even
-if not within the scope of S<C<use warnings>>, instead use the L</ckWARN4_d>
-macro.  The categories must be completely independent, one may not be
-subclassed from any other.
-
-=for apidoc Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
-
-Like C<L</ckWARN4>>, but for use if and only if any of the warning categories
-is by default enabled even if not within the scope of S<C<use warnings>>.
-
-=cut
-
-*/
-
-#define ckWARN(w)		Perl_ckwarn(aTHX_ packWARN(w))
-
-/* The w1, w2 ... should be independent warnings categories; one shouldn't be
- * a subcategory of any other */
-
-#define ckWARN2(w1,w2)		Perl_ckwarn(aTHX_ packWARN2(w1,w2))
-#define ckWARN3(w1,w2,w3)	Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
-#define ckWARN4(w1,w2,w3,w4)	Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
-
-#define ckWARN_d(w)		Perl_ckwarn_d(aTHX_ packWARN(w))
-#define ckWARN2_d(w1,w2)	Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
-#define ckWARN3_d(w1,w2,w3)	Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
-#define ckWARN4_d(w1,w2,w3,w4)	Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
-
-#define WARNshift		8
-
-#define packWARN(a)		(a                                      )
-
-/* The a, b, ... should be independent warnings categories; one shouldn't be
- * a subcategory of any other */
-
-#define packWARN2(a,b)		((a) | ((b)<<8)                         )
-#define packWARN3(a,b,c)	((a) | ((b)<<8) | ((c)<<16)             )
-#define packWARN4(a,b,c,d)	((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
-
-#define unpackWARN1(x)		((x)        & 0xFF)
-#define unpackWARN2(x)		(((x) >>8)  & 0xFF)
-#define unpackWARN3(x)		(((x) >>16) & 0xFF)
-#define unpackWARN4(x)		(((x) >>24) & 0xFF)
-
-#define ckDEAD(x)							\
-   (PL_curcop &&                                                        \
-    !specialWARN(PL_curcop->cop_warnings) &&			        \
-    (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) ||	        \
-      (unpackWARN2(x) &&                                                \
-	(isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) ||	        \
-	  (unpackWARN3(x) &&                                            \
-	    (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) ||	\
-	      (unpackWARN4(x) &&                                        \
-		isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x)))))))))
-
 /* end of file warnings.h */
 
 /* ex: set ro: */

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/win32.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/win32.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/win32.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -60,9 +60,6 @@
 #  define prime_env_iter()
 #  define WIN32IO_IS_STDIO		/* don't pull in custom stdio layer */
 #  define WIN32SCK_IS_STDSCK		/* don't pull in custom wsock layer */
-#  ifdef PERL_GLOBAL_STRUCT
-#    error PERL_GLOBAL_STRUCT cannot be defined with PERL_IMPLICIT_SYS
-#  endif
 #endif
 
 #ifdef __GNUC__
@@ -114,7 +111,7 @@
 
 #if (defined(__GNUC__) && defined(__MINGW32__) && \
      !defined(__MINGW64_VERSION_MAJOR) && !defined(__clang__) && \
-	((__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 5))))
+        ((__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 5))))
 /* use default fallbacks from perl.h for this particular GCC */
 #else
 #  if !defined(PERLDLL) && !defined(PERL_EXT_RE_BUILD)
@@ -184,10 +181,10 @@
 #endif
 
 struct tms {
-	long	tms_utime;
-	long	tms_stime;
-	long	tms_cutime;
-	long	tms_cstime;
+        long	tms_utime;
+        long	tms_stime;
+        long	tms_cutime;
+        long	tms_cstime;
 };
 
 #ifndef SYS_NMLN
@@ -231,8 +228,6 @@
 #  define WIN32_NO_REGISTRY_M_(x) x,
 #endif
 
-#define PERL_NO_FORCE_LINK		/* no need for PL_force_link_funcs */
-
 #define ENV_IS_CASELESS
 
 #define PIPESOCK_MODE	"b"		/* pipes, sockets default to binmode */
@@ -423,7 +418,9 @@
 #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
@@ -568,7 +565,6 @@
     UINT	timerid;
     unsigned 	poll_count;
     Sighandler_t sigtable[SIG_SIZE];
-    bool sloppystat;
 };
 
 #define WIN32_POLL_INTERVAL 32768
@@ -602,7 +598,6 @@
 #define w32_init_socktype	(PL_sys_intern.thr_intern.Winit_socktype)
 #define w32_use_showwindow	(PL_sys_intern.thr_intern.Wuse_showwindow)
 #define w32_showwindow	(PL_sys_intern.thr_intern.Wshowwindow)
-#define w32_sloppystat	(PL_sys_intern.sloppystat)
 
 #ifdef USE_ITHREADS
 void win32_wait_for_children(pTHX);
@@ -736,5 +731,37 @@
 #  define O_ACCMODE (O_RDWR | O_WRONLY | O_RDONLY)
 #endif
 
+/* ucrt at least seems to allocate a whole bit per type,
+   just mask off one bit from the mask for our symlink
+   file type.
+*/
+#define _S_IFLNK ((unsigned)(_S_IFMT ^ (_S_IFMT & -_S_IFMT)))
+#undef S_ISLNK
+#define S_ISLNK(mode) (((mode) & _S_IFMT) == _S_IFLNK)
+
+/*
+
+The default CRT struct stat uses unsigned short for st_dev and st_ino
+which obviously isn't enough, so we define our own structure.
+
+ */
+
+typedef DWORD Dev_t;
+typedef unsigned __int64 Ino_t;
+
+struct w32_stat {
+    Dev_t st_dev;
+    Ino_t st_ino;
+    unsigned short st_mode;
+    DWORD st_nlink;
+    short st_uid;
+    short st_gid;
+    Dev_t st_rdev;
+    Off_t st_size;
+    time_t st_atime;
+    time_t st_mtime;
+    time_t st_ctime;
+};
+
 #endif /* _INC_WIN32_PERL5 */
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/win32iop.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/win32iop.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/win32iop.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -69,6 +69,7 @@
 DllExport  void		win32_abort(void);
 DllExport  int  	win32_fstat(int fd,Stat_t *sbufptr);
 DllExport  int  	win32_stat(const char *name,Stat_t *sbufptr);
+DllExport  int  	win32_lstat(const char *name,Stat_t *sbufptr);
 DllExport  int		win32_pipe( int *phandles, unsigned int psize, int textmode );
 DllExport  PerlIO*	win32_popen( const char *command, const char *mode );
 DllExport  PerlIO*	win32_popenlist(const char *mode, IV narg, SV **args);
@@ -87,7 +88,7 @@
 DllExport  int		win32_read(int fd, void *buf, unsigned int cnt);
 DllExport  int		win32_write(int fd, const void *buf, unsigned int cnt);
 DllExport  int		win32_spawnvp(int mode, const char *cmdname,
-			      const char *const *argv);
+                              const char *const *argv);
 DllExport  int		win32_mkdir(const char *dir, int mode);
 DllExport  int		win32_rmdir(const char *dir);
 DllExport  int		win32_chdir(const char *dir);
@@ -136,6 +137,8 @@
 DllExport  char*	win32_ansipath(const WCHAR *path);
 DllExport  int		win32_ioctl(int i, unsigned int u, char *data);
 DllExport  int          win32_link(const char *oldname, const char *newname);
+DllExport  int          win32_symlink(const char *oldname, const char *newname);
+DllExport  int          win32_readlink(const char *path, char *buf, size_t bufsiz);
 DllExport  int		win32_unlink(const char *f);
 DllExport  int		win32_utime(const char *f, struct utimbuf *t);
 DllExport  int		win32_gettimeofday(struct timeval *tp, void *not_used);
@@ -241,6 +244,7 @@
 #  undef stat
 #endif
 #define stat(pth,bufptr)   	win32_stat(pth,bufptr)
+#define lstat(pth,bufptr)   	win32_lstat(pth,bufptr)
 #define longpath(pth)   	win32_longpath(pth)
 #define ansipath(pth)   	win32_ansipath(pth)
 #define rename(old,new)		win32_rename(old,new)
@@ -285,7 +289,6 @@
 #define access(p,m)		win32_access(p,m)
 #define chmod(p,m)		win32_chmod(p,m)
 
-
 #if !defined(MYMALLOC) || !defined(PERL_CORE)
 #undef malloc
 #undef calloc
@@ -307,6 +310,8 @@
 #define times			win32_times
 #define ioctl			win32_ioctl
 #define link			win32_link
+#define symlink			win32_symlink
+#define readlink		win32_readlink
 #define unlink			win32_unlink
 #define utime			win32_utime
 #define gettimeofday		win32_gettimeofday

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/win32thread.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/win32thread.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/win32thread.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -24,26 +24,26 @@
 typedef HANDLE perl_mutex;
 #  define MUTEX_INIT(m) \
     STMT_START {						\
-	if ((*(m) = CreateMutex(NULL,FALSE,NULL)) == NULL)	\
-	    Perl_croak_nocontext("panic: MUTEX_INIT");		\
+        if ((*(m) = CreateMutex(NULL,FALSE,NULL)) == NULL)	\
+            Perl_croak_nocontext("panic: MUTEX_INIT");		\
     } STMT_END
 
 #  define MUTEX_LOCK(m) \
     STMT_START {						\
-	if (WaitForSingleObject(*(m),INFINITE) == WAIT_FAILED)	\
-	    Perl_croak_nocontext("panic: MUTEX_LOCK");		\
+        if (WaitForSingleObject(*(m),INFINITE) == WAIT_FAILED)	\
+            Perl_croak_nocontext("panic: MUTEX_LOCK");		\
     } STMT_END
 
 #  define MUTEX_UNLOCK(m) \
     STMT_START {						\
-	if (ReleaseMutex(*(m)) == 0)				\
-	    Perl_croak_nocontext("panic: MUTEX_UNLOCK");	\
+        if (ReleaseMutex(*(m)) == 0)				\
+            Perl_croak_nocontext("panic: MUTEX_UNLOCK");	\
     } STMT_END
 
 #  define MUTEX_DESTROY(m) \
     STMT_START {						\
-	if (CloseHandle(*(m)) == 0)				\
-	    Perl_croak_nocontext("panic: MUTEX_DESTROY");	\
+        if (CloseHandle(*(m)) == 0)				\
+            Perl_croak_nocontext("panic: MUTEX_DESTROY");	\
     } STMT_END
 
 #endif
@@ -54,59 +54,56 @@
  */
 #define COND_INIT(c) \
     STMT_START {						\
-	(c)->waiters = 0;					\
-	(c)->sem = Win_CreateSemaphore(NULL,0,LONG_MAX,NULL);	\
-	if ((c)->sem == NULL)					\
-	    Perl_croak_nocontext("panic: COND_INIT (%ld)",GetLastError());	\
+        (c)->waiters = 0;					\
+        (c)->sem = Win_CreateSemaphore(NULL,0,LONG_MAX,NULL);	\
+        if ((c)->sem == NULL)					\
+            Perl_croak_nocontext("panic: COND_INIT (%ld)",GetLastError());	\
     } STMT_END
 
 #define COND_SIGNAL(c) \
     STMT_START {						\
-	if ((c)->waiters > 0 &&					\
-	    ReleaseSemaphore((c)->sem,1,NULL) == 0)		\
-	    Perl_croak_nocontext("panic: COND_SIGNAL (%ld)",GetLastError());	\
+        if ((c)->waiters > 0 &&					\
+            ReleaseSemaphore((c)->sem,1,NULL) == 0)		\
+            Perl_croak_nocontext("panic: COND_SIGNAL (%ld)",GetLastError());	\
     } STMT_END
 
 #define COND_BROADCAST(c) \
     STMT_START {						\
-	if ((c)->waiters > 0 &&					\
-	    ReleaseSemaphore((c)->sem,(c)->waiters,NULL) == 0)	\
-	    Perl_croak_nocontext("panic: COND_BROADCAST (%ld)",GetLastError());\
+        if ((c)->waiters > 0 &&					\
+            ReleaseSemaphore((c)->sem,(c)->waiters,NULL) == 0)	\
+            Perl_croak_nocontext("panic: COND_BROADCAST (%ld)",GetLastError());\
     } STMT_END
 
 #define COND_WAIT(c, m) \
     STMT_START {						\
-	(c)->waiters++;						\
-	MUTEX_UNLOCK(m);					\
-	/* Note that there's no race here, since a		\
-	 * COND_BROADCAST() on another thread will have seen the\
-	 * right number of waiters (i.e. including this one) */	\
-	if (WaitForSingleObject((c)->sem,INFINITE)==WAIT_FAILED)\
-	    Perl_croak_nocontext("panic: COND_WAIT (%ld)",GetLastError());	\
-	/* XXX there may be an inconsequential race here */	\
-	MUTEX_LOCK(m);						\
-	(c)->waiters--;						\
+        (c)->waiters++;						\
+        MUTEX_UNLOCK(m);					\
+        /* Note that there's no race here, since a		\
+         * COND_BROADCAST() on another thread will have seen the\
+         * right number of waiters (i.e. including this one) */	\
+        if (WaitForSingleObject((c)->sem,INFINITE)==WAIT_FAILED)\
+            Perl_croak_nocontext("panic: COND_WAIT (%ld)",GetLastError());	\
+        /* XXX there may be an inconsequential race here */	\
+        MUTEX_LOCK(m);						\
+        (c)->waiters--;						\
     } STMT_END
 
 #define COND_DESTROY(c) \
     STMT_START {						\
-	(c)->waiters = 0;					\
-	if (CloseHandle((c)->sem) == 0)				\
-	    Perl_croak_nocontext("panic: COND_DESTROY (%ld)",GetLastError());	\
+        (c)->waiters = 0;					\
+        if (CloseHandle((c)->sem) == 0)				\
+            Perl_croak_nocontext("panic: COND_DESTROY (%ld)",GetLastError());	\
     } STMT_END
 
 #define DETACH(t) \
     STMT_START {						\
-	if (CloseHandle((t)->self) == 0) {			\
-	    MUTEX_UNLOCK(&(t)->mutex);				\
-	    Perl_croak_nocontext("panic: DETACH");		\
-	}							\
+        if (CloseHandle((t)->self) == 0) {			\
+            MUTEX_UNLOCK(&(t)->mutex);				\
+            Perl_croak_nocontext("panic: DETACH");		\
+        }							\
     } STMT_END
 
 
-#define THREAD_CREATE(t, f)	Perl_thread_create(t, f)
-#define THREAD_POST_CREATE(t)	NOOP
-
 /* XXX Docs mention that the RTL versions of thread creation routines
  * should be used, but that advice only seems applicable when the RTL
  * is not in a DLL.  RTL DLLs seem to do all of the init/deinit required
@@ -124,15 +121,12 @@
 #  include <process.h>
 #  if defined (_MSC_VER)
 #    define THREAD_RET_TYPE	unsigned __stdcall
-#    define THREAD_RET_CAST(p)	((unsigned)(p))
 #  else
      /* CRTDLL.DLL doesn't allow a return value from thread function! */
 #    define THREAD_RET_TYPE	void __cdecl
-#    define THREAD_RET_CAST(p)	((void)(thr->i.retv = (void *)(p)))
 #  endif
 #else	/* !USE_RTL_THREAD_API */
 #  define THREAD_RET_TYPE	DWORD WINAPI
-#  define THREAD_RET_CAST(p)	((DWORD)(p))
 #endif	/* !USE_RTL_THREAD_API */
 
 typedef THREAD_RET_TYPE thread_func_t(void *);
@@ -154,15 +148,15 @@
 #define INIT_THREADS		NOOP
 #define ALLOC_THREAD_KEY \
     STMT_START {							\
-	if ((PL_thr_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) {		\
-	    PerlIO_printf(PerlIO_stderr(),"panic: TlsAlloc");				\
-	    exit(1);							\
-	}								\
+        if ((PL_thr_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) {		\
+            PerlIO_printf(PerlIO_stderr(),"panic: TlsAlloc");				\
+            exit(1);							\
+        }								\
     } STMT_END
 
 #define FREE_THREAD_KEY \
     STMT_START {							\
-	TlsFree(PL_thr_key);						\
+        TlsFree(PL_thr_key);						\
     } STMT_END
 
 #define PTHREAD_ATFORK(prepare,parent,child)	NOOP
@@ -170,19 +164,19 @@
 #if defined(USE_RTL_THREAD_API) && !defined(_MSC_VER)
 #define JOIN(t, avp)							\
     STMT_START {							\
-	if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED)	\
-	     || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0)	\
-	     || (CloseHandle((t)->self) == 0))				\
-	    Perl_croak_nocontext("panic: JOIN");			\
-	*avp = (AV *)((t)->i.retv);					\
+        if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED)	\
+             || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0)	\
+             || (CloseHandle((t)->self) == 0))				\
+            Perl_croak_nocontext("panic: JOIN");			\
+        *avp = (AV *)((t)->i.retv);					\
     } STMT_END
 #else	/* !USE_RTL_THREAD_API || _MSC_VER */
 #define JOIN(t, avp)							\
     STMT_START {							\
-	if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED)	\
-	     || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0)	\
-	     || (CloseHandle((t)->self) == 0))				\
-	    Perl_croak_nocontext("panic: JOIN");			\
+        if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED)	\
+             || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0)	\
+             || (CloseHandle((t)->self) == 0))				\
+            Perl_croak_nocontext("panic: JOIN");			\
     } STMT_END
 #endif	/* !USE_RTL_THREAD_API || _MSC_VER */
 

Modified: trunk/Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CORE/zaphod32_hash.h	2022-03-14 10:08:50 UTC (rev 62701)
@@ -38,7 +38,7 @@
 #endif
 #endif
 
-#ifndef PERL_SEEN_HV_FUNC_H
+#ifndef PERL_SEEN_HV_FUNC_H_
 #if !defined(U64)
 #include <stdint.h>
 #define U64 uint64_t
@@ -145,7 +145,7 @@
     if (!state[0]) state[0] = 1;
     if (!state[1]) state[1] = 2;
     if (!state[2]) state[2] = 4;
-    /* these are pseduo-randomly selected primes between 2**31 and 2**32
+    /* these are pseudo-randomly selected primes between 2**31 and 2**32
      * (I generated a big list and then randomly chose some from the list) */
     ZAPHOD32_SCRAMBLE32(state[0],0x9fade23b);
     ZAPHOD32_SCRAMBLE32(state[1],0xaa6f908d);

Modified: trunk/Master/tlpkg/tlperl/lib/CPAN/FTP.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CPAN/FTP.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CPAN/FTP.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -15,7 +15,7 @@
 use vars qw(
             $VERSION
 );
-$VERSION = "5.5012";
+$VERSION = "5.5013";
 
 sub _plus_append_open {
     my($fh, $file) = @_;
@@ -38,7 +38,7 @@
     return if defined $ftpstats_size && $ftpstats_size <= 0;
     my $locktype = $fh ? LOCK_EX : LOCK_SH;
     # XXX On Windows flock() implements mandatory locking, so we can
-    # XXX only use shared locking to still allow _yaml_load_file() to
+    # XXX only use shared locking to still allow _yaml_loadfile() to
     # XXX read from the file using a different filehandle.
     $locktype = LOCK_SH if $^O eq "MSWin32";
 

Modified: trunk/Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -11,7 +11,7 @@
 use CPAN::Mirrors ();
 use CPAN::Version ();
 use vars qw($VERSION $auto_config);
-$VERSION = "5.5314";
+$VERSION = "5.5315";
 
 =head1 NAME
 
@@ -59,8 +59,8 @@
 then let the build of this distro fail when it would not represent the
 most up-to-date version of the distro.
 
-Note: choosing anyhing but 'yes' for this option will need
-Devel::DistnameInfo being installed for taking effect.
+Note: choosing anything but 'yes' for this option will need
+CPAN::DistnameInfo being installed for taking effect.
 
 Do you want to allow installing distros that are not indexed as the
 highest distro-version for all contained modules (yes, no, ask/yes,

Modified: trunk/Master/tlpkg/tlperl/lib/CPAN.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/CPAN.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/CPAN.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -2,7 +2,7 @@
 # vim: ts=4 sts=4 sw=4:
 use strict;
 package CPAN;
-$CPAN::VERSION = '2.27';
+$CPAN::VERSION = '2.28';
 $CPAN::VERSION =~ s/_//;
 
 # we need to run chdir all over and we would get at wrong libraries
@@ -558,7 +558,9 @@
         # 5.6.2 could not do the local() with the reference
         # so we do it manually instead
         my $old_loadcode = ${"$yaml_module\::LoadCode"};
+        my $old_loadblessed = ${"$yaml_module\::LoadBlessed"};
         ${ "$yaml_module\::LoadCode" } = $CPAN::Config->{yaml_load_code} || 0;
+        ${ "$yaml_module\::LoadBlessed" } = 1;
 
         my ($code, @yaml);
         if ($code = UNIVERSAL::can($yaml_module, "LoadFile")) {
@@ -569,19 +571,20 @@
             }
         } elsif ($code = UNIVERSAL::can($yaml_module, "Load")) {
             local *FH;
-            unless (open FH, $local_file) {
+            if (open FH, $local_file) {
+                local $/;
+                my $ystream = <FH>;
+                eval { @yaml = $code->($ystream); };
+                if ($@) {
+                    # this shall not be done by the frontend
+                    die CPAN::Exception::yaml_process_error->new($yaml_module,$local_file,"parse",$@);
+                }
+            } else {
                 $CPAN::Frontend->mywarn("Could not open '$local_file': $!");
-                return +[];
             }
-            local $/;
-            my $ystream = <FH>;
-            eval { @yaml = $code->($ystream); };
-            if ($@) {
-                # this shall not be done by the frontend
-                die CPAN::Exception::yaml_process_error->new($yaml_module,$local_file,"parse",$@);
-            }
         }
         ${"$yaml_module\::LoadCode"} = $old_loadcode;
+        ${"$yaml_module\::LoadBlessed"} = $old_loadblessed;
         return \@yaml;
     } else {
         # this shall not be done by the frontend

Modified: trunk/Master/tlpkg/tlperl/lib/Carp/Heavy.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/Carp/Heavy.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/Carp/Heavy.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -2,7 +2,7 @@
 
 use Carp ();
 
-our $VERSION = '1.50';
+our $VERSION = '1.52';
 $VERSION =~ tr/_//d;
 
 # Carp::Heavy was merged into Carp in version 1.12.  Any mismatched versions

Modified: trunk/Master/tlpkg/tlperl/lib/Carp.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/Carp.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/Carp.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -211,7 +211,7 @@
 }
 
 
-our $VERSION = '1.50';
+our $VERSION = '1.52';
 $VERSION =~ tr/_//d;
 
 our $MaxEvalLen = 0;
@@ -284,7 +284,7 @@
     my $cgc = _cgc();
 
     # Icky backwards compatibility wrapper. :-(
-    local @CARP_NOT = $cgc ? $cgc->() : caller();
+    local @CARP_NOT = scalar( $cgc ? $cgc->() : caller() );
     shortmess_heavy(@_);
 }
 
@@ -944,10 +944,10 @@
 Plain scalars and objects that implement C<CARP_TRACE> will not go through
 this formatter.  Calling C<Carp> from within this function is not supported.
 
-local $Carp::RefArgFormatter = sub {
-    require Data::Dumper;
-    Data::Dumper::Dump($_[0]); # not necessarily safe
-};
+    local $Carp::RefArgFormatter = sub {
+        require Data::Dumper;
+        Data::Dumper->Dump($_[0]); # not necessarily safe
+    };
 
 =head2 @CARP_NOT
 

Modified: trunk/Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -11,8 +11,8 @@
 use bytes ;
 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
 
-$VERSION = '2.093';
-$XS_VERSION = $VERSION; 
+$VERSION = '2.101';
+$XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
 @ISA = qw(Exporter);
@@ -61,11 +61,11 @@
     require XSLoader;
     XSLoader::load('Compress::Raw::Bzip2', $XS_VERSION);
     1;
-} 
+}
 or do {
     require DynaLoader;
     local @ISA = qw(DynaLoader);
-    bootstrap Compress::Raw::Bzip2 $XS_VERSION ; 
+    bootstrap Compress::Raw::Bzip2 $XS_VERSION ;
 };
 
 #sub Compress::Raw::Bzip2::new
@@ -132,7 +132,7 @@
 
     my ($bz, $status) = new Compress::Raw::Bzip2 [OPTS]
         or die "Cannot create bzip2 object: $bzerno\n";
-    
+
     $status = $bz->bzdeflate($input, $output);
     $status = $bz->bzflush($output);
     $status = $bz->bzclose($output);
@@ -139,7 +139,7 @@
 
     my ($bz, $status) = new Compress::Raw::Bunzip2 [OPTS]
         or die "Cannot create bunzip2 object: $bzerno\n";
-    
+
     $status = $bz->bzinflate($input, $output);
 
     my $version = Compress::Raw::Bzip2::bzlibversion();
@@ -356,7 +356,7 @@
 
 =head1 SUPPORT
 
-General feedback/questions/bug reports should be sent to 
+General feedback/questions/bug reports should be sent to
 L<https://github.com/pmqs/Compress-Raw-Bzip2/issues> (preferred) or
 L<https://rt.cpan.org/Public/Dist/Display.html?Name=Compress-Raw-Bzip2>.
 
@@ -384,8 +384,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2019 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2021 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
-

Modified: trunk/Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -10,12 +10,12 @@
 use bytes ;
 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS);
 
-$VERSION = '2.093';
-$XS_VERSION = $VERSION; 
+$VERSION = '2.101';
+$XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
 @ISA = qw(Exporter);
-%EXPORT_TAGS = ( flush     => [qw{  
+%EXPORT_TAGS = ( flush     => [qw{
                                     Z_NO_FLUSH
                                     Z_PARTIAL_FLUSH
                                     Z_SYNC_FLUSH
@@ -23,13 +23,13 @@
                                     Z_FINISH
                                     Z_BLOCK
                               }],
-                 level     => [qw{  
+                 level     => [qw{
                                     Z_NO_COMPRESSION
                                     Z_BEST_SPEED
                                     Z_BEST_COMPRESSION
                                     Z_DEFAULT_COMPRESSION
                               }],
-                 strategy  => [qw{  
+                 strategy  => [qw{
                                     Z_FILTERED
                                     Z_HUFFMAN_ONLY
                                     Z_RLE
@@ -36,17 +36,17 @@
                                     Z_FIXED
                                     Z_DEFAULT_STRATEGY
                               }],
-                 status   => [qw{  
+                 status   => [qw{
                                     Z_OK
                                     Z_STREAM_END
                                     Z_NEED_DICT
                                     Z_ERRNO
                                     Z_STREAM_ERROR
-                                    Z_DATA_ERROR  
-                                    Z_MEM_ERROR   
-                                    Z_BUF_ERROR 
-                                    Z_VERSION_ERROR 
-                              }],                              
+                                    Z_DATA_ERROR
+                                    Z_MEM_ERROR
+                                    Z_BUF_ERROR
+                                    Z_VERSION_ERROR
+                              }],
               );
 
 %DEFLATE_CONSTANTS = %EXPORT_TAGS;
@@ -54,12 +54,12 @@
 # Items to export into callers namespace by default. Note: do not export
 # names by default without a very good reason. Use EXPORT_OK instead.
 # Do not simply export all your public functions/methods/constants.
- at DEFLATE_CONSTANTS = 
+ at DEFLATE_CONSTANTS =
 @EXPORT = qw(
         ZLIB_VERSION
         ZLIB_VERNUM
 
-        
+
         OS_CODE
 
         MAX_MEM_LEVEL
@@ -125,14 +125,14 @@
     require XSLoader;
     XSLoader::load('Compress::Raw::Zlib', $XS_VERSION);
     1;
-} 
+}
 or do {
     require DynaLoader;
     local @ISA = qw(DynaLoader);
-    bootstrap Compress::Raw::Zlib $XS_VERSION ; 
+    bootstrap Compress::Raw::Zlib $XS_VERSION ;
 };
- 
 
+
 use constant Parse_any      => 0x01;
 use constant Parse_unsigned => 0x02;
 use constant Parse_signed   => 0x04;
@@ -153,7 +153,7 @@
 
 sub ParseParameters
 {
-    my $level = shift || 0 ; 
+    my $level = shift || 0 ;
 
     my $sub = (caller($level + 1))[3] ;
     #local $Carp::CarpLevel = 1 ;
@@ -186,13 +186,13 @@
     $self->{Error} = $error ;
     return $retval;
 }
-          
+
 #sub getError
 #{
 #    my $self = shift ;
 #    return $self->{Error} ;
 #}
-          
+
 sub Compress::Raw::Zlib::Parameters::parse
 {
     my $self = shift ;
@@ -211,10 +211,10 @@
         @entered = () ;
     }
     elsif (@_ == 1) {
-        my $href = $_[0] ;    
+        my $href = $_[0] ;
         return $self->setError("Expected even number of parameters, got 1")
             if ! defined $href or ! ref $href or ref $href ne "HASH" ;
- 
+
         foreach my $key (keys %$href) {
             push @entered, $key ;
             push @entered, \$href->{$key} ;
@@ -224,7 +224,7 @@
         my $count = @_;
         return $self->setError("Expected even number of parameters, got $count")
             if $count % 2 != 0 ;
-        
+
         for my $i (0.. $count / 2 - 1) {
             push @entered, $_[2* $i] ;
             push @entered, \$_[2* $i+1] ;
@@ -239,7 +239,7 @@
 
         my ($first_only, $sticky, $type, $value) = @$v ;
         my $x ;
-        $self->_checkType($key, \$value, $type, 0, \$x) 
+        $self->_checkType($key, \$value, $type, 0, \$x)
             or return undef ;
 
         $key = lc $key;
@@ -260,7 +260,7 @@
 
         $key =~ s/^-// ;
         my $canonkey = lc $key;
- 
+
         if ($got->{$canonkey} && ($firstTime ||
                                   ! $got->{$canonkey}[OFF_FIRST_ONLY]  ))
         {
@@ -275,7 +275,7 @@
         else
           { push (@Bad, $key) }
     }
- 
+
     if (@Bad) {
         my ($bad) = join(", ", @Bad) ;
         return $self->setError("unknown key value(s) @Bad") ;
@@ -319,7 +319,7 @@
         return $self->setError("Parameter '$key' must be an unsigned int, got '$value'")
             if $validate && $value !~ /^\d+$/;
 
-        $$output = defined $value ? $value : 0 ;    
+        $$output = defined $value ? $value : 0 ;
         return 1;
     }
     elsif ($type & Parse_signed)
@@ -329,7 +329,7 @@
         return $self->setError("Parameter '$key' must be a signed int, got '$value'")
             if $validate && $value !~ /^-?\d+$/;
 
-        $$output = defined $value ? $value : 0 ;    
+        $$output = defined $value ? $value : 0 ;
         return 1 ;
     }
     elsif ($type & Parse_boolean)
@@ -336,12 +336,12 @@
     {
         return $self->setError("Parameter '$key' must be an int, got '$value'")
             if $validate && defined $value && $value !~ /^\d*$/;
-        $$output =  defined $value ? $value != 0 : 0 ;    
+        $$output =  defined $value ? $value != 0 : 0 ;
         return 1;
     }
 #    elsif ($type & Parse_string)
 #    {
-#        $$output = defined $value ? $value : "" ;    
+#        $$output = defined $value ? $value : "" ;
 #        return 1;
 #    }
 
@@ -374,7 +374,7 @@
     return $self->{Got}{lc $name}[OFF_FIXED] ;
 }
 
-our $OPTIONS_deflate =   
+our $OPTIONS_deflate =
     {
         'AppendOutput'  => [1, 1, Parse_boolean,  0],
         'CRC32'         => [1, 1, Parse_boolean,  0],
@@ -394,7 +394,7 @@
     my $pkg = shift ;
     my ($got) = ParseParameters(0, $OPTIONS_deflate, @_);
 
-    croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " . 
+    croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " .
             $got->value('Bufsize')
         unless $got->value('Bufsize') >= 1;
 
@@ -408,11 +408,11 @@
         if ($windowBits & MAX_WBITS()) == 0 ;
 
     _deflateInit($flags,
-                $got->value('Level'), 
-                $got->value('Method'), 
-                $windowBits, 
-                $got->value('MemLevel'), 
-                $got->value('Strategy'), 
+                $got->value('Level'),
+                $got->value('Method'),
+                $windowBits,
+                $got->value('MemLevel'),
+                $got->value('Strategy'),
                 $got->value('Bufsize'),
                 $got->value('Dictionary')) ;
 
@@ -431,7 +431,7 @@
 }
 
 
-our $OPTIONS_inflate = 
+our $OPTIONS_inflate =
     {
         'AppendOutput'  => [1, 1, Parse_boolean,  0],
         'LimitOutput'   => [1, 1, Parse_boolean,  0],
@@ -439,7 +439,7 @@
         'ADLER32'       => [1, 1, Parse_boolean,  0],
         'ConsumeInput'  => [1, 1, Parse_boolean,  1],
         'Bufsize'       => [1, 1, Parse_unsigned, 4096],
- 
+
         'WindowBits'    => [1, 1, Parse_signed,   MAX_WBITS()],
         'Dictionary'    => [1, 1, Parse_any,      ""],
     } ;
@@ -449,7 +449,7 @@
     my $pkg = shift ;
     my ($got) = ParseParameters(0, $OPTIONS_inflate, @_);
 
-    croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " . 
+    croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " .
             $got->value('Bufsize')
         unless $got->value('Bufsize') >= 1;
 
@@ -465,7 +465,7 @@
     $windowBits += MAX_WBITS()
         if ($windowBits & MAX_WBITS()) == 0 ;
 
-    _inflateInit($flags, $windowBits, $got->value('Bufsize'), 
+    _inflateInit($flags, $windowBits, $got->value('Bufsize'),
                  $got->value('Dictionary')) ;
 }
 
@@ -489,13 +489,13 @@
                         'CRC32'         => [1, 1, Parse_boolean,  0],
                         'ADLER32'       => [1, 1, Parse_boolean,  0],
                         'Bufsize'       => [1, 1, Parse_unsigned, 4096],
-                 
+
                         'WindowBits'    => [1, 1, Parse_signed,   -MAX_WBITS()],
                         'Dictionary'    => [1, 1, Parse_any,      ""],
             }, @_) ;
 
 
-    croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " . 
+    croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " .
             $got->value('Bufsize')
         unless $got->value('Bufsize') >= 1;
 
@@ -505,7 +505,7 @@
     $flags |= FLAG_ADLER  if $got->value('ADLER32') ;
     #$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
 
-    _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'), 
+    _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'),
                  '') ;
 }
 
@@ -518,7 +518,7 @@
                 'CRC32'         => [1, 1, Parse_boolean,  0],
                 'ADLER32'       => [1, 1, Parse_boolean,  0],
                 'Bufsize'       => [1, 1, Parse_unsigned, 4096],
- 
+
                 'Level'         => [1, 1, Parse_signed,   Z_DEFAULT_COMPRESSION()],
                 'Method'        => [1, 1, Parse_unsigned, Z_DEFLATED()],
                 'WindowBits'    => [1, 1, Parse_signed,   - MAX_WBITS()],
@@ -526,7 +526,7 @@
                 'Strategy'      => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
             }, @_) ;
 
-    croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " . 
+    croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " .
             $got->value('Bufsize')
         unless $got->value('Bufsize') >= 1;
 
@@ -536,11 +536,11 @@
     $flags |= FLAG_ADLER  if $got->value('ADLER32') ;
 
     $pkg->_createDeflateStream($flags,
-                $got->value('Level'), 
-                $got->value('Method'), 
-                $got->value('WindowBits'), 
-                $got->value('MemLevel'), 
-                $got->value('Strategy'), 
+                $got->value('Level'),
+                $got->value('Method'),
+                $got->value('WindowBits'),
+                $got->value('MemLevel'),
+                $got->value('Strategy'),
                 $got->value('Bufsize'),
                 ) ;
 
@@ -556,10 +556,10 @@
 
     if ($status == Z_OK() && $_[2]) {
         my $byte = ' ';
-        
+
         $status = $self->scan(\$byte, $_[1]) ;
     }
-    
+
     return $status ;
 }
 
@@ -570,7 +570,7 @@
                 'Level'      => [1, 1, Parse_signed,   undef],
                 'Strategy'   => [1, 1, Parse_unsigned, undef],
                 'Bufsize'    => [1, 1, Parse_unsigned, undef],
-                }, 
+                },
                 @_) ;
 
     croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy"
@@ -577,7 +577,7 @@
         unless $got->parsed('Level') + $got->parsed('Strategy') +
             $got->parsed('Bufsize');
 
-    croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " . 
+    croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " .
             $got->value('Bufsize')
         if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1;
 
@@ -586,7 +586,7 @@
     $flags |= 2 if $got->parsed('Strategy') ;
     $flags |= 4 if $got->parsed('Bufsize') ;
 
-    $self->_deflateParams($flags, $got->value('Level'), 
+    $self->_deflateParams($flags, $got->value('Level'),
                           $got->value('Strategy'), $got->value('Bufsize'));
 
 }
@@ -931,18 +931,18 @@
     while (<>)
     {
         $status = $x->deflate($_, $output) ;
-    
+
         $status == Z_OK
             or die "deflation failed\n" ;
-    
+
         print $output ;
     }
-    
+
     $status = $x->flush($output) ;
-    
+
     $status == Z_OK
         or die "deflation failed\n" ;
-    
+
     print $output ;
 
 =head1 Compress::Raw::Zlib::Inflate
@@ -1210,26 +1210,26 @@
 
     use strict ;
     use warnings ;
-    
+
     use Compress::Raw::Zlib;
-    
+
     my $x = new Compress::Raw::Zlib::Inflate()
        or die "Cannot create a inflation stream\n" ;
-    
+
     my $input = '' ;
     binmode STDIN;
     binmode STDOUT;
-    
+
     my ($output, $status) ;
     while (read(STDIN, $input, 4096))
     {
         $status = $x->inflate($input, $output) ;
-    
+
         print $output ;
-    
+
         last if $status != Z_OK ;
     }
-    
+
     die "inflation failed\n"
         unless $status == Z_STREAM_END ;
 
@@ -1243,16 +1243,16 @@
 
     use strict ;
     use warnings ;
-    
+
     use Compress::Raw::Zlib;
-    
+
     my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1)
        or die "Cannot create a inflation stream\n" ;
-    
+
     my $input = '' ;
     binmode STDIN;
     binmode STDOUT;
-    
+
     my ($output, $status) ;
 
   OUTER:
@@ -1269,7 +1269,7 @@
         }
         while ($status == Z_OK && length $input);
     }
-    
+
     die "inflation failed\n"
         unless $status == Z_STREAM_END ;
 
@@ -1324,24 +1324,24 @@
 
     use strict ;
     use warnings ;
-    
+
     use Compress::Raw::Zlib;
-    
+
     my $x = new Compress::Raw::Zlib::Inflate()
        or die "Cannot create a inflation stream\n" ;
-    
+
     my $input = '' ;
-    
+
     my ($output, $status) ;
     while (read(STDIN, $input, 4096))
     {
         $status = $x->inflate($input, $output) ;
-    
+
         print $output ;
-    
+
         last if $status != Z_OK ;
     }
-    
+
     die "inflation failed\n"
         unless $status == Z_STREAM_END ;
 
@@ -1391,16 +1391,16 @@
 
     use strict ;
     use warnings ;
-    
+
     use Compress::Raw::Zlib;
-    
+
     my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1)
        or die "Cannot create a inflation stream\n" ;
-    
+
     my $input = '' ;
     binmode STDIN;
     binmode STDOUT;
-    
+
     my ($output, $status) ;
 
   OUTER:
@@ -1417,7 +1417,7 @@
         }
         while ($status == Z_OK && length $input);
     }
-    
+
     die "inflation failed\n"
         unless $status == Z_STREAM_END ;
 
@@ -1559,7 +1559,7 @@
 
 =head1 SUPPORT
 
-General feedback/questions/bug reports should be sent to 
+General feedback/questions/bug reports should be sent to
 L<https://github.com/pmqs/Compress-Raw-Zlib/issues> (preferred) or
 L<https://rt.cpan.org/Public/Dist/Display.html?Name=Compress-Raw-Zlib>.
 
@@ -1596,8 +1596,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2019 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2021 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
-

Modified: trunk/Master/tlpkg/tlperl/lib/Compress/Zlib.pm
===================================================================
--- trunk/Master/tlpkg/tlperl/lib/Compress/Zlib.pm	2022-03-14 10:03:11 UTC (rev 62700)
+++ trunk/Master/tlpkg/tlperl/lib/Compress/Zlib.pm	2022-03-14 10:08:50 UTC (rev 62701)
@@ -7,10 +7,10 @@
 use IO::Handle ;
 use Scalar::Util qw(dualvar);
 
-use IO::Compress::Base::Common 2.093 ;
-use Compress::Raw::Zlib 2.093 ;
-use IO::Compress::Gzip 2.093 ;
-use IO::Uncompress::Gunzip 2.093 ;
+use IO::Compress::Base::Common 2.101 ;
+use Compress::Raw::Zlib 2.101 ;
+use IO::Compress::Gzip 2.101 ;
+use IO::Uncompress::Gunzip 2.101 ;
 
 use strict ;
 use warnings ;
@@ -17,8 +17,8 @@
 use bytes ;
 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
 
-$VERSION = '2.093';
-$XS_VERSION = $VERSION; 
+$VERSION = '2.102';
+$XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
 @ISA = qw(Exporter);
@@ -126,7 +126,7 @@
     my @params = () ;
 
     croak "gzopen: file parameter is not a filehandle or filename"
-        unless isaFilehandle $file || isaFilename $file  || 
+        unless isaFilehandle $file || isaFilename $file  ||
                (ref $file && ref $file eq 'SCALAR');
 
     return undef unless $mode =~ /[rwa]/i ;
@@ -134,17 +134,17 @@
     _set_gzerr(0) ;
 
     if ($writing) {
-        $gz = new IO::Compress::Gzip($file, Minimal => 1, AutoClose => 1, 
-                                     %defOpts) 
+        $gz = IO::Compress::Gzip->new($file, Minimal => 1, AutoClose => 1,
+                                     %defOpts)
             or $Compress::Zlib::gzerrno = $IO::Compress::Gzip::GzipError;
     }
     else {
-        $gz = new IO::Uncompress::Gunzip($file, 
+        $gz = IO::Uncompress::Gunzip->new($file,
                                          Transparent => 1,
-                                         Append => 0, 
-                                         AutoClose => 1, 
+                                         Append => 0,
+                                         AutoClose => 1,
                                          MultiStream => 1,
-                                         Strict => 0) 
+                                         Strict => 0)
             or $Compress::Zlib::gzerrno = $IO::Uncompress::Gunzip::GunzipError;
     }
 
@@ -161,7 +161,7 @@
     return _set_gzerr(Z_STREAM_ERROR())
         if $self->[1] ne 'inflate';
 
-    my $len = defined $_[1] ? $_[1] : 4096 ; 
+    my $len = defined $_[1] ? $_[1] : 4096 ;
 
     my $gz = $self->[0] ;
     if ($self->gzeof() || $len == 0) {
@@ -171,7 +171,7 @@
         return 0 ;
     }
 
-    my $status = $gz->read($_[0], $len) ; 
+    my $status = $gz->read($_[0], $len) ;
     _save_gzerr($gz, 1);
     return $status ;
 }
@@ -185,7 +185,7 @@
         # Maintain backward compatibility with 1.x behaviour
         # It didn't support $/, so this can't either.
         local $/ = "\n" ;
-        $_[0] = $gz->getline() ; 
+        $_[0] = $gz->getline() ;
     }
     _save_gzerr($gz, 1);
     return defined $_[0] ? length $_[0] : 0 ;
@@ -199,7 +199,7 @@
     return _set_gzerr(Z_STREAM_ERROR())
         if $self->[1] ne 'deflate';
 
-    $] >= 5.008 and (utf8::downgrade($_[0], 1) 
+    $] >= 5.008 and (utf8::downgrade($_[0], 1)
         or croak "Wide character in gzwrite");
 
     my $status = $gz->write($_[0]) ;
@@ -282,8 +282,8 @@
 
     return _set_gzerr(Z_STREAM_ERROR())
         if $self->[1] ne 'deflate';
- 
-    my $status = *$gz->{Compress}->deflateParams(-Level   => $level, 
+
+    my $status = *$gz->{Compress}->deflateParams(-Level   => $level,
                                                 -Strategy => $strategy);
     _save_gzerr($gz);
     return $status ;
@@ -293,7 +293,7 @@
 {
     my $self = shift ;
     my $gz = $self->[0] ;
-    
+
     return $Compress::Zlib::gzerrno ;
 }
 
@@ -310,7 +310,7 @@
         $in = \$_[0] ;
     }
 
-    $] >= 5.008 and (utf8::downgrade($$in, 1) 
+    $] >= 5.008 and (utf8::downgrade($$in, 1)
         or croak "Wide character in compress");
 
     my $level = (@_ == 2 ? $_[1] : Z_DEFAULT_COMPRESSION() );
@@ -322,7 +322,7 @@
                                            MAX_MEM_LEVEL,
                                            Z_DEFAULT_STRATEGY,
                                            4096,
-                                           '') 
+                                           '')
             or return undef ;
 
     $err = $x->deflate($in, $output) ;
@@ -330,7 +330,7 @@
 
     $err = $x->flush($output) ;
     return undef unless $err == Z_OK() ;
-    
+
     return $output ;
 }
 
@@ -346,21 +346,21 @@
         $in = \$_[0] ;
     }
 
-    $] >= 5.008 and (utf8::downgrade($$in, 1) 
-        or croak "Wide character in uncompress");    
-        
+    $] >= 5.008 and (utf8::downgrade($$in, 1)
+        or croak "Wide character in uncompress");
+
     my ($obj, $status) = Compress::Raw::Zlib::_inflateInit(0,
-                                MAX_WBITS, 4096, "") ;   
-                                
-    $status == Z_OK 
+                                MAX_WBITS, 4096, "") ;
+
+    $status == Z_OK
         or return undef;
-    
-    $obj->inflate($in, $output) == Z_STREAM_END 
+
+    $obj->inflate($in, $output) == Z_STREAM_END
         or return undef;
-    
+
     return $output;
 }
- 
+
 sub deflateInit(@)
 {
     my ($got) = ParseParameters(0,
@@ -374,20 +374,20 @@
                 'dictionary'    => [IO::Compress::Base::Common::Parse_any,      ""],
                 }, @_ ) ;
 
-    croak "Compress::Zlib::deflateInit: Bufsize must be >= 1, you specified " . 
+    croak "Compress::Zlib::deflateInit: Bufsize must be >= 1, you specified " .
             $got->getValue('bufsize')
         unless $got->getValue('bufsize') >= 1;
 
     my $obj ;
- 
+
     my $status = 0 ;
-    ($obj, $status) = 
+    ($obj, $status) =
       Compress::Raw::Zlib::_deflateInit(0,
-                $got->getValue('level'), 
-                $got->getValue('method'), 
-                $got->getValue('windowbits'), 
-                $got->getValue('memlevel'), 
-                $got->getValue('strategy'), 
+                $got->getValue('level'),
+                $got->getValue('method'),
+                $got->getValue('windowbits'),
+                $got->getValue('memlevel'),
+                $got->getValue('strategy'),
                 $got->getValue('bufsize'),
                 $got->getValue('dictionary')) ;
 
@@ -394,7 +394,7 @@
     my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldDeflate"  : undef) ;
     return wantarray ? ($x, $status) : $x ;
 }
- 
+
 sub inflateInit(@)
 {
     my ($got) = ParseParameters(0,
@@ -405,7 +405,7 @@
                 }, @_) ;
 
 
-    croak "Compress::Zlib::inflateInit: Bufsize must be >= 1, you specified " . 
+    croak "Compress::Zlib::inflateInit: Bufsize must be >= 1, you specified " .
             $got->getValue('bufsize')
         unless $got->getValue('bufsize') >= 1;
 
@@ -412,8 +412,8 @@
     my $status = 0 ;
     my $obj ;
     ($obj, $status) = Compress::Raw::Zlib::_inflateInit(FLAG_CONSUME_INPUT,
-                                $got->getValue('windowbits'), 
-                                $got->getValue('bufsize'), 
+                                $got->getValue('windowbits'),
+                                $got->getValue('bufsize'),
                                 $got->getValue('dictionary')) ;
 
     my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldInflate"  : undef) ;
@@ -442,7 +442,7 @@
     my $output ;
     my $flag = shift || Compress::Zlib::Z_FINISH();
     my $status = $self->SUPER::flush($output, $flag) ;
-    
+
     wantarray ? ($output, $status) : $output ;
 }
 
@@ -461,7 +461,7 @@
 
 package Compress::Zlib ;
 
-use IO::Compress::Gzip::Constants 2.093 ;
+use IO::Compress::Gzip::Constants 2.101 ;
 
 sub memGzip($)
 {
@@ -473,13 +473,13 @@
                                            MAX_MEM_LEVEL,
                                            Z_DEFAULT_STRATEGY,
                                            4096,
-                                           '') 
+                                           '')
             or return undef ;
- 
+
     # if the deflation buffer isn't a reference, make it one
     my $string = (ref $_[0] ? $_[0] : \$_[0]) ;
 
-    $] >= 5.008 and (utf8::downgrade($$string, 1) 
+    $] >= 5.008 and (utf8::downgrade($$string, 1)
         or croak "Wide character in memGzip");
 
     my $out;
@@ -487,12 +487,12 @@
 
     $x->deflate($string, $out) == Z_OK
         or return undef ;
- 
+
     $x->flush($out) == Z_OK
         or return undef ;
- 
-    return IO::Compress::Gzip::Constants::GZIP_MINIMUM_HEADER . 
-           $out . 
+
+    return IO::Compress::Gzip::Constants::GZIP_MINIMUM_HEADER .
+           $out .
            pack("V V", $x->crc32(), $x->total_in());
 }
 
@@ -501,10 +501,10 @@
 {
     my $string = shift ;
 
-    return Z_DATA_ERROR() 
+    return Z_DATA_ERROR()
         if length($$string) < GZIP_MIN_HEADER_SIZE ;
 
-    my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) = 
+    my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) =
         unpack ('CCCCVCC', $$string);
 
     return Z_DATA_ERROR()
@@ -551,7 +551,7 @@
             if length ($$string) < GZIP_FHCRC_SIZE ;
         substr($$string, 0, GZIP_FHCRC_SIZE) = '';
     }
-    
+
     return Z_OK();
 }
 
@@ -566,24 +566,24 @@
 {
     # if the buffer isn't a reference, make it one
     my $string = (ref $_[0] ? $_[0] : \$_[0]);
- 
-    $] >= 5.008 and (utf8::downgrade($$string, 1) 
+
+    $] >= 5.008 and (utf8::downgrade($$string, 1)
         or croak "Wide character in memGunzip");
 
     _set_gzerr(0);
 
     my $status = _removeGzipHeader($string) ;
-    $status == Z_OK() 
+    $status == Z_OK()
         or return _set_gzerr_undef($status);
-     
+
     my $bufsize = length $$string > 4096 ? length $$string : 4096 ;
     my $x = Compress::Raw::Zlib::_inflateInit(FLAG_CRC | FLAG_CONSUME_INPUT,
-                                -MAX_WBITS(), $bufsize, '') 
+                                -MAX_WBITS(), $bufsize, '')
               or return _ret_gun_error();
 
     my $output = '' ;
     $status = $x->inflate($string, $output);
-    
+
     if ( $status == Z_OK() )
     {
         _set_gzerr(Z_DATA_ERROR());
@@ -606,7 +606,7 @@
         $$string = '';
     }
 
-    return $output;   
+    return $output;
 }
 
 # Autoload methods go after __END__, and are processed by the autosplit program.
@@ -938,23 +938,23 @@
 
     use strict ;
     use warnings ;
-    
+
     use Compress::Zlib ;
-    
+
     # use stdin if no files supplied
     @ARGV = '-' unless @ARGV ;
-    
+
     foreach my $file (@ARGV) {
         my $buffer ;
-    
+
         my $gz = gzopen($file, "rb")
              or die "Cannot open $file: $gzerrno\n" ;
-    
+
         print $buffer while $gz->gzread($buffer) > 0 ;
-    
+
         die "Error reading from $file: $gzerrno" . ($gzerrno+0) . "\n"
             if $gzerrno != Z_STREAM_END ;
-        
+
         $gz->gzclose() ;
     }
 
@@ -963,28 +963,28 @@
 
     use strict ;
     use warnings ;
-    
+
     use Compress::Zlib ;
-    
+
     die "Usage: gzgrep pattern [file...]\n"
         unless @ARGV >= 1;
-    
+
     my $pattern = shift ;
-    
+
     # use stdin if no files supplied
     @ARGV = '-' unless @ARGV ;
-    
+
     foreach my $file (@ARGV) {
         my $gz = gzopen($file, "rb")
              or die "Cannot open $file: $gzerrno\n" ;
-    
+
         while ($gz->gzreadline($_) > 0) {
             print if /$pattern/ ;
         }
-    
+
         die "Error reading from $file: $gzerrno\n"
             if $gzerrno != Z_STREAM_END ;
-        
+
         $gz->gzclose() ;
     }
 
@@ -994,14 +994,14 @@
 
     use strict ;
     use warnings ;
-    
+
     use Compress::Zlib ;
-    
+
     binmode STDOUT;  # gzopen only sets it on the fd
-    
+
     my $gz = gzopen(\*STDOUT, "wb")
           or die "Cannot open stdout: $gzerrno\n" ;
-    
+
     while (<>) {
         $gz->gzwrite($_)
           or die "error writing: $gzerrno\n" ;
@@ -1275,18 +1275,18 @@
     while (<>)
     {
         ($output, $status) = $x->deflate($_) ;
-    
+
         $status == Z_OK
             or die "deflation failed\n" ;
-    
+
         print $output ;
     }
-    
+
     ($output, $status) = $x->flush() ;
-    
+
     $status == Z_OK
         or die "deflation failed\n" ;
-    
+
     print $output ;
 
 =head1 Inflate Interface
@@ -1313,13 +1313,13 @@
 The function optionally takes a number of named options specified as
 C<< -Name=>value >> pairs. This allows individual options to be
 tailored without having to specify them all in the parameter list.
- 
+
 For backward compatibility, it is also possible to pass the parameters
 as a reference to a hash containing the name=>value pairs.
- 
+
 The function takes one optional parameter, a reference to a hash.  The
 contents of the hash allow the deflation interface to be tailored.
- 
+
 Here is a list of the valid options:
 
 =over 5
@@ -1409,27 +1409,27 @@
 
     use strict ;
     use warnings ;
-    
+
     use Compress::Zlib ;
-    
+
     my $x = inflateInit()
        or die "Cannot create a inflation stream\n" ;
-    
+
     my $input = '' ;
     binmode STDIN;
     binmode STDOUT;
-    
+
     my ($output, $status) ;
     while (read(STDIN, $input, 4096))
     {

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.